SOL-20 Programme für JOYCE

Diese Maschine unterscheidet sich unter anderem vom JOYCE dadurch, dass sich der Videobereich im normalen Arbeitsspeicher befindet. Sie verwendet weiterhin IN- und OUT-Instruktionen für die Ein- und -ausgabe von Zeichen. Daneben gibt es noch IN/OUT-Anweisungen für andere Funktionen. Abschließend verfügt die SOL-Maschine über ein Betriebssystem namens SOLOS, das ebenfalls nicht kompatibel zum CP/M-Betriebssystem des Joyce ist. Während CP/M-Programme immer ab Speicheradresse 0100H geladen und ausgeführt werden, kann dies beim SOL prinzipiell jede Adresse sein. Sehr oft wird ein Programm in Adresse 0000H geladen und ausgeführt, was bei CP/M zu Kollisionen mit Systemadressen führen kann.

Um den Ablauf von SOL-Programmen zu analysieren, speziell den Zugriff auf den Videospeicher, habe ich ein Simulationsprogramm geschrieben. Alle mir bekannten SOL-Programme laufen ausschließlich auf der INTEL 8080-CPU, was den Simulator vereinfacht, da die Simulation der Z80-Befehle entfällt.
Das Programm wird aufgerufen mit
     INTSOL20 Datei [Startadresse]

SOL-20 Organisation:
  1. Das SOLOS beginnt bei Adresse C000H.
  2. Der SOL-Videospeicher beginnt bei Adresse CC00H. Jede der 16 Zeilen ist 64 Zeichen lang. Damit endet der Speicher bei (CC00H+16*64)-1 = D000H-1 = CFFFH.
  3. Wichtige I/O Ports sind:
    PortFunktion
    0FAHTastatur Statusport
    0FCHTastatur Datenport
    0FEHVideo Parameter Port

Vor jeder Instruktion prüft der Simulator, ob die Tastatur betätigt wurde. Bei ^C erfolgt ein Abbruch und bei ^S (XOFF) wird der Simulator bis zur Eingabe eines ^Q (XON) angehalten.
Mit ^T lässt sich die Ausgabe umschalten von normal (mit Angabe der Video-RAM-Koordinaten) auf verkürzt und umgekehrt. Die Ausgabe sieht wie folgt aus:

Der Simulator muss bei Speicherzugriff prüfen, wo die Speicheradresse liegt. Je nach Aktivität werden folgende Aktionen durchgeführt:
Speicherbereich ⇒0000...BFFFC000-CBFFCC00-CFFFD000-FFFF
Bedeutung ⇒ProgrammspeicherSOLOSVideo-Speicher????
Instruktion ⇓Aktion ⇓
PUSH (CALL)NormalFehler
POP (RET)
LD xx,(mem)WarnmeldungVideospeicher abbildenFehler
LD (mem),xxFehlermeldung
INC, DEC mem
RET, JP, CALLSOLOS-Routine ausführenFehlermeldung
Hierbei bedeuten:
Normal Die Instruktion wird entsprechend dem Original simuliert und ausgeführt.
Videospeicher abbilden Die Adresse im Video-Bereich wird vor der Ausführung der Instruktion umgewandelt in eine Adresse des Simulators.
SOLOS-Routine ausführen Soweit bekannt wird ein Unterprogramm ausgeführt, das der Funktion der SOLOS-Routine entspricht. (Ein Listing der Version 1.3 des SOLOS findet sich hier.)
Warnmeldung Es wird eine Meldung mit der Adresse der Instruktion ausgegeben und die Instruktion wird ausgeführt. Der geladene Wert ist aber nicht der der Originaladresse entsprechende.
Fehlermeldung Es wird eine Meldung mit der Adresse der Instruktion ausgegeben und der Simulator beendet.
Fehler Es wird eine Meldung ausgegeben und der Simulator beendet.
Wenn eine Port-Anweisung gefunden wurde, dann wird überprüft, ob der Port bekannt ist. In dem Fall wird Klartext angezeigt. Bei der Eingabe-Anweisung wird ein hexadezimales Byte gelesen und bei der Ausgabe-Anweisung wird ein hexadezimales Byte angezeigt.
Die bekannten Ports sind:
PortBedeutungPortBedeutung
0F8HStatus des seriellen Ports 0FCHTastatur Daten
0F9HSerielle Daten 0FDHParallele Daten
0FAHAllgemeiner Status Port
Tape Status
0FEHVideo Parameter
0FBHTape Daten 0FFHBewegungsschalter