主机
NES(FC、红白机、小霸王)的系统架构可用下图表示:
系统中最核心的组件是 CPU,其它组件都可以算作 CPU 的外设。CPU 的外设包括:PPU(图像处理器)、APU(音频处理器)、WRAM(内存)、IO 设备(手柄、键盘等)、CART(卡带)。这些外设分别占据 CPU 地址空间中的一部分,CPU 通过设置 CPU 地址总线选中相应的外设,然后通过 CPU 数据总线与外设交换数据。CPU 与外设的这种通信方式也叫“内存映射 IO”,外设占用的地址空间可以到 nesdev 上查阅。
系统中第二核心的组件是 PPU。PPU 也有外设,它的外设包括:VRAM(视频内存)和卡带。PPU 和它的外设之间也采用“内存映射 IO”方式通信,PPU 的地址空间分配可以查阅 nesdev。
真实的 NES 上是看不到 APU 的,因为 APU 与 PPU 封装到了一起。在开发模拟器时,把它们当作独立的组件是没有关系的
卡带
上图中,卡带只是使用一个方框简单概括,实际上卡带也是一个复杂的设备。卡带即是 CPU 的外设,也是 PPU 的外设。它可以存储程序代码供 CPU 读取执行,可以存储图像资源供 PPU 使用,也可以为 CPU 提供额外的内存,甚至还可以提供额外的音频芯片、PPU。
根据卡带的电路板复杂性,可以粗略地把卡带分为简单卡带和复杂卡带。
简单卡带
简单卡带的内部结构如下图。
图中 PA 表示 PPU 地址线,PD 表示 PPU 数据总线,A 表示 CPU 地址线,D 表示 CPU 数据总线。可以看到简单卡带基本上直接从存储芯片中读写数据,其中存储芯片可以根据需求配置为不同大小。由于地址空间的限制,简单卡带上并不能存储太多内容。
复杂卡带
上图演示了一种复杂卡带的架构,可以看到最大的区别是多了一个叫 MMC 的组件。MMC 意为“内存管理芯片”,是一种可编程芯片,负责将 CPU、PPU 的地址映射到它管理的存储器中的某个区间。有了 MMC,CPU、PPU可以寻址更大的地址空间,卡带也可以存储更多内容。