205. Gestor de flags: flag decimal

añadir soporte para el bit Decimal.

Lección 205 de 356 · tests/chapter_01_cpu/test_205_flags_handler_decimal_flag.py

Por qué existe este paso

En este paso, añade a `emulator/cpu/flags_handler.py los símbolos DECIMAL_FLAG, FlagsHandler.set_decimal_flag y FlagsHandler.get_decimal_flag`. El ayudante mantiene la manipulación del bit 3 dentro de la abstracción de estado necesaria para las siguientes operaciones de control de flags. La CPU de la NES conserva D aunque ADC/SBC no usen la aritmética BCD del 6502.

Implementación sugerida

DECIMAL_FLAG = 1 << 3

class FlagsHandler:
    def set_decimal_flag(self, enabled: bool):
        if enabled:
            self.cpu.p |= DECIMAL_FLAG
        else:
            self.cpu.p &= ~DECIMAL_FLAG

    def get_decimal_flag(self) -> bool:
        return bool(self.cpu.p & DECIMAL_FLAG)

Invariante: activar o desactivar D preserva todos los demás bits de P, especialmente el bit vecino Interrupt Disable. El error conceptual habitual es desactivar con `p &= DECIMAL_FLAG`, lo cual conserva D y destruye flags no relacionados.

Fuera de alcance: las funciones de instrucción y los mapeos de opcode corresponden a los pasos 206 y 207. No debe introducirse el comportamiento de modo decimal de ADC/SBC para la CPU de la NES.

Ejecutar esta lección

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