006. Fakerom
为 CPU 测试创建可写的 FakeROM 存储。
第 6 / 356 · tests/chapter_01_cpu/test_006_FakeROM.py
需要创建的文件
emulator/memory/fake_rom.py位置
class FakeROM(MemoryDevice)此步骤存在的原因
在真正的卡带解析功能就绪之前,指令测试需要确定的程序字节。FakeROM 将最大 $8000-$FFFF 的 PRG 窗口建模为 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 不是真正的卡带映射器,它的写入方法并不意味着 NES 的 PRG ROM 是可写的。它只是受控的测试基础设施。
范围之外
- 将 FakeROM 映射到 CPU 地址
- iNES 解析
- 存储体切换(bank switching)
运行本课
uv run pytest tests/chapter_01_cpu/test_006_FakeROM.py -v