234. Forma básica del bus de la ppu

Crea la forma básica de PpuBus.

Lección 234 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_234_ppu_bus_basic_shape.py

Archivos a crear/actualizar

emulator/bus/ppu_bus.py

Clase a implementar

PpuBus

Por qué existe este paso

La NES tiene dos espacios de direcciones distintos

CPU address space: $0000-$FFFF
    routed by CpuBus

PPU address space: $0000-$3FFF
    routed by PpuBus

La PPU no debería escribir directamente en la VRAM en bruto para siempre. Debería comunicarse con un límite estable

del espacio de direcciones de la PPU

PPU -> PpuBus -> VRAM / mapper CHR / palette RAM later

Esto permite que el comportamiento de PPUDATA se mantenga estable mientras el interior de PpuBus se vuelve más preciso con el tiempo.

Constante importante

PPU_ADDRESS_MASK = 0x3FFF

Por qué

Las direcciones de la PPU son de 14 bits. Enmascarar con 0x3FFF pliega cualquier dirección dentro del rango direccionable de la PPU $0000-$3FFF.

Almacenamiento inicial

Por ahora, PpuBus posee un gran almacén VRAM. Esta es una simplificación temporal que nos permite construir PPUADDR/PPUDATA antes de tener plena precisión de nametables/paletas.

Pseudocódigo de implementación sugerido

from dataclasses import dataclass, field
from typing import Optional

from emulator.memory.vram import VRAM
from emulator.cartridge.mapper_interface import MapperInterface

PPU_ADDRESS_MASK = 0x3FFF


@dataclass
class PpuBus:
    vram: VRAM = field(default_factory=VRAM)
    mapper: Optional[MapperInterface] = None

Ejecutar esta lección

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