006. FakeROM
Создать записываемое хранилище FakeROM для тестов CPU.
Урок 6 из 356 · tests/chapter_01_cpu/test_006_FakeROM.py
Файл для создания
emulator/memory/fake_rom.pyРасположение
class FakeROM(MemoryDevice)Почему этот шаг существует
Тестам инструкций нужны детерминированные байты программы до того, как станет доступен реальный разбор картриджа. FakeROM моделирует максимальное окно PRG $8000-$FFFF как 0x8000 локальных байт и позволяет тестам заполнять его напрямую.
Полная эталонная реализация
from dataclasses import dataclass, field
from emulator.memory.memory_device import MemoryDevice
@dataclass
class FakeROM(MemoryDevice):
_data: bytearray = field(
default_factory=lambda: bytearray(0x8000),
init=False,
)
def read(self, addr: int) -> int:
return self._data[addr]
def write(self, addr: int, value: int) -> None:
self._data[addr] = valueВажные инварианты
- FakeROM хранит ровно 0x8000 байт
- его адреса — локальные смещения $0000-$7FFF
- запись существует только для подготовки тестовых программ и данных
Распространённое заблуждение
FakeROM не является реальным мэппером картриджа, и его метод записи не утверждает, что PRG ROM NES доступна для записи. Это контролируемая тестовая инфраструктура.
Вне рамок
- отображение FakeROM на адреса CPU
- разбор iNES
- переключение банков
Запустить этот урок
uv run pytest tests/chapter_01_cpu/test_006_FakeROM.py -v