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