206. Instrucciones de control de flags
implementar las operaciones de control de flags.
Lección 206 de 356 · tests/chapter_01_cpu/test_206_instruction_flag_controls.py
Por qué existe este paso
En este paso, añade a `emulator/cpu/instructions.py los símbolos clc, sec, cli, sei, cld, sed y clv. Cada uno delega un cambio de un bit de estado en la API existente cpu.flags`, incluidos los ayudantes de Decimal del paso 205.
Implementación sugerida
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)Invariante: cada función cambia exactamente el bit indicado y preserva todos los demás flags, registros, S, PC y la memoria. CLI limpia la máscara de deshabilitación de interrupciones; no limpia un evento de interrupción. Otro error conceptual habitual es tratar CLV o cualquier operación de limpieza como un reinicio completo del registro de estado.
Prerrequisito: el paso 205 añadió los ayudantes de Decimal. Fuera de alcance: las importaciones y los mapeos en `emulator/cpu/opcodes.py` corresponden al paso 207.
Ejecutar esta lección
uv run pytest tests/chapter_01_cpu/test_206_instruction_flag_controls.py -v