ZXDB single-step

Discussion about ZX80 / ZX81 Software
User avatar
mrtinb
Posts: 1906
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

ZXDB single-step

Post by mrtinb »

Hi :)

I've made this program with ZXAS and using ZXDB to single-step through it.

Code: Select all

15 REM (
20 REM LD DE.L64
30 REM LD BC.5
40 REM CALL $0B6B *PRINTSTRING
50 REM JP $410
60 REM :L64DEC L *DB "HELLO"
70 REM LD HL.($3131)
80 REM INC (HL) *END DB
90 REM )
(JP $410 returns to BASIC with ZXDB installed)

I would have assumed CALL $0B6B would single step into the ROM code. The manual page 4 states:
R used straigth after a CALL executes the subrutine and regains single-step mode af the RETurn from the CALL.
I understand this as: The subroutines will be single-stepped unless you use R.

Has anyone used the single-step feature of ZXDB?
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXDB single-step

Post by PokeMon »

I guess, software debugging will work in RAM only. Mostly the code is replaced by a RST instruction and stored temporarily and when stepping further will be restored and next instruction replaced. This technique can not work using ROM. Otherwise you would need a hardware debugger interface. ;)
User avatar
mrtinb
Posts: 1906
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXDB single-step

Post by mrtinb »

That makes sense.

Thank you. :-)
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXDB single-step

Post by PokeMon »

If you want to debug some code you could copy the routine to RAM location, call the new address and debug it.
It does not work in a deeper level (CALL inside the routine to another one) or with absolute jumps (JP) but relative jumps should work.
So maybe a bit work to dive into the code but a way to debug rom code routines as well. At least at a basic level. ;)
User avatar
siggi
Posts: 988
Joined: Thu May 08, 2008 9:30 am
Location: Wetterau, Germany
Contact:

Re: ZXDB single-step

Post by siggi »

ASDIS is able to single step also through ROM routines.
But it's a German program and documentation is also in German:

http://www.zx81.de/soft/asdis_bs.htm

Regards
Siggi
ASDIS wrote: E. EINZL. Der Einzelschrittbetrieb führt sämtliche Z80-Befehle fast ohne Absturzgefahr aus. Dazu unterscheidet das Programm intern zwei Befehlsarten:

1. Befehle die den Program Counter (PC) ändern, werden in einer Spezialroutine simuliert (JP, JR, CALL, RET, usw.).

2. Alle anderen Anweisungen werden ausgeführt, nachdem ein Simulations-Stackpointer sowie alle Registerinhalte neu geladen wurden. Nach der Ausführung werden die Registerinhalte wieder im Speicher abgelegt. Der Simulationsstack ist anfangs auf $FF80 (bzw. $7F80 bei 6K RAM) gerichtet, wo genügend Platz nach oben und unten ist, er kann aber auch an jede andere Stelle im freien RAM gerichtet werden.


In dieser Funktion sind immer sämtliche Registerinhalte und Flags sichtbar. Bei den Flags bedeutet „1“ Flag gesetzt und „0“ Flag gelöscht. Es wurden nur der Interrupt Vector (IV) und der Refresh Counter (RC) weggelassen, weil sie beim Sinclair kaum benutzt werden können, ohne daß die Hardware durcheinander gebracht wird.

Unterhalb des PC-Registers wird der 2. Registersatz des Z80 aufgelistet, auf den bekanntlich nur durch die Befehle EXX und EX AF,AF zugegriffen werden kann.

Bevor der Einzelschrittbetrieb beginnt, kann man die Inhalte aller Register festlegen. Um ein bestimmtes Register auszuwählen, bewegt man den Cursor mit den Tasten 6 und 7 auf und ab. Nach 5 oder Shift 8 (beliebig) kann das Register, neben dem der Cursor steht, verändert werden. Auch hier können (wie immer) Symbole statt Zahlen eingegeben werden. (Wenn man z.B ein soeben assembliertes und abgelegtes Programm ab Label soundso testen will.)

Der Inhalt des PC entscheidet darüber, an welcher Stelle der Einzelschrittbetrieb aufgenommen wird. Sobald man die Registermanipulation (durch „8“ ) verläßt, wird der Befehl disassembliert, auf den der PC gerichtet ist, aber zur Sicherheit noch nicht ausgeführt.

