RSXen

Eine RSX (Resident System Expansion) erlaubt u.a. die Erweiterung von BDOS-Funktionen. Sie wird auch dann eingesetzt, wenn Teile von Programmen im oberen Teil des Speichers liegen. Die CP/M+-Dienstprogramme GET und PUT sind solche Programme mit einer RSX.
Der Artikel „Systemerweiterungen unter CP/M-Plus" ist eine exzellente Abhandlung über die Funktion einer RSX.
Zum Verbinden einer normalen .COM-Datei mit einer .RSX-Datei steht das CP/M-Programm GENCOM zur Verfügung. Hier zunächst zwei Programme, die RSXen bearbeiten:

GENRSX.MAC GENCOM erlaubt das Anhängen und Löschen einer RSX an/von einer .COM-Datei. Im letzten Fall geht die .RSX-Datei jedoch verloren. GENRSX extrahiert eine vorhandene RSX.
RSXCOM.MAC Eine .RSX-Datei ist eigentlich eine .PRL-Datei (Page ReLative) und besteht aus zwei Teilen:
  • Der Programm Code, allerdings nicht bezogen auf die normale Adresse 0100 sondern auf 0000.
  • Der Korrektur Code. Hier stehen (bitweise) die Adressen, an denen eine Korrektur der Page vorgenommen werden muss.
RSXCOM erstellt eine normale .COM-Datei aus einer .RSX-Datei.
Diese beiden Programme machen hauptsächlich im Umfeld des „Reverse Engineering" Sinn.
Oftmals ist es interessant, die Speicherbelegung inklusive installierter RSXen zu ermitteln. Das folgende Programm gibt eine Menge an Informationen darüber aus.
RSXSHOW.MAC Basierend auf dem PD-Programm RSXMAP.C ist RSXSHOW.MAC entstanden. RSXMAP.C ist fehlerhaft, wenn z.B. ein Debugger (wie etwa SID) im Speicher liegt oder BIOS/BDOS-Vektoren verändert wurden. RSXSHOW.MAC zeigt neben den üblichen Adressen auch die „echten" aus dem SCB an.


Es sammelten sich im Laufe der Zeit etliche Programme, die eine RSX beinhalteten. Hier eine Übersicht über diese Tools:

ANSI RSX Das Projekt ANSI ist ein Filter, der ESCape-Sequenzen nach dem ANSI-Standard umsetzt in die des Joyce.
VIDEO DUMP Die RSX VIDDUMP ist ein Filter, der die Ausgabe auf die Konsole untersucht und Kontrollzeichen ausgibt. Nützlich ist die RSX zur Analyse unbekannter Bildschirm-Kontrollzeichen. Die Ausgabe wird unterteilt in:
00H-1AH:Ausgabe als Hex-Byte <xx>
1BH:ESCape-Folgezeichen als <xx> ausgeben
1CH-1FH:Ausgabe als Hex-Byte <xx>
20H-7EH:Normale Ausgabe
7FH:Ausgabe als Hex-Byte <xx>
80H-FFH:Ausgabe als Hex-Byte <xx> in inverser Darstellung
Interrupts Als ich mit Kermit arbeitete, hatte ich die Idee, die serielle Schnittstelle im Interrupt-Verfahren zu betreiben. Hier die Programmierung, die allerdings nicht über ein Versuchsstadium hinweggekommen ist.
WHM [WHM ist ein Werkzeug, damals vertrieben von der englischen Firma HiSoft. Im Paket waren die Quelldateien dabei, jedoch nicht die Hauptdatei; diese wurde von mir disassembliert.].
Hinter WHM (Write Hand Man) verbirgt sich eine Sammlung von nützlichen kleinen Werkzeugen.

Im PD-Umfeld wurden einige interessante RSX zur Verfügung gestellt, die ich disassembliert habe.

HISTORY Die RSX erlaubt das Abrufen vorher eingegebener Kommandos mittels Cursor-Tasten.
CP/M 2 Diese RSX erlaubt es Programmen, die im „reinen" CPM 2.x Umfeld programmiert wurden, ohne Absturz zu laufen. (Bekanntlich gibt es ja einige Inkompatibilitäten zwischen CPM 2.x und CPM 3.x, siehe dazu auch den Artikel „CP/M-Plus: Lohnt Umsteigen?".)
SPOOLER CP/M ist bekanntlich ein gepolltes System. Der Programmierer muss dafür sorgen, dass sporadisch geprüft wird, ob ein Gerät bereit ist, ein Zeichen zu senden oder zu empfangen. Hier setzt nun diese RSX an - sie prüft bei einem Systemaufruf in den Eingabepausen der Tastatur, ob gedruckt werden kann.
Ein Artikel, der sich mit der simultanen Ein-/Ausgabe in gepollten System beschäftigt, findet sich in „Simultaneous Input and Output for Your 8080".

Im Laufe der Zeit habe ich einige RSXen geschrieben, die das Verhalten des Betriebssystems untersuchen. Hier eine Übersicht über diese Experimental-Werkzeuge:

BDOSALL.MAC BDOSALL.RSX gibt die Aktivitäten aller BDOS-Aufrufe mit den entsprechenden Parametern aus.
BDOSREP.MAC BDOSREP.RSX ist etwas schweigsamer und begnügt sich mit den BDOS-Aufrufen, die sich mit Dateien beschäftigen.
FCBREP.MAC FCBREP.RSX ist ähnlich BDOSREP.RSX, gibt aber noch mehr Infos über die Dateien aus.
FBREAK.MAC FBREAK.RSX erlaubt den Abbruch eines Programms, wenn gerade ein BDOS-Aufruf ausgeführt wird.