相关影像
型号
主板
图示
快速入门
Hudson和NEC联手启动了这台第四代游戏机。 不幸的是,由于竞争,他们再多的努力,最终也失色黯然。 尽管如此,他们的这台游戏机作为市场上最紧凑的设计之一,依然保持在顶流。
型号和变种
就像Master System一样,NEC弄了很多修订版和奇怪的变种型号。这从一开始就让跟进型号这事变得麻烦和困难。 因此,为便于今后参考,下面是最重要的机型:
- PC Engine:第一款使用此架构的主机,但仅在日本发布。 它看起来像个带着最小端口的小白箱子。
- TurboGrafx-16:为美国市场重新设计的PC Engine。 它和日版主机有同样的架构,不同的外观。 这让我想起了 NES/Famicom adaptation。
- Supergrafx:增强版的PC Engine,具有完全不同的机壳和全新的硬件。 它的独有特点不属于本文的讨论范围。
- PC Engine Duo/TurboDuo:PC Engine/TurboGrafx 和售后件 CD-ROM²扩展的结合体。
本文将重点介绍PC Engine/TurboGrafx-16,但也会讨论一下那些导致PC Engine Duo/TurboDuo发布的扩展设备。
中央处理器 (CPU)
在这台游戏机里,我们发现了HuC6280,这是一个由Hudson Soft制造的芯片,里面有两大组件。 其中之一是CPU,能以两种速度运作:~1.79 MHz 和 ~7.16 MHz.
HuC6280不像Z80那样是现成零件,而是由NEC设计的专用CPU。 查看官方文档之后,几乎可以确定它复刻了著名的MOS 6502和WDC的65C02的很多行为。 如此说来,所有这些对程序员意味着什么呢?
在开始之前,我们已经在NES的文章中介绍了MOS 6502的一些部件,在SNES的文章中也介绍了由WDC和理光制造的16位变体芯片。如果你想,可以先看看。
65C02是西方设计中心(WDC)制造的MOS 6502的一个改进型,由于它的制造工艺(CMOS),运行效率要高出很多。 从软件方面,65C02增加了一些新的指令,并修改了一些现有指令的行为[1]。
我们可以更多地谈谈65C02,但我认为最好还是重点讨论哈德森增加的功能(对65C02的补充),因为它们对有效操作这台游戏机至关重要。 与65C02对比,HuC6280有[2]:
- 更多的操作码,有些是针对CPU周边组件的。
- 8位I/O端口,作为外部组件的接口。
- 中断控制器,可接收来自其它设备的中断。
- 时钟。 它的工作方式是从一个特定的值开始倒数,当结束时,会向CPU派发一个中断。
最后,有8KB的RAM可提供给一般用途。
内存访问
但有一件事我没有提到,那就是NEC还在CPU旁边添加了一个内存管理单元或者叫“MMU”,使其能够把持21位地址(记得原本6502只有16位地址)[3]。 因此,可以访问的内存总量从64KB提升到2MB。
这款MMU非常不同于现今的任何一款MMU,我会说前者更接近于一个mapper。 尽管这么说,PC Engine中的MMU是由八个8位寄存器(称为映射寄存器或 “MPR”)组成,它们与CPU的16条地址线结合起来,形成了21位地址总线。
它做了以下工作:
- CPU可以使用特殊的
TAM
和TMA
指令,分别从任何MPR读取和/或写入。 - 当物理内存被访问时,MMU保留了来自CPU的地址线A13-A15,来选择八个MPR其中的一个。
- 最终的地址,是由CPU线(置于A0-A12)和MMU线(置于A13-A20,输出就是所选MPR的8位值)结合而成,结果即21位地址。
因此,这款MMU将物理内存分组为8KB的页(13条CPU线=8KB页),这是CPU不借助交换MPR或改变其值,就能访问到的内存量。
不管怎样,如果你对它难以理解,就不要勉强自己(这只是一种非常规的工作方式,有些人可能觉得有意思)。
图形
这块功能由 Hudson Soft HuC6270,又被称为 视频显示控制器(Video Display Controller)或“VDC”的一块单独的芯片负责。 HuC6270会绘制玩家将会在屏幕上看到的所有东西,且它的功能和世嘉机子上的对应芯片非常相似,所以请先看看那篇文章,因为我将重点介绍Hudson的这块芯片的不同之处。
内容的组织
首先,VDC是 图块引擎(在第五代游戏机出现之前几乎是标准),但请注意PC Engine包含64 KB的VRAM,这与其竞争对手相比是相当大的。 这可能会带来一种新的内容类型,我们稍后将对此进行验证。
图形数据的排列方式有点混乱:CPU和VDC都使用16位地址,但CPU只能处理8位字,而HuC6270却在VRAM中存储16位字。[4] 这意味着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像素 [5],尽管一些自制软件已经证明这个系统能跑在高达512 × 240像素的分辨率下。
现在让我们一步步看看游戏的一帧画面是怎么画出来的,为此我借用了PC原人(Bonk’s Adventure)的资产。
图块
简单来说,图块就是8x8像素的位图,渲染器会获取这些位图来绘制屏幕的一部分。 在VDC中,帧由两个平面组成:背景层和精灵层。
在VRAM中有一个称为字符生成器的区域,其中定义了背景层专用的图块。 图块的每个像素占4位,因此最多可使用16种颜色。 理论上,最多可定义4096个背景图块,但由于VRAM较小,实际定义的数量较少。
另一方面,精灵是使用VRAM中单独内存位置的图块绘制的,这就是所谓的 精灵生成器,与之前的字符生成器不同,这里的图块宽度为16x16像素。
视频编码器是一个独立的芯片,存储32个调色板(16个用于背景,16个用于精灵) [6],每个调色板存储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电缆或分量电缆配合使用的理想选择。 目前看来效果不错!…
…… …遗憾的是,Hudson决定安装一个射频调制器,作为开箱游戏机时获得视频输出的唯一方法,所以它毕竟不是那么好。 不过话又说回来,PC Engine是80年代设计的,因此这种方法保证了与各种电视机的兼容性(假设它们来自游戏机的同一地区)。
好的一面是,扩展端口包含可传输RGB视频和多种同步信号类型的针脚,但需要外接配件才能使用。
音频
与本网站分析的许多其他第三世代游戏机一样,PC Engine也包含一个可编程声音发生器,或者叫“PSG”。 另一方面,这种PSG特别依赖波形存储器(也称为 “波形缓冲器”)来合成声音,而不是使用一组预定义的波形(如方波、三角波等)。 波形存储器使程序员能够定义自己的波形,从而为配乐编排提供更大的灵活性。
该系统有6个音频通道 [8],每个通道都是通过写入一组寄存器来设置的。 寄存器存储了各通道的属性,其中包括:
- 波形形状: 波形周期使用32个5位值生成,每个值对应特定时间的波幅。
- 一些游戏(如超火爆摔跤2nd Bout(Fire Pro Wrestling 2)和血狼(Bloody Wolf))甚至会在播放过程中改变数值,以获得特殊音效(代价是在传输过程中会听到咔哒声)。
- 频率控制: 两个8位寄存器可改变通道的频率,从而用相同的波形产生不同的音符。
- 振幅电平: 一个8位寄存器存储两个4位值,用于指定通道声音的响度。 这两个值分别对应于“左”和“右”平移控制,与同类产品相比,这是一项开创性的功能。
额外功能
某些通道组具有其他操作模式。 例如,最后两个通道与噪声发生器相连。 此外,第二个通道还可以充当低频振荡器,对第一个通道进行调制(我起初以为这是调频合成的同义词,但低频振荡器更像是实现颤音效果的 “子集”)。
说到模式,还有一种叫做直接数模转换(DDA)的模式,可以让CPU直接写入音频缓冲区(绕过PSG)。 因此,PC Engine可以播放PCM采样。 这些采样仍然是5位的,而且非常依赖于CPU周期。 不过,两个通道可以组合重现10位采样! 我强烈建议您查看“来源”部分,聆听示例[9]。
总之,这使得PC Engine的PSG成为一款非常灵活的硬件。
最终的声音
PSG将混合所有信号并输出立体声信号。 但同样,除非您找到绕过射频端口的方法,否则只能从电视上听到单声道音频。
I/O
这款游戏机有大量的配件,其中一些完全增强了游戏机的内部功能(例如提供更多内存)和外部功能(增加更多端口和/或读取其他存储介质的可能性)。
这在很大程度上要归功于游戏机背面的扩展接口,它可以接入以下组件 [10]:
- +5V线路:为配件供电。
- 电压输入线: 绕过原装电源,通过配件为游戏机供电。
- 音频输入和输出: 可接收立体声音频输出和/或从输入线发送音频。
- CPU数据线和地址线: 使 CPU 能够访问附件,反之亦然。
- VDC数据线(传输至视频编码器的数据线): 允许配件分接这些线路,但我不确定分接这些线路的目的。
- CPU控制线: 读取HuCard和CD检测标志、使用的速度模式,还可以访问中断线路。
- 模拟视频输出: 包括RGB+垂直同步和水平同步+复合同步。
我很想知道NEC或Hudson在多大程度上设想了这种游戏机,他们是否试图制造某种可以升级到下一代的 “模块化游戏机”?
其它
我还没提到它的控制器(或“手柄”,有些地方这么叫它)。 它与其他产品非常相似。 游戏机只提供一个控制器端口,游戏会检查内存中的一个地址来获取按键。 该地址返回一个4位值[11]。
操作系统
在游戏运行之前,没有内部ROM或“BIOS”或其他任何东西,因此我们这台机子没有操作系统。 复位向量位于地址$FFFE
和$FFFF
处(请记住,内部寄存器是8位的,但内存地址是16位的,因此我们需要两个字来初始化程序计数器),这些地址指向游戏卡[12]。
这也意味着,“做家务”(即初始化内存、设置MMU等)这事将由程序员来完成……
游戏
程序以6502汇编语言编写,并添加了额外的65C02操作码和Hudson引入的操作码。
标准介质
NEC/Hudson并没有依赖于其他厂子似乎都喜欢的笨重而乏味的卡带,而是设计了另一种媒介,这次是一种信用卡大小的媒介,名为HuCard。 它们源自一种名为“Bee Card ”的旧媒介,一些MSX游戏曾使用过这种媒介。
奇怪的是,它们与世嘉卡(Sega Card)非常相似,但却包含38个引脚,而不是35个[13]。 内部差异则更为明显:
- 无需映射器,CPU内存映射便可访问1 MB的HuCard内存,因此大多数游戏都使用1 MB的ROM。 而街霸II(Street Fighter II)等游戏则使用2.5 MB的ROM! [14]
- 还有一个音频输入引脚,似乎可以让卡为游戏机提供额外的音频通道。
CD-ROM扩展
该扩展端口为大量配件和扩展装置打开了大门,最终将一个简单的PC Engine变得完全不同。 如果这还不够,HuCard插槽还能补充扩展的可能性。 我想说的是,在这篇文章中,我必须把重点放在显著的升级上(其中一些升级已被纳入控制台的未来版本中)。
让我们来看看CD-ROM²扩展,它由一个CD-ROM读取器和一个名为系统卡(System Card)的特殊HuCard组成,后者充当BIOS引导游戏,并提供一些例程来连接读取器。 读取器内部有64 KB RAM用于一般用途,另外64 KB RAM用于ADPCM采样流,最后2 KB用于保存数据。 正如您所猜测的那样,这使得游戏开发人员能够利用额外的存储空间和CD音频,同时也为出版商提供了经济上的宽松条件,使他们能够以非专有媒体的方式发行游戏。
几年后,NEC推出了另一款CD模块,名为超级 CD-ROM²(Super CD-ROM²),虽然读取器的硬件基本保持不变,但其通用 RAM 增加到了 256 KB。 已经拥有CD-ROM²设备的客户可以通过购买超级系统卡(Super System Card)进行 “升级”,超级系统卡包括额外的RAM(和一个额外的输入/输出例程!)。 除此之外,NEC 后来还提供了名为街机卡(Arcade Card)的新BIOS更新,其中包含2 MB内存。
基于CD的游戏严格依赖于为其开发的BIOS卡,尽管较新的卡可以向后兼容(但也有例外)。 因此,对于想玩几乎所有基于CD-ROM的游戏的用户来说,街机卡是首选。 我之所以提到“几乎”,是因为第三方公司也推出了自己的 BIOS 卡(即 “Games Express CD 卡”),要玩该工作室的游戏,就必须使用这些卡。
随着超级CD-ROM²的推出,NEC/Hudson还推出了PC-Engine/TurboGrafx-16的新变体Turbo Duo,它将控制台、读卡器和BIOS卡捆绑在一个包装中。
其它扩展
如果您想了解已发布的其他扩展,请查看在线目录[18]。
反盗版和自制游戏
HuCard卡带会锁区,这意味着PC-Engine游戏不能在TurboGrafx-16上开箱即用(反之亦然)。 这是因为数据线的顺序在美版上是颠倒的。 正如您所猜测的那样,这不是一个廉价转接器无法解决的问题。 不过,游戏中可能会包含检查系统区域的例程。
另一方面,CD-ROM游戏既不锁区也不防拷,但请记住,它们仍然需要系统卡来启动(这是有区域锁定的)。
这就是全部了,伙计们。
就这样了! 您刚刚阅读了今年的最后一篇文章。
对于网站来说,2020年是“有趣”的一年(抛开那些影响我们所有人的负面事件不谈)。 这一年从Wii文章开始,然后是PS2、Xbox、任天堂DS、Master System,最后是这篇文章。
访客数量也发生了很大变化。 起初,它的发展缓慢,但在夏天,它的访问量高得惊人。 我要感谢 Hacker News 用户、OSNews、Reddit、Gigazine、YouTubers、Twitter 用户以及其他许多论坛和用户分享了这些文章。 当然,我还要向那些慷慨解囊、帮助网站维持运营的捐赠者们致以崇高的敬意!
祝大家圣诞快乐,2021 年新年快乐,下次再见!
Rodrigo