0%

1440p DIY Retro Handheld - Part 2 (Configuration)

What good is our shiny new hardware without the fun and excitement that is configuring a new system? In my previous 1440p DIY Retro Handheld - Part 1 (Hardware) post, I recommended getting a Snapdragon 855 or higher device with a 1440p screen for optimal integer scaled retro gaming. This guide will walk you through configuring each emulator for maximum visual quality and minimum input latency. Strap in…this is gonna be a long one.

Assumptions

I’d like to keep this guide as generic as possible while still maintaining consistent results across devices and software versions. As such, the following assumptions are going to be made:

  • Device is…
    • dedicated to gaming and emulation (no phone, messaging, notifications, etc.)
    • running a Snapdragon 855 or better chipset
    • in factory reset state
    • running Android 10 (preferred) or later

      Some emulators can’t access Micro SD on Android 11 right now, so Android 10 is required for full Micro SD use

    • used in landscape mode in a telescopic USB-C controller, e.g. GameSir X2 w/D-Pad ($70 on Amazon) or Razer Kishi for Android ($80 on Amazon)
  • ROMs are…
    • in formats recognized by the emulator to run them (e.g. most emulators can use zipped/compressed ROM files, but Citra needs the uncompressed .3ds file)
    • validated against public data sources like No-Intro and Redump (otherwise emulators/frontends may not recognize them)
    • separated into folders by system (snes folder for Super Nintendo, gba folder for Game Boy Advance, etc.)

Please note, if you plan to unlock and/or root your device, make sure to do that BEFORE performing this configuration. That process is likely to force a wipe of your device, so you’ll want it all done prior to continuing. You can find steps for unlocking and rooting the LG G8 and V50 phones I recommended in this XDA Developers forum post.

Contents

System Configuration

Initial Setup

  • Run initial device setup
    • Skip SIM prompt
    • Connect to WiFi
    • The phone will say to restart with the SIM, just wait a minute and you will be prompted to skip
    • Skip all security for now, can be set up later if desired
    • Agree to LG’s required policies only (EULA and Privacy Policy)

LG Phones: If prompted to set up from old device, hit Set Up, then Cancel the Terms of Use for LG apps page. This will get rid of the persistent notification.

Enable Developer Mode

  • Enable developer mode
    • Open Settings
    • Go to System > About phone > Software info
    • Tap the build number 7 times to activate developer mode
    • Go to System > Developer options
    • Check USB debugging

Screen Configuration

Locate the resolution option for your device (LG devices it’s Settings > Display > Screen resolution) and ensure it’s set to QHD/1440p mode. A few other things you may want to do here are adjust your color options (Natural, Vivid, etc.) and turn on dark/night mode for the system for some battery savings.

Home App

For ease of use, you’re going to want a home screen that support landscape mode. If your stock home app does, great! If not, a few options I like are ATV Launcher and Microsoft Launcher.

Debloat

This section requires access to a Windows computer.

In order to get the best performance, we want as little installed and running in the background as possible. This step is completely optional, but highly recommended to reclaim some system RAM, especially if you plan to use Egg NS with the GameSir X2 controller.

An easy way I’ve found to clear out the bloat is with a utility called ADB AppControl. I have the paid version, and it’s worked great on the LG G8, LG V50 and my main phone the Samsung Galaxy S21 Ultra. Please review the documentation before removing any applications from your device.

I used the “Check and Debloat” option using the “Maximal” level (anything above “Basic” only available in paid version). This is the list of stock apps I kept, though your list may be vary depending on your needs:

  • Calculator (com.google.android.calculator) - Handy utility
  • Chrome (com.android.chrome) - The handiest utility
  • Google Drive (com.google.android.apps.docs) - Will be used for cloud storage of game saves
  • Google Photos (com.google.android.apps.photos) - Used for cloud backup of screenshots (taken with GameSir button or phone button shortcut)

These are LG-specific, but you can optionally leave the following installed/enabled:

  • FM Radio (com.lge.fmradio) - Nice to have when using it standalone with physical headphones
  • FOTA Update (com.lge.lgfota.permission) - Firmware update service
  • Game Launcher (com.lge.gamelauncher) - Allows for setting options while in game, like blocking notifications
  • Gaming, a.k.a. Game Tuner (com.lge.gametuner) - Allows adjustment of graphics settings on a per-game basis via Setting > Extensions > Gaming
  • HD Audio Recorder (com.lge.hifirecorder) - Convenient if you want to capture some quick notes

