世嘉土星硬件架构

Rodrigo Copetti 的实用分析

这是原文的志愿翻译。如果您发现任何错误,请帮助改进。谢谢!

如果您使用无障碍阅读工具、电子书或旧版浏览器,切换到“经典”版




相关影像

型号

Image
世嘉土星,1994年11月22日在日本发行
Image
世嘉土星,1995年5月11日在美国发行,1995年7月8日在欧洲发行

主板

Image
主板
显示“VA8”版本,其中包括单板中的所有组件。
剩余的RAM芯片安装在背面
Image
带有重要部件标签的主板

图示

Image
主架构图

一个简短的介绍

欢迎来到3D时代! 嗯…某种意义上是这样。 世嘉在Mega Drive上取得了相当大的成功,因此没有理由强迫开发人员现在就开始编写3D游戏。

不过以防开发人员想要额外的维度,世嘉也调整了一些硬件来启用多边形绘制。 希望结果不会失控!


中央处理器 (CPU)

正如其紧密的竞争对手在 RISC 热潮中被各种选择淹没一样,世嘉也不得不经历选择新供应商的所有难题,这个供应商能够带来下一代游戏(包括那些具有“3D”功能的游戏)。 最后,该公司选择了一个新的CPU,其创造者正在拼命寻找采用者,即日立的 SuperH或“SH”。

虽然最初专注于嵌入式应用,但日立的新产品展示了现代技术,例如 [1]:

此外,SuperH具有一个名为SuperH ISA的新指令集,除了采用RISC设计外,它的所有指令都是16位宽的。 这令人惊讶,因为这款 CPU 是 32 位的,所以正常情况会预期指令具有相同的长度。 然而,日立设法用一半的尺寸来适应它的ISA。 这种格式不仅减少了程序的大小,而且由于CPU以32位批量获取指令,可以在一个周期内检索到两条指令。 总的来说,这种压缩指令集的技术有助于解决基于RISC的体系结构的一个常见问题,称为“代码密度”,后者则需要更多的指令(当然,更多的内存)来执行与非RISC系统相同的任务。

分支

与之相反,RISC设计的其他缺点在SuperH中仍然存在,例如控制危害。 因此,程序需要包含分支延迟槽以避免计算错误。 为了解决问题,SuperH具有延迟分支指令,这些分支指令预装有延迟槽[3]

数据危害也存在,但程序员或编译器没有解决,CPU会在需要时自动停止管道处理。

世嘉不满意

然而,所有这些都没有阻止世嘉对最终产品表示不满。 这主要是由于16位乘法器较小,这在处理大量数据时被视为瓶颈(3D游戏的新需求)。 因此,日立将第二个修订版与扩展的乘法器单元和世嘉清单[4] 上的其他要求相结合,从而产生了一个名为SH-2的新CPU。

Image
在世嘉土星中发现的两块SH-2芯片

即便如此,世嘉在听到其竞争对手选择的CPU后还是坐不住了。 因此,世嘉要求日立提高SH-2的时钟频率——一旦芯片已经投入生产,这就是一项不可能完成的任务。 幸运的是,日立还有另一个锦囊妙计:多处理器。 在SH的研究阶段,该团队添加了最小电路,以允许SH同时与同一系统内的其他SH一起工作。 听到这个消息后,世嘉决定为世嘉土星采用双芯片的配置。 其余就是些老黄历了。

最终产品

说完了来历,我们再来看看出货的产品。

这款游戏机采用了不是一个而是两个日立 SH-2的CPU,每个CPU运行在~28.63 MHz的频率 [5]。 虽然两者在物理上相同,不过它们被设置成主从状态,其中第一个可以向第二个发送命令。 这可以实现一定程度的并行性,尽管两者共享相同的外部总线[6](这可能导致拥塞)。

日立包装了SH-2的不同变体,并将它们作为“SH7600”系列的一部分出售。 具备所有这些特性[7]

为该游戏机选择的特定芯片“SH7604”包含以下附加内容[8]

