206. Инструкции управления флагами

реализовать операции управления флагами.

Урок 206 из 356 · tests/chapter_01_cpu/test_206_instruction_flag_controls.py

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

На этом шаге добавьте символы `clc, sec, cli, sei, cld, sed и clv в emulator/cpu/instructions.py. Каждая из них делегирует изменение одного бита состояния существующему API cpu.flags`, включая помощники для Decimal из шага 205.

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

def clc(cpu: CPU):
    cpu.flags.set_carry_flag(False)
def sec(cpu: CPU):
    cpu.flags.set_carry_flag(True)
def cli(cpu: CPU):
    cpu.flags.set_interrupt_disable_flag(False)
def sei(cpu: CPU):
    cpu.flags.set_interrupt_disable_flag(True)
def cld(cpu: CPU):
    cpu.flags.set_decimal_flag(False)
def sed(cpu: CPU):
    cpu.flags.set_decimal_flag(True)
def clv(cpu: CPU):
    cpu.flags.set_overflow_flag(False)

Инвариант: каждая функция изменяет ровно свой именованный бит и сохраняет все остальные флаги, регистры, S, PC и память. CLI сбрасывает маску запрета прерываний; она не сбрасывает событие прерывания. Ещё одно распространённое заблуждение — считать CLV или любую операцию сброса полным обнулением регистра состояния.

Предварительное условие: шаг 205 добавил помощники для Decimal. Вне рамок: импорты и отображения в `emulator/cpu/opcodes.py` относятся к шагу 207.

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

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