After deselecting the apps to keep, use the dropdown in the lower-right and select Uninstall. The button will change to red with the “Uninstall” text. Click the button and you will be warned about removing system applications. Click Yes to continue. You will then be prompted if you want to back up the APK files. I suggest doing so by clicking Yes.

The backup will run first, then the actual uninstall process will execute. Once complete, you will be prompted with the results. I highly suggest a restart after this to make sure everything is still functional. Once that is finished, you may take another pass at disabling other system applications, but be warned you may make critical system software unusable this way. If that happens, just restore the application(s) from the “Deleted” filter in the “Applications” tab. If the error persists, restart the device to ensure any required backgrounds services get started.


  • Load up ADB AppControl
  • Use the Debloat option, select Maximum
  • Review the list and uncheck anything you want to keep
  • Select Uninstall from the dropdown, then click the Uninstall button
  • Create backups of the applications being uninstalled when prompted

Emulator Configuration

While RetroArch can take care of most of the systems we’re targeting, there are some that will require other emulators for the best experience on Android. I highly suggest purchasing the best-in-class emulators for the more complex systems to emulate. It’s about $25 for all of them, and a great way to support the creators and maintainers, and emulation community as a whole. Here’s a list of what’s what in Android emulation:

Emulator Systems Price (USD) Download Link
Citra Nintendo 3DS $4.99 Play Store
Dolphin Nintendo GameCube & Wii Free Play Store
APK
Drastic Nintendo DS $4.99 Play Store
DuckStation Sony PlayStation Free Play Store
M64Plus FZ Pro Nintendo 64 $3.99 Play Store
PPSSPP Sony PlayStation Portable & PSP Minis Free Play Store
APK
PPSSPP Gold The “supporters” edition, no additional emulation features $4.99 Play Store
Redream Sega Dreamcast, Atomiswave & Naomi arcade $5.99 Play Store
RetroArch Everything else, some examples:
  • Arcade (FBNeo, MAME)
  • 8-bit consoles: NES, MasterSystem
  • 16-bit consoles: SNES, Genesis, TurboGrafx-16/PC Engine
  • Handhelds: GB/GBC, GBA, Game Gear, Neo-Geo Pocket Color, WonderSwan
  • Early CD-based consoles: Sega Saturn, 3DO, TurboGrafx CD/PC Engine CD, Amiga CD
Can do stuff like PS1, PSP and Dreamcast, but standalone emulators tend to perform better. Use the 64-bit version if directly downloading the APK.
Free Play Store
APK

Most people will want to stick with the Play Store versions of the emulators, unless you like living on the bleeding edge then by all means, have fun with the beta/development APK versions.

Citra

Step Actions
Add ROMs Select your ROM path on initial app start
Configure Graphics Go to Settings > Graphics
  • Set Internal Resolution to 2x or higher (minimal gain beyond 2x)
  • Uncheck Enable linear filtering
Configure Screen Layout Start a game, then:
  • Swipe down on the screen or tap the back button to bring up the options bar
  • Tap Landscape Screen Layout, then select Side by Side Screens (or set to preference)
NOTE: There is currently no way to bind a button to swap screens, so Single Screen layout is a bit cumbersome to swap using the menu option
Configure Gamepad Go to Settings > Gamepad
  • Tap each button to set
Remove Control Overlay Start a game, then:
  • Swipe down on the screen or tap the back button to bring up the options bar
  • Tap the menu icon on the right side, then uncheck Show Overlay
Enable FPS Counter Start a game, then:
  • Swipe down on the screen or tap the back button to bring up the options bar
  • Tap the menu icon on the right side, then check Show FPS

Dolphin

Step Actions
Add ROMs For each ROMs folder (GameCube, Wii):
  • Tap the plus icon
  • Navigate to your ROMs folder
  • Press the ALLOW ACCESS TO button at the bottom
Configure Graphics Go to Settings > Config > Interface
  • Set Screen Orientation During Emulation to Auto
Go to Settings > Graphics Settings
  • Set Video Backend to OpenGL or Vulkan, depending on which performs better (SD 855 should use OpenGL)
  • Check Compile Shaders Before Starting
