127. 零页 ORA

添加 ORA zero-page 操作码 ``0x05``。

127 / 356 · tests/chapter_01_cpu/test_127_ORA_zero_page.py

此步骤存在的原因

ORA 必须区分零页地址操作数与字面数据,先读取被寻址的字节,再应用已定义好的包含或行为。

在此步骤中,由于第 126 课已导入 `or_a,emulator/cpu/opcodes.py` 中完整的增量实现如下:

def ora_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    or_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x05: ora_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page 获取一字节地址,随后处理程序在调用 instructions.or_a 之前先读取其值。A 与 Z/N 会改变;Carry/Overflow 及内存保持不变;05 10 读取 $0010` 并使 PC 前进两个字节。

常见误解:应将存储在 `$0010 处的字节传给 or_a,而不是传地址 0x10`,并且不要将结果写回内存。不在本步骤范围内:从 zero-page,X 到 indirect,Y 的 ORA 寻址模式(第 128-133 课)。

运行本课

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