ASDIS Einzelschritt

ZX-Team Forum
Antworten
Werner
User
Beiträge: 24
Registriert: 14.09.2014, 21:29

ASDIS Einzelschritt

Beitrag von Werner » 06.05.2018, 22:13

Hallo,
kann mir bitte einmal jemand auf die Sprünge helfen: ASDIS erlaubt mir vor Beginn des Einzelschrittbetriebs die Registerinhalte manuell vorzugeben. Wie kann ich jedoch während des Einzelschrittbetriebs den Inhalt des Akkumulators (z. B.) manuell verändern?
Ein kurzer Ausschnitt aus dem Programm:

$4086 IN A, $FE
$4088 CP D
$4089 JR Z, $408F

Hier würde ich gerne unterschiedliche Werte am Port $FE simulieren.

Danke für jede Hilfe.

Gruß
Werner

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 07.05.2018, 09:13

Hallo Werner
ganz einfach: Du beendest den Einzelschrittmodus und startest ihn gleich wieder. Die Register stehen dann in letzten Zustand (wichtig: PC!) und Du kannst die anderen Register dann wie gewünscht ändern, bevor Du wieder den ersten (nächsten) Einzelschritt machst.

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Werner
User
Beiträge: 24
Registriert: 14.09.2014, 21:29

Re: ASDIS Einzelschritt

Beitrag von Werner » 07.05.2018, 23:32

...super, danke Siggi,

läuft wunderbar. Hätte ich eigentlich diese ASDIS-Funktionalität auch selbst irgendwo nachlesen können (und muss ich mich schämen es nicht gefunden zu haben...)oder bin ich in diesem Fall entschuldigt?

Gruß
Werner

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 08.05.2018, 07:23

So direkt steht es nirgends. Ich habe das auch erst durch die Benutzung gemerkt. ASDIS benutze ich seit Jahrzehnten und ich finde es schlichtweg als genial. Soviele praktische Funktionen auf sowenig Platz. Falls du die Anleitung nicht hast, hier ist sie:
ASDIS.pdf
(203.66 KiB) 24-mal heruntergeladen
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 08.05.2018, 09:34

Ja, ASDIS ist schon ein schnuggeliges Stück Software :mrgreen:

Das einzige was ich vermisse, ist der Möglichkeit, an einer Stelle irgendwo im laufenden Programm zurück zum ASDIS zu hüpfen, um diese Stelle im Einzelschritt zu debuggen (so so was wie einen BREAKPOINT). Dazu müsste man nicht das ganze (riesige) Programm von Beginn an im Einzelschritt-Modus durchlaufen.

Oder gibt's dazu einen Trick, wie man das machen könnte und den ich noch nicht kenne?

Die im Manual beschriebene Methode, getestete und "fehlerfreie "Unterprogramme in Echtzeit (nicht Einzelschritt) zu durchlaufen, klappt nicht so einfach bei "fertigem" MC (z. B. die ZeddyNet-Libs), deren "fehlerfreie" Teile man nicht so einfach in Unterprogamme umstrukturieren kann und bei der in einem komplexen Kontext (z. B. LOAD eines Files über ZeddyNet, was aus ASDIS heraus nicht so einfach nachstellbar ist) debuggt werden soll.


Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 08.05.2018, 13:12

Und noch eine Kleinigkeit, die man beheben müßte: Die Variablen für die 8KB-Version werden unterhalb der 64KB-Grenze abgelegt. Blöd, wenn da kein Speicher ist. Und die Ramtop-Version verbraucht zuviel Speicher, da wäre eine abgespeckte Version nicht schlecht. Um das zu Beheben, habe ich versucht, ASDIS zu disassemblieren und die Variablen umzulegen. Dann hätte man ASDIS auch überall laufen lassen können. Leider ist das Vorhaben höchstwahrscheinlich an mir und an den Z80-Assemblern für PCs gescheitert. Kai hat sich auch schon an das ASDIS-Innenleben gemacht. Er hat eine Version, die bei Anwahl der Funktion 1 den Quelltext an einen externen Druckertreiber schickt. Das benütze ich öfters. Außerdem hatte er vor, über die A$-Variable Makros einzufügen. Das hat aber leider nicht geklappt.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 08.05.2018, 13:39

