Este proyecto es educativo y Open Source. No se copia código de otros emuladores. Implementación basada únicamente en documentación técnica y tests permitidas.
Corrección de Paleta Debug Índices 1 y 2
Resumen
Corrección de todas las paletas de debug en el renderer que usan colores verdes para los índices 1 y 2, cambiándolos a grises verdaderos para eliminar las rayas verdes que aparecen cuando el framebuffer contiene valores 1 o 2. Se identificaron y corrigieron 4 ubicaciones donde se definen paletas con valores verdes.
Resultado: Se corrigieron los valores de los índices 1 y 2 en todas las paletas de debug, cambiando de verde a gris verdadero. Esto eliminará las rayas verdes visuales cuando el framebuffer tenga valores 1 o 2, mostrándolos como gris claro y gris oscuro respectivamente.
Concepto de Hardware
Paleta de Colores en Game Boy
El framebuffer de la PPU contiene índices de color (0-3), no colores RGB directamente. El renderer debe convertir estos índices a colores RGB usando una paleta. La paleta estándar de Game Boy (greyscale) usa:
- Color 0: Blanco
(255, 255, 255)- el más claro - Color 1: Gris claro
(170, 170, 170) - Color 2: Gris oscuro
(85, 85, 85) - Color 3: Negro
(0, 0, 0)- el más oscuro
Estos valores son estándar en emulación y proporcionan el contraste correcto para la visualización en escala de grises.
Paleta de Debug vs Paleta Real
La paleta de debug es una herramienta de diagnóstico que mapea índices a colores fijos para visualizar el contenido del framebuffer sin pasar por las paletas del hardware (BGP/OBP). Debe usar los mismos valores que la paleta estándar para representación correcta. Si la paleta de debug usa colores incorrectos (como verde en lugar de gris), cualquier valor en el framebuffer con ese índice se mostrará incorrectamente.
Fuente: Pan Docs - "Background Palette (BGP)", "Object Palette (OBP)", "Palette"
Implementación
Se identificaron 4 ubicaciones donde se definen paletas de debug con valores verdes para los índices 1 y 2,
y se corrigieron cambiándolos a grises verdaderos según la constante PALETTE_GREYSCALE.
Ubicaciones Corregidas
-
self.COLORSen__init__()(líneas 192-193):- Índice 1:
(136, 192, 112)→(170, 170, 170) - Índice 2:
(52, 104, 86)→(85, 85, 85)
- Índice 1:
-
render_frame()con PPU C++ (líneas 494-499):- Índice 1:
(136, 192, 112)→(170, 170, 170) - Índice 2:
(52, 104, 86)→(85, 85, 85)
- Índice 1:
-
render_frame()método Python (líneas 579-584):- Índice 1:
(136, 192, 112)→(170, 170, 170) - Índice 2:
(52, 104, 86)→(85, 85, 85)
- Índice 1:
-
render_sprites()(líneas 955-960):- Índice 1:
(136, 192, 112)→(170, 170, 170) - Índice 2:
(52, 104, 86)→(85, 85, 85)
- Índice 1:
Valores Correctos
Todos los valores corregidos coinciden con la constante PALETTE_GREYSCALE definida en
el módulo (líneas 53-58):
PALETTE_GREYSCALE = [
(255, 255, 255), # Color 0: Blanco
(170, 170, 170), # Color 1: Gris claro
(85, 85, 85), # Color 2: Gris oscuro
(0, 0, 0), # Color 3: Negro
]
Consistencia
Todas las paletas de debug ahora usan los mismos valores para consistencia visual. Los comentarios también se actualizaron para reflejar que ahora son grises verdaderos, no verdes.
Archivos Afectados
src/gpu/renderer.py- Corregidas 4 ubicaciones de paletas (líneas 192-193, 494-499, 579-584, 955-960)docs/bitacora/entries/2025-12-25__0303__correccion-paleta-debug-indices-1-2.html- Esta entrada (nuevo)docs/bitacora/index.html- Actualizado con entrada 0303INFORME_FASE_2.md- Actualizado con Step 0303
Tests y Verificación
La corrección es puramente visual y no requiere tests unitarios. Sin embargo, se recomienda:
- Verificación visual: Ejecutar el emulador durante 5-10 minutos para verificar que las rayas verdes no aparecen
- Inspección de código: Verificar que todas las paletas usan valores consistentes
Comando de verificación sugerido:
python main.py roms/pkmn.gb
Validación: Confirmación visual de que:
- Los píxeles con índice 0 se muestran en blanco
- Los píxeles con índice 1 se muestran en gris claro (no verde)
- Los píxeles con índice 2 se muestran en gris oscuro (no verde)
- No hay rayas verdes después de varios minutos
Fuentes Consultadas
- Pan Docs: "Background Palette (BGP)", "Object Palette (OBP)", "Palette"
- Step 0302: Identificación del problema de paleta verde para índices 1 y 2
Integridad Educativa
Lo que Entiendo Ahora
- Paleta de debug: Debe usar valores consistentes con la paleta estándar (greyscale) para representación correcta. Los colores verdes son incorrectos y causan confusión visual.
- Mapeo de índices: El framebuffer contiene índices (0-3), no colores RGB. El renderer mapea estos índices a colores RGB usando una paleta. Si la paleta es incorrecta, la visualización será incorrecta.
- Consistencia: Todas las paletas de debug deben usar los mismos valores para consistencia visual entre fondo, sprites y diferentes métodos de renderizado.
- Corrección de bugs visuales: Los bugs visuales pueden deberse a problemas en la paleta de mapeo, no necesariamente en el framebuffer o en la lógica de renderizado.
Lo que Falta Confirmar
- Efectividad de la corrección: Si esta corrección elimina completamente las rayas verdes después de 5-10 minutos de ejecución (verificación visual pendiente).
- Causa raíz del framebuffer: Por qué el framebuffer comienza a tener valores 1 o 2 después de ~5 minutos (esto no se corrigió, solo la visualización).
Hipótesis y Suposiciones
Hipótesis principal: Las rayas verdes desaparecerán después de esta corrección porque ahora los valores 1 y 2 del framebuffer se mostrarán como grises verdaderos, no verdes. Esta hipótesis se basa en:
- Los monitores del Step 0302 mostraron que la paleta nunca cambia durante la ejecución
- El problema visual (rayas verdes) aparecía cuando el framebuffer tenía valores 1 o 2
- La paleta de debug usaba colores verdes para índices 1 y 2
Suposiciones:
- El framebuffer seguirá teniendo valores 1 o 2 después de ~5 minutos (esto no se corrigió)
- Los valores 1 y 2 son correctos y solo necesitaban visualizarse como grises, no verdes
Próximos Pasos
- [ ] Verificación visual extendida: Ejecutar el emulador durante 10+ minutos para verificar que las rayas verdes no aparecen
- [ ] Si las rayas desaparecen: Continuar con otras funcionalidades del emulador
- [ ] Si persisten problemas: Investigar por qué el framebuffer cambia de valores (Step 0304/0305)