217. Cartridge a partir de iNES
crea
Lección 217 de 356 · tests/chapter_02_rom_loading/test_217_cartridge_from_ines.py
crea emulator/cartridge/cartridge.py::Cartridge.
Por qué existe este paso
El analizador iNES se ocupa de las cuestiones de disposición del archivo; esta clase expone los bytes de PRG, los bytes de CHR, la identidad del mapper y el almacenamiento opcional de CHR-RAM que necesita el emulador. from_ines_bytes es la frontera entre esas representaciones y depende del analizador completado en la lección 216.
Implementación sugerida para esta lección
from dataclasses import dataclass
from typing import Optional
from emulator.cartridge.ines import parse_ines_rom
@dataclass(frozen=True)
class Cartridge:
prg_rom: bytes
chr_rom: bytes
mapper_number: int
chr_ram: Optional[bytearray] = None
@classmethod
def from_ines_bytes(cls, data: bytes) -> "Cartridge":
ines_rom = parse_ines_rom(data)
return cls(
prg_rom=ines_rom.prg_rom,
chr_rom=ines_rom.chr_rom,
mapper_number=ines_rom.header.mapper_number,
)Invariantes: la clase de esta lección es inmutable (frozen); el orden de campos requerido es PRG, CHR, número de mapper y, después, CHR RAM; y la construcción copia los valores analizados sin traducir direcciones. El campo chr_ram es obligatorio en la forma de la dataclass, pero su valor es opcional y por defecto vale None.
Fuera de alcance para este paso
1. Lessons 218-219 put PRG and CHR address translation on `Mapper000`.
2. Lesson 220 selects a mapper from the cartridge metadata.
3. Lessons 221-222 route CPU-bus reads through that mapper.
4. Mirroring metadata and writable graphics behavior come later.Ejecutar esta lección
uv run pytest tests/chapter_02_rom_loading/test_217_cartridge_from_ines.py -v