值得指出的是,拥有两个CPU并不意味着游戏的运行速度会提高一倍!而且在实际情况中,需要非常复杂的编程来有效地管理共享同一总线的CPU。 因此,如何有序使用缓存在这款游戏机中也起着关键性的作用。

分裂的内存选择

世嘉土星总共包含2 MB的RAM用于通用用途,称为工作RAM(WRAM)。 现在,这两兆被分成两个非常不同的块:

第三个处理器(甚至更多)

令人惊讶的是,这两个SH-2 CPU似乎对世嘉来说还不够。 因此,为了加速矢量处理(以更复杂为代价),游戏机还容纳了一个额外的协处理器,即土星控制单元或“SCU”。

这是一个由两个模块组成的芯片[9]

好的一面是,SCU带有32 KB的SRAM供自身使用。 不好的一面是,SCU无法访问WRAM-L。


图形

由于土星是本系列(译注:世嘉的行星计划)的第一个“3D游戏机”,让我们首先回顾一下新一代3D图形的基本设计变化:

世嘉拿出来的东西

该游戏机包括两个专有GPU,每个GPU在同时工作时服务于不同的目的。 有些人可能会争辩说,新的GPU是经典VDP的演变,而另一些人可能会说这是完全重新设计…… 我认为两者都有点对。

说完了这些,我们再来看看两款芯片。

VDP1

Image
VDP1 架构。

视频显示处理器1(VDP1)是一款使用几何变换绘制精灵图的芯片[10]。 结果被写入帧缓冲区,帧缓冲区又被流式传输到VDP2进行显示。

该芯片通过向其发送“绘图命令”进行编程。 因此,为程序员提供了512 KB的专用RAM来存储这些绘图命令和所需的材料(纹理/图块、颜色查找表等)。

因此,VDP1 被设计为使用 四边形作为基本图元,这意味着它只能使用 4 顶点多边形(精灵图)来构成模型。 该芯片应用 正向纹理映射 将纹理点连接到四边形上,沿着那个方向。 它不附带任何滤波/插值技术,因此计算容易出现混淆现象

VDP1还提供了以下效果选择:

  • 两种 着色算法(平面和高洛德)用于光照效果。
  • 抗锯齿:在这种情况下,它复制像素以覆盖映射期间的间隙。
  • 裁剪用于丢弃相机视口外的多边形。
  • 透明度混合两个非不透明位图。

两个256 KB帧缓冲芯片可用于同时绘制游戏的新场景,而不会破坏当前显示的场景。 当辅助缓冲区绘制完成时,VDP1(视频显示处理器1)开始广播这个缓冲区,这一过程称为页面翻转。然后这个继续循环进行。

VDP2

Image
VDP2 结构。

视频显示处理器2(VDP2)专门渲染大的(4096×4096像素)平面,并对其应用变换(旋转、缩放和平移)[11]

更重要的是,VDP2的工作方式是在运行时即时渲染(没有帧缓冲区),就像之前的基于图块的引擎一样。 它可以显示多达1670万颜色(24位)。 该芯片还负责显示VDP1的缓冲区,也可以转换和/或与VDP2的层混合。 VDP2 的「画面」由最多四个 2D 平面和一个 3D 平面组成;或者两个 3D 平面。

这个芯片依赖于 图块地图来构成平面,并为 3D 纹理映射执行透视校正,这是一种更为复杂的方法,它考虑到深度值来计算旋转。

可用的效果包括多纹理(每个多边形映射多个纹理)和阴影。 对于后者,在VDP2接收到VDP1产生的精灵图后,它可以降低它们的亮度并将它们与半透明混合。 尽管如此,VDP2仅从VDP1接收精灵图流(与CRT光束同步),因此此功能在编码和操作上往往很棘手。

该芯片还包含4 KB的颜色RAM(CRAM),用于将VDP1的自定义颜色值(索引颜色)转换为24位RGB颜色。

