126. ORA 立即数

将 ORA immediate 暴露为操作码 ``0x09``。

126 / 356 · tests/chapter_01_cpu/test_126_ORA_immediate.py

此步骤存在的原因

immediate 操作码以字面字节的形式将 ORA 暴露给 CPU 执行,并验证解码过程会将结果与标志位处理委托给共享基元。

在此步骤中,在第 125 课创建 `or_a 之后,请在 emulator/cpu/opcodes.py` 中进行以下添加:

from emulator.cpu.instructions import (..., and_a, or_a)

def ora_immediate(cpu: CPU):
    or_a(cpu, immediate(cpu))

OPCODE_TABLE = {
    ...
    0x09: ora_immediate,
}

`emulator/cpu/addressing_modes.py::immediate 直接返回由 CPU.fetch_byte 获取的字节。instructions.or_a` 存储 A | value 的结果,并仅改变 Z/N;Carry/Overflow 及内存保持不变,操作码加操作数使 PC 前进两个字节。

常见误解:立即数字节本身就是值,若再通过 `cpu.bus` 读取一次,就会错误地将其当作地址处理。不在本步骤范围内:基于内存的 ORA 处理程序(第 127-133 课)以及第 134-145 课中的 EOR/BIT 导入与处理程序。

运行本课

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