066. SBC 绝对寻址

添加 SBC 绝对寻址。

66 / 356 · tests/chapter_01_cpu/test_066_SBC_absolute.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.sbc_absolute and OPCODE_TABLE[0xED]

为什么需要这一步

本课将 SBC 连接到现有的小端 16 位绝对地址上,遵循与其他内存操作码相同的“解析-读取-委托”边界。

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0xED: sbc_absolute,
}

重要不变量

  • absolute 消耗两个操作数字节并返回 16 位地址
  • 处理函数从该地址读取一个字节
  • 只有 sbc 会更改 A 和算术标志
  • 执行这条三字节指令会使 PC 前进三个字节

常见误解

这两个操作数字节按小端顺序构成一个地址;它们不是要减去的数值,也不应在这个包装器中被再次组装。

范围之外

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

运行本课

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