Every retro emulation guide eventually runs into the same wall: a black screen, a “BIOS not found” error, or a core that refuses to boot a single disc. RetroArch itself sits at version 1.22.2 as of September 2026, and its PlayStation, Saturn, Sega CD, and GBA cores all lean on the same original firmware dumps the real hardware shipped with decades ago. Standalone tools like PCSX2 and Dolphin work the same way. None of them include copyrighted BIOS files, and that is by design. This tutorial walks through exactly how to obtain, verify, and install BIOS and firmware files for the emulators people actually run in 2026: legally, with the right file names, and in the folders each core actually checks.
By the end you will have a working multi-system BIOS library, a Python script that checks every file’s hash automatically, and a troubleshooting checklist for the errors PCSX2, RetroArch, and Dolphin throw most often. The primary keyword here, retroarch bios pack, pulls roughly 1,300 monthly US searches with low competition, which tells you how many people hit this exact wall every month.
Don't miss new tech stories on Google
Add Tech Insider once in the Google app and our stories appear in your news suggestions.
What BIOS Files Actually Do Inside an Emulator
A console BIOS (or firmware, on handhelds) is the low-level boot code that runs before a single game loads. On the original PlayStation it initializes the CD controller and shows the startup logo. On the PS2 it manages the system menu, memory card format, and region checks. On the Nintendo DS, “firmware.bin” stores the user’s saved settings and the boot menu, while “bios7.bin” and “bios9.bin” handle the two ARM processors. Emulators like Beetle PSX, PCSX2, and melonDS were built to run against the exact instruction set that BIOS chip provides, so unless a core specifically implements a high-level BIOS replacement (a few do, and we cover which ones below), missing or corrupted BIOS files mean the emulator has nothing to boot into.
This matters more in 2026 than it did five years ago. RetroArch’s libretro cores have gotten stricter about hash-matching BIOS files rather than just checking file size, largely to cut down on support tickets from users running corrupted or incomplete dumps. That stricter checking is good for reliability, but it also means a BIOS file that “mostly works” in an older emulator build can now get flagged outright.
Prerequisites: What You Need Before You Start
This tutorial assumes a Windows, macOS, Linux, or Steam Deck setup, but the paths and logic carry over to Android with minor folder changes. Here is what to have ready before Step 1.
- RetroArch 1.22.2 (current stable, released November 17, 2025) or a standalone core such as PCSX2, DuckStation, or Dolphin
- A hash-checking tool: built-in
md5sumon Linux/macOS, orCertUtilon Windows (no install needed) - Python 3.10+ if you want to run the batch BIOS verifier script in this guide (optional but recommended)
- 7-Zip or an archive tool that fully extracts .zip/.7z BIOS archives rather than just browsing inside them
- The original console (or a legally purchased used unit) for any system where you plan to dump your own BIOS rather than use a built-in HLE core
- 60–90 minutes if you are setting up BIOS files for four or more systems in one sitting
If you have not installed RetroArch yet, our RetroArch setup guide covers the base installation in 12 steps before you get to BIOS files at all. Grab the current stable build directly from the official RetroArch download page rather than a third-party mirror, since some older mirrors still serve the 1.21.x line with looser BIOS hash checking than the current 1.22.2 stable.
Step 1: Understand the Legal Line Before You Download Anything
This is the step most tutorials skip, and it is the one that actually matters. PCSX2’s own documentation states plainly that dumping your own BIOS from a PS2 you own is legal, while downloading a BIOS file from a third-party site is not, regardless of whether you own the console. The same logic applies to every system in this guide: Sony, Sega, Nintendo, and Microsoft all hold copyright over their firmware, and “BIOS pack” archives circulating on forums and Discord servers are unauthorized redistributions even when the console itself has been off the market for 20 years.
The practical difference matters because of what happened in August 2026: Nintendo targeted the Eden and Citron Switch emulators with new DMCA anti-circumvention notices in February 2026. Nintendo’s argument centered specifically on projects that bundled or depended on unauthorized decryption keys and firmware, the same category BIOS packs fall into. None of this makes owning an emulator illegal. It does mean that dumping your own BIOS from hardware you own, rather than downloading one, is the only approach that holds up.
Every dumping method in this tutorial requires a console you legally own. If you do not own the hardware for a given system, the honest options are to skip that system, buy a used unit, or use a core built specifically to run without proprietary BIOS (noted per-system below).
Step 2: Locate RetroArch’s System/BIOS Folder
Every BIOS file, regardless of which console it belongs to, goes into one folder inside RetroArch: the System/BIOS directory. Open RetroArch, go to Settings, then Directory, and look for the System/BIOS entry. The default location depends on your platform and install type.
| Platform / Build | Default System/BIOS Path |
|---|---|
| Windows (installer) | %APPDATA%\RetroArch\system\ |
| Windows (portable .7z) | system\ folder next to retroarch.exe |
| Linux | ~/.config/retroarch/system/ |
| Linux (Flatpak) | ~/.var/app/org.libretro.RetroArch/config/retroarch/system/ |
| macOS | ~/Library/Application Support/RetroArch/system/ |
| Android | /storage/emulated/0/Android/data/com.retroarch/files/system/ |
| Steam Deck (EmuDeck default) | ~/retrodeck/bios/ or ~/.var/app/…/system/ depending on install |
Do not scatter BIOS files into per-core subfolders unless a core’s own documentation specifically calls for it (Dolphin’s GameCube IPL file is the one major exception, covered in Step 7). Every other libretro core scans the single System/BIOS directory listed above and ignores nested folders. Libretro’s own directory configuration documentation confirms this and warns specifically against dumping BIOS files into RetroArch’s general “Starting” directory instead of the dedicated System/BIOS path.
system/
├── scph5501.bin # PS1 US BIOS (Beetle PSX / Beetle PSX HW / DuckStation core)
├── scph5502.bin # PS1 EU BIOS
├── scph5500.bin # PS1 JP BIOS
├── saturn_bios.bin # Sega Saturn BIOS (Beetle Saturn / Kronos)
├── mpr-17933.bin # Sega Saturn JP BIOS variant
├── bios_CD_U.bin # Sega CD / Mega-CD US BIOS
├── bios_CD_E.bin # Sega CD / Mega-CD EU BIOS
├── bios_CD_J.bin # Mega-CD JP BIOS
├── dc_boot.bin # Dreamcast boot ROM (Flycast)
├── dc_flash.bin # Dreamcast flash/settings ROM (Flycast)
├── gba_bios.bin # Game Boy Advance BIOS (mGBA)
├── bios7.bin # Nintendo DS ARM7 BIOS (melonDS / DeSmuME)
├── bios9.bin # Nintendo DS ARM9 BIOS
└── firmware.bin # Nintendo DS firmware/settings
Step 3: Dump a PS1 BIOS With BIOS Dumper
PS1 BIOS dumper, maintained on GitHub by ShendoXT, is the standard tool for pulling a BIOS image directly off a physical PlayStation or PSone. The workflow has not changed much in years because the hardware has not changed: burn the dumper to a CD-R, boot it on the console, and let it write the BIOS data to a memory card (or over a serial link on some revisions), then reassemble the split data on your PC.
- Download the BIOS Dumper ISO from the official GitHub releases page and burn it to a CD-R at the slowest write speed your drive supports (fast burns cause read errors on PS1 optical drives).
- Boot the disc on your PS1 or PSone with a memory card inserted.
- Follow the on-screen prompts to write the BIOS dump to the memory card.
- Use a memory card reader (or a second console with a compatible transfer tool) to pull the split files onto your PC.
- Reassemble the split files into a single .bin using the dumper’s included recombination utility.
The result should be a 524,288-byte file. Depending on your console’s region, name it scph5501.bin (North America), scph5502.bin (Europe), or scph5500.bin (Japan). Do not rename a BIOS from one region to match a different region’s expected filename: the hash will not match, and mismatched BIOS regions cause save corruption on real hardware ports too.
Step 4: Dump a PS2 BIOS With FreeMCBoot and uLaunchELF
PCSX2 will not run without a real PS2 BIOS, and the project’s own docs are explicit that downloading one, even from a console you own, does not satisfy the legal requirement. You have to create the dump yourself. The community-standard method uses FreeMCBoot on a PS2 memory card plus uLaunchELF to run the actual dumping tool.
- Install FreeMCBoot onto an 8MB or larger PS2 memory card (multiple guides and installers exist depending on your PS2’s soft-mod method).
- Copy a BIOS dumper ELF, such as ps2dumper.elf, onto the memory card alongside uLaunchELF.
- Boot the PS2, launch uLaunchELF from the memory card, then run the dumper ELF.
- Insert a USB flash drive formatted as FAT32; the dumper writes the BIOS image plus companion .rom1 and .nvm files to it.
- Copy all files from the USB drive to your PC. Keep every companion file, since PCSX2 sometimes needs the .rom1 (DVD player ROM) alongside the main BIOS .bin.
Name the resulting file to match your console’s serial, for example SCPH-39001.bin for a North American slim PS2. In PCSX2, go to Settings, then BIOS, and either let PCSX2 auto-detect the folder or click Browse and point it directly at the folder containing the .bin file. If you would rather follow a dedicated walkthrough for the emulator itself, our PCSX2 setup guide covers the full install alongside this BIOS step.
Step 5: Sega Saturn, Sega CD, and Dreamcast Firmware
Three Sega systems in RetroArch each need their own firmware set, and all three use physical CD-based hardware you can dump the same way. Saturn cores (Beetle Saturn, Kronos) look for a file commonly distributed as saturn_bios.bin, with the Japanese ROM variant sometimes labeled mpr-17933.bin. Our dedicated Saturn emulator comparison covers which of the three current Saturn cores handles BIOS detection most reliably if you want a deeper breakdown.
Sega CD (Mega-CD outside North America) needs a region-matched BIOS: bios_CD_U.bin for US, bios_CD_E.bin for Europe, and bios_CD_J.bin for Japan. RetroArch’s Genesis Plus GX and Picodrive cores both check for these under the same names. Dreamcast, running through the Flycast core, needs exactly two files: dc_boot.bin (the boot ROM) and dc_flash.bin (flash memory holding system settings). Both come from the same GD-ROM drive dump process used to extract other Dreamcast system data, and both must be present together or Flycast refuses to boot any disc image.
Step 6: Game Boy Advance, Nintendo DS, and 3DS Firmware
Handheld BIOS setup works differently from disc-based consoles because you are dumping from a cartridge-era device rather than an optical drive.
Game Boy Advance
mGBA, RetroArch’s GBA core, expects a single file named exactly gba_bios.bin. Unlike PS1 or PS2 emulation, mGBA actually runs reasonably well with its own high-level BIOS replacement if you never supply a real dump, but boot animations and a handful of BIOS-call-dependent games behave more accurately with a genuine dump. If you already own a GBA, GBA SP, or DS with GBA backward compatibility, homebrew dumping tools designed for those handhelds can pull the BIOS directly from the console’s internal ROM.
Nintendo DS
melonDS and DeSmuME both look for three separate files: bios7.bin (ARM7 processor BIOS), bios9.bin (ARM9 processor BIOS), and firmware.bin (system settings and boot menu). All three need to come from the same physical DS or DS Lite and stay together unrenamed; melonDS in particular validates the firmware against the BIOS pair and will reject a mismatched set rather than silently ignoring it.
Nintendo 3DS
3DS emulation is the most involved of the group. Current dumping guides use GodMode9, run on a hacked 3DS you own, to extract boot9.bin, boot11.bin, and the system’s cryptographic keys to an SD card, which then get copied to your PC for use with 3DS cores. This is also the category Nintendo has targeted most aggressively with DMCA action in 2026, so treat any site offering pre-dumped 3DS keys as a legal and security risk, not a shortcut.
Step 7: The Dolphin GameCube Exception
Dolphin, covering GameCube and Wii, is the one core in this entire guide that does not use the shared System/BIOS folder. Its optional GameCube IPL file goes to a completely different path: RETROARCH_SAVES_FOLDER/dolphin-emu/User/GC/<USA, EUR, or JAP>/, and it must be named IPL.bin regardless of region, according to the official libretro documentation for the GameCube/Wii core. Dolphin also runs perfectly well without this file for the vast majority of GameCube games, since the project maintains a high-level BIOS replacement; the real IPL only matters for a small number of titles and for getting the authentic GameCube boot animation. If you are setting up Dolphin from scratch, the Dolphin emulator setup guide walks through the rest of the configuration.
Step 8: Verify Every BIOS File With an MD5 Hash Check
A BIOS file that is the right name but the wrong dump (a bad read, a truncated transfer, or a corrupted download of your own backup) will produce exactly the same “BIOS not found” style errors as a missing file, which is why hash verification is not optional. Every major BIOS reference table publishes MD5 and SHA1 hashes for known-good dumps; the North American PS1 BIOS, for example, has a well-documented MD5 of 490f666e1afb15b7362b406ed1cea246 and a file size of exactly 524,288 bytes.
# Linux / macOS
md5sum scph5501.bin
# Expected output:
# 490f666e1afb15b7362b406ed1cea246 scph5501.bin
# Windows (built-in, no install required)
CertUtil -hashfile scph5501.bin MD5
If the hash printed does not match the known-good value exactly, the dump is corrupted and needs to be redone, not renamed or force-loaded. RetroArch’s PlayStation cores in particular will show a “failed to load content” or missing-BIOS notification even when a file with the right name sits in the right folder, if the hash check inside the core itself fails.
Step 9: Reference Table for Filenames, Sizes, and Hashes
Keep this table open in a second window while you work through your own dumps. It covers the BIOS files this tutorial has walked through, matched to the core that expects them.
| System | Filename | Size | Core(s) |
|---|---|---|---|
| PS1 (NA) | scph5501.bin | 524,288 bytes | Beetle PSX, Beetle PSX HW, DuckStation |
| PS1 (EU) | scph5502.bin | 524,288 bytes | Beetle PSX, Beetle PSX HW, DuckStation |
| PS2 (NA) | SCPH-39001.bin + .rom1/.nvm | ~4MB total | PCSX2 |
| Sega Saturn | saturn_bios.bin | ~512KB | Beetle Saturn, Kronos, Mednafen |
| Sega CD (NA) | bios_CD_U.bin | 128KB | Genesis Plus GX, Picodrive |
| Dreamcast | dc_boot.bin + dc_flash.bin | ~2MB combined | Flycast |
| Game Boy Advance | gba_bios.bin | 16KB | mGBA |
| Nintendo DS | bios7.bin, bios9.bin, firmware.bin | ~260KB combined | melonDS, DeSmuME |
| GameCube (optional) | IPL.bin | 2MB | Dolphin |
Step 10: Build a Python Script to Batch-Verify Your Whole Library
Checking eight or nine files one at a time gets tedious fast, especially after reinstalling RetroArch or moving to a new PC. This script scans your system folder, computes the MD5 of every file present, and reports which ones match known-good hashes, which are missing, and which are present but mismatched. This is the complete working project for this tutorial: drop it in your system folder and run it any time you add a new BIOS or troubleshoot a core that will not boot.
#!/usr/bin/env python3
"""bios_verify.py — batch MD5 checker for a RetroArch system/ folder."""
import hashlib
import os
import sys
KNOWN_HASHES = {
"scph5501.bin": "490f666e1afb15b7362b406ed1cea246",
"gba_bios.bin": "a860e8c0b6d573d191e4ec7db1b1e4f6",
# Add more filename: md5 pairs from a verified BIOS reference table
# such as the libretro documentation before running this script
}
def md5_of(path, chunk_size=8192):
h = hashlib.md5()
with open(path, "rb") as f:
for chunk in iter(lambda: f.read(chunk_size), b""):
h.update(chunk)
return h.hexdigest()
def main(folder):
print(f"Scanning: {folder}\n")
for filename, expected in KNOWN_HASHES.items():
path = os.path.join(folder, filename)
if not os.path.isfile(path):
print(f"[MISSING] {filename}")
continue
actual = md5_of(path)
status = "OK" if actual == expected else "MISMATCH"
print(f"[{status:8}] {filename} ({actual})")
if __name__ == "__main__":
target = sys.argv[1] if len(sys.argv) > 1 else "."
main(target)
Run it by pointing it at your RetroArch system folder from Step 2:
python3 bios_verify.py "$HOME/.config/retroarch/system"
Expected output on a clean, fully verified folder looks like this:
Scanning: /home/user/.config/retroarch/system
[OK ] scph5501.bin (490f666e1afb15b7362b406ed1cea246)
[MISSING ] gba_bios.bin
A MISMATCH result means re-dump that specific file. A MISSING result means it was never added. Extend the KNOWN_HASHES dictionary with any additional systems from the reference table above as you add them.
Step 11: Test Each Core With a Known-Good Disc or Cartridge Dump
Once your hashes check out, test one system at a time rather than loading every core back to back. Load a disc image or ROM you have personally backed up from your own physical copy, and confirm you see the actual console boot sequence (the PS1 startup logo, the Saturn ring animation, the Dreamcast swirl) rather than a black screen or an immediate crash to the RetroArch menu. If the boot sequence plays correctly, the BIOS is loading; anything that goes wrong from that point forward is a separate emulation or compatibility issue, not a BIOS problem.
Common Pitfalls When Setting Up Emulator BIOS Files
- Leaving the archive unextracted. Opening a .zip in an archive manager and copying files out of the preview pane frequently leaves them corrupted or truncated. Fully extract to disk first.
- Mixing up portable and installed PCSX2 modes. Portable PCSX2 looks for its bios folder next to pcsx2.exe; the installed version uses %AppData%\PCSX2\bios\. Pointing the wrong build at the wrong path is the single most common cause of “no BIOS found.”
- Renaming a BIOS to match a different region. A European PS1 BIOS renamed to scph5501.bin will pass a filename check but fail the hash check inside stricter cores, and can cause subtle timing bugs even where it does load.
- Dropping BIOS files into a per-core subfolder. With the sole exception of Dolphin’s GameCube IPL, every RetroArch core reads directly from the flat System/BIOS directory, not a nested folder named after the console.
- Using a BIOS pack downloaded from a forum or Discord. Beyond the legal issue, third-party packs are a common source of the corrupted, incomplete, or mislabeled dumps that fail hash verification in the first place.
- Forgetting companion files for PS2. Some PS2 BIOS dumps split across a .bin, .rom1, and .nvm file. Copying only the .bin and leaving the others behind causes PCSX2 to load a BIOS with no DVD player functionality.
Troubleshooting: Errors You’ll Actually See
| Error / Symptom | Emulator | Likely Cause | Fix |
|---|---|---|---|
| “BIOS not found” / “No BIOS file found” | PCSX2 | Wrong folder path or files still inside a ZIP | Fully extract, then re-browse to the folder in Settings > BIOS |
| “File not found: bios” | PCSX2 (older builds) | BIOS path never set | Manually set the path under Settings > BIOS |
| Empty BIOS dropdown despite files present | PCSX2 | Portable vs. installed mode mismatch | Check pcsx2.ini location; move files to match the active mode |
| “failed to load content” on any disc | RetroArch (Beetle PSX/HW) | BIOS present but hash mismatch | Re-dump and re-verify with md5sum/CertUtil |
| Core loads but shows black screen | Flycast | Only one of dc_boot.bin/dc_flash.bin present | Confirm both files exist in system/ |
| DS games boot to black screen with audio | melonDS | Mismatched bios7/bios9/firmware set from different DS units | Re-dump all three from a single physical DS |
| GameCube games run fine but skip the boot animation | Dolphin | No IPL.bin (expected, this is optional) | No action needed unless you specifically want the authentic boot logo |
| Saturn core rejects BIOS instantly | Kronos / Beetle Saturn | JP BIOS variant used where a region-matched BIOS is expected | Match BIOS region to the disc region you’re loading |
| “Core information” screen greys out PS1 cores | RetroArch | No BIOS at all detected in system/ | Confirm the System/BIOS path under Settings > Directory matches Step 2 |
Output Example: A Fully Configured System Folder
Here is what a correctly populated RetroArch system folder looks like after working through every system in this guide, listed with the file listing command each OS uses:
$ ls -la ~/.config/retroarch/system/
-rw-r--r-- 1 user user 524288 scph5501.bin
-rw-r--r-- 1 user user 131072 bios_CD_U.bin
-rw-r--r-- 1 user user 2097152 dc_boot.bin
-rw-r--r-- 1 user user 2097152 dc_flash.bin
-rw-r--r-- 1 user user 16384 gba_bios.bin
-rw-r--r-- 1 user user 16384 bios7.bin
-rw-r--r-- 1 user user 32768 bios9.bin
-rw-r--r-- 1 user user 262144 firmware.bin
-rw-r--r-- 1 user user 524288 saturn_bios.bin
Once your folder looks like this and bios_verify.py reports OK across the board, every disc-based and cartridge-based core covered in this tutorial should boot straight to its native startup sequence.
Advanced Tips: Backups, Portable Builds, and Multi-Machine Sync
Once you have gone through the trouble of dumping BIOS files from your own hardware, treat that folder like the irreplaceable asset it is. A few habits save real time later.
- Keep an offline backup. Zip the verified system/ folder once bios_verify.py shows all OK, and store it outside your main install so a RetroArch reinstall or OS wipe does not force you to re-dump hardware you may no longer have easy access to.
- Use RetroArch’s portable build if you sync between machines. The portable .7z release keeps its system/ folder next to the executable, which makes it trivial to copy the whole install (BIOS included) between a desktop and a laptop, or onto a USB drive for testing on a friend’s PC, as long as you are only moving your own legally-dumped files.
- Re-run the hash check after every RetroArch update. Version 1.22.2 tightened hash validation compared to earlier builds; files that “worked” under a looser check in 2023 or 2024 can suddenly fail under a newer, stricter core.
- Version your bios_verify.py hash table. If you support multiple regions (NA, EU, JP dumps side by side), keep separate hash entries per filename rather than overwriting one region’s expected hash with another’s.
Setting Up BIOS Files Inside EmuDeck and Frontends
If you are running a Steam Deck or a dedicated emulation handheld through EmuDeck, the underlying logic is identical, but the folder gets renamed and sometimes relocated by the frontend’s install script. EmuDeck typically expects BIOS files in a consolidated bios folder under its own directory structure rather than RetroArch’s default path, and it applies its own validation pass during setup. If you are setting up a Steam Deck from scratch, our EmuDeck tutorial covers where that folder lives and how the frontend’s BIOS checker differs from running RetroArch standalone. The same md5sum verification approach from Step 8 works regardless of which frontend manages the folder location for you.
Why Some Cores Don’t Need a BIOS at All
Not every system in RetroArch requires this process. NES, SNES, and Genesis cores generally ship with high-level emulation that does not depend on an external BIOS dump, since those consoles’ boot processes were simple enough to reverse-engineer without infringing on copyrighted firmware. The tradeoff is usually invisible in day-to-day play but can surface as minor timing differences or missing boot-logo animations compared to systems using a real BIOS dump. If your priority is getting a library running fast rather than bit-for-bit hardware accuracy, sticking to BIOS-free cores where they exist is a reasonable shortcut, and you only need to work through this guide for the systems where a real BIOS or firmware dump is mandatory.
Where PSP and PS Vita Fit Into This
Two systems deliberately sit outside the main walkthrough above because they do not follow the same BIOS-dump model. PPSSPP, the standalone PSP emulator (and RetroArch’s PPSSPP core), ships with its own reimplementation of the PSP’s system software and does not require a separate external BIOS file the way PS1 or PS2 cores do; it can optionally use official Sony firmware updater files, but those come from Sony’s own update servers rather than a console dump, and redistributing them is still a copyright violation. If you are setting PPSSPP up for the first time, the process is different enough from the BIOS-dump workflow in this guide to warrant its own walkthrough, which our PPSSPP setup guide covers step by step.
PS Vita emulation through Vita3K works closer to the PS1/PS2 model, requiring genuine Vita firmware pulled from a console you own before games will run. The dumping tools and menu structure differ enough from RetroArch’s system folder approach that we cover it separately in our Vita3K setup guide, including where Vita3K expects its firmware package once extracted.
Why Emulator BIOS Requirements Exist in the First Place
It’s worth understanding why this whole system works the way it does rather than treating it as an arbitrary hoop. Emulator projects that reverse-engineer a console’s hardware behavior without copying Sony, Sega, or Nintendo’s actual firmware code stay on much firmer legal ground than ones that bundle proprietary BIOS or firmware images. RetroArch’s parent project, documented on Wikipedia as building on the libretro API, has maintained this separation since its earliest releases: the emulator core is open source and clean-room, while the BIOS stays the user’s responsibility to source legally. The RetroArch GitHub repository itself contains zero BIOS files across its entire release history, which is a deliberate policy rather than an oversight.
This separation is also why RetroArch as a project has largely avoided the legal pressure Nintendo has directed at Switch-specific emulators. The August 2026 DMCA notices targeted projects that shipped or depended on unauthorized decryption keys baked into the software itself, not projects that simply expect users to supply their own legally-obtained firmware. Keeping BIOS sourcing entirely on the user’s side, the way this tutorial does, is not just the legally safer path. It is the same design principle the emulators themselves are built around.
Keeping Your Setup Current as RetroArch Updates
RetroArch’s release cadence means core requirements shift periodically even when the BIOS files themselves do not change. The 1.22.2 stable branch, current since November 2025, tightened several PlayStation and Saturn core hash checks compared to the 1.21.x line. Before assuming a fresh RetroArch install is broken, re-run the bios_verify.py script from Step 10 against the new install’s system/ folder; a large share of “it worked yesterday” reports trace back to the folder path resetting after an update rather than the actual BIOS files going bad.
Quick-Reference Checklist
If you are working through several systems in one sitting, it helps to have the whole process condensed into a single checklist rather than flipping between sections. Use this as a final pass before you consider your BIOS library done.
- Confirm you own the physical console for every system you plan to dump a BIOS from.
- Locate RetroArch’s System/BIOS folder for your specific platform and install type (Step 2).
- Dump each BIOS or firmware set from your own hardware using the tool appropriate to that console (PS1 BIOS dumper, FreeMCBoot plus uLaunchELF for PS2, GodMode9 for 3DS, and so on).
- Name every file exactly as the target core expects, matched to the correct region.
- Run an MD5 or SHA1 hash check against a known-good reference value before assuming a dump is good.
- Place files directly in the System/BIOS folder, with the sole exception of Dolphin’s GameCube IPL.bin.
- Run bios_verify.py against the folder to confirm every hash you’ve documented matches.
- Boot one disc or cartridge per system to confirm you see the real console startup sequence, not a black screen.
- Back up the verified system/ folder somewhere outside your main RetroArch install.
Working through these in order avoids the most common failure mode people run into: dumping five or six BIOS files back to back, dropping them all into the wrong folder at once, and then having to debug which specific file is causing which specific error. One system at a time, verified before moving to the next, is slower up front but considerably faster overall once you count the time spent troubleshooting a batch failure.
Frequently Asked Questions
Is it legal to download a RetroArch BIOS pack from a website?
No. Downloading BIOS files you did not dump yourself infringes the console maker’s copyright, even for hardware that has been discontinued for decades and even if you personally own the original console. PCSX2’s own documentation states this explicitly for the PS2 BIOS, and the same principle applies to every system covered in this guide.
Can I use one region’s BIOS for a different region’s games?
Generally no. Most cores expect a region-matched BIOS filename and will either reject a mismatched file outright or produce subtle timing and save-data issues. Match your BIOS region to the disc or cartridge region you plan to load most often.
Why does RetroArch say a BIOS is missing when the file is clearly in the folder?
This almost always means either the filename does not match exactly (including case sensitivity on Linux), the file’s MD5 hash does not match a known-good dump, or the System/BIOS directory setting under Settings > Directory points somewhere other than where you actually placed the file.
Do I need a BIOS file for every RetroArch core?
No. NES, SNES, and Genesis cores typically run without an external BIOS thanks to high-level emulation. PlayStation, PS2, Saturn, Sega CD, Dreamcast, and Nintendo DS cores generally do require a real BIOS or firmware dump for full accuracy, and PCSX2 will not run at all without one.
What is the difference between PCSX2’s portable and installed BIOS folders?
Installed PCSX2 stores its BIOS files under %AppData%\PCSX2\bios\ on Windows, while the portable .7z build looks for a bios subfolder placed directly next to pcsx2.exe. Mixing the two up is one of the most common causes of PCSX2 reporting no BIOS found even after copying the files somewhere on disk.
How do I verify a BIOS file is not corrupted?
Compute its MD5 hash with md5sum on Linux/macOS or CertUtil -hashfile on Windows, then compare the result against a published known-good hash for that specific file and region. A mismatch means the dump needs to be redone, not renamed or reused.
Does GameCube emulation in Dolphin require a BIOS?
Not strictly. Dolphin’s optional GameCube IPL.bin file goes in a different folder from every other core in this guide (dolphin-emu/User/GC/<region>/ rather than the shared system/ directory) and mainly affects the authenticity of the boot animation rather than whether games run at all.
What happened with Nintendo and emulator BIOS files in 2026?
In August 2026, Nintendo filed seven DMCA anti-circumvention notices against GitHub in a single day, leading to the removal of more than 400 Switch emulator repositories, including forks that bundled or relied on unauthorized decryption keys. It is a reminder that treating firmware and keys as something to dump from your own hardware, rather than download, is the only approach that has held up under legal scrutiny.


