说了这么多,让我告诉你们,这款游戏机的图形子系统是真正的工程杰作。 在CPU如此有限的情况下,我们可以想象,SNES绝不可能与采用"32位"摩托罗拉68000的竞争对手相提并论。 然而,任天堂和理光的工程师们设法找到了巧妙的技巧,利用CRT显示器的行为方式,从而在不需要昂贵的先进组件的情况下扩展了这款游戏机的功能
无论如何,在我们深入探讨之前,我强烈建议您先阅读NES的文章,因为它介绍了一些有用的概念,我们将在这里重新讨论这些概念。
设计
与同时代的其他游戏机一样,超级任天堂使用2D图块(8 x 8像素)绘制图形。 NES 最初是通过捆绑标志性的"图像处理单元"(PPU)来实现这一功能的,该单元与CRT屏幕同步传输图像。 超级任天堂紧随其后,但它现在采用了更复杂的技术,以获得更丰富的效果。
芯片组
超级任天堂内置两块不同的PPU芯片,构成图形子系统,合并后称为超级PPU或"S-PPU"。
这两个PPU被设计用于实现不同的功能:
- PPU 1: 渲染图形(图块) 并在它们上应用变换(旋转和缩放)。
- PPU 2: 在渲染图形上提供像 窗口、马赛克 和 淡出 的效果。
从编程角度看,这种分离是多余的,因为两个芯片实际上被视为一体。
显示模式
系统以~60 Hz(NTSC)[9]输出256x224像素的标准分辨率。 欧洲PAL制式则以约~50 Hz的频率输出256×240像素(以符合 PAL 制式规格)。 尽管如此,大多数游戏并不使用额外的像素,而是显示"letterbox"(黑线)。
现在,棘手的问题来了,传统电视的宽高比是 4:3。 但如果你算一下,会发现超级任天堂的输出分辨率长宽比为8:7。 因此,将图像传输到电视上后,它看起来会被水平拉伸,就好像是一个292x224像素的画面(NTSC制式) 。 换一种说法,可以说超级任天堂上的像素长宽比是8:7,而不是 "完美的正方形"。

