025. Sta absolute x
Добавление STA с адресацией absolute,X ($9D).
Урок 25 из 356 · tests/chapter_01_cpu/test_025_STA_absolute_x.py
Файл для обновления
emulator/cpu/opcodes.pyРасположения
opcodes.sta_absolute_x
opcodes.OPCODE_TABLE[$9D]Зачем нужен этот шаг
Здесь уже протестированный расчёт адреса absolute_x применяется к записи. Уровень опкода выбирает индексацию по X; sta остаётся независимой от режима адресации.
Полная реализация примера
# emulator/cpu/opcodes.py
def sta_absolute_x(cpu) -> None:
address = absolute_x(cpu)
sta(cpu, address)
OPCODE_TABLE = {
# Preserve existing entries.
0x9D: sta_absolute_x,
}Важные инварианты
- два байта операнда формируют базовый адрес до прибавления X
- используется полный индексированный адрес; индексация не ограничивается нулевой страницей
- обработчик сохраняет A и потребляет три байта инструкции
- STA не обновляет флаги
Распространённое заблуждение
Absolute,X не маскирует сумму до восьми бит. Это правило переноса относится к zero-page,X, а не к $hhhh,X.
Вне рамок
- опкоды STA с адресацией absolute,Y и косвенной адресацией
- поведение циклов при пересечении страницы
- изменения в absolute_x или sta
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_025_STA_absolute_x.py -v