« SMS(Sega Master System)主机架构 (index)

SMS(Sega Master System)主机架构

Chapter 5: 图形


目录

  1. 硬件组织
  2. 构造帧
    1. 图块
    2. 背景层
    3. 精灵图
    4. 结果
  3. 秘密和限制
    1. 碰撞检测
    2. 模块化的需求
    3. 3D眼镜
  4. 视频输出

屏幕上的图像由一个名为"视频显示处理器"(Video Display Processor ,简称 VDP)的专有芯片产生。 在内部,它的设计与 SG-1000 中使用的德州仪器 TMS9918 相同,但增强了更多功能,我们将在接下来的部分中讨论这些增强的功能。

硬件组织

Image
VDP的内存架构。

VDP 旁边连接了 16 KB 的 VRAM (视频随机存取存储器),VDP 可以通过 16 位数据总线访问这些 VRAM(Sega 修改了原始设计,使其能够同时访问两个带有 8 位总线的内存芯片)。 如果你再次查看主板的照片,你会注意到 RAM 和 VRAM 芯片大致相同,只是 VRAM 使用的是型号末尾为 '20' 的芯片,具有更低的延迟。

对于 SMS 而言,VRAM 存储了 VDP 渲染所需的所有数据(除了颜色 RAM)。 CPU 通过写入特定的 VDP 寄存器来填充 VRAM,这些寄存器随后会将值转发给 VRAM。 由于 VDP 是通过 I/O 端口访问的,CPU 必须使用 INOUT 指令。

构造帧

VDP 以最高 256x192 像素的分辨率渲染帧,后续修订版增加了对 256x224 像素和 256x240 像素的支持;然而,为了与所有型号保持兼容性,开发者们只能坚持使用标准分辨率。 该芯片的工作模式与任天堂的 PPU 相同,也就是说,图形是即时渲染的。

另一方面,VDP 具有四种不同的工作模式,这些模式会改变帧的特性(色彩深度和分辨率):

现在让我们一步步地看看一帧是如何绘制的。为此,我将借用刺猬索尼克的素材。 此外,为了让解释更简单,我将会专注于世嘉建议的用于组织图形内容的标准内存布局(只需记住 VDP 在这方面非常灵活,因此游戏可以对其进行优化)。

图块

Image
所有图块。

Image
一个图块。

在VRAM中找到图块。

模式 IV 基于图块系统。 回顾之前关于图块引擎的解释,图块就是 8x8 像素的位图,渲染器从中获取来绘制游戏图形。 在 VDP 的情况下,帧由两层组成,背景层和精灵层。

在VRAM 中,有一个专门用于存储图块的区域,称为角色生成器(世嘉称图块为"角色"),其容量设定为 14 KB。 每个图块占用 32 字节,因此我们最多可以存储 448 个图块。

每个图块定义了 64 个像素,VDP 规定每个像素必须占用 4 位,这意味着可以从 16 种颜色中选择。 这些位引用颜色 RAM 或简称"CRAM"中的单一条目。 这个区域位于 VDP 内部,存储着颜色调色板。 颜色调色板系统有助于减少内存中图块的大小,并允许程序员更改颜色而不必存储多个副本。

颜色 RAM 存储两个各含 16 种颜色的调色板。 每个条目宽 6 位,每组 2 位定义 RGB 模型中的一个颜色。 这意味着可选的颜色总数为 64 种。

背景层

Image
已分配的屏幕地图。

Image
已分配的屏幕地图,带有选定区域标记。

背景层是一个大的平面,静态图块被绘制于此。 为了在此处放置内容,VRAM 中还有一个名为屏幕地图的区域,它占用 1.75 KB 的空间。

这使得开发者能够构建一个包含 896 个图块(32x28 图块) 的图层,但如果计算一下就会发现,这个图层实际上比该游戏机的显示分辨率还要大。 实际上,只有 其中的768 个图块(32x24 图块)是可见的,而这个可见区域是由程序员手动选定的。 因此,通过缓慢地改变选定区域的 X 和 Y 坐标,就可以实现滚动效果

地图中的每个条目宽 2 字节(与 VDP 数据总线一样宽),包含了图块在字符生成器中的地址以及以下属性:

有趣的是,在这里中有 3 个未使用的位,游戏可以将其用于其他目的(例如,用于辅助游戏引擎的额外标志)。

