064. SBC 零页寻址

添加 SBC 零页寻址。

64 / 356 · tests/chapter_01_cpu/test_064_SBC_zero_page.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_zero_page and OPCODE_TABLE[0xE5]

为什么需要这一步

本课添加第一个内存寻址的 SBC 包装器,复用已建立的零页地址解析器和基于数值的核心 sbc 操作。

完整示例实现

# emulator/cpu/opcodes.py
def sbc_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    sbc(cpu, value)

OPCODE_TABLE = {
    # ... existing entries ...
    0xE5: sbc_zero_page,
}

重要不变量

  • zero_page 取出一个操作数并返回一个位于第 $00 页的地址
  • 处理函数从该地址读取一个字节并把数值传给 sbc
  • SBC 的算术和标志行为仍然集中在 sbc
  • 执行这条两字节指令会使 PC 前进两个字节

常见误解

zero_page 返回的是地址,而不是要减去的字节;处理函数必须在调用 sbc 之前先执行总线读取。

范围之外

  • 变址、绝对和间接的 SBC 包装器
  • 对零页寻址或 SBC 算术的更改
  • 周期时序

运行本课

uv run pytest tests/chapter_01_cpu/test_064_SBC_zero_page.py -v