APPLICATIONSDISQUE ★ Komfortable Diskettenbefehle für den CPC ★

Komfortable Diskettenbefehle (Schneider Aktiv)Applications Disque
★ 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 ★ 

Sobald an den Schneider CPC 464 eine Diskettenstation angeschlossen wird, erweitert das Floppy-ROM den Befehlsvorrat des Basic-Interpreters um vierzehn RSX-Befehle zur Diskettensteuerung. Diese Befehle sind aber teilweise sehr unhandlich und unkomfortabel zu benutzen. Das abgedruckte Programm bietet Ihnen zwei neue Befehle, die "ERA" und "REN" ersetzen.

Die Programmierer bei Amstrad haben das Betriebssystem des CPC 464 zur Verwendung von RSX-Befehlen (Resident System Extension) ausgelegt. Diese Befehlserweiterungen sind sowohl in den ROMs

verankert als auch vom Benutzer programmierbar. Es ist auch möglich, zusammen mit dem Befehl bis zu 32 Parameter an das RSX-Programm zu übergeben - leider nur numerische Integerwerte. Wenn dem RSX-Programm ein String zugänglich gemacht werden soll, geht das nur über den Variablenanzeiger. Diese im Handbuch nicht dokumentierte Funktion wird über das Symbol 64, den "Klammeraffen", aufgerufen und

liefert bei Strings die Adresse des sog. String Descriotors. der in drei Bytes die Länge und Speicheradresse des Strings enthält:

a$="Dies ist ein String": descriptor=@a$
PRINT "Länge";PEEK(descriptor)
PRINT "Adresse";PEEK(descriptor+1)+PEEK(descriptor+2)*256

Dieses Verfahren ist natürlich äußerst umständlich; zudem ist es auch nicht möglich, einen Direktstring in Anführungszeichen zu übergeben.

Entsprechend aufwendig ist die Verwendung der AMSDOS-RSX-Kommandos (AMSDOS heißt Amstrad Disc Qperating System). Besonders schwerfällig sind die Befehle ERA zum Löschen und REN zum Umbenennen von Dateien:

a$="PROGRAMM.BAS":|ERA,@a$
alt$="ALTNANE.DAT":neu$="NEUNAME.DAT":
|REN, @neu$,@alt$

Erheblich einfacher funktionieren die beiden Befehle, die das abgedruckte Programm bietet. Sie beginnen beide mit dem Größer-Zeichen (>). Ihre Syntax lautet folgendermaßen:

>DELETE file
>SWAP oldfile.newfilefile

oldfile und newfile stehen für beliebige Stringausdrücke, also für Variablen, Direktstrings oder Stringverkettungen. Beispiele dafür sind:

>DELETE "DATEI.BAS"
>DELETE a$
>DELETE z$+".BAS"
>SWAP "ALTNAHE.BAT","NEUNAME.DAT"
>SWAP a$,b$
>SWAP z$+".FIL","DATEI"+y$

Der Basic-Loader erzeugt übrigens verschiebbaren Maschinencode, so daß das Programm immer unter HIMEM liegt und nur 135 Bytes Speicherplatz kostet.

Für Maschinensprachefans einige Hinweise zur Funktionsweise des Programms: Sobald der Basic-Interpreter einen Befehl nicht übersetzen kann, gibt er einen Syntax-Error aus. Bevor er dies aber tut, springt er mit CALL &AC07 kurz in den RAM-Bereich. Dort steht normalerweise nur der Wert &C9, der Z80-Code für RET; d.h. die Fehlermeldung wird ungehindert ausgegeben. Setzt man aber an der Adresse &AC07 einen JP-Sprungbefehl auf ein eigenes Maschinenprogramm ein, so kann der Fehler abgefangen und die Befehlserweiterung korrekt verarbeitet werden.

Damit ist das Programm aber auf dem Schneider CPC 664 nicht lauffähig, da die Software-Entwickler diese RAM-Patches dort wieder weggelassen haben.

In unserem Fall sieht die Programmabwicklung so aus: Der Interpreter weiß nicht, was er mit dem Größer-Zeichen, das vor

