APPLICATIONSPROGRAMMATION ★ Firmware: Perlen im ROM ★

RSX Call (Happy Computer)Applications Programmation
★ 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 ★ 

Mehr Computerpower unter Basic, einfachere Programmierung in Maschinensprache und nicht zuletzt Kompatibilität zwischen den drei verschiedenen Modellen bringt die leistungsfähige Firmware der CPC-Serie. Vorausgesetzt, man weiß sie zu nutzen.

Wer sich ausschließlich mit der Basic-Programmierung auf seinem CPC beschäftigt. hat normalerweise kaum einen Anlaß, sich mit dem Betriebssystem seines Computers auseinanderzusetzen. Und doch gibt es genügend Gründe, darüber mehr zu erfahren. Der Umgang mit darin enthaltenen Routinen ist jedenfalls lohnend, wie wir weiter unten noch sehen werden. Noch viel interessanter ist die Thematik der sogenannten «Firmware«-Routinen natürlich für Maschinensprach-Programmie-rer. Für diesen Anwenderkreis steht geradezu eine Unmenge an hilfreichen Aufrufen bereit, die den Programmieraufwand auf ein Minimum reduzieren, Beiden Benutzergruppen gemein ist der Vorteil, daß die Nutzung der Firmware-Vektoren Kompatibilitätsprobleme zwischen den drei unterschiedlichen Computer-Model len zu vermeiden hilft. Diese Vektoren stehen im RAM und sind bei allen drei CPC-Modellen an den gleichen Adressen zu finden. Aber diese Sprungleisten führen dann erst die eigentlichen Aufrufe ins ROM, ohne daß der Benutzer die dort verschiedenen Adressen kennen und berücksichtigen muß.

ln diesem ersten Teil und in der nächsten Ausgabe wollen wir uns auf Routinen beschränken, die unter Basic sinnvoll einzusetzen sind. Wie Ihnen sicher bekannt ist, gibt es im Locomotive-Basic 1.1 der Modelle CPC 664 und 6128 neue Befehle ge* genüber der Version 1.0 im CPC 464, Einige dieser Kommandos sind jedoch — zumindest latent — auch im 464 vorhanden. Oft sind sie durch einen einfachen CALL-Befehl zu ersetzen. Andere,, wiederum erfordern Parameter-Übergaben, die ohne eine geeignete Maschinencode-Routine vom Basic aus nicht zu übergeben sind. Deshalb finden Sie im Listing einen Basic-Lader, der einen neuen RSX-Befehl erzeugt. Mit dessen Hilfe können Sie dann alle Aufrufe bequem nachvollziehen. Da sowohl diese Befehlserweiterung als auch die beschriebenen Firmware-Routinen auf allen CPCs arbeiten, sollte man seine Programme bevorzugt damit schreiben, um die Austauschbarkeit sicherzustellen.

Bevor wir uns an das »Eingemachte« heranwagen, geben Sie bitte zuerst den Basic-Lader aus Listing 1 ein. Vor dem ersten Start speichern Sie ihn sicherheitshalber. Er erzeugt den RSX-Befehl CALL. Fügen Sie ihn entweder als Unterroutine in eigene Programme ein und lassen Sie es dort einmal aufrufen, um den Befehl zu installieren, oder Sie starten das Programm einzeln und speichern den Maschinenkode mit

SAVE "NAME ", B, &A610, &5A

als Binärdatei. Um ihn später zu laden, benutzen Sie dann die Befehlsfolge

MEMORY &A60F
LOAD "NAME"
CALL &A610

CALL beginnt — wie alle RSX-Befehle — mit dem senkrechten Strich, der durch gleichzeitigen Druck der Tasten < SHIFT > und < @ > entsteht. Als Parameter erlaubt er Werte für die Prozessor-Register A. BC, DE und HL. Der generelle Aufruf lautet deshalb

|CALL,adresse,&,bejde,hl

