Handheld PC

This page provides information to run Batocera on your favorite handheld PC. We are talking about x86_64 PC hardware designed for handheld gaming. These are typically on the larger side (similar to a Nintendo Switch) and require active cooling (a fan) to function.

If you were after the weaker and more portable handhelds, click here.

For those who prefer videos, check out Retro Game Corps' in-depth review (including Batocera installation):

Anbernic's first x86_64 handheld. It supports Windows out of the box (hence the name) but because it's x86_64 it also supports the regular x86_64 Batocera image as well.

In the BIOS menu, fast boot must be disabled to be able to automatically boot Batocera. Otherwise, Batocera can only be booted from the BIOS menu itself.

Anbernic has a dedicated website for it with a lot of useful information, check it out at https://win.anbernic.com/

In Batocera v35 and higher, press the Windows button on the right to cycle through backlight brightness levels.

Boot into its BIOS menu by holding down the volume down key while booting. Then, switch to mouse and keyboard mode with the switch on the right and navigate the BIOS menu sideways. Yep.

Press right on the D-pad to go all the way to Boot, then scroll down and make USB: UEFI Partition the first option by pressing South button (B SNES). Now Batocera will be the default OS to boot. Navigate to Save and reboot, the device will boot into Batocera immediately.

It is possible to have the device automatically boot into Batocera by changing the boot order in the BIOS settings. However, if the USB device is ever removed then it will reset back to booting from the internal drive. To work around this, a chainloader (such as GRUB) can be installed onto the internal drive to have it default to Batocera's USB drive anyway.

  • The initial screen rotation is incorrect, this can be fixed by going into SYSTEM SETTINGSSCREEN ROTATION and setting it to “90 DEGREES”

In Batocera v34 and lower, this required the same fix as the Aya Neo below.

  • The Xbox guide button and the Windows key are currently not bindable in ES. It is recommended to set [SELECT] as the hotkey.

Here's a benchmark table (as of v35):

CPU GPU Low-end PSP (Hatsune Miku - Project DIVA) High-end PSP (Midnight Club: L.A. Remix) Low-end Dreamcast (MvC2) High-end Dreamcast (Sega Rally 2) High-end GameCube/Wii (Auto Modellista) Low-end Saturn (Saturn Bomberman) High-end Saturn (Sega Rally Championship) Low-end PS2 (Sonic Riders) High-end PS2 (God of War) Low-end Xbox (Jet Set Radio Future) High-end Xbox (Burnout 3: Takedown)
AMD Athlon Silver 3050e1) AMD Radeon RX Vega 3 Max 3x 3x N/A2) 2x Full-speed 78% (47 FPS) 2x 58% (35 FPS) 1x 50% (30 FPS)

And another take:

  • PSP, N64, Dreamcast, Saturn: 720p full speed
  • Gamecube: 2x for most games, 1x for some (like F-Zero GX)
  • 3DS: 3x Samus Returns, 2x Mario Kart 7 full speed
  • Xbox: Halo at native res full speed
  • Wii U: Wind Waker HD and Super Mario 3D World full speed. Mario Kart 8 very close!
  • PS2: still sucks, about the same as in Windows

AyaNeo x86_64 handhelds are supported on Batocera 40+ with the regular x86_64 image (but not the Pocket S yet, that is ARM-based). AMD-based units are supported, we are waiting on user confirmation for the Intel-based models.

Deactivate fast boot from the BIOS, and check the UEFI parameters. To enter the BIOS settings, you can press the [-] volume button at the same time as the [power] button. In the bios, the buttons mapping is the following:

  • [-] volume button: escape
  • [+] volume button: enter
  • Third trigger buttons, left and right, next to [L1] and [R1]: left and right
  • AyaNeo buttons below the right analog stick: up and down

You can also plug a keyboard through the USB-C port to make it easier to navigate the BIOS menu.

Currently, you can install Batocera on a USB stick or on the internal SSD, but it won't boot from an SD Card

Limitation: as of now, there are a few restrictions on using AyaNeo handhelds:

  • the LED around the right stick of the AyaNeo AirPlus isn't working (there a Github ticket to track progress)
  • Suspend mode doesn't work on the AyaNeo 2S (it works on the AirPlus though)

The Aya Neo handhelds come with different AMD or even Intel CPUs, with various performance levels.

Ayn Lokis are x86_64 handhelds (while Odin are ARM-based). An Ayn Loki is sold with Windows 11, but it also supports the regular x86_64 Batocera image and can be booted on the SDCard port.

