APPLICATIONSPROGRAMMATION ★ RSX BINKING (CPC AMSTRAD INTERNATIONAL) ★

RSX Binking (CPC Amstrad International)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 ★ 

Einblicke
Dem Rechner auf die Bytes geschaut

Jeder kenn! wohl die kleinen unscheinbaren, aber sehr wirkungsvollen Programme, wie beispielsweise den Emulator für den CPC 464. Sie sind im oberen Speicherbereich jenseits der HIGHMEM-Grenze angesiedelt. Eine Möglichkeit, mit der Sie solche Programme ansehen und auch bearbeiten können, ist das hier vorgestellte Bonusprogramm BINKING.


Bild I : |HELP.ALL listet alle im Speicher befindlichen RSX- Befehle

Hatten Sie auch schon einmal den Wunsch nach einem POKE-Befehl, mit dem Sie nicht nur einen Wert an eine bestimmte Speicherstelle schreiben, sondern dem Sie gleich mehrere Werte “mitgeben” können? Benötigten Sie einen POKE-Befehl, der Ihnen ermöglicht, gleich einen ganzen String ab der angegebenen Adresse zu schreiben?

Oder wäre ein PEEK-Befehl, mit dem mehrere Speicherplätze wahlweise in ASCII- oder HEX-Form angeschaut werden können, die Lösung Ihrer Probleme?

Gute Nachricht: Alle obigen Wünsche kann das Programm BINKING.BIN erfüllen und noch einige mehr. Eine der großen Stärken von BINKING ist sein Disassembler. Dieser kennt auch alle bekannten “illegalen” Befehle. Wenn der Aufruf einer Betriebssystemroutine erfolgt, wird die zutreffende Bezeichnung ebenfalls angezeigt. Also kein Auswendiglernen mehr von Betriebssystemadressen!

Der Disassembler führt ebenso eine Statist ik über die Anzahl der aufgerufenen
Opcodes wie über die Anzahl der total verarbeiteten Zeilen. Näheres lesen Sie unter der Befehlsbeschreibung von DISASS.

Komfortabler Disassembler

BINKING.BIN hilft, andere Binärprogramme zu untersuchen. Es befindet sich deshalb in einem Speicherbereich, in welchen andere Binärprogramme normalerweise nicht geladen werden (&4000-&6D59). Laden Sie deshalb nach der Initialisierung von BINKING.BIN das gewünschte Binärprogramm mit dem normalen LOAD-Befehl.

Um die Erklärungen allgemeinverständlich zu gestalten, werden an dieser Stelle folgende Vereinbarungen getroffen:

String:

1) Zeichenfolge als Direkteingabe zwischen “Gänsefüßchen” oder

2) String-Variablenname (zum Beispiel a$) oder

3) String-Variablenname mit Vorgesetztem “Klammeraffen” (zum Beispie @a$). Für CPC-464-Bcsitzer ist, ohne Nutzung des Emulators, nur diese Variante möglich. Bei Variante 2 und 3 isi die angegebene Variable mit dem gewünschten Inhalt zu füllen.

Aktuelles File: Nach Initialisierung isi BINKING.BIN die aktuelle Datei. Nach Laden einer Binärdatei wird diese als aktuelle erklärt. Mit dem Befehl ISWITCH kann zwischen beiden umgeschaltet werden. Der Befehl IRANGE zeigt die Daten der aktuellen Datei.

Anzahl: Zahl zwischen 0 und 255 Länge: Zahl zwischen l und 65535 Wert: Zahl zwischen 0 und 255 oder 256 bis 65535 (bei Verwendung als “freier Wert”)

Nachdem Sie das Bonusprogramm BINKING gestartet haben, stehen Ihnen folgende RSX-Befehle zur Verfügung:

|SEARCH, Wert-1, Wert-2,..., Wert-32 - sucht die angegebene Byte-Folge im aktuellen Programm. Auch die Verwendung von “freien Weiten” ist möglich. Das bedeutet, daß der eigentliche Wert des Parameters beim Such Vorgang nicht berücksichtigt wird. Hierein Beispiel:
Sie suchen alle CALL-Befehle im Bereich &5700 bis &57FF. Geben Sie ein:

|SEARCH,&CD,555,&57


