237. Enrutamiento del área chr en el bus de la ppu
Enruta las lecturas del área CHR de PpuBus a través del mapper.
Lección 237 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_237_ppu_bus_chr_area_routing.py
Archivo a actualizar
emulator/bus/ppu_bus.pyConstantes a añadir/usar
CHR_START = 0x0000
CHR_END = 0x1FFF¿Qué es el área CHR? El rango de direcciones de la PPU $0000-$1FFF es el área de la pattern table. Contiene los bytes de gráficos de tiles usados más adelante para los píxeles de fondo y de sprites.
Dato importante de la NES
Esta área a menudo pertenece al cartucho, no a la VRAM interna.
CHR ROM cartridge:
PPU reads pattern bytes from cartridge CHR ROM.
CHR RAM cartridge:
PPU can write pattern bytes into cartridge CHR RAM.Alcance actual
Por ahora, PpuBus debe detectar las direcciones del área CHR. Las lecturas deben usar mapper.read_chr(addr) cuando exista un mapper.
Deliberadamente no fijamos el comportamiento de escritura de CHR en esta prueba. Un paso futuro puede añadir mapper.write_chr(addr, value) para soporte de CHR RAM, y esta prueba no debería bloquear esa evolución.
Pseudocódigo de lectura sugerido
def read(self, addr: int) -> int:
addr = addr & PPU_ADDRESS_MASK
if CHR_START <= addr <= CHR_END:
if self.mapper is not None:
return self.mapper.read_chr(addr)
return self.vram.read(addr)
return self.vram.read(addr)Posible pseudocódigo de escritura actual
def write(self, addr: int, value: int) -> None:
addr = addr & PPU_ADDRESS_MASK
if CHR_START <= addr <= CHR_END:
if self.mapper is not None:
raise ValueError("CHR writes are not supported yet")
self.vram.write(addr, value)
return
self.vram.write(addr, value)Posible pseudocódigo de escritura futuro
if CHR_START <= addr <= CHR_END and self.mapper is not None:
self.mapper.write_chr(addr, value)
returnRegiones futuras
$2000-$3EFF:
currently backed by big VRAM, later nametable VRAM/mirroring
$3F00-$3FFF:
currently backed by big VRAM, later palette RAM/mirroringEjecutar esta lección
uv run pytest tests/chapter_03_ppu_memory_and_graphics_data/test_237_ppu_bus_chr_area_routing.py -v