125. ORA 指令原语

实现与寻址方式无关的 ORA 行为。

125 / 356 · tests/chapter_01_cpu/test_125_instruction_or_a.py

此步骤存在的原因

在操作码处理程序引入各具体寻址形式之前,单一的、面向值的 ORA 基元集中定义了包含或(inclusive-OR)的结果与标志位规则。

在此步骤中,在第 116-124 课完成 AND 之后,仅需在 `emulator/cpu/instructions.py` 中添加以下符号:

def or_a(cpu: CPU, value: int):
    result_8 = (cpu.a | value) & 0xFF

    # Flags:
    cpu.flags.set_zero_flag(result_8 == 0)
    cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)

    cpu.a = result_8

这个面向值的 API 使 ORA 语义与寻址方式无关。八位结果存储在 A 中;Zero 反映结果是否等于零,Negative 反映结果的第 7 位。由于 `or_a` 不会触及 Carry、Overflow、内存、X、Y 及 PC,它们保持不变。

常见误解:ORA 表示按位包含或(inclusive OR),而不是异或(XOR),并且 `value 不是总线地址。不在本步骤范围内:将 or_a 导入 emulator/cpu/opcodes.py` 及所有 ORA 处理程序(第 126-133 课),以及第 134 课和第 143 课中引入的 EOR 与 BIT 符号。

运行本课

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