086. Инструкция dey

Добавить поведение инструкции DEY.

Урок 86 из 356 · tests/chapter_01_cpu/test_086_instruction_dey.py

На этом шаге добавьте только dey; тест 087 подключает опкод после того, как поведение уже существует.

Расположение в продакшн-коде и символ

emulator/cpu/instructions.py: `dey(cpu: CPU)`

Зачем нужен этот шаг

DEY отвечает за декремент регистра Y и его влияние на флаги независимо от декодирования. Маскирование необходимо для моделирования перехода через нижнюю границу значений 8-битного регистра.

Предлагаемая реализация

def dey(cpu: CPU):
    result = cpu.y - 1
    result_8 = result & 0xFF

    # Set flags
    cpu.flags.set_negative_flag((result_8 & 0b1000_0000) != 0)
    cpu.flags.set_zero_flag(result_8 == 0)

    cpu.y = result_8

Важные инварианты

  • Y переполняется с 0x00 до 0xFF
  • Zero и Negative отражают замаскированный 8-битный результат
  • Carry и Overflow сохраняются; память не используется

Частое заблуждение

DEY — это не SBC, применённый к Y, и он не должен использовать Carry как входной заём.

Вне рамок

  • импорт dey и отображение опкода 0x88 (тест 087)
  • предшествующее поведение и диспетчеризация INY
  • последующая работа над ASL и тайминги циклов

Запустить этот урок

uv run pytest tests/chapter_01_cpu/test_086_instruction_dey.py -v