028. Sta indirect y

Добавление STA с косвенно-индексной адресацией ($91, записывается как `(d),Y`).

Урок 28 из 356 · tests/chapter_01_cpu/test_028_STA_indirect_y.py

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

emulator/cpu/opcodes.py

Расположения

opcodes.sta_indirect_y
opcodes.OPCODE_TABLE[$91]

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

Этот урок завершает набор режимов STA в этой последовательности, повторно используя разрешение адреса indirect_y из Теста 021. Обработчик получает итоговый адрес назначения, индексированный по Y, и делегирует запись инструкции sta.

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

# emulator/cpu/opcodes.py
def sta_indirect_y(cpu) -> None:
    address = indirect_y(cpu)
    sta(cpu, address)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x91: sta_indirect_y,
}

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

  • указатель нулевой страницы читается до прибавления Y
  • чтение старшего байта указателя циклически переходит с $00FF на $0000
  • Y индексирует собранный 16-битный адрес назначения
  • $91 сохраняет A, не изменяя флаги

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

(d),Y не индексирует расположение указателя в нулевой странице. Сначала прочитайте указатель по адресу d, затем прибавьте Y к полученному адресу.

Вне рамок

  • изменения в indirect_y или sta
  • поведение циклов при пересечении страницы
  • рефакторинг обработчиков STA в общую вспомогательную функцию

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

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