061. ADC 间接,Y

添加 ADC (间接),Y。

61 / 356 · tests/chapter_01_cpu/test_061_ADC_indirect_y.py

要更新的文件

emulator/cpu/opcodes.py

要添加/更新的符号

opcodes.adc_indirect_y and OPCODE_TABLE[0x71]

为什么需要这一步

最后一个 ADC 寻址变体将现有的 indirect_y 地址辅助函数与现有的基于数值的 adc 指令连接起来,用于操作码 $71。

完整示例实现

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

OPCODE_TABLE = {
    # ... existing entries ...
    0x71: adc_indirect_y,
}

重要不变量

  • indirect_y 取出单字节操作数并返回最终地址
  • 处理函数恰好读取该地址处的数值一次
  • 更新 A 和算术标志的是 adc 而不是处理函数
  • 执行这条两字节指令会使 PC 前进两个字节

常见误解

不要把 indirect_y 返回的地址直接传给 adcadc 接受的是存储在该地址处的字节。

范围之外

  • SBC 及其操作码处理函数
  • 新的寻址模式辅助函数或重构
  • 周期时序和跨页惩罚

运行本课

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