211. Форматтер трассировки CPU
добавьте `emulator/debug/cpu_trace.py::format_cpu_trace`.
Урок 211 из 356 · tests/chapter_01_cpu/test_211_cpu_trace_formatter.py
Зачем нужен этот шаг
На этом шаге добавьте форматтер, который обеспечивает наблюдаемость до сравнения с ROM-логом, не связывая отладку с выполнением CPU. Его строка сообщает следующий PC/опкод и значения регистров A, X, Y, P и S до выполнения:
8000 A9 A:00 X:00 Y:00 P:04 S:FDПредлагаемая реализация
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from emulator.cpu.cpu import CPU
def format_cpu_trace(cpu: CPU):
opcode = cpu.bus.read(cpu.pc)
return f"{cpu.pc:04X} {opcode:02X} A:{cpu.a:02X} X:{cpu.x:02X} Y:{cpu.y:02X} P:{cpu.p:02X} S:{cpu.s:02X}"Инварианты: форматирование выполняет одно чтение шины без продвижения, возвращает поля в верхнем регистре шестнадцатеричной системы фиксированной ширины и оставляет PC, регистры и флаги неизменными. Не используйте CPU.fetch_byte() и не вызывайте CPU.step(); оба варианта смешивают наблюдение с выполнением, а fetch_byte() продвигает PC. Вне рамок: поддержка ROM и картриджа относится к последующим пронумерованным шагам.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_211_cpu_trace_formatter.py -v