MD 架构

Rodrigo Copetti 的实用分析

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

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




相关影像

型号

Image
日版于
1988年10月29日发售
Image
美版于
1989年8月14日发售
Image
欧版于
1990年9月发售

主板

Image
主板
日版“VA0”修订版。
请注意位于视频显示处理器顶部的非同寻常的子板,该子板用于修复出厂后出现的问题(在后续修订版中已妥善修正)。
Image
带有重要部件标签的主板

图示

Image
主架构图

快速介绍

世嘉(和他们的电视广告)希望您知道:只有游戏机提供了更快的图形处理和更丰富的声音表现,开发人员才能做出像样的游戏。

他们的新系统包括许多已经被熟知的组件用于编程。 这意味着,理论上开发人员只需要了解一下世嘉的新GPU……对吧?


中央处理器 (CPU)

该游戏机有两个通用处理器。

主处理器

首先,我们有一个摩托罗拉68000运行在~7.6MHz,这是一种流行的处理器,当时已经出现在许多计算机中,例如Amiga、(初版)Macintosh、Atari ST… 有趣的是,这些计算机每一代都继承了它们的“6502前辈”,而虽然Sega Master System(译注:以下简称SMS)(MD的前身)并未采用6502 CPU,但NES(译注:即美版FC,日版也是同样CPU)却使用了(在某种程度上,世嘉的目标是要吸引任天堂的消费者)。 总而言之,你可以看到电脑的发展和游戏机技术之间是有一点关联的。

Image
MD上的摩托罗拉68000芯片,这个是从日立第二次采购的。

回到主题,68k具有“主”CPU的角色,它将负责游戏逻辑,处理I/O和图形计算。 它具有以下功能[1]

如果你对为何在能处理32位字的CPU中使用24位地址感到好奇,那是因为那个时代的设备很少需要管理4GB的内存。 考虑到实现未使用的线路在性能和资金方面代价高昂,摩托罗拉做出了一个合理的妥协,采用32位寄存器和24条地址线,为开发者为五年后全面32位CPU(即68020)的到来做好准备。

一种特殊的指令集

在80年代的RISC革命之前,曾有一个浪潮试图巩固指令集的设计方式。 本质上,70年代的消费者CPU(如6502或8080)提供的指令已经预先定义了如何访问内存(这称为“寻址模式”)。 在68000中,摩托罗拉将指令函数(操作码)从寻址模式中分离出来,使后者只是另一个参数(操作数)。 通过这样做,开发人员现在可以使用具有最佳寻址模式的相同操作码(根据他们的需要)。

这一原则被称为指令集正交性,它极大地影响了70年代末的新一代CPU,但随着RISC设计的兴起而迅速消散,实际上将负担转移到了编译器上。 无论如何,摩托罗拉68k系列在80年代非常受欢迎,直到90年代初,很多公司才开始转向另一个供应商。

配角

游戏机中安装了另一个CPU,运行频率约为3.5 MHzZilog Z80。 这与之前在Master System的文章中分析的处理器相同。

Z80主要用于声音控制。 因此,它的16位地址总线由以下[3] 组成:

最后,重要的是要注意两个CPU是并行运行的

可用内存

主CPU包含64 KB的专用RAM用于存储通用数据,而Z80包含8 KB的RAM用于与声音相关的操作。

相互通信

世嘉选择了两个相互没有感知的独立处理器,那么游戏如何同时管理两者呢? 主程序在68000中执行,这个CPU随后可以在Z80的RAM上写入。 因此,68000可以向Z80的RAM发送一个程序,并指示Z80加载它(通过向Z80发送复位信号)[4]。 一旦Z80得到控制,它就可以用来管理声音子系统,并使用前面描述的方法移动内存,所有这些都是在68000处理其他操作的同时进行的。

Image
MD的内存架构。

因为一个CPU需要介入另一个CPU的总线,并且两者不能同时使用总线,所以必须激活一个额外的组件叫做总线仲裁器来暂停任一处理器,以便能够无风险地写入内存。

重要的是要指出,如果管理不当,这种设计可能会表现不佳,因此游戏必须特别注意总线仲裁器,并确保不要让任一CPU被暂停的时间超过必要。


图形

答案就是_爆炸处理!_,你还想知道什么?

好吧,如果你想了解_真实的_答案:图形数据由68000处理器处理,并在一个专有的芯片上渲染,这个芯片称为视频显示处理器(简称“VDP”),然后VDP将生成的画面(以扫描线的形式)发送出去进行显示。

