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