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