最后,即使VDP2仅限于两个3D平面,也没有什么可以阻止CPU使用其VRAM作为帧缓冲区在软件中绘制额外的2D或3D图形。

如果本节引起您的注意,我建议您查看来源(在文章末尾),因为VDP有更多超出本文范围的怪癖。

明确问题

正如你所见,图形子系统的架构相当复杂,因此根据不同的需求会有不同的解释:

作为强大的2D游戏机

Mega DriveSNES相比,土星绘制2D场景的能力是巨大的,尽管这并不是这款游戏机的主要卖点。

精灵图

Image
洛克人 X4 (1997).
VDP1 的精灵图版

在这种情况下,VDP1的任务是绘制传统精图灵,而不应用任何3D失真。

CPU通过写入其寄存器并用命令和图块填充其VRAM来设置VDP1。 由于DMA控制器,该过程也可以加速。

背景

Image
2D平面1。
Image
2D平面2。
Image
2D平面3。
洛克人 X4 (1997)。 VDP2的背景平面。

然后指示VDP2绘制背景平面。 这些与精灵图层一起自动混合以形成全彩色场景。

命令部分与VDP1基本相似:程序员有寄存器和VRAM进行相应的设置。

VDP2的一些功能可以用来创建更逼真的风景,例如缩放以模拟热浪(参见“2D平面2”)。

结果

Image
洛克人 X4 (1997)。 混合平面(塔达!)。

没有太多神秘之处,VDP2负责将处理后的信号发送到视频编码器的最后一步。

VDP2与CRT光束同步运行,这意味着它的计算对应于将在下一条扫描线上显示的像素。

作为具有挑战性的3D游戏机

这才是土星同时闪耀和挣扎的地方。 虽然这个游戏机有八个处理器可以利用,但这一切都受制于:

出于这个原因,大多数游戏最终在质量上差异很大,因为每个工作室都想出了自己独特的解决方案。

3D建模

Image
Vr战士 Remix(1995)。
没有纹理或背景的角色3D模型。 请注意用于构建模型的基本图元。

到目前为止,我们一直在使用单个正则四边形来形成精灵图和/或背景层。 但是如果我们将多个不规则图元分组并将它们排列成一个更复杂的图形呢? 这就是3D模型如何实现的。

简单来说,像超级任天堂这样的经典2D游戏机将它们的图形(背景和精灵图)排列在准矩形区域。 在某些情况下,例如使用Mode 7,程序员可以提供一个旋转矩阵来对其中一些区域应用转换。 相比之下,土星允许定义四边形的4点,边缘之间有任意角度(世嘉称之为“扭曲精灵图”)。 然后,VDP的纹理映射功能用纹理绘制四边形的区域,后者被缩放以符合多边形的形状。

就3D游戏所需的操作而言,CPU和SCU被分配来制定3D世界并将其投影到2D空间中。 然后,命令两个VDP渲染它,应用效果,最后在电视上播放。

像素处理

Image
Vr战士 Remix(1995)。
使用3D模型和背景渲染场景。

VDP可以绘制这个新的(投影的)3D空间并标记纹理和效果。 现在,每个游戏中“负责”的芯片各不相同。

一些人优先考虑VDP1来绘制最近的多边形,并让VDP2处理远处的风景,另一些人找到了有趣的变通方法来让VDP2绘制更接近的多边形(从而降低输入VDP1的几何数量负载)。 而挑战在于设计一个高效的引擎,它可以显示令人印象深刻的图形,同时还能保持可接受的帧率。

新的设计

这些是为这个游戏机重新设计的角色的一些示例,模型是交互式的,所以请尝试调试它们!

线框表面纹理
3D model
索尼克在索尼克竞速(1997)。
185四边形。
线框表面纹理
3D model
泰尔斯在索尼克竞速(1997)。
254四边形。

