136. 零页 EOR

添加 EOR zero-page 操作码 ``0x45``。

136 / 356 · tests/chapter_01_cpu/test_136_EOR_zero_page.py

此步骤存在的原因

EOR 需要一种紧凑的内存寻址形式,将其操作数解释为零页地址,读取该位置,并应用通用的异或行为。

在此步骤中,`or_e 和 EOR immediate 已经存在。请在 emulator/cpu/opcodes.py` 中准确添加以下内容:

def eor_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    or_e(cpu, value)

OPCODE_TABLE = {
    ...
    0x45: eor_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page 获取单字节地址;处理函数执行单独的数据读取,并将该值传给 instructions.or_e`。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变;操作码加操作数使 PC 前进两个字节。

常见误解:`$nn` 是零页中的一个地址,而不是字面量的 XOR 值。不在本步骤范围内:变址及更宽的 EOR 寻址模式(第 137-142 课)以及 BIT(第 143-145 课)。

运行本课

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