129. 绝对寻址 ORA

添加 ORA absolute 操作码 ``0x0D``。

129 / 356 · tests/chapter_01_cpu/test_129_ORA_absolute.py

此步骤存在的原因

absolute 形式的 ORA 通过解码一个完整的小端序地址并读取其值,再更新 A 与 Z/N,从而将该操作扩展到零页之外。

在此步骤中,由于 `or_a 以及 immediate/zero-page 处理程序均已存在,请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:

def ora_absolute(cpu: CPU):
    addr = absolute(cpu)
    value = cpu.bus.read(addr)
    or_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x0D: ora_absolute,
}

`emulator/cpu/addressing_modes.py::absolute 通过 CPU.fetch_word 获取一个小端序字。因此 0D 00 02 会读取 $0200,并将该值发送给 instructions.or_a`。A 与 Z/N 会改变;Carry/Overflow 及内存保持不变;操作码加字使 PC 前进三个字节。

常见误解:该操作数是一个地址,而不是立即数,并且其低字节在前。不在本步骤范围内:经过索引的 absolute 与 indirect 的 ORA 寻址模式(第 130-133 课)。

运行本课

uv run pytest tests/chapter_01_cpu/test_129_ORA_absolute.py -v