069. SBC 间接,X

添加 SBC (间接,X)。

69 / 356 · tests/chapter_01_cpu/test_069_SBC_indirect_x.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_indirect_x and OPCODE_TABLE[0xE1]

为什么需要这一步

SBC 通过将现有的 indirect_x 解析器与标准的内存读取和指令委托包装器组合,获得了先变址间接访问能力。

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xE1: sbc_indirect_x,
}

重要不变量

  • indirect_x 在读取指针之前先把 X 加到零页操作数上
  • 指针字节及其零页回绕由解析器处理
  • 包装器读取最终地址并把读到的字节传给 sbc
  • 执行这条两字节指令会使 PC 前进两个字节

常见误解

不要把零页指针位置当作 SBC 的操作数来读取;indirect_x 返回的是最终的 16 位目标地址,必须读取该地址处的内容。

范围之外

  • (间接),Y 的 SBC 包装器
  • 对间接寻址或 SBC 算术的更改
  • 周期时序

运行本课

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