037. Stx нулевая страница

Добавление STX нулевая страница ($86).

Урок 37 из 356 · tests/chapter_01_cpu/test_037_STX_zero_page.py

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

emulator/cpu/opcodes.py

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

opcodes import of stx
opcodes.stx_zero_page
opcodes.OPCODE_TABLE[$86]

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

Тест 036 добавил операцию stx на уровне адресов. Этот урок связывает её первую кодировку, вычисляя адрес назначения на нулевой странице и передавая этот адрес в stx.

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

# emulator/cpu/opcodes.py
from emulator.cpu.instructions import lda, sta, ldx, stx


def stx_zero_page(cpu: CPU):
    addr = zero_page(cpu)
    stx(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x86: stx_zero_page,
}

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

  • $86 отображается на stx_zero_page
  • zero_page потребляет один байт операнда и возвращает адрес на странице $00
  • в stx передаётся сам адрес, а не его текущее содержимое
  • вся инструкция увеличивает PC на два и оставляет флаги без изменений

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

Не читайте по вычисленному адресу перед вызовом stx; STX записывает X по этому адресу назначения.

Вне рамок

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

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

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