203. Инструкция tsx
реализовать операцию TSX.
Урок 203 из 356 · tests/chapter_01_cpu/test_203_instruction_tsx.py
Зачем нужен этот шаг
На этом шаге добавьте `emulator/cpu/instructions.py::tsx`. TSX дополняет шаг 201, копируя байт указателя стека в X и вычисляя два результирующих флага из скопированного значения.
Предлагаемая реализация
def tsx(cpu: CPU):
cpu.x = cpu.s
cpu.flags.set_zero_flag(cpu.x == 0)
cpu.flags.set_negative_flag((cpu.x & 0b1000_0000) != 0)Инварианты: S, A, Y, PC, память и биты состояния, кроме Zero и Negative, не изменяются. Zero устанавливается ровно при значении $00; Negative следует биту 7, а не биту 6. Распространённое заблуждение — обращаться с TSX так же, как с TXS, и сохранять все флаги, либо вычислять флаги из X до копирования S.
Вне рамок: импорт TSX и отображение неявного опкода $BA в `emulator/cpu/opcodes.py` относятся к шагу 204; никакой другой API стека не добавляется.
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_203_instruction_tsx.py -v