032. Ldx 零页寻址

添加 LDX 零页寻址($A6)。

32 / 356 · tests/chapter_01_cpu/test_032_LDX_zero_page.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes.ldx_zero_page
opcodes.OPCODE_TABLE[$A6]

为什么需要这一步

在立即寻址的 LDX 之后,本课添加第一个基于内存的 LDX 编码。处理函数将既有的零页地址计算、一次总线读取和既有的 ldx 值操作组合起来。

完整示例实现

# emulator/cpu/opcodes.py
def ldx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    value = cpu.bus.read(addr)
    ldx(cpu, value)


OPCODE_TABLE = {
    # Preserve existing entries.
    0xA6: ldx_zero_page,
}

重要不变式

  • $A6 映射到 ldx_zero_page
  • zero_page 获取一个操作数字节并返回一个位于 $00 页的地址
  • 处理函数读取该地址,并把得到的值传给 ldx
  • 整条指令使 PC 前进 2 字节,且 ldx 更新标志

常见误区

不要把零页地址直接传给 ldx;LDX 加载的是存储在该地址处的字节。

超出范围

  • 变址和绝对寻址的 LDX 编码
  • 对 zero_page 或 ldx 的改动
  • 周期时序

运行本课

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