128. 零页,X ORA
添加 ORA zero-page,X 操作码 ``0x15``。
第 128 / 356 · tests/chapter_01_cpu/test_128_ORA_zero_page_x.py
此步骤存在的原因
这实现了紧凑的索引 ORA 访问,并验证在将选定字节与 A 组合之前,加上 X 的操作遵循零页环绕规则。
在此步骤中,紧接第 127 课之后,仅需在 `emulator/cpu/opcodes.py` 中添加以下处理程序及表项:
def ora_zero_page_x(cpu: CPU):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x15: ora_zero_page_x,
}`emulator/cpu/addressing_modes.py::zero_page_x 在总线读取之前计算 (base + cpu.x) & 0xFF。解析出的值被传给 instructions.or_a;A 与 Z/N 会改变,X、Carry/Overflow 及内存不会改变,PC 前进两个字节。因此基址 0xFE 加 X 0x03 会读取 $0001`。
常见误解:零页索引会环绕到 `$0001,而不是 $0101`;X 不会改变已加载的值。不在本步骤范围内:absolute 与 indirect 的 ORA 寻址模式(第 129-133 课)。
运行本课
uv run pytest tests/chapter_01_cpu/test_128_ORA_zero_page_x.py -v