MiSTle:不到300元玩转FPGA复古电脑 作者:蓬岸 Dr.Quest 编号:1957460485092934080 创建于:2025-10-03 21:40:25 修改于:2025-10-08 23:22:18 -------------------- 项目背景 使用FPGA模拟老式电脑往往被视为比软件模拟器更为精确、维护更加便利的方式。但其价格往往让许多爱好者望而却步,即使上海勤谋(QMTech)推出了较为平价的MiSTer兼容主板,搭建一台完整可用的FPGA复古电脑的成本也在千元以上。 2017年MiSTer推出时的目标,是使用廉价的Terasic DE10-Nano开发板提供比其前身MiST更便宜的选项,MiST是一款定制化的,基于Altera Cyclone III的FPGA复古电脑主板,最初设计时的目标是提供Amiga和Atari ST的模拟,其名称也是从AMiga和ST合成而来。 MiST的说明书:http://www.harbaum.org/till/mist/mist.html (Link: http://www.harbaum.org/till/mist/mist.html) 但大多数国内爱好者有所不知的是,MiSTer的高价几乎完全是近五年来被复古游戏,特别是街机翻新市场哄抬起来的。直到2020年,MiSTer的基础DE10-Nano开发板官方售价都只要130美元,而教育售价则是110美元。但2021年DE10-Nano涨价至170美元,2022年更涨价至220美元,让MiSTer从“MiST平替”一下变成了大多数爱好者难以承受的奢侈品。 幸运的是,2023年MiST的设计者Till Harbaum开始尝试将Atari ST的FPGA核心MiSTery移植到国产FPGA开发板矽速科技(Sipeed)Tang Nano 20K上,由此产生了MiSTeryNano项目,为FPGA模拟社区带来了一股平价的清流。 2023年Atari-Forum的帖子:MiSTery on Tang Nano (Link: https://www.atari-forum.com/viewtopic.php?t=43080) https://github.com/MiSTle-Dev/MiSTeryNano (Link: https://github.com/MiSTle-Dev/MiSTeryNano) MiSTeryNano项目的独特之处在于,它不再试图将老式硬件的全部逻辑都放入单一FPGA芯片,而是在将CPU、芯片组的核心逻辑放入FPGA的同时,使用一块微控制器(MCU)作为“FPGA伴侣”(FPGA Companion)提供USB外设、SD卡等现代设备的支持,以及提供可调节复古电脑选项的OSD菜单,而FPGA和MCU之间使用SPI接口通信。得益于此种设计,MiSTeryNano可以使用较小规模的FPGA重现更加复杂的电脑平台。 https://github.com/MiSTle-Dev/FPGA-Companion (Link: https://github.com/MiSTle-Dev/FPGA-Companion) “FPGA伴侣”除了被Till Harbaum用在MiSTeryNano(Atari ST)、NanoMig(Amiga)、和NanoMac(Macintosh Plus)上,也被Stefan Voss运用在其C64 Nano,VIC20 Nano、NanoApple2(Apple IIe)和A2600 Nano(Atari 2600)上,逐渐形成了一种通用的FPGA复古电脑模拟框架,在今年夏天,这一框架被名命为MiSTle。 https://github.com/MiSTle-Dev (Link: https://github.com/MiSTle-Dev) (Image: https://pengan1987.github.io/images/picx/v2-f6383c06dc11fba351598b1e782acaf2_720w.jpg) 搭建MiSTeryNano硬件 MiSTeryNano是MiSTle系列最初的方案,也是该计划下代码最成熟,文档最丰富的项目。MiSTeryNano主要元件皆为国产,这让不仅让它价格便宜、更容易在国内买到,而且与许多类似项目经常需要预售、断货不同,得益于国内健壮的供应链,它几乎没有断货的风险。 开发板型号 芯片型号 用途 矽速Tang Nano 20K 高云GW2AR-LV18 老式电脑FPGA重实现 矽速M0S Dock 博流ML616 “FPGA伴侣”控制器 当然搭建一台完整可用的FPGA复古电脑还需要一些外围的配件,以下是我的参考搭建,价格主要参考:淘宝网Sipeed矽速科技官方店 (Link: https://sipeed.taobao.com/),下方链接为矽速科技官方店链接,可放心购买。 配件 参考价格(人民币) Sipeed Tang Nano 20K FPGA 开发板(焊好排针) 175元 面包板 3.48元 32G TF卡 32元 Sipeed M0S Dock 26.9元 双层树莓派外壳 11元 USB集线器模块 10.5元 USB Type-C转接头 5元 杜邦线(7跟) 1元 3M胶带(少量) 1元 合计 265.88元 其中各个部件的连接示意图: (Image: https://pengan1987.github.io/images/pic1/v2-c59cfd121ad91ab8837b8c71cc15c032_720w.jpg) Tang Nano 20K和M0S Dock之间的连线可以参考FPGA伴侣的BL616文档:https://github.com/MiSTle-Dev/FPGA-Companion/tree/main/src/bl616 (Link: https://github.com/MiSTle-Dev/FPGA-Companion/tree/main/src/bl616) 一个定位Tang Nano 20K上针脚的简易方法,是从“S2”按钮处开始数9个针脚,但只需要连接七根线,第3、4脚不需要连接。 (Image: https://pengan1987.github.io/images/picx/v2-c0219fe9eb7cfe3231245998629c20ec_720w.jpg) 而M0S Dock的针脚编号可以从其底部的丝印处找到 (Image: https://pengan1987.github.io/images/pic1/v2-159b14fad37a2009563e5238dcbcbdca_720w.jpg) 当然,如果你手头上有现成的USB Hub和手机上常见的Type-C OTG线,也可以直接使用它们完成搭建,比如下图: (Image: https://pengan1987.github.io/images/pic1/v2-c80fe612fc96c899f06ee0145cabea72_720w.jpg) 如果希望更有“成品感”,还可以使用杜邦线胶壳将线序固定,更加整齐的同时也方便拆装 (Image: https://pengan1987.github.io/images/picx/v2-9aba80c3a523ebb0f65408999cb5743b_720w.jpg) 准备刷机工具 FPGA Companion使用的是博流BL616芯片,刷机工具是Bouffalo Flash Cube https://nand2mario.github.io/tangcore/user-guide/assets/bouffalo_flash_cube-1.1.zip (Link: https://nand2mario.github.io/tangcore/user-guide/assets/bouffalo_flash_cube-1.1.zip) Tang Nano 20K则是使用的高云GW2AR-LV18系列芯片,使用高云的云源编程器教育版即可,高云软件下载地址在:高云半导体 (Link: https://www.gowinsemi.com.cn/software/3) 如果你希望安装完整的高云IDE,可参考矽速的文档:安装 IDE - Sipeed Wiki (Link: https://wiki.sipeed.com/hardware/zh/tang/common-doc/get_started/install-the-ide.html) 下载系统固件 要完成MiSTeryNano的搭建,需要准备三组文件,分别是FPGA软核的bitstream,老式电脑的ROM和FPGA Companion固件,以MiSTeryNano为例: 文件名 用处 获取方法 atarist.fs FPGA的bitstream文件 在 https://github.com/MiSTle-Dev/MiSTeryNano/releases (Link: https://github.com/MiSTle-Dev/MiSTeryNano/releases) 的Assets里找到 tos104uk.bin Atari ST的TOS 1.04固件 在https://www.atariworld.org/tos-rom/ (Link: https://www.atariworld.org/tos-rom/) 下载TOS 1.04 English-UK,解压得到tos104uk.img,改扩展名为.bin tos162uk.bin Atari STE的TOS 1.62固件 在https://www.atariworld.org/tos-rom/ (Link: https://www.atariworld.org/tos-rom/) 下载TOS 1.62 English-UK,解压得到tos162uk.rom,改扩展名为.bin fpga_companion_m0sdock.bin M0S Dock的FPGA Companion固件 在 https://github.com/MiSTle-Dev/FPGA-Companion/releases (Link: https://github.com/MiSTle-Dev/FPGA-Companion/releases) 的Assets里找到 flash_m0sdock_cfg.ini M0S Dock的Bouffalo Flash Cube刷写配置文件 同上 由于高云的刷机工具不支持rom、img等扩展名,所以各类老式电脑的BIOS文件扩展名都需要改为bin。 刷入FPGA固件 按下列步骤操作 准备:在Tang Nano 20k断电的情况下,按住S2按钮,再连接到电脑USB接口,待到电脑完成硬件驱动安装,并识别出新增加的串口,如果需要安装驱动,请在高云编程器的目录下找到下面两个文件并安装: - GowinUSBCableDriverV5_for_win7+.exe - GowinUSBCableDriverV4_for_win7+.exe 注意这两个文件是并列关系而非替代关系,根据开发板小版本的不同,可能对应两个版本驱动中的任何一个,建议保险起见同时安装上述两个驱动。 安装好驱动后启动高云编程器软件,会自动识别到新的硬件,保持默认设置就好,然后按照下图中的指示进行刷机: (Image: https://pengan1987.github.io/images/picx/v2-2b5f335b6f7cf8bf93dcdcbfef3788b1_720w.jpg) - 确认芯片系列为GW2AR - 确认设备为GW2AR-18C - 确认访问模式为External Flash Mode(外部闪存模式) - 确认操作为exFlash Erase, Program thru GAO-Bridge(外部闪存擦除,使用GAO桥接器编程) - 确认刷入文件为atarist.fs - 确认起始地址为0x000000 - 选保存 - 按刷机按钮开始刷机 之后FPGA芯片会自动重启,但并没有任何功能,因为此时的FPGA只相当于一块没有BIOS的空Atari ST主板,还需要刷入BIOS才能运行。 刷入Atari ST的TOS ROM 我们需要再次将Tang Nano断电,并按住S2按钮连接电脑,回到刷机模式,按照下图操作,刷入TOS 1.04 ROM (Image: https://pengan1987.github.io/images/picx/v2-902540603d10549f515a95a552b188b0_720w.jpg) - 确认芯片系列为GW2AR - 确认设备为GW2AR-18C - 确认访问模式为External Flash Mode(外部闪存模式) - 确认操作为exFlash C BinErase, Program thru GAO-Bridge(外部闪存擦除C Bin,使用GAO桥接器编程) - 确认刷入文件为tos104uk.bin - 确认起始地址为0x100000 - 选保存 - 按刷机按钮开始刷机 之后Tang Nano开发板会自动重启,如果这时你连接着HDMI显示器,可能就能够看到Atari ST进入到TOS桌面了。当然,如果希望启用Atari STE模拟的功能,还需要再刷入一版TOS 1.62 ROM。操作方法与TOS 1.04基本一致,但需要注意 6. 刷机文件改为tos162.bin 7. 起始地址改为0x140000 (Image: https://pengan1987.github.io/images/picx/v2-691dbc1d321c2a22dce7c1c8c02b900b_720w.jpg) 此时我们手头的Tang Nano已经具备了完整的Atari ST/STE模拟功能,但是由于我们还没有给M0S Dock安装FPGA Companion固件,因此它还不能启用键盘、鼠标等外设,接下来我们就来完成M0S Dock的配置。 将FPGA Companion刷入M0S Dock 从FPGA Companion的发行页面 https://github.com/MiSTle-Dev/FPGA-Companion/releases (Link: https://github.com/MiSTle-Dev/FPGA-Companion/releases) 中下载下面两个文件,并将其放入同一文件夹备用,注意文件夹名称尽量不要有中文 - fpga_companion_m0sdock.bin - flash_m0sdock_cfg.ini 将M0S Dock断开USB连接,按住M0S Dock上的BOOT按钮,再连接到电脑,这时电脑的设备管理器会出现一个新的COM串口。 启动BLFlashCube程序,在芯片类型选择中选BL616/618,然后按下图操作 (Image: https://pengan1987.github.io/images/pic1/v2-e1f0822aef7a5ac5cb96ad1d1a65e844_720w.jpg) - 端口选中M0S Dock对应的串口 - 配置文件选中flash_m0sdock_cfg.ini - 然后开始下载(刷机) 之后M0S Dock就具备了完整的FPGA Companion功能,无论是USB键盘、鼠标还是手柄的输入操作,都可以经过它转发给Tang Nano FPGA了。此时我们的Tang Nano 20K就变成了一台完整、可操作的Atari ST电脑! (Image: https://pengan1987.github.io/images/picx/v2-68b9da9955ea927264c138731262d8d1_720w.jpg) 从SD卡加载软盘镜像 MiSTeryNano使用常见的.ST格式镜像(注意不能是.STX格式)在互联网档案馆或MyAbandonWare上都能找到不少游戏下载,如果你需要将其他格式转换为.ST格式,可以使用MSA Converter转换工具或Hatari模拟器等完成转换,但这已经超出此文讨论的范围了, https://archive.org/details/softwarelibrary_atari_st_games (Link: https://archive.org/details/softwarelibrary_atari_st_games) https://www.myabandonware.com/browse/platform/atari-st/ (Link: https://www.myabandonware.com/browse/platform/atari-st/) 当下载好.ST格式的软盘镜像之后,可以将其放入FAT32格式的microSD卡,并插入TangNano 20K背面的卡槽中,在键盘上按F12键即可呼出OSD菜单,在Disk A:中选择对应的镜像,即可将软盘镜像挂载到模拟器上。 (Image: https://pengan1987.github.io/images/picx/v2-b7f5e7165f0d091465a5e0c826b165d4_720w.jpg) 一些软件可以直接从TOS桌面上的A盘、B盘图标加载,而另外一些软盘,特别是游戏和demo软盘,则通常是自启动软盘,需要在加载完软盘后选择Reset重启电脑才能自动加载。 刷写其他机型 如果你已经能够成功配置好MiSTeryNano,说明你已经掌握了MiSTle系列机型的一般配置方法,配置其他机型的方法通常是大同小异的,但需要注意的是: - 所有机型的FPGA bitstream起始地址都是0x000000 - 不同机型只要属于MiSTle计划,FPGA Companion都是通用的,M0S Dock不用重新刷 - 但不同机型的BIOS数量和地址都不一样,比如NanoMig(Amiga)有时需要将同一ROM刷入两次,而C64 Nano则需要刷入至少两个DOS ROM,这需要仔细阅读对应的说明文档 - 不同机型支持的软盘镜像不一,比如NanoMig支持.adf格式的磁盘文件,而NanoMac则支持dsk格式的软盘镜像和vhd格式的硬盘镜像。 附录:MiSTle计划中的复古电脑项目连接 - MiSTery(Atari ST):https://github.com/MiSTle-Dev/MiSTeryNano (Link: https://github.com/MiSTle-Dev/MiSTeryNano) - NanoMig(Commodore Amiga):https://github.com/MiSTle-Dev/NanoMig (Link: https://github.com/MiSTle-Dev/NanoMig) - C64Nano(Commodore 64):https://github.com/MiSTle-Dev/C64Nano (Link: https://github.com/MiSTle-Dev/C64Nano) - NanoMac(Macintosh Plus):https://github.com/MiSTle-Dev/NanoMac (Link: https://github.com/MiSTle-Dev/NanoMac) - VIC20Nano(Commodore VIC-20):https://github.com/MiSTle-Dev/VIC20Nano (Link: https://github.com/MiSTle-Dev/VIC20Nano) - NanoApple2(Apple IIe):https://github.com/MiSTle-Dev/NanoApple2 (Link: https://github.com/MiSTle-Dev/NanoApple2) - A2600Nano(Atari 2600):https://github.com/MiSTle-Dev/A2600Nano (Link: https://github.com/MiSTle-Dev/A2600Nano)