Der zweite Parameter ist in diesem Beispiel ein “freier Wert”. Freie Werte müssen zwischen 256 und 65535 liegen. Werte unter 256 sind zwingende Werte. Freie Werte dürfen in beliebiger Anzahl und an beliebiger Stelle im Ausdruck Vorkommen. Einzige Bedingung: Bei Verwendung von freien Weiten müssen mindestens zwei Parameter angegeben werden. Die Ausgabe kann jederzeit mit einer beliebigen Taste angehalten oder mit abgebrochen werden.
Fehlermeldung: Operand missing = kein Parameter eingegeben

|SEARCH, string - sucht den angegebenen String im aktuellen Programm. Bei der String-Option darf nur ein Parameter angegeben werden. Die Ausgabe kann jederzeit mit einer beliebigen Taste angehalten oder mit abgebrochen werden.
Fehlermeldung: Operand missing = kein Parameter eingegeben

|COUNT, Wert-1, Wert-2,..., wert-32: - zählt, wie häufig die angegebene

Byte-Folge in der aktuellen Datei vorkommt. Auch hier ist die Verwendung von “freien Werten” zulässig. Bei Verwendung von freien Werten bitte mindestens zwei Parameter angeben. ICOUNT, string - zählt, wie häufig der angegebene String in der aktuellen Datei vorkommt. Bei der String-Option darf nur ein Parameter verwendet werden.
Fehlermeldung: Operand missing = kein Parameter eingegeben Byte-Folge in der aktuellen Datei vorkommt. Auch hier ist die Verwendung von “freien Werten” zulässig. Bei Verwendung von freien Werten bitte mindestens zwei Parameter angeben.

|COUNT, string - zählt, wie häufig der angegebene String in der aktuellen Datei vorkommt. Bei der String-Option darf nur ein Parameter verwendet werden.
Fehlermeldung: Operand missing = kein Parameter eingegeben

|MONITOR, Startadr - zeigt die HEX- und ASCII-Werte ab der angegebenen Startadresse. Nach jeweils 16 Zeilen stoppt die Ausgabe, die Aufforderung “Taste drücken” wird daraufhin ausgegeben. Hier haben Sie folgende Möglichkeiten der Tastenbetätigung:
a) - Abbruch
b) Cursor hoch oder Cursor links: eine Seite zurück
c) andere Taste: eine Seite vor |SWITCH - umschalten der aktuellen Datei

|BYTES, Anzahl - wirkt auf SEARCH-Befehl. Es wird nicht nur die Fundadresse angezeigt, sondern auch noch die gewünschte Anzahl Bytes dazu. Hier ein Beispiel: Mil der Befehlsfolge

|BYTES,3
|SEARCH,&CD


werden alle CALL-Befehle mit der Ansprungadresse angezeigt.

|BYTES, 0


schaltet diese Einrichtung wieder aus (das heißt nur noch Anzeige der Fundadresse).
Fehlermeldung: Operand missing = kein Parameter eingegeben

|ASCII - wirkt auf die Befehle |SEARCH sofern |BYTES aktiviert ist, und auf |PEEK. Die Ausgabe erfolgt nicht mehr als HEX-Code, sondern als ASCII-Zeichen. Steuer-Codes sowie Grafikzeichen werden nicht angezeigt, an deren Stelle wird ein Leerzeichen ausgegeben.

|HEX - ausschalten des ASCII-Befehls

|COMMAND, Befehl - zeigt, ab welcher Speicherstelle die Ausführung eines bestimmten RSX-Befehls beginnt. Bedingung ist, daß das entsprechende Programm bereits initialisiert wurde. Groß- oder Kleinschreibung wird nicht berücksichtigt. Bit 7 am Ende des Strings braucht nicht gesetzt zu werden.
Fehlermeldung: Operand missing = kein Parameter eingegeben, Unknown command = angegebener Befehl wurde nicht initialisiert.

|PRINTER - alle Ausgaben erfolgen auf Bildschirm und Drucker. Funktioniert beispielsweise auch mit CAT-Befehl etc.
Fehlermeldung: Printer nicht bereit

|SCREEN - Ausgaben erfolgen nur auf den Bildschirm.

|BIT 7 - ein sehr nützlicher Befehl, wenn beispielsweise Befehlstabellen umdefiniert werden sollen. Namen von RSX-Befehlen bestehen bekanntlich aus Großbuchstaben, deren letztes Zeichen ein gesetztes siebentes Bit hat. Dieser Befehl definiert die CONTROL-Ebene aller Tasten um. und Buchstabentaste ergibt den entsprechenden Großbuchstaben mit gesetztem Bit 7.
Der Zehnerblock wird so umdefiniert, daß und entsprechende Taste einen Buchstaben ergeben, also = A, = B, = C und so weiter. Sehr nützlich ist dies beim Abtippen von HEX-Listings. Zurückgeschaltet auf den Normalzustand wird durch nochmalige Eingabe des |BIT7-Befehls.

