CP/M ist ein kompaktes und kleines System. Für manche Hardware wie Drucker oder RAM-Floppy wünscht man sich zusätzliche Treiber oder auch einen vernünftigen Eingabeeditor für die Kommandozeile; ohne dass gleich ein neues BIOS programmiert werden muss, in dem diese Treiber ständig vorhanden sind. Solche Treiber sind die Aufgabe von residenten Systemerweiterungen.
Systemerweiterungen für CP/M 2.2 zu schreiben ist gar nicht so einfach. Ein Problem ist, dass der Z80-Code eigentlich mit absoluten Adressen arbeitet und nicht an beliebiger Stelle im Speicher stehen kann. Ein anderes Problem ist die Speicheraufteilung unter CP/M. Anwenderprogramme können den gesamten TPA-Speicher von 100h bis BDOS-1 nutzen (notfalls sogar bis BIOS-1). Systemerweiterungen müssen dies beachten und die Systemadressen für BDOS- und BIOS-Einsprung umhängen.
Zur Lösung dieser Probleme gibt es verschiedene Ansätze. CP/M 3 bringt mit den RSX eine Lösung mit. Für CP/M 2.2 gibt es folgende Lösungen:
In der c't 1/87 und 2/87 gab es interessante Artikel über resident system module für CP/M 2.2, vergleichbar mit den RSX für CP/M 3. Es handelt sich hier um nachladbare kleine Programme, die etwa BDOS oder BIOS erweitern, wie zusätzliche Gerätetreiber o.ä.
CP/M 2 lernt dazu. Modulare Systemerweiterungen auch für das 'alte' CP/M von Eckhard Lieber und Thomas von Massenbach Teil 1 c't 1987, Heft 1, S. 124-135; Teil 2 c't 1987, Heft 2, S. 78-85
Hier kommt das PRL-Format (http://www.seasip.info/Cpm/prl.html) zum Einsatz.
Beide Autoren und auch die c't haben der Veröffentlichung der Artikel im Internet zugestimmt.
Auch beim RAM-Floppy-Treiber zur DDR-RAM-Floppy RAF bzw. dessen Nachbau RAF2008 ( → www.robotrontechnik.de) kommt das PRL-Format zum Einsatz, um den Treiber ans aktuelle TPA-Ende zu schieben. Im Unterschied zur obigen Lösung gibt es aber kein extra Ladeprogramm. Das Verschieben übernimmt ein kurzer Lader, der vor dem eigentlichen Treiber im Programmcode steht. Ich habe den originalen Treiber reassembliert und daraus einen Patcher entwickelt, der Programme wie den RAM-Floppy-Treiber erzeugt.
Der eigentliche Treiber wird mit dem M80-Assembler und CSEG (ohne ORG-Adresse!) assembliert. Der Digital Research- Linker LINK131.COM erzeugt daraus beim Aufruf mit dem Parameter op eine PRL-Datei; diese umfasst den Treiber (auf Adresse 100h gelinkt) und die Verschiebe-Informationen. Mit meinem Patcher PRL2COM wird in diese PRL-Datei der Loader gepatcht und der Dateityp in COM geändert, so entsteht die gewünschte residente Systemerweiterung.
m80.com =treiber link.com treiber[op] prl2com treiber.prl
Wie immer gibt es im Downloadpaket die kompletten Quelltexte und weitere Informationen.