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