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