APPLICATIONSPROGRAMMATION ★ DISASSEMBLER (CPC MAGAZIN) ★

Disassembler (CPC Magazin)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 ★ 

Nach dem Start des Programms werden zuerst die Mnemonics in Stringarrays eingelesen. (Nach einem Abbruch mit ESC sollte man es immer nur mit RUN neu starten und nicht mit CONT, da es sonst beim CPC 464 Vorkommen kann, daß die Strings Unsinn enthalten.)

Zu Beginn wird der Anwender nach Anfangs- und Endadresse gefragt. Gibt man jeweils nur ENTER ein, wird als Anfangsadresse &0000 und als Endadresse &FFFF angenommen. Bei Eingabe von ”R” wird auf RAM- bzw. ROMdisassemblierung umgeschaltet. Gibt man bei der Drucker-Abfrage "J” ein, erfolgt die Disassemblierung auf den Drucker, sonst auf den Bildschirm.

Je nach Zustand der Variablen ”rf” liest der Disassembler die Maschinencodes aus dem ROM bzw. RAM aus. Es erfolgt eine Vorauswahl; fängt der Code mit &DD oder &FD an, so werden die Z80-Indexregister angesprochen, und das Programm verzweigt entsprechend. Bei &ED handelt es sich um einen Zusatzbefehl, den der Z80 gegenüber dem 8080 zusätzlich erhält (z.B. LDIR). Bei &CB wird zu Bit- und Rotieroperationen verzweigt. Ansonsten sind es 8080-Befehle oder relative Sprünge.

Manche OP-Codes sind logisch aufgebaut (z.B.: LD r,r' = 01aaabbb, wobei aaa für den Teilcode des Registers r und bbb für den Teilcode des Registers r' steht). Ihre Mnemonics werden berechnet und zusammengesetzt und nicht wie sonst aus Stringarrays ausgelesen.

Beispiele:

Code &78 = &X01111000 = 01 111 000 01 = LD r,r'; 111 Code für A; 000 Code für B
Die Register stehen im Stringarray r$(). r$(&x111) = ”A” etc. Mnemonic: LD A,B

Code = &C3
Im Stringarray: op$(&C3) = JP QQ.
QQ bedeutet, es werden noch zwei Bytes benötigt, die aus dem zu disassemblierenden Bereich geholt werden; z.B. steht in der Speicherzelle Nr. 5 der Wert &C3. In Nr. 6 und 7 stehen &80 und &05.
Mnemonic: JP 0580 (ein Sprung nach &0580, RESET CONTINUED)

Nach &EB, &DD und &FB muß noch mindestens ein weiteres Byte folgen. Dies ergibt schon einmal mindestens 765 Kombinationsmöglichkeiten. Der Z80 verwendet aber bei weitem nicht alle. Wird kein gültiger Befehl erkannt, gibt der Disassembler UNKNOWN CODE aus. Dies kann auf irgendwelche Dateien hinweisen (z.B. im Upper ROM ab DE01), wo keine Op-Codes, sondern Sprungtabellen liegen. Merkwürdigerweise versteht der Z80 mehr Op-Codes, als Zilog dokumentiert hat (z.B. Möglichkeiten zur byteweisen Manipulation der Indexregister). Der Disassembler übersetzt die undokumentierten Codes, soweit sie mir bekannt sind.

Beispiele:

LD A,LY Der Akku wird mit dem Lowbyte des IY-Registers geladen.
SLL(HL) (HL) wird nach links geschoben, Bit 0, (HL) = 1.
TSTI (C) Die Flags werden entsprechend dem vom Port (C) gelesenen Wert gesetzt.

Sämtliche Zahlen, die der Disassembler ausgibt, sind Hexadezimalzahlen, allerdings ohne ”&”. Bei der Adresseneingabe sind auch Dezimalzahlen möglich. Dies muß jedoch vorher durch die Eingabe von ”Z” für "dezimal” angegeben werden. Bei der Disassemblierung wird rechts auch noch gleichzeitig der Speicherinhalt in ASCII-Form angezeigt. Durch Drücken von DEL wird die Disassemblierung unterbrochen, und es erscheint wieder die Adressen-und Druckerabfrage. Nach SPACE erfolgt eine Unterbrechung, bis irgendeine Taste gedrückt wird.

Programm laden

Man wird nach der Adresse gefragt, an die das Maschinenprogramm geladen werden soll. Drückt man nur ENTER, wird &5000 angenommen. Nach erfolgreichem Laden werden alle wichtigen Daten ausgegeben. Die Adresse darf nicht unter &5000 liegen, sonst wird der Disassembler überschrieben. Vorsich! Wenn das zu ladende Programm länger als ungefähr 21 KByte ist, werden die Vektoren überschrieben, und der Computer stürzt ab. Stimmen natürliche Adresse und Ladeadresse nicht überein, muß man einen Offset angeben, so daß bei der Disassemblierung die richtigen Adressen ausgegeben werden. Der geeignete Offset liegt auf der ”0” im Zehnerblock, die Ladeadresse auf dem Punkt.

Die Breakpunkt-Funktion

Sie gibt die Z80-Register nach dem Abarbeiten eines MC-Programmes aus. Zuerst wird die Adresse verlangt, an der der Breakpunkt gesetzt werden soll. Dort wird dann das MC-Programm abgebrochen und die Registerinhalte ausgegeben (in die Adresse wird &F7 gepoked, RST &30, der User-Restart, der nach Start des Disassemblers verändert wird). Schließlich muß man noch die Adresse eingeben, ab der das MC-Programm abgearbeitet werden soll. Danach erfolgt die Abfrage nach Ausgabe auf Drucker, und das Maschinenprogramm wird gestartet.

Vorsicht! Einen Breakpunkt sollte man nur verwenden, wenn das MC-Programm an seiner ursprünglichen Adresse eingeladen wurde oder wenn es keine absoluten Sprünge enthält. Das MC-Programm darf den Stack manipulieren, und es muß keine Rücksprungadresse bewahren, da nach dem Breakpunkt direkt ins Basic-ROM gesprungen wird. Dies hat den Nachteil, daß für die 664/6128-Compu-ter die Rücksprungadresse angepaßt werden muß. Die Einsprungadresse ist beim CPC 464 &F1EA (Basic-Befehl CALL). Es ist die Adresse, an die ein Maschinenprogramm nach einem normalen "RET” zurückspringt.

Jürgen Weber , CPC Magazin

★ PUBLISHER: CPC Magazin
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC MAGAZIN 1985 1986
★ AUTHOR: Jürgen Weber
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Disassembler    (CPC  Magazin)    GERMANDATE: 2020-05-21
DL: 220
TYPE: ZIP
SiZE: 10Ko
NOTE: Extended DSK/40 Cyls
.HFE: Χ

» Disassembler    (CPC  Magazin)    LISTING    GERMANDATE: 2021-02-02
DL: 229
TYPE: PDF
SiZE: 1266Ko
NOTE: 4 pages/PDFlib v1.6

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

Lien(s):
» Applications » Video-Games (CPC Amstrad International)
» Applications » RSX Variablendump (CPC Magazin)
» Applications » RSX Stack (CPC Magazin)
» Applications » Extended Basic
» Applications » Variable Dump (Computing With the Amstrad)
» Applications » Teach Yourself Amstrad Basic - A Tutorial Guide part 2
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 429 millisecondes et consultée 1258 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.