APPLICATIONSDIVERS ★ Resident System Extensions (RSX) ★

Rsx - Resident System Extensions (CPC Amstrad International)Applications Divers
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

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


Nach der Einbindung und der Schutzvorkehrung steht RSX nun bereit: Bei Benutzung eines der Befehle wird die Tabelle durchsucht und gegebenenfalls das Kommando ausgeführt.

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


Nun kommt die Sprungtabelle, wobei der erste Sprung dem ersten Befehl korrespondiert, der zweite dem zweiten und so weiter. Es müssen also genauso viele Befehle wie Sprünge enthalten sein.

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:

  • |BASIC

Das Kommando 'BASIC' initialisiert das gesamte BASIC-Paket neu und führt auch ein NEW durch.
Befchls-Erweiterungen sind in dieser Zeitschrift schon zur Genüge abgedruckt worden, deshalb hier nur ein Assemblerbeispiel in Listing 1.
Dieses Assemblerlisting zum Beispiel würde einen Befehl |POKE, start, ende, wert bereitstellen, wobei 'start' der Anfangsadresse, 'ende' dem letzten Adresswert des zu pokenden Wertes, und 'wert' dem zu schreibenden Byte für den zu füllenden Speicherbereich entspricht.
Um Strings in RSX zu übergeben, ist normalerweise der 'Klammeraffe' nötig. Für den Aufruf einer Routine, die zwei Strings vertauscht, ist gewöhnlich folgende Eingabe nötig:

  • |SWAP,@a$,@b$

Es geht aber auch ohne. Dies stellt man fest, wenn man das ROM-Listing bei der Ausführung eines RSX-Befehls studiert.
Bei einer Error-Ausgabe springt der CPC kurzzeitig ins RAM, das nutzen wir jetzt aus.

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:

  1. Einbindung und Definition der Erweiterung mit KL LOG EXT.
  2. RETurn als Schutz an den Anfang der Routine poken.
  3. Klammeraffenfunktion einbinden (Stringübergabe an RSX).
  4. Kemel-Verwaltung. Sprungtabelle und Befehlstabelle einrichten.
  5. Dazugehörige Routinen mit Fehlerabfragen programmieren.

QUELLENVERZEICHNIS:

Brückmann. Englisch, Gerits (1985): CPC 464 INTERN, Data Becker, Ddf. B. Godden (1984): CPC 464-FIRMWARE-Handbuch, Schneider, Türkheim.

CPCAI 8512

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1985
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1986
★ AUTHOR: Eckehart Röscheisen
 

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding Src's » RAMTEST and MACHINE TYPE routine (CPC Attack)
» Coding Src's » Animation (CPC Infos)
» Coding Src's » Bankflip (Schneider Aktiv)
» Coding Src's » Auld Lang Syne (Amstrad Computer User)
» Coding Src's » Keyboard II (Schneider Magazin)
» Coding Src's » Circles
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 216 millisecondes et consultée 1618 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.