« MD 架构 (index)

MD 架构

Chapter 4: 图形


目录

  1. 在多个显示分辨率的背后
  2. 硬件组织
    1. 可用内存
  3. 构造帧
    1. 图块
    2. 背景
    3. 前景
    4. 精灵图
    5. 结果
  4. 专用传输单元
  5. 视频输出

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

好吧,如果你想了解_真实的_答案:图形数据由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模式。

Image
为了在Sonic 2(1992)中提供快速的多人模式,游戏激活了"隔行扫描模式",以使用8x16像素的图块(以及其他更改)来渲染单人关卡。

Image
相比之下,索尼克3(1994)更复杂的多人模式依赖于独立于单人关卡的专用8x8像素图块。

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

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

硬件组织

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

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

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

可用内存

Image
VDP的内存架构。

图形内容分布在内存的三个区域:

构造帧

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

图块

Image
多个图块挤在一起。 出于演示目的,正在使用默认调色板。

Image
单个8x8像素图库。

从VRAM中提取的图块。

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

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

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

背景

Image
填充好的背景图。

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

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

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

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

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

前景

Image
分配的前景平面。

Image
已分配前景平面,选定区域已标记。

前景平面示例,未使用窗口平面。

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

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

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

精灵图

Image
分配的精灵图层。

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

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

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

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

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

结果

Image
结果帧。

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

嗒哒——!

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

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

H-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的写入。 需注意的是,当DMA执行CPU内存传输时会导致CPU总线阻塞,因此合理的调度规划对保障性能至关重要。

精妙运用这些特性可实现高分辨率图像、流畅的视差滚动效果与高帧率表现。 更可能让您的游戏登陆电视广告,带上满屏炫酷的"Blast Processing!"特效标识。

视频输出

该游戏机的初版设计(通常称为"Model 1")采用了与Master System相同的视频输出接口。 而后续推出的"Model 2"和"Model 3"机型则改用了mini-DIN接口。


Previous: 3. 中央处理器 (CPU)

Next: 5. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

主页 · 文章 · 支持 · 关于作者 · 关于此网站