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