227. Fábrica por defecto de PPU en CpuBus

Añadir una PPU por defecto a CpuBus.

Lección 227 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_227_cpu_bus_ppu_default_factory.py

Archivo a actualizar

emulator/bus/cpu_bus.py

Qué añadir

CpuBus should own a PPU instance.

Por qué existe este paso

La CPU de la NES se comunica con la PPU mediante registros mapeados en memoria. Antes de que CpuBus pueda enrutar lecturas/escrituras en $2000-$3FFF, el bus necesita un objeto PPU al que reenviar esos accesos.

Decisión de diseño importante

Usa default_factory en lugar de PPU() directamente en el campo de la dataclass.

Por qué

Cada CpuBus debe obtener su propia instancia de PPU. Compartir una única PPU mutable entre instancias de bus crearía un acoplamiento oculto entre pruebas e instancias del emulador.

Pseudocódigo de implementación sugerido

from dataclasses import dataclass, field
from emulator.ppu.ppu import PPU


@dataclass
class CpuBus:
    ...
    ppu: PPU = field(default_factory=PPU)

Ejecutar esta lección

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