分辨率为256x224像素的渲染帧。 这就是游戏机发送到电视上的图像。
任天堂选择偏离标准屏幕比例的根本原因在于成本。 通过分析可见,S-PPU芯片虽然功能丰富,但其渲染速度却跟不上CRT显像管的电子束扫描速率。 为此,任天堂并未选择增加电路板元器件,而是通过缩短可视画面长度,将节省出的时间用于水平消隐周期。
值得注意的是,像时空之轮(Chrono Trigger)等少数游戏专门对此进行了优化——开发者刻意将画面元素设计为压缩状态,经电视机拉伸后即显示正常比例。 但这只是一个特例,因为大多数游戏都没有采取额外的措施来考虑这一因素。
硬件组织
由于成本和性能原因,图形数据分布在三个内存区域:
- 64 KB VRAM (视频 RAM):存储图块和用于构建背景图层的映射 (表格)。
- 512 B CGRAM (彩色图形RAM):存放512个彩色调色板条目,每个条目的大小为 一个word (16位)。
- 544 B OAM (Object Attribute Memory):包含128个将被用作登记精灵 及其属性的查找表。
构造画面(frame)
现在让我们看看如何在游戏机上渲染画面,然后在电视上显示。 我们将以超级马里奥世界为例进行演示。
图块
与前代产品一样,S-PPU使用图块来构建复杂的图形。 不过,与最初的PPU相比,S-PPU有了重大改进:
- 游戏卡带不再与PPU连接,因此图块必须先复制到VRAM(就像世嘉的Mega Drive一样)。 这时,DMA单元就派上用场了。
- 图块不再局限于传统的尺寸(8x8像素),从现在起,它们的大小也可以达到16x16像素。
- 图块存储在内存中时,将根据每个像素需要使用的颜色数量进行压缩。 大小单位是bpp(位每像素)。 最小值为2bpp(每个像素只占用内存中的两位,且只有4种颜色可用),最大值为8bpp,最多可编码256种颜色(代价是占用一整个字节)。
背景
VRAM中的背景映射应用选区和透明度后渲染的背景图层超级任天堂可以生成多达四个不同的背景层。 通过使用8x8或16x16图块,区块由32x32像素(2x2 图块)构成。 尽管如此,每个背景图层的大小最多可达到1024x1024像素(32x32的图块)。 VRAM 中配置这些图层的区域称为 图块映射区(Tilemap) 并且这一部分的结构是表格(内存中的连续数值)。
Tilemap 中的每个条目都包含下列属性:
- 垂直 & 水平翻转值。
- 优先级(
0或1)。 - 从CRAM调用的调色板引用.
- 图块引用。
一如既往,这些平面是可滚动的,但可用功能的数量(颜色、层数、独立滚动区域和选区大小)将取决于S-PPU上激活的背景模式,这就引出了下一部分...
模式
S-PPU提供了许多背景操作,但这些操作不能任意选择。 相反,有八种背景模式可供选择,每种模式提供不同的功能:
- 模式0: 4个图层,每层可用4种颜色。
- 由于只有这种模式允许最多的图层,所以调色板的颜色特别平淡。
- 模式1: 2个图层,每层可用16种颜色,再加上1个只支持4种颜色的图层。
- 那个支持颜色少的图层可以分成前景和背景。
- 这是最常用的模式。
- 模式2: 2个图层,每层可用16种颜色。
- 该模式具有额外的效果: 图层的每一列都可以独立滚动(类似于Game Boy的效果,但垂直滚动)。
- 模式3: 1个可用128种颜色的背景层,与1个可用16种颜色的背景层。
- 颜色可以使用设置 RGB 值指定,而不是使用 CGRAM 引用。
- 模式4: 模式2和3的组合(列滚动+RGB颜色映射)。
- 第一层可用128色,第二层仅能使用4色。
- 模式5: 1个可用16色的图层,与1个仅能使用4色的图层。
- 所选区域的分辨率为512x224像素,将被水平压缩以适应屏幕(输出帧仍为256x224像素!)。 这样做的代价是将16x8像素的图块渲染为8x8的图块,将16x16像素的图块渲染为8x16的图块。
- 此外,还可以通过激活隔行扫描来扩展垂直分辨率(达到512x448 像素,现在与输出尺寸成正比)。 作为交换,同样的压扁效果也会影响到图块,但现在也是垂直的。 这对于屏幕需要显示额外信息量的情况(如多人游戏/分屏)非常有用。
- 模式6:模式2和5的组合(高分辨率+纵列滚动),但只允许使用一个32色图层。
如您所见,程序员现在可以选择所选区域的颜色、层数、效果或分辨率的优先级。
精灵
内存中一个名为对象属性内存(OAM)的区域存储了一个表,其中最多可引用128个具有这些属性的精灵:
- 大小: PPU最多可将16个小图块以4x4图块象限的形式组合起来,形成一个精灵。
- 图块引用: 该值指向用于绘制精灵的图块。
- 屏幕位置。 只有位于可见区域内的精灵才会被渲染。
- 优先级: 由于多个图层相互重叠,因此将显示优先级最高的图形,这也取决于正在使用的背景模式。
- 调色板插槽,允许从CGRAM中选择9个插槽。
- X/Y 翻转。
S-PPU每扫描线最多可绘制32个精灵,如果溢出,S-PPU只会丢弃优先级最低的精灵。
结果
S-PPU在绘制每条扫描线时,首先处理每一层的相应部分,然后将它们混合在一起。
NES游戏的主要限制之一是只能在垂直消隐(V-Blank)期间更新图形。 显像管的光束从起点返回的那一刻提供了一个合理的时间帧,可以在不破坏图像的情况下重新调整一些图块。
现在,得益于SNES的新功能,这一限制有了不同的意义。
因为新的DMA/HDMA单元现在可以让程序员在不等待垂直扫描(V-Scan)的情况下执行内存传输,游戏现在可以更新图块、颜色和寄存器,而无需等待整个画面绘制完成。 事实上,我们可以做得更多: 由于游戏现在可以在帧中改变S-PPU设置,这就意味着可以在同一帧的不同阶段激活不同的背景模式,为新颖的游戏设计打开了大门!
那个特点
说实话,我还没有提到这个控制台最重要的特性...

