235. Lectura y escritura de vram en el bus de la ppu

Añade el reenvío básico de lectura/escritura de PpuBus a VRAM.

Lección 235 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_235_ppu_bus_vram_read_write.py

Archivo a actualizar

emulator/bus/ppu_bus.py

Métodos a implementar

PpuBus.read(addr: int) -> int
PpuBus.write(addr: int, value: int) -> None

Por qué existe este paso

Antes de que PPUADDR/PPUDATA puedan escribir en la memoria de vídeo, la PPU necesita un objeto tipo bus que pueda aceptar direcciones de la PPU y realizar acceso a memoria.

Para este primer paso de lectura/escritura, evita probar la región CHR $0000-$1FFF. La CHR se probará por separado porque implica el comportamiento del mapper del cartucho.

Usa por ahora direcciones que no sean CHR, como $2000:

PpuBus.write($2000, $AA)
PpuBus.read($2000) -> $AA

Pseudocódigo de implementación sugerido para la región por defecto/no CHR

def read(self, addr: int) -> int:
    addr = addr & PPU_ADDRESS_MASK
    return self.vram.read(addr)

def write(self, addr: int, value: int) -> None:
    addr = addr & PPU_ADDRESS_MASK
    self.vram.write(addr, value)

Más adelante, estos métodos crecerán con secciones para

  • área CHR: $0000-$1FFF
  • área de nametables: $2000-$3EFF
  • área de paletas: $3F00-$3FFF

Ejecutar esta lección

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