Last updated: 23MAY2022 (see Changelog for details)
The Android operating system is found everywhere — on phones, tablets, retro handheld devices, media streaming devices, and even some TVs. This guide is meant to help you get acquainted with game emulation on any number of Android devices.
Table of Contents Recommend accessories Prepare your ROM library Use CHD files for CD-based systems Storage options Android frontends Game streaming Recommended emulators RetroArch -- classic systems RetroArch vs standalone emulators PlayStation 1 -- Duckstation Nintendo 64 -- Mupen64Plus-FZ Sega Saturn -- Yaba Sanshiro 2 (Pro) Sega Dreamcast -- Redream Nintendo DS -- DraStic PlayStation Portable (PSP) -- PPSSPP Nintendo GameCube and Wii -- Dolphin MMJR PlayStation 2 -- AetherSX2 Nintendo 3DS -- Citra MMJ Changelog
In general, I prefer the cards listed below, in order or preference. The prices fluctuate all the time, so keep an eye out for deals. In general, I would expect to pay $20 for a 128GB card, $30 for a 256GB card, and $60 for a 512GB. A 128GB card will allow you to load EVERY 8-bit and 16-bit game out there, just all of the arcade games that work, and quite a few PS1, Dreamcast, PSP, GameCube, PS2, and Sega CD games (those systems have the largest file sizes). A 256GB or 512GB card will allow you to store even more of those larger games. You can use a larger card than these but then you’ll have a card that costs more than the device itself, and are you really going to play more than 512GB of games at once?
128GB cards: SanDisk Extreme Samsung EVO Select SanDisk Ultra 256GB cards: Samsung EVO Select SanDisk Ultra 512GB cards: Samsung Evo Select SanDisk Ultra
Another accessory to consider: if you don’t have a nice microSD to USB adapter, you might want to think about getting one. A nice adapter like this one from Anker will give you the fastest transfer speeds possible, and won’t cause any corruption issues with your card.
Additionally, some Android devices have video-out capabilities via their USB-C port. You will want to check the manufacturer specs to see if it’s possible. I would recommend getting a USB-C to HDMI adapter or a USB-C hub with HDMI output, so that you can turn your device into a home console to play on your TV. The hub might be worth the extra cost, since you can also use it to power the device, connect to a microSD card, and connect wired controllers all in one.
Speaking of controllers, there are plenty of options out there, but I prefer to use something that’s somewhat retro-friendly. You could use a bluetooth controller like the 8BitDo SN30 Pro, or a wired controller like the Betop BD2E. Note that in order to use a USB controller, you will also need an OTG adapter to plug the controller into the device’s USB-C port (you could also use a USB hub to plug in multiple controllers at once!).
If you are using an Android phone, then I recommend a telescopic controller like the GameSir X2. This USB-C controller will wrap around the phone and provide a more seamless experience than clipping a controller to your phone. This controller also has a power passthrough, so you can charge the phone while playing (sadly the USB-C passthrough does not support video out).
Prepare your ROM library
Another important aspect of retro gaming is to build your ROM library. Here is a general list of systems that can be played on Android. Those noted with an asterix cannot play every game at full speed, and so performance may vary. For PS2 and GameCube on lower-end Android devices, I recommend getting PAL region ROMs, because they cap out at 50Hz which will give you better performance than struggling to reach the standard 60Hz found in NTSC region ROMs. ROM files are copyrighted and will not be shared on this website.
Atari 5200 (and 800)
PC Engine (TurboGrafx-16)
PC Engine CD (TurboGrafx-CD)
Nintendo Entertainment System
Famicom Disk System
Sega Master System
Neo-Geo / CD
Sony PlayStation 2
Game and Watch
Nintendo Game Boy
Nintendo Game Boy Color
Nintendo Game Boy Advance
Nintendo Virtual Boy
Sega Game Gear
Neo-Geo Pocket / Color
Sony Playstation Portable
Wonderswan / Color
Commodore 64 (and C16/Plus4, C128)
Final Burn Neo
Neo-Geo / CD
When getting ROM files, I recommend using the “No-Intro” naming convention, which is the standard naming used for ROM sets within RetroArch and other emulation communities. By using no-intro naming, you will be more likely to get box art automatically added when you load up your games in RetroArch or most frontends. If you have a question as to how a game should be named, I recommend checking out the Libretro thumbnails directory, which is what many emulators pull from for their media files. If your game name matches the thumbnail name found in this directory, chances are that it will properly download the media for it.
Additionally, an important component of a ROM library is maintaining BIOS files. BIOS files are system files necessary for some emulators (GBA, Sega CD, or PS1/PS2), and are helpful in improving accuracy with other systems. These files are copyrighted so you are on your own to find them, but a quick search for a RetroArch bios pack should get you on your way. Note that PS2 BIOS files can be easily dumped from your PS2, or you will need to find them elsewhere. Here is more information about BIOS files.
Recommended BIOS files: SEGA CD: bios_CD_E.bin bios_CD_J.bin bios_CD_U.bin FAMICOM DISK SYSTEM: disksys.rom GAME BOY (for boot logo): gb_bios.bin GAME BOY COLOR (for boot logo): gbc_bios.bin GAME BOY ADVANCE: gba_bios.bin NEO GEO: neogeo.zip PLAYSTATION: scph1001.bin PLAYSTATION 2: SCPH-90001_BIOS_V18_USA_230.ROM0 TURBOGRAFX-CD: syscard1.pce syscard2.pce syscard3.pce SEGA SATURN saturn_bios.bin SEGA DREAMCAST dc_boot.bin (renamed to boot.bin)
Use CHD files for CD-based systems
One of the best things you can do for your CD-based systems like PSX, Sega CD, Saturn, 3DO, Dreamcast, Jaguar, and TurboGrafx-CD (PC Engine CD), is to convert the file types into CHD files, which are compressed and easily read by many different emulators. Generally, if your files are in iso, bin/cue, or gdi format, they can be easily converted to CHD. Note that this process only works in Windows.
- Place all of your games in subfolders if they have more than one file per game (like bin/cue files).
- Download CHDMAN.zip (right-click and select “Save As”) and unzip the folder. Place the chdman.exe file in the same directory as your iso or bin/cue files, as well as the CUE-ISO-GDI to CHD.bat file.
- Run the batch file and it will auto-crawl through your directory and subdirectories and make CHD files.
If you have a microSD card slot on your device, you may have some decisions to make regarding how the storage works. When using Android 10 or below, you may get prompted to “set the SD card up” when first inserting the SD card. It will ask you to choose between the default portable storage option, or using the card as internal storage. Portable storage means that you will be able to freely take the SD card out of the device and plug it into your PC, as demonstrated in the video above. If you set it to internal storage, you will then be able to install apps on the SD card to save space, but you won’t be able to plug the SD card into your PC — instead, you will have to plug the device into the PC and transfer files via USB instead. Internal storage is a good solution if you want to install a LOT of Android games onto your device, but in general I recommend portable storage for its flexibility.
One other note to make: plugging the SD card directly into your PC to transfer files will give you much greater transfer speeds, about 4x the speed of USB file transfers. So I recommend removing the SD card and plugging it into your computer whenever you have a large batch of files to transfer; USB transfer works fine in a pinch for smaller transfers.
With Android 11 and above, you will get the same prompt, but file permissions settings are different on these more modern OS versions. This is because these OS versions use scoped storage, which provides apps with file permissions without having to request it of the user, while also protecting the user’s data. For apps that have been updated to accommodate scoped storage, this transition is seamless. But for apps that haven’t been updated (which includes RetroArch and many standalone emulators), they will not be able to access the microSD card if the card has been set up as portable storage. What this means is that in order for all apps to readily access the microSD card, you may have to set it up for internal storage instead, until the apps are updated.
There are some workarounds to get portable storage to work, like using a frontend that can access the card directly. A good example would be the Dolphin MMJR (GameCube) emulator. This one works best on lower-end devices, but it does not have support for portable storage. What this means is that if you open the app and try to navigate to the games stored on your SD card, you won’t be able to see them. However, if you use something like the LaunchBox frontend, you can set it up to boot your GameCube games in Dolphin MMJR, and thus workaround the issue. In the video above, my LG V60 didn’t allow me to set my SD card for internal storage, which means I had to use a workaround like this to access my games via MMJR.
Note that if you use a USB-C dock like the one featured in the Accessories section above for storage (by plugging in a USB flash drive or SD card), that will also be treated as portable storage.
There is a staggering amount of frontend options available for Android devices. Here is a quick summary of some of the most popular options, and the pros and cons of each. Personally, I would recommend trying some of the free options like ATV Launcher, LaunchBox (trial version), DIG, and/or Pegasus, and see if one of those are a good fit for your play style before you shell out money on something you may or may not like.
ATV Launcher (Pro)
ATV Launcher is an Android frontend most commonly used with TV boxes and tablets. It transforms the standard Android interface into a tile-based one, and has some nice features like widgets and the ability to hide or customize each tile. This allows you to make a clean interface that resembles a gaming console, and also works well when using controllers. There is a free version that works well, but the paid version ($3) is necessary to remove ads and have the ability to hide and customize the tiles. This option is a good choice if you don’t mind still having to navigate through standalone apps and emulators; it’ll still definitely feel like an Android device…but a prettier one.
LaunchBox is the priciest option when it comes to Android frontends — there is a free version that is limited to 100 games, but a lifetime license costs $25. Thankfully, this license can be used on multiple devices, so you will be able to use it on any Android device going forward.
Cost aside, LaunchBox is my favorite all-around frontend for those who want a nice interface with minimal work. There’s not much in the way of themes or customization options, but its media scraping function works surprisingly well, and the fact that it is in active development (changelog here) means that just about every emulator on the platform is fully supported. The user interface is relatively smooth and fast, and you can even export your LaunchBox PC library directly to the Android version, with media and everything. Unfortunately this app doesn’t have the ability to re-match an incorrect media scrape, and so for that reason if you are having issues I would recommend building your roms/media in the PC version of LaunchBox first, then export it to Android using the link above.
DIG is a free emulator frontend that is one of the easiest to set up. It will find your games on the device and organize them into their own sections. You can use a number of different themes for the frontend, but my favorite is this one here, called Alek-a-Like. This frontend has a fair amount of customization options, it runs pretty quickly, but doesn’t feel as polished as something like LaunchBox.
Pegasus is also free, and is much more customizable than the alternatives. The interface can be very snappy and sharp looking, but will get bogged down with large collections (over 1,000 games). This one takes a lot of work on the backed to get set up; for example, in order to see game boxart, you must scrape it from a Windows app like Skraper, and then convert the .xml file to something readable by Pegasus. Luckily, someone has created a handy tool called Pegasus Installer that is optimized for Android-based handhelds like the Odin, Retroid Pocket 2+, and the Anbernic RG552 — and it works on Android phones, too. This tool will install the app, download and configure your apps, set hotkeys, scrape media, and provide bezels, too. Note that it seems to work best on Android 10 and lower.
One neat feature about Pegasus is that if you go through the setup of your device using the Pegasus Installer, it will pre-configure RetroArch for you with updated video features (like Game Boy colorization) and bezels. So even if you end up using another frontend, I recommend running through this installer script at least once so that you can take advantage of these configurations.
Reset Collection is a paid ($5) app with some nice features. You can add your systems one-by-one, and it will add the media for you. The interface is clean but won’t scale super well on devices with smaller screens; on phones and some retro handhelds, the browsing experience can feel limiting. The app is in active development, and so most Android emulators are supported (or support is in the works). The scraping experience works well — it uses the LaunchBox database to pull the data, and downloads the media quickly. It also has an advanced search function, video snaps that autoplay from YouTube (saving storage space), and a unique game randomizer option that will pop you into a random game from your library. It is also possible to add skins to the frontend to customize your experience, but unfortunately it only has the one single theme. For more details, check out the Reset Collection YouTube channel.
Arc Browser is a paid ($8.50) app that is similar to DIG in its feel, and Reset Collection in its setup. It does have an active development community within Discord and a comprehensive website that can walk you through some of its customization options. You have a choice of classic and modern UI examples within the frontend, and the app seems particularly designed to be used with a controller, which is great for Android-based handheld consoles.
While this is an emulation guide, it’s also important to recognize that many Android tablets and phones can double as streaming consoles, too. In addition to streaming PC games from your computer or the cloud, you can also use remote play apps to play modern gaming consoles. If your Android device isn’t quite powerful to emulate some higher-end systems, you could run those systems on a computer and then stream your computer to the device instead.
Recommended streaming apps: NVIDIA GeForce Now (PC & cloud streaming) Moonlight (PC streaming) AMD Link (PC streaming) Steam Link (PC streaming) Parsec (PC streaming) Google Stadia (cloud gaming) PSPlay or Chiaki (PS4 & PS5 remote play) Xbox (Xbox One/Series remote play) Xbox Game Pass (Xbox/PC cloud streaming)
In the sections below, I’ll go through the list of recommended emulations and my suggestion configurations. But for ease of use, here is a list of all the recommended emulators all at once:
Recommended emulators: RetroArch Duckstation Mupen64Plus FZ (Pro) Yaba Sanshiro 2 (Pro) Redream DraStic PPSSPP (Gold) Dolphin MMJR AetherSX2 Citra MMJ
RetroArch — classic systems
RetroArch is a kitchen-sink emulation program available on a variety of platforms, including Android. RetroArch can play dozens of emulated systems while standardizing options like hotkeys, controls, screen settings, and more. The platform is uniquely challenging to set up, and so for that reason I created a standalone RetroArch starter guide. So when setting it up, I recommend following the guide to get oriented.
When setting up RetroArch for Android, there are a few items to consider:
- There are two versions available in the Google Play Store: RetroArch and RetroArch Plus. The first app is optimized for compatibility while RetroArch Plus is 64-bit and designed for devices running Android 8.0 or later. Funny enough, I don’t recommend using either of these apps. Instead, go directly to the RetroArch website and download the latest 32-bit or 64-bit nightly apks directly (the ones at the very bottom with no date), and then side-load the applicable apk onto your device. To side-load, simply navigate to the RetroArch website using your device’s web browser and download and install the app. If your device doesn’t have a browser, move the apk to your device’s storage (via SD card or USB connection) and then install it via a file manager app.
- Once you have installed the app, open it one time to create the file directories on your device. From there you will find the directories in a folder named RetroArch directly in the root folder of your device. Here you can find your save files, screenshots, thumbnails, and more. There is also a “system” folder where you can place your BIOS files (or set a new BIOS directory as demonstrated in the RetroArch starter guide).
- In addition to the RetroArch folder in the root directory, there is another file system location on your Android device, which you can find in the Android > data > com.retroarch.aarch64 (or similarly-named) folder. Within this folder you will find a “files” folder, and inside there will be your retroarch.cfg file in case you want to back this up to another device in the future.
- A bug in some versions of RetroArch (like the Android build) occurs when mapping the A button as a hotkey using controllers that don’t have an embedded controller profile. This will break the use of the A button within the menu. So in some cases you may not want to map the A button to a hotkey at all.
- Devices running older Android versions are sometimes notorious for having input delay, which can be very annoying when playing classic games. The best fix is to use a device with a built-in controller, or one that provides a direct connection, like the GameSir X2. If using a bluetooth controller, you can mitigate input latency by using the RUN AHEAD feature which will reduce latency on certain setups. Like with the rewind feature, this has a performance tax and should only be used on systems that would benefit from it (like SNES and below). Assuming you have already set up your device by following the RetroArch starter, guide, we’ll use a core override to set this up. First, start up a game (like an NES game), and then press SELECT + X to bring up the Quick Menu, then navigate to the Latency section within the Quick Menu. Now select Run-Ahead to Reduce Latency > ON. Now you can go to Quick Menu > Overrides > Save Core Overrides, which will enable run ahead support on all NES games running that emulator core. Note that this is one of many advanced features to improve latency; here is more information.
- Finally, on many versions of RetroArch (specifically those with touchscreen capability, like in Android), they may have a TOUCHSCREEN BUTTON OVERLAY on your screen when starting up a game. If you have a controller you likely do not want to see this overlay. To turn it off, go to Settings > On-Screen Display > On-Screen Overlay > Display Overlay > Hide Overlay When Controller is Connected > ON. Be sure to save your current configuration to make this setting stick.
So yes, when setting up RetroArch, I strongly recommend using my starter guide to get you going. This will orient you with the software and give you the fundamentals to understanding its interface.
My preferred RetroArch cores for popular systems:
Arcade (FB Alpha 2012) -- for low-end devices Arcade (FinalBurn Neo) -- fighting games and beat'em ups Arcade (MAME 2003-Plus) -- all-around arcade emulation Commodore Amiga (PUAE) DOS (DosBox-Pure) NEC PCE/TG-16/PCE-CD/TG-CD (Beetle PCE) Nintendo GB/GBC (Gambatte) Nintendo GBA (gpSP or mGBA) Nintendo Virtual Boy (Beetle VB) Nintendo DS (melonDS) Nintendo NES (fceumm or QuickNES) Nintendo SNES (Snes9x Current) Nintendo 64 (ParaLLEl or Mupen64Plus) ScummVM -- point-and-click PC games Sega Master System/Genesis/CD (Genesis Plus GX) Sega 32x (PicoDrive) Sega Saturn (YabaSanshiro or Beetle Saturn) Sega Dreamcast (Flycast) SNK Neo Geo (FinalBurn Neo) Sony PlayStation (DuckStation, SwanStation, or PCSX ReARMed) Sony Playstation Portable (PPSSPP)
RetroArch vs standalone emulators
RetroArch can emulate a variety of systems, but that doesn’t mean it will be the ideal app for every situation. To its advantage, RetroArch has universal settings which make things like button mapping a breeze, but it can also be less optimized than standalone emulators. This can be especially apparent when using an Android device that isn’t super powerful. Here are some considerations:
- When playing SNES and below systems, RetroArch will almost certainly be the best app to use. In general, only PS1 and above systems should be considered for standalone emulators.
- If you plan on using a frontend like LaunchBox or The Reset Collection, RetroArch is beneficial because you can set up a universal hotkey to quit RetroArch — very few standalone emulators have this feature. What this means is that when using RetroArch, you can press a key combination to quit the game and go right back to your frontend to navigation to another game; on standalone emulators, you will need to tap or swipe on the screen to bring up the app’s menu, then choose to quit the app. This sounds like a minor inconvenience on paper, but in real life it can become annoying and will make your Android device feel less like a true “retro console”. So if the navigation experience is important to you and you want to use a frontend, then RetroArch will provide a better setup.
- RetroArch is free, while many standalone emulators cost money (or have certain features hidden behind a paywall). A good example is Sega Dreamcast. The standalone Flycast emulator is free and can upscale the graphics, but the interface is clunky and difficult to navigate. The standalone Redream emulator is much more intuitive and clean, but you will need to make a one-time in-app purchase to unlock upscaling (more on that in the Dreamcast section below). Meanwhile, the RetroArch app has a Flycast core that can handle both upscaling and widescreen hacks with ease, as long as your device is powerful enough to handle it. If your device is struggling to perform using the RetroArch Flycast core, consider using Redream as you will likely get better results.
- In some cases, the RetroArch cores are simply nowhere near as performant as a standalone emulator. A prime example is Nintendo DS; there are multiple core options within RetroArch for NDS, but they all pale in comparison to the (paid) DraStic emulator.
Bottom line: plan on using RetroArch for everything below PS1, but if you have a device powerful enough to run them, you may want to consider using RetroArch for PS1, N64, PSP, Saturn and Dreamcast so you can take advantage of the universal hotkeys (to quickly jump in and out of your games), saves, upscaling, and more. Otherwise, stick with standalone emulators for those higher end systems.
PlayStation 1 — Duckstation
Duckstation is a powerful PS1 emulator that is more accurate than the PCSX-ReARMed RetroArch core. There are also Duckstation and Swanstation RetroArch cores, which work well. The standalone Duckstation emulator requires more performance power than the RetroArch core, so depending on your device, you may want to use RetroArch instead. Some have reported that ePSXe runs better on lower-end Android devices, so if Duckstation is giving you a hard time, maybe try that one too. Duckstation is available in the Google Play Store for free.
When first booting the app, it will ask you to map the controls. I recommend doing that as your very first thing. Here are the recommended changes:
- Controller settings > Auto-Hide Touchscreen Controller > ON
- Controller settings > Port 1 > Controller type: Analog Controller (DualShock)
- Controller settings > Port 1 > Use Analog Sticks for D-Pad in Digital Mode > ON
Under App Settings, not a lot needs to be changed here. I recommend going to the Enhancements section and adjusting the Resolution Scale depending on how much you want to upscale your 3D graphics. For reference, 3x is 720p and 5x is 1080p. Also in App Settings > Enhancements, turn ON the PGXP Geometry Correction to reduce wobbly polygons; this may negatively affect performance so you may have to adjust as needed.
BIOS: Duckstation requires bios files, I recommend using scph1001.bin as your file. Go into Settings > Import BIOS and navigate to your bios file on your storage.
Recommended file types: Duckstation supports .bin/.cue, .iso, .img, .chd, .pbp, and .m3u file types. I recommend converting your bin/cue and iso files to .chd to save on file space, and using .m3u files or .pbp files for multi-disc games. You can convert files into .chd format using CHDMAN using the steps found above.
Nintendo 64 — Mupen64Plus-FZ
This app is the best Nintendo 64 emulator available on Android, and is in active development. There is a free version as well as a paid version ($4) that removes ads, and also provides cloud saving and netplay features.
To improve the navigation experience, go into Settings > Input > Show in-game menu > When slide gesture is used. Now, you can swipe from the left side of the screen to bring up the Mupen64 side panel when in a game, to easily save your game, exit, etc.
By default the N64 A and B buttons may be mapped to buttons that don’t feel natural to you. If you want to adjust your mappings, you will need to copy the Android Gamepad controller profile and make your own mapping. From there, go to Profiles > Select Profiles and change the Controller 1 profile to the one you just made.
Under Settings > Display > Rendered Resolution, you can adjust your rendered resolution to whatever your device can handle. I do not recommend using a resolution that is higher than your device’s display. To change the resolution on a per-game basis, tap on a game then select Settings > Rendered Resolution and adjust it there.
The default emulation profile is Glide64-Accurate. In general this is the best profile to use. If you want to change it to a new default profile, go to Profiles > Select Profiles > Emulation profile and make the change. To change it per-game, tap on a game then select Settings > Emulation profile and adjust it there.
BIOS: not needed
Recommended file types: .z64 and .n64 files.
Sega Saturn — Yaba Sanshiro 2 (Pro)
Yaba Sanshiro 2 is a standalone Sega Saturn emulator that is in active development. There is a Pro version ($5.60) which disables ads and prompts to upgrade. This app will provide the best emulation performance, but if you have a powerful enough system, you could also try the RetroArch Yabasanshiro core to take advantage of the integrated and streamlined settings available within RetroArch instead. Note that the standalone Yaba Sanshiro emulator does not work with most Android frontend apps, so in that regard RetroArch may be more ideal for your setup.
The developer for Yaba Sanshiro 2 owns an AYN Odin (Snapdragon 845), and provides suggestions for the best performance on the device in this blog post. Here is a quick summary of the recommendations:
- Use version 1.7.4 of Yaba Sanshiro 2 or above
- Use CPU affinity > OFF
- Use Computer Shader > ON
- Polygon Generation type > GPU Tessellation
- Sound time synchronization mode: Real time
- Additionally, to improve the L2/R2 button operation, the developer recommends setting the L2/R2 mode to “Both” within the Odin settings.
When using the Yabasanshiro RetroArch core, I have found that trying to save a save state in Android will crash the app. Additionally, if you have RetroArch set to Auto Save State/Load on exit, that means the app will crash every time you close a game. This is bad because it will affect your in-game saves and RetroArch Quick Menu core options. To work around this, you should open a Saturn game, then back out into the RetroArch settings, go to the Saves section, and turn OFF auto save state/load on exit options. Then go to Quick Menu > Overrides > Save Core Overrides. Now the app won’t crash when you close a game, but you will need to rely on in-game saves in order to record your progress.
With either the standalone emulator or RetroArch core, you will want to remap your controls for optimal gameplay. I recommend using YBA for ABC, and L1, X, R1 for XYZ buttons.
BIOS: If you want the original Saturn boot video sequence within the standalone emulator, you must place the BIOS file (saturn_bios.bin) in the yabause/bios folder on your internal storage (this folder will only appear once you have opened the app at least one time). You can achieve the same result with RetroArch by placing the BIOS file in the RetroArch system folder.
Recommended file types: .chd files. See my CHD section for instructions on how to convert other file types files to compressed .chd files using CHDMAN.
Sega Dreamcast — Redream
Redream is an excellent Dreamcast emulator, and my favorite. It is free from the Google Play Store but you will need to upgrade to the Premium version (via in-app purchase, $6) to be able to upscale your resolution. This one-time purchase will be linked to your Google Play Store account and work on any device you use that account on. If you want a free app that allows for upscaling, you can try the Flycast app, or RetroArch if your device is powerful enough.
To set up Redream, go to Library > Add Directory and point the app to your Dreamcast file directory.
When configuring controls, go to Input > Input Device and select the controller input you prefer. Then go in and bind your controller to what you prefer. Make note of the “Exit Emulator” shortcut, you can bind that to a key (like L3) to quickly close a game (and the app) when using a frontend, to improve the navigation experience.
- Video > Game Resolution will allow you to upscale the resolution if you have paid for the Premium version
- Video > Game Aspect Ratio will allow you to stretch the game to 16:9 or your system’s display if desired. Note this will not implement widescreen hacks. With Redream, you will have to individually patch your Dreamcast games to be in widescreen and then set the aspect ratio to 16:9. Here is my guide on using hex edits to create widescreen versions of your Dreamcast games. If you really want widescreen Dreamcast games without extra work, then I recommend using widescreen hacks/cheats in RetroArch, as demonstrated in my RetroArch starter guide.
- By default, Redream runs an auto frameskip (found in Video > Frame skip) that works really well. If you have a powerful system and want a perfectly smooth experience, set this to OFF.
- Video > Frame rate counter > vblanks per second if you want to see the frame count while playing a game
- Video > Vertical Sync > ON
- Video > Polygon sort accuracy > per-strip will work fine in most situations. If you have a powerful device, you can set it to per-pixel instead, but this provides little improvement while requiring a lot of system resources.
BIOS: not needed, but if you add the bios file to /mnt/sdcard/Android/data/io.recompiled.redream/files/boot.bin on your internal storage, it will show the original Dreamcast boot logo when starting up a game. Note that the bios file must be renamed to “boot.bin”. This will also allow you to boot into the bios to manage the VMU storage devices on your app.
Recommended file types: .chd or .gdi files. See my CHD section for instructions on how to convert .gdi files to compressed .chd files using CHDMAN. Also, .cdi files will work but that is a legacy file type that can omit important game information.
Nintendo DS — DraStic
When it comes to Nintendo DS emulation on Android, the only viable option is the DraStic emulator. It is a paid app, and costs $4.99. Another standalone option (which is free) is MelonDS, but its development is not as far along as with DraStic.
- Video > Frameskip Value > 0 for most devices
- Video > Fast-Forward Maximum Speed > Unlimited (or lower) to increase the fast-forward speed (good for RPGs)
- Video > High-Resolution 3D Rendering > ON for most devices
- General > Show FPS if you want to see the framerate while playing
- General > Autosave > On Pause/Suspend if you want the game to save every time you pause the game. You can also set it to auto save at 5, 15, or 30 minute increments
- General > Resume Last Save… > ON when you want to auto load your save state every time you open a game
- General > Default Layout > Landscape x:1 to have one large screen and another smaller screen. You can also choose another layout if you so desire
- System > Nickname and Birthday to set a unique UserID which will work in certain games like Mario Kart DS
- System > Always use System Time for RTC > ON if you want a real-time clock synced to your device (good for Pokemon)
To set up controls, go to External Controller > Select Key Mapping > Generic Gamepad then select “Map Control”. Map your buttons as desired; I recommend mapping L2/R2 as your L/R buttons on the console. Then, select “Map Special” and select L1 for “Screen-swap”, L3 for “Fast Forward”, and R1 for “1/2 Screen Swap”. For all the other commands you can tap “Skip” (unless you want to map them to something else). This will allow you to use the shoulder buttons to swap screens and alternate between screen modes.
When playing a game, you will see on-screen buttons. To remove those, start up a game and enter the Menu, then select Edit Screens and Virtual Pad. Here, choose “Landscape Aspect” > Menu > Edit Controller Layout. Go through and tap on each button and then disable them (all but the Menu button), then select Apply. When that is complete, select Menu > Save as global layout. Repeat this process for the “Landscape 1:1” layout as well. This will remove the buttons altogether so they don’t inhibit touchscreen gameplay.
BIOS: not needed.
Recommended file types: DraStic can read .nds as well as .zip and .7z (compressed) files if you want to save on storage space.
PlayStation Portable (PSP) — PPSSPP
This app works well by default, but there are some tweaks you can do to improve performance or graphical fidelity.
- Graphics > Backend > OpenGL or Vulkan. In general, OpenGL will give you the most accurate emulation, while Vulkan will sometimes perform better but may have more graphical glitches (especially in game menus). I recommend trying OpenGL first and then adjusting as needed to Vulkan.
- Graphics > Mode > Buffered rendering. You can choose “skip buffer effects” in some cases to improve performance, but this can also seriously glitch (or crash) your game.
- Graphics > Frame skipping > OFF. This can be turned on to improve performance, but should only be considered on very low-end devices. The “auto frameskip” option will theoretically skip frames only when needed, but in practice it can create a yo-yo effect with game speed. Setting the frame skipping to a set number (like 1) will provide a more fluid experience, but without smooth gameplay.
- Graphics > Rendering resolution. Adjust this setting as much as possible to get the best 3D-rendered graphics. 1x resolution will only look good on very small screens, since that is the original PSP resolution. 3x resolution is the equivalent of 720p, and 4x is 1080p; I recommend not adjusting the resolution to higher than your device’s actual display.
- Graphics > Texture upscaling > Upscale level. This will adjust the non-3D graphics in your games, and will sharpen menu text. However, the upscale type (like xBRZ) can also provide an odd smoothing effect to the text.
- Graphics > Anisotropic filtering. This will increasing the rendering quality of 3D graphics but requires memory bandwidth, something that is hard to come by on mobile chipsets. This should only be used on more performant chips and on large displays where you can see the difference.
By default, the on-screen touch controls are enable on this app. To disable, go to Controls > On-screen touch controls > OFF. Additionally, I recommend going into the Controls > Control Mapping section and map your controls so that they mimic the PSP’s buttons. Be sure to assign a button to the “Pause” function, so that you can quickly bring up the PPSSPP menu with a keypad press (I generally assign this to the L3 button)
BIOS: not needed.
Recommended file types: PPSSPP can read .iso, .pbp, and .cso files. In order to save space, I recommend converting .iso files to .cso files using an app like UMDgen.
Nintendo GameCube and Wii — Dolphin (MMJR)
There are many different versions of the Dolphin emulator available for Android. The primary app, which you can find in the Google Play Store, is the most accurate of the emulators, and has very good performance with the OpenGL backend. However, it requires a powerful device to run properly. If you are using a powerful device, then simply install that app and see how it goes. For everyone else, I recommend using Dolphin MMJR as your standard emulator.
In some situations, you can try the Dolphin MMJR2 app, which allows you to adjust the resolution below 1x to try and squeeze the best performance out. It also aims to incorporate elements of the Dolphin mainline app. There is also a version of Dolphin MMJ that is undergoing some active development as well. The world of Dolphin forks is confusing and ever-changing, but if you are running a device that can’t quite keep up with the Play Store version, I would recommend MMJR first, and the other forks after that.
GameCube/Wii emulators: Dolphin (Google Play Store) -- most accurate Dolphin MMJR -- best all-around for performance Dolphin MMJR2 -- some unique resolution scaling features Dolphin MMJ -- under active development with some new updates
The Dolphin apps work with both GameCube and Wii games. Wii games are more demanding than GameCube, and you will want to go into each individual game and configure the controls. Since each Wii game had unique controls, you’ll want to see what combination works best for you — nunchuck + Wiimote, Wiimote on its side, Classic Controller, and so on. To make per-game input changes, long-press on the game and select “Wii Input”. This is also how you would make per-game input changes for GameCube games.
While Dolphin has the ability to force games to play in widescreen (and a widescreen hack), many GameCube games had support for widescreen gameplay anyway. My recommendation is to go into the game’s settings first and see if there is a widescreen option. If so, turn that on, and then go to Settings > Graphics Settings > Aspect Ratio > Force 16:9. If the game doesn’t have a widescreen option, you can still enable this “Force 16:9” and then also go to Settings > Graphics Settings > Enhancements > Widescreen Hack > ON and see how the game looks with that setting on. Some games (like Wind Waker) will look awesome, while others will have textures popping into the sides of the screen that can be distracting.
The Dolphin emulators have the ability to save per-game settings. To make per-game settings, long-press on the game in the main menu, and then make your adjustments. This is handy if you want to enable widescreen for only certain games, or adjust the upscaled resolution for the games that work best on your device. Additionally, I use this feature to adjust the controls for certain games like Wind Waker or Spyro, so that the c-stick (right analog stick) moves in the opposite direction of the default settings (simply map up as down, and left as right).
You can also long-press on the game icons in the main menu and select “Quick Load” to load directly into your most recent save state.
Some Dolphin MMJR tips:
- Go to Settings > Graphics Settings and switch between OpenGL and Vulkan as the Video Backend to see which one performs best with your device. It may vary by game, but generally one graphic backend will run better than the other on each device.
- There are a few tricks you can do while playing a game to see if you can improve performance on the spot. While a game is loaded, go into the Config menu at the top-right and adjust these two options:
- Immediately Present XFB > ON
- Sync on Skip Idle > OFF
- Once you have found settings that work best for each game, you can long-press on the game in the selection menu and make per-game settings changes
- Use PAL region ROMs (sometimes referred to as European versions) instead of NTSC region ROMs. PAL ROMs generally give you the option of running the game at 50Hz (frames per second) instead of the standard NTSC 60Hz. This means that PAL games can generally reach full speed more easily than with NTSC ROMs.
If you have a more powerful device and can run the regular Dolphin app, I recommend trying these settings:
- Graphics backend: OpenGL
- Shader Compilation Mode: Hybrid Ubershaders
- Compile Shaders before Starting: ON
BIOS: not needed.
Recommended file types: You can use .iso, .gcz, .wia, and .rvz files with Dolphin. For best results, convert your .iso game files to compressed .rvz files. The easiest way to do this is to install the desktop version of Dolphin on your Windows PC or Mac, and then right-click on the game and select “Convert File…”. You have several different options, but .rvz files work well in all versions of Dolphin past 5.0-12188, and the default compression level will reduce file size by about 10-20%. You can also convert your game files directly in the app if you are using the official Dolphin app from the Play Store.
PlayStation 2 — AetherSX2
AetherSX2 is an Android version of the popular PCSX2 emulator, and is available in the Google Play Store for free.
PS2 emulation is exceptionally tricky, and the AetherSX2 developer recommends a Snapdragon-845 or equivalent device for the best performance (four big Cortex-A75 cores would be a good example). Devices with Adreno GPUs work best, and Mali or PowerVR GPUs will have degraded performance.
When first start the app, it will run the Setup Wizard. In there, it will allow you to set Optimal/Safe or Fast/Unsafe defaults. Use Optimal if you have a powerful device, and Fast if you don’t. If you want to re-run the Setup Wizard at any time, tap the three dots on the top-right of the screen when in the App Settings menu.
Of all the apps in this guide, this one will rely most heavily on per-game settings. You can set this up by long-pressing the game in the main menu, then select Game Properties > Game Settings and make your changes there. You can also adjust settings while in the game itself, by tapping the info button on the top-right corner to access Game Properties.
- If you only have two big (Cortex-A75 or equivalent) cores on your device, like with Snapdragon 700 chipsets, you should disable Multi-Threaded VU1 in the System settings. If you have more than two big cores, turn this setting on.
- Under System Settings > Advanced > Enable Fastmem and Affinity Control
- For some games, you can try enabling the Settings > Graphics> Preload Textures and GPU Palette Conversion options to improve performance.
- You can also adjust Settings > Graphics > Disable Hardware Readbacks for improved performance, but this may also create glitches.
BIOS: You will need PS2 bios in order to use this app. You will be on your own to find them, and I recommend using the SCPH-90001 or SCPH-70001 bios files.
Recommended file types: I recommend .iso files for widest compatibility, or .gz files for reduced file size. You can convert .iso files to .gz files via the pigz app.
Nintendo 3DS — Citra (MMJ)
Citra is the only viable 3DS emulator for Android. In addition to the Play Store version, there is a Citra MMJ version that is more suited for lower-end devices and seems to be updated more frequently than the one you can find in the Play Store. There is also a Citra Enhanced app that carries some unique features as well. For most of my own personal use, I prefer the Citra MMJ version, so that’s what we’ll focus on in this guide. All versions are free.
- Use Dual Core > ON
- Screen Layout > Default (one big and one small)
- Internal Resolution > as desired (and what your device can handle)
- Enable Hardware Shader > ON
- Shader Type: Normal Shader with Cache
Once you’ve started a game, swipe from the left to bring up the in-game menu. This will have a separate set of settings that will be helpful for certain scenarios. You can also set up a custom layout to better match the two screens to your device’s screen, and exit the game from this menu. To hide the on-screen controls, be sure to enter the in-game menu and select:
- Settings > Hide Input Buttons > ON
BIOS: not needed.
Recommended file types: 3ds (decrypted) files are my preferred type, but others may work too.
– switched to nightly RetroArch build links
– minor changes
– published guide