Joachim hat geschrieben:
08.05.2018, 13:12
Kai hat sich auch schon an das ASDIS-Innenleben gemacht.
Hat er ASDIS gepatcht oder hat er einen assemblierbaren Source (oder Teil des Sources), den er benutzt hat?
Er hat eine Version, die bei Anwahl der Funktion 1 den Quelltext an einen externen Druckertreiber schickt.
Ich benutze zum Drucken die Standard-Funktionalität mit der Taste 9 (druckt alles, nicht nur den Quelltext, notfalls mit einem Hammer als Ballast auf der Taste 9 :mrgreen: ). Da ich auch einen Rompatch im BASIC-Rom habe, die den Druckeraufruf auf einen externen Druckertreiber im RAM umleitet, kann ich da verschiedene Druckertreiber nutzen und auf Sinclair-Drucker, parallen Drucker oder Netzwerk-Drucker (via ZeddyNet (*)) ausdrucken. In Zeiten, wo schon viele neue Zeddy-Roms unterwegs sind, ist das ja meist kein Problem mehr.

Nachtrag (*):Dazu benutze ich allerding des ASDIS bei Laufadresse 40K, da ja bei 8K die ZeddyNet-System-Variablen liegen müssen.
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 08.05.2018, 13:49

Da muss ich mal nachsehen, wie er das gemacht hat. Es gibt auf jeden Fall ein Zusatzprogrämmchen, das 32 Spaces beim Druck voranstellt, wenn bei einer Kommentarzeile nach dem Semikolon ein Space steht. Damit sind die Kommentare dann in der rechten Spalte beim Ausdruck. Ich habe das mal angepaßt und konnte die Adressen ganz links und die Hexdumps weglassen. So kann man leichter zwei Sourcen vergleichen lassen bzw. für einen anderen Assembler verwenden. Saudumm nur, dass ich genau dieses Progrämmchen nicht mehr finde. Müßte ich mir glatt nochmals schreiben.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 08.05.2018, 21:22

Joachim hat geschrieben:
08.05.2018, 13:12
Und noch eine Kleinigkeit, die man beheben müßte: Die Variablen für die 8KB-Version werden unterhalb der 64KB-Grenze abgelegt.
Hallo Joachim
hat schon mal jemand die Struktur der ASDIS-Variablen analysiert? Wenn ja: dann könnte man ja selbst ein "Breakpoint"-Programm schreiben (das z.B. 10 Breakpoints verwaltet): 3 Bytes der Breakpoint-Position (kann nur im RAM sein!) retten und durch "JP BREAKPOINT_HANDLER" ersetzen.
Wenn Breakpoint durch das User-Programm erreicht wird, wird in den Breakpoint-Handler gehüpft: der kann dann die Register und Flags in die Einzelschritt-Register-Variablen des ASDIS (sofern bekannt :wink: ) kopieren, die 3 zuvor geretten Bytes des Codes restaurieren (es wäre also ein einmaliger Breakpoint) und in den ASDIS-Einzelschritt-Modus (oder ASDIS direkt) hüpfen, damit der im Einzelschritt weiter machen kann.

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 09.05.2018, 09:37

Hallo Siggi,
dein Vorschlag ist genial. Hier http://forum.tlienhard.com/magazin/1998/magazin_598.pdf findest du ab Seite 22 Kais ausführliche Beschreibung der A$-Variablen. Und hier
asdis_reassembliert.asm
(86.39 KiB) 18-mal heruntergeladen
mein Versuch ASDIS zu reassemblieren. Vielleicht hilft dir das alles etwas. Ich werde nochmal versuchen, diese Source zu assemblieren. Vielleicht klappt es ja diesmal.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 09.05.2018, 10:45

