213. Dataclass de la cabecera iNES

añade

Lección 213 de 356 · tests/chapter_02_rom_loading/test_213_ines_header_dataclass.py

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

Por qué existe este paso

El objeto da nombre a los metadatos inmutables de los primeros 16 bytes y conserva las flags en bruto para futuras características del formato, en lugar de obligar al código posterior a volver a analizar los bytes de origen. Las constantes de disposición de la lección 212 son el vocabulario previo necesario para la cabecera aquí representada.

Implementación sugerida tras las constantes de la lección 212

from dataclasses import dataclass


@dataclass(frozen=True)
class INesHeader:
    prg_rom_banks: int
    chr_rom_banks: int
    mapper_number: int
    has_trainer: bool
    flags_6: int
    flags_7: int

Invariantes: el orden de los campos es exacto, y la dataclass es inmutable (frozen) porque los metadatos analizados son un hecho sobre el archivo. prg_rom_banks y chr_rom_banks siguen siendo recuentos, no longitudes en bytes. No descartes flags_6/flags_7 tras derivar los valores del trainer y del mapper.

Fuera de alcance para este paso

1. Lesson 214 parses and validates the header bytes.
2. Lessons 215-216 represent and extract the ROM sections.
3. Mapper behavior and interpretation of mirroring bits come later.

Ejecutar esta lección

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