132. 间接,X ORA
添加 ORA (indirect,X) 操作码 ``0x01``。
第 132 / 356 · tests/chapter_01_cpu/test_132_ORA_indirect_x.py
此步骤存在的原因
预变址间接寻址的 ORA 支持零页指针表,并确认指针查找会在所得到的内存值与 A 进行或运算之前完成。
在此步骤中,第 131 课已完成直接寻址的 ORA 模式。请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:
def ora_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x01: ora_indirect_x,
}`emulator/cpu/addressing_modes.py::indirect_x 获取操作数,以零页回绕方式加上 X,并读取一个小端序指针,其高字节查找同样在零页内回绕。处理函数读取指针指向的值,并将 ORA 的结果/标志位逻辑委托给 instructions.or_a`。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变;PC 前进两个字节。
常见误解:X 是在指针解引用之前加上的,而不是加到最终的 16 位地址上。不在本步骤范围内:ORA (indirect),Y(第 133 课)以及 EOR/BIT(第 134-145 课)。
运行本课
uv run pytest tests/chapter_01_cpu/test_132_ORA_indirect_x.py -v