Natürlich dürfen Sie als Farame-ter beliebige Variablennamen ersetzen. Diese müssen jedoch vor dem ersten Befehlsaufruf definiert sein, also in unserem Beispiel;

10 8=0:bc=0:de=0:hl=0
20
.
.
1030
1040 |CALL,adresse,a,bc,de,hl

Aus Gründen der Übersicht verwenden wir in den Beispielen unten zur Übergabe Variablennamen, die den Verwendungszweck charakterisieren. Die verbleibenden Register-Bezeichnungen sind für den jeweiligen Aufruf nicht von Bedeutung, Listing 2 zeigt als Beispiel, wie sie den CALL-Befehl in eigene Programme einbinden. Erfolgen durch die Firmware-Routinen Rückgaben, sind diese Werte wie in den Zeilen 1010 bis 1040 zu übernehmen. Dazu muß die Datei »CALL.B1N« fertig zum Nachladen vorliegen,

Wer lieber in Assembler programmiert, findet die Parameter-Ubergaben gesammelt in der Tabelle. Sie zeigt außerdem neben einer Kurzbeschreibung der Funktion, auch die durch die jeweilige Routine beeinflußten Flags. Im Verlauf dieses Kurses lernen Sie Schritt für Schritt alle wichtigen RAM-Vektoren kennen. Durch deren Nutzung vermeiden Sie direkte Aufrufe von ROM-Routinen, was Ihre Programme transportabel macht.

Wir beginnen unseren Exkurs mit den Routinen, die Basic-Befehle simulieren und gehen dabei in alphabetischer Reihenfolge dieser Kommandos vor.

COPYCHR$
BB60 hex (TXT-RD-CHAR)

Dieser Befehl dient zur Abfrage des Bildschirminhalts auf einzelne Zeichen, gibt also beispielsweise aus, ob auf der Position 10,5 ein »A« oder ein anderer Buchstabe steht. Zur Nutzung der Firmware-Routine unter Basic müssen Sie vor dem Aufruf den Text-Cursor auf der Stelle zur Abfrage positionieren (beispielsweise «LOCATE 1,1«). Darauf folgt der Befehl

|CALL,&BB60,zeichen,bc,de,hl

Die Variable < Zeichen > (Register A) enthält dann das gelesene Zeichen als ASCIIWert. Zwei Voraussetzungen müssen jedoch erfüllt sein, damit das Betriebssystem das Zeichen erkennt: Es muß ein Zeichen des Standard- oder eines selbstdefinierten Zeichensatzes sein, Und auf der Character-Position darf kein anderes Zeichen (beispielsweise im Transparentmodus) oder kein Punkt durch Grafikbefehle gesetzt sein, da das Betriebssystem bitweise vergleicht und dabei höchstens noch eine inverse Darstellung toleriert.

CURSOR
BB7B hex (TXT-CUR-ENABLE),
BB7E hex (TXT-CUR-DISABLE).
BB81 hex (TXT-CUR-ON) und BB84 hex (TXT-CUR-OFF)

Damit läßt sich die Ausgabe des Cursors unterdrücken beziehungsweise wiederherstellen. Die ersten beiden Aufrufe betreffen den »Benutzer «-Cursor, das zweite Befehlspaar den »System«-Cursor. So erscheint beispielsweise beim Befehl »INKEY$« automatisch ein Cursor auf dem Bildschirm, wenn Sie vorher mit CALL &BB81

den Systemcursor aktiviert haben. Alle vier Aufrufe benötigen keinerlei Übergaben.

FRAME
BD19 hex (MC-WAIT-FLYBACK)

Bei Programmen, die bewegte Grafik auf dem Monitor darstellen (wandernde Zeichen etc.), ist es sinnvoll, die Zeichenausgabe mit dem Strahlrucklauf des Bildschirms

zu synchronisieren, um eine flackerfreie »Bewegung* zu erreichen, Dazu fügen Sie vor jedem PRINT-Befehl einen CALL &BD19

