SIMON was a simple machine code monitor incorporated into the boot ROM. Normally, on a floppy disk system, the initial message displayed would be “Insert Disk in drive A”. SIMON could be entered at this point by typing Control/S. This simple system wasn’t user friendly. It converted all typed characters to upper case and ignored Backspace.
The commands were:
- B – Boot disk
- C – Copy memory
- E – Execute from address
- F – Fill memory with a byte
- M – Modify memory
- O – Output to a port
- Q – Query a port
- T – Tabulate memory contents
B – Jumps to the start of the EPROM and is equivalent to pressing the Reset key.
C – Copies a block of memory to another location.
E <address> – makes a CALL to an address. Return to SIMON is achieved by a RETurn command.
F <start> <end> <value – Fills the memory from to inclusive with <value>.
M <address> – Displays memory and allows it to be changed if required. e.g.
>>M1000 (Command typed in response to prompt)
1000 – FE _ (Cursor)
Typing a Return leaves the contents unchanged and the next location will be displayed. Change the value by typing a new one followed by Space or Return. Any non-hex character aborts the command without modifying the current contents. Typing “-” moves back one address.
O <port> <value> – Outputs <value> to port address <port>.
Q <port> – Reads and displays the byte value in hex.
T <address> <lines> – Displays the contents of memory starting at <address>. Each line of the display contains 16 consecutive bytes. The command terminates when the number of <lines> has been reached.
Several vector addresses in the EPROM could be called to get required functions:
- F000 COLD Cold start
- F003 CHRIN Get a character from the keyboard. it is converted to upper case and echoed to the screen.
- F006 CHROUT Output a character to the screen.
- F009 P2HEX Print (A) as two Hex characters.
- F00C P4HEX Print (HL) as four HEX characters.
- F00F SPACE Print a space.
- F012 CRLF Print a carriage return.
The boot system
SIMON was a first-stage 4kB ROM designed to be switched out after the initial boot. There were 2 different versions, one for NASCOM systems and one for Gemini. The Nascom version seems to have been back-ported as originally SIMON was only supplied with Gemini systems that included hard disks. The Gemini processor cards normally came with RP/M.
NASCOM system initialisation went something like this:
- SIMON is entered at address 0000H, the normal start address for the Z80.
- The ROM is copied into RAM, typically at 0F000H.
- A jump is made to the boot code. Everything runs in RAM from this point.
- The SIMON ROM is paged out, leaving RAM from 0000H.
- SIMON resets the video card so that it is ready for use.
- Drive A is checked. If there is no disk in it then the NO DISK error message is given.
- If a disk is found, it is tested to see if it can be read correctly. If it can’t then the READ ERROR message is given.
- If the disk is ok then the first sector of Track 0 is loaded from the disk into high memory.
- 128 bytes are then copied from 0FC2EH to 0000H
- The disk is validated by comparing the first 2 bytes with an internal reference. If there is an error then WRONG DISK is printed to the display.
- A jump is then made to the entry point at 0002H to start the Cold Boot.
In the event of an error SIMON fell back to run as a monitor program for debugging.
The Gemini version is similar, but at step 8 it reads Track 0 directly to address 0000H, but does not read any further data after the first 128 bytes. Step 9 is thus redundant. The remaining bytes are discarded without being stored.