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:

  1. SIMON is entered at address 0000H, the normal start address for the Z80.
  2. The ROM is copied into RAM, typically at 0F000H.
  3. A jump is made to the boot code. Everything runs in RAM from this point.
  4. The SIMON ROM is paged out, leaving RAM from 0000H.
  5. SIMON resets the video card so that it is ready for use.
  6. Drive A is checked. If there is no disk in it then the NO DISK error message is given.
  7. 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.
  8. If the disk is ok then the first sector of Track 0 is loaded from the disk into high memory.
  9. 128 bytes are then copied from 0FC2EH to 0000H
  10. 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.
  11. 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.

Advertisements