EmuDeck 2.7 shipped in late September 2026 with Steam Machine presets, AutoMap controller profiles and a batch of emulator config fixes, according to PC Guide’s coverage of the release. What it still does not ship is the one thing half your library needs before it boots: BIOS files.
That gap drives most of the support threads around the tool. A PlayStation 2 game throws a missing-BIOS error, a Saturn core sits on a black screen, and the EmuDeck checker lists red rows for systems you forgot you enabled. This guide covers the whole path in 13 steps and roughly 45 minutes: dump the files from hardware you own, place them in Emulation/bios with the exact names each emulator expects, and prove the result with a checker and a script. If EmuDeck is not installed yet, run through our EmuDeck Windows setup walkthrough first and come back.
You will also build a small audit project: a manifest of expected filenames plus a Bash script that reports OK, MISSING, WRONGCASE or EMPTY for every system. We ran it against test folders, and the output blocks below are real. It works on SteamOS, Bazzite and any Windows handheld that can run Bash through Git Bash or WSL, and a PowerShell variant is included for everyone else.
Don't miss new tech stories on Google
Add Tech Insider once in the Google app and our stories appear in your news suggestions.
EmuDeck BIOS Setup in October 2026: What Changed
Three things moved in the last few weeks, and none of them changed the BIOS rules. First, EmuDeck 2.7 landed in late September. The release added 1080p and 4K emulator presets for Steam Machine-class hardware, controller AutoMap for up to four players, and resolution selectors for PPSSPP, Xemu, Vita3K, Azahar and PrimeHack. Second, a 2.7.2 build line has appeared on the project’s beta channel. Treat it as a beta. The reported change is faster first launch on Windows, which matters if you run EmuDeck on a handheld such as the ROG Ally, and you can read the entry for 2.7.2-beta.423 on the project’s GitHub beta repository. Third, the operating systems underneath keep shifting, and that affects where your files live.
On the hardware side, the Steam Deck OLED is still Valve’s newest handheld, sold in 512GB and 1TB versions at reported U.S. prices of $789 and $949. Valve has not named, specced or dated a successor, so any Steam Deck 2 talk you see remains rumor. SteamOS 3.9.4 Beta reached the Beta and Preview channels on October 21, 2026, with fixes for screenshots, security and stability. It is a beta, so do not assume your device runs it. Bazzite’s official site lists Bazzite 45 as ready for testing, which means the stable line most people run is still the previous one. Windows 11 version 26H2 reached general availability this month.
What does that mean for BIOS work? Very little changes, and that is the good news. EmuDeck still treats Emulation/bios as the shared system directory on SteamOS, other Linux distributions and Windows. The official EmuDeck documentation still tells you to dump files from your own console. If you built your library with our EmuDeck Steam Deck tutorial, the folder already exists and you only need to fill it.
One caution about versions. EmuDeck’s wiki pages and menu labels trail the releases by days or weeks, and recent reporting says the project removed some outdated launchers in the 2.7 update. When this guide names a menu entry, treat the label as a pointer rather than gospel and look for the closest match on your build. The filenames and folder rules below come from the project’s own BIOS and ROMs cheat sheet, which we read on October 22, 2026.
Why EmuDeck Does Not Ship BIOS Files, and Where the Legal Line Sits
A BIOS is firmware copied from a console’s chips. It is copyrighted code, and the console makers did not license it for redistribution. EmuDeck therefore bundles emulators, configuration and frontends but leaves out every BIOS, firmware image and key file. The project says so in plain terms. The EmuDeck Wiki, its official documentation, states: “EmuDeck does not come with BIOS files, you must obtain these on your own.” Its overview page adds the broader rule: “Please note – ROMs, BIOS files, or any other copyrighted files are not included in the install.”
The cheat sheet then draws the line you should follow. The same wiki says: “Legally, BIOS must be obtained from your console.” It also says other acquisition methods are piracy and cannot be discussed on the EmuDeck Discord. We follow the same rule here. This article does not link to BIOS downloads, does not name sites that host them and does not reproduce checksums for the sake of hunting files down. If you own the console, you can dump the firmware. If you do not, the system is off the table until you do.
Law differs by country, and this is not legal advice. Dumping firmware from a console you bought is the cleanest position because you control the source and you can prove it. Downloading a “complete BIOS pack” from a forum or file locker is a different matter. Beyond the legal exposure, those archives are a known place for tampered files, and a bad dump produces confusing boot errors that look like emulator bugs.
- What you may do: dump firmware from consoles you own, keep a private backup, and copy the files to your own devices.
- What you should not do: download BIOS packs, share your dumps publicly, or let anyone talk you into “just this once” file swaps.
- What EmuDeck does for you: creates the folder structure, points each emulator at it, and ships a checker that flags missing or misplaced files.
Prerequisites and Versions
You need less than you might expect. The steps work on any device that runs EmuDeck, but the commands assume one of three setups. Pick the row that matches your hardware and keep the rest of the table as your reference for version numbers.
| Item | Version or spec (Oct. 22, 2026) | Notes |
|---|---|---|
| EmuDeck | 2.7 or newer | 2.7 shipped in late September. 2.7.2 builds are on the beta channel, so stay on the stable release unless you need the Windows startup fix. |
| Steam Deck | Steam Deck OLED, 512GB or 1TB | Reported U.S. prices of $789 and $949. An older Steam Deck works the same way. |
| SteamOS | Your current channel | 3.9.4 Beta reached the Beta and Preview channels on October 21, 2026. BIOS paths do not depend on the channel. |
| Bazzite | Current stable release | Bazzite 45 is in testing per the project’s site. Use the stable line for a gaming handheld. |
| Windows handheld or PC | Windows 11 (26H2 is the newest release) | Any Windows 11 handheld or PC that runs the EmuDeck Windows installer. |
| Storage | Internal drive or microSD | BIOS files are small, but the folder lives next to your ROMs, so plan for the card path. |
| Console dumps | From consoles you own | PS1, PS2, DS, Switch and Xbox are the usual ones. See the dump steps below. |
| Shell | Konsole (SteamOS, Bazzite) or PowerShell 5.1+ (Windows) | Bash 4+ for the audit script. Git Bash or WSL covers Windows. |
Time budget: about 10 minutes for preparation, 15 minutes for dumping and transfer if the hardware is within reach, 10 minutes for placement, and 10 minutes for verification. Dumping a Switch or a Wii U can run longer. If a console is in a closet three rooms away, do the dumps first and finish the rest on the couch.
Before you start, switch the Steam Deck to Desktop Mode. Hold the power button, choose Switch to Desktop, and open Konsole from the application launcher. Bazzite handhelds use the same terminal. On Windows, open File Explorer and PowerShell side by side, because you will move between both.
Which Systems Need BIOS Files in EmuDeck
Not every emulator needs firmware. Dolphin plays Wii games without any BIOS, and the GameCube boot ROM is optional. Most Game Boy Advance setups run without one. Yet PlayStation, PlayStation 2, Saturn, Sega CD, Dreamcast through the RetroArch core, the Nintendo DS, the original Xbox and the Switch all want files. The table below condenses the official cheat sheet into one place. Filenames are case sensitive on Linux, so copy them exactly. For a deeper RetroArch-only view of the same problem, our RetroArch BIOS guide covers the libretro side.
| System | Emulator | File or files expected | Where it goes |
|---|---|---|---|
| PlayStation | DuckStation (standalone), SwanStation or Beetle HW | scph5500.bin (JP), scph5501.bin (US), scph5502.bin (EU) as an example set | Emulation/bios |
| PlayStation 2 | PCSX2 (standalone) | An example US set is SCPH-70012_BIOS_V12_USA_200.BIN. The EU example set has four files: .BIN, .EROM, .ROM1 and .ROM2 | Emulation/bios |
| PlayStation 3 | RPCS3 | Official firmware in a .PUP file | Installed inside RPCS3, not copied to bios |
| PlayStation Vita | Vita3K | Firmware installed through Vita3K | Installed inside Vita3K |
| PSP (RetroArch core) | PPSSPP core | ppsspp.zip from RetroArch’s Core System Files Downloader | Emulation/bios |
| Sega CD / Mega-CD | Genesis Plus GX | bios_CD_E.bin, bios_CD_U.bin or bios_CD_J.bin by region | Emulation/bios |
| Sega Saturn | Yabause or Kronos | saturn_bios.bin | Emulation/bios (Yabause) or Emulation/bios/kronos (Kronos) |
| Sega Dreamcast | RetroArch Flycast | dc_boot.bin | Emulation/bios/dc |
| Neo Geo / Neo Geo CD | FinalBurn Neo | neogeo.zip (JP) or neocdz.zip (US), kept zipped | Emulation/bios |
| Panasonic 3DO | RetroArch Opera | panafz1.bin | Emulation/bios |
| Famicom Disk System | RetroArch core | disksys.rom | Emulation/bios |
| Nintendo DS | melonDS | bios7.bin, bios9.bin, firmware.bin | Emulation/bios |
| Original Xbox | Xemu | mcpx_1.0.bin and Complex_4627v1.03.bin | Per Xemu settings, keep copies in Emulation/bios |
| Nintendo Switch | Ryujinx entry on the cheat sheet | prod.keys plus firmware installed in the GUI | Emulation/bios/ryujinx/keys |
| GameCube / Wii | Dolphin | Not required (GameCube IPL.bin is optional) | Region folder if used |
Two details trip people up. The PS2 row is an example set, not a rule: your own dump may carry a different name, and PCSX2 reads whatever valid BIOS it finds. The Switch row reflects the cheat sheet as written. The Switch emulator scene keeps shifting, and the same sheet still carries a legacy Yuzu path beside the Ryujinx entry. Install whichever Switch emulator your EmuDeck build offers and follow the path shown in its own settings. Our manifest below uses the Ryujinx location because the cheat sheet documents it.
Phase 1: Prepare Your Device (Steps 1 to 4)
Step 1. Confirm your EmuDeck version. Open the EmuDeck app. The version number is shown in the app itself, on Windows and on SteamOS or Bazzite alike. You want 2.7 or newer. If you are on an older build, download the installer from EmuDeck’s official site and run it again. Running the installer over an existing install is the normal way to update or repair it, and your Emulation folder stays where it is.
Step 2. Find your Emulation folder. EmuDeck puts everything under one root. The BIOS folder is Emulation/bios, and its full path depends on where you installed. The official cheat sheet lists the locations in the table in the platform section below. If you moved the library to a card, the folder sits under /run/media/ on SteamOS and Bazzite, and the card label is part of the path. Check it from a terminal instead of guessing.
# SteamOS or Bazzite: internal storage
ls -ld ~/Emulation ~/Emulation/bios
# Find the SD card or external drive mount name
ls /run/media/$USER/
# Confirm free space where the folder lives
df -h ~/Emulation
If the folder is on a card or a drive in a dock, a label such as /run/media/deck/MyCard/Emulation/bios is what you want. We cover the storage side in our external SSD and dock setup, which also explains why a reformatted card changes the mount name and breaks old paths.
Step 3. Make sure the BIOS folder exists and is writable. EmuDeck creates Emulation/bios during setup. If the ls command above printed an error, run the EmuDeck installer again instead of creating the folder by hand, because the installer also points each emulator at it. You can still check write access with a quick touch test. A folder that belongs to root is the second most common reason a perfect set of files is ignored.
touch ~/Emulation/bios/.write-test && echo "writable" && rm ~/Emulation/bios/.write-test
ls -ld ~/Emulation/bios
Step 4. List the systems you actually play. Open the table above and write down only the rows you need. A short list saves time because every extra system is another console to dig out. A typical handheld library needs PS1, PS2, Saturn, Sega CD and DS. A Switch or Xbox library adds keys and boot ROMs. Skip the systems marked not required. Copy your list into a text file, since the manifest in the project section will use the same rows.
If you dual boot, remember that each operating system keeps its own Emulation folder unless you point both at one shared partition. Our Windows 11 on a Steam Deck guide shows the partition layout. A shared exFAT partition works for Windows, but Linux then treats the drive as case insensitive, which hides filename-case mistakes until you boot Windows or move the files.
Phase 2: Dump Your Own BIOS Files (Steps 5 to 7)
Step 5. Dump the PlayStation files. Our PCSX2 BIOS setup guide covers the PS2 side in more depth, and the EmuDeck cheat sheet points to two guides for Sony hardware. The NGEmu PSX dumping thread covers the original PlayStation, and the PCSX2 documentation has a page on gathering files and dumping the PS2 BIOS. Both work from consoles you own. The methods differ by console model, so read the guide for your exact revision before you start.
Name the result carefully. A PS1 dump from a US console should end up as scph5501.bin, a Japanese one as scph5500.bin and a European one as scph5502.bin, per the cheat sheet’s example set. A PS2 dump arrives with a longer name that encodes the model and region. Keep it exactly as the dumper wrote it. Do not rename PCSX2 files to look tidy.
Step 6. Dump the Nintendo files. The DS needs three files: bios7.bin, bios9.bin and firmware.bin. The cheat sheet links the dumping.guide page for the DS, which walks through dumping from your own handheld. For the Switch, the cheat sheet points to the emulator quickstart. You need prod.keys and a firmware set from a console you own, and the standard route involves a key-dumping homebrew tool run on a console that supports custom firmware. The Wii U guide on the cheat sheet uses the Dumpling app. Only attempt these on your own hardware and read the current warnings about online bans before you touch a console that connects to Nintendo’s servers.
Step 7. Dump the rest. The original Xbox has a Redump guide, listed on the cheat sheet, for pulling the boot ROM and flash image. Sega’s Saturn, Dreamcast and Sega CD files come from the respective consoles with community tools, and the libretro documentation names each one. The Neo Geo zip, the 3DO image and the Famicom Disk System ROM follow the same ownership rule. If you cannot dump a system, mark it unsupported in your notes and move on. Two systems need nothing from you at this stage: PS3 and Vita firmware come from official downloads installed inside the emulator, which Phase 3 covers.
Store every raw dump in one private folder on a drive that is not your emulation card. Add the console model and serial in a text file next to it. That sounds fussy, but it is the cheapest way to prove provenance later and the easiest way to rebuild a card after a failure.
Phase 3: Move the Files and Place Them Correctly (Steps 8 to 10)
Step 8. Get the dumps onto the device. You have four options. A USB-C stick or drive mounts under /run/media/ in Desktop Mode. A microSD card works the same way. On a home network you can push files over SSH. On Windows you simply copy and paste. For SSH on a Steam Deck, set a password and enable the SSH service once, then use scp from another computer.
# On the Steam Deck (Desktop Mode, Konsole): set a password and start SSH
passwd
sudo systemctl enable --now sshd
# On your other computer: push the private dump folder
scp -r ./bios-dumps [email protected]:~/bios-dumps
Disable the service when you finish with sudo systemctl disable --now sshd. An open SSH port on a handheld that sits on public Wi-Fi is not worth the convenience. If you prefer a stick, plug it in, run ls /run/media/deck/ and copy from the label that appears.
Step 9. Copy the files into Emulation/bios. Most files go straight into the folder with no subfolder. The cheat sheet repeats this rule: do not create or use extra folders unless a table explicitly says so. Three cases need a subfolder: Dreamcast (dc), Saturn with the Kronos core (kronos) and the Switch keys (ryujinx/keys). Use cp -v so every copy prints a line you can check.
cd ~/bios-dumps
# Files that go straight into Emulation/bios
cp -v scph5501.bin ~/Emulation/bios/
cp -v SCPH-70012_BIOS_V12_USA_200.BIN ~/Emulation/bios/
cp -v bios_CD_U.bin saturn_bios.bin ~/Emulation/bios/
cp -v bios7.bin bios9.bin firmware.bin ~/Emulation/bios/
# Files that need a subfolder
mkdir -p ~/Emulation/bios/dc ~/Emulation/bios/kronos ~/Emulation/bios/ryujinx/keys
cp -v dc_boot.bin ~/Emulation/bios/dc/
cp -v saturn_bios.bin ~/Emulation/bios/kronos/
cp -v prod.keys ~/Emulation/bios/ryujinx/keys/
On Windows, the equivalent is a drag and drop into %USERPROFILE%\Emulation\bios, or DRIVELETTER:\Emulation\bios if you installed to another drive. Turn on file extensions in File Explorer first (View, Show, File name extensions). Otherwise a file called scph5501.bin.txt looks like scph5501.bin and fails silently.
Watch zip files. Arcade and Neo Geo sets such as neogeo.zip must stay zipped, because the emulator reads the archive directly. Unpacking them is a classic mistake. And if you also run Game Boy and DS titles from our Pokémon emulators on Steam Deck guide, remember that the DS trio above is what melonDS looks for.
Step 10. Handle the systems that skip the folder. PS3 firmware is an official .PUP file that you install from inside RPCS3, so there is nothing to place in bios. Vita3K works the same way with its own firmware install. The PSP core needs ppsspp.zip, which RetroArch downloads for you: open RetroArch, choose Online Updater, then Core System Files Downloader. For arcade systems, ES-DE only works with BIOS zips placed in Emulation/roms/arcade, while MAME itself also searches Emulation/bios/mame and Emulation/bios. When in doubt, check the row for your exact emulator on the cheat sheet.
Phase 4: Verify and Launch (Steps 11 to 13)
Step 11. Run EmuDeck’s BIOS checker. EmuDeck includes a checker that identifies missing or incorrectly placed files. Open the EmuDeck app and look in the tools section for an entry along the lines of BIOS checker. The label has moved between builds, so use the nearest match. Green means the file was found where EmuDeck expects it. Red means the name, case or folder is off. The checker only judges names and locations. It cannot tell you whether the dump itself is valid, which is why Step 13 exists.
Step 12. Run the audit script. The project in the next section reports on every system in your manifest in one pass, including the case and zero-byte problems the checker does not always describe in plain words. Copy the two files into any folder, make the script executable and run it. Pass a different BIOS path as the first argument if your library sits on a card.
chmod +x emudeck-bios-audit.sh
# Default location (~/Emulation/bios)
./emudeck-bios-audit.sh
# Library on an SD card
./emudeck-bios-audit.sh "/run/media/deck/MyCard/Emulation/bios"
Step 13. Boot one game per system. A green row proves a file exists. Only a boot proves it works. Launch one title from each system you care about, from ES-DE or from Steam Game Mode after refreshing your Steam ROM Manager parsers. Watch for the splash screen. On PS2 and Saturn, an invalid BIOS usually produces an immediate error or a black screen within a few seconds. If a system fails, open the emulator’s log from its own menu. The log line almost always names the missing file.
Write the result next to your manifest: system, date, game used, pass or fail. Ten minutes of notes now spares you an hour of debugging after the next big update. When you are happy, take a checksum backup of the folder, which the advanced section shows.
The Complete Project: A BIOS Audit Manifest and Script
The project has two files. The manifest lists each system, whether the file is required, and one or more acceptable filenames separated by a vertical bar. The script reads the manifest, checks the BIOS folder and prints one line per row. It spots four states: OK, MISSING, WRONGCASE (a file exists but with different capitalization) and EMPTY (the file is zero bytes, usually a failed copy). Save the manifest as bios-manifest.csv next to the script.
The manifest: bios-manifest.csv
# system;level;alternatives (any one of these files satisfies the row, paths relative to Emulation/bios)
Sony PlayStation (DuckStation);required;scph5500.bin|scph5501.bin|scph5502.bin
Sony PlayStation 2 (PCSX2);required;SCPH-70012_BIOS_V12_USA_200.BIN|SCPH-70004_BIOS_V12_EUR_200.BIN
Sega CD (Genesis Plus GX);required;bios_CD_E.bin|bios_CD_U.bin|bios_CD_J.bin
Sega Saturn (Yabause);required;saturn_bios.bin
Sega Saturn (Kronos);required;kronos/saturn_bios.bin
Sega Dreamcast (RetroArch Flycast);required;dc/dc_boot.bin
Nintendo DS (melonDS) bios7;required;bios7.bin
Nintendo DS (melonDS) bios9;required;bios9.bin
Nintendo DS (melonDS) firmware;required;firmware.bin
Famicom Disk System;required;disksys.rom
Panasonic 3DO (Opera);required;panafz1.bin
SNK Neo Geo (FinalBurn Neo);required;neogeo.zip|neocdz.zip
Microsoft Xbox (Xemu) boot ROM;required;mcpx_1.0.bin
Microsoft Xbox (Xemu) flash ROM;required;Complex_4627v1.03.bin
Nintendo Switch (Ryujinx) keys;required;ryujinx/keys/prod.keys
Edit the manifest to match your library. The PS2 row lists only two example names, so add your own dump name as another alternative. Delete rows for systems you do not play, otherwise the summary counts them as missing. Add a new line for any extra row the cheat sheet gives you.
The script: emudeck-bios-audit.sh
#!/usr/bin/env bash
# Usage: ./emudeck-bios-audit.sh [bios_dir] [manifest]
set -u
BIOS_DIR="${1:-$HOME/Emulation/bios}"
MANIFEST="${2:-$(dirname "$0")/bios-manifest.csv}"
if [[ ! -d "$BIOS_DIR" ]]; then
echo "ERROR: BIOS folder not found: $BIOS_DIR" >&2
exit 2
fi
if [[ ! -f "$MANIFEST" ]]; then
echo "ERROR: manifest not found: $MANIFEST" >&2
exit 2
fi
ok=0; missing=0; wrongcase=0; empty=0
printf '%-40s %-9s %s\n' "SYSTEM" "STATUS" "DETAIL"
printf '%-40s %-9s %s\n' "------" "------" "------"
while IFS=';' read -r system level alts; do
[[ -z "${system// }" || "$system" == \#* ]] && continue
status="MISSING"; detail="none of: ${alts//|/, }"
IFS='|' read -ra files <<< "$alts"
for f in "${files[@]}"; do
if [[ -f "$BIOS_DIR/$f" ]]; then
if [[ ! -s "$BIOS_DIR/$f" ]]; then
status="EMPTY"; detail="$f is 0 bytes, re-copy it"
else
size=$(stat -c %s "$BIOS_DIR/$f")
status="OK"; detail="$f (${size} bytes)"
fi
break
fi
hit=$(find "$BIOS_DIR" -maxdepth 4 -ipath "$BIOS_DIR/$f" -type f 2>/dev/null | head -n 1)
if [[ -n "$hit" ]]; then
status="WRONGCASE"; detail="found ${hit#"$BIOS_DIR"/}, expected $f"
break
fi
done
case "$status" in
OK) ((ok++)) ;;
WRONGCASE) ((wrongcase++)) ;;
EMPTY) ((empty++)) ;;
*) [[ "$level" == "required" ]] && ((missing++)) ;;
esac
printf '%-40s %-9s %s\n' "$system" "$status" "$detail"
done < "$MANIFEST"
echo
echo "Summary: ok=$ok missing=$missing wrongcase=$wrongcase empty=$empty"
[[ $((missing + wrongcase + empty)) -eq 0 ]] && exit 0 || exit 1
How it works: the script splits each manifest line on semicolons, then loops through the alternatives. An exact path match counts as OK unless the file is empty. If no exact match exists, a case-insensitive find catches names like SATURN_BIOS.BIN. The exit code is 0 when everything passes, 1 when problems remain and 2 when the folder or manifest is missing, so you can chain it in other scripts.
PowerShell variant for Windows
Windows file systems ignore case, so this version skips the WRONGCASE check. Save it as emudeck-bios-audit.ps1, keep the same manifest beside it and run it from PowerShell. If your execution policy blocks it, run powershell -ExecutionPolicy Bypass -File .\emudeck-bios-audit.ps1 for one session.
param(
[string]$BiosDir = "$env:USERPROFILE\Emulation\bios",
[string]$Manifest = "$PSScriptRoot\bios-manifest.csv"
)
$ok = 0; $bad = 0
Get-Content $Manifest | Where-Object { $_ -and -not $_.StartsWith('#') } | ForEach-Object {
$system, $level, $alts = $_ -split ';', 3
$hit = $null
foreach ($f in ($alts -split '\|')) {
$p = Join-Path $BiosDir ($f -replace '/', '\')
if (Test-Path -LiteralPath $p -PathType Leaf) { $hit = Get-Item -LiteralPath $p; break }
}
if ($hit -and $hit.Length -gt 0) { $ok++; '{0,-40} OK {1} ({2} bytes)' -f $system, $hit.Name, $hit.Length }
elseif ($hit) { $bad++; '{0,-40} EMPTY {1}' -f $system, $hit.Name }
else { $bad++; '{0,-40} MISSING none of: {1}' -f $system, ($alts -replace '\|', ', ') }
}
"Summary: ok=$ok problems=$bad"
We tested the Bash script on Linux with fixture folders. The PowerShell version mirrors its logic but we did not run it on a Windows handheld for this article, so run it once against a known-good folder before you trust it.
Sample Output: Broken Folder, Healthy Folder
Here is a first run on a half-finished folder. It shows each failure type the script reports. The PS2 and Neo Geo rows are missing, the Saturn file has the wrong capitalization, and the first DS file is zero bytes.
SYSTEM STATUS DETAIL
------ ------ ------
Sony PlayStation (DuckStation) OK scph5501.bin (2 bytes)
Sony PlayStation 2 (PCSX2) MISSING none of: SCPH-70012_BIOS_V12_USA_200.BIN, SCPH-70004_BIOS_V12_EUR_200.BIN
Sega CD (Genesis Plus GX) OK bios_CD_U.bin (2 bytes)
Sega Saturn (Yabause) WRONGCASE found SATURN_BIOS.BIN, expected saturn_bios.bin
Sega Saturn (Kronos) OK kronos/saturn_bios.bin (2 bytes)
Sega Dreamcast (RetroArch Flycast) OK dc/dc_boot.bin (2 bytes)
Nintendo DS (melonDS) bios7 EMPTY bios7.bin is 0 bytes, re-copy it
Nintendo DS (melonDS) bios9 OK bios9.bin (2 bytes)
Nintendo DS (melonDS) firmware MISSING none of: firmware.bin
Famicom Disk System MISSING none of: disksys.rom
...
Summary: ok=6 missing=7 wrongcase=1 empty=1
The byte counts in that sample are tiny because the fixture files are placeholders. Real dumps are far larger, and a size of a few bytes on your own folder would be a red flag. After fixing each row, the same script on a fully populated fixture prints this closing block.
Famicom Disk System OK disksys.rom (4096 bytes)
Panasonic 3DO (Opera) OK panafz1.bin (4096 bytes)
SNK Neo Geo (FinalBurn Neo) OK neogeo.zip (4096 bytes)
Microsoft Xbox (Xemu) boot ROM OK mcpx_1.0.bin (4096 bytes)
Microsoft Xbox (Xemu) flash ROM OK Complex_4627v1.03.bin (4096 bytes)
Nintendo Switch (Ryujinx) keys OK ryujinx/keys/prod.keys (4096 bytes)
Summary: ok=15 missing=0 wrongcase=0 empty=0
And when you point it at a path that does not exist, it stops early with exit code 2 and one clear line: ERROR: BIOS folder not found followed by the path you passed. That message alone solves the SD-card-label problem more often than any other.
Common Pitfalls That Break EmuDeck BIOS Setups
Most failures trace back to six habits. Spot them early and you skip an evening of log reading.
- Downloading a BIOS pack. Beyond the legal problem, packs mix regions, ship altered files and sometimes carry malware. Dump your own, or skip the system.
- Creating helpful subfolders. The cheat sheet says to use no extra folders unless a table asks for one. A tidy
bios/ps2folder is invisible to PCSX2 in a default EmuDeck setup. - Unzipping archives. Neo Geo, arcade and some Sega sets must stay as
.zip. If you extracted them, put the original archive back. - Lower-casing everything. It is tempting to run a rename loop. Don’t. PCSX2 names are uppercase, while
scph5501.binis lowercase. Fix only the rows the script flags. - Mixing up two kinds of BIOS. Bazzite’s documentation discusses BIOS updates for the Steam Deck itself, which is motherboard firmware and has nothing to do with emulators. See Bazzite’s Steam Deck documentation if you ever need that, and ignore it for emulation.
- Trusting a green checker. The checker verifies names and folders, not whether a dump is valid. Only a booted game settles that.
- Copying with sudo. Files owned by root land in the right place yet can’t be read by an emulator that runs as your user.
A seventh habit deserves its own line: skipping the backup. A card can fail, a SteamOS reinstall can wipe a partition, and a Windows reset can remove a profile. Dumps are slow to recreate and sometimes impossible if the console has died. The advanced section shows a two-command backup.
Troubleshooting: 10 Fixes for EmuDeck BIOS Errors
Work through these in order. If none of them applies, the EmuDeck help manual FAQ covers general install and launch problems that are not specific to BIOS files.
- The checker reports a file missing, but you copied it. Run the audit script. A WRONGCASE row means the name is right but the capitalization is off, and a MISSING row means the file sits in the wrong folder. Use
find ~/Emulation -iname 'scph5501.bin'to see where it really landed. - PCSX2 says no BIOS was found. Make sure the whole set is present. The EU example set has four files, not just the
.BIN. Then open PCSX2’s settings and select the BIOS from the list. - DuckStation refuses to start a game. A region mismatch is a common cause. Copy the
scph550x.binfile that matches your game’s region and try again. - Saturn shows a black screen. Kronos reads
Emulation/bios/kronos/saturn_bios.bin, while Yabause reads the file straight fromEmulation/bios. Place the file for the core you chose, or both. - Dreamcast core exits right away. The RetroArch Flycast core needs
dc_boot.bininsideEmulation/bios/dc. The standalone Flycast does not require it. - Switch emulator complains about keys. Confirm
prod.keysis inEmulation/bios/ryujinx/keysand install firmware through the emulator’s GUI. Keys and firmware from different console versions will clash, so dump both from the same console in one session. - Neo Geo or arcade games do not load. The BIOS zip must stay zipped. For ES-DE specifically, arcade BIOS zips belong in
Emulation/roms/arcade. - Everything worked until you changed the SD card. The mount label changed, so the old absolute path is dead. Check
ls /run/media/$USER/and rerun the EmuDeck installer so it rewrites the emulator paths. - The emulator cannot read files you can see. Fix ownership with
sudo chown -R $USER:$USER ~/Emulation/bios, then checkls -lfor read permission. - On Windows, files look right but fail. Hidden extensions are the culprit. Enable file name extensions and remove any trailing
.txt. Also check that antivirus did not quarantine a.binfile.
If the audit script is clean, the checker is green and a game still refuses to boot, suspect the dump. Re-dump from the console, compare the file size with a second dump, and test again. Two dumps with different sizes mean something went wrong during the read.
SteamOS, Bazzite and Windows: Where the BIOS Folder Lives
The folder name is the same everywhere, but the path and the file-system rules are not. This matters when you move a library between a Steam Deck and a Windows handheld, a trip many readers make after reading our MSI Claw, Steam Deck and ROG Ally setup comparison.
| Platform | Default BIOS path | Card or external drive path | Filename case |
|---|---|---|---|
| SteamOS (Steam Deck) | /home/deck/Emulation/bios | /run/media/SDCARDNAME/Emulation/bios or /run/media/deck/DEVICENAME/Emulation/bios | Case sensitive on ext4 |
| Bazzite and other Linux | $HOME/Emulation/bios | /run/media/$USERNAME/SDCARDNAME/Emulation/bios | Case sensitive on ext4 |
| Windows 11 | %USERPROFILE%\Emulation\bios | DRIVELETTER:\Emulation\bios | Case insensitive on NTFS |
Bazzite behaves like any Fedora-based desktop for this purpose. Your home folder persists across image updates, so the BIOS folder survives a Bazzite upgrade. Handheld images add Steam Gaming Mode, but BIOS handling still goes through EmuDeck and the same Emulation/bios path. The practical difference from SteamOS is the username. SteamOS uses deck, while Bazzite uses the account you created, so replace deck in any copied command with $USER.
Windows is the forgiving platform. Case does not matter, so WRONGCASE never appears, and the folder path is shorter. The trap is the file extension setting and antivirus quarantine. When you copy a library from Linux to Windows, everything works. Going the other way can surface hidden case mismatches, which is why running the audit script after any migration pays off.
Advanced Tips for Power Users
Back up with checksums. A checksum file lets you detect silent corruption, a common failure on cheap microSD cards. Run this once after a clean audit and store the output on another drive. Later, the second command verifies every file.
cd ~/Emulation/bios
find . -type f -print0 | sort -z | xargs -0 sha256sum > ~/bios-backup.sha256
sha256sum -c ~/bios-backup.sha256
Move the library to a card with a symlink. If the internal drive is tight, you can move the folder and leave a link behind. Close every emulator first. Prefer the EmuDeck installer’s own storage option when it offers one, because it also updates the emulator configs. Use the manual route only when you know why you need it.
mv ~/Emulation/bios /run/media/deck/MyCard/Emulation/bios
ln -s /run/media/deck/MyCard/Emulation/bios ~/Emulation/bios
ls -l ~/Emulation | grep bios
Sync the folder between devices. If you run EmuDeck on a Deck and on a Windows handheld, a file-sync tool such as Syncthing can mirror the BIOS folder. The EmuDeck 2.7 announcement also mentions export between devices, but we found no documentation saying whether it carries BIOS files, so verify before you rely on it. Either way, run the audit script on the destination after every sync.
Turn the audit into a gate. Because the script returns a non-zero exit code on problems, you can run it before a handheld session or from a login script and print a warning. Pair it with a small text log, ./emudeck-bios-audit.sh | tee -a ~/bios-audit.log, so you build a history of when a file disappeared.
Keep a second manifest per device. A Deck with 15 systems and a Windows handheld with 6 should not share one file. Copy the manifest, delete the rows you skip and keep the summary honest. For more handheld setups and emulator guides, browse our gaming guides section.
Check the logs, not the guesses. Every emulator writes a log. PCSX2, DuckStation and RetroArch print the exact filename they searched for, along with the directory. Match that string against your folder and you will find the one-character typo in about thirty seconds.
FAQ: EmuDeck BIOS Files
Does EmuDeck include BIOS files? No. The EmuDeck Wiki states that EmuDeck does not come with BIOS files and that you must obtain them on your own. It also says ROMs, BIOS files and other copyrighted files are not included in the install.
Where do I put BIOS files in EmuDeck? In Emulation/bios. On a Steam Deck that is /home/deck/Emulation/bios, on a card it is /run/media/SDCARDNAME/Emulation/bios, and on Windows it is %USERPROFILE%\Emulation\bios. A few systems need a subfolder, such as dc for Dreamcast and kronos for Saturn with Kronos.
Which systems do not need a BIOS? Dolphin runs Wii games without one and treats the GameCube IPL as optional. Most Game Boy Advance setups run without a BIOS file. Many cartridge systems, such as the Sega 32X and Neo Geo Pocket, are listed as not required.
Is it legal to download BIOS files? The EmuDeck documentation says the legal route is to obtain a BIOS from your own console and treats other methods as piracy. Laws differ by country, so check the rules where you live. This guide does not link to downloads.
Do I need a BIOS for PS3 games on RPCS3? You need Sony’s official firmware as a .PUP file, but you install it inside RPCS3 rather than copying it into the bios folder. Vita3K uses the same pattern for Vita firmware.
Does Bazzite change anything about BIOS setup? No. EmuDeck supports SteamOS and other Linux distributions, and the folder is still Emulation/bios. The only difference is the username in paths, so use $USER instead of deck.
The checker is green but the game will not boot. Why? The checker verifies names and locations, not the contents of a dump. Check the emulator log, confirm the region matches the game and, if needed, re-dump the file from your console.
Can I copy my BIOS folder from a Steam Deck to a Windows handheld? Yes. The folder layout is identical. Copy the whole folder, keep the subfolders intact and run the audit script on the new device. Going from Windows to Linux is where case mismatches appear, so audit after that move too.





