055. Adc zero page

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

Урок 55 из 356 · tests/chapter_01_cpu/test_055_ADC_zero_page.py

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

emulator/cpu/opcodes.py

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

opcodes.adc_zero_page
OPCODE_TABLE[$65]

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

В отличие от непосредственного режима, zero_page(cpu) преобразует байт операнда в адрес. Обработчик должен прочитать значение по этому адресу, прежде чем передать значение существующей инструкции adc.

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

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

OPCODE_TABLE = {
    # ...existing entries...
    0x65: adc_zero_page,
}

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

  • однобайтовый операнд — это адрес в диапазоне $0000-$00FF
  • считывается ровно одно значение данных, которое передаётся в adc
  • PC продвигается всего на два байта
  • разрешение адреса остаётся на уровне опкода

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

Не передавайте сам адрес нулевой страницы в adc; ADC складывает байт, хранящийся по этому адресу.

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

  • индексированные, абсолютные и косвенные режимы ADC
  • изменения в zero_page или adc
  • учёт циклов

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

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