|RANGE - zeigt die Werte der aktuellen Datei an (Startadresse, Länge und Dateiname).

|PEEK, Adresse - zeigt den Wert an der angegebenen Adresse, entweder in HEX- oder ASCII-Form.

|PEEK, Adresse, Länge - zeigt Werte ab der angegebenen Adresse, entweder in HEX- oder ASCII-Form.
Fehlermeldung: Operand missing = kein Parameter eingegeben, Syntax error = drei oder mehr Parameter eingegeben.

|POKE, Adresse, Byte-1, Byte-2, ..., Byte-31 - schreibt die angegebenen Byte-Werte ab der angegebenen Adresse in den Speicher.

|POKE, Adresse, String - schreibt den angegebenen String ab der angegebenen Adresse in den Speicher.
Fehlermeldung: Syntax error = weniger als zwei Parameter angegeben

|POKE.ADR, Adresse1, Adresse2 - schreibt die Adresse2 an die Speicherstelle Adresse1 (Low-Byte von Adresse2 an Speicherstelle Adresse1, High-Byte von Adresse2 an Speicherstelle Adresse 1+1).

|FILLMEM, Adresse, Länge, Byte - füllt den Speicher ab der angegebenen Adresse mit dem angegebenen Byte. Als Byte kann auch die erste Position aus einem String dienen.
Fehlermeldung: Adresse, Länge, Byte = ungültige Parameteranzahl

|REPLACE, Ersatz-String, Such-String - alle Byte-Folgen im aktuellen Programm, die dem Such-String entsprechen, werden durch den Ersatz-String ersetzt. Die Länge der beiden Strings braucht dabei nicht identisch zu sein. Beispiel: Soll JUMP &A 123 durch JUMP &A145 ersetzt werden, gehen Sie wie folgt vor:

