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