002. RAM 读写
实现原始的 2 KiB RAM 存储。
第 2 / 356 · tests/chapter_01_cpu/test_002_ram_read_write.py
需要更新的文件
emulator/memory/ram.py位置
class RAM此步骤存在的原因
NES 拥有 2 KiB 的内部 CPU RAM。该类只负责物理字节存储;CPU 总线将在下一课引入地址镜像。
完整示例实现
from dataclasses import dataclass, field
@dataclass
class RAM:
_data: bytearray = field(
default_factory=lambda: bytearray(0x800),
init=False,
)
def write(self, addr: int, value: int) -> None:
self._data[addr] = value
def read(self, addr: int) -> int:
return self._data[addr]重要不变量
- 存储区恰好包含 0x800 字节
- 写入会改变从同一物理地址读取到的字节
- RAM 不会转换或镜像 CPU 地址
常见误解
RAM 不需要理解地址 $0800、$1000 或 $1800。这些是 CPU 总线为物理 RAM 建立的别名,属于测试 003 中引入的映射机制。
范围之外
- 统一的内存设备接口
- ROM 存储
- CPU 总线路由
运行本课
uv run pytest tests/chapter_01_cpu/test_002_ram_read_write.py -v