067. SBC 绝对,X

添加 SBC 绝对,X。

67 / 356 · tests/chapter_01_cpu/test_067_SBC_absolute_x.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_absolute_x and OPCODE_TABLE[0xFD]

为什么需要这一步

SBC 通过复用现有的 absolute_x 解析器获得了 X 变址的绝对访问能力;操作码包装器仍然只负责读取和委托。

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xFD: sbc_absolute_x,
}

重要不变量

  • absolute_x 消耗两个操作数字节并把 X 加到基地址上
  • 处理函数读取最终变址地址处的字节
  • 读取到的数值只被传给 sbc 一次
  • 执行这条三字节指令会使 PC 前进三个字节

常见误解

不要在包装器中再次加上 X;absolute_x 已经返回最终的变址地址。

范围之外

  • 绝对,Y 和间接的 SBC 包装器
  • 跨页周期惩罚
  • 对寻址辅助函数或 SBC 算术的更改

运行本课

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