虽然土星只能绘制四边形,但你很快就会注意到,在“线框”模式下,这些模型展示了两个三角形,而不是一个四边形。 这是因为用于编码此模型的格式(glTF,一种现代 3D 建模的开放标准)在撰写本文时,并不支持四边形,所以你的现代设备无法渲染它。 因此,我建议切换到“表面”模式来观察这些四边形。

从某种意义上说,这告诉了我们当今的图形技术在重现其约 30 年前的前辈时可能会遇到的困难!

可见性问题简介

当3D多边形投影到2D空间时,确定哪些多边形从相机位置可见,哪些是要隐藏的[12] 是一个至关重要的问题。 否则,模型将不能被正确地绘制,像透明这样的效果会显得“破损”,并且最终会浪费硬件资源。 这个过程被广泛称为可见表面确定或“VSD”,它是计算机图形学领域的一个基本问题。 有关这个问题已经有很多发表了的论文,描述了在图形管道的不同阶段解决这个问题的算法。 其中一些给出了非常准确的结果,而另一些则以精度换取更好的性能。

不过,与学术/专业设备不同,消费硬件非常有限,因此算法的选择范围缩小到只有几个…或者什么都没有。

Image
Project Z-Treme(2019,Homebrew)[13]
该引擎放弃了Z-sor,转而采用二进制空间分区(BSP)方法,修复了故障。

我认为世嘉土星的方法是一个“半解决”的案例。 VDP1没有实现任何VSD功能:你必须按照正确的顺序输入几何数据,否则就会得到一团乱麻的结果。 然而,世嘉提供了一个名为“SGL”的图形库,该库实现了一个名为Z轴排序画家算法[14] 的解决方案,该解决方案通过软件执行多边形排序

本质上,SGL分配一个缓冲区来根据与相机的距离(从最远到最近)对多边形进行排序,然后按该顺序向VDP1发出显示命令。

使用3D空间进行Z轴排序的问题之一是其距离值(Z轴顺序)是近似的,因此仍然可能出现图形故障。 为此,程序员可以跳过SGL,转而实现自己的算法。

在后面的文章中,您将看到替代方法。 有些仍然依赖软件,而有些则由硬件加速。

透明度问题

世嘉土星能够绘制半透明图形,换句话说,混合重叠的颜色层(混合),给我们一种可以看穿它们的错觉。 不幸的是,两个VDP并不像人们期望的那样协调,因此当在不同的VDP中发现这些层时,这种效果将无法正常工作。

作为一种解决方法,游戏可以激活纹理上的“网格”属性。 使用“网格”纹理,VDP1将奇数X/Y纹理坐标设置为“透明”(空)。 使得使用透明像素混合其他层成为可能。 奇怪的是,如果游戏机使用复合视频信号(当时除了射频之外,这几乎是标准)连接到电视上,网格会显得模糊不清,从而导致一种偶然但有效的方式来实现半透明[15]

正如你怀疑的那样,这对一些游戏来说是不起效的,所以最终,这些游戏别无选择,只能完全放弃半透明… 虽然一些工作室发现了巧妙的修复手段,可以看看这两个案例:

世嘉的梦游美国(1993)。
Traveller’s Tales的索尼克竞速(1997).
两款游戏都命令VDP1绘制前景物体和背景风景。 反过来,VDP2渲染远景图像和3D模型前面的统计数据。 因此,具有半透明的VDP1模型不会折射VDP2的景观,因为VDP1不知道VDP2的帧缓冲区。

除了我糟糕的游戏技巧之外,你会注意到第一个游戏的背景是从无到有突然出现的(没有半透明效果),而第二个游戏不仅实现了半透明,还实现了渐隐效果:Traveller’s Tales找到了一个解决方法,通过改变VDP2的“混合比例”寄存器(用于定义纹理的alpha值)并结合随着角色靠近时切换光照级别[16]


音频

声音子系统由几个部分组成[17]

机会

新的音频能力意味着工作室终于可以在内部录制/制作音轨,然后直接将其打包进游戏中,而无需重新编排(就像以前受限于音序器或是有着严格合成方法的芯片时所发生的情况)。