ein. Probieren Sie einmal das folgende kleine Beispielprogramm, nacheinander mit und ohne den CALL:

10 MODE 2
20 FOR I=2 TO 79
30 LOCATE I-1,10: PRINT " "
40 CALL &BD19
50 LOCATE I,10: PRINT "A"
60 NEXT I

GRAPHICS PAPER
BBE4 hex (GRA-SET-PAPER)

Legt die Hintergrundfarbe für Grafikbefehle fest, Beim CPC 464 lassen sich sonst die gewünschten Farben nur beim jeweiligen Grafik-Befehl als Parameter mit angeben, Der Aufruf lautet I CALL, &BBE4, färbe,bc,de,hl Die Farbe übergeben Sie mit dem ersten Parameter.

GRAPHICS PEN
BBDE hex (GRA-SET-PEN)

Arbeitet wie GRAPHICS PAPER, beeinflußt jedoch die Vordergrund-(Stift-) Farbe,

ON BREAK CONT
BB48 hex (KM-DISARM-BREAK)

Wenn Sie mit

CALL &BB48

die ESC-Taste im Programm sperren, ist ein Abbruch nicht mehr möglich. Auch hier ist keine Parameter-Übergabe nötig. Die Aufhebung existiert nicht als Basic-Befehl, ist aber über die Firmware zu realisieren:

CALL &BB45

Über diese »neuen« Befehle für den CPC 464 hinaus gibt es eine Flut nützlicher Routinen, die allen CPC-Besitzern neue Perspektiven zur Programmierung unter Basic eröffnen, Die neuen Fähigkeiten betreffen ganz unterschiedliche Anwendungsbereiche. Sie werden sie in der nächsten Ausgabe kennen und schätzen lernen.

Verluderte

Register

Bezeichnung
Parameter zur Übergabe

Alle erklärten Routinen auf einen Blick
BezeichnungAdresse (hex)Parameter zur Übergabe

Veränderte Register

Parameter zur Übernahme

KM ARM BREAKS
Gibt Unterbrechungen durch ESC-Taste frei

BB45

DE - Adresse der Unterbrechungsroutine
C = Adresse des ROM, der die Routine enthält

AF, BC , DE, HL

KM DISARM BREAK
Verhindert Unterbrechungen durch ESC-Taste

BB48AF,HL
TXT RD CHAR
Liest Zeichen vom Bildschirm
BB60A=Zeichen,
A=0 und Carry=0 bedeutet kein Zeichen
TXT CUR ENABLE
Schaltet Cursor ein (Benutzer)
BB7BAF
TXT CUR DISABLE
Schaltet Cursor aus (Benutzer)
BB7EAF
TXT CUR ON
Schaltet Cursor ein (System)
BB81
TXT CUR OFF
Schaltet Cursor aus (System)
BB84
GRA SET PEN
Setzt Grafikfarbe
BBDEA=FarbeAF
GRA SET PAPER
Setzt Hintergrund-färbe
BBE4A=FarbeAF
MCWAIT FLYBACK
Wartet auf Strahlrücklauf der Bildschirmröhre
BD19

(ja),  HC

★ PUBLISHER: Happy Computer
★ YEAR: 1987
★ CONFIG: AMSDOS + 64K
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER 1987
★ AUTHOR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Call    (Happy  Computer)    GERMAN    LISTINGDATE: 2022-10-09
DL: 112
TYPE: PDF
SiZE: 342Ko
NOTE: 1 page/PDFlib v1.6

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

Lien(s):
» Applications » Microsoft Basic Compiler
» Applications » Basic - Locomotive
» Applications » Das Standard Basic-Buch zum Schneider-Computer CPC464
» Applications » ACU Basic Bugbuster (Amstrad Computer User)
» Applications » Fast Basic double-height
» Applications » April Fool: Basic Compiler (Computing with the Amstrad)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» 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 653 millisecondes et consultée 372 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.