VDP以约13 MHz运行,并根据区域支持多种分辨率模式:在NTSC中最高320x224像素,在PAL中最高320x240像素

在多个显示分辨率的背后

从技术上讲,VDP每个扫描线可以容纳40或32列图块,图块行数取决于区域(NTSC中的28或PAL中的30)。 虽然,大多数PAL游戏并不关心PAL系统中允许的额外图块(因为它们可能需要保持两个区域之间的一致性,NTSC是共同点),所以它们指示VDP渲染28行(就像它们在NTSC系统中所做的那样)。 因此,VDP别无选择,只能用背景色填充未使用的区域(在过扫描期间也使用)。

您可以通过检查具有调试功能的模拟器中的Mode Set Register#2来查看哪些PAL游戏在NTSC模式下渲染(即: Exodus). 如果从右数第四位是0,则VDP运行在NTSC模式[5]

Image
为了在Sonic 2(1992)中提供快速的多人模式,游戏激活了“隔行扫描模式”,以使用8x16像素的图块(以及其他更改)来渲染单人关卡。
Image
相比之下,索尼克3(1994)更复杂的多人模式依赖于独立于单人关卡的专用8x8像素图块。

此外,可以在VDP上设置一个附加参数以堆叠两个图块以形成8x16映射,然后将它们视为单个图块。 因此,垂直解析度加倍。 然而,这将使刷新率减半,因为现在帧是通过隔行渲染的(一帧渲染偶数扫描线,下一帧渲染奇数扫描线,等等),所以它在功能方面更受限制。 索尼克2的多人模式就是这种模式的一个很好的代表[6]

最后值得一提的是,VDP会自动处理为过扫描区域添加填充,因此游戏开发者不必担心哪些区域是安全的可以用来绘制图形(这与NES的“危险区域”形成对比)。这意味着使用这种视频显示处理器的游戏不需要特别考虑屏幕边缘的安全显示区域,因为这些边缘部分可能会在某些电视上被裁剪掉。VDP自动处理这个问题,使得开发过程更为简化。

硬件组织

在处理图形数据方面,该芯片有两种操作方式:

模式0到III呢? 好吧,这些属于更旧的SG-1000,而MD不支持它们。

值得一提的是,后来一位该系统的前开发者告诉我,模式V的命令结构(用于在游戏中控制VDP)继承了TMS9918的设计(TMS9918是著名的视频芯片,用于SG-1000中)[7]。 这使得第三方开发者可以更容易地使用模式V,而不必依赖官方文档(以及随之而来的授权费用)。

可用内存

Image
VDP的内存架构。

图形内容分布在内存的三个区域[8]

构造帧

以下部分解释了VDP如何渲染每一帧画面,为了演示的目的,刺猬索尼克将被用作例子。 在开始之前,我建议检查一下它的前辈的_modus operandi(工作方式)_,因为这里会有很多回顾的内容。

图块

Image
多个图块挤在一起。 出于演示目的,正在使用默认调色板。
Image
单个8x8像素图库。
从VRAM中提取的图块。

就像任天堂的PPU一样,VDP是一个基于图块的引擎,因此它使用图块(基本8x8位图)来组成图形平面。 对于VDP而言,每个图块都通过一个4字节长的数组进行编码,其中每个4位的条目对应一个像素,其值对应一个颜色条目(指向颜色调色板)。

游戏卡带将图块存储在其ROM(在其卡带中找到)中,但必须将它们复制到VRAM以便VDP可以读取它们[9]。 传统上,这只能在特定的时间段内由CPU处理,幸运的是,这台游戏机增加了特殊的电路来将这项任务扔给VDP(我们稍后会详细介绍)。

图块被用来构建总共四个平面,这些平面合并在一起后就形成了屏幕上看到的画面帧。 此外,各个平面上的图块会相互重叠,因此视频显示处理器 (VDP) 会根据平面的类型和图块的优先级值来决定哪个图块会被显示出来。

背景

Image
填充好的背景图。
Image
已分配的背景地图,标记了选定的区域。

背景平面,也称为平面B是一个可滚动的图块(一组图块),其中包含静态图块[10]

这个平面可以有六个不同的尺寸:256x256、256x512、256x1024、512x256、512x512、1024x256。 程序员可以选择更符合其所需滚动类型的维度。

每个图块可以水平和/或垂直翻转,并设置优先级