In the BIOS menu, fast boot must be disabled to be able to automatically boot Batocera. Otherwise, Batocera can only be booted from the BIOS menu itself.

First of all, you need to upgrade the BIOS with the update available on Ayn's website (make sure you select the upgrade for the Loki Zero). The upgrade itself will take 3 to 5 minutes, make sure to reboot only once you hit the last screen shown in the document that describes the upgrade process.

Once you have upgraded the BIOS, depending on your previous version, you might have a few options to change. To enter the BIOS setting, plus a keyboard through the USB-C port and press [DEL] until you get into the BIOS menu.

Things to check at the BIOS level:

  1. First, burn a Batocera x86_64 image (Batocera 38 or later) and insert it in the SD Card reader of the Loki. You need to have a valid partition on the SD Card to be able to select it in the boot options.
  2. Select the PCI-Express SD-card as the first boot option (it appears only if you have Batocera or a valid OS on your SD Card), and Windows boot manager as the second one. This will keep Windows as a backup option if you remove the SDCard from the device.
  3. Fast boot: disabled. If it's enabled, you will be able to boot Batocera only once you exit the BIOS, but you won't be able to start from a cold boot.
  4. Secure boot: disabled. If enabled, you will be able to boot Windows only, not Batocera or any other Linux distribution.

The Ayn Loki Zero has the same CPU/GPU as the Anbernic Win600 described above. Expect the same level of performance.

This section is under construction. To do:

  • How to transfer roms using SteamOS?
  • What is first boot like?

Batocera is now fully usable with the SteamDeck. Batocera 36 is the first official release for SteamDeck, and has been published on the official Batocera download page. The SteamDeck uses the same image as the regular x86_64 image.

Batocera can be flashed to a micro SD card. Press and hold the [Volume -] and [Power] buttons to access the boot menu, from which the micro SD card can be selected.

It is possible to make Batocera the default OS to boot on the Steam Deck instead of Steam OS. This is assuming Batocera is already installed on the micro SD card.

  1. Turn on the Steam Deck holding the [Volume +] and [Power] buttons. Release them when the Steam Deck beeps.
  2. Use the D-pad to select Setup Utility and press South button (B SNES) to confirm.
  3. Go to the Boot category and select Add Boot Options.
  4. Choose “First”. “First” is the SD card.
  5. Go to the Exit category and select Save and Exit to restart with the changes.

Runs up to 6th gen and easy 7th gen titles at full-speed, however begins to struggle with harder to run 7th gen.

The Aya Neo, Founder Edition or Kickstarter edition (AMD Ryzen 5 4500U based, with a 7“ screen) should be working out of box with Batocera v31 and later versions.

More recent Aya Neo devices are also supported, see the chapter above.

Sometimes there are some issues (v31, v32) using the native resolution of the screen, Batocera will default to using a lower resolution in these situations. This can be worked around by manually switching the output back and forth in the video output settings.

There is also another issue with ES not properly using the proper aspect ratio after rebooting. In order to remedy this, the following script can be added to /userdata/system/custom.sh:

custom.sh
#!/bin/sh
export DISPLAY=:0
 
# rotate the screen
# xrandr -o left
xrandr -o right
# xrandr -o inverted
 
# This is to invert the touch panel for the touchscreen to work as intented !!
# https://askubuntu.com/questions/368317/rotate-touch-input-with-touchscreen-and-or-touchpad
# https://wiki.ubuntu.com/X/InputCoordinateTransformation
# I used the idea from the 1st link and adjusted for the "Right rotate" in the 2nd.
xinput set-prop 9 --type=float "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1

The OneXPlayer (Intel Tiger Lake i5 or i7 11xxG7 CPU, with a 8.4” screen) is supported out-of-the-box with Batocera 32 and later versions. The OneXPlayer 1S (Intel-based) should also be supported, but has yet to be tested.

The AMD-powered OneXPlayers have been reported to be compatible with Batocera 35, at least for OneXPlayer AMD Ryzen7 5800U and Pro 6800U, with an edit of /boot/batocera-boot.conf.

The initial screen rotation is incorrect, this can be fixed by going into SYSTEM SETTINGSSCREEN ROTATION and setting it to “270 DEGREES”.

OneXPlayer Intel i5/i7: by default, the only resolution supported is 1600×2560 (native resolution of the screen panel). Even with a beefy CPU, it's not really necessary to have such a high resolution on the OneXPlayer. You can force a 1080×1920 resolution by editing the /boot/batocera-boot.conf file and add:

es.resolution=1080x1920.60.0

OneXPlayer AMD 5800U/6800U: you need to edit /boot/batocera-boot.conf file and add:

