mGBA is a new generation of Game Boy Advance emulator. The project started in April 2013 with the goal of being fast enough to run on lower end hardware than other emulators support, without sacrificing accuracy or portability. Even in the initial version, games generally played without problems. mGBA has only gotten better since then, and now boasts being the most accurate GBA emulator around.
sergiobenrocha2 did the legwork to merge/update mgba-libretro to match the upstream 0.6.1 release, including a big pile of accuracy fixes from endrift.


Beetle Saturn libretro

This is fork of Mednafen Saturn. It has been ported to the libretro API. It currently runs on Linux, OSX and possibly Windows.


To run this core, the “system directory” must be defined if running in RetroArch. The Saturn BIOS must be placed there, $sysdir/{sega_101,mpr-17933}.bin for Japanese, NA and EU regions respectively.

Loading ISOs

Beetle Saturn needs a cue-sheet that points to an image file, usually an .iso/.bin file. If you have e.g. foo.iso, you should create a foo.cue, and fill this in:

FILE “foo.iso” BINARY
TRACK 01 MODE1/2352
INDEX 01 00:00:00
After that, you can load the foo.cue file as a ROM. Note that this is a dirty hack and will not work on all games. Ideally, make sure to use rips that have cue-sheets.

If foo is a multiple-disk game, you should have .cue files for each one, e.g. foo (Disc 1).cue, foo (Disc 2).cue, foo (Disc 3).cue.To take advantage of Beetle’s Disk Control feature for disk swapping, an index file should be made.

Open a text file and enter your game’s .cue files on it, like this:

foo (Disc 1).cue
foo (Disc 2).cue
foo (Disc 3).cue
Save as foo.m3u and use this file in place of each disk’s individual cue sheet.

Suggested Firmware

sega_101.bin (85ec9ca47d8f6807718151cbcca8b964)
mpr-17933.bin (3240872c70984b6cbfda1586cab68dbe)
mpr-18811-mx.ic1 (255113ba943c92a54facd25a10fd780c)
mpr-19367-mx.ic1 (1cd19988d1d72a3e7caa0b73234c96b4)

CD Image Cache – Loads the complete image in memory at startup
Initial Scanline – Sets the first scanline to be drawn on screen
Initial Scanline PAL – Sets the first scanline to be drawn on screen for PAL systems
Last Scanline – Sets the last scanline to be drawn on screen
Last Scanline PAL – Sets the last scanline to be drawn on screen for PAL systems

hiddenasbestos brought the libretro port up to parity with upstream v0.9.47 v0.9.48, which gives a few ton of nice accuracy improvements and the much-awaited savestate support (savestates made with the v0.9.47 version are not compatible with the v0.9.48 update, so beware if you made a bunch of states in the short time between updates). Tatsuya79 and retro-wertz provided a number of improvements to the overscan and cropping behavior.


Beetle PSX is a port/fork of Mednafen’s PSX module to the libretro API. It can be compiled in C++98 mode, excluding the Vulkan renderer, which is written in C++11 for the time being. Beetle PSX currently runs on Linux, OSX and Windows.

Notable additions in this fork are:

PBP and CHD file format support, developed by Zapeth;
Software renderer internal resolution upscaling, implemented by simias;
An OpenGL 3.2 renderer, developed by simias;
A Vulkan renderer, developed by TinyTiger;
PGXP perspectve correct texturing and subpixel precision, developed by iCatButler;

To run this core, the “system directory” must be defined if running in RetroArch. The PSX BIOS must be placed there and must be named scph5500.bin, scph5501.bin and/or scph5502.bin for Japanese, NA and/or EU regions respectively. The file names are case sensitive, they can be lowercase, uppercase, uppercase with hifen (SCPH-XXXX) and the extension must be a lowercase .bin.

Memory cards will be saved to “save directory”, memory card #1 is saved using libretro’s standard interface. The rest of memory cards are saved using Mednafen’s standard mechanism. You might have to rename your old memory cards to gamename.srm. Alternatively you may just rename it from gamename.gamenamehash.0.mcr to gamename.gamenamehash.1.mcr and load them off the corresponding slot.

This core also supports save states. Keep in mind that save states also include the state of the memory card; carelessly loading an old save state will OVEWRITE the memory card, potentially resulting in lost saved games.