284. Validación cpu escribe memoria de ppu y luego renderiza

VALIDACIÓN: la CPU escribe en la memoria de la PPU y luego Console renderiza el framebuffer de fondo.

Lección 284 de 356 · tests/chapter_05_rendering_pipeline/test_284_VALIDATION_cpu_writes_ppu_memory_then_render.py

No debería hacer falta ninguna implementación nueva para este test si los pasos anteriores de CPU, PPU, bus y renderizado están completos.

Por qué existe esta validación

El emulador ahora tiene dos rutas importantes

CPU/PPU write path:
    CPU program writes PPUADDR/PPUDATA
    -> PPU memory changes

Rendering path:
    Console.render_background_framebuffer()
    -> reads current PPU memory
    -> returns Framebuffer

Este test verifica que esas rutas observan el mismo estado de la PPU.

Ruta de extremo a extremo

CPU executes STA $2006/$2007
    -> CpuBus routes $2000-$2007 to PPU registers
    -> PPUADDR selects PPU memory address
    -> PPUDATA writes through PpuBus

Console.render_background_framebuffer()
    -> reads nametable/palette/pattern memory from console.ppu
    -> renders pure Framebuffer data

Comportamiento del pequeño programa de CPU

write $01 to PPU $2000
    nametable[0] = tile ID 1

write $0F,$01,$02,$03 to PPU $3F00-$3F03
    background palette 0 maps color index 3 to NES color $03

Configuración sintética del CHR

Los datos de CHR se preparan directamente en la memoria de la PPU para esta validación. Esto mantiene el test centrado en las escrituras de la CPU en la tabla de nombres/RAM de paleta y en la ruta de renderizado. Para Mapper000/CHR ROM, los gráficos CHR normalmente provienen del cartucho.

Resultado esperado

top-left framebuffer pixel uses get_nes_rgb_color($03)

Invariante importante

Las escrituras de la CPU y el renderizado de Console deben usar la misma instancia de PPU.

Fuera de alcance

  • visualización con pygame
  • fixture de ROM real
  • carga de CHR ROM a través del cartucho
  • sprites
  • scroll
  • OAMDMA

Ejecutar esta lección

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