068. SBC 绝对,Y

添加 SBC 绝对,Y。

68 / 356 · tests/chapter_01_cpu/test_068_SBC_absolute_y.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_absolute_y and OPCODE_TABLE[0xF9]

为什么需要这一步

本课与绝对,X 平行,使用现有的 absolute_y 解析器,让 SBC 能够从 Y 变址的 16 位地址中减去一个字节。

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xF9: sbc_absolute_y,
}

重要不变量

  • absolute_y 消耗两个操作数字节并加上 Y,而不是 X
  • 处理函数恰好从最终变址地址读取一次
  • sbc 接收字节数值并负责算术标志的更新
  • 执行这条三字节指令会使 PC 前进三个字节

常见误解

不要复制绝对,X 的包装器后仍让它使用 X 或 absolute_x;操作码 $F9 必须通过 Y 来解析。

范围之外

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

运行本课

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