130. 绝对,X ORA
添加 ORA absolute,X 操作码 ``0x1D``。
第 130 / 356 · tests/chapter_01_cpu/test_130_ORA_absolute_x.py
此步骤存在的原因
这使得 ORA 能够对以 X 索引的完整地址表进行操作,同时使地址解析与该操作的累加器及标志位语义保持分离。
在此步骤中,紧接第 129 课中未索引的 absolute ORA 之后,仅需在 `emulator/cpu/opcodes.py` 中添加以下代码:
def ora_absolute_x(cpu: CPU):
addr = absolute_x(cpu)
value = cpu.bus.read(addr)
or_a(cpu, value)
OPCODE_TABLE = {
...
0x1D: ora_absolute_x,
}`emulator/cpu/addressing_modes.py::absolute_x 先获取小端序的基址字,再加上 cpu.x。处理程序读取该解析出的地址,并将其值传递给 instructions.or_a`。A 与 Z/N 会改变;X、Carry/Overflow 及内存保持不变;操作码加字使 PC 前进三个字节。
常见误解:X 是对解码后的地址进行索引,而不是对操作数字节或从内存中读取的数据进行索引。不在本步骤范围内:ORA absolute,Y 与间接寻址模式(第 131-133 课),以及随后第 134-145 课中的 EOR 与 BIT。
运行本课
uv run pytest tests/chapter_01_cpu/test_130_ORA_absolute_x.py -v