215. Датакласс iNES ROM

добавьте

Урок 215 из 356 · tests/chapter_02_rom_loading/test_215_ines_rom_dataclass.py

добавьте emulator/cartridge/ines.py::INesRom.

Зачем нужен этот шаг

Этот неизменяемый результат разбора хранит интерпретированный заголовок и извлечённые секции программы и графики вместе, чтобы parse_ines_rom не приходилось возвращать разрозненные значения. Он опирается на модель заголовка и парсер из уроков 213-214.

Предлагаемая реализация после parse_ines_header:

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

Инварианты: порядок полей — header, prg_rom, chr_rom; обе полезные нагрузки имеют тип bytes; датакласс заморожен, поскольку описывает содержимое файла. Не путайте этот результат уровня формата с обращённым к эмулятору Cartridge.

Вне рамок этого шага

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.

Запустить этот урок

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