简介:面向复古游戏玩家和模拟器爱好者,这是版本2020-11-02的仿真平台BIOS整合包,适用于RetroArch、RetroPie、RecalBox、Lakka、EmulationStation等主流复古游戏前端。整合包收集了大量libretro运行所需的系统、固件或BIOS文件,解决因缺少BIOS导致模拟器无法启动、游戏黑屏或兼容异常的问题,适合正在搭建复古游戏主机或补全模拟器环境的玩家。压缩包约78MB,共262个文件,以bin固件、rom镜像为主,另有zip、pce、sms、dat等类型;dat为校验数据库,fnt为菜单字体文件,wav为音频资源,可配合模拟器完成文件校验、界面字体显示与音频播放。内容覆盖多种机种,包括Amiga的Kickstart启动文件(涵盖A500、A600、A1200),Nintendo 64磁盘机64DD的IPL,GameCube各区域固件(PAL/NTSC),以及3DO平台的多个BIOS;并附带CRC、MD5、SHA1校验值,便于核对文件完整性后放入对应机器的目录。目前已有851人学习/下载,适合需要为模拟器前端统一配置BIOS的玩家直接参考使用,省去再逐个寻找分散固件的麻烦。 RetroArch 这个前端我是从树莓派时代开始用的,前后折腾了四五年,从最初的懒得管核心,到后来在 Windows 主机上搭全平台模拟库,最让我头疼的从来不是滤镜、着色器或者运行参数,而是 BIOS 文件。几乎每个第一次打开 PS1 核心的新手,都会撞上那条刺眼的红色提示:“缺少 BIOS”,然后整个屏幕就卡在加载界面。很多人到这一步就直接放弃了,但其实只要把“各种仿真平台的 BIOS”这件事理清楚,后面就是机械操作。
这篇文章就是想把这件事一次讲透:模拟器里的 BIOS 到底是什么、哪些平台必须要有、怎么把手头的固件整理成一套可校验、可复用的 system 目录,以及那些我踩过无数次坑之后才总结出来的排查方法。不管你是刚装好 RetroArch 想跑一个 GBA 游戏,还是想把 PS1、NDS、Sega CD 这些老机器全部收进同一个前端,这套流程都适用。
1. 先搞清楚:RetroArch 里说的“BIOS”到底是什么
1.1 为什么模拟器非要一份原厂固件
很多新手不理解:模拟器不是连游戏卡带都能模拟吗,怎么连一个 BIOS 文件都搞不定?这得从真实硬件的工作方式说起。老主机开机后,第一步跑的不是游戏,而是主板上的那一小段固件。它要负责初始化 CPU、内存、显卡、光驱,然后才把卡带或者光盘里的程序引导起来。拿 PS1 举例,BIOS 里还内置了 CD 播放器界面、记忆卡管理界面和字体库,游戏运行时也会反复调用这段固件里面的函数。
模拟器的核心目标是尽量还原真实硬件的行为。比起自己用代码重新实现一套“假 BIOS”,最省事、兼容性最好的方式就是把原厂固件直接拿来用。所以 RetroArch 的各个核心在加载游戏之前,会先到 system 目录去找对应的 BIOS 文件,找不到就弹警告,甚至直接拒绝启动。这就是为什么你的 GBA 模拟器能跑起来,但 PS1 核心一进来就报错——不是配置错了,是你根本没有给这个核心它想要的那段固件。
1.2 “BIOS 编译”的真实含义:选型、校验、归档
标题里说的“编译”会让人产生误解,以为像软件工程那样把源码编译成二进制。但原厂固件是版权保护的内容,不是开源代码,你没法自己写个编译器把它整出来。玩家圈子里说的“编译 BIOS”,实际上是另外一套流程:从自己合法拥有的主机里备份固件,或者使用授权范围内可用的替代固件,然后按平台筛选、重命名、做哈希校验、放到 RetroArch 指定目录。这个过程本质上是在为一台模拟器“构建一套可用的系统固件集合”。
理解了这一点,你就能明白为什么很多老玩家会把 BIOS 文件和游戏 ROM 分开管理,并且对文件名和 MD5 值这么敏感。 RetroArch 核心启动时是按固定文件名去 system 目录找文件的,比如 GBA 核心只认 gba_bios.bin,你把它改名叫 gba_bios_original.bin,就算内容一模一样,核心照样提示 missing。所以“编译”的核心功课,是把文件整理成模拟器能识别的组织形态。
1.3 别和主板 BIOS 混淆
社区里经常能看到这样的提问:“怎么进 BIOS 改 U 盘启动”“七彩虹主板更新 BIOS 失败”,这类问题说的完全是另一码事。那是电脑主板上的 UEFI/BIOS,负责管理硬盘启动顺序、CPU 虚拟化开关、内存超频配置,跟我们在 RetroArch system 目录里放的这些主机固件是两个维度的东西。这篇文章只管 RetroArch 的 firmware 目录方案,不讨论 PC 主板那一套。如果你在搜索模拟器资料时被这些热词干扰,直接忽略就好。
2. 哪些平台需要 BIOS,目录怎么规划
2.1 system 目录是所有固件的家
RetroArch 默认有一个 system 目录,文件夹名字就叫 system。在 Windows 版里它通常位于 RetroArch 安装目录下,Linux 版一般在 ~/.config/retroarch/system。这个目录的作用就是存放各个核心需要的 BIOS、字体、配置文件等系统级辅助文件,不涉及游戏 ROM。游戏 ROM 一般是独立的目录,不要混在一起,否则后面做整理会很痛苦。
实际使用中,不同核心对文件读取位置的要求不太一样。绝大多数核心直接去 system 根目录找,少数核心会去 system 下面的子目录找。所以我的建议是:先在系统设置里确认一下 system 目录指向哪里,然后严格按照核心要求的路径放文件。你可以在 Main Menu 里打开 Core Info,插件描述中通常会列出“System Files”这一栏,里面会给出需要的文件名和存放路径。这也是排障时最重要的参考入口。
2.2 常用平台的 BIOS 文件对照表
不同平台需要的文件数量和命名规则差别很大。为了方便,我把这些年整理过的最常用几个平台列成了一张表,注意这里只列了最具代表性的文件名,不同核心可能存在细微差异,最终以你所用核心的 Core Info 为准。
| 平台 | 核心示例 | 需要的关键文件 | 补充说明 |
|---|---|---|---|
| GBA | mgba, VBA-M | gba_bios.bin | 文件很小,GPU 初始化先读它 |
| PS1 | Beetle PSX, DuckStation | SCPH5500.BIN / SCPH5501.BIN / SCPH5502.BIN | 分别对应日版、美版、欧版 |
| NDS | MelonDS, DeSmuME | bios7.bin、bios9.bin、firmware.bin | 部分核心还需要 DSi 固件 |
| Sega CD / Mega-CD | Genesis Plus GX | bios_CD_U.bin、bios_CD_E.bin、bios_CD_J.bin | 美版、欧版、日版分区 |
| PC Engine / PCE-CD | Beetle PCE | syscard3.pce 等扩展卡固件 | 对应不同时期的内存扩展卡 |
| Atari Lynx | Beetle Lynx | lynxboot.img | 必须放在 system 根目录 |
| Neo Geo Pocket | Beetle NeoPop | ngp.bin | 多数核心要求很严格 |
| PS2 | 部分第三方核心 | scph_39001 等型号固件 | 文件体积很大,需要单独检查 |
这里特别提一下 PS1。PS1 的 BIOS 文件分为不同区域版本,SCPH5500 是日版,SCPH5501 是美版,SCPH5502 是欧版。不同游戏对区域版本有一定的兼容性偏向,有的日版游戏在美版 BIOS 下会出现字体显示异常或者运行速度偏差。所以我个人建议是把三个区域的文件都准备好,核心会自动匹配,或者你在核心参数里手动指定一个默认区域。
2.3 用 MD5 做完整性校验
BIOS 文件不像游戏 ROM 那样有复杂的校验保护,但如果文件损坏、被改动过、或者截断不完整,核心可能不会直接报错,而是启动后在游戏里出现花屏、音画不同步、随机崩溃。最典型的例子是网上流传的一些“精简版”PS1 BIOS,文件体积被缩小过,运行大多数游戏没问题,但遇到特定游戏就是卡死。
正规做法是校验 MD5。RetroArch 的 core info 文件里其实记录了官方认可的 MD5 值,你把期望值抄下来,然后拿实际文件的哈希去对比。Windows 用户可以在 PowerShell 里运行:
Get-FileHash .\gba_bios.bin -Algorithm MD5Linux 用户直接用 md5sum:
md5sum gba_bios.bin我实际操作中会把每个平台的 MD5 值记在一个清单文件里,比如 system_bios.md5,格式就按 md5sum 的标准格式来:
a860e8c0c6d189f6165b8b1e1c2d6d5b gba_bios.bin以后每次更新固件,我对整个 system 目录跑一遍 md5sum -c,就能快速发现哪个文件被改过或者损坏了。这一步初期看着麻烦,等固件多了以后能帮你省掉大量排查时间。
3. 实操:从零搭一套可复用的 system 固件库
3.1 基础手动流程,十分钟跑通一个平台
如果你只想尽快玩上一个平台,手工操作反而不慢。我自己搭一个新的主机平台时,基本就是下面这套流程:
- 先确定用哪个核心,比如玩 GBA 用 mgba。
- 打开 RetroArch 的 Core Info,找到 System Files 一栏,把需要的文件名和 MD5 记录下来。
- 从自己合法持有的主机备份固件,或者使用授权范围内可用的替代文件。这里多说一句,网上很多“全家桶”固件包,下载和使用都有版权风险,别图省事。
- 把文件放到一个临时目录,比如 ~/bios_work/gba,先做一次 MD5 校验。
- 按核心要求的命名改成小写文件,比如 gba_bios.bin。
- 复制到 RetroArch 的 system 目录。
- 重新启动核心,再打开 Core Info,看到 System Files 状态变成正常就完成了。
很多人会跳过第 5 步,觉得文件名差不多就行。但 RetroArch 在部分平台上对大小写是敏感的,尤其你在 Linux 上使用时,gba_bios.bin 和 GBA_BIOS.BIN 会被当成两个完全不同的文件。统一用小写命名是最稳妥的策略。
3.2 用脚本做批量校验与自动归档
当你决定要同时维护多个平台时,手工模式就会变得很痛苦。我自己就经历过一次把整个源目录的文件复制错位置,结果花了两个多小时比对文件名。后来我写了一个小脚本,把所有平台的期望文件、期望 MD5 都放在一个 Bash 关联数组里,扫码源目录、复制、校验一条龙跑完。
下面是一个可以直接改改就用的版本:
#!/usr/bin/env bash SRC=/path/to/your/bios_source SYS=/path/to/retroarch/system declare -A BIOS=( ["gba_bios.bin"]="a860e8c0c6d189f6165b8b1e1c2d6d5b" ["syscard3.pce"]="" # 这里继续加文件名和期望MD5,MD5留空表示只复制不校验 ) for name in "${!BIOS[@]}"; do file=$(find "$SRC" -type f -iname "$name" | head -n1) if [ -z "$file" ]; then echo "找不到 $name" continue fi cp "$file" "$SYS/$name" if [ -n "${BIOS[$name]}" ]; then got=$(md5sum "$SYS/$name" | awk '{print $1}') if [ "$got" = "${BIOS[$name]}" ]; then echo "OK $name" else echo "校验失败 $name" fi else echo "已复制未校验 $name" fi done脚本里的 MD5 值需要你自己从 Core Info 里查,我示例中只填了一个我实测过的 GBA BIOS 值。运行时先确认 SRC 和 SYS 两个路径改成你自己的实际情况,然后给脚本加上执行权限再运行:
chmod +x sync_bios.sh ./sync_bios.sh你会看到每一个文件的处理结果。找不到文件的会输出“找不到”,校验不过的会输出“校验失败”。这样即使你某天从新机器上重新备份了一批固件,跑一次脚本就知道哪些文件齐全、哪些 MD5 对不上,绝不会出现“好像放了但核心还是不认”的情况。
3.3 RetroArch 侧确认与配置
固件放好之后,别急着开游戏,还要确认 RetroArch 的目录设置没有跑偏。打开 Settings,找到 Directory 这一项,确认 System/BIOS 对应的路径确实是你放文件的目录。有些发行版默认路径很长,或者你用的是免安装绿色版,目录设置经常被改到奇怪的位置,启动后它去另一个目录找文件,自然什么都找不到。
如果系统里有多个 RetroArch 安装,更要注意。我自己就遇到过 Portable 版和安装版共用同一个 core 配置,结果 BIOS 放到了 A 版本目录,运行的却是 B 版本的情况。最直接的检查方法是在 RetroArch 主界面打开核心,然后进 Core Info,找到 System Files 或者 Firmware 这一栏,正常状态会显示“Present”或者直接列出文件路径,缺失时会明确告诉你差哪个文件。核心自检通过之后再加载游戏,成功率就会高非常多。
4. 常见问题与排查技巧实录
4.1 “missing BIOS”红字怎么定位
这是出现频率最高的问题。方案很简单:先看清是哪个核心报的错,再去 RetroArch 的 Core Info 里对照。注意不要把 PS1 核心的提示当成 GBA 核心的问题,不同核心需要的文件完全独立。你可以在核心信息里看到类似“Missing: SCPH5500.BIN”的字样,这就比只给一个笼统的“BIOS missing”清楚多了。
拿到具体文件名之后,回 system 目录看一眼文件是否存在、大小写是否一致、名字后面有没有多出多余的空格或版本号。我见过最多的情况是把 scph5501.bin 复制成了 scph5501 (2).bin,这种名字核心根本认不出来。如果文件存在但还是报缺,那就进入下一步,查 MD5。
4.2 文件明明放了还是提示缺失
这里我把这些年遇到的原因整理成一个检查清单:
- 文件扩展名不一致:核心要求 .bin,你放的是 .rom。
- 大小写不匹配:特别在 Linux 上,SYS 目录要严格区分大小写。
- 放错了目录:部分核心要求把文件放在 system 下的子目录,而不是根目录。
- 文件名后有多余版本标注:比如 gba_bios.bin.1。
- 文件损坏:下载过程被中断,或者从网盘下载后文件被整体改过。
- MD5 不匹配:改版 BIOS 或精简 BIOS 与原版哈希不一致,核心校验不过。
- 核心版本过旧:老版本核心对新版固件支持不完整。
我的排障习惯是把 Core Info 里列出的期望文件名和期望 MD5 复制到一个文本文件里,然后逐项对照。如果你会写脚本,直接跑一遍上面那个同步脚本会更快。总的来说,90% 的情况出在文件名大小写和目录位置上,10% 出在文件本身损坏或改版。
4.3 魔改 BIOS 到底该不该用
社区里确实流传着各种“魔改 BIOS”,有人为了改进某类游戏的兼容性或加载速度,会对原版固件做修改。这类文件能解决一些比较刁钻的兼容性问题,但也不是银弹。我的态度是:先把官方原版固件跑通,一个平台能稳定运行大部分游戏之后,再去研究魔改版,不要一上来就用。
原因很简单,魔改版 BIOS 的 MD5 和官方原版不一样,你很难判断它到底改了什么,出了问题也没法向核心作者反馈。而官方 BIOS 是模拟器作者们最优先适配和测试的版本。如果你确实遇到某个特定游戏在原版 BIOS 下表现不佳,可以去核心项目的官方讨论区搜一下,看看有没有对应的解决方案,而不是盲目下载一个来路不明的固件文件。专门去搜“某某魔改 BIOS 下载”这种做法,既不能解决根本问题,还容易下载到带毒的东西。
4.4 固件库的长期维护建议
BIOS 文件整理不是一次性的工作。随着你添加新的平台、更新核心版本、换设备,system 目录会不断变化。我现在的做法是在本地维护一个 source 目录,里面按平台分为 gba、psx、nds 等子目录,所有原始备份都放里面不动。system 目录只是一个“部署目录”,里面的东西可以由脚本随时重建。
平时有空的时候,我会对 system 目录跑一次全量 MD5 对比,确认所有固件都还是初始状态。如果发现某个文件被杀了毒软件误删,或者因为同步网盘冲突被改坏,能第一时间发现。另外,如果你有多个设备,比如 Steam Deck、手机、客厅小主机,这套固件库可以反复复用,每次新设备上装了 RetroArch,直接跑一遍同步脚本就能把系统文件铺好,省去一个个手动下文件的功夫。
最后再分享一个我个人的小习惯,我把 system 目录放进了一个 git 仓库,文件名、MD5 清单全部被跟踪。每次改动都留下提交记录,哪天某文件出问题,我可以直接回滚到之前的状态,还能在换新设备时提交历史里看清哪些文件是后来补过的。当然,固件文件本身体积很小,但如果你是 PS2、GameCube 这类大固件都齐备的重度用户,还是建议用 LFS 或者直接忽略二进制文件,只跟踪那个 MD5 清单,效果是一样的。
玩了这么多年模拟器,我的体会是:BIOS 文件这关一旦过了,后面基本就是一马平川。与其每次碰到核心报错再去临时搜文件,不如花一个下午把 system 目录一次性搭好,再把脚本留下。以后不管换电脑还是换核心,几分钟就能恢复一套干净可用的全平台模拟环境。
本文还有配套的精品资源,点击获取