SOL computer games running on the Joyce

Compared to the Joyce, this machine differs in the location of the video memory, for example. The video memory of the SOL machine shares the CPU ram area. The Joyce holds it in a different memory bank. Also the SOL machine uses IN and OUT instructions for character in/output. Other ports are used for further control. Finally the SOL machine makes use of an operation system called SOLOS, which is incompatible to the Joyce CP/M. While CP/M programs always start at address 0100H, SOL programs may start anywhere. Often programs start at address 0000H. This would collide with CP/M system addresses.

I wrote a simulator to analyze SOL-20 programs, especially looking for video ram access. All SOL programs known to me are running on an INTEL 8080 CPU. This simplifies the simulator because the Z80 instructions will be omitted.
The program will be executed by
     INTSOL20 file [start address]

SOL-20 organisation:
  1. The SOLOS starts at address C000H.
  2. The SOL video memory starts at address CC00H. Each of the 16 rows contains up to 64 characters. Threfore the last address of the video memory is (CC00H+16*64)-1 = D000H-1 = CFFFH.
  3. The main I/O ports are:
    PortFunction
    0FAHKeyboard status port
    0FCHKeyboard data port
    0FEHVDM port

The simulator checks the keyboard input at each instruction fetch cycle. If it detects a ^C, the simulator aborts. In case of ^S (XOFF), output will be stopped until ^Q (XON) is typed.
To toggle from default (includes coordinates of screen) to short screen display use ^T. The display looks as follows:

The simulator examines the memory address each time a ram access takes place. Dependent on this address one of the following activities must be performed:
Memory range ⇒0000...BFFFC000-CBFFCC00-CFFFD000-FFFF
Meaning ⇒Program memorySOLOSVideo memory????
Instruction ⇓Activity ⇓
PUSH (CALL)NormalError
POP (RET)
LD xx,(mem)WarningMap video ramError
LD (mem),xxError message
INC, DEC mem
RET, JP, CALLExecute SOLOS routineError message
Denotation:
Normal The instruction will be executed accordingly.
Map video ram The address of the video ram will be mapped into an address within the simulator before executing the instruction.
Execute SOLOS routine If a known address is found, a subroutine will be executed to perform the corresponding SOLOS routine. (A listing of SOLOS version 1.3 may be found here.)
Warning A message telling the address of the instruction will be printed and the instruction will be executed. Note that a random but not the original value is loaded instead.
Error message A message telling the address of the instruction will be printed and the simulator stops.
Error A message will be printed and the simulator stops.
If the simulator detects a port instruction, it checks whether it is known or not. If a known port is found, clear words will be displayed. If an IN instruction is found, a hex value will be read from keyboard. In case of an OUT instruction, the byte sent to the port will be displayed.
The known ports are:
PortMeaningPortMeaning
0F8HSerial status port 0FCHKeyboard data
0F9HSerial data 0FDHParallel data
0FAHStatus port general
Tape status port
0FEHVDM display parameter port
0FBHTape data 0FFHSense switches