277. Nametable con la paleta de la NES
Renderizar un framebuffer de nametable usando la paleta RGB por defecto de la NES.
Lección 277 de 356 · tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py
Archivo a actualizar
emulator/rendering/nametable_renderer.pyPor qué existe este paso
El renderizador genérico de nametable admite paletas personalizadas
nametable_to_framebuffer(nametable_bytes, pattern_table_bytes, palette)Eso es útil para tests y paletas de depuración. Ahora que tenemos NES_PALETTE_RGB, añadimos un ayudante de paleta por defecto:
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)Esto refleja el ayudante de tabla de patrones del paso de renderizado anterior.
Qué debería hacer
nametable_to_nes_framebuffer(nametable_bytes, pattern_table_bytes)
-> nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)Ejemplo de implementación sugerida
from emulator.rendering.nes_palette import NES_PALETTE_RGB
def nametable_to_nes_framebuffer(
nametable_bytes: bytes,
pattern_table_bytes: bytes,
) -> Framebuffer:
return nametable_to_framebuffer(
nametable_bytes,
pattern_table_bytes,
NES_PALETTE_RGB,
)Simplificación importante
Esto todavía usa una única paleta compartida para cada tile. Aún no decodifica la tabla de atributos de 64 bytes, ni lee todavía la RAM de paletas de la PPU en $3F00-$3F1F. Esto es útil como renderizador simple/de depuración. Un renderizador posterior usará la tabla de atributos para elegir entre distintas paletas de fondo.
Regla importante de fixtures
Usa únicamente bytes de nametable/CHR sintéticos. No uses datos de ROM comercial en este test.
Fuera de alcance
- selección de paleta mediante tabla de atributos
- búsqueda en la RAM de paletas de la PPU
- desplazamiento (scrolling)
- sprites
- OAMDMA
- pantalla de pygame
Ejecutar esta lección
uv run pytest tests/chapter_05_rendering_pipeline/test_277_nametable_with_nes_palette.py -v