244. Validación: una ROM minúscula escribe en la memoria de la PPU

TEST DE VALIDACIÓN: una ROM iNES minúscula escribe en la memoria de la PPU a través de PPUADDR/PPUDATA.

Lección 244 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_244_VALIDATION_tiny_rom_writes_ppu_memory.py

Este archivo no es un paso de implementación para el estudiante.

No hay nada nuevo que implementar para este test. Existe únicamente para validar que las piezas construidas hasta ahora funcionan juntas a través de sus límites reales:

iNES bytes
    -> Cartridge.from_ines_bytes(data)
    -> CpuBus(cartridge=cartridge, ppu=ppu)
    -> CPU.reset()
    -> CPU.step()
    -> STA $2006 / STA $2007
    -> CpuBus.write(...)
    -> PPU.write_register(...)
    -> PPUADDR sets vram_addr
    -> PPUDATA writes through PpuBus
    -> VRAM stores the byte

Por qué existe esta validación

Los tests anteriores verificaron de forma aislada PPUADDR, PPUDATA, el comportamiento de incremento de PPUCTRL, PpuBus y el enrutamiento de CpuBus. Este test demuestra que un programa real de CPU, obtenido desde una ROM iNES minúscula respaldada por un cartucho, puede escribir en la memoria del lado de la PPU.

Programa minúsculo colocado en la dirección de CPU $8000:

A9 20       LDA #$20
8D 06 20    STA $2006    ; PPUADDR high byte
A9 00       LDA #$00
8D 06 20    STA $2006    ; PPUADDR low byte
A9 AA       LDA #$AA
8D 07 20    STA $2007    ; PPUDATA write to PPU memory at $2000
EA          NOP

Resultado esperado

ppu.ppu_bus.read($2000) == $AA
ppu.vram_addr == $2001

Fuera del alcance

  • renderizado
  • precisión del espejado de nametable
  • precisión de la RAM de paleta
  • escrituras en CHR RAM
  • lecturas de PPUDATA/almacenamiento en búfer de lectura
  • temporización de VBlank/NMI

Ejecutar esta lección

uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_244_VALIDATION_tiny_rom_writes_ppu_memory.py -v