ChisFlash 是开源 Game Boy Advanced SP (GBA SP) 烧录卡,通过 EPM240 可编程芯片实现 GBA 游戏 ROM 的模拟以及导入导出。本文介绍通过 BaconFlasher (硬件) + FlashGBX (软件) 烧录游戏的流程。
本网站不提供未开源的任何固件、软件的下载方式。 出于尊重原作者的考虑,请访问相应页面加 QQ 群然后从群文件下载。
前言 Game Boy Advance (GBA) 卡带的存储与烧录机制在硬件结构和软件兼容性层面均具有一定复杂性,尤其体现在存档芯片类型的多样性及其与烧录卡设计之间的耦合关系上。传统 GBA 实体卡带主要采用三类存档方案,即 FLASH、SRAM 与 EEPROM,其最大存储容量分别为 64 KB(一说 32 KB)、128 KB 和 8 KB[1 ] 。不同存档方案在电源保持方式、读写时序以及软件调用接口等方面存在显著差异,这也使得通用型 GBA 烧录卡的设计与使用成为一项具有挑战性的工程问题。
ChisFlash[2 ] 是由 ChisBread(Bread & Moni)提出并开源的一款 GBA 烧录卡方案。相较于以 EZ-Flash[3 ] 为代表的传统商业烧录卡,ChisFlash 采用 EPM240 可编程逻辑器件实现对 GBA 游戏 ROM 的模拟及数据导入导出,在保持功能完整性的同时显著降低了硬件成本。
烧录 ChisFlash 卡带需要 NDS 或者烧录器。BaconFlasher[4 ] 是一款硬件层面开源的 GBA 烧录器,其基本功能是从计算机端读取游戏 ROM 数据,并按照既定时序将数据写入目标卡带。BaconFlasher 与 ChisFlash 之间可以通过标准卡带插槽或直接针孔连接两种方式进行通信,如图 1 所示。
图 1: 硬件连接示意图 在软件层面,FlashGBX 是目前卡带烧录最成熟的工具之一,可用于卡带信息读取、游戏 ROM 烧录以及存档数据的导入导出。ChisBread 改了一版 FlashGBX,用以适配他们的 ChisFlash 卡带。然而,烧录游戏的可用性并不完全取决于硬件与软件本身,而更多集中于游戏 ROM 的存档类型与目标卡带存储结构之间的匹配关系。针对不同存档类型的游戏,是否需要进行 SRAM 转换补丁、免电补丁,乃至更换带电池的 SRAM 卡带,均需要在烧录前进行系统性的判断。
基于上述背景,本文介绍一种通过 BaconFlasher 和 FlashGBX 烧录游戏的流程。
材料清单 硬件 软件 烧录前的准备 BaconFlasher 固件烧录 如图 2 所示是 BaconFlasher 的 PCB。 BaconFlasher 与 ChisFlash 卡带的连接方式有两种。一种是通过卡带插槽,也就是 PCB 下方的大片空白;与此同时,BaconFlasher 还提供了 6 个针孔,图中叠放 ChisFlash 卡带 PCB,被称为 “model 3”。 model 3 据说烧录速度很快,但我没有采用。因为,市面上还没有特地为 model 3 留出孔位的卡带外壳,也就是说,使用 model 3 进行烧录,每次都要拧螺丝拆开。相比之下,通过 model 1/2,也就是卡带金手指连接,虽然速度只有 150Kb/s,但 3-5 分钟也烧录完成了。
图 2: BaconFlasher PCB 正面图[4 ] 。红色部分是烧录器本体,下方大片空白是卡带插槽。烧录器左上和右中有两个开关,根据烧录器背面信息调整两个开关,可以改变烧录器读取 / 写入模式,一共 4 种:model 0~3。黄色是 ChisFlash PCB,可以通过如图所示的叠放连接烧录器右侧的孔位,通过 “model 3” 高速传输数据。 与 ChisFlash 相同,BaconFlasher 也使用 EPM240 作为控制芯片。 BaconFlasher 的嘉立创页面里说:
当前为 Beta 阶段,固件完善后将开源 EPM240 的全部代码。
截止本文写作时间,还没有开源 EPM240 的代码,需要进 QQ 群下载固件bacon_flasher_beta.pof。之后使用 Quartus II 13.0 Programmer 烧录。
驱动与软件 下载安装 CH347 厂商驱动[6 ] ,需要注意目前只支持 Windows。
安装运行 FlashGBX:
1 2 3 git clone https://github.com/ChisBread/FlashGBX pip install -v -e . pip install pyside6 # 为了启用 GUI 模式
游戏 ROM 预处理 烧录前的最后一项检查:游戏存档类型是否与 ChisFlash 烧录卡相匹配。
按存档芯片划分,ChisFlash 主要有 3 种卡带:FLASH、SRAM 和 FRAM。FLASH 版卡带主要用于原生 FLASH 存档类型的游戏,例如 Gen 3 的宝可梦;SRAM 版卡带有带电池和不带电池两种;FRAM 芯片价格昂贵,但是断电后存档依然保留。FLASH/EEPROM 存档类型的游戏 ROM 可以通过 GBA Tool Advance (GBATA)[9 ] 打补丁从而转换为 SRAM 格式存档。如果想用没有纽扣电池的 SRAM 卡带,还需要再给游戏 ROM 打免电补丁。但有些游戏不兼容免电补丁,此时只能换成带电池的 SRAM 卡带。
总的来说,如果游戏存档类型是 FLASH,烧录目标是 FLASH 卡带,那么不需要给游戏 ROM 打补丁。其他情况下,主要是想烧录各种存档类型的游戏 ROM 到 SRAM 卡带,需要先打 SRAM 补丁。如果 SRAM 卡带不带电池,还需要再打免电补丁。如果打了免电补丁的游戏无法保存,则需要改换带电池的 SRAM 卡带。
图 3: 烧录策略图 举一个栗子 使用烧录卡有许多好处,不仅可以玩到许多原版游戏,还可以烧录改版。下面以宝可梦火红的 386 改版[10 ] 为例,演示一遍烧录流程。
表 1: 原版 ROM 信息[10 ] Database match Pokemon - FireRed Version (USA) Database No-Intro: Game Boy Advance (v. 20210227-023848) File/ROM SHA-1 41CB23D8DCCC8EBD7C649CD8FBB58EEACE6E2FDC File/ROM CRC32 DD88761C
首先访问改版网页。下载链接里提供的是 ipa 格式的文件。该文件并不是可以直接拿来玩的游戏 ROM,而是定义了如何修改原版 ROM 的补丁文件。也就是说,玩家需要自行获取原版 ROM,然后通过 GBATA 将补丁打到 ROM 上,最终获得一份可玩的改版游戏 ROM。
根据网页上的信息我们可以得知,该补丁对应的原版 ROM 是 FireRed Version (USA),美版火红。
图 4: 使用 GBATA 打开原版美版火红 ROM。其中 CRC32 校验和 DD88761C 与表 1 一致。 下载美版火红 ROM,首先计算 SHA-1 校验和,与表 1 的 SHA-1 值一致。 图 4 显示,该游戏存档类型为 1M FLASH,所以我们选取 FLASH 版本的 ChisFlash 烧录卡进行烧录。在烧录之前,还先需要使用 GBATA 把改版补丁打到 ROM 上。选择 IPS patcher 选项卡,选择补丁文件路径,GBATA 会自动生成输出文件路径,如图 5 所示。此时点击 patch,然后生成的文件就可以用于烧录了。
图 5: 使用 GBATA 给 ROM 打 ips 补丁。 烧录时先把硬件按图 1 连接好,然后启动 FlashGBX。
如图 6 所示是 FlashGBX 的 GUI 页面。先点击右下角的 connect 连接到 BaconFlasher,如果连接成功左下角会显示烧录器信息。左侧卡带信息可以手动选择,也可以点击 “Analyze Flash Cart” 自动获取。点击 “Write ROM” 弹出 ROM 选择窗口,然后就会开始烧录。
图 6: FlashGBX GUI 页面。左侧是卡带和 ROM 信息,右上是操作按钮,右下是烧录进度。先点击右下角 connect,连接成功后在左上选择卡带类型:GB/GBA,本文的例子此时应选 GBA。 烧录完成后点击右下角 disconnect,然后就可以拔下卡带了。
Fin.
参考链接