★ APPLICATIONS ★ DIVERS ★ Resident System Extensions (RSX) ★ |
Rsx - Resident System Extensions (CPC Amstrad International) | Applications Divers |
Das Betriebssystem des CPC besitzt die Möglichkeit, eigene Befehle als sogenannte externe residente Systemerweiterungen ins BASIC einzubinden. Man kann diese dann anstelle des CALL-Befehls aufrufen und Parameter übergeben, wie beim BASIC-Befehl CALL,p1,p2,p3,p4.....p32. Einem solchen Befehl muß ein Querstrich (SHIFT+Klam-meraffe). wie bei angeschlossener Diskettenstation mit AMS-DOS, vorangestellt werden und sowohl der 'Befehl'als auch die Parameter untereinander müssen mit Kommata abgetrennt werden. Nun betrachten wir uns einmal die Einbindung der Erweiterung zu einem Befehl. Dies muß leider in Assembler geschehen, oder in einer anderen Programmiersprache (z.B.: PASCAL). Der Interpreter braucht verschiedene Informationen zur RSX-Einbindung in den normalen Ablauf: BC=Adresse der Befehlstabelle der RSX Der Basicinterpreter braucht als Information zuerst den Anfang der RSX-Sprung-Tabclle. an deren Beginn die ersten zwei Bytes den Anfang der Befehlstabelle bezeichnen. HL=Adresse von vier Bytes für Kernel Für die Verwaltung der Eintragungen benötigt das Betriebssystem vier Bytes im zentralen RAM-Kern, also zwischen &400Ö und &BFFF und HL enthält deren Adresse. RSX-Erweiterung einbinden Mit dem Firmware-Call &BCD1 (KL LOG ON EXTENSION) wird die Bcfehlserweiterung eingebunden. Sie steht nun in Form von RSX-Kommandos zur Verfügung und kann nachdem Rücksprungzu BASIC benutzt werden (RSX-EXTENTED BASIC). 'C9' an den Anfang poken Nun wird am Anfang der Einbindungsroutine ein RETurn (&C9) gePOKEd, damit bei einem Zweitaufruf die RSX nicht mehr zerstört werden kann. (Schutz) Zurück ans BASIC-System
Zwei Bytes für Befehlstabellenanfang Am Anfang der Sprungtabelle zu den entsprechenden Befehlen stehen zwei Bytes für die Adresse der RSX-Befehls-tabelle. Sprungtabelle in Reihenfolge
Schlüsselworttabelle der RSX Diese Tabelle enthält die RSX-Befehle im Klartext. Jeder Name wird in Großbuchstaben und jeder letzte Buchstabe eines Namens mit gesetztem 8. Bit dargestellt. Das Ende der Tabelle ist ein Nullbyte. Anfang der einzelnen Routinen... Nun beginnt die eigentliche Ausführung des Befehls, wobei am Anfang der Akkumulator die Anzahl der Parameter, das Indexregister IX, die Adresse des letzten Parameters (Lower Byte) und DE die Einsprungadresse enthalten. B enthält die Differenz (32-Inhalt von A). Eine derartige Befehlserweiterung kann in einem Extensions-ROM oder auch im RAM stecken, wie es bei angeschlossenem Diskettenlaufwerk der Fall ist. Man hat also die Möglichkeit, selbst solche Erweiterungen zu programmieren, man muß aber beachten, daß Parameter nur von BASIC aus direkt übergeben werden können, was umgekehrt nur mit Übergabe der Adresse einer Variable zum Beispiel möglich ist. Die Parameter müssen immer ganzzahlig sein, und diese Erweiterungen müssen vollständig in Maschinensprache geschrieben sein. Besonders sinnvoll ist diese Möglichkeit also für die Grafikprogrammierung und für Programmbearbeitungsbefehle. Ingesamt kann man maximal 32 Integerwerte zwischen -32768 und +32767 übergeben. Zahlen mit größeren Werten, wie Adressen, werden trotzdem vollkommen richtig verarbeitet. Das BASIC-ROM des CPC 464 stellt bereits beim Einschalten einen RSX-Befehl zur Verfügung:
Das Kommando 'BASIC' initialisiert das gesamte BASIC-Paket neu und führt auch ein NEW durch.
Es geht aber auch ohne. Dies stellt man fest, wenn man das ROM-Listing bei der Ausführung eines RSX-Befehls studiert. Listing 2 macht es möglich, Strings ohne Klammeraffen zu übergeben. Nun können wir Strings direkt übergeben, zum Beispiel mit Diskette können wir nun |ERA,"HALLO.BAS" anstatt a$="HALLO.BAS" und |ERA,@a$ eingeben. Um Komplikationen zu vermeiden, bietet es sich an. Fehlerabfragen zu schreiben: Da am Anfang der Akkumulator die Anzahl der Parameter enthält, kann man zum Beispiel diesen Wert abfragen, wie im folgenden Beispiel-Listing 4. Diesen Teil könnte man nun in unsere vorherige POKE-Routine (anstatt RET NZ dann JP NZ,ERRORl) einsetzen. Nun bietet sich also folgende Reihenfolge der RSX-Pro-grammierung an:
QUELLENVERZEICHNIS: Brückmann. Englisch, Gerits (1985): CPC 464 INTERN, Data Becker, Ddf. B. Godden (1984): CPC 464-FIRMWARE-Handbuch, Schneider, Türkheim.
|