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