056. Adc zero page x
Подключить ADC zero page,X (опкод $75) к диспетчеризации CPU.
Урок 56 из 356 · tests/chapter_01_cpu/test_056_ADC_zero_page_x.py
Файл для обновления
emulator/cpu/opcodes.pyСимволы для создания/обновления
opcodes.adc_zero_page_x
OPCODE_TABLE[$75]Почему этот шаг нужен
Этот режим повторно использует уже существующий преобразователь zero_page_x, включая перенос в пределах нулевой страницы. Затем обработчик опкода считывает значение по полученному адресу и передаёт его в adc.
Полный пример реализации
# emulator/cpu/opcodes.py
def adc_zero_page_x(cpu):
addr = zero_page_x(cpu)
value = cpu.bus.read(addr)
adc(cpu, value)
OPCODE_TABLE = {
# ...existing entries...
0x75: adc_zero_page_x,
}Важные инварианты
- X прибавляется в
zero_page_x, а не повторно в обработчике (operand + X) & 0xFFудерживает эффективный адрес в пределах нулевой страницы- в
adcпередаётся байт по эффективному адресу, а не сам адрес - PC продвигается всего на два байта
Распространённое заблуждение
Не используйте обычное 16-битное сложение для индекса; $FF + $01 должно давать $0000, а не $0100.
Вне рамок задачи
- абсолютные индексированные и косвенные режимы ADC
- тайминг при пересечении страниц
- изменения в существующем вспомогательном методе адресации
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_056_ADC_zero_page_x.py -v