242. PPUDATA escribe a través del bus de la PPU
Implementa las escrituras de PPUDATA ($2007) a través de PpuBus.
Lección 242 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_242_ppudata_writes_through_ppu_bus.py
Referencia
https://www.nesdev.org/wiki/PPU_registers#PPUDATAArchivo a actualizar
emulator/ppu/ppu.pyMétodo a actualizar
PPU.write_register(addr, value)Por qué existe este paso
PPUDATA es el registro visible para la CPU en $2007. La CPU escribe en $2007, pero la dirección real de memoria de la PPU en la que se escribe no es la dirección de CPU $2007. El destino real es la dirección de VRAM interna de la PPU:
vram_addrEsa dirección la establece PPUADDR ($2006) y después PPUDATA ($2007) escribe a través del
bus del lado de la PPU
PPU.write_register($2007, value)
-> ppu_bus.write(vram_addr, value)
-> increment vram_addrDecisiones importantes de compatibilidad futura en este test
- Use non-CHR addresses such as $2000, not $0000-$1FFF.
CHR writes will later involve mapper.write_chr / CHR RAM behavior.
- Test increment-by-1 only when PPUCTRL increment mode is clear.
Later, PPUCTRL bit 2 may select increment-by-32. These tests should not
block that future behavior.Pseudocódigo de implementación sugerido para la etapa actual
case 0x2007:
self.data = value
self.ppu_bus.write(self.vram_addr, value)
self.vram_addr = (self.vram_addr + 1) & 0x3FFFNota sobre la implementación futura
Más adelante, el incremento puede pasar a ser
increment = 32 if self.ctrl & VRAM_INCREMENT_BY_32 else 1
self.vram_addr = (self.vram_addr + increment) & 0x3FFFFuera del alcance
- lecturas de PPUDATA
- almacenamiento en búfer de lecturas de PPUDATA
- excepciones de lectura de paleta
- escrituras en CHR RAM
- comportamiento de incremento de 32 de PPUCTRL
Ejecutar esta lección
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_242_ppudata_writes_through_ppu_bus.py -v