024. Sta absolute

Добавление STA с абсолютной адресацией ($8D).

Урок 24 из 356 · tests/chapter_01_cpu/test_024_STA_absolute.py

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

emulator/cpu/opcodes.py

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

opcodes.sta_absolute
opcodes.OPCODE_TABLE[$8D]

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

Теперь STA нужен полный 16-битный адрес назначения. Урок повторно использует absolute и sta, демонстрируя, что изменение ширины операнда относится к адресации, а не к самой инструкции записи.

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

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


OPCODE_TABLE = {
    # Preserve existing entries.
    0x8D: sta_absolute,
}

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

  • absolute потребляет сначала младший, затем старший байт
  • полученный 16-битный адрес передаётся напрямую в sta
  • $8D продвигает PC на три байта, включая опкод
  • сохранение A не изменяет Zero и Negative

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

Два байта операнда кодируют один адрес назначения в формате little-endian; это не два значения для записи, и их нельзя читать как big-endian.

Вне рамок

  • индексированные опкоды STA с абсолютной адресацией
  • изменения в absolute или sta
  • тайминги циклов

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

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