SNES 图形系统工作原理
摘要
基于 Jonathon Donaldson 的原理图,对超级任天堂图形硬件的详细技术解释,包括 PPU1 和 PPU2 芯片、VRAM、OAM 和 CGRAM。
暂无内容
查看缓存全文
缓存时间: 2026/05/16 03:35
# SNES图形系统的工作原理
来源:https://fabiensanglard.net/snes_ppus_how/index.html
2024年8月9日
SNES图形系统的工作原理
---
上周的文章讨论了超级任天堂的视频系统如何馈送到电视的CRT。今天我将总结我对生成这些图形的硬件部分的理解。
一份宝贵的资源是Jonathon Donaldson的SNES原理图。如果你有一台大显示器,我建议花点时间全屏查看,以欣赏其全貌。
我觉得这原理图太美了,以至于我把它打印成A1尺寸并裱了起来!
初次接触
---
如果我们放大图形系统,会发现四个芯片。一个叫像素处理单元1 (PPU1),标号为5C77。另一个叫像素处理单元2 (PPU2),标号为5C78。剩下的两个是8位32KiB的SRAM芯片。
在后续的修订版中,任天堂将CPU、PPU1和PPU2融合成一个巨大的ASIC。这些1-CHIP版本更不容易出现故障,但带来了它们自己的一系列问题[1]。
架构
---
Jonathon用颜色代码对线路进行了分组,这样我们就可以将原理图转换成一张绘图。
仅仅通过观察标签,我们就能推断出很多信息。
- 我们可以在PPU2上找到上周提到的R、G、A和CSYNC,这表明视频信号是在那里生成的。很可能调色板也存储在那里。
- 用橙色表示,我们看到PPU1能够寻址VRAM。PPU2只能访问数据线(青色)。这表明PPU1是大脑,而PPU2扮演合成器的角色,负责繁重的工作。
- 用蓝色表示,我们不仅看到PPU1和PPU2之间的控制线,还看到一些似乎表明PPU1正在流式传输“像素”并与PPU2同步的颜色。
- 用洋红色和棕色表示,我们找到了系统的8位数据总线和8位地址总线。这表明CPU可以向两个芯片发送命令。
- 系统的其余部分无法直接访问VRAM。所有从系统总线到VRAM的写入操作都必须通过PPU1。
这种设计,一个芯片通过地址线做出决策,而合成器芯片盲目地显示数据线上传来的内容,类似于Capcom设计其街机CPS-1的方式,该芯片负责《街霸2》、《快打旋风》、《大魔界村》等许多游戏。
*Capcom的PPU,CPS-A和CPS-B(来自《CP系统之书》)*
RAM系统
---
图形系统中有三个RAM[2]。
- VRAM用于存储精灵资产、瓦片资产和瓦片地图[3]。
- 对象属性内存 (OAM) 定义了所有128个精灵的属性[4]。
- CGRAM用于存储256 x 15位颜色的调色板[5]。
SRAM基础
---
从PPU1到VRAM的地址线很奇怪。这不是标准布局。如果你对RAM芯片不太熟悉(像我一样),这里有一个快速总结来理解这种奇怪之处。
SNES中的VRAM芯片是LH5P832。数据手册描述了标准引脚排列。
- VCC:电源
- GND:地
- A0-A14:地址线 (2^15 = 32,768 = 32KiB)
- D0-D7:8位数据线
- CS:芯片选择,用于启用芯片进行读或写
- WE:写入芯片
- OE:从芯片读取
任天堂的工程师本可以构建一个系统,通过将两个RAM芯片串联使用,用PPU的A15来选择CS芯片。这会产生一个8位数据总线。
由于他们想要更高的吞吐量,他们本可以创建一个交叉存取来构建一个16位数据总线。
但他们比16位数据总线更进一步。他们创建了一个系统,其中RAM芯片可以被单独寻址……却共享了引脚A14。这是怎么回事?
如何访问VRAM
*Mode 7(《超魔界村》)*
这种奇怪设计的原因是,根据图形模式的不同,VRAM的访问方式也不同。
在Mode 0-6中,PPU1总是访问两个连续的8位值。这意味着每个芯片上的地址总线都持有相同的值。
在Mode 7中情况不同。因为在这种模式下,背景可以旋转和缩放(见右侧动画),数据访问不再是线性的。
由于PPU1无法再“预测”要访问的数据位置,并批量一次检索16位,因此它需要两个地址总线的灵活性。
此外,在Mode 7中,每个VRAM芯片只使用16KiB,这意味着A14始终设置为0[7]。
PPU1和PPU2内部
---
John McMaster于2020年10月对PPU进行了开盖和扫描[8]。
snesdev.org社区的成员已经开始识别区域[9][10]。
到目前为止,只有五个区域被确定。
- 512字节的OAM(对象属性内存,1和2)描述了场景中的精灵。
- 256 x 9位的行缓冲区(5和6)。在第二部分中了解行缓冲。
- 区域15中的480字节调色板颜色。
其中一些猜测似乎不对(CGRAM不应该是512字节吗?)。当我研究这个主题时,我很惊讶PPU内部的了解如此之少。鉴于SNES的普及,我原以为有时间和技能的人现在应该已经做完了。那位英雄尚未出现。
下一篇
---
在下一篇文章中,我们将研究瓦片地图和精灵是如何渲染的。
参考文献
---
^ [1] SNES 1CHIP的缺点 (https://racketboy.com/forum/viewtopic.php?t=46303)
^ [2] 超级任天堂:读写PPU内存 (https://snes.nesdev.org/wiki/Reading_and_writing_PPU_memory)
^ [3] SNES开发:瓦片地图 (https://snes.nesdev.org/wiki/Tilemaps)
^ [4] SNES开发:精灵 (https://snes.nesdev.org/wiki/Sprites#OAM)
^ [5] SNES开发:调色板 (https://snes.nesdev.org/wiki/Palettes)
^ [6] LH5P832数据手册 (https://fabiensanglard.net/snes_ppus_how/LH5P832.pdf)
^ [7] PPU1 VRAM,讨论VA14的用途 (https://forums.nesdev.org/viewtopic.php?t=25400)
^ [8] Twitter:S-PPU1 (SNES图像处理单元) (https://x.com/johndmcmaster/status/1322645441956044800)
^ [9] 识别PPU芯片照片的区域 (https://forums.nesdev.org/viewtopic.php?t=23927)
^ [10] 内部OAM地址精灵评估 (https://forums.nesdev.org/viewtopic.php?p=234414#p234414)
---
相似文章
SNES: 精灵与背景渲染
本文解释了SNES的PPU如何在紧张的VRAM带宽限制下渲染精灵和背景,描述了不同视频模式中的硬件权衡。
超级任天堂卡带内部揭秘
对超级任天堂卡带的详细技术分析,涵盖 CIC 复制保护、ROM 容量分布、带电池备份的 SRAM 以及 Super FX 等增强处理器。
剖析超级任天堂视频系统
从任天堂工程师的视角,详细探讨超级任天堂的视频系统设计,解释CRT技术与工程选择。
Super Nintendo 的核心
对 Super Nintendo 中时钟生成硬件的详细分析,解释了用于产生所需频率的两个振荡器和可调电容器。
Super Nintendo主板的发展历程
本文详细介绍了Super Nintendo主板在12年生命周期中的版本演变,重点描述了任天堂如何通过Classic、APU和1-CHIP等世代将芯片数量从15个减少到9个。