161. Cpy 零页寻址

添加 CPY 零页寻址操作码 ``0xC4``。

161 / 356 · tests/chapter_01_cpu/test_161_CPY_zero_page.py

为什么需要这一步

零页 CPY 将其操作数解释为一个紧凑的内存地址,并通过共享的 CPY 原语,将 Y 与从该地址读取到的字节进行比较。

在这一步中,第 159-160 课已经提供了 `instructions.cpy、其操作码导入以及立即数 CPY。请在 emulator/cpu/opcodes.py` 中恰好添加以下内容:

def cpy_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    cpy(cpu, value)

OPCODE_TABLE = {
    ...
    0xC4: cpy_zero_page,
}

`emulator/cpu/addressing_modes.py::zero_page 将这一字节的操作数当作地址来使用;处理函数随后读取该地址,并把标志位语义委托给 emulator/cpu/instructions.py::cpy`。

不变量:Y 和内存保持不变;CPY 仅更新 C/Z/N,操作码加操作数使 PC 前进两个字节。常见误解:该操作数并不是与 Y 比较的值本身,它只是标识出包含该值的零页字节地址。

超出范围:CPY 绝对寻址 `0xCC` 属于第 162 课。CMP/CPX 以及 CPY 立即数寻址属于第 146-160 课。

运行本课

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