056. Adc 零页,X

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

56 / 356 · tests/chapter_01_cpu/test_056_ADC_zero_page_x.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_zero_page_x
OPCODE_TABLE[$75]

为什么需要这一步

该模式复用已有的 zero_page_x 解析器,包括它的零页环绕行为。操作码处理函数随后读取解析出的位置,并把该处的值传给 adc

完整示例实现

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

OPCODE_TABLE = {
    # ...existing entries...
    0x75: adc_zero_page_x,
}

重要不变量

  • X 由 zero_page_x 负责相加,而不是由处理函数再加一次
  • (operand + X) & 0xFF 使有效地址保持在零页之内
  • 传给 adc 的是有效地址处的字节,而不是地址本身
  • PC 总共前进两个字节

常见误区

不要对变址使用普通的 16 位加法;$FF + $01 必须解析为 $0000,而不是 $0100

范围之外

  • 绝对变址与间接的 ADC 寻址模式
  • 跨页时序
  • 对现有寻址辅助函数的修改

运行本课

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