124. 间接,Y AND

添加 AND (indirect),Y 操作码 ``0x31``。

124 / 356 · tests/chapter_01_cpu/test_124_AND_indirect_y.py

此步骤存在的原因

此步骤通过“先获取零页指针、再进行 Y 索引”的方式补全了 AND 的寻址覆盖范围,同时复用了间接寻址辅助函数与通用的 AND 基元。

在此步骤中,通过在 `emulator/cpu/opcodes.py` 中添加以下内容,完成已编号的 AND 寻址模式:

def and_indirect_y(cpu: CPU):
    addr = indirect_y(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x31: and_indirect_y,
}

`emulator/cpu/addressing_modes.py::indirect_y 获取零页指针位置,以对高字节做零页环绕处理的方式读取其小端序字,然后才加上 cpu.y。目标值被传给 instructions.and_a`。A 与 Z/N 会改变;Y、Carry/Overflow、指针字节及目标内存保持不变;PC 前进两个字节。

常见误解:(indirect),Y 并不会将 Y 加到零页指针位置上;那种顺序属于 (indirect,X)。不在本步骤范围内:从第 125 课开始的 ORA、EOR 及 BIT 相关工作。

运行本课

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