es.resolution=1200x1920.60.0

WARNING Yes, it's 1080×1920 or 1200×1920 (9:16 aspect ratio), as the hardware screen is in portrait mode.

WARNING 2 By default the /boot mount point is read-only, you might need to do a mount /boot -o remount,rw before editing it from your SSH session.

After a reboot, this will force a new resolution called “1080x1920_60.00” in the Video Mode options from the Games Settings menu ([START] button). I'd recommend you to use this resolution, as it will require less CPU/GPU power, which means a better battery life on your device.

If you use the Thunderbold output to play your games on a 4K monitor and want to keep the full 1600×2560 resolution, you still select AUTO or 1600×2560 and have the full experience. In that case, if you want to use bezels, I'd recommend to also set the Stretch bezels (4K and ultrawide) option from the GAME SETTINGS menu.

With Batocera 35 and later, you can use the orange button on the left to cycle through backlight brightness levels. This button is not registered in gamepad mode, but seen as a key from a keyboard.

Also, with Batocera 35 and later, you can use the power button to put the OneXPlayer in suspend mode. To enable this, you need to manually edit the batocera.conf file and add a line system.suspendmode=suspend or system.suspendmode=hybrid. Hybrid modes saves a little more energy than suspend (but takes longer to restore). Full “hibernate” mode doesn't work right now.

  • The “keyboard” and “turbo” buttons won't be usable, they're not attached to the rest of the controller
  • Touchscreen is not supported at the moment. The USB “Surface-like” OneXPlayer keyboard is fully supported though.

This device is supported. Recommended watching: Batocera Nation's GPD Win Max 2021 guide.

The internal screen is not rotated correctly by default. This can be fixed by going into the SYSTEM SETTINGSSCREEN ROTATION and changing the screen rotation to 90 degrees. Further display tweaking can be done via xrandr configuration.

Video output settings are currently bugged in Batocera. If you toggle between modes then you can temporarily fix it for that session. If you'd like to permanently fix the issue, SSH in and run the following commands:

mount -o remount,rw /boot
rm /etc/X11/xinit/xinitrc
cp /boot/boot/xinitrc /etc/X11/xinit/xinitrc
echo "es.resolution=1280x800" >> /boot/batocera-boot.conf
batocera-save-overlay
batocera-es-swissknife --restart

The 8100Y model has a locked BIOS and cannot support booting into other operating systems, like Batocera. The M3 7Y30 is confirmed working.

FIXME (The values may be 1 instead of 3, depending on original rotation.)

Set the screen in landscape mode. Edit the batocera.conf file and add:

display.rotate=3
splash.video.rotation=3

This will both rotate the EmulationStation and emulators screen, but also the splash boot video if you're using one.

Suspending by closing the lid currently does not function, but otherwise is fully operational.

Booting off the SD card port is possible, but will result in a black screen. Booting via the USB port is recommended. More information for booting generic Linux-based OS's from the SD card port on this Reddit post. There are very slim Micro-SD card adapters that sit nearly flush with the device you can buy:

A micro-SD card reader the size of the USB tongue itself.

Performance

5th gen and below run flawlessly. Can run Wii games decently. Struggles with most PS2 games, but can run easy-to-run games at full speed. You can check out Batocera Nation's demonstration video here (the installation instructions earlier in the video are outdated).

FIXME

A small handheld ultrabook equipped with a Intel 11th gen Tiger Lake i7-1160G7 (non-pro has a weaker Intel 10th gen). It has detachable controllers connected via Bluetooth. Should work out of box with Batocera but testing is required. Can use an external GPU, which also needs testing (not likely working).

These devices are currently not supported.

  • The Win 1 is not supported currently. It can boot up, and if connected to an external screen it can work, but the main portable screen shows only black.
  • The Win 3 technically boots perfectly fine, but the screen rotation settings are not properly interpreted, resulting in major screen distortion. This can be worked around by manually setting the screen rotation every boot. Shares the same issues the Win 2 has in regards to buttons/suspending features. There is also a chance of the device having a locked BIOS, meaning installation of any other OS aside Windows is impossible.
  • The XD and XD Plus are Android-powered ARM devices, and currently not supported by Batocera.

The Legion Go seems to be mostly supported on Batocera 38 and later, with a couple of tweaks described in this forum post on the Lenovo website.


1)
Anbernic Win600 running with no overclock, stock RAM speed and stock TDP.
2)
A bug in Batocera causes framerate to only reach 30 FPS.
  • handheld_pc.txt
  • Last modified: 4 weeks ago
  • by lbrpdx