软硬件融合硬核技术内幕——引子 从魂斗罗到DPU

2022-09-08 17:12:40 浏览数 (1)

2633年,外星人入侵地球,并在加鲁加群岛建立了军事组织,称为“红色猎鹰(Red Falcon)”。Red Falcon的样子大概是这样的:

错了,划掉,应该是这个样子:

因此,施瓦辛格和史泰龙(现在的妹子们不喜欢,划掉)鹿晗和黄子韬化身超级战士“魂斗罗”(Contra),担负起了拯救地球的使命。

没错,这就是家喻户晓的电子游戏《魂斗罗》的剧情。由于游戏很难,需要很快的反应速度和手眼配合能力,方老师小时候在“上上下下左右左右BA”的帮助下可以玩过第一关,并且无比羡慕自己哥哥玩通8关以后,3条命增加到了6条。

在方老师学习到了计算机的基础知识以后,发现《魂斗罗》这个游戏的可执行文件和所需要的数据,总共容量只有128KB,相比《王XX耀》以GB论的容量,可谓是浓缩的精华。

原来,运行《魂斗罗》游戏的硬件平台,针对游戏应用的特点,进行了深度的软硬件融合设计,使得开发者可以在极小的空间内开发出色彩和情节丰富的游戏。

这个家伙的CPU是一块MOS 6502 CPU(和著名的Apple-II电脑同款),

主频1MHz(也就是每个指令基础周期为1us,比Intel Xeon慢几千倍);

支持16bit的地址总线和8bit的数据总线,也就是支持2的16次方地址空间,64K指令/RAM空间,每次只能从RAM中读取8bit 1字节。

让我们回忆一下FC游戏机的音效和图像效果。FC游戏机的屏幕分辨率为256*224,系统支持52种颜色,但屏幕上只能同时显示13种(4 bit)。我们可以计算出,屏幕每帧的数据量为

256*224*4/8 = 28672Byte。

在NTSC制式(日本电视机制式)下,每秒需要刷新30帧画面,FC游戏机需要每秒输出860KB的数据。这对于一颗1MHz的处理器而言,是巨大的挑战。

此外,游戏的背景音乐和音效也需要占用CPU的指令进行输出。在极度贫瘠的机器性能限制下,FC的游戏无法将BGM和音效录制进游戏卡,只能用程序操控机器合成BGM和音效。这也进一步增加了CPU的压力。

因而,初代FC游戏机的设计师为这颗6502CPU又找了两位帮手:PPU(图像控制器)和pAPU(伪音频处理器)。

PPU实际上是我们计算机里面GPU(俗称显卡)的老祖宗。FC游戏机里面的PPU,一般使用Ricoh的2A03处理器,并挂载2KB的显存,帮助CPU绘制游戏画面,如下图:

实际上这个图是拆成很多方格的:

眼尖一点发现树和白云是一样的,只是颜色变了。

原来,之所以2KB的显存能放下这么大的一张图,是因为FC游戏的ROM里面有个拼图库,如《超级马里奥》的拼图库是这样子:

(总共有16*16=256块,每块的分辨率是8*8)

细心的同学可以看出来,游戏画面的每个格子里面的图案都可以在这张拼图库中找到。拼图库里的每个方块都有自己的索引,想调用哪个方块的图案可以直接按编号找。

原来,在显存中,刚才游戏背景画面的编码,是这个样子的:

前面提到,FC的分辨率是256*224,实际上也就是32*28 = 896个方块,所占用的显存大小还不到1KB。

类似地,马里奥人物也是由方块拼接而成的:

当然,拿到编码,从ROM读取图形块,拼装后输出到电视机的工作,在转换成模拟信号之前,是由PPU完成的。同样,绘制游戏角色(如马里奥,魂斗罗或双截龙等),这些计算也是由PPU完成。其具体实现超出了我们主题的范围,感兴趣的同学可以参考这里:

https://zhuanlan.zhihu.com/p/44236701

而FC游戏机的另一个主要辅助部件pAPU,则可以根据CPU给的数字信号,输出几类波形:

1. 方波,一般用于主声部。

2. 三角波,一般用于低音。

3. 噪音波形,一般用于形成节奏,制造出类似鼓点的声音。

4. 脉冲调制编码,很少有游戏使用,《超级马里奥3》是个例子,游戏使用脉冲编码形成类似钢鼓的声音。

这几类波形在示波器上看到的大致是这样:

通过不同频率和振幅的2路方波(Voice 1和Voice 2),一路三角波(Voice 3)的叠加,可以生成背景音乐 (大家理解为什么FC游戏机的音乐如此难听了吧)。Voice 4和Voice 5可以实现枪炮声一类的音效。

是的,pAPU就是计算机“声卡”的雏形。

有了PPU和pAPU,一颗弱小的6502 CPU就可以为读者们带来如此多的童年乐趣,比如这些:

这就是计算机系统软硬件融合的魅力所在,也是我们即将推开的一扇新的大门。

在云计算时代,最火热的软硬件融合的话题是DPU(Datapath Process Unit),DPU的硬件能够接管Hypervisor、vSwitch、VirtIO等关键路径的软件工作,帮助服务器上的CPU分担计算调度、网络和存储的工作,让服务器上的CPU更聚焦于计算本身。鲜为人知的是,DPU这项前沿技术的始祖,原来是来自于我们童年的回忆。

如果您觉得精彩,请推荐给您的朋友。

0 人点赞