137. 零页,X EOR

添加 EOR zero-page,X 操作码 ``0x55``。

137 / 356 · tests/chapter_01_cpu/test_137_EOR_zero_page_x.py

此步骤存在的原因

此步骤添加了变址零页 EOR,并验证 X 变址会在所寻址的值与累加器组合之前在页内回绕。

在此步骤中,继第 136 课之后,请在 `emulator/cpu/opcodes.py` 中准确添加以下内容:

def eor_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    value = cpu.bus.read(addr)
    or_e(cpu, value)

OPCODE_TABLE = {
    ...
    0x55: eor_zero_page_x,
}

`emulator/cpu/addressing_modes.py::zero_page_x 获取基址,并在处理函数读取数据之前计算 (base + cpu.x) & 0xFF`。因此变址结果始终保持在零页之内。A 与 Z/N 可能改变;Carry/Overflow、内存、X 和 Y 保持不变;操作码加操作数使 PC 前进两个字节。

常见误解:诸如 `$FE + $03 之类的溢出会回绕为 $01,而不是 $0101`。不在本步骤范围内:绝对寻址和间接寻址的 EOR 模式(第 138-142 课)以及 BIT(第 143-145 课)。

运行本课

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