106. Rol zero page x 变址零页

接入 ROL Zero Page,X(操作码 ``0x36``)。

106 / 356 · tests/chapter_01_cpu/test_106_ROL_zero_page_x.py

在本步骤中,在第 105 课的基础上只扩展变址零页适配器和分派条目。

生产代码位置中的完整示例实现

`emulator/cpu/opcodes.py::rol_zero_page_x`::

def rol_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    rol(cpu, addr)

`emulator/cpu/opcodes.py::OPCODE_TABLE`::

0x36: rol_zero_page_x,

本步骤存在的原因

复用已有的寻址辅助函数,避免在指令原语中重复实现回绕策略。

不变量:消耗一个操作数字节;有效地址为 `(operand + cpu.x) & 0xFF;PC 最终为起始位置+2;rol 只修改该字节,C/Z/N 行为与第 102 课一致。因此基址 0xFE 加上 X 0x03 指向 $0001`。

常见误解:零页变址不会溢出到 `$0101`,也不是 16 位的绝对变址;必须按 8 位回绕。

不在本步骤范围内:绝对寻址模式是第 107-108 课,ROR 从第 109 课开始,周期精确的变址读/改/写时序是之后的工作。

运行本课

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