LINK.COM
1 erlaubt zwar das Erzeugen von Overlay-Dateien2, jedoch wird nach dem Linken ausgegeben, dass zwei Labels fehlen, nämlich ?ovlay
und ?ovla0
.
Dies sind zwei Entry-Punkte, die aus der PL/I Bibliothek stammen.
Im Public Domainbereich gab es eine alternative Quelle in der SIG/M Vol. 2363.
(Später habe ich die Bibliothek PLILIB.IRL
gefunden, in der sich das gesuchte Modul befand4).
Da ich die SIG/M Quelle anfangs nicht kannte und auch nicht wusste, welche Parameter für den Aufruf zu den PL/I Bibliotheks-Routinen übergeben werden mussten, habe ich eine andere Lösung gesucht.
Die Idee war, das von LINK.COM
erzeugte PRL bzw. SPR-Format zu verwenden.
Im vorliegenden Fall werden SPR-Module vorausgesetzt, die mit dem Kommando “LINK Datei [OS]
” erzeugt werden.
Dazu habe ich zwei Hilfsprogramme und das eigentliche Lademodul geschrieben, das aus einer Overlay-Datei das entsprechende Modul lädt.
Beschreibung der Programme und des Moduls:
Name | Aufruf | Beschreibung |
---|---|---|
PRL2OVR |
PRL2OVR prl_file [ovm_file]
|
Dieses Hilfsprogramm verkleinert den Header der .SPR-Datei.
Ursprünglich ist diese 256 Bytes lang und beinhaltet lediglich die Länge des Programmcodes.
PRL2OVR kopiert nur die ersten 128 Bytes des Headers und hängt daran den Programmcode an.
|
OVLBLDPR |
OVLBLDPR [-] ovr_file list_of_ovm_files
|
Dieses Hilfsprogramm erstellt aus den Overlay-Modulen das komplette Overlay.
Weiterhin wird eine Textdatei erstellt, in der die Länge und der Startrekord des jeweiligen Moduls definiert sind.
Diese Datei kann dann in das Hauptprogramm übenommen werden (z.B. mit INCLUDE ).
Mit der Option “–” kann die Erzeugung dieser Datei unterdrückt werden.
|
LDPRL | Diverse Parameter |
Dies ist das Modul, das in einem Programm ein Overlay-Modul in den Speicher lädt.
Im Assembler muss dazu das Symbol LODOVL als EXTERN deklariert werden.
Die Parameter werden unten genauer erklärt.
|
Beschreibung der Parameter für das Modul LDPRL
:
Aufruf | ||
---|---|---|
Parameter | Übergabe im Register | Beschreibung |
Startrekord | L |
Gibt den Startrekord für das zu ladende Modul im Overlay an |
Modullänge | H |
Gibt die Länge für das zu ladende Modul im Overlay an |
Externe Tabelle | ^BC |
Adresse einer Tabelle, die Zugriff auf Routinen ausserhalb des Moduls erlaubt |
Ladeadresse und FCB | ^DE |
Adresse eines Parameterblocks mit
|
Rücksprung | ||
Parameter | Register/Carry-Flag | Beschreibung |
Ergebnis | Carry |
Im Fehlerfall ist die Carry-Flag gesetzt |
Ladeadresse | ^HL |
Wirkliche Ladeadresse, beginnend mit einer Seitengrenze (0xPP00 ) |
Endadresse | ^DE |
Erste freie Adresse nach dem Modul |
Aufbau eines Overlay-Modules:
Das erste Byte in einem Overlay-Modul definiert, ob externe Routinen verwendet werden oder nicht:
Ohne externe Aufrufe | Mit externen Aufrufen | Beschreibung |
---|---|---|
NOP |
JP START JP EXT_1 JP EXT_2 ... JP EXT_n NOP START:.......... |
|
1. | Im Handbuch findet sich eine Beschreibung von LINK.COM |
2. | Im Anhang E wird die Erzeugung von Overlay-Dateien beschrieben |
3. | Die Gruppe SIG/M (Special Interest Group/Microcomputers), ein Teil des Amateur Computer Clubs aus New Jersey, hatte zur regulären Ausgabe von Public Domain Software diese auf Disketten zusammengestellt. Die SIG/M Disketten entstanden ab 1980 und die Ausgaben 000 bis 310 sind hier zu finden. |
4. |
Das PL/I Paket besteht aus pli80_13
(beinhaltet PLILIB.IRL ) und plm80x80 (mit PLMLANG.DOC (PL/M-80 Language Summary)).
Ich habe das Modul zum Laden aus einem Overlay disassembliert und hier zur Information ausgestellt.
|
Werner Cirsovius | 1989, zusammengestellt August 2009, erweitert November 2012 |