Go to Settings > Graphics Settings > Enhancements
  • Uncheck Disable Copy Filter (may fix stutter/lag every few seconds)
  • Internal Resolution is set to 1x by default, set higher if your device or game supports it (NSMB Wii on SD 855 can do 2x)
  • Set Anisotropic Filtering to 16x
  • Check Backend Multithreading (only applies to Vulkan renderer)
Go to Settings > Graphics Settings > Hacks
  • Set Texture Cache Accuracy to High (may help smooth out FPS spikes)
  • Check GPU Texture Decoding (may see performance boost on SD 855)
  • Check Immediately Present XFB (for lower latency)
Start a game, then
  • Press the Android back button to open the menu
  • Tap Overlay Controls
  • Uncheck Rumble option (may prevent stutter)
Configure Gamepad (GameCube) Go to Settings > GameCube Input
  • Tap GameCube Controller 1
  • Select Emulated
  • Tap each button to set (ignore rumble option)
Configure Gamepad (Wii) Go to Settings > Wii Input
  • Tap Wii Remote 1
  • Select Emulated
  • Tap the Extension option
    • Tap the Classic option and configure the buttons, then save
    • Go back into the Extension option and select None
    • The controls should now be set for most games (will need to save overridden Extension type on a per-game basis)
  • Tap each button to set
    • Ignore rumble option
    • The Wii Remote D-Pad inputs are rotated 90° counter-clockwise (does not apply to Classic extension):
      • Physical Left is Wii Remote Up
      • Physical Right is Wii Remote Down
      • Physical Down is Wii Remote Left
      • Physical Up is Wii Remote Right
Remove Control Overlay Start a game, then
  • Press the Android back button to open the menu
  • Tap Overlay Controls > Toggle Controls
  • Tap TOGGLE ALL
Enable FPS Counter Go to Settings > Graphics Settings
  • Check Show FPS

Drastic

Step Actions
Add ROMs From the main menu
  • Select Load New Game (wait for scan to finish or press back to cancel)
  • Navigate to your ROMs folder
  • You will see the games list show up after caching, this will now be the default folder when loading a game
Configure Graphics Go to Change Options > Video
  • Set Frameskip to None
  • Set Fast-Forward maximum Speed to 400% or Unlimited
  • Set Filter to None (or set to taste)
  • Set High-Resolution 3D Rendering to enabled
  • Set Multi-Threaded 3D Rendering to enabled
Go to Change Options > General
  • Set Default Layout to Landscape x:1 (or to preference)
Configure Screen Layout Start a game, then
  • Open the Drastic menu, then select the Menu option
  • Select Edit Screens and Virtual Pad
  • Select the Landscape x:1 layout, the layout editor will open
  • Tap the left screen, then tap Open Tools
    • Tap the 7x button
    • Tap the center (four arrows) button
    • Tap the left align (left arrow) button
  • Tap the right screen (tools should still be open)
    • Tap the 4x button
    • Tap the center button
    • Tap the right align button
  • You may adjust screen alignment manually by dragging each screen by the center (edges will resize)
  • In the layout editor, tap the Menu button, then select Save as global Layout
Repeat this process for the Landscape Aspect layout using 7x scaling, since that is the other layout used when toggling between 1- and 2-screen layouts.
Configure Gamepad Go to Change Options > External Controller
  • Tap Select Key Mapping
  • Tap No Mapping to create a new mapping
  • Tap Map Control, you will be prompted for each button
  • Tap Map Special, then map at least Screen Swap, Open Menu and 1/2 Screen Swap to free buttons for easier emulator control
  • Toggle off the Enable Analog Triggers option
Remove Control Overlay Go to Change Options > External Controller
  • Toggle on the Disable mapped keys in overlay option
Enable FPS Counter Go to Change Options > General
  • Set Show FPS to enabled

DuckStation

May want to set to 5x with no integer scaling.

Step Actions
Add ROMs From the DuckStation interface:
  • Tap the ADD GAME DIRECTORY option
  • Navigate to your ROM directory
  • Tap the ALLOW ACCESS TO button
Configure Graphics Go to Settings > Display:
  • Enable Integer Upscaling option
Go to Settings > Enhancements:
  • Set Resolution Scale to 6x
  • Enable True Color Rendering (24-bit, disables dithering)
  • Set preferred Texture Filtering option here
  • Enable PGXP Geometry Correction, which should also enable PGXP Culling correction and PGXP Texture Correction