在显示的示例中,您会注意到所选的显示区域不是正方形…并不一定是!。 VDP允许为整个帧、每个单独的扫描线或每八个像素设置水平滚动值。 这意味着开发人员可以将选定区域塑造成菱形,并在玩家移动时改变其角度以模拟透视效果。 像这样的技巧不会破坏平面,VDP会获取每条(选定的)水平线并从中构建一个常规帧。

前景

Image
分配的前景平面。
Image
已分配前景平面,选定区域已标记。
前景平面示例,未使用窗口平面。

前景平面,也称为平面A [11],具有与背景平面相同的属性,只不过这个平面具有更高的优先级,因此在此平面上渲染的图块将自然地覆盖在背景平面上方。

此外,这个平面允许划分自己以形成一个新的子平面窗口平面。 唯一的区别是后者不能滚动。

总而言之,你可以看到新的优先级值和单独的平面使游戏设计师能够带来新的场景类型。 此外,通过在每个平面上使用不同的滚动速度,可以实现视差效果

精灵图

Image
分配的精灵图层。
Image
已分配精灵图层,并标记了选定区域。

在此平面中,图块被视为精灵图。 它们被放置在一个512x512像素的贴图上,只有其中的一部分(即VDP的输出分辨率)被选中用于显示。 这对于隐藏不需要的精灵图或准备将来展示的其他精灵图很方便。 VDP还提供了一个旧的冲突检测功能。

精灵图通过组合多达4x4的图块(32x32像素贴图)并选择多达16种颜色(包括透明)形成。 如果需要一个更大的精灵图,那么可以将多个精灵图组合成一个。

每个扫描线最多只能有20个精灵图,每个屏幕最多只能有80个精灵图(溢出会破坏整个图层)。

在视频随机存取存储器 (VRAM) 中定义精灵图的区域被称为 精灵图属性表 [12],表中的每一项包含以下内容:图索引 、图层坐标 (x 和 y)、链接值(用于管理哪些精灵图先被绘制)、优先级(具有最高优先级的精灵图会在重叠时显示在其他精灵图之上)、颜色调色板索引以及垂直和水平翻转信息。

结果

Image
结果帧。
Image
帧广播到电视(NTSC格式),VDP自动覆盖大多数CRT电视将隐藏的过扫描区域的帧。
嗒哒——!

在绘制帧时,系统将根据CRT的光束指向的位置依次调用不同的中断例程。 正如您可能在以前的游戏机中看到的那样,这可以允许CPU处理下一帧(或更改当前帧)。

通常,有两种类型的中断称为:H-Blank(每条水平线)和V-Blank(每帧)。

H-Blank被多次调用,但仅限于执行短例程。 此外,只有CRAM和VSRAM可访问,因此游戏只能更新其调色板或垂直滚动其平面。

V-Blank允许更长的例程,缺点是每秒只能调用50或60次(取决于游戏机的区域),但它能够访问所有内存位置。

请注意,示例中的过扫描区域在右下角显示了一些随机的彩色点。 这通常被称为CRAM点,发生的情况是CPU正在更新CRAM中的调色板,同时VDP正在发送剩余的扫描线(在示例中,这发生在过扫描期间)。 这种冲突会使VDP获取CPU当时正在写入的任何值(而不是CRAM中所需的位置),从而破坏图像显示。 然而,由于在这种情况下,游戏只在过扫描时更新CRAM,这种异常在传统CRT上没有被注意到。 其他游戏试图更新调色板中帧以实现更多颜色,代价是必须平衡CRAM点的外观。

专用传输单元

到目前为止,我们已经讨论了CPU可以做什么来更新帧,但是VDP呢? 它是否能提供更专业的东西? 是的,该芯片具有直接内存访问(简称“DMA”),允许以更快的速度在内存位置之间移动数据,而无需CPU的干预。

DMA可以在H-Blank、V-Blank或活动状态(在任何中断之外)期间激活,并可用于通过VRAM、CRAM和/或VSRAM[13] 进行写入。 此外,在使用DMA传输CPU RAM期间,CPU总线将被阻塞,因此良好的规划对于实现性能至关重要。

这些特征的特殊使用可以提供高分辨率图形、流畅的视差滚动和高帧速率。 此外,你的游戏还可能会出现在电视广告中,并且到处都是标有大量 爆炸处理! 的标志。

视频输出

该游戏机的第一个设计(通常称为“型号1”)具有与SMS相同的视频输出端口。 随后的“模型2”和“模型3”切换到迷你DIN端口。


