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