这块功能由 Hudson Soft HuC6270,又被称为 视频显示控制器(Video Display Controller)或"VDC"的一块单独的芯片负责。 HuC6270会绘制玩家将会在屏幕上看到的所有东西,且它的功能和世嘉机子上的对应芯片非常相似,所以请先看看那篇文章,因为我将重点介绍Hudson的这块芯片的不同之处。
内容的组织
首先,VDC是 图块引擎(在第五代游戏机出现之前几乎是标准),但请注意PC Engine包含64 KB的VRAM,这与其竞争对手相比是相当大的。 这可能会带来一种新的内容类型,我们稍后将对此进行验证。
图形数据的排列方式有点混乱:CPU和VDC都使用16位地址,但CPU只能处理8位字,而HuC6270却在VRAM中存储16位字。 这意味着RAM中的单个地址存着一个字节,而VRAM中的单个地址存着两个字节,所以开发者们在向VRAM传输数据时必须注意这一差异。
原因在于Hudson组织电路的方式:VDC有一条16位地址总线,但只有前15条线受控(最后一条线始终设置为'0'),因此奇数地址从第二个字节获取。 我不知道Hudson为什么要这样做,但我知道,如果系统有128 KB的VRAM,所有这一切就更合理了(因为16位地址总线最多只能访问64 KB,所以通过某种方式将数据总线加倍,最多可以检索128 KB)。 或许那是Hudson/NEC的原计划?
构造帧
抛开前面提到的颗粒度问题,VDP的功能非常简单。 其子系统有三个主要组件:我们已经讨论过的VDC和VRAM,和视频编码器(又称"VEC",我们将在适当的时候看到更多有关它的信息)。
整个子系统可以使用多个分辨率,这是因为游戏可以改变一组寄存器,这些寄存器作为控制显示时序的参数,反过来改变显像管开始传送帧的时间(相对于过扫描)。 其最小分辨率为256 × 224像素 ,尽管一些自制软件已经证明这个系统能跑在高达512 × 240像素的分辨率下。
现在让我们一步步看看游戏的一帧画面是怎么画出来的,为此我借用了PC原人(Bonk's Adventure)的资产。
图块
简单来说,图块就是8x8像素的位图,渲染器会获取这些位图来绘制屏幕的一部分。 在VDC中,帧由两个平面组成:背景层和精灵层。
在VRAM中有一个称为字符生成器的区域,其中定义了背景层专用的图块。 图块的每个像素占4位,因此最多可使用16种颜色。 理论上,最多可定义4096个背景图块,但由于VRAM较小,实际定义的数量较少。
另一方面,精灵是使用VRAM中单独内存位置的图块绘制的,这就是所谓的 精灵生成器,与之前的字符生成器不同,这里的图块宽度为16x16像素。
视频编码器是一个独立的芯片,存储32个调色板(16个用于背景,16个用于精灵) ,每个调色板存储16种颜色,每种颜色的宽度为9位(红色3位+绿色3位+蓝色3位)。
排序图块
这部分内容是为那些对Hudson如何利用64 KB VRAM和16位颗粒度感兴趣的人编写的,但您不必完全理解这部分内容,也可以继续阅读文章的其他部分
到目前为止,我们已经讨论了图块的每个像素使用4位(或半字节,也称为nibble)存储。 现在,Hudson规定,图块由四个8x8位图组成(分别称为 "CH0"、"CH1"、"CH2 "和 "CH3")。 每个图块的宽度为1位,但四个图块组合在一起后,就形成了具有4位像素的最终图块。
还记得 VRAM 的16位对齐方式吗? 每个16位字存储一行两个1位位图(8行 + 8行)。 因此,写入8个条目后,将存储两个位图(而不是一个)。 请看下图,以便更好地理解这一点。
同样的情况也会发生在精灵图块上,但由于它们是16x16位图,因此每个位图占用16个字。 换句话说,存储一个精灵图块需要64个字(相当于VRAM中的8字节)。
背景层
背景层是由VRAM中的条目填充背景属性表而构建的,每个条目的位置定义了屏幕上图块的X/Y坐标。 每个条目都包含字符生成器中的图块索引和调色板。
该层的最大尺寸为1024x512像素(128x64图块),但程序员可以设置一个256x256像素(32x32图块)的最小层。
与往常一样,通过更改VDC中某些寄存器的值,该层可以滚动。
精灵层
VDC 包含一个名为精灵属性表缓冲区的内部存储器,最多可定义64个精灵。 表中的每个条目都存储了独立的X/Y位置、调色板、图块索引和H/V翻转。 此外,还有一个属性允许将一个精灵与另一个精灵合并。
每个条目长度为8字节,但由于颗粒度为16位,会浪费一些空间
最重要的是,CPU无法访问该表,因此它需要在VRAM中完成,然后激活DMA通道将其复制到VDC(以便后者可以使用)
至于限制,每个扫描线最多只能有16个精灵。 另一方面,可以设置中断,以便在出现精灵溢出或碰撞时通知游戏
结果
到目前为止,我们已经看到VDC如何完成所有繁重的工作,但最后一项任务实际上是委托给视频编码器,或者叫"VCE"的。 Hudson将这款芯片命名为HuC6260,其基本功能是接收来自VDC的9位数据流,应用调色板,并将结果发送到电视(以模拟信号的形式)。
如果您读过以前的文章,可能会对定时的重要性有所了解。 这里也不例外: 为了避免不必要的伪影(如"雪花屏"),VCE只能在垂直中断时更新。
视频输出
视频编码器输出RGB(以及同步)和YPbPr信号,这分别是与SCART电缆或分量电缆配合使用的理想选择。 目前看来效果不错!...

为TurboGrafx-16设计的"Turbo Booster",连接至扩展端口以支持复合视频接口和供电。
...... ...遗憾的是,Hudson决定安装一个射频调制器,作为开箱游戏机时获得视频输出的唯一方法,所以它毕竟不是那么好。 不过话又说回来,PC Engine是80年代设计的,因此这种方法保证了与各种电视机的兼容性(假设它们来自游戏机的同一地区)。
好的一面是,扩展端口包含可传输RGB视频和多种同步信号类型的针脚,但需要外接配件才能使用。





