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.py

Por 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