084. Инструкция iny

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

Урок 84 из 356 · tests/chapter_01_cpu/test_084_instruction_iny.py

На этом шаге добавьте только iny, до отображения её опкода в тесте 085 и работы над DEY в тестах 086-087.

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

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

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

INY увеличивает регистр Y независимо от декодирования опкода и должен эмулировать 8-битный регистр, несмотря на неограниченные целые числа Python.

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

def iny(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 переполняется с 0xFF до 0x00
  • Zero и Negative вычисляются из замаскированного результата
  • Carry, Overflow, память и другие регистры остаются неизменными

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

Инкремент не устанавливает Carry при переполнении Y; INY обновляет только Z и N.

Вне рамок

  • диспетчеризация опкода 0xC8 (тест 085)
  • поведение и диспетчеризация DEY (тесты 086-087)
  • последующая работа над ASL и тайминги циклов

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

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