022. Sta zero page
Добавление инструкции STA и опкода нулевой страницы ($85).
Урок 22 из 356 · tests/chapter_01_cpu/test_022_STA_zero_page.py
Файлы для обновления
emulator/cpu/instructions.py
emulator/cpu/opcodes.pyРасположения
instructions.sta
opcodes imports of sta and zero_page
opcodes.sta_zero_page
opcodes.OPCODE_TABLE[$85]Зачем нужен этот шаг
Уроки о загрузке передавали значения в lda. STA устанавливает дополняющую границу записи: режим адресации предоставляет адрес назначения, а инструкция записывает A через шину CPU, не изменяя флаги процессора.
Полная реализация примера
# emulator/cpu/instructions.py
def sta(cpu, address: int) -> None:
value = cpu.a
cpu.bus.write(address, value)
# emulator/cpu/opcodes.py
from emulator.cpu.addressing_modes import zero_page
from emulator.cpu.instructions import sta
def sta_zero_page(cpu) -> None:
address = zero_page(cpu)
sta(cpu, address)
OPCODE_TABLE = {
# Preserve existing entries.
0x85: sta_zero_page,
}Важные инварианты
- sta получает адрес, а не значение, прочитанное по этому адресу
- запись выполняется через cpu.bus.write
- $85 потребляет один байт операнда и сохраняет A по адресу $00nn
- STA не изменяет флаги Zero и Negative, в том числе когда A равен $00 или установлен бит 7
Распространённое заблуждение
Не копируйте cpu.bus.read(address) из обработчика LDA: STA записывает A по разрешённому адресу и не выводит флаги из сохранённого байта.
Вне рамок
- другие режимы адресации STA
- добавление новых вспомогательных функций для режимов адресации
- тайминги циклов и эффекты аппаратной части при записи
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_022_STA_zero_page.py -v