023. Sta zero page x

Добавление STA с адресацией zero-page,X ($95).

Урок 23 из 356 · tests/chapter_01_cpu/test_023_STA_zero_page_x.py

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

emulator/cpu/opcodes.py

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

opcodes.sta_zero_page_x
opcodes.OPCODE_TABLE[$95]

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

Здесь повторно используются инструкция sta из Теста 022 и циклический режим адресации zero_page_x из Теста 017, что показывает: обработчик опкода записи лишь сочетает существующий расчёт адреса с существующей операцией записи.

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

# emulator/cpu/opcodes.py
def sta_zero_page_x(cpu) -> None:
    address = zero_page_x(cpu)
    sta(cpu, address)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x95: sta_zero_page_x,
}

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

  • $95 потребляет один байт операнда
  • сумма базы и X циклически ограничивается страницей $00
  • записываемое значение — это cpu.a
  • STA не изменяет Zero и Negative

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

Индексация нулевой страницы не переносится на страницу $01; $FF,X при X=$01 указывает на $0000, а не на $0100.

Вне рамок

  • изменения в zero_page_x или sta
  • опкоды STA с абсолютной и косвенной адресацией
  • тайминги циклов

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

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