屏幕上显示的已渲染的一帧
扫描线的第一部分使用另一种模式来模拟距离,模式7则从第二部分开始(这要归功于HDMA)。
介绍一下模式7,这是另一种背景模式,但这次的工作方式完全不同。 虽然它只能渲染一个8bpp的背景层,但却能在该平面上应用以下仿射变换:
- 平移
- 缩放
- 旋转
- 反射
- 剪切
S-PPU由旋转矩阵控制,以改变该模式的参数。 这里就不多讲线性代数了,但根据所需的效果,CPU必须执行一些三角函数(正弦和余弦),以相应地填充该表的条目。 对于65C816来说,即使使用定点精度,这也是非常昂贵的。 因此,理光在5A22中增加了乘法和除法寄存器,以卸载一些周期。
顺便提一下,请注意变换列表中没有提到透视,而这正是您在示例游戏(F-Zero)中所看到的。 这是通过在每次调用HDMA时改变旋转矩阵来实现的,在此过程中产生了伪三维效果。 这应该能让你对S-PPU的实用性有所了解!
最后,由于需要进行大量计算,内存映射发生了变化,以优化两个PPU的流水线,第一个PPU处理图块映射(图块被引用处),而另一个PPU则获取图块集(图块被存储处)。
帧数下降的原因
还有一个话题,你有没有想过游戏卡顿的原因? 当调用垂直消隐中断允许图形更新时,有时游戏仍在执行一些繁重的代码,并跳过了垂直消隐窗口,直到下一次调用垂直消隐时图形才能更新,由于帧没有更新,这就表现为帧速率下降。
这种情况也可能反过来发生,垂直消隐期间的大量处理将使PPU无法输出视频信号(因为总线被阻塞)。 因此,在扫描过程中会出现黑线,不过由于帧每秒更新50或60次,这种情况几乎不会引起注意。
方便的视频输出
如果游戏机不能通过双方都能理解的媒介将图像传送到电视上,那么上述所有进步都将是徒劳的。 随着超级任天堂的推出,该公司首次推出了一种名为"多路输出"的通用但专有的连接方式,它可以同时传输多种类型的信号,包括复合信号、S-Video和RGB。
任天堂随游戏机附赠了一条"多路输出转复合接口"电缆,因为这在当时几乎是电视机的通用规格。 但在欧洲,SCART端口也非常流行,因为许多机顶盒和录像机都依赖它。 SCART端口的一大优点是可以传输多种类型的信号,这使得AV设备可以使用最理想的信号类型,而不会遇到兼容性问题。 据我所知,当时只有法国消费者获得了官方提供的SCART电缆,该电缆利用了超级任天堂的RGB针脚。
尽管如此,任天堂还是修改了其PAL制式游戏机的引脚布局,以符合SCART协议,并将 "复合同步" 引脚换成了12V引脚(告诉电视机设置4:3宽高比)。 因此,尽管多路输出是"通用"的,但由此产生的RGB电缆(如果有的话)却是因地区而异的。
我认为,多路输出的真正优势是在当代开始显现的,因为它允许用户在修改游戏机内部结构的情况下,向最先进的电视机输出RGB信号。 不过,与复合视频和S-Video不同,RGB需要额外的"同步"信号。 为此,可以将电缆连接起来,从复合端口或S-Video捕捉同步信号;或者使用称为 "复合同 "的专用同步线,以获得最佳效果。 但如上段所述,只有NTSC制式游戏机才使用后者。













