039. Stx абсолютный

Добавление STX абсолютный ($8E).

Урок 39 из 356 · tests/chapter_01_cpu/test_039_STX_absolute.py

Файл для изменения

emulator/cpu/opcodes.py

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

opcodes.stx_absolute
opcodes.OPCODE_TABLE[$8E]

Почему этот шаг существует

Этот урок добавляет форму STX с полным 16-битным адресом назначения. Уже существующая вспомогательная функция absolute декодирует адрес в формате little-endian, а stx по-прежнему отвечает только за запись X.

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

# emulator/cpu/opcodes.py
def stx_absolute(cpu: CPU):
    addr = absolute(cpu)
    stx(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x8E: stx_absolute,
}

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

  • $8E отображается на stx_absolute
  • absolute потребляет сначала младший байт, затем старший байт и возвращает адрес назначения
  • сам адрес передаётся в stx, которая записывает X через шину
  • вся инструкция увеличивает PC на три и не изменяет флаги

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

8E 00 02 сохраняет X по адресу $0200; операнд — это адрес назначения в формате little-endian, а не значение для загрузки в X и не адрес в формате big-endian.

Вне рамок

  • индексированные абсолютные кодировки STX, которые не входят в поддерживаемый набор STX
  • изменения в absolute или stx
  • тайминг циклов

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

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