APPLICATIONSPROGRAMMATION ★ Die Prozessor-Lupe ★

Einzeischritt-Simulator (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 ★ 

Einzelschrittsim ula tor für CPC 464

Viele Leser, die in Maschinensprache programmieren, werden folgende Situation sicherlich kennen: Das mühsam erstellte Programm stürzt schon beim ersten Probelauf ab, und eine langwierige Fehlersuche beginnt. Dieses Debugging kann mit einem Einzelschrittsimulator, der die Abarbeitung des Maschinenprogrammes simuliert und nach jedem Befehl die Registerinhalte anzeigt, erheblich verkürzt werden.


Die Programmübersicht

  • Die Verarbeitung fast aller Z80-Befehle.
  • Eine übersichtliche Ausgabe aller Registerinhalte nach jedem Schritt.
  • Die Möglichkeit, sowohl im echten Einzelschrittmodus zu arbeiten (das heißt, das Programm wartet nach jedem Schritt auf einen Tastendruck), oder aber eine fortlaufende Abarbeitung der Befehle zu wählen.
  • Eine hohe Verarbeitungsgeschwindigkeit durch Programmierung in Maschinensprache.
  • Eine einfache Bedienung.

Der Umgang mit dem Simulator

Doch nun zum Programm selbst. Nachdem das Programm laden ist. werden Sie nach der Startadresse des zu testenden Progrimmes gefragt. Es muß unterhalb der Adresse &9C50 liegen, da der Binärteil des Simulators im Adreßbereich ab &9C50 liegen Ferner wäre es auch nützlich, wenn Sie neben sich ein Listing lhres Maschinenprogrammes liegen hätten. Danach drücken Sie bei der Abfrage "BASIC-Aufruf (j/n) ?" die n-Taste. Der Bildschirm wird nun gelöscht, das Programm simuliert den ersten Befehl, den es an Ihrer Startadresse findet und zeigt die Registerinhalte in der unteren Bildschirmhälfte an. Drücken Sie nun irgendeine Taste außer ENTER und das Programm nimmt sich den nächsten Befehl vor. Am Inhalt des PC-Registers erkennen Sie, wo der Befehl steht, der als nächstes simuliert wird. Diesen Vorgang können Sie nun solange wiederholen, bis die Meldung *RETURN* erscheint. Nach einem erneuten Tastendruck kehrt das Programm in Zeile 440 des BASIC-Programmes zurück. Wenn Sie nun die ENTER-Tastc drücken, so wird das Programm beendet. Andernfalls werden Sie wieder nach einer Startadresse gefragt und die Simulation beginnt von neuem. Mit ENTER können Sie die Simulation jederzeit unterbrechen und in Zeile 440 zurückkehren.

Der BASIC-Aufruf

Wenn Sie bei der "BASIC-Aufruf (j/n) ?" Abfrage j eingeben, also BASIC-Aufruf wählen, so können noch bis zu 32 Parameter übergeben werden. Sie werden dann vom Programm nach der Anzahl der Parameter gefragt. Wenn Sie einen BASIC-Aufruf ohne Parameter wünschen, geben Sie 0 ein. ansonsten die Anzahl der zu übergebenden Parameter. Anschließend können Sie die Parameter eingeben. Bei Beginn der Simulation haben dann die einzelnen Register folgenden Inhalt:

ohne Parametermit Parametern
A:0n
F:&68&28
B:&20&20-n
C: &FF&FF
DE: anzuspringende Adresseletzter übergebener Parameter
IX: Stapeladr &BFFEStapeladr. &BFFE - 2*n

(n = Anzahl der Parameter)

Die Parameter selbst werden ab Adresse &BFFE auf den Stapel gelegt (für jeden Parameter zwei Bytes). Danach kommen noch sechs weitere Bytes, die für die Simulation nicht von Bedeutung sind, auf den Stapel. Wird nun zum Beispiel ein Maschinenprogramm mit drei Parametern aufgerufen, so enthält das SP-Register (der Stackpointer. der immer auf den letzten Stapeleintrag zeigt) folglich die Adresse &BFF2. Ohne Parameter enthält das SP-Register die Adresse &BFF8. Dieser besondere Aufbau des Stapels und die speziellen Registerinhalte werden somit bei einem BASIC-Aufruf wirklichkeitsgetreu simuliert.

Aufruf von Maschinenebene

Zu Beginn der Simulation enthalten alle Register (bis auf PC und SP) den Wert Null. Das SP-Register hat stets den Inhalt &BFFE, da nur die Rücksprungadresse (symbolisiert durch den Wert &FFFF) auf dem Stapel liegt. Das Maschinenprogramm beendet die Simulation durch Ausgabe der *RETURN* -Meldung nur dann, wenn es auf einen RET-Betehl trifft und das SP-Register den gleichen Wert enthält wie zu Beginn der Simulation (nur dann kann die korrekte Rücksprungadresse vom Stapel geholt werden).

Die Ausgabe auf dem Bildschirm erfolgt beim F-Register binär (die wichtigsten Flags sind beschriftet), beim a-, HL-, DE- und BC-Rcgister dezimal und hexadezimal. Die übrigen Register (IX, IY, SP und PC) werden hexadezimal ausgegeben. Bei der dezimalen Ausgabe kann (bis auf das A-Register) eine vorzeichenfreie (0 bis 65535; dargestellt durch das + Symbol) oder eine vorzeichenbehaftete (-32768 bis +32767; dargestellt durch das +/- Symbol) Ausgabe gewählt werden. Dies kann während der Simulation jederzeit durch drücken der "/" -Taste erreicht werden. Ein Drücken der rechts davon (über der CTRL-Taste) liegenden Taste führt dazu, daß der untere Bildschirmteil, in dem die Ausgabe erfolgt, gelöscht und neu aufgebaut wird.

Durch Drücken der "." -Taste können Sie vom echten Einzelschrittmodus in eine fortlaufende Verarbeitung der Befehle (kein Warten auf einen Tastendruck nach jedem Befehl) umschalten. Durch erneutes Drücken dieser Taste gelangen Sie wieder in den ursprünglichen Modus. Bei der fortlaufenden Verarbeitung kann die Geschwindigkeit durch Drücken der " " -Taste in vier Stufen verändert werden. Ein Druck auf die ENTER-Taste führt, wie schon erwähnt, zum Abbruch der Simulation.

Das Funktionsprinzip .. .des Einzelschrittsimulators läßt sich grob folgendermaßen beschreiben: nach der Einrichtung des simulierten Stapels werden die Register gespeichert. Bei einem Teil der Befehle (JP. CALL, RET, sämtliche Befehle, die das SP-Register beeinflussen etc.) werden diese vom Maschinenprogramm selbst manipuliert; mit den übrigen (LD, BIT, RES. SET etc.) wird jedoch wie folgt verfahren: ein solcher Befehl wird mit dem Opcode &C9 am Ende in einen bestimmten Speicherbereich kopiert, die Register werden mit den gespeicherten Werten geladen und der Befehl als normales Unterprogramm ausgeführt. Danach werden die dadurch veränderten Register und Flags wieder gespeichert und anschließend ausgegeben.
Bitte beachten Sie deswegen:
Solche tatsächlich ausgeführten Befehle, die das Maschinenprogramm ab Adresse &9C50 oder andere wichtige Adressen im RAM überschreiben, werden wahrscheinlich zum Absturz des Rechners führen. Dies gilt auch für Sprünge ins ROM mittels RST-Befehlen. die zum Absturz führen können (zum Beispiel ein Sprung nach &000). Die übrigen Sprünge ins ROM werden jedoch problemlos ausgeführt, wobei eine Ausgabe der Register jedoch erst wieder nach der Rückkehr ins RAM erfolgt. Beachten Sie außerdem, daß folgende Z80-Befehle nicht ausgeführt werden:

  • IM 0
  • IM 1
  • IM 2
  • RETI
  • RETN
  • sowie
  • EX AF,
  • 'AF
  • EXX
  • RST &00
  • RST &38
  • HALT
  • DI
  • EI

Bei diesen Befehlen wird lediglich das PC-Register für den nächsten Befehl erhöht. Bei den letzten sieben Befehlen werden Sie zusätzlich noch akustisch darauf aufmerksam gemacht.

Das Abtippen

Listing 1 ist der BASIC-Teil des Programmes. Nach dem Abtippen sichern Sie ihn mit SAVE "Name auf Datenträger" (zum Beispiel: Diskette) ab. Listing 2 erzeugt nach dem Starten den Maschinencode und speichert ihn unter dem Namen eschmco-de.BIN ab. Der abgespeicherte Maschinencode wird dann vom Listing 1 nachgeladen und initialisiert. Das Listing 2 sollte aus Sicherheitsgründen vor dem Start abgespeichert werden. Danach ist es mit RUN zu starten.

CPC Amstrad International

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1987
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL-SONDERHEFT
★ AUTHOR: Manfred Doser
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Einzeischritt-Simulator    (CPC  Amstrad  International)    GERMANDATE: 2020-04-28
DL: 176
TYPE: ZIP
SiZE: 6Ko
NOTE: 40 Cyls
.HFE: Χ

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

Lien(s):
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
Page créée en 145 millisecondes et consultée 1513 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.