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