Go to Settings > Advanced:
  • Enable Video Sync (V-sync)
  • Enable Sync To Host Refresh Rate
  • Enable Optimal Frame Pacing
  • Enable PGXP Vertex Cache
  • Some games may need PGXP CPU Mode enabled
Configure BIOS Go to the DuckStation menu (3 dots), then:
  • Tap Import BIOS</3li>
  • Navigate to your PlayStation BIOS file
Repeat this process for all BIOS files you wish to import
Configure Gamepad Go to Controller Settings (D-Pad icon) > Port 1 :
  • Set each button individually, or optionally you may attempt to use Perform Automatic Mapping
  • Tap the Disk Icon and give the input profile a name to save
Go to Controller Settings (D-Pad icon) > Hotkeys
  • Set Open Pause Menu, then set any other hotkeys you will use
Remove Control Overlay Go to Controller Settings (D-Pad icon) > Settings
  • The Auto-Hide Touchscreen Controller option is enabled by default
Enable FPS Counter Go to Settings > Display:
  • Enable one or more:
    • Show Emulation Speed
    • Show Display FPS
    • Show Game Frame Rate

M64Plus FZ Pro

Step Actions
Add ROMs From the main screen:
  1. Tap the + icon
  2. Tap START FILE PICKER
  3. Navigate to your N64 ROM directory
  4. Tap ALLOW ACCESS TO button
This may take a while to analyze your ROMs and download cover art.
Configure Graphics From the main screen:
  1. Tap the Menu icon
  2. Go to Settings > Display
  3. Set Rendered resolution to 1920x1440
  4. Set Screen orientation to Auto
Set emulation profile:
  1. Tap the Menu icon
  2. Go to Settings > Profiles > Select Profiles
  3. Tap Emulation profile and select GlideN65-Accurate
Configure Screen Layout N/A
Configure Gamepad From the main screen:
  1. Tap the Menu icon
  2. Go to Settings > Profiles > Select Profiles > Controller 1 Profile
    • If your controller is listed or compatible (e.g. XInput), select it
    • If your controller is not listed or compatible, , tap MANAGE PROFILES, then create a new profile and map your buttons
Remove Control Overlay From the main screen:
  1. Tap the Menu icon
  2. Go to Settings > Profiles > Touchscreen
  3. Create a new profile called None
  4. Save/exit the profile without making any changes
  5. Go to Settings > Profiles > Select Profiles
  6. Set Touchscreen profile and Touchscreen (D-pad) profile to None
Enable FPS Counter From the main screen:
  1. Tap the Menu icon
  2. Go to Settings > Display
  3. Set Framerate to your desired position

PPSSPP

Step Actions
Add ROMs From the Games tab:
  • Navigate to your ROMs directory
  • Go to the bottom of the list and tap Pin
Pinning a folder will put it at the top of the Games > Home view
Configure Graphics Go to Settings > Graphics:
  • Make sure Backend is set to Vulkan
  • Make sure Frame skipping is off
  • Set Rendering resolution to 5x PSP
  • Set Texture filtering to Nearest (or to preference)
Configure Screen Layout Go to Settings > Graphics:
  • Tap Display layout editor
  • Tap Options - Auto Scaling and set it to Manual scaling
  • Tap Center
  • Tap Zoom, set to 5.00x
  • Tap Back to save
Configure Gamepad Go to Settings > Controls:
  • Tap Control mapping to bring up the controls list
  • Tap an X to clear a button, or the + to set a button
  • s
Remove Control Overlay Go to Settings > Controls
  • Uncheck the On-screen touch controls option
Enable FPS Counter Go to Settings > Graphics:
  • Set Show FPS counter to FPS or Both

Redream

Step Actions
Add ROMs Go to Library:
  • Tap Add Directory
  • Use the built-in file explorer to navigate to your ROMs folder, then tap Add [Directory name]
You should see the game list start to populate, and if internet is connected the box art will be downloaded
Configure Graphics Go to Video:
  • Set Game resolution to 1920x1440
  • Set Frame skip to off
  • Set Vertical sync to on
Go to System:
  • Make sure Broadcast is set to ntsc
  • Set Cable to rgb
