213. Датакласс заголовка iNES
добавьте
Урок 213 из 356 · tests/chapter_02_rom_loading/test_213_ines_header_dataclass.py
добавьте emulator/cartridge/ines.py::INesHeader.
Зачем нужен этот шаг
Этот объект даёт имена неизменяемым метаданным из первых 16 байт и сохраняет исходные флаги для последующих возможностей формата, вместо того чтобы заставлять нижележащий код заново разбирать исходные байты. Константы формата из урока 212 — необходимый словарь для представленного здесь заголовка.
Предлагаемая реализация после констант из урока 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Инварианты: порядок полей точный, а датакласс заморожен, поскольку разобранные метаданные — это факт о файле. prg_rom_banks и chr_rom_banks остаются количествами, а не длиной в байтах. Не отбрасывайте flags_6/flags_7 после вычисления значений trainer и mapper.
Вне рамок этого шага
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.Запустить этот урок
uv run pytest tests/chapter_02_rom_loading/test_213_ines_header_dataclass.py -v