mirror of
https://github.com/romychs/DemoN.git
synced 2025-04-09 22:06:42 +03:00
378 lines
25 KiB
Plaintext
378 lines
25 KiB
Plaintext
Пофиксенная (на ошибки) дока.
|
||
Немного изменено описание в "2.4. Дамп памяти".
|
||
|
||
Глюки.
|
||
1. Не работает Ctrl+S.
|
||
|
||
2. Перейди в поле регистра "PC" и введи адрес #C000. После перейди в асм-
|
||
листинг (на этот адрес, я переходил по Ctrl+~) и иди по-строчно вверх
|
||
(т.е. к младшим адресам). Увидишь глюки с выводом в асм-листинге. Перейти
|
||
можешь на другой адрес, глюк не пропадает. При страничном листании вверх,
|
||
этот глюк вроде как не заметен.
|
||
Кста, только щас проверил на этот же глюк. Запускаю Демона, перехожу по
|
||
Ctrl+~ на #C000 и иду по-строчно вверх - глюк. То же самое с адреса #4000.
|
||
Т.е. я хочу сказать, что правка регистра PC тут ни при чем.
|
||
|
||
Пожелание. Как бы быстро переходить в любое окно Димы ?. А то круговое по
|
||
Табу утомляет - пока дойдешь до нужного окна... Может каждому окну присвоить
|
||
свою нот-клавишу, типа Alt+1,2,... Цифру каждому окну можно поставить на его
|
||
границу, но только другим цветом, например синим, чтобы в глазах не так
|
||
маячило. Типа (порядковые номера только для этого примера)
|
||
|
||
1════════╤═
|
||
║IX #8080│0
|
||
║IY #1637│0
|
||
2────────┼─
|
||
║HL #8100│0
|
||
║DE #2C40│C
|
||
║BC #C089│D
|
||
║AF #FB82│%
|
||
║Sz.h.pNc│
|
||
3────────┼─
|
||
║HL'#0000│C
|
||
║DE'#2E07│3
|
||
║BC'#0200│D
|
||
║AF'#FB44│%
|
||
║sZ.h.Pnc│
|
||
4────────┼─
|
||
║PC #0000│I
|
||
╠═ 0 ═╤═ 1
|
||
║ #FB │ #FF
|
||
5═════╧══╤═
|
||
║SP #7FFE│
|
||
6════════╧═
|
||
║#800A #FF0
|
||
║#8008 #FF0
|
||
║#8006 #100
|
||
║#8004 #103
|
||
║#8002 #7E6
|
||
║#8000 #007
|
||
║#7FFE #2CE
|
||
║#7FFC #434
|
||
╚══════════
|
||
|
||
Ложка дегтя ;). У тебя немного кривоватая навигация в hex-окне между hex/ascii
|
||
дампами. Если переходишь из одного дампа на другой, то переходи на тот же
|
||
самый адрес - это логически правильно. Кидаю тебе hex-редактор QVIEW, я им
|
||
на PC-хе только и пользуюсь.
|
||
Переделывать много потребуется, если в hex-окне сразу прикрутить режим редак-
|
||
тирования ?.
|
||
|
||
Но это так, мечты на будущее.
|
||
-----------------------------------------------------------------------------
|
||
|
||
|
||
|
||
DemoN - монитор-отладчик для DSS Estex
|
||
|
||
1. Назначение программы.
|
||
|
||
Demon предназначен для отладки програм, написанных на ассемблере Z80. Он
|
||
позволяет трассировать код программы с отслеживанием состояния всех регистров
|
||
процессора и ячеек памяти отлаживаемой программы.
|
||
|
||
2. Внешний вид программы.
|
||
|
||
Demon использует текстовый режим экрана.
|
||
|
||
Текущее время ───────┐
|
||
┌───┴──┐
|
||
╔════════╤══════════════╦══════════════════════════════════════════════18:41:03╗
|
||
║IX #8080│0EFC F8FC .№°№║ #06CC 34 INC (HL) ║
|
||
║IY #1637│0045 4D4F .EMO║ #06CD CBB6 RES 6,(HL) ║
|
||
╟────────┼──────────────╢ #06CF 6F LD L,A ║
|
||
║HL #8100│0081 FFFE .Б.■║ #06D0 2606 LD H,#06 ║
|
||
║DE #2C40│C34A 2D21 ├J-!║ #06D2 73 LD (HL),E ║
|
||
║BC #C089│D6C6 06C6 ╓╞.╞║ #06D3 2C INC L ║
|
||
║AF #FB82│%11111011 "√" ║ #06D4 72 LD (HL),D ║
|
||
║Sz.h.pNc│ ║ #06D5 2C INC L ║
|
||
╟────────┼──────────────╢ #06D6 70 LD (HL),B ║
|
||
║HL'#0000│C34A 2DFF ├J-.║ #06D7 2C INC L ║
|
||
║DE'#2E07│3045 5845 0EXE║ #06D8 71 LD (HL),C ║
|
||
║BC'#0200│DCE6 0106 ▄ц..║ #06D9 C9 RET ║
|
||
║AF'#FB44│%11111011 "√" ║ #06DA 214106 LD HL,#0641 ║
|
||
║sZ.h.Pnc│ ║ #06DD 3A4006 LD A,(#0640) ║
|
||
╟────────┼────────┬─────╢ #06E0 BE CP (HL) ║
|
||
║PC #0000│IR #8059│ ║ #06E1 C8 RET Z ║
|
||
╠═ 0 ═╤═ 1 ═╤═ 2 ═╪═ 3 ═╣ #06E2 7E LD A,(HL) ║
|
||
║ #FB │ #FF │ #E8 │ #FF ║ #06E3 34 INC (HL) ║
|
||
╠═════╧══╤══╧═╦═══╧═════╣ #06E4 34 INC (HL) ║
|
||
║SP #7FFE│ 0║REZ #7000║ #06E5 34 INC (HL) ║
|
||
╠════════╧══╦═╩═════════╩══════════════════════════════════════════════════════╣
|
||
║#800A #FF0F║ #4000 007E 7E6C 1038 1000 FF00 FF0F 3C3F 7F18 .~~l.8......<?.. ║
|
||
║#8008 #FF00║ #4010 8002 1866 7F3E 0018 1818 0000 0000 0000 А..f.>.......... ║
|
||
║#8006 #1000║ #4020 0030 6C6C 3000 3860 1860 0000 0000 0006 .0ll0.8`.`...... ║
|
||
║#8004 #1038║ #4030 7C30 7878 1CFC 38FC 7878 0000 1800 6078 |0xx.№8№xx....`x ║
|
||
║#8002 #7E6C║ #4040 7C30 FC3C F8FE FE3C CC78 1EE6 F0C6 C638 |0№<°■■<╠x.цЁ╞╞8 ║
|
||
║#8000 #007E║ #4050 FC78 FC78 FCCC CCC6 C6CC FE78 C078 1000 №x№x№╠╠╞╞╠■x└x.. ║
|
||
║#7FFE #2CE4║ #4060 3000 E000 1C00 3800 E030 0CE0 7000 0000 0.р...8.р0.рp... ║
|
||
║#7FFC #4340║ #4070 0000 0000 1000 0000 0000 001C 18E0 7600 .............рv. ║
|
||
╚═══════════╩══════════════════════════════════════════════════════════════════╝
|
||
─══ DemoN v0.10 build 65 (alpha) Igor by AlphA Studio, 2006 ══─
|
||
|
||
Весь экран разбит на следующие области:
|
||
- окно регистров;
|
||
- дамп стека;
|
||
- окно листинга;
|
||
- дамп памяти.
|
||
|
||
2.1. Окно регистров.
|
||
|
||
Окно регистров разбито на более мелкие окна (условные области):
|
||
- область индексных регистровых пар;
|
||
- область основного набора регистров;
|
||
- область альтернативного набора регистров;
|
||
- нижняя область (оставшиеся три строки);
|
||
|
||
2.1.1. Состояние индексных регистровых пар.
|
||
|
||
┌───────────────── Состояние регистровой пары
|
||
│ ┌────── Мини-дамп
|
||
┌───┴──┐ ┌─────┴──────┐
|
||
╔════════╤══════════════╦═
|
||
║IX #8080│0EFC F8FC .№°№║
|
||
║IY #1637│0045 4D4F .EMO║
|
||
╟────────┼──────────────╢
|
||
└┤ └─┬─┘ └┬─┘ └┬─┘ └┬─┘
|
||
│ │ └──┬─┘ └─ ASCII представление памяти
|
||
│ │ └──────── Байты из памяти, на которую ссылается регистровая пара
|
||
│ └──────────────── Значение регистровой пары
|
||
└──────────────────── Регистровая пара
|
||
|
||
|
||
2.1.2. Состояние основного и aльтернативного наборов регистров процессора.
|
||
|
||
╟────────┼──────────────╢
|
||
║HL #8100│0081 FFFE .Б.■║
|
||
║DE #2C40│C34A 2D21 ├J-!║
|
||
║BC #C089│D6C6 06C6 ╓╞.╞║
|
||
║AF #FB82│%11111011 "√" ║
|
||
║Sz.h.pNc│ ║
|
||
╟────────┼──────────────╢
|
||
║HL'#0000│C34A 2DFF ├J-.║
|
||
║DE'#2B18│DD21 082E ▌!..║
|
||
║BC'#0200│DCE6 0106 ▄ц..║
|
||
║AF'#FB44│%11111011 "√" ║
|
||
║sZ.h.Pnc│ ║
|
||
╟────────┼────────┬─────╢
|
||
|
||
Состояние строк с регистровыми парами HL, DE, BC и HL', DE', BC' полностью
|
||
аналогично строкам с индексными регистровыми парами. Далее в двух строках
|
||
отображается состояние аккумулятора и флагов процессора:
|
||
|
||
┌──────────────────── Регистровая пара
|
||
│ ┌──────────────── Значение аккумулятора
|
||
│ │ ┌────────────── Значение флагового регистра
|
||
│ │ │ ┌──────── Двоичное представление аккумулятора
|
||
│ │ │ │ ┌─ ASCII представление аккумулятора
|
||
┌┤ ┌┤┌┤ ┌───┴───┐ │
|
||
|
||
║AF #FB82│%11111011 "√" ║
|
||
║Sz.h.pNc│ ║
|
||
╟────────┼──────────────╢
|
||
││ │ │││
|
||
││ │ ││└────────────── С - флаг переноса
|
||
││ │ │└─────────────── N - флаг операции вычитания
|
||
││ │ └──────────────── P/V - флаг четного результата / переполнения
|
||
││ └────────────────── H - флаг вспомогательного переноса
|
||
│└──────────────────── Z - флаг нуля
|
||
└───────────────────── S - флаг знака
|
||
Заглавная буква соответствует установленному флагу, прописная - сброшенному.
|
||
|
||
2.1.3. Состояние счетчика команд и регистров адреса регенерации и таблицы
|
||
прерываний.
|
||
|
||
╟────────┼────────┬─────╢
|
||
║PC #00CF│IR #8045│ ║
|
||
|
||
└┤ └─┬─┘ └┤ └┤└┤
|
||
│ │ │ │ └───── Значение регистра адреса регенерации
|
||
│ │ │ └─────── Значение регистра адреса таблицы прерываний
|
||
│ │ └─────────── Регистровая пара
|
||
│ └──────────────── Значение счетчика команд
|
||
└──────────────────── Регистровая пара
|
||
|
||
2.1.4. Номера банок памяти, включенных в окна процессора.
|
||
|
||
┌─────────────────── 0-е окно адресного пространства (#0000...#3FFF)
|
||
│ ┌───────────── 1-е окно адресного пространства (#4000...#7FFF)
|
||
│ │ ┌─────── 2-е окно адресного пространства (#8000...#BFFF)
|
||
│ │ │ ┌─ 3-е окно адресного пространства (#C000...#FFFF)
|
||
|
||
╠═ 0 ═╤═ 1 ═╤═ 2 ═╪═ 3 ═╣
|
||
║ #FB │ #FF │ #E8 │ #FF ║
|
||
╠═════╧══╤══╧═╦═══╧═════╣
|
||
|
||
└┬┘ └┬┘ └┬┘ └┬┘
|
||
│ │ │ └─ Физический номер банки памяти включенной в 0-е окно
|
||
│ │ └─────── Физический номер банки памяти включенной в 1-е окно
|
||
│ └───────────── Физический номер банки памяти включенной во 2-е окно
|
||
└─────────────────── Физический номер банки памяти включенной в 3-е окно
|
||
|
||
2.1.5. Состояние указателя стека и адрес расположения резидента.
|
||
|
||
╠═════╧══╤══╧═╦═══╧═════╣
|
||
║SP #7FF6│ 4║REZ #7000║
|
||
╠════════╧══╦═╩═════════╩═
|
||
|
||
└┤ └─┬─┘ └─┬┘ └┬┘ └─┬─┘
|
||
│ │ │ │ └─ Адрес размещения резидента
|
||
│ │ │ └────── Резидент
|
||
│ │ └────────── Использованная глубина стека
|
||
│ └──────────────── Значение указателя стека
|
||
└──────────────────── Регистровая пара
|
||
|
||
Справа от пары SP выводится глубина использованного стека. Так команды PUSH,
|
||
CALL и RST приводят к увеличению этого числа, а команды POP и RET -
|
||
соответственно к уменьшению. Число всегда отображено в десятичном формате и
|
||
может быть отрицательным.
|
||
|
||
2.2. Дамп стека.
|
||
|
||
╠════════╧══╦ Вершина стека подсвечена. Ниже подсвеченной строки находятся
|
||
║#8002 #6C7E║ значения снятые со стека, выше - значения в стеке.
|
||
║#8000 #7E00║
|
||
║#7FFE #302C║
|
||
║#7FFC #FB82║
|
||
║#7FFA #FB82║
|
||
║#7FF8 #FB82║
|
||
║#7FF6 #2C40║
|
||
║#7FF4 #1637║
|
||
╚═══════════╩
|
||
└─┬─┘ └─┬─┘
|
||
│ └───────────── Значение памяти
|
||
└─────────────────── Адрес памяти
|
||
|
||
2.3. Окно листинга.
|
||
|
||
Текущее время ───────┐
|
||
┌───┴──┐
|
||
|
||
╦══════════════════════════════════════════════01:58:36╗
|
||
║ #A000 7A LD A,D ║
|
||
║ #A001 FE20 CP #20 ║
|
||
╢ #A003 20E2 JR NZ,#9FE7 ║
|
||
║ #A005 2128A0 LD HL,#A028 ║
|
||
║ #A008 AF XOR A ║
|
||
║ #A009 0E0A LD C,#0A ║
|
||
║ #A00B D7 RST #10 ║
|
||
║ #A00C 380E JR C,#A01C ║
|
||
╢ #A00E F5 PUSH AF ║
|
||
║ #A00F 2100C0 LD HL,#C000 ║
|
||
║ #A012 11400A LD DE,#0A40 ║
|
||
║ #A015 0E14 LD C,#14 ║
|
||
║ #A017 D7 RST #10 ║
|
||
║ #A018 F1 POP AF ║
|
||
╢ #A019 0E12 LD C,#12 ║
|
||
║ #A01B D7 RST #10 ║
|
||
╣ #A01C 3A32A0 LD A,(#A032) ║
|
||
║ #A01F 0E3C LD C,#3C ║
|
||
╣ #A021 D7 RST #10 ║
|
||
║ #A022 3A33A0 LD A,(#A033) ║
|
||
╩══════════════════════════════════════════════════════╣
|
||
└─┬─┘ └──────┬─────┘ └───┬──┘ └─────┬──────────────┘
|
||
│ │ │ └── Мнемоника команды
|
||
│ │ └───────────── Поле кода команды
|
||
│ └───────────────────────── Поле метки
|
||
│ (в текущей версии не реализовано)
|
||
└──────────────────────────────────── Адрес команды
|
||
|
||
Текущая команда процессора (на которую указывает PC) выделена полосой.
|
||
|
||
2.4. Дамп памяти.
|
||
|
||
ASCII представление памяти ─────────────┐
|
||
┌───────┴──────┐
|
||
╦═╩═════════╩══════════════════════════════════════════════════════╣
|
||
║ #4000 007E 7E6C 1038 1000 FF00 FF0F 3C3F 7F18 .~~l.8......<?.. ║
|
||
║ #4010 8002 1866 7F3E 0018 1818 0000 0000 0000 А..f.>.......... ║
|
||
║ #4020 0030 6C6C 3000 3860 1860 0000 0000 0006 .0ll0.8`.`...... ║
|
||
║ #4030 7C30 7878 1CFC 38FC 7878 0000 1800 6078 |0xx.№8№xx....`x ║
|
||
║ #4040 7C30 FC3C F8FE FE3C CC78 1EE6 F0C6 C638 |0№<°■■<╠x.цЁ╞╞8 ║
|
||
║ #4050 FC78 FC78 FCCC CCC6 C6CC FE78 C078 1000 №x№x№╠╠╞╞╠■x└x.. ║
|
||
║ #4060 3000 E000 1C00 3800 E030 0CE0 7000 0000 0.р...8.р0.рp... ║
|
||
║ #4070 0000 0000 1000 0000 0000 001C 18E0 7600 .............рv. ║
|
||
╩══════════════════════════════════════════════════════════════════╝
|
||
└─┬─┘ └──────────────────┬──────────────────┘
|
||
│ └──────────── HEX представление памяти
|
||
└──────────────────────────────────── Адреса памяти дампа
|
||
|
||
3. Управление.
|
||
|
||
Управление в программе осуществляется при помощи клавиатуры.
|
||
|
||
3.1. Общее управление.
|
||
|
||
Эти последовательности клавиатурных команд обрабатываются в независимости от
|
||
того, в каком окне находится курсор программы:
|
||
|
||
TAB - переход в следующее окно программы;
|
||
SHIFT+TAB - переход в предыдущее окно программы;
|
||
CTRL+E - переключение dEc/hEc системы вывода чисел на экране;
|
||
CTRL+R - изменение адреса размещения резидента;
|
||
F7 или CTRL+Z - выполнение текущей команды процесcора;
|
||
F8 или CTRL+C - выполнение текущей команды процесcора с автоматическим
|
||
выполнением подпрограмм и цикла DJNZ;
|
||
F9 или CTRL+V - пропуск текущей команды процесcора, адрес в регистровой паре
|
||
PC устанавливается на следующую команду без исполнения
|
||
предыдущей;
|
||
ESC - просмотр системного экрана;
|
||
F10 или ALT+X - выход из программы.
|
||
|
||
В программе реализована полноценная строка ввода. Данные можно вводить как в
|
||
HEX, так и в DEC системах исчисления, причем HEX-число должно начинаться с
|
||
префикса #, латинской литеры x или X.
|
||
|
||
3.2. Окно регистров.
|
||
|
||
HOME - в начало текущей строки;
|
||
END - в конец текущей строки;
|
||
PAGE UP - на первую строку условной области;
|
||
PAGE DOWN - на последнюю строку условной области;
|
||
ENTER - начало редактирования значения регистровых пар, байт памяти
|
||
и ASCII представления памяти и аккумулятора, а также номеров
|
||
банок, включенных в окна процессора;
|
||
- инвертирование битов двоичного представления аккумулятора и
|
||
установка / сброс флагов, а также обнуление значения глубины
|
||
стека.
|
||
|
||
3.3. Дамп стека.
|
||
|
||
PAGE UP - по-страничный просмотр стека;
|
||
PAGE DOWN - по-страничный просмотр стека;
|
||
HOME - вернуть вершину стека в фокус;
|
||
CTRL+X - установить стек на текущую строку;
|
||
ENTER - ввод нового адреса или данных;
|
||
- ввод адреса в подсвеченной строке (на вершине стека) приводит
|
||
к изменению регистровой пары SP.
|
||
|
||
3.4. Окно листинга.
|
||
|
||
PAGE UP - на страницу листинга вверх;
|
||
PAGE DOWN - на страницу листинга вниз;
|
||
HOME - переход в колонку адреса;
|
||
END - переход в колонку мнемоники;
|
||
CTRL+X - установить значение счетчика команд на текущую строку;
|
||
RCTRL+цифра - запоминание текущего адреса листинга (запомнить закладку);
|
||
LCTRL+цифра - быстрый переход на адрес листинга (на сохр. ранее закладку);
|
||
LCTRL+~ - быстрый циклический переход (отображение листинга)
|
||
в начало 0..3 окон памяти процессора;
|
||
ENTER - редактирование адреса или кода команды, причем код команды
|
||
вводится только в HEX системе исчисления.
|
||
|
||
3.5. Дамп памяти.
|
||
|
||
PAGE UP - на страницу дампа вверх;
|
||
PAGE DOWN - на страницу дампа вниз;
|
||
HOME - переход к колонке адреса;
|
||
END - переход к последней колонке окна;
|
||
CTRL+HOME - переход последовательно (если курсор установлен в конце
|
||
строки дампа) к первой колонке ASCII представления памяти,
|
||
далее к первой колонке байт памяти и наконец к адресу;
|
||
CTRL+END - переход к последней колонке байт памяти и далее к последней
|
||
колонке ASCII представления памяти;
|
||
ENTER - редактирование адреса или текущих данных, причем
|
||
редактирование в поле данных и в поле ASCII представления
|
||
памяти несколько отличается - курсор после ввода очередного
|
||
байта автоматичеси переходит к следующему.
|