SNES 图形系统工作原理

Fabien Sanglard 新闻

摘要

基于 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: 精灵与背景渲染

Fabien Sanglard

本文解释了SNES的PPU如何在紧张的VRAM带宽限制下渲染精灵和背景,描述了不同视频模式中的硬件权衡。

超级任天堂卡带内部揭秘

Fabien Sanglard

对超级任天堂卡带的详细技术分析,涵盖 CIC 复制保护、ROM 容量分布、带电池备份的 SRAM 以及 Super FX 等增强处理器。

剖析超级任天堂视频系统

Fabien Sanglard

从任天堂工程师的视角,详细探讨超级任天堂的视频系统设计,解释CRT技术与工程选择。

Super Nintendo 的核心

Fabien Sanglard

对 Super Nintendo 中时钟生成硬件的详细分析,解释了用于产生所需频率的两个振荡器和可调电容器。

Super Nintendo主板的发展历程

Fabien Sanglard

本文详细介绍了Super Nintendo主板在12年生命周期中的版本演变,重点描述了任天堂如何通过Classic、APU和1-CHIP等世代将芯片数量从15个减少到9个。