275. Tabla de patrones con la paleta de la NES

Renderizar un framebuffer de tabla de patrones usando la paleta RGB por defecto de la NES.

Lección 275 de 356 · tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py

Archivo a actualizar

emulator/rendering/pattern_table_renderer.py

Por qué existe este paso

El renderizador genérico de tabla de patrones ya admite paletas personalizadas

pattern_table_to_framebuffer(pattern_table_bytes, palette)

Eso es útil para tests y paletas de depuración. Ahora que tenemos una aproximación de paleta RGB por defecto de la NES, añadimos un ayudante de conveniencia:

pattern_table_to_nes_framebuffer(pattern_table_bytes)

Este ayudante mantiene explícita la ruta de paleta por defecto sin eliminar el soporte de paletas personalizadas.

Qué debería hacer

pattern_table_to_nes_framebuffer(pattern_table_bytes)
    -> pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)

Ejemplo de implementación sugerida

from emulator.rendering.nes_palette import NES_PALETTE_RGB


def pattern_table_to_nes_framebuffer(
    pattern_table_bytes: bytes,
) -> Framebuffer:
    return pattern_table_to_framebuffer(pattern_table_bytes, NES_PALETTE_RGB)

¿Por qué no hacer que NES_PALETTE_RGB sea el argumento por defecto?

Esto funcionaría

def pattern_table_to_framebuffer(pattern_table_bytes, palette=NES_PALETTE_RGB):
    ...

Pero un ayudante separado es más claro para el tutorial

pattern_table_to_framebuffer(..., palette)
    custom palette path

pattern_table_to_nes_framebuffer(...)
    default NES palette path

Nota: Este test usa únicamente bytes CHR sintéticos. No uses datos CHR de una ROM comercial en este test.

Fuera de alcance

  • pantalla de pygame
  • escritura de archivos de imagen
  • renderizado de nametable/fondo
  • búsqueda en la RAM de paletas de la PPU
  • colores de énfasis de PPUMASK
  • sprites

Ejecutar esta lección

uv run pytest tests/chapter_05_rendering_pipeline/test_275_pattern_table_with_nes_palette.py -v