Meine ersten Programmierversuche am JOYCE waren mit dem CP/M 2.2 Assembler ASM, weil ich damals nur von ihm ein Handbuch vorliegen hatte.
Völlig unbefriedigend war die Tatsache, dass beim ASM eine einzige Datei als Quelle vorliegen musste - bei längeren Programmen eine Strapaze!
Als ich dann Unterlagen über den RMAC bekam, wurde dies anders, weil es der RMAC erlaubte, verschiebbare .REL (relocatable, relozierbar) Dateien zu erzeugen, die später dann mit einem Linker zu einer Datei zusammengefügt werden konnten.
Der Vorteil ist also hier, dass vorab Programmteile (Module) assembliert werden können.
Diese können dann mit einem Hilfsprogramm (Librarian) in einer Bibliothek verwaltet werden.
Nach dem Assemblieren des Hauptprogrammes (das auch wieder aus einzelnen Moduln bestehen kann), wird dann der Linker angewiesen, aus der Bibliothek benötigte Module dazuzuladen.
Ich habe damals folgendes Entwicklungspaket verwendet:
- Assembler: Zunächst den RMAC von Digital Research, der zum Lieferumfang von CP/M PLUS gehörte.
Danach den M80 von Microsoft.
Zusätzlich zum RMAC, der lediglich die 8080-Mnemonics kannte, konnte nun auch in Z80-Mnemonic programmiert werden.
Später kam dann der SLR-Assembler, der sehr schnell war, allerdings nur Z80-Mnemonics erkannte.
Allen Assemblern gemein ist, dass sie das Microsoft-REL-Format (hier englisch) unterstützen.
- Linker: Hier kam für mich von vornherein nur LINK von Digital Research zum Einsatz.
Dieses Programm unterstützt die Generierung einer RSX-Datei und ansatzweise den Overlay-Mechanismus.
- Librarian: Auch hier habe ich ein Produkt von Digital Research verwendet, nämlich LIB.
LIB unterstützt das indizierte REL-Format (IRL).
Das bedeutet, dass Bibliotheken schneller durchsucht werden.
Hier eine Beschreibung des DR-IRL-Format (hier englisch).
- Debugger: Es gibt einige komfortablere Debugger, aber auch hier habe ich ein Produkt von Digital Research berwendet, zuerst SID, später dann ZSID.
ZSID hat die gleiche Funktionalität wie SID, jedoch mit Unterstützung der Z80-Syntax.
Allerdings gab es anfangs Probleme mit dem Breakpoint - hier gab es Konflikte mit dem JOYCE-Interruptvektor.
Da viele Definitionen in den Modulen (z.B. BDOS-Funktionen) immer wieder benötigt werden, habe ich ein Modul geschrieben, das z.B. mit dem Assembler-Befehl
maclib baselib.lib
in den Quelltext der Module eingefügt werden sollte.
Ähnliches gilt allgemein für die Assemblerprogrammierung. Auch hierfür existiert eine solche Definitionsdatei:
maclib base80.lib
Einige Hinweise zur Bibliothek finden sich hier.
Die aufgebaute Bibliothek besteht aus den folgenden Gruppen, deren Routinen hier alphabetisch aufgeführt sind:
Bei der Gestaltung der Bibliothek ist es wichtig, auf eine bestimmte Reihenfolge zu achten.
Einige Hinweise dazu finden sich hier
Es gibt zwei weitere erwähnenswerte Bibliotheken, mit denen ich gearbeitet habe:
-
SYSLIB ist eine Sammlung von Routinen hauptsächlich für das ZCPR-Umfeld.
(Hätte ich SYSLIB schon gekannt, als ich meine Library geschrieben hatte, hätte ich es mir erspart, das Rad neu zu erfinden).
SYSLIB ist kompatibel zum Microsoft-REL-Format und besteht aus folgenden Modulen:
- SYSLIB: allgemeine Routinen
- Z3LIB: ZCPR3 Routinen
- ZSLIB: ZSDOS Clock Routinen
- VLIB: Videoroutinen für ZCPR3-Systeme
- DSLIB: Clock Routinen
-
ZSMLIB ist eine Sammlung von C ähnlichen Routinen.
Leider ist ZSMLIB nicht kompatibel zum Microsoft-REL-Format.
Dafür gibt es einen eigenen Assembler, Linker und Librarian.
Die Syntax des Assemblers ist allerdings anders als die des M80, do dass die Quellen ebenfalls nicht kompatibel sind.
|
|