Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
msx:dbg:dbg [2021-11-12 13:32] GreyWolf |
msx:dbg:dbg [2024-04-13 10:24] (текущий) GreyWolf [DBG — экранный отладчик для MSX/MSX2] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== DBG экранный отладчик для MSX/MSX2 ====== | + | ====== DBG — экранный отладчик для MSX/MSX2 ====== |
- | FIXME | + | |
Автор: Леонид Бараз | Автор: Леонид Бараз | ||
Строка 8: | Строка 7: | ||
* XDBG — Расширенный экранный отладчик, версия 1 | * XDBG — Расширенный экранный отладчик, версия 1 | ||
отличия DBG/XDBG указаны в тексте. | отличия DBG/XDBG указаны в тексте. | ||
+ | |||
+ | {{dbg.zip|}} \\ 2024-04-12 английская версия ''DBGE52.COM'' получена от **Максима Власова** | ||
====== Руководство пользователя ====== | ====== Руководство пользователя ====== | ||
- | В тексте данного документа применяются следующие обозначения: FIXME в уголковые скобки < и > берутся названия специальных клавиш; пробелом разделяются клавиши, которые нужно нажимать последовательно, а плюсом - одновременно. | + | В тексте данного документа применяются следующие обозначения для клавиш: пробелом разделяются клавиши, которые нужно нажимать последовательно, а плюсом — одновременно. |
- | Программа DBG представляет собой экранный отладчик программ, написанных на ассемблере Z80. Этот отладчик может использоваться на ПЭВМ MSX2 и MSX, оснащенных VDP 9938 ("YAMAHA" YIS503II), под управлением операционной системы MSX-DOS (в том числе в варианте Ю.В.Галутина). | + | Программа представляет собой экранный отладчик программ, написанных на ассемблере [[zilog_z80:zilog_z80|Z80]]. Этот отладчик может использоваться на ПЭВМ [[msx:msx_2|MSX2]] и [[msx:msx_1|MSX]], оснащенных [[msx:yamaha_v9938:yamaha_v9938|VDP 9938]] ([[msx:yamaha_yis-503iir:yamaha_yis-503iir|]]), под управлением операционной системы [[msx:dos:|]] (в том числе в варианте Ю.В.Галутина). |
- | Команда вызова отладчика: | + | Команда вызова отладчика **DBG**: |
<code> | <code> | ||
A>Dbg [имя-программы] | A>Dbg [имя-программы] | ||
</code> | </code> | ||
+ | |||
+ | Команда вызова отладчика **XDBG**: | ||
+ | <code> | ||
+ | A>XDbg[/p[/s]][/M] [имя-программы] | ||
+ | </code> | ||
+ | После ''XDbg'' в команде запуска можно указать от одного до трёх флажков, которые определяют, в каком слоте памяти должен располагаться собственно отладчик. Первые два флажка определяют номера первичного и вторичного слота соответственно: | ||
+ | |''XDbg/3/0''|слот 3-0| | ||
+ | |''XDbg/1''|слот 1 (нерасширенный)| | ||
+ | |||
+ | Флажок /M предписывает использование маппера (отладчик располагается в страницах FF, FE и FD). При переносе отладчика максимально возможный размер загружаемой и отлаживаемой программы может достигать 48 Kбайт. | ||
+ | |||
+ | При отсутствии флажков отладчик размещается в основной оперативной памяти, оставляя для программы пользователя вместе с таблицей символических имён только 32 Кбайт. Однако | ||
+ | перенести отладчик в параллельную память можно и в процессе работы посредством команды <key>esc</key> <key>U</key> ([[#esc_u|см. ниже]]). | ||
Примеры отображения на экране: | Примеры отображения на экране: | ||
- | Режим дисассемблера | + | Режим листинга ассемблера |
<code> | <code> | ||
окно заголовка | окно заголовка | ||
Строка 28: | Строка 42: | ||
┌02000┬───────────────────────────────────────────────────────┬────────────────┐ | ┌02000┬───────────────────────────────────────────────────────┬────────────────┐ | ||
- | │List │ DEBUGGER Version 5.2 Help:<Esc>? Visual:Trace │ EI PC=D827 I=00│ | + | │List │ X-DEBUGGER Version 1.0 Help:<Esc>? Visual:Trace │ EI PC=D827 I=00│ |
- | ├─────┼──────────────────────────────────────────────────┬────┤32/2-/32/32 R=58│ | + | ├─────┼──────────────────────────────────────────────────┬────┤8B/02/8B/8B R=58│ |
- | │ │ 7FF8:60 LD H,B │ │FB/FA/F9/F8 +MAP│ | + | │ │ 7FF8:60 LD H,B │ │--/--/--/-- │ |
- | │ │ 7FF9:4B LD C,E │ │T=882B:D0C1/323C│ | + | │ │ 7FF9:4B LD C,E │ │T=838B:CE6B/89C3│ |
│00~00│ 7FFA:03 INC BC │ ├────────────────┤ | │00~00│ 7FFA:03 INC BC │ ├────────────────┤ | ||
│ │ 7FFB:1A LD A,(DE) │ │ A=00 . sZxHxpNC│ | │ │ 7FFB:1A LD A,(DE) │ │ A=00 . sZxHxpNC│ | ||
Строка 63: | Строка 77: | ||
┌1F000┬───────────────────────────────────────────────────────┬────────────────┐ | ┌1F000┬───────────────────────────────────────────────────────┬────────────────┐ | ||
- | │Input│ File:B:prog .COM Area:07F0-8A1B Reloc:0100->07F0 │ EI PC=0100 I=00│ | + | │Input│ File:B:prog .COM Area:07F0-BEFC Reloc:0100->07F0 │ EI PC=0100 I=00│ |
- | ├─────┼──────────────────────────────────────────────────┬────┤32/32/32/32 R=7B│ | + | ├─────┼──────────────────────────────────────────────────┬────┤8B/8B/8B/8B R=7B│ |
- | │ │ 012F:CB 16 RL (HL) │ │--/--/--/-- -MAP│ | + | │ │ 012F:CB 16 RL (HL) │ │FB/FA/F9/F8 │ |
- | │ │ 0131:30 0F JR NC,0142 │ │T=8A1A:CFC5/75C3│ | + | │ │ 0131:30 0F JR NC,0142 │ │T=BEFB:CE6B/89C3│ |
│ │ 0133:E5 PUSH HL │ ├────────────────┤ | │ │ 0133:E5 PUSH HL │ ├────────────────┤ | ||
│ │ 0134:DD 66 00 LD H,(IX+00) │ │ A=00 . szxhxpnc│ | │ │ 0134:DD 66 00 LD H,(IX+00) │ │ A=00 . szxhxpnc│ | ||
Строка 91: | Строка 105: | ||
</code> | </code> | ||
- | Отладчик обеспечивает: | + | <hidden DBG> |
- | * загрузку в память и запись на диск программ и таблиц символов (файлов <имя>.<тип> и <имя>.SYM); | + | Режим листинга |
- | * просмотр и корректировку содержимого оперативной памяти в символьном и шестнадцатиричном формате, а также в виде команд ассемблера; | + | |
- | * просмотр и корректировку содержимого видеопамяти в символьном и шестнадцатиричном формате; | + | |
- | * просмотр и изменение содержимого регистров отлаживаемой программы; | + | |
- | * использование имен, введенных вместе с программой, а также добавление новых имен и удаление имеющихся (имена используются и в командах ассемблера); имена можно настроить на начальный адрес программы; | + | |
- | * выдачу на печать содержимого текущего окна отладчика; | + | |
- | * установку и снятие точек приостанова (со счетчиками); | + | |
- | * установку и снятие контроля изменения байтов памяти; | + | |
- | * покомандное и непрерывное выполнение программы (в том числе и в режиме мультипликации, с обходом и без обхода команд CALL); | + | |
- | * возврат управления отладчику: при достижении точки приостанова с нулевым счетчиком, при изменении одного из контролируемых байтов памяти, при нормальном завершении программы, при нажатии клавиши <key>stop</key>; | + | |
- | * пересылку и заполнение областей памяти, поиск символьного или шестнадцатиричного образца. | + | |
- | * выполнение арифметических действий над шестнадцатиричными числами; | + | |
- | * получение на экране краткой информации о средствах, имеющихся в отладчике. | + | |
- | + | ||
- | При запуске отладчик переводит систему в 80-символьный режим и загружает в оперативную память программу, если ее имя указано в команде (имя указывается без уточнения; загружаются файлы ''<имя>.<тип>'' и ''<имя>.SYM''). | + | |
- | + | ||
- | В процессе работы на экране выделяются поля разметки и поля данных. Курсор всегда находится в одном из полей данных, и только в такие поля можно вносить изменения. При выходе курсора из текущего поля его новое содержимое проверяется и заносится в память машины; все остальные поля экрана при этом приводятся (по возможности) в соответствие с содержимым измененного поля. Например, для изменения байта или слова данных в любом поле достаточно просто набрать его новое значение и выйти из поля. Аналогично, для того, чтобы передвинуть окно дисассемблера или дампа на другие адреса памяти, достаточно в любой строке набрать нужное имя в поле имени или нужный адрес в поле адреса. Для создания нового имени достаточно набрать его в соответствующем поле, а для удаления существующего - заменить его на новое или заполнить поле имени пробелами. | + | |
- | + | ||
- | Все поля данных, имеющиеся на экране, сгруппированы в окна: три основных ("дампа", "дисассемблера" и "регистров") и одно дополнительное ("заголовка", "файлов" или "памяти"). | + | |
- | + | ||
- | Курсор перемещается в пределах одного окна с помощью стрелок, клавиш <key>'Ввод '⏎</key>, <key>tab</key> и <key>ctrl+F</key>. Листание осуществляется по клавишам <key>ctrl+J</key> (вверх) и <key>ctrl+Q</key> (вниз). Редактирование информации выполняется символьными клавишами, а также клавишами <key>ins</key>, <key>del</key> и <key>bs</key>. Переход в другое окно (и установка дополнительного окна) выполняются по одной из следующих команд: | + | |
- | |<100% 10% 90%>| | + | |
- | |<key>esc</key> <key>L</key>|Работа в окне дисассемблера. \\ \\ Левая колонка содержит точки приостанова (для них указывается максимальный счетчик, признак активности (+ - активна, ~ - активна в параллельном банке памяти, - - неактивна) и текущее значение счетчика). В основной части каждой строки окна располагаются поля имени, адреса, байтов, образующих команду, и самого текста команды. \\ Правая колонка окна содержит значения счетчиков профилей выполнения программы (в строках команд с символическими именами). \\ Имена во всех полях (в том числе и в текстах команд) должны заканчиваться двоеточием. Например, команды могут записываться в следующем виде: <code asm> | + | |
- | LD A,(name:3000) | + | |
- | LD A,(name:) | + | |
- | LD A,(3000) | + | |
- | </code> Команда RST 30 (Inter-Slot Call) дополняется в качестве операндов номером слота и адресом вызова.| | + | |
- | |<key>esc</key> <key>D</key>|Работа в окне дампа. \\ \\ Левая колонка содержит признаки контроля изменения байта памяти с указанием активности контроля (+/-/~). В основной части каждой строки окна имеются поля имени, адреса, 6 полей байтов в шестнадцатиричном виде и 16 полей тех же байтов в символьном виде.| | + | |
- | |<key>esc</key> <key>V</key>|Работа в окне дампа видеопамяти. \\ \\ Содержимое видеопамяти отображается так же, как и в режиме <key>esc</key> <key>D</key>, однако левая колонка заполняется буквами V (для VRAM) или E (для ERAM). При просмотре VRAM поле адреса дополняется слева еще одним разрядом, чтобы охватить все 128Kбайт.| | + | |
- | |<key>esc</key> <key>R</key>|Работа в окне регистров. \\ \\ Окно содержит поля значений всех регистров, а также байтов или слов, на которые указывают шестнадцатибитные регистры. Одновременно с шестнадцатиричными значениями байтов выдается их символьное представление. \\ Кроме того, имеются поля счетчика команд (PC), состояния обработки прерывания (EI/DI) и выбранного банка памяти (с указанием слота и страницы маппера) для всех четырех 16 Kбайтных страниц. \\ Установка конфигурации маппера может быть отключена. \\ **В XDBG**: Наличие или отсутствие маппера распознается автоматически.| | + | |
- | |<key>esc</key> <key>Y</key>|Показ символических имен. \\ \\ Окно дисассемблера заполняется строками, соответствующими символическим именам.| | + | |
- | |<key>esc</key> <key>B</key>|Показ точек приостанова. \\ \\ Окно дисассемблера заполняется строками, соответствующими точкам приостанова.| | + | |
- | |<key>esc</key> <key>H</key>|Показ контролируемых байтов. \\ \\ Окно дампа заполняется строками, соответствующими адресам байтов, изменение которых контролируется.| | + | |
- | |<key>esc</key> <key>I</key>|Чтение файлов. \\ \\ В дополнительном окне располагаются поля имени файла и интервала адресов для размещения программы. После нажатия клавиши перевода строки файл с именем ''<имя>.<тип>'' считывается в память (конфигурация слотов и маппера определяется соответствующими полями в окне регистров). \\ Кроме того, к таблице имен присоединяются имена из файла ''<имя>.SYM'', если он есть. С помощью полей ''Reloc:'' можно указать настройку символических имен на нестандартный начальный адрес программы.| | + | |
- | |<key>esc</key> <key>O</key>|Запись файлов. \\ \\ В дополнительном окне располагаются поля имени файла и интервала адресов. После нажатия клавиши перевода строки указанная область памяти записывается в файл ''<имя>.<тип>'', а все символические имена - в файл ''<имя>.SYM'' (конфигурация слотов и маппера определяется соответствующими полями в окне регистров).| | + | |
- | |<key>esc</key> <key>P</key>|Выдача на печать содержимого текущего окна отладчика (печать прерывается при нажатии <key>ctrl+stop</key>).| | + | |
- | |<key>esc</key> <key>M</key>|Пересылка информации. \\ \\ В дополнительном окне располагаются поля запроса двух интервалов адресов: откуда и куда требуется переслать информацию. При изменении начального адреса в одном из интервалов соответствующий конечный адрес автоматически изменяется так, чтобы длины интервалов совпали. При изменении конечного адреса таким же образом меняется конечный адрес другого интервала.| | + | |
- | |<key>esc</key> <key>F</key>|Заполнение области памяти. \\ \\ В дополнительном окне располагаются поля запроса интервала адресов и образца для заполнения. Образец для за полнения может быть набран в символьном или шестнадцатиричном виде (вид определяется полем, содержащим букву C или X соответственно). Размер образца определяется положением курсора в момент нажатия клавиши <key>'Ввод '⏎</key>.| | + | |
- | |<key>esc</key> <key>'S'</key>|Поиск образца. \\ \\ В дополнительном окне располагаются поля запроса интервала адресов и образца для поиска. Образец для поиска может быть набран в символьном или шестнадцатиричном виде (вид определяется полем, содержащим букву C или X соответственно). Размер образца определяется положением курсора в момент нажатия клавиши <перевод строки>. Поиск можно прервать нажатием <key>ctrl+stop</key>.| | + | |
- | |<key>esc</key> <key>E</key>|Начальная установка регистров. \\ \\ Все регистры устанавливаются в 0, счетчик команд PC устанавливается на 100h, состояние прерываний - разрешены (EI), всем страницам памяти сопоставлены основные банки памяти (установленные при запуске отладчика).| | + | |
- | |<key>esc</key> <key>Z</key>|Начальная установка текущих счетчиков точек приостанова (они устанавливаются равными максимальным счетчикам).| | + | |
- | |<key>esc</key> <key>'C'</key>|Шестнадцатиричный калькулятор. \\ \\ В дополнительном окне располагаются два поля операндов (четырехзначные шестнадцатиричные числа), поле знака операции (+, -, *, /, %) и поле показа результата. Поле результата заполняется при смене любого операнда или знака операции.| | + | |
- | |<key>esc</key> <key>T</key>|Установка базового адреса PNT и PGT отладчика. \\ \\ Поле базового адреса располагается в левом верхнем углу рамки. При вводе нового значения в этом поле PNT и PGT переносятся на указанный адрес и автоматически инициализируются. \\ Таблицы PNT и PGT занимают 1000h байт VRAM, начиная с указанного адреса.| | + | |
- | |<key>esc</key> <key>Q</key>|Завершение работы отладчика и выход в среду операционной системы с восстановлением исходного режима экрана (40/80 символов).| | + | |
- | |<key>esc</key> <key>U</key>|**Только в XDBG** \\ Перенос отладчика в параллельную память. \\ Программы и данные самого отладчика переносятся в ту память, которая задана полями слотов и маппера в окне регистров. При этом для загрузки и отладки программ пользователя становится доступным около 48Кбайт памяти. \\ Перенос в параллельную память не может быть выполнен, если хотя бы одна из трех страниц (0000-3FFF,4000-7FFF, 8000-BFFF) совпадает с первоначальной по слотовому адресу. Кроме того, если при запуске отладчика или в процессе работы перенос выполнен, его нельзя ни отменить, ни изменить; можно только выйти из отладчика и загрузить его снова.| | + | |
- | |<key>esc</key> <key>?</key>|Показ страницы с подсказкой.| | + | |
- | |<key>ctrl+G</key>|Запуск программы. \\ Программа начинает выполняться с адреса, находящегося в счетчике команд PC. Устанавливается заданное пользователем распределение банков памяти. \\ Если режим мультипликации выключен (''Visual:No''), на время работы программы экран переключается на обычную страницу системы (0000h). Если же режим мультипликации включен (''Visual:Exec'' или ''Trace''), системная страница не включается, зато после каждой исполненной команды обновляется содержимое экрана отладчика. В режиме ''Visual:Exec'' исполняется отдельно каждая команда, а в режиме ''Visual:Trace'' взамен одной команды Call исполняется вся вызываемая подпрограмма. \\ Все точки приостанова устанавливаются в основных банках памяти (которые были включены при запуске отладчика). \\ При достижении одной из активных точек приостанова (с признаком "+" или "~") либо выполняется уменьшение счетчика (если он ненулевой), либо приостанавливается выполнение программы и управление передается отладчику. Аналогично выполнение программы приостанавливается при изменении содержимого одного из активных контролируемых байтов. Следует иметь в виду, что выполнение программы значительно замедляется при установке контроля изменения байтов. \\ Выполнение программы можно приостановить нажатием клавиши <key>stop</key> (если прерывания в этот момент разрешены). При выполнении команды ''RET'' с начальным состоянием стека или команды ''RST 0'' управление также передается отладчику; при этом считается, что программа успешно завершена. \\ Обработка точек приостанова организуется с помощью ''RST 0'', поэтому все остальные команды ''RST'' могут использоваться в отлаживаемой программе без ограничений. После возврата управления отладчику в окне дисассемблера первая строка устанавливается на команду, с которой начиналось выполнение, а вторая - на ту, которая вызвала приостанов (в ней устанавливается курсор). \\ Передача управления отладчику при достижении точки приостанова или при завершении программы возможна только при условии, что странице 0000h-3FFFh в этот момент сопоставлен основной банк памяти (тот же, что и при запуске отладчика). \\ При выполнении программы ведется подсчет профилей по всем символическим именам (при каждом прерывании и при трассировке отдельной команды увеличивается на единицу счетчик профиля ближайшего символического имени с адресом, меньшим текущего ''PC''). Значения счетчиков профиля отображаются в правой колонке окна дисассемблера.| | + | |
- | |<key>ctrl+X</key> (<key>SELECT</key>)|Выполнение одной команды. \\ \\ Выполняются те же действия, что и по указанию <key>ctrl+G</key>, но исполняется только одна команда (расположенная по адресу из счетчика команд ''PC''). Можно исполнять также команды, находящиеся в ПЗУ (однако точки приостанова в ПЗУ устанавливать нельзя).| | + | |
- | |<key>ctrl+T</key>| Выполнение команды с обходом подпрограммы. \\ Выполняется аналогично <key>ctrl+X</key>, но для команды ''CALL'' управление возвращается отладчику только после выполнения вызываемой подпрограммы. При выполнении подпрограммы выполняется обычная обработка точек приостанова (как в <key>ctrl+G</key>).| | + | |
- | |<key>ctrl+P</key>|Установка счетчика команд ''PC'' на ту команду, против которой находится курсор.| | + | |
- | |<key>ctrl+V</key>|Выбор режима мультипликации. \\ Устанавливается один из режимов ''Visual:No'', ''Exec'' или ''Trace''.| | + | |
- | + | ||
- | Распределение видеопамяти: | + | |
- | |0000h|PNT системы и программы.| | + | |
- | |1000h|PGT системы и программы.| | + | |
- | |2000h|PNT отладчика.| | + | |
- | |2800h|PGT отладчика.| | + | |
- | |3000h|PNT подсказки.| | + | |
- | + | ||
- | + | ||
- | + | ||
<code> | <code> | ||
- | |||
- | |||
- | MSX/MSX2 | ||
- | |||
- | Руководство пользователя | ||
- | |||
- | |||
- | Леонид БАРАЗ | ||
- | |||
- | |||
- | |||
- | Программа XDBG представляет собой экранный отладчик про- | ||
- | грамм, написанных на ассемблере Z80. Этот отладчик может ис- | ||
- | пользоваться на ПЭВМ MSX2 и MSX, оснащенных VDP 9938 ("YAMAHA" | ||
- | YIS503II), под управлением операционной системы MSX-DOS (в | ||
- | том числе в варианте Ю.В.Галутина). | ||
- | |||
- | Команда вызова отладчика: | ||
- | A>XDbg[/p[/s]][/M] [имя-программы] | ||
- | |||
- | После XDbg в команде запуска можно указать от одного до | ||
- | трех флажков, которые определяют, в каком слоте памяти | ||
- | должен располагаться собственно отладчик. Первые два флажка | ||
- | определяют номера первичного и вторичного слота | ||
- | соответственно (XDbg/3/0 - слот 3-0, XDbg/1 - слот 1 | ||
- | нерасширенный). Флажок /M предписывает использование маппера | ||
- | (отладчик располагается в страницах FF, FE и FD). При | ||
- | переносе отладчика максимально возможный размер загружаемой | ||
- | и отлаживаемой программы может достигать 48Kбайт. | ||
- | При отсутствии флажков отладчик размещается в основной | ||
- | оперативной памяти, оставляя для программы пользователя | ||
- | вместе с таблицей символических имен только 32КБайт. Однако | ||
- | перенести отладчик в параллельную память можно и в процессе | ||
- | работы посредством команды <esc> U (см. ниже). | ||
- | |||
- | |||
- | Примеры отображения на экране: | ||
- | Режим листинга ассемблера | ||
- | |||
окно заголовка | окно заголовка | ||
┌──────────────────────────────────────────────────┐ | ┌──────────────────────────────────────────────────┐ | ||
┌02000┬───────────────────────────────────────────────────────┬────────────────┐ | ┌02000┬───────────────────────────────────────────────────────┬────────────────┐ | ||
- | │List │ X-DEBUGGER Version 1.0 Help:<Esc>? Visual:Trace │ EI PC=D827 I=00│ | + | │List │ DEBUGGER Version 5.2 Help:<Esc>? Visual:Trace │ EI PC=D827 I=00│ |
- | ├─────┼──────────────────────────────────────────────────┬────┤8B/02/8B/8B R=58│ | + | ├─────┼──────────────────────────────────────────────────┬────┤32/2-/32/32 R=58│ |
- | │ │ 7FF8:60 LD H,B │ │--/--/--/-- │ | + | │ │ 7FF8:60 LD H,B │ │FB/FA/F9/F8 +MAP│ |
- | │ │ 7FF9:4B LD C,E │ │T=838B:CE6B/89C3│ | + | │ │ 7FF9:4B LD C,E │ │T=882B:D0C1/323C│ |
│00~00│ 7FFA:03 INC BC │ ├────────────────┤ | │00~00│ 7FFA:03 INC BC │ ├────────────────┤ | ||
│ │ 7FFB:1A LD A,(DE) │ │ A=00 . sZxHxpNC│ | │ │ 7FFB:1A LD A,(DE) │ │ A=00 . sZxHxpNC│ | ||
Строка 224: | Строка 138: | ||
│ │ 4030:2A 4B F3 C9 DD E5 DD 21 B7 00 CD AB 40 DD E1 30│*KСищЕщ!≈.мδ@щА0│ | │ │ 4030:2A 4B F3 C9 DD E5 DD 21 B7 00 CD AB 40 DD E1 30│*KСищЕщ!≈.мδ@щА0│ | ||
└─┴───────────────────────────────────────────────────────────┴────────────────┘ | └─┴───────────────────────────────────────────────────────────┴────────────────┘ | ||
+ | </code> | ||
- | Режим загрузки программы | + | Режим загрузки программы |
+ | <code> | ||
окно запроса | окно запроса | ||
(дополнительное окно файлов) | (дополнительное окно файлов) | ||
Строка 232: | Строка 147: | ||
┌1F000┬───────────────────────────────────────────────────────┬────────────────┐ | ┌1F000┬───────────────────────────────────────────────────────┬────────────────┐ | ||
- | │Input│ File:B:prog .COM Area:07F0-BEFC Reloc:0100->07F0 │ EI PC=0100 I=00│ | + | │Input│ File:B:prog .COM Area:07F0-8A1B Reloc:0100->07F0 │ EI PC=0100 I=00│ |
- | ├─────┼──────────────────────────────────────────────────┬────┤8B/8B/8B/8B R=7B│ | + | ├─────┼──────────────────────────────────────────────────┬────┤32/32/32/32 R=7B│ |
- | │ │ 012F:CB 16 RL (HL) │ │FB/FA/F9/F8 │ | + | │ │ 012F:CB 16 RL (HL) │ │--/--/--/-- -MAP│ |
- | │ │ 0131:30 0F JR NC,0142 │ │T=BEFB:CE6B/89C3│ | + | │ │ 0131:30 0F JR NC,0142 │ │T=8A1A:CFC5/75C3│ |
│ │ 0133:E5 PUSH HL │ ├────────────────┤ | │ │ 0133:E5 PUSH HL │ ├────────────────┤ | ||
│ │ 0134:DD 66 00 LD H,(IX+00) │ │ A=00 . szxhxpnc│ | │ │ 0134:DD 66 00 LD H,(IX+00) │ │ A=00 . szxhxpnc│ | ||
Строка 258: | Строка 173: | ||
│V│ 1F090:45 49 20 50 43 3D 30 31 30 30 20 52 3D 37 42 16│EI PC=0100 .│ | │V│ 1F090:45 49 20 50 43 3D 30 31 30 30 20 52 3D 37 42 16│EI PC=0100 .│ | ||
└─┴───────────────────────────────────────────────────────────┴────────────────┘ | └─┴───────────────────────────────────────────────────────────┴────────────────┘ | ||
+ | </code> | ||
+ | </hidden> | ||
- | Отладчик обеспечивает: | ||
- | - загрузку в память и запись на диск программ и таблиц симво- | + | Отладчик обеспечивает: |
- | лов (файлов <имя>.<тип> и <имя>.SYM); | + | * загрузку в память и запись на диск программ и таблиц символов (файлов ''<имя>.<тип>'' и ''<имя>.SYM''); |
- | - просмотр и корректировку содержимого оперативной памяти в | + | * просмотр и корректировку содержимого оперативной памяти в символьном и шестнадцатиричном формате, а также в виде команд ассемблера; |
- | символьном и шестнадцатиричном формате, а также в виде ко- | + | * просмотр и корректировку содержимого видеопамяти в символьном и шестнадцатиричном формате; |
- | манд ассемблера; | + | * просмотр и изменение содержимого регистров отлаживаемой программы; |
- | - просмотр и корректировку содержимого видеопамяти в символь- | + | * использование имён, введённых вместе с программой, а также добавление новых имён и удаление имеющихся (имена используются и в командах ассемблера); имена можно настроить на начальный адрес программы; |
- | ном и шестнадцатиричном формате; | + | * выдачу на печать содержимого текущего окна отладчика; |
- | - просмотр и изменение содержимого регистров отлаживаемой | + | * установку и снятие точек приостанова (со счётчиками); |
- | программы; | + | * установку и снятие контроля изменения байтов памяти; |
- | - использование имен, введенных вместе с программой, а также | + | * покомандное и непрерывное выполнение программы (в том числе и в режиме мультипликации, с обходом и без обхода команд ''CALL''); |
- | добавление новых имен и удаление имеющихся (имена использу- | + | * возврат управления отладчику: при достижении точки приостанова с нулевым счётчиком, при изменении одного из контролируемых байтов памяти, при нормальном завершении программы, при нажатии клавиши <key>stop</key>; |
- | ются и в командах ассемблера); имена можно настроить на на- | + | * пересылку и заполнение областей памяти, поиск символьного или шестнадцатиричного образца. |
- | чальный адрес программы; | + | * выполнение арифметических действий над шестнадцатиричными числами; |
- | - выдачу на печать содержимого текущего окна отладчика; | + | * получение на экране краткой информации о средствах, имеющихся в отладчике. |
- | - установку и снятие точек приостанова (со счетчиками); | + | |
- | - установку и снятие контроля изменения байтов памяти; | + | |
- | - покомандное и непрерывное выполнение программы (в том числе | + | |
- | и в режиме мультипликации, с обходом и без обхода команд | + | |
- | CALL); | + | |
- | - возврат управления отладчику: при достижении точки приоста- | + | |
- | нова с нулевым счетчиком, при изменении одного из контроли- | + | |
- | руемых байтов памяти, при нормальном завершении программы, | + | |
- | при нажатии клавиши <stop>; | + | |
- | - пересылку и заполнение областей памяти, поиск символьного | + | |
- | или шестнадцатиричного образца. | + | |
- | - выполнение арифметических действий над шестнадцатиричными | + | |
- | числами; | + | |
- | - получение на экране краткой информации о средствах, име- | + | |
- | ющихся в отладчике. | + | |
- | При запуске отладчик переводит систему в 80-символьный | + | При запуске отладчик переводит систему в 80–символьный режим и загружает в оперативную память программу, если ее имя указано в команде (имя указывается без уточнения; загружаются файлы ''<имя>.<тип>'' и ''<имя>.SYM''). |
- | режим и загружает в оперативную память программу, если ее имя | + | |
- | указано в команде (имя указывается без уточнения; загружаются | + | |
- | файлы <имя>.<тип> и <имя>.SYM). | + | |
- | В процессе работы на экране выделяются поля разметки и | + | В процессе работы на экране выделяются поля разметки и поля данных. Курсор всегда находится в одном из полей данных, и только в такие поля можно вносить изменения. При выходе курсора из текущего поля его новое содержимое проверяется и заносится в память машины; все остальные поля экрана при этом приводятся (по возможности) в соответствие с содержимым изменённого поля. Например, для изменения байта или слова данных в любом поле достаточно просто набрать его новое значение и выйти из поля. Аналогично, для того, чтобы передвинуть окно листинга или дампа на другие адреса памяти, достаточно в любой строке набрать нужное имя в поле имени или нужный адрес в поле адреса. Для создания нового имени достаточно набрать его в соответствующем поле, а для удаления существующего — заменить его на новое или заполнить поле имени пробелами. |
- | поля данных. Курсор всегда находится в одном из полей данных, | + | |
- | и только в такие поля можно вносить изменения. При выходе | + | |
- | курсора из текущего поля его новое содержимое проверяется и | + | |
- | заносится в память машины; все остальные поля экрана при этом | + | |
- | приводятся (по возможности) в соответствие с содержимым из- | + | |
- | мененного поля. Например, для изменения байта или слова дан- | + | |
- | ных в любом поле достаточно просто набрать его новое значение | + | |
- | и выйти из поля. Аналогично, для того, чтобы передвинуть окно | + | |
- | листинга или дампа на другие адреса памяти, достаточно в | + | |
- | любой строке набрать нужное имя в поле имени или нужный адрес | + | |
- | в поле адреса. Для создания нового имени достаточно набрать | + | |
- | его в соответствующем поле, а для удаления существующего - | + | |
- | заменить его на новое или заполнить поле имени пробелами. | + | |
- | Все поля данных, имеющиеся на экране, сгруппированы в | + | Все поля данных, имеющиеся на экране, сгруппированы в окна: три основных ("дампа", "листинга" и "регистров") и одно дополнительное ("заголовка", "файлов" или "памяти"). |
- | окна: три основных ("дампа", "листинга" и "регистров") и одно | + | |
- | дополнительное ("заголовка", "файлов" или "памяти"). Курсор | + | |
- | перемещается в пределах одного окна с помощью стрелок, клавиш | + | |
- | <перевод строки>, <tab> и <ctrl>+F. Листание осуществляется | + | |
- | по клавишам <ctrl>+J (вверх) и <ctrl>+Q (вниз). Редактирова- | + | |
- | ние информации выполняется символьными клавишами, а также | + | |
- | клавишами <ins>, <del> и <bs>. Переход в другое окно (и уста- | + | |
- | новка дополнительного окна) выполняются по одной из следующих | + | |
- | команд: | + | |
+ | Курсор перемещается в пределах одного окна с помощью стрелок, клавиш <key>'Ввод '⏎</key>, <key>tab</key> и <key>ctrl+F</key>. Листание осуществляется по клавишам <key>ctrl+J</key> (вверх) и <key>ctrl+Q</key> (вниз). Редактирование информации выполняется символьными клавишами, а также клавишами <key>ins</key>, <key>del</key> и <key>bs</key>. Переход в другое окно (и установка дополнительного окна) выполняются по одной из следующих команд: | ||
+ | |<100% 10% 90%>| | ||
+ | |<key>esc</key> <key>L</key>|Работа в окне листинга. \\ \\ Левая колонка содержит точки приостанова (для них указывается максимальный счётчик, признак активности (''+ -'' активна, ''~ -'' активна в параллельном банке памяти, ''- -'' неактивна) и текущее значение счётчика). В основной части каждой строки окна располагаются поля имени, адреса, байтов, образующих команду, и самого текста команды. \\ Правая колонка окна содержит значения счётчиков профилей выполнения программы (в строках команд с символическими именами). \\ Имена во всех полях (в том числе и в текстах команд) должны заканчиваться двоеточием. Например, команды могут записываться в следующем виде: <code> | ||
+ | LD A,(name:3000) | ||
+ | LD A,(name:) | ||
+ | LD A,(3000) | ||
+ | </code> Команда ''RST 30'' (Inter-Slot Call) дополняется в качестве операндов номером слота и адресом вызова.| | ||
+ | |<key>esc</key> <key>D</key>|Работа в окне дампа. \\ \\ Левая колонка содержит признаки контроля изменения байта памяти с указанием активности контроля (+/-/~). В основной части каждой строки окна имеются поля имени, адреса, 6 полей байтов в шестнадцатиричном виде и 16 полей тех же байтов в символьном виде.| | ||
+ | |<key>esc</key> <key>V</key>|Работа в окне дампа видеопамяти. \\ \\ Содержимое видеопамяти отображается так же, как и в режиме <key>esc</key> <key>D</key>, однако левая колонка заполняется буквами V (для VRAM) или E (для ERAM). При просмотре VRAM поле адреса дополняется слева еще одним разрядом, чтобы охватить все 128Kбайт.| | ||
+ | |<key>esc</key> <key>R</key>|Работа в окне регистров. \\ \\ Окно содержит поля значений всех регистров, а также байтов или слов, на которые указывают шестнадцатибитные регистры. Одновременно с шестнадцатиричными значениями байтов выдаётся их символьное представление. \\ Кроме того, имеются поля счётчика команд (''PC''), состояния обработки прерывания (EI/DI) и выбранного банка памяти (с указанием слота и страницы маппера) для всех четырех 16 Kбайтных страниц. \\ **DBG**: Установка конфигурации маппера может быть отключена. \\ **XDBG**: Наличие или отсутствие маппера распознаётся автоматически.| | ||
+ | |<key>esc</key> <key>Y</key>|Показ символических имён. \\ \\ Окно листинга заполняется строками, соответствующими символическим именам.| | ||
+ | |<key>esc</key> <key>B</key>|Показ точек приостанова. \\ \\ Окно листинга заполняется строками, соответствующими точкам приостанова.| | ||
+ | |<key>esc</key> <key>H</key>|Показ контролируемых байтов. \\ \\ Окно дампа заполняется строками, соответствующими адресам байтов, изменение которых контролируется.| | ||
+ | |<key>esc</key> <key>I</key>|Чтение файлов. \\ \\ В дополнительном окне располагаются поля имени файла и интервала адресов для размещения программы. После нажатия клавиши перевода строки файл с именем ''<имя>.<тип>'' считывается в память (конфигурация слотов и маппера определяется соответствующими полями в окне регистров). \\ Кроме того, к таблице имён присоединяются имена из файла ''<имя>.SYM'', если он есть. С помощью полей ''Reloc:'' можно указать настройку символических имён на нестандартный начальный адрес программы.| | ||
+ | |<key>esc</key> <key>O</key>|Запись файлов. \\ \\ В дополнительном окне располагаются поля имени файла и интервала адресов. После нажатия клавиши перевода строки указанная область памяти записывается в файл ''<имя>.<тип>'', а все символические имена — в файл ''<имя>.SYM'' (конфигурация слотов и маппера определяется соответствующими полями в окне регистров).| | ||
+ | |<key>esc</key> <key>P</key>|Выдача на печать содержимого текущего окна отладчика (печать прерывается при нажатии <key>ctrl+stop</key>).| | ||
+ | |<key>esc</key> <key>M</key>|Пересылка информации. \\ \\ В дополнительном окне располагаются поля запроса двух интервалов адресов: откуда и куда требуется переслать информацию. При изменении начального адреса в одном из интервалов соответствующий конечный адрес автоматически изменяется так, чтобы длины интервалов совпали. При изменении конечного адреса таким же образом меняется конечный адрес другого интервала.| | ||
+ | |<key>esc</key> <key>F</key>|Заполнение области памяти. \\ \\ В дополнительном окне располагаются поля запроса интервала адресов и образца для заполнения. Образец для заполнения может быть набран в символьном или шестнадцатиричном виде (вид определяется полем, содержащим букву C или X соответственно). Размер образца определяется положением курсора в момент нажатия клавиши <key>'Ввод '⏎</key>.| | ||
+ | |<key>esc</key> <key>'S'</key>|Поиск образца. \\ \\ В дополнительном окне располагаются поля запроса интервала адресов и образца для поиска. Образец для поиска может быть набран в символьном или шестнадцатиричном виде (вид определяется полем, содержащим букву C или X соответственно). Размер образца определяется положением курсора в момент нажатия клавиши <перевод строки>. Поиск можно прервать нажатием <key>ctrl+stop</key>.| | ||
+ | |<key>esc</key> <key>E</key>|Начальная установка регистров. \\ \\ Все регистры устанавливаются в 0, счётчик команд ''PC'' устанавливается на 100h, состояние прерываний — разрешены (EI), всем страницам памяти сопоставлены основные банки памяти (установленные при запуске отладчика).| | ||
+ | |<key>esc</key> <key>Z</key>|Начальная установка текущих счётчиков точек приостанова (они устанавливаются равными максимальным счётчикам).| | ||
+ | |<key>esc</key> <key>'C'</key>|Шестнадцатиричный калькулятор. \\ \\ В дополнительном окне располагаются два поля операндов (четырёхзначные шестнадцатиричные числа), поле знака операции (+, -, *, /, %) и поле показа результата. Поле результата заполняется при смене любого операнда или знака операции.| | ||
+ | |<key>esc</key> <key>T</key>|Установка базового адреса PNT и PGT отладчика. \\ \\ Поле базового адреса располагается в левом верхнем углу рамки. При вводе нового значения в этом поле PNT и PGT переносятся на указанный адрес и автоматически инициализируются. \\ Таблицы PNT и PGT занимают 1000h байт VRAM, начиная с указанного адреса.| | ||
+ | |<key>esc</key> <key>Q</key>|Завершение работы отладчика и выход в среду операционной системы с восстановлением исходного режима экрана (40/80 символов).| | ||
+ | |{{anchor:esc_u}} <key>esc</key> <key>U</key>|**Только в XDBG** \\ Перенос отладчика в параллельную память. \\ Программы и данные самого отладчика переносятся в ту память, которая задана полями слотов и маппера в окне регистров. При этом для загрузки и отладки программ пользователя становится доступным около 48 Кбайт памяти. \\ Перенос в параллельную память не может быть выполнен, если хотя бы одна из трех страниц (0000...3FFF,4000...7FFF, 8000...BFFF) совпадает с первоначальной по слотовому адресу. Кроме того, если при запуске отладчика или в процессе работы перенос выполнен, его нельзя ни отменить, ни изменить; можно только выйти из отладчика и загрузить его снова.| | ||
+ | |<key>esc</key> <key>?</key>|Показ страницы с подсказкой.| | ||
+ | |<key>ctrl+G</key>|Запуск программы. \\ Программа начинает выполняться с адреса, находящегося в счётчике команд ''PC''. Устанавливается заданное пользователем распределение банков памяти. \\ Если режим мультипликации выключен (''Visual:No''), на время работы программы экран переключается на обычную страницу системы (0000h). Если же режим мультипликации включён (''Visual:Exec'' или ''Trace''), системная страница не включается, зато после каждой исполненной команды обновляется содержимое экрана отладчика. В режиме ''Visual:Exec'' исполняется отдельно каждая команда, а в режиме ''Visual:Trace'' взамен одной команды ''Call'' исполняется вся вызываемая подпрограмма. \\ Все точки приостанова устанавливаются в основных банках памяти (которые были включены при запуске отладчика). \\ При достижении одной из активных точек приостанова (с признаком "+" или "~") либо выполняется уменьшение счётчика (если он ненулевой), либо приостанавливается выполнение программы и управление передаётся отладчику. Аналогично выполнение программы приостанавливается при изменении содержимого одного из активных контролируемых байтов. Следует иметь в виду, что выполнение программы значительно замедляется при установке контроля изменения байтов. \\ Выполнение программы можно приостановить нажатием клавиши <key>stop</key> (если прерывания в этот момент разрешены). При выполнении команды ''RET'' с начальным состоянием стека или команды ''RST 0'' управление также передаётся отладчику; при этом считается, что программа успешно завершена. \\ Обработка точек приостанова организуется с помощью ''RST 0'', поэтому все остальные команды ''RST'' могут использоваться в отлаживаемой программе без ограничений. После возврата управления отладчику в окне листинга первая строка устанавливается на команду, с которой начиналось выполнение, а вторая — на ту, которая вызвала приостанов (в ней устанавливается курсор). \\ Передача управления отладчику при достижении точки приостанова или при завершении программы возможна только при условии, что странице 0000h...3FFFh в этот момент сопоставлен основной банк памяти (тот же, что и при запуске отладчика). \\ При выполнении программы ведётся подсчёт профилей по всем символическим именам (при каждом прерывании и при трассировке отдельной команды увеличивается на единицу счётчик профиля ближайшего символического имени с адресом, меньшим текущего ''PC''). Значения счётчиков профиля отображаются в правой колонке окна листинга.| | ||
+ | |<key>ctrl+X</key> (<key>SELECT</key>)|Выполнение одной команды. \\ \\ Выполняются те же действия, что и по указанию <key>ctrl+G</key>, но исполняется только одна команда (расположенная по адресу из счётчика команд ''PC''). Можно исполнять также команды, находящиеся в ПЗУ (однако точки приостанова в ПЗУ устанавливать нельзя).| | ||
+ | |<key>ctrl+T</key>| Выполнение команды с обходом подпрограммы. \\ Выполняется аналогично <key>ctrl+X</key>, но для команды ''CALL'' управление возвращается отладчику только после выполнения вызываемой подпрограммы. При выполнении подпрограммы выполняется обычная обработка точек приостанова (как в <key>ctrl+G</key>).| | ||
+ | |<key>ctrl+P</key>|Установка счётчика команд ''PC'' на ту команду, против которой находится курсор.| | ||
+ | |<key>ctrl+V</key>|Выбор режима мультипликации. \\ Устанавливается один из режимов ''Visual:No'', ''Exec'' или ''Trace''.| | ||
- | + | Распределение видеопамяти: | |
- | + | |0000h|PNT системы и программы.| | |
- | </code> | + | |1000h|PGT системы и программы.| |
- | {{dbg.zip |}} | + | |2000h|PNT отладчика.| |
+ | |2800h|PGT отладчика.| | ||
+ | |3000h|PNT подсказки.| | ||
====== Ссылки ====== | ====== Ссылки ====== | ||
Строка 333: | Строка 242: | ||
{{tag>MSX Application Baraz_L_S}} | {{tag>MSX Application Baraz_L_S}} | ||
- |