这要归功于许多因素的结合:


操作系统

用户开启游戏机电源后,首先启动的组件是系统管理和外设控制(SMPC),这是一个4位微控制器,负责初始化相邻的芯片(例如开启两个SH-2并设置它们为主从配置)[18]

Image
日版
Image
欧和美版
启动动画结束后显示标志。

之后,主SH-2的重置向量设置为0x00000000[19],它指向包含初始程序加载器(IPL)的内部ROM。 该程序执行以下功能[20]

  1. 完成硬件初始化。
  2. 如果有卡带插入并且其中包含程序,则继续从那里启动。
  3. 如果插入了“视频CD”卡,就直接引导
  4. 如果插入了光盘,先检查它是否是正版。
    • 同时,它显示启动画面动画。
  5. 如果光盘是正版的,启动游戏。
  6. 如果光盘不是正版的或没有插入光盘,跳转到主交互界面。

交互界面

除了玩游戏之外,Saturn还包括了一个名为“多玩家”的音乐播放器,从中可以打开一个存档管理器。

Image
称为“多玩家”或“音频CD控制面板”的交互式界面。
Image
内存管理。 在卡带和内部存储器之间移动保存。

如果插入了Video CD卡,播放器可以再现从卡本身解码的MPEG视频。

没有BIOS?

PlayStation不同,其ROM芯片捆绑了BIOS,这反过来又暴露了API供程序员使用。 土星的ROM通常被称为“IPL”,大概是因为它的主要工作是引导游戏并运行主界面。 但是,后者仍然存储一些例程(称为服务)来操作硬件(例如管理保存数据和电源控制)。 它甚至实现了一个“信号量”! (用于同步同时涉及多个处理器的操作)。 因此,ROM的那一部分称为系统程序


游戏

官方世嘉土星游戏从2x CD-ROM驱动器加载。 它的介质光盘(CD)容量为680 MB,世嘉土星游戏遵循ISO 9660存储数据的标准[21]。 此外,许多游戏将音轨存储在数据轨道旁边,以便在执行游戏时流式传输未压缩的音频。

光盘(CD)

CD是一种光学介质,在其聚碳酸酯表面上通过刻录凹坑平地来存储信息[22]。 然后,读取器发出红外光,CD表面产生的反射用于读取信息。

将数字信息(1和0)转换为凹坑和平地,反之亦然,这一过程无论如何都不简单,特别是要求光盘必须足够坚固,能够承受日常损坏和密集使用;并且足够可靠,能够存储任何类型的信息,而不必担心数据丢失。 因此,根据其规范,数据采用非归零反相(NRZi)模型进行编码,这意味着比特流将全部是零,直到检测到从平地到凹坑或从凹坑到平地的变化,此时会附加一个1

这种设计在读取器遇到一串连续的1(连续的凹坑和平地变化)或长串的0(恒定的凹坑或平地)时仍能良好工作,但在这些情况下,传感器会难以检测或保持同步。 因此,又采用了另一种称为八到十四(ETF)调制的附加模型。 有了这个,在编码之间填充了几个零,这些零在读取过程中有助于传感器读取。

除此之外,还可以添加进一步的错误检测机制,尽管这些超出了本文的范围。 如果您有兴趣了解更多信息,您可以查看亚琛工业大学[23] 的幻灯片演示。

开发

起初,世嘉没有提供完整的软件库和开发工具(事实上,最初的文档还是不准确的),所以获得良好性能的唯一方法是通过苛刻的汇编。

后来,世嘉发布了完整的SDK、硬件套件和一些库,以简化I/O和图形操作。 总体而言,游戏是用C和针对单个组件的各种程序集的混合编写的。

I/O

外设管理和实时时钟也是由上述的系统管理和外设控制(SMPC)提供的。 SMPC由SH-2发送的命令控制。

扩展方法

这款游戏机捆绑了大量的外部连接器和接口,但这些连接器和接口最多只得到了少量的应用。


反盗版和自制软件

