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