057. Adc 绝对寻址

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

57 / 356 · tests/chapter_01_cpu/test_057_ADC_absolute.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_absolute
OPCODE_TABLE[$6D]

为什么需要这一步

绝对寻址模式把 ADC 扩展为一个小端的 16 位操作数地址。现有的 absolute 辅助函数负责消耗这个字;操作码处理函数读取被寻址的字节,并把算术运算委托给 adc

完整示例实现

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

OPCODE_TABLE = {
    # ...existing entries...
    0x6D: adc_absolute,
}

重要不变量

  • absolute 先组合操作数的低位字节,再组合高位字节
  • 该处理函数从得到的 16 位地址处读取数据
  • PC 总共前进三个字节
  • adc 仍然是算术与标志位行为的唯一拥有者

常见误区

不要把取到的 16 位地址直接传给 adc;要先读取存储在该地址处的字节。

范围之外

  • 绝对,X 与绝对,Y 的 ADC 寻址模式
  • 跨页时序
  • absoluteadc 的修改

运行本课

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