You copied your files, put the microSD card back in the console, switched the machine on, and the menu stays empty. Or the category appears but no games show up in it. Nine times out of ten, it is neither a fault with the console nor a defective card: the file is in the wrong place, or in a format the system can't read. Each firmware imposes its own folder structure, and a single misplaced capital letter is enough to make the scan fail.
If you are new to the subject, start with our guide How to add games to a retro handheld console. What follows is the next level up: the exact paths, firmware by firmware, the accepted formats and the pitfalls.
Preparing the microSD card
FAT32 or exFAT: the trade-off
FAT32 is the most universally readable format. Several firmwares require it, notably Onion OS on the Miyoo Mini and the stock cards of several Anbernic consoles. Its drawback is structural: no file can exceed 4 GB. A PS2 ISO, a GameCube image or a Dreamcast GDI rarely fits under that limit.
exFAT removes this limit. It is recommended by muOS, used by ArkOS's EASYROMS partition and offered by Knulli's built-in formatter. It is the format to choose as soon as you are aiming for PS2, GameCube or Dreamcast with uncompressed images.
For speed and endurance, see our guide Choosing a microSD card for a retro console.
Formatting properly
-
Windows: File Explorer refuses FAT32 above 32 GB. Use
SD Card Formatter, thenguiformat(Fat32Format) to force FAT32 on a large card. For exFAT, Disk Management is enough. - macOS: Disk Utility, GUID Partition Map scheme, MS-DOS (FAT) or ExFAT format.
-
Linux:
mkfs.vfat -F 32,mkfs.exfat, or GParted.
Checking a new card before filling it
Fake capacities are common. A card sold as 512 GB may really hold only 32: writing seems to work, then files silently become corrupted. Check before copying anything, with H2testw on Windows or f3write then f3read on Linux and macOS. The check takes several hours, but it saves you from rebuilding your entire library.
The folder structure, firmware by firmware
Paths checked for the most widespread firmwares. Common rule: never rename system folders that were created automatically, and respect upper and lower case.
Anbernic stock firmware (Linux: 35XX, 40XX, 34XX, CubeXX)
These machines have two slots: the system card (TF1) and an optional content card (TF2). Insert a blank card in the second slot and boot up: the console creates the folder structure itself.
| Item | Path |
|---|---|
| Games | Roms/<system>/ (e.g. Roms/GBA/) |
| Box art | Roms/<system>/Imgs/ |
| BIOS | bios/ at the root of the system card |
| Recommended format | FAT32 for the second card |
The exact names of the subfolders vary by model and version: let the console generate them rather than creating them by hand.
muOS
muOS doesn't impose folder names: it scans the contents of the ROMS folder and assigns an emulator to each subfolder.
| Item | Path |
|---|---|
| Card 1 (SD1) | /mnt/mmc/ |
| Card 2 (SD2) | /mnt/sdcard/ |
| Games | /mnt/mmc/ROMS/<folder>/ or /mnt/sdcard/ROMS/<folder>/ |
| BIOS | /mnt/mmc/MUOS/bios/ |
| Box art | MUOS/info/catalogue/<System>/box/ and /preview/ |
| Core assignment | /mnt/mmc/MUOS/info/assign.json |
| Format | FAT32 or exFAT (exFAT recommended) |
The image name must match the game name exactly: Chrono Trigger (USA).zip calls Chrono Trigger (USA).png.
Knulli
Knulli expects all your data in /userdata: the SHARE partition of the main card, or the second card if you use one. The two cannot be used at the same time.
| Item | Path |
|---|---|
| Games | /userdata/roms/<system>/ (e.g. /userdata/roms/snes/, /userdata/roms/gb/) |
| BIOS | /userdata/bios/ |
| Saves | /userdata/saves/ |
| Configuration | /userdata/system/ |
| Ports / PortMaster | /userdata/roms/ports/ |
| Format | exFAT (volume label share) or ext4 via the built-in formatter |
Knulli only scans the subfolders of roms: a file placed directly in /userdata/roms/ will never be detected.
ArkOS
On a computer, the partition appears under the name EASYROMS; on the console and over the network, it is /roms.
| Item | Path |
|---|---|
| Games | /roms/<system>/ — e.g. /roms/psx/, /roms/snes/, /roms/gba/, /roms/arcade/ |
| Second card | /roms2/ (same structure) |
| BIOS | /roms/bios/ or /roms2/bios/ |
| Box art | /roms/<system>/images/ + gamelist.xml in the system folder |
| Format | exFAT |
ROCKNIX (formerly JELOS)
| Item | Path |
|---|---|
| Games | /storage/roms/<system>/ (e.g. /storage/roms/nes/) |
| Second card (slot 2) | /storage/games-external/roms/ |
| Internal storage | /storage/games-internal/roms/ |
| BIOS | /storage/roms/bios/ |
| Box art | path declared in /storage/roms/<system>/gamelist.xml, usually an images/ subfolder |
The recognised systems are defined in /storage/.emulationstation/es_systems.cfg.
Batocera
| Item | Path |
|---|---|
| Partition | SHARE, separate from the boot partition |
| Games | /userdata/roms/<system>/ |
| BIOS | /userdata/bios/ |
| Box art and metadata | /userdata/roms/<system>/images/ + gamelist.xml |
Each system folder contains an _info.txt listing the accepted formats: it is the reference when in doubt. After adding games, go to START → GAME SETTINGS → UPDATE GAMELISTS.
TrimUI stock firmware (Smart Pro, Brick)
| Item | Path |
|---|---|
| Games | Roms/<SYSTEM>/ at the root of the card (e.g. Roms/GBA/, Roms/N64/) |
| Box art |
Imgs/<SYSTEM>/ — at the root, not inside Roms
|
| BIOS | RetroArch/.retroarch/system/ |
| Other folders | Emus/, Apps/, Themes/ |
The .retroarch folder starts with a dot: it is hidden by default, so you need to enable the display of hidden files.
Miyoo stock firmware (Mini, Mini Plus) and Onion OS
| Item | Stock firmware | Onion OS |
|---|---|---|
| Games | Roms/<SYSTEM>/ | Roms/<SYSTEM>/ (e.g. Roms/FC/, Roms/SFC/, Roms/GB/) |
| Box art | to be confirmed depending on the firmware version | Roms/<SYSTEM>/Imgs/ — PNG, 250 × 360 px maximum |
| BIOS | RetroArch/.retroarch/system/ | /BIOS/ at the root |
| Format | FAT32 | FAT32 |
Imgs must have a capital I. Don't reuse the supplied folder structure as it is.Android: RetroArch and standalone emulators
No path is imposed: the folder is up to you, what matters is that the app scans it. Create it at the root of the internal storage or the card, for example /storage/emulated/0/Roms/, and avoid Android/data, where access has been restricted since Android 11.
-
RetroArch: Import Content → Scan Directory. The scan is recursive. The generated lists are
.lplfiles in playlists/. - Box art: thumbnails/<Playlist name>/Named_Boxarts/, as well as Named_Snaps/ and Named_Titles/. The image name must match the label displayed in the list.
- Standalone emulators (Dolphin, DuckStation, PPSSPP, AetherSX2 and its forks): you specify one or more folders in the settings, then refresh the library.
For what comes next, see RetroArch: the essential settings.
File formats
| Extension | System | Note |
|---|---|---|
.gb .gbc
|
Game Boy, Game Boy Color | .zip archive accepted |
.gba |
Game Boy Advance | .zip archive accepted |
.sfc .smc
|
Super Nintendo | Two equivalent extensions, archive accepted |
.nes |
Nintendo NES / Famicom | Archive accepted |
.n64 .z64
|
Nintendo 64 |
.z64 is the native byte order, the one to prefer |
.md |
Mega Drive | Archive accepted |
.bin + .cue
|
PS1, Mega CD, PC Engine CD, Saturn | The .cue is the file to launch, never the .bin
|
.chd |
PS1, Saturn, Dreamcast, Mega CD, PS2 | Lossless compressed format, a single file |
.iso |
PS2, PSP, Dreamcast, GameCube | Large, often exceeds 4 GB |
.pbp |
PS1 (PSP format) | Can contain several discs in a single file |
.m3u |
All multi-disc games | Simple text file listing the discs |
.zip .7z
|
Varies | See below |
When an archive works, and when it doesn't
It all depends on how the core loads games.
- It works for cartridges loaded into memory: NES, SNES, Game Boy, GBC, GBA, Master System, Mega Drive, PC Engine. The emulator decompresses on the fly.
-
Arcade is a special case: the
.zipis the game. FinalBurn Neo and MAME expect an archive whose name exactly matches the set (sf2ce.zip). Never unzip, rename or re-zip it: a regenerated archive breaks the expected checksums. -
It doesn't work for anything disc-based: PS1, PS2, Saturn, Dreamcast, Mega CD, PSP. These emulators access the image file directly, particularly to switch tracks. A CD image inside a
.zipwill not be read. -
.7zis only supported by some cores and decompresses more slowly. When in doubt, go for.zip.
Converting to CHD
This is the most worthwhile operation for a library. CHD is a lossless compressed disc image format, developed for MAME and supported by almost every emulator for CD-based consoles.
A single file instead of a .cue with ten or twenty .bin files, a lighter library, and less wear on the card. On a PlayStation CD, you can commonly expect to recover between a third and half of the space, more on games rich in audio tracks.
Systems concerned: PlayStation, Saturn, Dreamcast, Mega CD, PC Engine CD, Neo Geo CD, 3DO, CD-i, and PS2 on emulators that accept it. GameCube and Wii are the exception, with Dolphin's RVZ.
The tools
-
chdman, supplied with MAME: the reference, on the command line.
chdman createcd -i game.cue -o game.chdfor a CD,chdman createdvdfor a PS2 DVD image. -
namDHC: Windows graphical interface, accepts
.cue,.toc,.gdi,.isoand.zipfiles, and handles batch conversions. - tochd on Linux, or the MAME tools via Homebrew on macOS.
.sbi file, converting to CHD does not include it. Keep the .sbi next to the .chd, with the same base name.The .m3u file for multi-disc games
A three-disc game appears as three entries in the menu, and swapping discs mid-game is tedious. The .m3u solves both problems: it is a text file placed in the same folder as the discs, listing the files one per line.
Final Fantasy VII (France) (Disc 1).chdFinal Fantasy VII (France) (Disc 2).chdFinal Fantasy VII (France) (Disc 3).chd
Save it as Final Fantasy VII (France).m3u, making sure your editor doesn't add a .txt extension. You launch the .m3u and swap discs via the emulator's option, without leaving the game, with saves shared across all three discs.
Box art and metadata
Scraping automatically retrieves box art, description, year, publisher and genre from an online database. Across several hundred titles, this is what turns a list of file names into a readable interface.
- Built-in scrapers: EmulationStation-based firmwares (Batocera, Knulli, ArkOS, ROCKNIX) include one, usable from the console when connected to Wi-Fi.
- Skraper (Windows): processing from the computer, with control over the image type and output folder. It is the usual tool for stock firmwares, which have no built-in scraper.
- Skyscraper: a cross-platform command-line equivalent.
Summary of locations:
| Firmware | Image location |
|---|---|
| Batocera, Knulli | /userdata/roms/<system>/images/ + gamelist.xml |
| ArkOS | /roms/<system>/images/ + gamelist.xml |
| ROCKNIX | /storage/roms/<system>/, path declared in gamelist.xml |
| muOS | MUOS/info/catalogue/<System>/box/ |
| Anbernic stock | Roms/<system>/Imgs/ |
| Onion OS | Roms/<SYSTEM>/Imgs/ |
| TrimUI stock | Imgs/<SYSTEM>/ at the root |
| RetroArch (Android) | thumbnails/<Playlist>/Named_Boxarts/ |
In every case, the image name must match the game file name, excluding the extension. Box art that doesn't show up is almost always wrongly named.
The six most common mistakes
-
Wrong folder. A game placed at the root of
romsor in a folder created by hand won't be seen. Copy it into a recognised system subfolder, respecting upper and lower case. -
Wrong format. Check the accepted extensions: on Batocera, the
_info.txtin each system folder lists them. Convert rather than persist. -
Unsupported archive. A CD image inside a
.zipwon't work: unzip it, then convert it to CHD. Conversely, never unzip an arcade set. - Badly formatted card. A card in NTFS or APFS will not be mounted by a Linux firmware. Reformat it to FAT32 or exFAT, after backing up its contents.
- File over 4 GB on FAT32. The copy fails halfway or the file appears truncated. Two solutions: convert the image to CHD to get back under the limit, or reformat to exFAT if the firmware accepts it.
- Cache not refreshed. The games are there, but the interface shows the old list. On Batocera and Knulli, run UPDATE GAMELISTS; on RetroArch, run the scan again; on stock firmwares, a restart is usually enough.
Frequently asked questions
Can I reuse the same microSD card from one console to another?
Your game files, yes: they are the same. The folder structure, however, changes from one firmware to another, so you will need to reorganise the folders. Saves can't always be carried over, as each emulator writes to its own location.
Do I really need to convert my whole collection to CHD?
Only CD or DVD games: PS1, Saturn, Dreamcast, Mega CD, PC Engine CD, possibly PS2. Cartridges gain nothing, as CHD isn't designed for them: a .zip is enough where it is accepted.
My console recognises the card but no games appear. What should I check first?
Check the case and spelling of the system folder, then the file extension. Then force the library to refresh. If nothing changes, try a single game in the system's most common format: this separates a folder problem from a format problem.
What card capacity should I choose?
It depends on your firmware's limit. On FAT32, 128 or 256 GB covers 8, 16 and 32-bit systems with CDs in CHD. Beyond that, extra capacity is only useful for PS2, GameCube or Dreamcast on exFAT, or on Android. Our microSD cards show the recommended capacity for each machine.
Can I put my games on a second card rather than on the system card?
Yes on most machines with two slots, and it is recommended: you can change firmware without touching your library. The paths differ: /mnt/sdcard/ROMS on muOS, /roms2 on ArkOS, /storage/games-external/roms on ROCKNIX. On Knulli, the second card replaces the SHARE partition.
Where should BIOS files go?
Each firmware has its own location: /userdata/bios for Batocera and Knulli, /roms/bios for ArkOS, /mnt/mmc/MUOS/bios for muOS, RetroArch/.retroarch/system on the TrimUI and Miyoo stock firmwares. File names must exactly match what the emulator expects. These files are protected by copyright and must come from your own machines.
Once this organisation is in place, it carries over from one machine to the next. Our selection of retro handheld consoles specifies the stock firmware and compatible alternative firmwares for each model.
