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_bankschr_rom_banks 始终是数量,而不是字节长度。在推导出训练器和映射器(mapper)取值之后,不要丢弃 flags_6/flags_7

此步骤范围之外

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