069. SBC 间接,X
添加 SBC (间接,X)。
第 69 / 356 · tests/chapter_01_cpu/test_069_SBC_indirect_x.py
要更新的文件
emulator/cpu/opcodes.py要添加/更新的符号
opcodes.sbc_indirect_x and OPCODE_TABLE[0xE1]为什么需要这一步
SBC 通过将现有的 indirect_x 解析器与标准的内存读取和指令委托包装器组合,获得了先变址间接访问能力。
完整示例实现
# emulator/cpu/opcodes.py
def sbc_indirect_x(cpu: CPU):
addr = indirect_x(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xE1: sbc_indirect_x,
}重要不变量
indirect_x在读取指针之前先把 X 加到零页操作数上- 指针字节及其零页回绕由解析器处理
- 包装器读取最终地址并把读到的字节传给
sbc - 执行这条两字节指令会使 PC 前进两个字节
常见误解
不要把零页指针位置当作 SBC 的操作数来读取;indirect_x 返回的是最终的 16 位目标地址,必须读取该地址处的内容。
范围之外
- (间接),Y 的 SBC 包装器
- 对间接寻址或 SBC 算术的更改
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_069_SBC_indirect_x.py -v