为了应对复制光盘的便利性,土星增加了一个复制保护系统(以及区域锁定)来控制游戏的分发。

光盘上的复制保护是通过刻录传统刻录机够不到的特殊数据(称为“系统区域”)来实现的,如果找不到够不到的数据或数据无效,土星拒绝将光盘作为“游戏光盘”启动。 光驱还包含一个自定义SH-1处理器,该处理器使用模糊协议与游戏机的其余部分交互。

值得一提的是,由于土星CD遵循ISO9660(CD数据的标准文件系统),PC可以毫无问题地读取游戏光盘(但是,当然,除非使用模拟器,否则它们无法执行游戏)。

击败

首先,用于禁用复制保护的经典方法包括安装一个自制芯片,当插入刻录光盘时,它可以欺骗CD光驱。 还有一个“换盘大法”,就是在保护检查通过后立即用烧录的光盘热替换正版光盘……但这有可能会损坏光驱!

世纪之交之后,发现了用于运行未经授权代码的替代但更复杂的方法,例如:


这就是全部了,伙计们。

Image
我购入的一台日本版土星游戏机,以便为这篇文章获取更多素材。 虽然游戏看起来不错,但正是得益于土星庞大的自制软件库,我才得以理解这台游戏机真正的实力。

参与贡献

这篇文章是 游戏主机架构 系列的一部分。如果您觉得我的文章很有趣,请考虑捐赠。您的资助将用于购买工具和资源,以帮助我提高现有文章和即将发表的文章的质量。

Donate with PayPal
Become a Patreon

你也可以购买英语版本的电子书。我会将获得的利润视为捐赠。

Image

在这里追踪本文所需工具和最新购置情况:

### Acquired tools used

- A JAP Saturn console with a controller and a ODE installed (£280, luckily a one-time investment)

或者,您可以通过 建议更改添加翻译 来提供帮助。


Copyright and permissions

This work is licensed under a Creative Commons Attribution 4.0 International License. You may use it for your work at no cost, even for commercial purposes. But you have to respect the license and reference the article properly. Please take a look at the following guidelines and permissions:

Article information and referencing

For any referencing style, you can use the following information:

For instance, to use with BibTeX:

@misc{copetti-saturn,
    url = {https://www.copetti.org/zh-hans/writings/consoles/sega-saturn/},
    title = {世嘉土星硬件架构 - 一份实证分析},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "世嘉土星硬件架构 - 一份实证分析", Copetti.org, 2019. [Online]. Available: https://www.copetti.org/zh-hans/writings/consoles/sega-saturn/. [Accessed: day- month- year].
Special use in multimedia (Youtube, Twitch, etc)

I only ask that you at least state the author’s name, the title of the article and the URL of the article, using any style of choice.

You don’t have to include all the information in the same place if it’s not feasible. For instance, if you use the article’s imagery in a Youtube video, you may state either the author’s name or URL of the article at the bottom of the image, and then include the complete reference in the video description. In other words, for any resource used from this website, let your viewers know where it originates from.

This is a very nice example because the channel shows this website directly and their viewers know where to find it. In fact, I was so impressed with their content and commentary that I gave them an interview 🙂.

Appreciated additions

If this article has significantly contributed to your work, I would appreciate it if you could dedicate an acknowledgement section, just like I do with the people and communities that helped me.

This is of course optional and beyond the requirements of the CC license, but I think it’s a nice detail that makes us, the random authors on the net, feel part of something bigger.

Third-party publishing

If you are interested in publishing this article on a third-party website, please get in touch.

If you have translated an article and wish to publish it on a third-party website, I tend to be open about it, but please contact me first.


来源 / 继续阅读

反盗版

音频

CPU

游戏

图形

操作系统

影像


Rodrigo Copetti

Rodrigo Copetti

希望你能喜欢这篇文章!如果想了解本文作者的相关信息,点击这里 如果你想支持他,请点击这里

rsslinkedintwittergithub facebookreddit