Hallo Joachim
mit den "Variablen" habe ich die internen Variablen des ASDIS gemeint (die er bei 64K ablegt und nicht A$ für den Source).
Ich gehe davon aus, daß ASDIS in seinen internen Variablen (bei 64K) auch den Registerinhalt beim Einzelschrittmodus ablegt. Wenn man den Ort und die Reihenfolge der dort abgelegten Z80-Register-Inhalte kennt, kann man die vom Breakpoint-Programm füllen lassen.

Habe den Code mal kurz überflogen und darin noch viele Zugriffe auf Adressen $7Fxx gefunden. War das die 16K-Version, die Du disassembliert hattest?
M.E. müssen diese Werte noch überarbeitet werden.

Bsp:

Code: Alles auswählen

l63e9:  call    l7975
        exx     
        push    hl
-->   ld      (7f8ch),sp
        ld      sp,7f74h
        pop     hl
        pop     de
        pop     bc
        pop     af
        exx     
        ex      af,af'
-->    ld      sp,7f80h
        pop     iy
        pop     ix
        pop     hl
        pop     de
        pop     bc
        pop     af
 -->   ld      sp,(7f7eh)
        jp      l403e
-->    ld      (7f7eh),sp
-->    ld      sp,7f8ch
        push    af
        push    bc
        push    de
        push    hl
        push    ix
        push    iy
        ld      iy,4000h
        ld      sp,7f7ch
        exx     
        ex      af,af'
        push    af
        push    bc
        push    de
        push    hl
        ld      sp,(7f8ch)
        pop     hl
        exx     
        jp      l797d
 
Durch diesen Code werden alle Z80-Register gerettet/restauriert . Das könnte was mit dem Einzelschritt-Modus zu tun haben (könnte man durch POKEn ja mal probieren).

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 09.05.2018, 12:03

Hallo Siggi,
ich war mir nicht sicher, drum habe ich dir Infos über beide Variablenarten gegeben.
Es war die 16KB-Version. Hintergrund: ich wollte ein ASDIS für den AX81, der nach 32KB kein RAM mehr hat und das im Bereich 8-16KB läuft.
Ja, über Poken bzw. über Experimentieren mit irgendeiner Source könnte man rausfinden, wo die Register etc. abgelegt werden. Ich kann ja ASDIS mit ASDIS anschauen ;) Die Adressen für die Variablen kenne ich jetzt ja. Ich bleibe da mal dran und berichte. Vielleicht kann Kai noch etwas dazu beisteuern.
Danke für's Drüberfliegen. Ich bin gerade dabei, die Syntax checken zu lassen (derzeit mit ASide).
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2361
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: ASDIS Einzelschritt

Beitrag von siggi » 09.05.2018, 16:17

Hallo Joachim
ich hatte ja früher schon mal nach dem ASDIS-Source gefragt. Damals hatte ich auch den Beginn disassembliert (die 8K-Version mit Variablen bei 64K), der anders aussieht als in Deinem Source. Dort beginnt der Code mit:

Code: Alles auswählen

        jp      l759a
l61ab:  call    l7975
        ld      hl,(7f54h)
        ld      (7f6ah),hl
        ld      hl,(7f5eh)
        ld      (7f6ch),hl
was ähnlich dem aussieht, was ich seinerzeit disassembliert hatte. Aber da hatte ich noch weitere Sprünge davor! Siehe
viewtopic.php?f=2&t=483&p=2534#p4114
bzw. direkt das Bild:
Bild

Gibt es verschiedene ASDISse mit verschiedenen Einsprungpunkten????
Weißt Du inzwischen mehr zu diesen Sprungzielen? Z. B. aus Deinem Source?

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 985
Registriert: 06.11.2004, 20:21

Re: ASDIS Einzelschritt

Beitrag von Joachim » 09.05.2018, 16:52

Hallo Siggi,
das ist mir auch schon aufgefallen. Ich bin dabei die Version für 8KB zu disassemblieren. Sobald ich Erkenntnisse habe, gebe ich Laut.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Antworten