048. Sty zero page x

Добавьте STY zero page,X ($94).

Урок 48 из 356 · tests/chapter_01_cpu/test_048_STY_zero_page_x.py

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

emulator/cpu/opcodes.py

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

opcodes imports of zero_page_x and sty
opcodes.sty_zero_page_x
opcodes.OPCODE_TABLE[$94]

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

Эта кодировка объединяет ориентированную на адрес границу инструкции STY с уже существующей вспомогательной функцией zero-page,X, включая перенос внутри страницы $00.

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

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


def sty_zero_page_x(cpu: CPU):
    addr = zero_page_x(cpu)
    sty(cpu, addr)


OPCODE_TABLE = {
    # Preserve existing entries.
    0x94: sty_zero_page_x,
}

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

  • $94 сопоставляется с sty_zero_page_x и потребляет один байт операнда
  • X индексирует операнд, а эффективный адрес переносится в пределах восьми бит
  • в sty передаётся эффективный адрес, а не его текущее содержимое
  • Y и флаги процессора не меняются при записи

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

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

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

  • STY absolute
  • изменение zero_page_x
  • тайминг циклов

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

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