047. Sty 零页

添加 STY 零页寻址($84)。

47 / 356 · tests/chapter_01_cpu/test_047_STY_zero_page.py

要更新的文件

emulator/cpu/opcodes.py

位置

opcodes imports of zero_page and sty
opcodes.sty_zero_page
opcodes.OPCODE_TABLE[$84]

为什么需要这一步

核心指令 sty 已经完成了写入操作。本课通过解析一个单字节零页目标地址并将该地址传递给 sty,来连接它的第一种编码。

完整示例实现

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import zero_page
from emulator.cpu.instructions import sty


def sty_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    sty(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x84: sty_zero_page,
}

重要不变量

  • $84 映射到 sty_zero_page 并消耗一个操作数字节
  • 操作数被解析为 $00nn,并作为地址传入
  • sty 通过总线写入 Y
  • STY 不改变 Zero 和 Negative

常见误区

不要在调用 sty 之前先从解析出的地址读取数据;存储指令传给核心指令的是目标地址,而不是数值。

范围之外

  • 零页,X 和绝对寻址的 STY 编码
  • 新的寻址模式
  • 周期时序

运行本课

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