精灵图

Image
渲染的精灵图层。

精灵图只不过是能够自由移动的图块而已。 VDP(视频显示处理器)最多可以使用单一图块(8x8 像素)或两个垂直堆叠的图块(8x16 像素)来光栅化多达 64 个精灵图

精灵图属性表是在 VRAM 中的一个 256 字节区域,它包含所有定义好的精灵图的数组,其条目与背景层类似,只不过每个精灵图还包含两个额外的值,代表 X/Y 坐标。

VDP 在每一水平扫描线上最多只能显示八个精灵图。 而且,如果有多个精灵图重叠,列表中的第一个将会被显示。

结果

Image
嗒哒——!

VDP 自动将这两层融合以形成最终的画面。 渲染过程是一行一行地完成的,因此 VDP 实际上并不知道整个画面会是什么样子,只有当图像在电视上构建完成后用户才能看到。

如果你观察示例图像,可能会注意到画面左侧有一列垂直的条纹。 这是因为屏幕地图的高度足以提供垂直滚动而不产生伪影,但宽度不足以支持水平滚动。 因此,VDP 可以用一个 8 像素宽的列来遮罩最左侧,以防止显示中间的图块,保护图像不被破坏。

为了更新下一帧的画面而不破坏正在显示的图像,VDP 会向 CPU 发送两种类型的中断信号。 一种是在 CRT 电视完成指定数量的扫描线后发出的通知(称为水平中断),另一种是在 CRT 完成最后一行扫描线的绘制时发出的通知(称为垂直中断),表明一帧已经结束。 在这两个事件期间,CRT 的电子束正在重新定位以绘制下一行(空白区间),因此对 VDP 状态的任何改变都不会撕裂图像。 水平空白期的时间比垂直空白期短,但它仍然允许改变颜色调色板等操作。 这样仍然可以实现一些效果。

秘密和限制

乍看之下,VDP 可能看起来就像是另一个我们现在习以为常的功能有限的芯片。 不过,它确实吸引了当时大量对任天堂产品本应关注的目光。 那么为什么会这样呢?

碰撞检测

首先,VDP 能够判断两个精灵是否发生了碰撞。 这是通过检查其状态寄存器来完成的。 虽然它不能检测出具体是哪两个精灵发生了碰撞,但这个限制可以通过读取其他寄存器来解决,比如扫描线计数器寄存器。 你可以把它想象成一种"三角定位"的方法。

这项特性其实并不新鲜,因为 TMS9918 也包含了这一功能,因此 SG-1000 也有碰撞检测能力。

模块化的需求

在我之前分析任天堂 PPU 的设计时,我强调了它的内部内存架构。 虽然有限制,但某些约束实际上是有益的,因为它使得系统可以通过在游戏卡带中加入额外硬件的方式进行扩展,同时降低了成本。

VDP 并没有利用这种模块化的方法。 相反,世嘉采取了一种不同的解决方案,这反过来节省了卡带的成本。 较小的背景层和水平中断就是这种方案的例子。

3D眼镜

Image
世嘉3-D眼镜。
美国版通过卡槽连接。

原来世嘉还将"3D眼镜"作为官方配件发货! 这副眼镜能与CRT显示器同步工作。 在游戏过程中,游戏会在不同的帧之间切换物体的位置。 每个镜片上都装有一个LCD屏幕,可以变黑以阻挡视线。 因此,正确的图像闪烁与快门交替最终在你的大脑中形成了立体图像。 这样就产生了"3D"效果。

快门由几个内存地址控制,但这些地址都不会告诉主机是否插上了眼镜,因此支持这一配件的游戏会包含一个设置选项,允许用户手动激活该功能。

LCD控制器通过插孔线缆与主机接口,这条线缆插入主机中。 欧洲和美版没有这个插孔输入口,所以它们依赖卡槽来连接适配器(我们稍后会详细介绍卡槽)。

视频输出

这套系统的视频输出接口非常实用。 它提供了复合信号(译注:AV端子)RGB 信号输出,可以想象这是视频质量的两个"极端"。

不利的一面是,它不提供"复合同步"信号,因此使用RGB信号时需要从复合信号中提取同步信号,而且这样做并不理想。


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

Next: 6. 音频


Rodrigo Copetti © 2026 RSS Feed

切换至现代版

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