音频

至少可以说,这个游戏机的音频功能有点非主流。 一方面,MD提供了上一代的现有音频技术,另一方面,它又在现有技术的基础上添加了一种新的(但复杂的)合成技术。 所以,在某些方面,你实际上等于拥有了这两代主机的音频技术。

话虽如此,MD包含两个声音芯片:雅马哈 YM2612德州仪器SN76489

功能

现在让我们看看每个芯片提供什么,毕竟每个芯片都 非常不同。

雅马哈YM2612

FM 通道。
PCM 通道。
刺猬索尼克(1991)。

雅马哈 YM2612是一款FM合成器[14],以68000速度运行并提供六个FM频道,其中一个可以播放PCM采样(具有8位分辨率和32 kHz采样率)。

频率调制或‘FM’合成是用于声音合成的专业技术之一,它在80年代显著流行起来,并开辟了全新的声音领域(许多这样的声音你可以在那个时代的流行音乐中听到)。

简而言之,在极其简化的情况下,FM算法采用单一波形(载波),并使用另一个波形(调制器)来改变其频率。 结果是具有不同声音的新波形。 载波-调制器组合被称为运算符,并且多个运算符可以串联起来形成最终的波形。 不同的组合达到不同的效果。 这个芯片允许每个通道使用4个运算符。

与传统的PSG合成器相比,这是一个巨大的改进:您不再被预定义的波形所困。

德州仪器SN76489

PSG 通道.
刺猬索尼克(1991年)。

德州仪器SN76489是一款PSG芯片,可产生三个脉冲波和一个噪声。

这实际上是原始Master System的声音芯片,它嵌入在VDP中。 它以Z80的速度运行。

请注意,“脉冲3(Pulse 3)”通道仍未使用。 这是因为游戏使用了一种噪声通道模式,该模式保留了第三个脉冲通道用于调制[15],这也是SMS中的一项功能。

混音器

所有音频频道.
音效. 刺猬索尼克(1991年)。

两个芯片可以同时输出声音,然后一个名为“音频混合器”的额外组件负责接收两个信号并混合它们。

最后,生成的模拟信号通过音频输出发送。

执行器

理论上,Z80的内存映射表明Z80是唯一能够指挥这两个芯片的CPU(这可能会减轻68000的负担,因为后者已经喂满了其他任务)。 然而,在实际情况中,Z80可以关闭,因此68000可以访问YM2612(但不能访问SN76489)[16]。 因此,为了简单起见,在本文中,我们将假设音频任务被指定为Z80。

继续讲下去,Z80是一个独立的处理器,因此它需要自己的程序(存储在可用的8 KB RAM中),以便能够解析从68000接收的音乐数据,并据此有效地操控两个音效芯片。 该程序称为音序器驱动程序

破解采样

一些音乐作曲家可能会决定专注于PCM频道以播放更真实的声音,为此,游戏需要使用剩余的可用RAM不断对其音乐进行排序和流式传输。 主要限制是要填充该内存,必须先将主总线阻塞(因此在该时间范围内无法将命令或采样发送到音频芯片)。 否则,可能会出现声音异常(静音、冻结音符、低采样率等)。

出于这个原因,我决定将本节专门举一些成功克服上述限制的游戏例子。 一些游戏并没有仅仅满足于普通的鼓点套件,而是找到了惊人的方式来为单个PCM声道流传输更丰富的采样,看看这些例子:

PCM 通道。
所有音频通道。
刺猬索尼克3 (1994).
这是据说由Michael Jackson共同撰写的音轨之一。 无论如何,整体的配乐相比其前辈有着独特的节奏感。
PCM通道(唯一使用的通道)。
玩具总动员(1995)。
这是在68000[17] 的帮助下实时测序的。 一个非常密集的任务,这意味着它只能在游戏的非常特殊的点(即主菜单)进行。

我知道这些声音远达不到CD质量(16位,44.1 kHz),但请记住,这些声音曾经被认为在这台游戏机上是不可能复制出来的,我甚至还没有强调与上一代相比这代表了多少的进步,所以它们至少值得一些赞誉!

辅助FM合成

如果使用雅马哈 DX7的控制面板编程FM合成器已经被认为是复杂的,那么想象一下仅用68k汇编语言来创作音乐所带来的头痛问题……

