061. Adc indirect y
Добавляем ADC (Indirect),Y.
Урок 61 из 356 · tests/chapter_01_cpu/test_061_ADC_indirect_y.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для добавления/обновления
opcodes.adc_indirect_y and OPCODE_TABLE[0x71]Зачем нужен этот шаг
Этот последний вариант адресации ADC связывает существующий вспомогательный метод адреса indirect_y с существующей инструкцией adc, работающей со значением, для опкода $71.
Полная эталонная реализация
# emulator/cpu/opcodes.py
def adc_indirect_y(cpu: CPU):
addr = indirect_y(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ... existing entries ...
0x71: adc_indirect_y,
}Важные инварианты
indirect_yполучает однобайтовый операнд и возвращает итоговый адрес- обработчик читает значение по этому адресу ровно один раз
- именно
adc, а не обработчик, обновляет A и арифметические флаги - выполнение двухбайтовой инструкции продвигает PC на два байта
Распространённое заблуждение
Не передавайте адрес, возвращённый indirect_y, напрямую в adc; adc принимает байт, хранящийся по этому адресу.
Вне рамок этого шага
- SBC и её обработчики опкодов
- новые вспомогательные методы адресации или рефакторинг
- тайминг циклов и штрафы за пересечение страницы
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_061_ADC_indirect_y.py -v