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