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