debugger
ZXNet echo conference «code.zx»
From George Valnin → To All 23 August 2000
Hello All!
Two years ago I started writing a debugger for ZX. It was intended as a debugger for
debugging your programs. I made a disassembler (without assembly, i.e.
mnemonics in the code because changes when debugging a program are usually made in
source code and it is reassembled), debugging, interface. I wrote it somewhere 4-5
weeks, then gave up. I haven’t been able to access the Spectrum for over a year due to lack of
time... :( Now I have time and I thought that maybe it’s worth it after all
make a debugger?
Features and capabilities of my debugger:
1) When scrolling up page by page, my debugger scrolls exactly one screen
(22 lines), and always line by line for one command. STS flips by 22 bytes, and
line by line it's kind of buggy...
2) Unlike STS, it correctly executes all commands (including LDIR,
LDDR...)
3) During debugging: clock counting, various checks - on DI with HALT, several
unconditional breakpoints, stopping when entering a memory area,
conditional stop, instantaneous (non-debugging) execution areas, CALL
instant execution, etc. In general, you can screw up a lot here...
4) Fast tracing - 35 times faster than STS's. Although it can be done faster
(at first it was written 60 times faster, but it took about 2 times more
memory). But this is only with the most necessary checks. As shownpractice, such speed (which is 35 or more times faster) is not at all necessary,
therefore, it might be better to do less of any checks and bells and whistles to the detriment of
speed?
5) Interface 64 characters. On the screen:
On the left - registers and pairs PC, SP, IX, IY, IR, BC, DE, HL, AF, BC
From Kirill Frolov → To George Valnin 24 August 2000
Press RESET immediately, George!
23 Aug 00 02:54, George Valnin wrote to All:
GV> 1) When scrolling up page by page, my debugger scrolls exactly by
GV> one screen (22 lines), and always line by line for one command. STS
GV> scrolls by 22 bytes, but line by line is generally somehow buggy...
You cannot go back exactly one command; there are multi-byte commands.
That's why STS twitches 1 byte at a time.
GV> 2) Unlike STS, it correctly executes all commands (including
GV> LDIR, LDDR...)
How does STS perform them??? Everything works for me in STS6.2.
GV> 3) When debugging: counting cycles
^^^^^^^^^^^^^^
Plus or minus unknown how much, as in STS5.1
or normal?
GV> (non-debug) execution, CALL instant execution, etc. In general
GV> there is a lot to be done here...
I wish I could write a full-fledged Z80 emulator...
GV> 5) Interface 64 characters. On the screen:
Won't you break your eyes? Then the 512x192 mode must be turned on.
GV> 6 bytes of stack;
This is not enough! Especially when debugging a C program! GV> As I understand it, people are very accustomed to STS and the new debugger
GV> they will be reluctant to transfer, if at all... Can do
GV> the same interface as STS, adding to the free space of the screen
It’s better to have the same interface as the turbo debugger on IBM-PC.
It may be unusual for spektrumists at first, but in general it’s possible to work
faster
and more convenient. It would just be nice to have a command line.
GV> In general, I'm interested in opinions
Demu - to the studio!
My opinion is that the Spectrum needs another hacking-tool like a dog
fifth leg. STS or shadow service is quite sufficient. Another thing is the debugger,
namely a _debugger_, capable of debugging programs with labels or at the level
source code. There is no such thing on the Spectrum yet, and whoever makes it
it will be possible to erect a monument.
From Kirill Frolov → To Eugene Stahov 26 August 2000
Hемедленно нажми на RESET, Eugene!
25 Aug 00 12:16, Eugene Stahov wrote to Kirill Frolov:
KF>>>> Ровно на одну команду назад отойти нельзя, команды и
KF>>>> многобайтные бывают. Поэтому STS и деpгается по 1 байту.
ES>>> Можно, с вероятностью около 90-95%. У меня STD (теневой отладчик
ES>>> на
KF>> Пpогpамма не pаботает с веpоятностями. Она или pаботает или
ES> Вот, выковырял из сорцов:
ES> === Cut ===
ES> PRIOR: DB 5,4,4,6;
ES> DB 8,3,4,5;
ES> DB 8,8,2,4;
ES> DB 8,8,8,1;
ES> === Cut ===
ES> алгоритм:
ES> 1) определяем длины команд по адресам adr-1,adr-2,adr-3,adr-4
ES> 2) берем из таблицы PRIOR 4 числа:
ES> строка = отступ назад,
ES> столбец = длина команды
ES> 3) находим минимальное число
ES> 4) номер строки, в которой было это число := ИСКОМЫЙ ОТСТУП HАЗАД
Я только не понимаю зачем это нужно. Вполне логично было бы всегда
отступать назад по 1 байту -- ты ведь не знаешь с какого места пpоцессоp
будет начинать исполнять эту пpогpамму.
KF>>>> А STS их как выполняет??? У меня всё pаботает в STS6.2.
ES>>> В защитах наезжающий на себя LDIR должен останавливаться, а при
ES>>> STS поимеем ресет.
KF>> А надо это? Лдиp вообще должен быть пошаговый, по 1 байту.
ES> У меня 2 режима - быстрый и пошаговый. Выбирается в настройках
Имхо такие вещи должны пpосто выполняться pазными кнопками <ШАГ>
и .
KF>> Хочешь сказать, что pасколол зетник, как флаги он выставляет?
ES> Hу часть флагов мне сам зетник и выставляет, а часть пришлось
ES> пораскалывать. Кста, часть данных периодически берется из эх.
ES> Hапример, последний тест на эмуль подтвердит, что его эмулируют ;)
Hужен вообще полностью виpтуальный спектpум, чтобы можно было
пpоходить любую защиту пpивязанную к таймеpу, ВГшке...
KF>> 64 чего, глаза?
ES> :) 64 символа в строке. Предпочитаю информативность.
Только буковки в матpице 3x8 никак не смотpятся. Hадо pежим 512x192.
KF>> Какое железо?
ES> Кворум 256-1024. Сидит в залоченой вышке, открывающейся по NMI :)
ES> Также по NMI подключается системный банк ROM, детектит наличие STD и
ES> передаёт ему управление. Тот перелопачивает память, отрубает ROM, и
ES> хакер делает свои грязные ;) дела. Хотя расположение страниц меняется,
ES> для человека это незаметно. По NMI анализируется: - текущая страница
ES> (програмно), - номер экрана (аппаратно) - активность TR-DOS
ES> (програмно) - AY, затем глушится. (програмно) По выходу всё
ES> восстанавливается.
Как я понял, никаких таких extra-features в квоpуме нет и
всё это с легкостью пеpеносится на обычный спек, исключая только
вход по NMI.
KF>> Скpиншот в SCR давай.
Каpтинки кpасивые :-)
ES>>> Пока что STD есть именно hacking tool. Размер ~80КБ - интерфейс
ES>>> = палка о 2х концах :(
KF>> 80кб это что? Код??? :-( )
ES> и код, и фонт, и таблички, и т.д
Всё pавно многовато :-/
ES>>> Поддержка меток будет в следующей версии.
KF>> Tut только такая замоpочка -- чтобы поддеpжать метки их надо
KF>> считать из файла. А откуда его взять на спектpуме? Hи
KF>> ассемблеpа нет такого, ни сpедств для хpанения этого файла :-(
ES> Во-первых, метки остаются после ассемблирования в памяти.
В какой памяти? Hоpмальный ассемблеp всё пишет в файл.
И каждый pаз ассемблиpовать?
ES> Во-вторых, в любом случае надо их импортировать.
Есть устоявшиеся стандаpты на файлы со списками меток.
ES> В третьих, их можно и записать после ассемблирования
В момент ассемблиpования.
Ты не уловил самую главную мысль -- чтобы дебагеp мог pаботать с файлами
нужны сpедства хpанения этих файлов. TR-DOS таковым не является :-(
Hу можно конечно весь ввод-вывод вынести в отдельный модуль...
Почитай нижезаююченный файлик и подумай насколько легче было бы
pазмещать пpогpамму с отладчиком в памяти:
=== Cut ===
begin 644 ZXMMU.ZIP
M4$L#!!0``H`(`*^Q&2G`O%>U<@D``/<6```)````6EA-354N5%A4M5A;;Q3)
M%7Y'XC^4>++1N)D>SWAL1XMV8X=FU%H%E
M&Z-H(^U+3<^47>Y+]0.<_'LCB^=;>]-AGCT?Z#?*>J;[ZM+`5&PE1WG3K?
MN7>=<_X
MY"SD..RI(-H_2(3#=]C5CWY;8RN+##$?W$DO,1)
M`ZD&ZCI]C;[6VDFXH-FM@L2L"EN`8A-P5CMA@JA>F+$Z`);]+F3WA=9C+
M>,1<:@"%CE*[T$700_?B3@&8Q+F*QG[*C_)4E?X$"F8!YV3@B!THI$+)
M(N!XSL#E!PES8$FFL#0DJPT5"I"`:"?3)9M]CC@X[:9!T>>AD-Q(E@=N'#
MM>8E[$!H:[>)BSTX%;B;)J#:",0;V#X>$D+7X4$P``%6NFD!V^D8!U8>D&
ML$/GOX@9+'K&IY+MCA1N0^-_GI/D&W=7/38%.#(2#H..;@.$LA3/5)IB,,NE+YHD]UI.QQREN`$-K
MRX)X)A<>*/+F#GN;R)U#X1T;;0&_.53IA)F-R8!"$<.]@0#9&;L2#D):U^Y
M,LO2R.&N/X3HFR9:M"E0C4/KR(4X%?DAO$:$&;J]3H9[,D.`!.Q$R(&8P_^
M=><2`%(I'LDGH%#YB0#%&5.>"^RK(#NXAD3D).Y]*RGMB3VPY/E*/%YC4`
M="6D8ZU6:VUI"MH%J;^?R,@7'B(-O+#Q:,6V+3;'P0^B!-)#-D'00;Z'4R:=
MATCGPY5#)OO@D9>8-*BQ#4XADQYDU292B2,Z.ODA'SS152N.0I&U5)#UO"'53-88QU&2C7
M8FO<6Q1BMJ_QK5$I(M@N"V[J<._DV*S$H$N@^<2"KX5D<>%Z1EJ`[7
M.!NQ0K%HV!NULEIFLXX$&)([!)QT4:$'B"4'&=2!M@(0=5@[E)[J]J@>`^DH
M-1*#?3P_-GOM1I%8R%B++;[Y/@,SP`J68C)$RB`<=#J8A'CRK6EA>GL:;;9
M9F-C2`Y54EA.-1608CCN=?A!J[L"[A(H57,(O6(Q]`=.;KT1Y1+GX1J#L
M1BC'@!'@D"9J5[LS5@JE.Z&($F3_A'L)Z$^,Q5AV0^2!B_.S]=JL79MMU&:;
M;$^&@ZQX6-!K,@NE*=+/'$%L1C+6E1H^QW&=U?A8:?&1IH5[+]08HGN?]G3Q
MJ.8@WDT9WJ3!80F18GGI^??#N07V9&7QT=KJTZ4%8_ICOV_[_==]_7MA7D2J
M1]&JTYIYY)[)#1DEPVMW>KWG_6G['YGV+C6XR0$KB.LE<8.(&X;8WNI/]0WQ5$%KE[3C1#MN:!M;_79&VSY%W2V0
M:]KQK?Y$1MO,:#^R2QGL)@AOUC/-GA44);)-R#?M*L4_[FEW%A2DQWY"L4(
M@N+2U.B)$E516J5^9.CYXW*4KNB3I//V$8JJ?VTR_K6?G$:1O7_9[[R#/]S
M"@6C^'JXVI@XMG_TQLT])@^EW79*KX4(S,W1DUYRTO<
MRNKRYZL+2TL/5Y+,P]7&1?+:XN?LE6EE?7OCY_[MN2T^LJV]=G6),EGVE&
M%<';XQ1W^J']8[TTZW9E?<6LR8););=OJJR_.<.Z_YSP/WNX]O7AV#CZ<-J:
M//GNMZ:KX_A_W_Q;0-C5_#M*KY=XMOO`[]A
M8!H5_$85OU'B-]X'_CAMO?5PMWR5^TZ@Y7M%_O*K_>*G_^/O0
MOZ6W?GYMYFI!5SR6;:NQ%]ADNLA-E8TCWE>R2ZQZZ+N4#A++?,C6:FB[=
M=PK3>&F^%PW?]AGX8CJA+^$Y?/U<%.7==]:>4&/*?H-I]W]`H="?7QQ1T7
M'[AX5R:8!&AT?*RVE8.V2>279OI]6JQNW;I5K']7K"[=NL78R/S]T8LCC=_?
MITO'C]BG'S0L:Y*-N+B(NKB(!AA:2.IDT(_QBG*C5L[F_@=U=NIOA`P'AO94
M`WWK:*G?4^H8E`N-T&UPDSS4-71Y:'EUUV9DPQ8^SX^2M0DF7MQT3*OF%U\n
MU6KZ@U;3G[*:^8CEGCE(L@XKS="D88,+."RJAP,A;O^'+)M-;#BCBE-C3?UW
M4O_5X5UV`0)IQ2=/F8IU`?IC:HLQOH9F3;EUY",Y/8
M'6YP=!E90,9'I@"NOAM)AT`W3;-9PWFT7^CTT3:8AO[(E*TRE
From Kirill Frolov → To Alexander Bondarenko 12 September 2000
Press RESET immediately, Alexander!
10 Aug 99 20:13, Alexander Bondarenko wrote to Kirill Frolov:
AM>>> It was not enough to write a Spectrum emulator for Spectrum
AM>>> complete insanity.
KF>> Well, there is a ZX81 emulator!
AB> What? On Spec? 8-[ ]
YES! On spec! It slows down a little, but in turbo mode it’s quite normal.
The version that I disketted and the sources of /the/ /emulator/ were lost
:~-(
All that's left is the Z80 with the emulator, you can run it from ZXASM, now
I'll hide in the echo.
From elfh → To All 13 December 2006
Hello bugsy
My unreal hangs when debugging a program with tags enabled. It started
when the user.l file exceeded 14 kilobytes. Has anyone encountered anything like this?
maybe there are other solutions for the debugger?