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