057. Adc absolute

Подключить ADC absolute (опкод $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; сначала прочитайте байт, хранящийся по этому адресу.

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

  • режимы ADC absolute,X и absolute,Y
  • тайминг при пересечении страниц
  • изменения в absolute или adc

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

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