029. 零页Y寻址

添加零页,Y寻址方式。

29 / 356 · tests/chapter_01_cpu/test_029_zero_page_y_addressing.py

需要更新的文件

emulator/cpu/addressing_modes.py

位置

addressing_modes.zero_page_y

为什么需要这一步

后面的一些指令编码是用Y而不是X来索引零页操作数的。本课只引入这一可复用的地址计算,与测试017中的 zero_page_x 相对应,尚未与任何操作码关联。

完整示例实现

# emulator/cpu/addressing_modes.py
def zero_page_y(cpu) -> int:
    base = cpu.fetch_byte()
    address = (base + cpu.y) & 0xFF
    return address

重要不变量

  • 只读取一个操作数字节
  • 加到操作数上的是Y,而不是X
  • 结果会回绕为八位,因而始终留在 $00 页内
  • 该辅助函数只返回地址,不对该地址执行任何内存读取

常见误解

要对相加结果做掩码,而不仅仅是对操作数做掩码:$FF + $01 必须变为 $0000,而不是 $0100。

不在本课范围内

  • 新增或修改操作码处理函数
  • LDX指令本身
  • 周期时序

运行本课

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