吟寻事儿:用FPGA开发板来做硬件模拟游戏机?
作为一名Retro Gamer(复古经典游戏玩家),我一直都很喜欢重新在摩登设备上,重温古老但非常好玩的经典游戏(现代游戏我也玩,但大多是守望先锋这样的电竞类网游),比如街机、SFC、GBA等经典主机、掌机上的老游戏,但其实相比玩游戏本身,我可能更多是在折腾“玩模拟游戏的硬件”这件事上,最主要便是安装了模拟器的第一方掌机、或者开源掌机,以及SBC这样的产品,但这些硬件设备本质上,其实都是通过软件模拟的方式实现玩经典游戏的,但到最近,我发现了其实还可以用FPGA开发板来做到硬件级模拟复古游戏机。
首先这个FPGA,即现场可编程门阵列,个人理解是可灵活定制和修改运行逻辑的集成电路芯片(高人可指教解释更准确的定义),其实PC DIY玩家们,对FPGA最大的印象,应该都是Intel在多年前了收购全球最大的FPGA制造商Altera,用于加大投入到做IoT和AI领域,而FPGA本身也是更多用在生产、机器人的特定行业的设备开发和制造,我们普通消费者平时都不会直接接触到,当然这里不是在讲FPGA是什么和有什么用之类的,而是讲FPGA来硬件模拟复古游戏这件事。
相比软件模拟,硬件模拟可以做接近于原来真机一样的游戏运行表现。其实在速度上,由于如今电脑、手机,甚至SBC的硬件性能都已经远远高于那些古董级的游戏主机,用来跑软件模拟游戏的帧数还是足够的,但原机是涵括了CPU、内存、显示、音频芯片等在内的整套系统,通过编程代码的形式,来让不同架构、设计的现代化硬件,来模拟旧主机的这些硬件特性,除了会耗费大量的硬件,还会存在游戏兼容性(特别是一些有add-on芯片的游戏),画面显示撕裂或不准确的缺陷问题。
特别是原机的声音部分,由于各种经典游戏机用了各种特制的音频芯片,现代硬件想要还原原声,需要非常复杂的编程来解决,但开发模拟器的程序员大多都是自己兴趣爱好,一般难以有投入时间精力去作极致的优化开发,能做到没杂音、听个响就很不错了,但这些兼容性、准确性的问题,在FPGA的硬件模拟上就要容易解决很多了,因为FPGA本身可以通过定制编程来复制(replication)原机芯片的运行逻辑,达到与原来相同的效率和效果。
而且FPGA的硬件模拟,还可以解决用原机或者开源硬件来玩经典游戏的两大问题。第一个是显示输出,因为经典游戏机年代久远,原机用的都是RF、AV、分量那种旧式的模拟信号显示输出,原机需要通过采集卡或者魔改芯片,才能连接到现代采用HDMI数字显示的电视机或者显示器上,这带来一点显示延迟,也不够“原味”,第二就是输入延迟,在软件模拟器,经典游戏机的控制器输入其实都是通过代码转换模拟输入,所以在Raspberry Pi这样的SBC开源硬件上,玩经典游戏会有一定的输入延迟,虽然数字上只是毫秒级,但一些技术高超的硬核,或者童年肌肉记忆深刻的玩家,始终觉得那些控制操作与原机的手感有明显差别。
所以FPGA硬件模拟游戏机这样的产品,在Retro Gamer圈子里面,一直都是奉为神器,目前实际的商用产品,比较知名的就是Analogue了,他们的Mega SG和Super Nt便是基于FPGA芯片,来硬件模拟回世嘉MD,以及任天堂的SFC两大经典电视主机,实际运行效果获得一众Retro Gamer、老游戏玩家的好评,誉为最佳的模拟游戏主机,但它们售价不菲(190美元),而且也不容易买到(Super Nt已经买不到了)。
现在还有另外一个选择,便是用FPGA开发板来自己做一台硬件模拟游戏机了。国外有位非常棒的开发者做了个MiSTer项目,可以让一块DE10-Nano开发板,硬件模拟Commodore 64、Apple II、SNEC、Magadrive、GBA等在内超多的古董个人电脑、游戏机,而这块开发板上用的FPGA是来自Intel的Cyclone系列V SE,据说这是与Analogue用的同款,所以从YouTube对这块开发板和MiSTer的测试,评价运行效果非常逼近真机的表现,让人心动。
当然这块DE10-Nano开发板本意并非是用来做模拟游戏机的,它来自Terasic出品,这其实是一家国内的公司,名为友晶科技,在他们官网便有提供这块开发板销售,但那是非常传统的电邮联系下订单的方式,而在淘宝也是有得卖,价格同样为1170元,但如果可以提供教师证、学生证的话,可以买到便宜不少,只要990元的教育版,虽然也不便宜,但综合考虑的话,这个要比Analogue的主机划算很多,可玩性也更高。
与大多数人一样,我没学过集成电路、数字编程之类的相关内容,但看过MiSTer的教程介绍,其实折腾起来并不难,因为Mister提供了基本上是plug-and-play的教程,所以软件部分的操作是比较容易,把编程文件镜像拷进去一站MicroSD,再插回开发板里面就行了,而硬件部分除了那块开发板,还可以加上一些扩展子板,包括有SDRAM、RTC、I/O和USB Hub,都开放了PCB图纸给大家自己DIY,其中SDRAM子板是原作者推荐的子板,因为据他介绍,DE10-Nano虽然内置有DDR3内存,但一些经典主机用的是很古老的EDO RAM,用同样比较古老的SDRAM来模拟会效果更好。
目前我还没有入手这块DE10-Nano开发板,主要是还想研究下SDRAM、I/O子板怎样弄出来,所以还没有实物体验测试一番,这里只是分享有那么一件好玩的事告知给大家,但如果你也对此很感兴趣,可以访问MiSTer在Github上的Wiki页面摸索下,或者在YouTube上也有不少相关的视频可以参考。