057. Adc 绝对寻址
将 ADC 绝对寻址(操作码 $6D)接入 CPU 分发。
第 57 / 356 · tests/chapter_01_cpu/test_057_ADC_absolute.py
要更新的文件
emulator/cpu/opcodes.py要创建/更新的符号
opcodes.adc_absolute
OPCODE_TABLE[$6D]为什么需要这一步
绝对寻址模式把 ADC 扩展为一个小端的 16 位操作数地址。现有的 absolute 辅助函数负责消耗这个字;操作码处理函数读取被寻址的字节,并把算术运算委托给 adc。
完整示例实现
# emulator/cpu/opcodes.py
def adc_absolute(cpu):
addr = absolute(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ...existing entries...
0x6D: adc_absolute,
}重要不变量
absolute先组合操作数的低位字节,再组合高位字节- 该处理函数从得到的 16 位地址处读取数据
- PC 总共前进三个字节
adc仍然是算术与标志位行为的唯一拥有者
常见误区
不要把取到的 16 位地址直接传给 adc;要先读取存储在该地址处的字节。
范围之外
- 绝对,X 与绝对,Y 的 ADC 寻址模式
- 跨页时序
- 对
absolute或adc的修改
运行本课
uv run pytest tests/chapter_01_cpu/test_057_ADC_absolute.py -v