Popmon monitor program

Some distant time in the past I replaced the two original monitor PROMs by a set of six PROMs. The labels on the chips read "Popmon", but I cannot recall the origin of this name. Perhaps I wrote Popmon myself, or adapted it from someone else. In the name "mon" probably stands for "monitor", but the meaning of "pop" is lost to me.

I also have a single PROM marked "IPL" (Initial Program Load?), that contains code to read an OS from a floppy diskette. This is the only PROM that was on the board when I retrieved it out of storage. Most likely I used the P1 with only the IPL PROM and the two floppy drives.

The missing chip appears to contain code to drive a printer.

File popmon.bin contains corrections to the faulty bits. It does not contain a replacement for the missing data between 0400 and 05FF. The source (popmon_annotated.2650) and assembly listing (popmon_annotated.lst) can also be downloaded here. The original sources are lost to me; these last two files have been reverse engineered

Popmon accepts the following commands.

A - Alter Memory (01ce)
Enter memory address Space to display next address ^ Caret to display previous address Hexvalues to replace
B - Breakpoint (00f8)
Enter memory address This location and next are replaced by 9b a2, indirect jump to 0x0022
C - Clear breakpoint (00bb)
Displays address of breakpoint and restores memory contents.
D - Dump to tape (03FA)
Enter start address, then enter end address. Data is written to tape (see below).
E - Execute (027f)
Enter memory address, press Enter Jumps to that location.
F..H - unused
I - Inspect Registers (0122)
enter number of the register C to change that value (enter the new value) any other character to prompt again 0 1,2,3 bank 0 4,5,6 bank 1 7,8 PSW
L - Load from tape (0328)
Read valid data from tape. Press Escape to cancel.
M - Execute ROM at 0x0600
?? Nothing there?
N..O - Unused
P - Execute ROM at 0x0400
Is missing. Possibly for extended commands: - 0617: display memory contents in 8-byte lines.
R - Run tape (00f0)
Enable tape-start. Press Escape to stop.
S..U = unused
V - Verify from tape (02a0)
Enter an address Contents of the tape are compared against that memory location. Press Escape to cancel.
W - Erase screen (021c)
X - Execute RAM at 0x2000
Y - Execute RAM at 0x1510
Z - Extended commands
ZS - Move Memory Contents (07aa)
Enter from, until, destination addresses Copy the block «from,until» to the location starting at «destination»
ZG - Compare Memory Contents (080C)
Enter from, until, reference addresses Compare the locations «from,until» to the locations starting at «reference»
ZH - Display Memory (071f)
Enter address, a screenful of memory contents are shown (hex and ascii). Press space to continue, or Return to stop.
ZTR - Disassembler (088e)
Clears the screen, then presents an @-prompt Read one character (either a P or not a P), then read a starting address A page of disassembled instructions at that address is shown. Press Return to enter a new address. Press Escape to return to the commandline. Or press any other key to continue. >>>!!!! When entering a P, uses subroutine 0x0552 (printscreen?) which does not exist!!
ZTX - Missing (0b8e)
>>>!!!! There are no instructions in ROM at this address (0x0b8e).
ZJ - Show text from cassette (086c)
Read from the serial input (cassette interface) and echo to the screen. Press any key to stop.

Tape format

bit 0 = 2400 Hz
bit 1 = 1200 Hz
This is normally the other way around. The FLAG signal from the CPU is inverted.

Byte written with one startbit (0) and 3 stopbits (1s).
Least significant bit is written first.
Eg: 3A is written as 0 0 1 0 1 1 1 0 0 1 1 1

Bytes are written in blocks.
Each block starts with a header:
  Colon		byte 3A, ascii ':'
  Addr hi	address in which to load the block
  Addr lo
  Length	length of the block (length - 1)
  Sumcheck	sumcheck over the header, including colon
  three bit delay
  data		data contents of the block
  Sumcheck	sumcheck over the data

Sumcheck is computed by EXOR followed by Rotate Left

This page is part of my P1 restoration website.

Eelco Vriezekolk.
Questions or remarks? Send me an email on eelco[at-sign]ztpe[little dot]nl