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