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