Cores, BIOS files, and controller mapping — the 15-minute version.
RetroArch is the engine running under the hood of almost every retro handheld's launcher, whether the menu in front of you says RetroArch, MinUI, muOS, or something the manufacturer skinned to look custom. That's good news — it means the setup steps below apply pretty much everywhere — but RetroArch's own settings menu is famously unfriendly to newcomers. Here's the version that skips the confusion.
A core is the actual emulator for one system — there's a separate core for SNES, one for PS1, one for Genesis, and so on. RetroArch is just the shell that loads whichever core a game needs.
Most handhelds ship with a reasonable default core per system already selected. Don't go download every core available "just in case" — for each system, pick one well-regarded core and stick with it until you have a specific reason to switch:
If a game runs badly, the first thing to try isn't a settings deep-dive — it's swapping to a different core for that system.
Some systems — PS1, PSP, Saturn, and others — need a BIOS file to boot at all, because RetroArch's cores emulate the console hardware but can't legally include the console's own firmware. You have to supply that yourself, dumped from hardware you actually own.
The single most common "why won't this game load" problem is a BIOS file with the wrong filename. RetroArch checks for exact names, not just the right file:
These go in the device's system (sometimes called bios) folder — not the ROMs folder. If a core-specific error mentions a missing file by name, that's your filename mismatch, not a corrupted dump.
On my RG35XX, running the stock GarlicOS-based firmware, BIOS files go straight into /Roms/BIOS at the SD card root — not nested inside a system-specific subfolder the way some standalone RetroArch installs expect. Dropping the file in one level too deep, inside a folder named after the console, was the actual fix the one time a PS1 game refused to boot for me.
RetroArch ships with a default control scheme per core, but on a handheld with a non-standard button layout, "default" often doesn't match what's printed on the buttons in your hand. Two settings matter here, and they're easy to confuse:
Global remap (Settings → Input → Port 1 Controls) changes the layout for every core. Core remap (accessed from the in-game Quick Menu → Controls) changes it for just the game you're currently in and is saved per-core or even per-game. If a fighting game's inputs feel wrong but everything else is fine, you want a core remap, not a global one.
Save states and in-game battery-backed saves (SRAM) are also separate things worth not confusing: a save state freezes the emulator itself and is fragile across core updates, while an in-game save behaves like the original cartridge/memory card save and survives long-term. For anything you care about keeping, use the in-game save whenever the game supports one.
The remap I actually needed: RetroArch's own menu defaults to Nintendo-style confirm/cancel (B confirms, A backs out), but my RG35XX's face buttons are laid out Xbox-style. Every menu felt backwards until I went into Settings → Input → Menu Controls and swapped confirm/cancel to match the buttons in my hand — worth doing before you touch any per-core remap.