215. Dataclass de la ROM iNES

añade

Lección 215 de 356 · tests/chapter_02_rom_loading/test_215_ines_rom_dataclass.py

añade emulator/cartridge/ines.py::INesRom.

Por qué existe este paso

Este resultado inmutable del analizador mantiene juntos la cabecera interpretada y las secciones de programa y gráficos extraídas, de modo que parse_ines_rom no necesite devolver valores sueltos. Se construye sobre el modelo de cabecera y el analizador de las lecciones 213-214.

Implementación sugerida tras parse_ines_header:

@dataclass(frozen=True)
class INesRom:
    header: INesHeader
    prg_rom: bytes
    chr_rom: bytes

Invariantes: el orden de los campos es header, prg_rom, chr_rom; ambas cargas útiles son de tipo bytes; y la dataclass es inmutable (frozen) porque describe el contenido del archivo. No confundas este resultado a nivel de formato con el Cartridge orientado al emulador.

Fuera de alcance para este paso

1. Lesson 216 calculates offsets, skips trainers, and validates payload size.
2. Lesson 217 introduces the emulator-facing `Cartridge`.
3. Lessons 218-219 implement mapper address translation.

Ejecutar esta lección

uv run pytest tests/chapter_02_rom_loading/test_215_ines_rom_dataclass.py -v