119. 零页,X AND

添加 AND 零页,X 操作码 ``0x35``。

119 / 356 · tests/chapter_01_cpu/test_119_AND_zero_page_x.py

在这一步中,在第 118 课的基础上,只在 `emulator/cpu/opcodes.py` 中添加变址零页的处理函数和表条目。

为什么需要这一步

这一步为零页 AND 添加了变址访问,并验证地址计算会在零页内回绕,然后内存值才会送入 AND 原语。

建议实现

def and_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    value = cpu.bus.read(addr)
    and_a(cpu, value)

OPCODE_TABLE = {
    ...
    0x35: and_zero_page_x,
}

`emulator/cpu/addressing_modes.py::zero_page_x 计算 (base + cpu.x) & 0xFF。从概念上看,解析出的字节被读取一次,并传给 instructions.and_a:A 和 Z/N 发生变化,Carry/Overflow 和内存不变,PC 前进两个字节。基址 0xFE 加上 X 值 0x03 必须读取 $0001,而不是 $0101`。

误解澄清:变址不会改变数据本身,并且必须在总线读取之前完成回绕。本课不涉及的内容:绝对寻址到间接,Y 的 AND(第 120-124 课),以及对已有寻址辅助函数或指令语义的改动。

运行本课

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