082. Инструкция dex
Добавить поведение инструкции DEX.
Урок 82 из 356 · tests/chapter_01_cpu/test_082_instruction_dex.py
На этом шаге добавьте только функцию инструкции. Опкод 0xCA — это следующий шаг, тест 083.
Расположение в продакшн-коде и символ
emulator/cpu/instructions.py: `dex(cpu: CPU)`Зачем нужен этот шаг
DEX — это поведение регистра, независимое от декодирования опкода. Целые числа Python не переполняются автоматически, поэтому результат вычитания нужно нормализовать до 8-битного значения.
Предлагаемая реализация
def dex(cpu: CPU):
result = cpu.x - 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.x = result_8Важные инварианты
- X переполняется с 0x00 до 0xFF через
& 0xFF - Zero и Negative вычисляются из итогового 8-битного значения
- Carry, Overflow, память и все остальные регистры не затрагиваются
Частое заблуждение
DEX — это не вычитание через SBC: он не использует и не изменяет Carry и не применяет правила переполнения SBC.
Вне рамок
- импорт
dexв opcodes и отображение 0xCA (тест 083) - последующие инкременты/декременты регистра Y
- тайминги циклов
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_082_instruction_dex.py -v