061. ADC 间接,Y
添加 ADC (间接),Y。
第 61 / 356 · tests/chapter_01_cpu/test_061_ADC_indirect_y.py
要更新的文件
emulator/cpu/opcodes.py要添加/更新的符号
opcodes.adc_indirect_y and OPCODE_TABLE[0x71]为什么需要这一步
最后一个 ADC 寻址变体将现有的 indirect_y 地址辅助函数与现有的基于数值的 adc 指令连接起来,用于操作码 $71。
完整示例实现
# emulator/cpu/opcodes.py
def adc_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0x71: adc_indirect_y,
}重要不变量
indirect_y取出单字节操作数并返回最终地址- 处理函数恰好读取该地址处的数值一次
- 更新 A 和算术标志的是
adc而不是处理函数 - 执行这条两字节指令会使 PC 前进两个字节
常见误解
不要把 indirect_y 返回的地址直接传给 adc;adc 接受的是存储在该地址处的字节。
范围之外
- SBC 及其操作码处理函数
- 新的寻址模式辅助函数或重构
- 周期时序和跨页惩罚
运行本课
uv run pytest tests/chapter_01_cpu/test_061_ADC_indirect_y.py -v