269. Validación de la ruta NMI de VBlank en la consola
VALIDACIÓN: Console.step ejecuta la ruta completa de NMI de VBlank.
Lección 269 de 356 · tests/chapter_04_ppu_timing_and_vblank/test_269_VALIDATION_console_vblank_nmi_path.py
No debería ser necesaria ninguna implementación nueva para esta prueba si los pasos 259-268 están completos.
Referencias
https://www.nesdev.org/wiki/PPU_registers#PPUCTRL
https://www.nesdev.org/wiki/PPU_registers#Vblank_NMI
https://www.nesdev.org/wiki/CPU_interruptsPor qué existe esta validación
Las pruebas anteriores verificaron cada mecanismo por separado
PPU.step() advances timing
PPU enters VBlank and sets VBLANK_STARTED
PPUCTRL bit 7 enables NMI requests
CPU.step() returns CPU cycles
Console.step() advances PPU by cpu_cycles * 3
Console consumes ppu.nmi_requested
CPU.interrupt_nmi() jumps through $FFFA/$FFFBEsta prueba valida que esas piezas funcionan juntas en un pequeño escenario a nivel de máquina.
Ruta de extremo a extremo que se valida
CPU executes LDA #$80
-> A = $80
CPU executes STA $2000
-> CpuBus routes $2000 to PPUCTRL
-> PPUCTRL bit 7 enables NMI
Console.step() keeps advancing CPU and PPU together
-> CPU cycles advance PPU by cycles * 3
-> PPU enters VBlank
-> PPU sets nmi_requested = True
-> Console consumes the request
-> CPU.interrupt_nmi() reads $FFFA/$FFFB
-> CPU jumps to the NMI handler addressPequeño programa usado en esta validación
$8000: A9 80 LDA #$80 ; set PPUCTRL NMI-enable bit
$8002: 8D 00 20 STA $2000 ; write A to PPUCTRL
$8005: EA NOP ; wait while PPU reaches VBlank
$8006: EA NOP
...Configuración del vector NMI
$FFFA = $00
$FFFB = $90Resultado esperado
CPU PC becomes $9000 after Console consumes the VBlank NMI request.Importante
Esta es todavía una temporización simplificada. La prueba coloca intencionalmente la PPU cerca del VBlank para que la validación sea rápida y determinista. Esto no es una prueba de latencia NMI precisa a nivel de punto.
Fuera de alcance
- renderizado de píxeles
- comportamiento de sprites de la PPU
- OAM DMA
- entrada de controlador
- latencia exacta de NMI
- penalizaciones dinámicas de ciclo de la CPU
Ejecutar esta lección
uv run pytest tests/chapter_04_ppu_timing_and_vblank/test_269_VALIDATION_console_vblank_nmi_path.py -v