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:
★ TAG: /ASM/ASSEMBLER/PRINT/
★ LICENCE: LISTING
★ AUTHOR: Jürgen Weber

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Disassembler    (CPC  Magazin)    GERMANDATE: 2020-06-13
DL: 14 fois
TYPE: ZIP
SIZE: 10Ko
NOTE: 40 Cyls
.HFE: NON

» Disassembler    (CPC  Magazin)    LISTING    GERMANDATE: 2020-05-27
DL: 12 fois
TYPE: PDF
SIZE: 1432Ko
NOTE: 4 pages/PDFlib v1.6

Je participe au site:
» Newfile(s) upload/Envoye de fichier(s)
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » DLAN: Display LANguage
» Applications » Interceptor Software Fig-Forth
» Applications » CPC International Z80 - Assembler (CPC Amstrad International)
» Applications » Fonction Circle (CPC Revue)
» Applications » Fonction Paint (CPC Revue)
» Applications » Compilation Basic - Binaire (CPC Revue)

QUE DIT LA LOI FRANÇAISE:

L'alinéa 8 de l'article L122-5 du Code de la propriété intellectuelle explique que « Lorsque l'œuvre a été divulguée, l'auteur ne peut interdire la reproduction d'une œuvre et sa représentation effectuées à des fins de conservation ou destinées à préserver les conditions de sa consultation à des fins de recherche ou détudes privées par des particuliers, dans les locaux de l'établissement et sur des terminaux dédiés par des bibliothèques accessibles au public, par des musées ou par des services d'archives, sous réserve que ceux-ci ne recherchent aucun avantage économique ou commercial ». Pas de problème donc pour nous!

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 769 millisecondes et consultée 126 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.