alt$=chr$ (&c34-chr$ (&23+ chr$ (&a1) : neu$=chr$(&c3+chr$(&45)+ chr$(&a1):|REPLACE, @neu$, @alt$

Fehlermeldung: Ers.-String, Such-String = ungültige Parameteranzahl

|MOVE, Urspr. Adr., Ziel-Adr., Länge - verschiebt die in Parameter “Länge” angegebene Anzahl Bytes ab Ursprungsadresse an die Zieladresse. Überschneidungen der beiden Bereiche sind möglich. Die optimale Kopierrichtung (vorwärts/rückwärts) wird vom Programm selbständig festgelegt. Fehlermeldung: Urspr. Adr., Ziel-Adr.. Länge bei ungültiger Parameteranzahl

|REGISTER - zeigt die Werte der Z80-Register. Bei Angabe von Parametern verändert sich der Wert von IX in Abhängigkeit von der Anzahl der Parameter.

|FILECOMP, File1, Lade-Adresse1, File2, Lade-Adresse2 - vergleicht den Inhalt zweier Binärdateien und zeigt die Unterschiede an. Es werden die Originaladressen ausgegeben, an denen die Unterschiede auftreten. Bei unterschiedlicher Datei länge ist die Länge von Filel maßgebend. Es wird der HEX-Wert von File1 und File2 angezeigt, zusätzlich der entsprechende ASCII-Wert, sofern es sich um ein darstellbares Zeichen handelt (ASCII-Wert 32 bis 127).
Fehlermeldung: File1, Adr.1, File2, Adr.2 = ungültige Parameterzahl

|INIT - stellt alle Flags auf Wert 0 zurück und entspricht der Befehlsfolge

|BYTES, 0:|HEX:|SCREEN

|HELP-zeigt alle RSX-Befehle im aktuellen Programm.

|HELP, File-Nummer - zeigt die RSX-Befehle im angegebenen Programm (File-Nummern in der Reihenfolge der entsprechenden ORG-Adressen).

|HELP, 0 - zeigt die RSX-Befehle im aktuellen Programm.

|HELP.ALL - Bedingung ist, daß alle Dateien an die Originaladressen geladen werden müssen, womit eine korrekte Auswertung möglich wird.

|DIS.SEARCH, byte, Start-Adr., End-Adr. (Dateiname) - benutzt den Disassembler zur Suche nach dem angegebenen Byte. Als Beispiel soll der Befehl CALL gesucht werden zwischen Adresse &5000 und &5200:

|DIS.SEARCH, &CD, &5000, &5200

Falls die Ausgabe in eine Datei erfolgen soll, kann auch ein Dateiname angegeben werden (als vierter Parameter). Die Opcode-Zählwerke werden für alle Op-codes gleichzeitig geführt (nicht nur für den angesprochenen Opcode!).

|DISASS, Start-Adr., End-Adr., (Dateiname) - Dieser Disassembler hat Fähigkeiten, die man bei anderen Programmen dieser Art vergebens sucht. So ist es beispielsweise möglich, die Ausgabe nicht nur auf Bildschirm und Drucker, sondern auf Wunsch auch zusätzlich in eine Datei schreiben zu lassen. Diese Datei kann später mit einer Textverarbeitung weiterbearbeitet werden. Wenn die Ausgabe auf Diskette erfolgen soll, muß der entsprechende Dateiname als dritter Parameter angegeben werden, sonst genügt die Angabe der Start- und Endadresse.

Die Ausgabe kann jederzeit durch Drücken einer beliebigen Taste angehalten beziehungsweise durch abgebrochen werden. Taste bewirkt die Anzeige der aktuellen Z80-Register-inhalte. Diese Ausgabe wird jedoch nicht in eine eventuell geöffnete Datei übertragen. Zusätzlich zur üblichen Ausgabe wird das ASCII-Zeichen des Programmcodes angezeigt. Dies ermöglicht, Tabellen und Texte innerhalb des Codes zu erkennen.

Im weiteren werden PUSH-Befehle mit nachfolgendem POP in LD-Befehle umgewandelt. Dies erhöht die Übersichtlichkeit. Zum Beispiel wird die Befehlskette PUSH HL, POP DE als LD DE, HL ausgegeben. Das funktioniert mit den Registern BC, DE, HL und AF. Falls Sie eben genanntes nicht wünschen, “POKEN” Sie an die Adresse &5599 den Wert &C9, ansonsten muß diese Speicherstelle den Wert &23 aufweisen. Bei den Befehlen RST08, RST 10, RST 18 und RST 28 wird die dazugehörige Adresse ebenfalls angezeigt.

Bei Betriebssystemroutinen im Bereich zwischen &BB00 und &BDF4 (ohne &BBB7 und Bereich &BD5B bis &BDCA) wird der Name der entsprechenden Routine angezeigt. Zum Umfang des Programms gehören auch Statistikfunktionen. Für jeden abgearbeiteten Opcode wird ein separater Zähler geführt.

Der Wert des Zählers kann nach Beendigung von DISASS mit der BASIC-Funktion PRINT FNanz(Opcode) abgefragt werden (siehe BASIC-Starter). Das Total der abgearbeiteten Assemblerzeilen wird durch die Funktion PRINT FNtotal ausgegeben. Für alle, die die Arbeitsweise des Disassemblers untersuchen wollen: Die Einsprungadresse des Opcodes wird durch die Funktion PRINT FNadr$(Opcode) angezeigt.

Wichtige POKES

&A76A: ORG-Adresse des aktuellen Programmes (2 Byte).
&A76D: Länge der aktuellen Datei (2 Byte).
&A70A: Name der aktuellen Datei (11 Byte — sind vollständig zu benutzen!).

Mit dem Programm BINKING wird es möglich, auf einfache Weise von der BASIC-Ebene aus Manipulationen an Maschinenprogrammen vorzunehmen. Das bringt entscheidende Vorteile. Zum Beispiel können ohne ständiges Verlassen und anschließenden Neuaufruf eines Monitorprogramms oder dergleichen Programme vom BASIC aus gestartet und getestet werden.

M. Wepfer/jg , CPCAI

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1991
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1991
★ AUTHOR: Markus Wepfer
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSX-Binking    (CPC  Amstrad  International)    ENGLISHDATE: 2020-04-22
DL: 198
TYPE: ZIP
SiZE: 10Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
» Applications » Sprite Driver (Amstrad Action)
» Applications » DAMS (Keypad patched version)
» Applications » Maxam 2
» Applications » Bankman nos seus Programas (Amstrad Magazine)
» Applications » CCP-Patch für VDOS (CPC Magazin)
» Applications » Tracer (Compute Mit)
Je participe au site:
» 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
Page créée en 398 millisecondes et consultée 1016 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.