055. Adc 零页

将 ADC 零页寻址(操作码 $65)接入 CPU 分发。

55 / 356 · tests/chapter_01_cpu/test_055_ADC_zero_page.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_zero_page
OPCODE_TABLE[$65]

为什么需要这一步

与立即数寻址不同,zero_page(cpu) 会把操作数字节解析为一个地址。该处理函数必须先读取该地址处的值,再把值交给现有的 adc 指令。

完整示例实现

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

OPCODE_TABLE = {
    # ...existing entries...
    0x65: adc_zero_page,
}

重要不变量

  • 单字节操作数是 $0000-$00FF 范围内的地址
  • 恰好读取一个数据值并传给 adc
  • PC 总共前进两个字节
  • 地址解析仍保留在操作码层

常见误区

不要把零页地址本身传给 adc;ADC 相加的是存储在该地址处的字节。

范围之外

  • 变址、绝对与间接的 ADC 寻址模式
  • zero_pageadc 的修改
  • 周期计数

运行本课

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