006. FakeROM

Crear un almacenamiento FakeROM escribible para los tests de la CPU.

Lección 6 de 356 · tests/chapter_01_cpu/test_006_FakeROM.py

Archivo a crear

emulator/memory/fake_rom.py

Ubicación

class FakeROM(MemoryDevice)

Por qué existe este paso

Los tests de instrucciones necesitan bytes de programa deterministas antes de disponer del análisis real de cartuchos. FakeROM modela la ventana PRG máxima $8000-$FFFF como 0x8000 bytes locales y permite que los tests la rellenen directamente.

Implementación de ejemplo completa

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

Invariantes importantes

  • FakeROM almacena exactamente 0x8000 bytes
  • sus direcciones son desplazamientos locales $0000-$7FFF
  • las escrituras existen solo para preparar programas y datos de prueba

Error común

FakeROM no es un mapeador de cartucho real y su método de escritura no implica que la ROM PRG de la NES sea escribible. Es infraestructura de test controlada.

Fuera de alcance

  • mapear FakeROM en las direcciones de la CPU
  • análisis de iNES
  • conmutación de bancos

Ejecutar esta lección

uv run pytest tests/chapter_01_cpu/test_006_FakeROM.py -v