070. SBC 间接,Y

添加 SBC (间接),Y。

70 / 356 · tests/chapter_01_cpu/test_070_SBC_indirect_y.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_indirect_y and OPCODE_TABLE[0xF1]

为什么需要这一步

最后一个 SBC 寻址变体使用现有的 indirect_y 解析器从零页读取基址指针、加上 Y,并把目标字节提供给 sbc

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xF1: sbc_indirect_y,
}

重要不变量

  • indirect_y 在加上 Y 之前先读取零页指针
  • 处理函数恰好读取最终地址处的字节一次
  • 读取到的数值被传给 sbc,由它负责 A 和标志的更新
  • 执行这条两字节指令会使 PC 前进两个字节

常见误解

(间接),Y 不会在解引用之前把 Y 加到零页指针位置上;那种先变址行为属于 (间接,X)。

范围之外

  • 后续的 INC 和其他指令族
  • 对间接寻址或 SBC 算术的更改
  • 周期时序和跨页惩罚

运行本课

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