Configure Gamepad Go to Input:
  • Tap Port A
  • Clear the Main menu binding by tapping the X next to it, then rebind it to the key you want
  • Ensure any other auto-mapped bindings are correct, change if not
Remove Control Overlay Overlay is automatically hidden when a controller is detected
Enable FPS Counter Go to Video:
  • Set Frame rate counter to vblanks per second

RetroArch

RetroArch is a multiplatform frontend, and the interface is not optimized for Android like all the others. As such, I can’t really condense the configuration into a simple table like the others, so we’ll go into a little more detail to make sure everything is set up properly.

Change Menu Driver

The default menu driver on Android is terrible in my opinion, so we’re going to change that. Perform the following on first boot of RetroArch:

  1. Launch RetroArch, let the initial APK extraction complete
  2. Tap the Gear icon, then select Drivers
  3. Scroll down to Menu and change it to ozone (Switch-like) or xmb (PS3-like)
  4. Tap the Home icon, then select Configuration File
  5. Select Save Current Configuration
  6. Tap the Home icon, then select Quit RetroArch
  7. Launch RetroArch again, the interface will now be a little easier to navigate with your controllers

Download Cores

RetroArch is a modular system, and uses modules called cores to perform the actual emulation. If you downloaded the Play Store version, you’re probably set will all the cores you need. If using the APK version, you’ll want to download the necessary cores for the systems you’re emulating.

  1. Go to Main Menu > Online Updater
  2. Select Core Downloader
  3. Download the cores you’ll need for the systems you are running. These are the cores I recommend:
    • Arcade (FinalBurn Neo)
    • Arcade (MAME 2003-Plus)
    • Atari - 2600 (Stella)
    • Atari - Lynx (Beetle Lynx)
    • Bandai - WonderSwan/Color (Beetle Cygne)
    • MSX/SVI/ColecoVision/SG-1000 (blueMSX)
    • NEC - PC Engine / SuperGrafx / CD (Beetle PCE)
    • Nintendo - Game Boy / Color (SameBoy)
    • Nintendo - Game Boy Advance (mGBA)
    • Nintendo - NES / Famicom (FCEUmm)
    • Nintendo - SNES / SFC (Snes9x - Current)
    • Sega - MS/GG (SMS Plus GX)
    • Sega - MS/GG/MD/CD (Genesis Plus GX)
    • Sega - MS/MD/CD/32X (PicoDrive)
    • Sega - Saturn (YabaSanshiro)
    • SNK - Neo Geo CD (NeoCD)
    • SNK - Neo Geo Pocket / Color (Beetle NeoPop)
    • The 3DO Company - 3DO (Opera)

Online Updates

RetroArch doesn’t come with everything in the base package, so you’ll want to run some options from Online Updater to acquire any missing resources. The databases are required if you’re going to scan a ROM directory to generate a playlist, otherwise RetroArch will not be able to recognize those games or systems.

  1. Go to Main Menu > Online Updater
  2. Run these updates (required):
    • Update Core Info Files
    • Update Assets
    • Update Controller Profiles
    • Update Databases
  3. Optionally run these if you use them:
    • Update Cheats
    • Update Slang Shaders

You may periodically want to Update Installed Cores to get performance enhancements and bug fixes for your emulated systems.

Importing ROMs

Step Actions
Add ROMs For each ROM folder:
  • Go to Import Content > Scan Directory
  • Use the built-in file explorer to navigate to your ROMs folder
  • Select the <Scan This Directory> option
Configure Graphics
  • Go to Settings > Video
    • Go to Output
      • Change the Video driver to Vulkan
    • Go to Scaling
      • Turn on the Integer Scale option
      • Set the Aspect Ratio to either 1:1 PAR (square pixels) or Core provided
    • Make sure Threaded Video and Bilinear Filtering to OFF
Configure Screen Layout N/A
Configure Gamepad
  • Go to Settings > Input > Port 1 Controls and set your buttons
Remove Control Overlay
  • Go to Settings > On-Screen Display > On-Screen Display
    • Set Display Overlay to OFF
Enable FPS Counter
  • Go to Settings > On-Screen Display > On-Screen Notifications > Notification Visibility
    • Set Display Framerate to ON

Summary

If set up correctly, your 1440p retro handheld should be set up with optimal image scaling settings. Of course you’re free to change anything here to taste. This is just a good starting point for getting a high quality experience from your Android system. Good luck and have fun gaming!