049. Sty absolute

Добавьте STY absolute ($8C).

Урок 49 из 356 · tests/chapter_01_cpu/test_049_STY_absolute.py

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

emulator/cpu/opcodes.py

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

opcodes imports of absolute and sty
opcodes.sty_absolute
opcodes.OPCODE_TABLE[$8C]

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

STY absolute завершает поддерживаемое семейство STY, декодируя 16-битный адрес назначения и передавая этот адрес уже существующей инструкции записи.

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

# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import absolute
from emulator.cpu.instructions import sty


def sty_absolute(cpu: CPU):
    addr = absolute(cpu)
    sty(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x8C: sty_absolute,
}

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

  • $8C сопоставляется с sty_absolute и потребляет два байта операнда
  • операнд в порядке little-endian преобразуется в 16-битный адрес назначения
  • sty записывает Y по этому адресу через шину
  • выполнение продвигается всего на три байта, а флаги остаются неизменными

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

Не передавайте в sty значение, прочитанное по абсолютному адресу; базовой инструкции записи требуется сам адрес назначения.

Вне рамок задания

  • инструкции пересылки и их опкоды
  • дополнительные режимы адресации STY
  • тайминг циклов и побочные аппаратные эффекты записи

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

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