PC引擎/ TurboGrafx-16架构–实用分析

2020-12-20 00:44:33

哈德森和NEC联手启动了第四代游戏机。不幸的是,一旦比赛到来,他们的努力最终将黯然失色。尽管如此,它们的控制台仍将成为市场上最紧凑的设计之一。

就像Master系统一样,NEC发行了许多修订版和奇怪的变体,一开始可能有些麻烦。因此,以下是最重要的模型,以供将来参考:

PC引擎:第一个具有此体系结构的控制台,但仅在日本发布。它看起来像一个带有最少端口的白色小盒子。

TurboGrafx-16:针对美国市场重新设计的PC引擎。它具有相同的功能,但外观不同。让我想起了NES / Famicom改编版。

Supergrafx:PC引擎的增强版,具有完全不同的外壳和新硬件。它的独有功能不在本文讨论范围之内。

本文将重点讨论PC Engine / TurboGrafx-16,但还将讨论导致PC Engine Duo / TurboDuo发行的扩展。

在此控制台中,我们找到了HuC6280,这是由Hudson Soft生产的芯片,其中包含两个组件。其中之一是CPU,它可以两种速度运行:〜1.79 MHz和〜7.16 MHz。

HuC6280不是像Z80那样的现成组件,而是NEC设计的专有CPU。在查看了官方文档后,它似乎确实复制了著名的MOS 6502和Western Digital的65C02的许多行为。话虽如此,这对程序员意味着什么?

在开始之前,我们已经在这里介绍了MOS 6502的某些部分,并在这里介绍了Western Digital和Ricoh制作的16位变体,以防您首先要检查它们。

65C02是Western Digital生产的MOS 6502的另一种改进版本,由于其制造方法(CMOS),效率更高。从软件方面来看,65C02添加了一些新指令并修改了一些现有指令的行为。

我们可以提供有关65C02的更多信息,但是我认为最好专注于Hudson添加的功能(对65C02的补充),因为它们对于有效操作此控制台至关重要。与65C02相比,HuC6280具有:

一个计时器。它通过从指定值开始递减计数来工作,完成后它会向CPU分派中断。

我还没有提到的一件事是,NEC还在CPU旁边添加了一个内存管理单元或“ MMU”,允许处理21位地址(请记住,原来的6502仅具有16位地址)。因此,可以访问的内存量从64 KB增加到2 MB。

该MMU与任何现代MMU都有很大不同。 PC引擎中的一个由8个8位寄存器(称为映射寄存器或“ MPR”)组成,这些寄存器与CPU的16条地址线组合在一起形成21位地址总线。

CPU可以分别使用特殊的TAM和TMA指令读取和/或写入任何MPR。

当访问物理内存时,MMU保留来自CPU的地址线A13-A16,以选择八个MPR之一。

然后,MMU将CPU行A0-A12与所选MPR的8位值组合在一起以设置A13-A20。结果为21位地址。

因此,此MMU将物理内存分为8 KB页(12 CPU行= 8 KB页),这是CPU可以在不交换MPR或更改其值的情况下访问的内存量。

无论如何,如果您在理解它时遇到困难,不要感到不知所措(这只是一种非常规的操作方式,有些人可能会觉得很有趣)。

Hudson Soft HuC6270(这是另一种芯片,也称为视频显示控制器或“ VDC”)会对此加以注意。 HuC6270将绘制播放器在屏幕上看到的所有内容,并且其功能与Sega的同类产品非常相似。因此,请先查看该文章,因为我将重点介绍与Hudson的产品的不同之处。

首先,VDC是一个图块引擎(直到第5代出现时才是标准),但请注意PC引擎如何包含64 KB的VRAM,与竞争对手相比,这是一个很大的数目。这可能会导致一种新型的内容,稍后我们将进行检查。

图形数据的排列方式有点令人困惑:CPU和VDC都使用16位地址,但是CPU仅能处理8位字,而HuC6270在VRAM中存储16位字。这意味着RAM中的单个地址包含一个字节,而VRAM中的地址存储两个字节,因此开发人员在将数据传输到VRAM时必须注意这种差异。

