058. Adc absolute x

Подключить ADC absolute,X (опкод $7D) к диспетчеризации CPU.

Урок 58 из 356 · tests/chapter_01_cpu/test_058_ADC_absolute_x.py

Файл для обновления

emulator/cpu/opcodes.py

Символы для создания/обновления

opcodes.adc_absolute_x
OPCODE_TABLE[$7D]

Почему этот шаг нужен

Существующий вспомогательный метод absolute_x потребляет базовый адрес в порядке от младшего байта к старшему и прибавляет X. Этот обработчик считывает байт по полученному эффективному адресу и повторно использует инструкцию ADC, реализованную в тесте 053.

Полный пример реализации

# emulator/cpu/opcodes.py
def adc_absolute_x(cpu):
    addr = absolute_x(cpu)
    value = cpu.bus.read(addr)
    adc(cpu, value)

OPCODE_TABLE = {
    # ...existing entries...
    0x7D: adc_absolute_x,
}

Важные инварианты

  • X применяется ровно один раз в absolute_x
  • эффективный адрес не ограничен нулевой страницей
  • PC продвигается всего на три байта
  • значение по адресу передаётся в adc

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

Не применяйте перенос в пределах нулевой страницы к абсолютному индексированному адресу; этот режим может пересекать границу следующей страницы.

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

  • режимы ADC absolute,Y и косвенный
  • штрафы по таймингу при пересечении страниц
  • политика переноса 16-битного адреса за пределами существующего вспомогательного метода

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

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