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