原因归结于哈德森组织电路的方式:VDC具有16位地址总线,但仅控制前15条线(最后一条始终设置为“ 0”),因此从中获取奇数地址第二个字节。我不知道为什么哈德森走这条路,但是我确实知道,如果系统改用128 KB的VRAM,所有这些都会更有意义(因为16位地址总线最多只能访问64 KB,因此通过以某种方式使数据总线加倍,最多可以检索128 KB)。也许那是哈德森/ NEC最初的计划?

除了前面提到的粒度奇数之外,从功能上来说,VDP非常简单。该子系统具有三个主要组件:我们已经讨论过的VDC和VRAM,以及视频编码器(也称为“ VEC”,我们将在适当的时候看到更多信息)。

系统可以使用多种分辨率,这是因为游戏可以更改一组寄存器,这些寄存器用作控制显示时间的参数,而当CRT开始对帧进行投影时,这些寄存器又会发生变化(与过扫描相反)。最低分辨率为256×224像素,而一些自制软件证明该系统可以达到512×240像素。

现在,让我们逐步了解如何绘制框架,为此,我将借用Bonk's Adventure的资产。

快速提醒一下,图块只是渲染器获取以绘制屏幕部分的8x8像素位图。对于VDC,框架由两个平面组成:背景层和子画面层。

在VRAM内部,有一个称为“角色生成器”的区域,其中定义了背景层专有的图块。图块的每个像素占用4位,因此最多可以使用16种颜色。从理论上讲,最多可以定义4096个背景图块,但是由于VRAM小得多,因此实际上很少。

另一方面,使用来自VRAM中单独存储位置的图块绘制Sprite,这称为Sprite Generator,它与以前的Character生成器不同,因为此处的图块宽16x16像素。

视频编码器是一个单独的芯片,可存储32个调色板(背景为16个,子画面为16个),每个调色板可存储16种颜色,每种颜色均为9位宽(红色3位,绿色3位,绿色3位)。蓝色)。

(本节是为那些对Hudson如何利用16位粒度的64 KB VRAM感兴趣的人而写的,但您不必完全了解它就可以继续阅读本文的其余部分。)

到目前为止,我们已经讨论了图块的每个像素都是使用4位(或半字节,也称为半字节)存储的。现在,哈德森指出,图块由四个8x8位图(分别称为“ CH0”,“ CH1”,“ CH2”和“ CH3”)组成。每个贴图的宽度为1位,但是一旦将这四个贴图组合在一起,它们就会形成具有4位像素的最终图块。

另外,还记得VRAM上的16位对齐方式吗?每个16位字存储单行的两个1位位图(8行+ 8行)。因此,在写入八个条目之后,将存储两个映射(而不是一个)。请查看图表以更好地理解这一点。

Sprite切片也会发生同样的情况,但是由于它们是16x16位图,每个位图占用16个字。换句话说,要存储单个Sprite块,将占用64个字(相当于VRAM中的8个字节)。

通过在VRAM中的条目填充背景属性表来构造背景层,每个条目的位置定义屏幕中图块的X​​ / Y坐标。每个条目都包含来自字符生成器和调色板的图块索引。

该层的最大尺寸为1024 x 512像素(128 x 64瓦片),但程序员可以将最小层设置为256 x 256像素(32 x 32瓦片)。

与往常一样,可以通过更改VDC中某些寄存器的值来滚动此层。

VDC包含一个称为Sprite Attribute Table Buffer的内部存储器,最多可以定义64个Sprite。该表的每个条目均存储独立的X / Y位置,调色板,图块索引和H / V翻转。此外,还有一个属性可以将一个精灵与另一个精灵结合在一起。

每个条目的长度为8个字节,尽管由于16位的粒度会浪费一些空间。

最重要的是,CPU无法访问该表,因此需要在VRAM中完成该表,然后激活DMA通道以将其复制到VDC(以便后者可以使用)。

关于限制,每条扫描线最多只能有16个子画面。另一方面,可以设置中断,以便在发生精灵溢出或碰撞的情况时通知游戏。

