Skip to content
Nikita Zimin edited this page Dec 2, 2022 · 9 revisions

Встроенный отладчик UKNCBTL

Для перехода в отладчик выберите команду 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

Sprite Viewer

По команде Debug > Sprite Viewer поверх окна отладчика открывается вьювер памяти в виде спрайта (Sprite Viewer).

Управление с клавиатуры: стрелки для изменения адреса, скобки [ и ] для изменения ширины спрайта (1..32), клавиша M для переключения цветового режима, G чтобы задать адрес.