DemoN/demon.utf.txt
2024-08-08 14:52:38 +03:00

378 lines
25 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Пофиксенная (на ошибки) дока.
Немного изменено описание в "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 представления
памяти несколько отличается - курсор после ввода очередного
байта автоматичеси переходит к следующему.