到目前为止,我们已经了解了VDC如何完成所有繁重的工作,但实际上最后一个任务已委派给视频编码器或“ VCE”。 Hudson将该芯片命名为HuC6260,其基本功能是从VDC接收9位数据流,应用调色板并将结果发送到电视(以模拟信号的形式)。

如果您阅读了以前的文章,您可能会熟悉计时的重要性。好吧,这里也不例外:为了避免出现不必要的伪影(例如“ snow”),只能在垂直中断期间更新VCE。

视频编码器输出RGB(以及同步)和YPbPr,分别适合与SCART电缆或分量电缆一起使用。到目前为止看起来不错!& mldr

& mldr不幸的是,哈德森决定将RF调制器作为开箱即用的视频的唯一方法,因此毕竟不是那么好。但话又说回来,PC引擎是在80年代设计的,因此这种方法保证了与所有类型电视的兼容性(假设它们来自控制台的同一区域)。

从好的方面来说,扩展端口包含的引脚可以承载RGB视频和多种同步类型,但是它们将需要外部附件才能发挥其优势。

与本网站中分析的许多其他第三代控制台一样,PC引擎包含一个可编程声音发生器或“ PSG”。另一方面,此PSG特别依赖于波形存储器(也称为“波形缓冲区”)方法来合成声音,而不是使用一组预定义的波形(即脉冲,三角形等)。波形存储器使程序员可以定义自己的波形,从而为音轨安排提供更大的灵活性。

该系统有六个通道,每个通道都是通过写入一组寄存器来设置的,有很多可自定义的属性,因此以下是最重要的属性:

波形形状:使用32个5位值生成波形周期,每个值对应于特定时间的波幅。

频率控制:两个8位寄存器更改通道的频率,以产生具有相同波形的不同音符。

幅度级别:共享寄存器的四位控制通道的声音大小。

某些通道组具有其他操作模式。例如,最后两个通道连接到噪声发生器。此外,第二个通道可以充当低频振荡器来调制第一个通道,非常类似于FM合成。

PSG将混合所有内容并输出立体声信号。但是,除非您找到绕过RF端口的方法,否则您只会从电视中听到单声道。

该控制台具有大量附件,其中一些附件在内部(例如,通过提供更多的RAM)和在外部(通过添加更多的端口和/或读取其他存储介质的可能性)完全增强了控制台的功能。

这在很大程度上归功于控制台背面的扩展端口,该端口允许访问以下组件:

电压输入线:绕过原始PSU并通过附件为控制台供电。

音频输入和输出:可以接收立体声音频输出和/或从输入线路发送音频。

CPU数据和地址线:使CPU能够访问附件,反之亦然。

VDC数据线(那些连接到视频编码器的数据线):允许附件点击这些线,但我不确定该怎么做。

CPU控制线:读取HuCard和CD检测标志,使用的速度模式,还可以访问中断线。

我很好奇,想知道NEC或Hudson在什么程度上设想了此控制台,他们是否正在尝试构建某种可以升级到下一代的“模块化控制台”?

我仍然没有提到控制器(或某些地方称其为Joypad)。与其他产品非常相似。控制台仅允许连接其中之一,游戏会检查内存中的单个地址以获取按键。该地址返回一个4位值。

游戏前没有内部ROM或'BIOS'或其他任何可运行的东西,因此我们这里没有操作系统。复位向量位于地址$ FFFE和$ FFFF(请记住内部寄存器为8位,而存储器地址为16位,因此我们需要两个字来初始化程序计数器),并且这些地址指向游戏卡。

这也意味着程序员要负责“内务处理”(即初始化内存,设置MMU等)。

程序以6502汇编语言编写,并带有额外的65C02操作码和Hudson引入的程序码。

NEC / Hudson不再依赖其他所有人似乎都喜欢的笨拙而乏味的墨盒,而是设计了另一种媒介,这次使用的是信用卡大小的卡片,称为HuCard。它们来自某些MSX游戏使用的称为“蜜蜂卡”的较旧媒体。

