Das Schneider CPC Systembuch

Das Betriebssystem des Schneider CPC

Basic und Maschinencode

Maschinencode über HIMEM

CPC-typisch ist aber die Methode, für den Basic und Maschinencode: Maschinencode über HIMEMMaschinencode über HIMEM etwas Speicherplatz zu opfern. Zwar ist die Lade-Adresse für das Assembler-Programm zunächst auch nicht vorhersehbar. Sobald es geladen ist, wird es aber nicht mehr verschoben. Es ist deshalb nicht nötig, den Maschinencode vollkommen ortsunabhängig zu gestalten. Es genügt, wenn man das Programmpaket einmal initialisiert, und dabei alle Adressierungsarten der Z80: Absolutabsoluten Adressen der tatsächlichen Lage des Programms anpasst, es also relocalisiert.

Ausgesprochen schlecht ist man beraten, wenn man für eine universell verwendbare Erweiterung eine feste Adresse im RAM annimmt. Beispielsweise könnte man sich ja denken, dass in Einleitung: BASIC
Anhang: Basic
Basic
Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM immer so über 40000 liegen wird und dann das Programm ab der Adresse 40000 assemblieren.

Das geht nur so lange gut, wie man auf diese geistreiche Idee kein zweites Mal verfällt. Auch der Software-Tauschpartner könnte mit dieser Adresse liebaeugeln und eine unheimlich tolle Erweiterung fest für diese Adresse assemblieren. Dann sieht man alt aus, wenn man beide Erweiterungen gleichzeitig zur Verfügung haben will (Das kann schon 'mal vorkommen. Ein Der Kernel - Software-Interrupts: DruckerspoolerDruckerspooler und eine Hardcopy-Routine sind bestimmt kein schlechtes Gespann.)!

Man sollte auch immer bedenken, dass zu jeder Erweiterung, die man sich irgendwann in ferner Zukunft noch zulegen wird, möglicherweise eine Treibersoftware in einem Speicheraufteilung durch ein Vordergrund-Programm: Hintergrund-ROMsHintergrund-ROM gehört. Erstes Beispiel ist hier Die Abteilungen des Betriebssystems: AmsdosAmsdos, mit einem Speicherplatzverbrauch von nicht weniger als 1280 Datentypen: Bytes
Datenbreite: Bytes
Bytes
! Da könnte irgendwann einmal Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM für die Mcode-Erweiterung mit fester Adresse zu niedrig werden.

CALL

Im Schneider-Basic ist es zwar möglich, Maschinencode durch Angabe der Einsprungs-Adresse aufzurufen. Da diese zunächst aber unbekannt ist, sollte man dafür Unterprogramme: VariablenVariablen vorsehen:

 10 Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM=HIMEM-prog.länge            <-- Speicher reservieren
 20 adr=Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM+1:LOAD"grafik.bin",adr  <-- Programmdatei einladen
 30 Maschinencode über HIMEM: CALLCALL adr                          <-- Initialisieren, Relozieren
 40 box      = adr+&123                \
 50 Die Grafik-VDU: Circlecircle   = adr+&234                 > Unterprogramme: VariablenVariablen für die verschiedenen
 60 triangle = adr+&345                /  Einsprungsadressen definieren.
    ....
    ....
500 Maschinencode über HIMEM: CALLCALL box, 100,200,300,400         <-- Aufruf
RSX

Darüber hinaus können die Mcode-Routinen bei ihrer Initialisierung als Maschinencode über HIMEM: RSXRSX eingebunden werden. Dann stehen sie in Einleitung: BASIC
Anhang: Basic
Basic
direkt mit einem Namen zur Verfügung:

 10 Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM=HIMEM-prog.länge
 20 adr=Die Aufteilung des RAM durch den Basic-Interpreter: Chaos über HIMEMHIMEM+1:LOAD"grafik.bin",adr
 30 Maschinencode über HIMEM: CALLCALL adr                          <-- Relozieren, Initialisieren, Einbinden
    ....                                                              als Maschinencode über HIMEM: RSXRSX
    ....
500 |BOX, 100,200,300,400             <-- Aufruf eines RSX-Kommandos

RSX-Kommandos werden in Einleitung: BASIC
Anhang: Basic
Basic
mit einem 'extended colon' '|' markiert. Dieses Zeichen ist jedoch kein Bestandteil des RSX-Namens!

Dabei sind die beiden Methoden, eine Mcode-Routine aufzurufen, fast vollkommen gleichwertig. Ein Unterschied ist jedoch, dass bei RSX-Paketen das Basic-Programm die Lage der Einsprungs-Adressen nicht zu wissen braucht. Verschieben sich die Einsprungsadressen, weil man im Mcode Änderungen vorgenommen hat, so müssen bei RSX-Erweiterungen in den Basic-Programmen keine Aufruf-Adressen geändert werden. Wohl aber bei Aufrufen mit Maschinencode über HIMEM: CALLCALL. Außerdem können RSX-Erweiterungen auch in Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROMs enthalten sein (und werden dann von Einleitung: BASIC
Anhang: Basic
Basic
automatisch initialisiert). Aufrufe mit Maschinencode über HIMEM: CALLCALL sind nur im RAM möglich.

Valid HTML   Valid CSS