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