BDOS FUNKTION 59 - OVERLAY LADEN (LOADER Funktion)
Aufrufparameter
  Register  C = 3BH
  Register DE - Adresse der FCB oder 0000h
  FCB R0 & R1 - Lade-Adresse
  Top of Stack- Adresse für Ausführung nach dem Laden

FCB - Enthält einen 'geöffneten' FCB, in der die Bytes
      R0 und R1 die Lade-Adresse beinhalten
FCB = 0000h ist eine besondere Option ohne Übergabe
      eines FCBs. Stattdessen werden alle RSXen, die
      entsprechend markiert sind, entfernt

Diese Funktion ist nicht Bestandteil des BDOS sondern
die LOADER RSX übernimmt den Aufruf, wenn der LOADER
vorhanden ist. Der CCP benutzt diesen LOADER, um COM
oder PRL-Dateien mit oder ohne angefügte RSX zu laden.
Der CCP setzt die oberste Adresse auf dem Stack (SP)
auf 0100H gefolgt von 0000H, um die Kontrolle an das
geladene Programm zu übergeben.

Wenn die oberste Adresse auf dem (SP) 0100H ist und
keine RSXen nach dem Laden vorhanden sind, dann werden
der Sprungvektor in Adresse 6,7 und im SCB die Adresse
im Offset 99 auf den BDOS-Einsprung gesetzt, wodurch
der LOADER entfernt wird.

WICHTIG: wenn die Adresse auf dem (SP) nicht 0100h oder
die Lade-Adresse im FCB R0-R1 nicht dieselbe wie auf dem
(SP) ist, dann muss das aufrufende Programm sicherstellen,
das das geladene Programm nicht das aufrufende Programm
oder den Stack korrumpiert.

Zurückgegebene Parameter
  Wenn (SP) = 0100H
       Laden erfolgreich - übergibt Kontrolle nach 0100h
       Fehlerfall - Fehlermeldung ausgeben und Warmstart
  Wenn (SP) > 0100H, dann Rückgabe
       A = 00H bei Erfolg
       A = 0FEH bei falscher Adresse oder zu wenig Speicher
       A = 0FFH bei aktiven physikalischen und erweiterten
                Fehlern

Für einen größeren Einblick in diese Funktion sei auf
ANHANG E verwiesen - der Disassemblierung der Datei CCP.COM.
Falls die BDOS Funktion 59 genutzt werden soll, eine RSX zu laden, dann muss die COM Datei eine GENCOM Kopfseite beinhalten, eine NULL COM Seite gefolgt von der RSX und der Bitmap. Die Lade-Adresse muss 0100H sein.

Die GENCOM Seite besteht aus:
GENCOM HEADER (LOADER Funktion)
Offset Umfang Bedeutung
------ ------ -----------
  00H  01H    'C9H' kennzeichnet GENCOM
  01H  Wort   Länge des COM Programms, beginnend bei Offset 0100H
  03H  0Dh    Initialisierungsroutine im Kopf. Mit RET beendet
1. RSX
  10H  Wort   Offset zum Start des RSX Moduls 0000 = Ende der RSX
  12H  Wort   Länge des RSX Moduls (ohne Bitmap)
  14H  Byte   Auf 0FFH setzen wenn RSX nicht in ein gebanktes
              System geladen wird
2. RSX
  20H  Wort   Offset zum Start des RSX Moduls 0000 = Ende der RSX
  22H  Wort   Länge des RSX Moduls (ohne Bitmap)
  24H  Byte   Auf 0FFH setzen wenn RSX nicht in ein gebanktes
              System geladen wird
usw. bis RSX offset = 0000
 100H  01H    'C9H' kennzeichnet NULL COM Programm und setzt
              das Bit 1 im System Control Block, Offset 17H
Offset 3 bietet Unterstützung für eine Initialisierung und wird in Programmen wie GET und PUT verwendet, um den System Control Block umzuändern. Die Initialisierung wird nach dem Laden der RSXen ausgeführt, aber bevor die COM Datei korrekt nach 0100H abgelegt wird. Sie muss mit einer RET-Anweisung für die Rückkehr zum Loader abgeschlossen werden.
Letzte Änderung: 30.Mai 2006