beiden neuen Befehlen steht, anfangen soll, und will eine Fehlermeldung ausgeben. Das Programm kehrt aber von seinem Sprung nach &AC07 nicht zurück, sondern ruft das Maschinenprogramm auf. In den Zeilen 1360 und 1370 des Quellcodes wird geprüft, ob der Fehler auch wirklich durch das Größer-Zeichen ausgelöst wurde - andernfalls würde auch jeder andere Fehler das Programm aufrufen. Die Befehlsnamen DELETE und SWAP wurden mit Bedacht gewählt, da sie bereits im Befehlsumfang des Interpreters vorhanden sind: DELETE zum Löschen von Programmzeilen und SWAP in der Verbindung WINDOW SWAP zum Austauschen von Bildschirmfenstern. Somit werden sie bereits bei der Programm- oder Befehlseingabe in die Tokens &E7 für SWAP und &92 für DELETE umgewandelt. Damit genügen die Zeilen 1400 bis 1460 des Quellcodes zur Befehlserkennung.

Die Unterprogramme SWAPIT und DELIT übersetzen nun die Befehle in die üblichen RSX-Kommandos, bauen die String Descriptors auf und springen zur Befehlsausführung in den FIoppy-ROM. Beide Programmteile benötigen auch ROM-Routinen im Basic-Interpreter:

GETSTR &CEFB holt eine Stringkette oder eine Stringvariable.

PARAMS &FBDA berechnet die notwendigen Parameter dazu. Nach Aufruf der Routine enthält das B-Register die Stringlänge und das DE-Register die Adresse des Strings im Speicher.

BLANKS &DD3F überliest Leerzeichen (Blanks) in der Programmzeile und setzt das HL-Register auf den nächsten Befehl.

FIND &DD37 sucht das nächste Zeichen in der Programmzeile, das dem Byte nach dem aufrufenden CALL-Befehl entspricht, z.B.:

CALL FIND
DEFB ","

sucht also das nächste Komma und richtet den HL-Programmzeiger entsprechend aus. FIND wird von >SWAP benötigt, da bei diesem Befehl die beiden Strings durch ein Komma getrennt sind.

CMDEND &DD4A stellt fest, ob das Ende des Befehls mit allen zugehörigen Parametern erreicht ist. Trifft dies nicht zu, wird ein SYNTAX ERROR ausgegeben.

Anhand des Quellcodes können Sie die Verwendung dieser ROM-Routinen recht genau verfolgen. Sind alle Parameter festgestellt, lassen die Programme mit KL FIND COMMAND das Betriebssystem die Adresse der benötigten RSX suchen. Der Akku wird mit der Zahl der übergebenen Parameter geladen, also mit Eins bei DELETE und 2 bei SWAP. Danach versorgt der Computer das Indexregister IX mit einem Zeiger auf den String Descriptor (Zeilen 1740 bis 1750 bei SWAP, 1970 und 1980 bei DELETE).Die von KL FIND COMMAND übergebene Adresse im HL-Register und der ROM-Status im C-Register werden von KL FAR PCHL weiterverwendet und die RSX-Routinen im Floppy-ROM aufgerufen. Zu guter Letzt stellt ein POP HL den Basic-Programmzeiger wieder her, und ein POP DE korrigiert die Rücksprungadresse.

(Kl), SA

★ PUBLISHER: Schneider Aktiv
★ YEAR: 1985
★ CONFIG: AMSDOS + 64K
★ LiCENCE: LISTING
★ COLLECTION: SCHNEIDER AKTIV 1985
★ LANGUAGE:
★ AUTHOR: Martin Kotulla
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Komfortable  Diskettenbefehle    (Schneider  Aktiv)    GERMANDATE: 2021-06-08
DL: 152
TYPE: ZIP
SiZE: 4Ko
NOTE: Dumped by Johnny Farragut ; 40 Cyls
.HFE: Χ

» Komfortable  Diskettenbefehle    (Schneider  Aktiv)    LISTING    GERMANDATE: 2021-06-08
DL: 125
TYPE: PDF
SiZE: 155Ko
NOTE: 1 page/PDFlib v1.6

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

Lien(s):
» Applications » Prefiga
» Applications » Xref (Schneider Aktiv)
» Applications » Crossreferenz (Schneider Aktiv)
» Applications » Refont (CPC Revue)
» Applications » Cross-Referenz Variablen (Schneider Magazin)
» Applications » SoftwareFreezer (CPC Amstrad International)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» 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 355 millisecondes et consultée 652 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.