064. SBC 零页寻址
添加 SBC 零页寻址。
第 64 / 356 · tests/chapter_01_cpu/test_064_SBC_zero_page.py
要更新的文件
emulator/cpu/opcodes.py要添加/更新的符号
opcodes.sbc_zero_page and OPCODE_TABLE[0xE5]为什么需要这一步
本课添加第一个内存寻址的 SBC 包装器,复用已建立的零页地址解析器和基于数值的核心 sbc 操作。
完整示例实现
# emulator/cpu/opcodes.py
def sbc_zero_page(cpu: CPU):
addr = zero_page(cpu)
value = cpu.bus.read(addr)
sbc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0xE5: sbc_zero_page,
}重要不变量
zero_page取出一个操作数并返回一个位于第 $00 页的地址- 处理函数从该地址读取一个字节并把数值传给
sbc - SBC 的算术和标志行为仍然集中在
sbc中 - 执行这条两字节指令会使 PC 前进两个字节
常见误解
zero_page 返回的是地址,而不是要减去的字节;处理函数必须在调用 sbc 之前先执行总线读取。
范围之外
- 变址、绝对和间接的 SBC 包装器
- 对零页寻址或 SBC 算术的更改
- 周期时序
运行本课
uv run pytest tests/chapter_01_cpu/test_064_SBC_zero_page.py -v