058. Adc 绝对,X

将 ADC 绝对,X 寻址(操作码 $7D)接入 CPU 分发。

58 / 356 · tests/chapter_01_cpu/test_058_ADC_absolute_x.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_absolute_x
OPCODE_TABLE[$7D]

为什么需要这一步

现有的 absolute_x 辅助函数消耗小端的基地址并加上 X。该处理函数读取这个有效地址处的字节,并复用测试 053 中实现的 ADC 指令。

完整示例实现

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

OPCODE_TABLE = {
    # ...existing entries...
    0x7D: adc_absolute_x,
}

重要不变量

  • X 恰好由 absolute_x 应用一次
  • 有效地址不局限于零页
  • PC 总共前进三个字节
  • 被寻址的值会传给 adc

常见误区

不要对绝对变址地址应用零页环绕;该模式可能跨入下一页。

范围之外

  • 绝对,Y 与间接的 ADC 寻址模式
  • 跨页时序惩罚
  • 现有辅助函数之外的 16 位地址环绕策略

运行本课

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