Kopf und Aufbau einer RSX und mit GENCOM erzeugten COM-Datei

Diese Übersicht beschreibt den Aufbau der Köpfe einer einzelnen und einer installierten RSX.
Eine RSX wird bekanntlich assembliert wie jedes normale Programm, jedoch mit einem speziellen 27 Byte langen Kopf, der hier der Vollständigkeit halber dargestellt ist:
Der Kopf einer RSX
SERIAL: db  0,0,0,0,0,0 ;BDOS-Seriennummer
START:  jp  RSXStart    ;Sprung zum Beginn des RSX-Codes
NEXT:   jp  $-$         ;Sprung zum START des folgenden Moduls
                        ;(Adresse wird vom Lader eingesetzt)
PREV:   dw  0           ;Platzhalter fuer die Adresse des
                        ;vorhergehenden RSX-Moduls
REMOVE: db  0ffh        ;'Remove'-Merker
NONBANK:db  0           ;'Nonbank'-Merker
NAME:   db  'RSX Name'  ;Name des RSX-Modules
LOADER: db  0           ;0FFh markiert den Lader
RESERVE:dw  0           ;reserviert

RSXstart:               ;Hier folgen die RSX-Routinen
                .
                .
                .
Die Übersicht beschreibt wie
  1. eine RSX mit Vorspann (Kopf) und Nachspann aufgebaut ist und
  2. eine RSX an eine COM-Datei angebunden wird.
Aufbau einer .RSX- aus einer .PRL-Datei
(1) PRL Kopf - 256 Bytes

	DB	0	;Immer 0
	DW	Bytes	;Anzahl der Bytes im RSX-Programm. Diese
			;umfassen den Code und initialisierte
                        ;Gruppen von Daten.
	DB	0	;Immer 0
	DW	BSS	;Anzahl reservierter Bytes von nicht
                        ;initialisierten Daten.
			;Immer 0 in einer OVL Datei.
	DB	0
	DW	Ladead	;Ladeadresse. Hier immer 0.
	DB	0
	DW	CSBASE	;BIOS Link. Immer 0, außer Link-80 mit
			;der Option [B] angewendet wird. Dann ist das
			;die Basisadresse für die Code-Gruppe.
	DS	244	;Unbenutzt.

(2) Code / Daten

Dem Kopf folgen die Bytes für Code und Daten.
In PRL-Dateien wird der Code assembliert für die Ladeadresse 0100h.

(3) Verschiebe-Bitmap

Es folgen dann ((Bytes + 7) / 8) Bytes einer Verschiebe-Bitmap
(einem Byte in der Bitmap entsprechen 8 Bytes in der Datei).
Bit 7 entspricht dem niedrigsten und Bit 0 dem höchsten Byte.
Daher entspricht Bit 7 des ersten Bytes in der Bitmap dem ersten Byte im
PRL-Kopf.

Wenn ein Bit in der Bitmap gesetzt ist, dann ist das Byte in der Datei
verschiebbar. Für eine PRL-Datei, deren Kopf nach hexadezimal xx00
geladen wurde, gilt, dass zu dem verschiebbaren Byte hex xx addiert
werden muss.
In der Praxis wird der Kopf verworfen, so dass eine andere Formel gilt:
wenn das erste Byte des Codes oder der Daten bei xx00 liegt,
dann muss xx-1 zum verschiebbaren Byte addiert werden.

Eine — oder mehrere — RSX wird mit dem Dienstprogramm GENCOM mit einer COM-Datei zusammengesetz. Die GENCOM Seite besteht aus:
GENCOM KOPF
Offset Umfang Bedeutung
------ ------ -----------
  00H  01H    'C9H' kennzeichnet GENCOM-Kopf
  01H  02H    Länge des Original-COM-Programms,
              beginnend bei Offset 0100H
  03H  0AH    Initialisierungsroutine im Kopf.
              Wird mit RET beendet
  0DH  01H    Loader flag
  0EH  01H    ---
  0FH  01H    Anzahl von RSXen, max 15
  10H  10H    Rekord der ersten RSX
  20H  10H    Rekord der zweiten RSX
  30H  10H    usw.

(Eine Initialisierungsroutine wird erzeugt mit
 GENCOM {COM-filespec} {RSX-filespec} [SCB=(offset,value)])

Jeder RSX-Eintrag hat folgende Gestalt:
Offset Umfang Bedeutung
------ ------ -----------
  x0H  02H    Offset zum Start des RSX Moduls 0000 = Ende der RSX
  x2H  02H    Länge des RSX Moduls (ohne Bitmap)
  x4H  01H    Auf 0FFH setzen wenn RSX nicht in ein gebanktes
              System geladen wird
  x5H  01H    Unbenutzt
  x6H  08H    Name der RSX
  xEH  02H    Unbenutzt

Letzte Änderung: 24.Oktober 2014