奇怪的是,它们与Sega卡非常相似,但它们包含38个引脚而不是35个引脚。在内部,两者之间的差异更为明显:

在没有映射器的情况下,CPU内存映射最多可以访问1 MB的HuCard内存,因此大多数游戏都卡有1 MB ROM。同时,“街头霸王II”之类的游戏驻留在2.5 MB的ROM中!

有一个“音频输入”引脚,似乎可以使卡向控制台提供额外的音频通道。

那个扩展端口打开了通往大量附件和扩展单元的大门,最终他们将简单的PC引擎变成了完全不同的东西。似乎还不够,HuCard插槽补充了扩展的可能性。我的意思是说,对于本文,我将重点关注显着的升级(其中一些已包含在控制台的未来版本中)。

让我们看一下CD-ROM²扩展,它包含一个CD-ROM读取器和一个特殊的HuCard,称为System Card,后者充当BIOS来引导游戏并提供一些与读取器接口的例程。在内部,读取器包括用于常规用途的64 KB RAM,用于传输ADPCM样本的另一个64 KB RAM和最后用于存储数据的2 KB。如您所料,这使游戏开发人员可以利用额外的存储空间和CD音频,同时为发布商提供经济上的缓解,使其可以通过非专有媒体分发游戏。

数年后,NEC发布了另一个CD模块,称为SuperCD-ROM²,而阅读器的硬件基本保持不变,但其通用RAM增加到256 KB。已经拥有CD-ROM²单元的客户可以通过购买超级系统卡来对其进行“更新”,其中包括额外的RAM(以及另一个I / O例程!)。最重要的是,NEC后来发布了称为Arcade Card的新BIOS更新,其中包含2 MB的RAM。

基于CD的游戏严格依赖于为其开发的BIOS卡,尽管较新的卡向后兼容(某些例外)。因此,对于想要玩几乎所有基于CD-ROM的游戏的用户而言,Arcade卡是首选。我提到“几乎”是因为第三方公司还发布了自己的BIOS卡(即“ Games Express CD卡”),而这些卡是专门用来播放该工作室中的游戏所必需的。

NEC / Hudson还通过SuperCD-ROM²发行了PC-Engine / TurboGrafx-16的新版本,称为Turbo Duo,将控制台,读取器和BIOS卡捆绑在一个包装中。

如果您对发布的其他扩展版本感到好奇,请查看“来源”部分(本文结尾)中的目录链接。

HuCard已在区域锁定,这意味着PC-Engine游戏无法在现成的TurboGrafx-16上运行(反之亦然)。这是因为数据线在美国版上是倒置的。如您所料,这不是廉价适配器无法解决的问题。但是,游戏可能包含检查系统区域的例程。

另一方面,CD-ROM游戏既没有区域锁定也没有复制保护,但要记住,它们仍然需要系统卡来引导它们(区域锁定)。

2020年对于网站而言是“有趣的一年”(撇开那些影响了我们所有人的负面事件)。这一年从Wii文章开始,然后是PS2,Xbox,Nintendo DS,Master System,最后是这本书。

访客数量也发生了很大变化。刚开始时进展缓慢,但随后在夏季,访问量却惊人地高。我要感谢Hackernews用户,OSNews,Reddit,Gigazine,Youtubers,Twitter用户以及许多其他论坛和人们分享文章。当然,向捐助者大声疾呼,捐助者的慷慨帮助使该地点得以持续发展!

本文是控制台体系结构系列的一部分。如果您觉得有趣,请考虑捐款,您的捐款将用于获得更多工具和资源,以帮助改善当前文章和即将发表的文章的质量。

-Carlos Diaz Navarro-Colin Szechy-David Portillo-Duncan Bayne-Eric Haskins-Grady Haynes-Izsak Barnette-Josh Enders-Olivier Cahagne-Samuel Shieh-Sanqui- Thomas Peter Berntsen

## 2020-12-18-发布日期? ## 2020-12-16-第一稿完成。 -感谢@dpt签出草稿。-卡洛斯,R型非常难。