133. 间接,Y ORA

添加 ORA (indirect),Y 操作码 ``0x11``。

133 / 356 · tests/chapter_01_cpu/test_133_ORA_indirect_y.py

此步骤存在的原因

此步骤通过先解析零页指针再加上 Y,完成了 ORA 的全部寻址形式,而不会重复实现运算结果或标志位逻辑。

在此步骤中,继第 125-132 课之后,通过在 `emulator/cpu/opcodes.py` 中添加以下内容来完成 ORA:

def ora_indirect_y(cpu: CPU):
    addr = indirect_y(cpu)
    value = cpu.bus.read(addr)
    or_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x11: ora_indirect_y,
}

`emulator/cpu/addressing_modes.py::indirect_y 获取零页指针,以回绕方式查找其高字节来读取小端序目标地址,然后才加上 Y。处理函数读取该变址后的目标值,并调用 instructions.or_a`。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变;操作码加操作数使 PC 前进两个字节。

常见误解:与 (indirect,X) 不同,Y 并不用于选择指针位置,而是对解析出的目标地址进行变址。不在本步骤范围内:EOR 和 BIT(第 134-145 课)。

运行本课

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