238. La ppu posee el bus de la ppu
Conecta la PPU a PpuBus.
Lección 238 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_238_ppu_owns_ppu_bus.py
Archivo a actualizar
emulator/ppu/ppu.pyCampo a añadir
ppu_bus: PpuBus = field(default_factory=PpuBus)Por qué existe este paso
La PPU tiene registros a los que la CPU puede acceder a través de CpuBus, pero la PPU también tiene su propio espacio de direcciones:
PPU address space: $0000-$3FFFEse espacio de direcciones debería ser enrutado por PpuBus.
Esto crea el límite estable necesario antes de implementar PPUADDR/PPUDATA:
CPU writes $2006 / $2007
-> CpuBus routes to PPU.write_register(...)
-> PPU uses internal PPU address state
-> PPU writes through PpuBusDirección de dependencia importante
PPU -> PpuBus -> VRAM / mapper CHR laterNo
PPU -> raw VRAM directlyPor qué esto importa
El comportamiento de PPUDATA no debería necesitar cambiar cuando PpuBus se vuelva más preciso más adelante. Hoy PpuBus puede usar una gran VRAM. Más adelante puede enrutar hacia:
$0000-$1FFF -> mapper CHR ROM/RAM
$2000-$3EFF -> nametable VRAM/mirrors
$3F00-$3FFF -> palette RAM/mirrorsPseudocódigo de implementación sugerido
from dataclasses import dataclass, field
from emulator.bus.ppu_bus import PpuBus
@dataclass
class PPU:
ctrl: int = 0
mask: int = 0
status: int = 0
oam_addr: int = 0
oam_data: int = 0
scroll: int = 0
addr: int = 0
data: int = 0
ppu_bus: PpuBus = field(default_factory=PpuBus)Fuera de alcance
- comportamiento del latch de PPUADDR
- escrituras de PPUDATA a través de PpuBus
- precisión de paletas/nametables
- escrituras en CHR RAM
Ejecutar esta lección
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_238_ppu_owns_ppu_bus.py -v