070. SBC 间接,Y
添加 SBC (间接),Y。
第 70 / 356 · tests/chapter_01_cpu/test_070_SBC_indirect_y.py
要更新的文件
emulator/cpu/opcodes.py要添加/更新的符号
opcodes.sbc_indirect_y and OPCODE_TABLE[0xF1]为什么需要这一步
最后一个 SBC 寻址变体使用现有的 indirect_y 解析器从零页读取基址指针、加上 Y,并把目标字节提供给 sbc。
完整示例实现
# emulator/cpu/opcodes.py
def sbc_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xF1: sbc_indirect_y,
}重要不变量
indirect_y在加上 Y 之前先读取零页指针- 处理函数恰好读取最终地址处的字节一次
- 读取到的数值被传给
sbc,由它负责 A 和标志的更新 - 执行这条两字节指令会使 PC 前进两个字节
常见误解
(间接),Y 不会在解引用之前把 Y 加到零页指针位置上;那种先变址行为属于 (间接,X)。
范围之外
- 后续的 INC 和其他指令族
- 对间接寻址或 SBC 算术的更改
- 周期时序和跨页惩罚
运行本课
uv run pytest tests/chapter_01_cpu/test_070_SBC_indirect_y.py -v