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