054. Adc immediate

Подключить ADC immediate (опкод $69) к диспетчеризации CPU.

Урок 54 из 356 · tests/chapter_01_cpu/test_054_ADC_immediate.py

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

emulator/cpu/opcodes.py

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

opcodes.adc_immediate
OPCODE_TABLE[$69]
the `adc` instruction import

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

Тест 053 обеспечил арифметику над уже полученным значением. Непосредственный режим сам предоставляет следующий байт программы, поэтому этот обработчик передаёт возвращаемое значение immediate(cpu) напрямую в adc.

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

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import ..., adc

def adc_immediate(cpu):
    value = immediate(cpu)
    adc(cpu, value)

OPCODE_TABLE = {
    # ...existing entries...
    0x69: adc_immediate,
}

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

  • обработчик принимает только cpu
  • непосредственный режим потребляет ровно один байт операнда
  • PC продвигается всего на два байта: опкод плюс операнд
  • обработчик передаёт всю арифметику и изменения флагов в adc

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

Не воспринимайте непосредственный байт как адрес и не читайте шину повторно; immediate(cpu) уже возвращает значение операнда.

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

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

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

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