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