059. Adc 绝对,Y
将 ADC 绝对,Y 寻址(操作码 $79)接入 CPU 分发。
第 59 / 356 · tests/chapter_01_cpu/test_059_ADC_absolute_y.py
要更新的文件
emulator/cpu/opcodes.py要创建/更新的符号
opcodes.adc_absolute_y
OPCODE_TABLE[$79]为什么需要这一步
这是测试 058 的 Y 变址对应版本。absolute_y 消耗两字节的基地址并应用 Y;该处理函数读取得到的位置,并把值交给 adc。
完整示例实现
# emulator/cpu/opcodes.py
def adc_absolute_y(cpu):
addr = absolute_y(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ...existing entries...
0x79: adc_absolute_y,
}重要不变量
- Y 恰好由
absolute_y应用一次 - 有效地址不局限于零页
- PC 总共前进三个字节
- 被寻址的值会传给
adc
常见误区
不要复制绝对,X 的处理函数后仍让它使用 X;操作码 $79 用 Y 对基地址进行变址。
范围之外
- 间接的 ADC 寻址模式
- 跨页时序惩罚
- 对寻址或算术辅助函数的修改
运行本课
uv run pytest tests/chapter_01_cpu/test_059_ADC_absolute_y.py -v