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