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