091. Asl 零页寻址
添加 ASL 零页寻址模式。
第 91 / 356 · tests/chapter_01_cpu/test_091_ASL_zero_page.py
在这一步中,添加第一个带地址的 ASL 形式。测试 088-090 是内存与累加器行为以及累加器分派的前置条件。
文件与符号
emulator/cpu/opcodes.py: asl_zero_page, OPCODE_TABLE[0x06]为什么需要这一步
测试 088-090 已经建立了 instructions.asl、instructions.asl_a 以及累加器操作码。这次改动通过第一个带地址的形式暴露内存实现,而不在处理函数中重复移位或标志位行为。
本步骤的建议实现
# emulator/cpu/opcodes.py
def asl_zero_page(cpu: CPU):
addr = zero_page(cpu)
asl(cpu, addr)
OPCODE_TABLE = {
# existing entries unchanged
0x06: asl_zero_page,
}重要不变量
zero_page(cpu)消耗一个操作数字节,因此整条指令共两字节- 该操作数是一个地址;
asl在该地址上执行读取/修改/写回 - 原第 7 位设置 Carry;Zero 和 Negative 由掩码后的结果决定
- A 保持不变
常见误解
对于 06 10,0x10 并不会被直接移位,它选定的是 RAM[$0010]。
本步骤不涉及
- 测试 092-094 中的 ASL Zero Page,X 以及绝对寻址形式
- 从测试 095 开始的 LSR
- 周期时序以及读取/修改/写回总线周期的精确性
运行本课
uv run pytest tests/chapter_01_cpu/test_091_ASL_zero_page.py -v