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