059. Adc absolute y

Подключить ADC absolute,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

Распространённое заблуждение

Не копируйте обработчик absolute,X, оставив в нём X; опкод $79 индексирует базовый адрес с помощью Y.

Вне рамок задачи

  • косвенные режимы ADC
  • штрафы по таймингу при пересечении страниц
  • изменения во вспомогательных методах адресации или арифметики

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_059_ADC_absolute_y.py -v