幸运的是,世嘉后来为MS-DOS PC分发了一款名为GEMS的软件,以方便MD音乐[18]的创作(和调试)。 这是一个非常完整的工具,其中包括许多补丁(可供选择的预配置运算符),这也可以解释为什么一些游戏具有非常相似的声音。

此外,音频子系统使游戏能够实例化比允许数量更多的通道,并为每个通道分配一个优先级值,然后当游戏机播放音乐时,它会根据优先级动态地将音乐通道分配到可用的槽位中。 此外,可以自动跳过具有高优先级但没有音乐的频道。

通道还包含一些逻辑,通过在其数据中实现条件,使音乐能够根据玩家在游戏中的进展方式“进化”。

(额外内容)Mega CD声效

这里有一个有趣的事实:Mega CD扩展设备提供了额外的2个通道用于CD音频(还有其他功能)。 其中一个最著名的游戏《刺猬索尼克CD》拥有非常出色的音乐质量,但和其他游戏一样,音乐也需要循环播放。问题在于,在1倍速的CD读取器上循环播放音乐会导致明显的间隙,因此游戏包含了循环填补音轨,这些音轨在CD头返回起点的同时由另一个PCM芯片执行。

这些填补音轨仅出现在游戏早期测试版本中,并没有被包含在最终发行版中;直到2011年的重制版才最终加入了这些填补音轨。 这是游戏的其中一关:

MegaCD版本(1993)。
重制版(2011)。

你注意到Mega CD版本的差异了吗?


游戏

游戏主要是用68000汇编编写的,而声音驱动是用Z80汇编实现的。 两者都驻留在卡带ROM中,最大可达4 MB,而无需映射器

额外功能

就可扩展性而言,这种设计不像NESSNES那样模块化。 因此,后来像32x这样的附加组件(包括接管68k的新芯片组)不得不绕过VDP(因此需要“连接器电缆”)。

仅有一款定制芯片被用于卡带,那就是世嘉虚拟处理器 (Sega Virtua Processor) [19](实际上是三星SSP1601的重新品牌化版本,这是一款16位数字信号处理器),它可以生成多边形,并随后将它们编码成图块的形式(以便VDP可以读取它们)。 无论如何,只有一款游戏随附,因为SVP的制作成本非常高。

早期联网尝试

在在线服务被广泛采用(和标准化)之前,世嘉尝试了世嘉Meganet,这是一种供游戏使用的拨号服务。 Meganet 要求用户购买一个单独的配件,称为 Sega Mega Modem,然后将其插入游戏机背面(DE-9 连接器所在的位置),最后将其连接到电话线上。 游戏随后会将调制解调器单元视为另一个手柄,并增加与其串行通信的功能 [20](与手柄使用的并行编码相反)。

尽管如此,这一功能只持续了几年,之后世嘉就在后续的修订版中移除了DE-9连接器,并彻底关闭了这项服务。


反盗版/锁区

为了阻止进口游戏,世嘉略微改变了不同地区游戏卡带插槽的形状,但保留了相同的针脚布局。 游戏还可以通过检查版本寄存器(输出区域值)的值来执行“区域锁定”。

有两个简单的方法可以绕过这个。 一种是通过购买第三方卡带转换器实现。 另一种就是通过改装游戏机并桥接主板上改变版本寄存器值的引脚。

在软件防盗措施方面,最简单的检查方法是SRAM的大小:盗版卡带的空间通常比实际所需的大很多,因此游戏在启动时会检查预期的SRAM大小。 程序员还可以在游戏的随机点实现额外的校验和检查点,以防黑客删除初始SRAM检查。 唯一的方法是费力地找到所有的检查点,并逐个移除它们……


这就是全部了,伙计们。


参与贡献

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

Donate with PayPal
Become a Patreon

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

Image

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

### Interesting hardware to get (ordered by priority)

- 32X (£ ?)
- Any dev kit (only if found at a reasonable price)

### Acquired tools used

- PAL Mega Drive with a Mega CD and a couple of games (£150)
- Switchless region free mod (£20, the desoldering tools were much more expensive!)
- Component video adapter (£30)

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


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-megadrive,
    url = {https://www.copetti.org/zh-hans/writings/consoles/mega-drive-genesis/},
    title = {MD 架构 - 一份实证分析},
    author = {Rodrigo Copetti},
    year = {2019}
}

or a IEEE style citation:

[1]R. Copetti, "MD 架构 - 一份实证分析", Copetti.org, 2019. [Online]. Available: https://www.copetti.org/zh-hans/writings/consoles/mega-drive-genesis/. [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