5: mit dieser Unterfunktion werden alle Befehle mit Ausnahme an CALL und RST Anweisungen im Einzelschrittbetrieb ausgeführt. CALLs und RSTs werden echt ausgeführt. Diese Funktion hat ihren Sinn im Testen rechenintensiver Programme, wo es aus Zeitgründen sinnlos wäre, sie im Einzelschrittbetrieb zu testen.

Unterprogramme, die man schon getestet hat und die mit CALL (oder RST) aufgerufen werden, kann man also auf einmal ausführen lassen, um schneller zur kritischen Stelle zu kommen, die man eigentlich testen möchte. Man sollte natürlich vor der Benutzung dieser Taste sicher sein, daß entsprechende Unterprogramme auch einwandfrei arbeiten.

6: Diese Taste bewirkt den eigentlichen Einzelschrittbetrieb. Sooft man diese Taste drückt, führt man eine Einzelschritt-Simulation aus. Der Bildschirm wird gelöscht, der ausgeführte und der nächste auszuführende Befehl werden disassembliert und die neuen Registerinhalte angezeigt.

7: Mit dieser Taste gibt man eine NOP-Anweisung, also die Anweisung den nächsten Befehl zu überspringen statt auszuführen. Das hat immer dann einen Sinn, wenn man einen normalen Programmablauf verlaßen möchte, wie er durch Sprünge, CALLs oder RETs erzwungen würde, oder wenn eine Anweisung nicht ausgeführt werden soll, weil sie z.B. wichtige Speicher (wie Stack oder System-Variablen) überschreiben würde. Andere Beispiele für nicht ausführbare Befehle sind HALT, IM 0 und IM. 2.

8: Rückkehr ins Hauptprogramm.

9: Ausgabe an den Drucker.
My ZX81 web-server: online since 2007, running since dec. 2020 using ZeddyNet hardware
http://zx81.ddns.net/ZxTeaM
User avatar
mrtinb
Posts: 1906
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXDB single-step

Post by mrtinb »

Where can I download ASDIS?

http://www.zx81.de/soft/swd_asdi.htm seems only to have a ASDIS.C version, that works with an old emulator. Is there a .P-file anywhere?

The page mentions both ASDIS16K and ASDIS64K.
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
siggi
Posts: 988
Joined: Thu May 08, 2008 9:30 am
Location: Wetterau, Germany
Contact:

Re: ZXDB single-step

Post by siggi »

ASDIS.C is the binary code only. You could load it using real hardware (ZxPand, Mefisdos, UFM, Zxmore, ...) into ram (or EEPROM ;) like me) starting at 8192 like any other binary file.

Here is a P-File, which contains that code: Type RUN, R(Restore), Enter, Q(uit). Then the code has been copied to ram at 8K and can be started by RAND USR 8192.

Regards
Siggi
asdis8k.p
ASDIS for start address 8192
(13.04 KiB) Downloaded 242 times
My ZX81 web-server: online since 2007, running since dec. 2020 using ZeddyNet hardware
http://zx81.ddns.net/ZxTeaM
User avatar
mrtinb
Posts: 1906
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXDB single-step

Post by mrtinb »

siggi wrote:Here is a P-File
Thank you Siggi.

I've tried to read the manual for ASDIS but German is not easy for me.

I think I have figured out how the singlestep works.

Is there any way to set a breakpoint, or do I have to singlestep through all of my program?
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
siggi
Posts: 988
Joined: Thu May 08, 2008 9:30 am
Location: Wetterau, Germany
Contact:

Re: ZXDB single-step

Post by siggi »

mrtinb wrote: Is there any way to set a breakpoint, or do I have to singlestep through all of my program?
No, ASDIS does not use breakpoints. You could:
- singlestep your program from the beginning and skip called subroutines by pressing "5" (then the subroutine "call" will be executed in realtime)
or
- start singlestep directly at the critical subroutine (maybe where the Zeddy crashed last time, while you skipped the call) and setup the registers (upper screen) as needed by the subroutine. Then step into the critical subroutine

Hope that helps
Siggi
My ZX81 web-server: online since 2007, running since dec. 2020 using ZeddyNet hardware
http://zx81.ddns.net/ZxTeaM
User avatar
mrtinb
Posts: 1906
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXDB single-step

Post by mrtinb »

siggi wrote:No, ASDIS does not use breakpoints. You could:
- singlestep your program from the beginning and skip called subroutines by pressing "5" (then the subroutine "call" will be executed in realtime)
The forth implementation I'm debugging rarely uses CALL. It's "JP direct" and "JP (indirect)" based upon an stack.

:(
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
Post Reply