060. Adc (间接,X)
将 ADC (间接,X) 寻址(操作码 $61)接入 CPU 分发。
第 60 / 356 · tests/chapter_01_cpu/test_060_ADC_indirect_x.py
要更新的文件
emulator/cpu/opcodes.py要创建/更新的符号
opcodes.adc_indirect_x
OPCODE_TABLE[$61]为什么需要这一步
indirect_x 先把 X 加到零页操作数上,从零页读取一个小端指针,并返回最终的有效地址。随后该处理函数必须从这个最终地址读取 ADC 所需的值。
完整示例实现
# emulator/cpu/opcodes.py
def adc_indirect_x(cpu):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ...existing entries...
0x61: adc_indirect_x,
}重要不变量
- X 在解引用之前先对零页指针的位置进行变址
- 指针字节的读取在零页内环绕
- 指针指向的是一个地址,因此最终读取由处理函数完成
- PC 总共前进两个字节
常见误区
不要把 X 加到最终的 16 位目标地址上。那描述的是另一种操作;对于 (间接,X),X 在指针被解引用之前先选定零页指针。
范围之外
- ADC (间接),Y,由下一个编号测试引入
- 周期计数
- 对
indirect_x或adc的修改
运行本课
uv run pytest tests/chapter_01_cpu/test_060_ADC_indirect_x.py -v