060. Adc (间接,X)

将 ADC (间接,X) 寻址(操作码 $61)接入 CPU 分发。

60 / 356 · tests/chapter_01_cpu/test_060_ADC_indirect_x.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_indirect_x
OPCODE_TABLE[$61]

为什么需要这一步

indirect_x 先把 X 加到零页操作数上,从零页读取一个小端指针,并返回最终的有效地址。随后该处理函数必须从这个最终地址读取 ADC 所需的值。

完整示例实现

# emulator/cpu/opcodes.py
def adc_indirect_x(cpu):
    addr = indirect_x(cpu)
    value = cpu.bus.read(addr)
    adc(cpu, value)

OPCODE_TABLE = {
    # ...existing entries...
    0x61: adc_indirect_x,
}

重要不变量

  • X 在解引用之前先对零页指针的位置进行变址
  • 指针字节的读取在零页内环绕
  • 指针指向的是一个地址,因此最终读取由处理函数完成
  • PC 总共前进两个字节

常见误区

不要把 X 加到最终的 16 位目标地址上。那描述的是另一种操作;对于 (间接,X),X 在指针被解引用之前先选定零页指针。

范围之外

  • ADC (间接),Y,由下一个编号测试引入
  • 周期计数
  • indirect_xadc 的修改

运行本课

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