How to Organize BIOS for Dozens of Emulators Once and for All
Anyone who has ever set up a retro combo on a Steam Deck, old mini-PC, or Raspberry Pi knows this routine. You install Batocera, EmuDeck, or plain RetroArch, drop your favorite games for PlayStation 2 or Sega Saturn, launch the ROM, and see a black screen. The log says it's missing a file like scph1001.bin or saturn_bios.bin.
Then the typical quest begins: you go to a search engine, find sketchy sites full of ads, download 50-gigabyte archives with tons of duplicates and junk. Half of the dumps have typos in their names, checksums don't match, and the emulator keeps crashing. The RetroBIOS project solves this problem with an engineering approach.
Why emulator documentation often lies
The main issue with BIOS files lies in the desync. Frontend and shell authors (for example, Recalbox or Batocera) write their lists of required files in wikis. Meanwhile, emulator core developers update their codebases, change file name requirements, add support for new chip revisions, or modify hardware initialization algorithms.
As a result, the official BIOS list for a frontend can be out of sync for years with what the emulator binary actually requests at startup.
The RetroBIOS creators took a different approach. Instead of reading outdated forums and wiki pages, they analyze emulator source code directly. If a Libretro core or standalone emulator looks for a file of a specific size with a particular MD5 hash, that fact is recorded as the single source of truth.
What's inside the project
The repository combines a massive metadata database, verification scripts, and ready-to-use system file sets for 12 popular platforms: Batocera, BizHawk, EmuDeck, Lakka, MiSTer FPGA, ROCKNIX, Recalbox, RetroArch, RetroBat, RetroDECK, RetroPie, and RomM.
The scale of the work done is impressive by the numbers:
- 436 emulators analyzed from source
- 463 gaming systems, from ancient Atari and ZX Spectrum to PS3 and Nintendo Switch
- 8,925 files in the database, including system firmwares, arcade ROMs, and system fonts
- 5 checksum types for each file (MD5, SHA1, SHA256, CRC32, Adler-32)
The project developers also cross-reference system dumps with digital preservation databases like No-Intro, Redump, and TOSEC.
Of particular interest is the so-called gap analysis. The project documentation openly lists what's not yet in the database: rare dumps that the community hasn't physically created yet, or unique encryption keys for specific user consoles.
How to install everything in one command
For quick setup, the authors wrote installation scripts. They automatically detect your operating system, verify hashes of files you already have, and download only what's missing.
For Linux, macOS, and Steam Deck, just run in the terminal:
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh
On Windows via PowerShell:
irm https://raw.githubusercontent.com/Abdess/retrobios/main/install.ps1 | iex
If you're setting up an SD card for a handheld console directly from your computer, you can pass the target path and platform as arguments:
curl -fsSL https://raw.githubusercontent.com/Abdess/retrobios/main/install.sh | sh -s -- --platform retroarch --dest /path/to/sdcard
The script verifies files exactly the way your chosen shell does. For example, Batocera checks the MD5 hash of each file, BizHawk relies on SHA1, and RetroArch only verifies the correctness of the file name in the system/ folder.
Building custom packs via Python
If you don't want to pull the entire multi-gigabyte archive and are building a minimal system for a couple of specific platforms, the repository has convenient CLI tools. They only require Python 3 and the pyyaml library.
Build a package for the Dolphin emulator only:
python scripts/generate_pack.py --emulator dolphin
Generate a file set exclusively for PlayStation 2:
python scripts/generate_pack.py --system sony-playstation-2
View the available list of platforms and cores:
python scripts/generate_pack.py --list-emulators
python scripts/generate_pack.py --list-systems
There's also a validation script. It scans your existing BIOS directory and produces a detailed report: which files are in place, where the hash is corrupted, and which dumps are missing to run specific games.
python scripts/verify.py --platform batocera
python scripts/verify.py --emulator flycast
Open data for developers
RetroBIOS is useful not only as a source of ready-to-use files but also as a structured database. On the documentation site, the authors publish exports in JSON, CSV, and SQLite formats with all hashes, paths, and emulator dependencies.
If you're writing your own launcher, ROM manager, or configuring a custom Linux build for handhelds, these files will save you from manually parsing hundreds of core sources. The community has already started building utilities based on this data, such as scanners for sorting home archives.
Nuances and licensing
Script source code and build utilities are distributed under the MIT license. System files and firmwares are third-party proprietary software, so they're distributed under terms allowing personal backup and compatibility use. The authors keep an open NOTICE page with a form for takedown requests from rights holders.
Archives larger than 2 GB in releases are split into volumes .zip.001 and .zip.002. You can extract them with 7-Zip or concatenate them with a simple cat Pack.zip.0* > Pack.zip command in the terminal before unpacking.
Is it worth trying
If you have a handheld console (Anbernic, Miyoo, Steam Deck), a retro build on Raspberry Pi, or you just run emulators on your work PC, bookmark this repository.
Instead of chaotic forum archive hunting, you get a clean collection where every byte is verified against the emulator's own source code. The script installs in a couple of minutes and saves hours of manual directory wrangling.
Related projects