112. 零页 ROR
添加 ROR 零页操作码 ``0x66``。
第 112 / 356 · tests/chapter_01_cpu/test_112_ROR_zero_page.py
在这一步中,在第 111 课的基础上,把 `ror 加入 emulator/cpu/opcodes.py` 的指令导入,并添加零页处理函数和表条目。
为什么需要这一步
这一步把共享的 ROR 内存操作与第一种紧凑寻址形式连接起来,验证编码出的零页地址确实用于选定要旋转的字节。
建议实现
def ror_zero_page(cpu: CPU):
addr = zero_page(cpu)
ror(cpu, addr)
OPCODE_TABLE = {
...
0x66: ror_zero_page,
}`zero_page 已存在于 emulator/cpu/addressing_modes.py 中,会取一个字节。ror 已存在于 emulator/cpu/instructions.py 中;它执行总线的读/改/写,连同旧的 Carry 一起旋转,用旧的第 0 位设置 Carry,并根据结果设置 Zero/Negative。因此 66 10 修改的是 cpu.bus[$0010]`,而不是 A,PC 总共前进两个字节。
误解澄清:取到的 `0x10 是一个地址,而不是要传给 ror` 的值。本课不涉及的内容:变址和绝对寻址的 ROR 模式属于第 113-115 课;不要在这个操作码处理函数中重复实现寻址或旋转逻辑。
运行本课
uv run pytest tests/chapter_01_cpu/test_112_ROR_zero_page.py -v