-
Notifications
You must be signed in to change notification settings - Fork 2
Debugger ru
Для перехода в отладчик выберите команду Debug > Debug Views.
Слева вверху — экран УКНЦ. Слева внизу — отладочная консоль, в которой можно вводить команды. Справа вверху — окно состояния текущего процессора: вверху в боксе его регистры, справа от них содержимое стека, ниже дизассемблированный блок возле адреса PC; правее вверху — состояние портов, внизу — состояние каналов обмена данными между процессорами. Справа внизу — окно состояния памяти.
Красным цветом везде отмечены ячейки памяти, которые изменились после очередного шага или прогона. Перед шагом/запуском сохраняется состояние всей памяти и регистров процессоров, что позволяет о каждой ячейке сказать, изменилась ли она. Синим цветом показываются значения из ПЗУ. Зелёный цвет отмечает значения из портов ввода/вывода.
Краткий список команд выдается по команде h
:
PPU:000000> h
Console command list:
c Clear console log
d Disassemble from PC; use D for short format
dXXXXXX Disassemble from address XXXXXX
g Go; free run
gXXXXXX Go; run and stop at address XXXXXX
m Memory dump at current address
mXXXXXX Memory dump at address XXXXXX
mrN Memory dump at address from register N; N=0..7
mXXXXXX YYYYYY Set memory value at address XXXXXX
p Switch to other processor
r Show register values
rN Show value of register N; N=0..7,ps
rN XXXXXX Set register N to value XXXXXX; N=0..7,ps
s Step Into; executes one instruction
so Step Over; executes and stops after the current instruction
b List breakpoints set for the current processor
bXXXXXX Set breakpoint at address XXXXXX
bcXXXXXX Remove breakpoint at address XXXXXX
bc Remove all breakpoints for the current processor
u Save memory dump to file memdumpXPU.bin
udl Save display list dump to file displaylist.txt
fcXXXXXX YYYYYY Calculate floating number for the two octal words
c — очистка лога отладочной консоли
r — показать содержимое регистров. r1 — показать содержимое регистра R1. r1 1000 либо r1=1000 — изменить значение регистра R1 на 1000.
m — дамп памяти с текущего адреса. m1000 — дамп памяти с адреса 1000. mr1 — дамп памяти с адреса из регистра R1.
m1000 177777 либо m1000=177777 — изменить значение ячейки памяти с адресом 1000 на значение 177777.
d1000 — дизассемблировать несколько инструкций, начиная с адреса 1000.
p — переключение отладочных окон и консоли на другой процессор (ЦП — ПП).
g — пуск эмулятора, то же что команда Emulator > Run. g1000 — поставить точку останова на адрес 1000 и пуск эмулятора.
s — шаг отладчика для текущего процессора.
so — шаг отладчика с обходом подпрограмм: дизассемблером вычисляется адрес следующей инструкции, ставится точка останова на следующую инструкцию и запускается эмулятор.
u — сохранение дампа памяти текущего процессора в файл memdumpСPU.bin либо memdumpPPU.bin.
udl — сохранение дампа списка строк в файл displaylist.txt.
h — показать список команд отладочной консоли.
Отладчик позволяет поставить до 15 точек останова на каждый из двух процессоров.
Команды отладочной консоли:
- b160434 — поставить точку на адрес 160434 для текущего процессора. Не сработает если такая точка останова уже есть или же если создано уже 15 точек останова для этого процессора.
- b — показать список всех точек останова для текущего процессора.
- bc160434 — убрать точку останова для адреса 160434.
- bc — удалить все точки останова для текущего процессора.
Точки останова можно ставить и убирать кликом мыши в левой части окна Disassemble.
В отладчике показываются стрелки переходов, для того чтобы легче было понимать структуру кода:
Для текущей строки (адрес куда указывает PC) отладчик показывает подсказки. Например, если в команде фигурирует регистр, то будет показано содержимое этого регистра. Если используется относительная адресация, то показывается содержимое памяти по данному адресу.
В окне дизассемблера есть возможность загрузки "субтитров" — подготовленного текста с комментариями к дизассемблированному коду. Для загрузки субтитров нужно щёлкнуть в окно дизассемблера и нажать клавишу 's'.
Пример текста субтитров:
; П/п поиска пилот-тона перед заголовком
130060: MTPS #200 ; Запретить прерывания
130064: MOV 23314$,R2 ; R2 = число перепадов уровня при поиске загол.
130070: MOV R5,R4 ; R4 = длина предыдущего интервала
130072: CALL 130636$ ; Проверка нажатия "СТОП"
130076: BIT #40,@#177710 ; Перепад произошел ?
130104: BEQ 130072$ ; Нет
130106: MOV @#177714,R5 ; R5 = длина текущего интервала
130112: TST @#177714 ; Сбросить готовность таймера
130116: BIT #250,@#177710 ; Готовность сброшена ?
130124: BNE 130112$ ; Нет
130126: SUB R5,R4 ; Вычислить разность между длинами интервалов
130130: BPL 130134$
130132: NEG R4
130134: CMP R4,23322$ ; Разброс длин в норме ?
130140: BHI 130064$ ; Нет
130142: SOB R2,130070$ ; Цикл по R2
130144: MOV #10,R3
130150: MTPS #0
RETURN
По команде Debug > Sprite Viewer поверх окна отладчика открывается вьювер памяти в виде спрайта (Sprite Viewer).
Управление с клавиатуры: стрелки для изменения адреса, скобки [
и ]
для изменения ширины спрайта (1..32), клавиша M
для переключения цветового режима, G
чтобы задать адрес.