193. Инструкция pha
реализовать поведение PHA.
Урок 193 из 356 · tests/chapter_01_cpu/test_193_instruction_pha.py
На этом шаге измените только `emulator/cpu/instructions.py, добавив pha(cpu). Страница стека начинается с STACK_BASE = 0x0100`.
Зачем нужен этот шаг
PHA копирует A в аппаратный стек 6502. Проталкивание сначала записывает в текущий слот $0100 | S, а затем уменьшает 8-битный указатель стека.
Предлагаемая реализация
cpu.bus.write(0x0100 | cpu.s, cpu.a)
cpu.s = (cpu.s - 1) & 0xFFПоместите эти инструкции в `def pha(cpu: CPU); использование STACK_BASE = 0x0100` на уровне модуля вместо литерала равносильно.
Инварианты: проталкивайте именно A; записывайте перед уменьшением; заворачивайте S до восьми бит; оставляйте A и все флаги статуса без изменений.
Заблуждение: предварительное уменьшение S не реализует проталкивание 6502; при этом происходит запись в следующий свободный слот, а не в текущий слот стека.
Вне рамок: импорт/регистрация опкода $48 относится к шагу 194. PLA, PHP, PLP, TXS и TSX относятся к более поздним шагам 195-204 и не должны добавляться здесь.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_193_instruction_pha.py -v