059. Adc 绝对,Y

将 ADC 绝对,Y 寻址(操作码 $79)接入 CPU 分发。

59 / 356 · tests/chapter_01_cpu/test_059_ADC_absolute_y.py

要更新的文件

emulator/cpu/opcodes.py

要创建/更新的符号

opcodes.adc_absolute_y
OPCODE_TABLE[$79]

为什么需要这一步

这是测试 058 的 Y 变址对应版本。absolute_y 消耗两字节的基地址并应用 Y;该处理函数读取得到的位置,并把值交给 adc

完整示例实现

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

OPCODE_TABLE = {
    # ...existing entries...
    0x79: adc_absolute_y,
}

重要不变量

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

常见误区

不要复制绝对,X 的处理函数后仍让它使用 X;操作码 $79 用 Y 对基地址进行变址。

范围之外

  • 间接的 ADC 寻址模式
  • 跨页时序惩罚
  • 对寻址或算术辅助函数的修改

运行本课

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