047. Sty zero page

Добавьте STY zero page ($84).

Урок 47 из 356 · tests/chapter_01_cpu/test_047_STY_zero_page.py

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

emulator/cpu/opcodes.py

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

opcodes imports of zero_page and sty
opcodes.sty_zero_page
opcodes.OPCODE_TABLE[$84]

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

Базовая инструкция sty уже выполняет запись. Этот урок подключает её первую кодировку, вычисляя однобайтовый адрес назначения на нулевой странице и передавая этот адрес в sty.

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

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


def sty_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    sty(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x84: sty_zero_page,
}

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

  • $84 сопоставляется с sty_zero_page и потребляет один байт операнда
  • операнд преобразуется в $00nn и передаётся как адрес
  • sty записывает Y через шину
  • STY оставляет Zero и Negative неизменными

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

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

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

  • кодировки STY zero-page,X и absolute
  • новые режимы адресации
  • тайминг циклов

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

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