236. Protocolo de interfaz del mapper

Crea MapperInterface como un protocolo para los límites bus/mapper.

Lección 236 de 356 · tests/chapter_03_ppu_memory_and_graphics_data/test_236_mapper_interface_protocol.py

Archivo a crear

emulator/cartridge/mapper_interface.py

Protocolo a implementar

MapperInterface

Por qué existe este ayudante

PpuBus no debería depender directamente de Mapper000. Mapper000 es solo un mapper de cartucho. Los mappers posteriores pueden conmutar bancos de PRG/CHR de forma distinta, pero PpuBus solo debería necesitar una pequeña interfaz:

read_prg(addr)
read_chr(addr)

Esto mantiene a PpuBus consciente de los mappers sin hacerlo específico de Mapper000.

¿Qué es un Protocol? Un Protocol describe los métodos que debe proporcionar un objeto. Una clase no necesita heredar del Protocol explícitamente. Si tiene los métodos correctos, coincide con el protocolo de forma estructural.

Pseudocódigo de implementación sugerido

from typing import Protocol


class MapperInterface(Protocol):
    def read_prg(self, addr: int) -> int:
        ...

    def read_chr(self, addr: int) -> int:
        ...

Nota futura

Cuando se implementen las escrituras en CHR RAM, este protocolo podría crecer

write_chr(addr, value)

No lo exijas todavía, porque Mapper000 no implementa escrituras en CHR en esta etapa.

Ejecutar esta lección

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