This is a living document that describes what I learned about setting up and running Knulli on the Anbernic RG35XX-H and Anbernic RG40XX-H.
This file will most likely contain errors and vague information.
You might not like how I describe things. I am sorry.
Also, I can't be held responsible if you break stuff by following this.
Nor will I share ROMS, BIOS, or any other files with you. Ask Google instead.
If you find this information helpful, please consider giving it a ⭐️ at GitHub.
And maybe consider buying me a ☕️.
Look at the CHANGELOG for recent changes to this document.
Note: This guide is standing on the shoulders of giants. Many of the tips here come from beanioz on Reddit and others on Reddit.
- Knulli on Anbernic RG-XX Devices
- Table of Contents
- Introduction
- Some Basics
- Setting Up The Device
- Additional Settings & Tipps
- Workflow for Adding Content
- Setup and Optimizing Emulators
- Setting up and Running Ports
- Configuring Ports & Portmaster
- Tools
- Setting up SyncThing
- Some Terms / What is...
- Knulli is a Linux-based custom firmware (CFW) for retro gaming for multiple devices/platforms.
- It is a fork of the Batocera firmware.
- There is now a port for the Anbernic.
- It provides a better experience than the stock firmware.
- The SD card has two partitions:
rootandshare. We will only concern ourselves with thesharepartition. - On
sharepartitiion are the folders for adding content to the device. - The
share/bios/folder is the place where to add BIOS files (see below). - The
share/roms/folder contains folders for the different emulators for your games. Most of the folder names are self-explanatory.
- Some Emulators need BIOS files to run.
- Check for missing/needed BIOS files via:
Main Menu > Game Settings > Missing Bios Check. - Or select
Allto see all possibly needed ROM files. - (Or see all needed ROMS here.)
- Find them online...
- ...and copy them into your SD card's
bios/folder. - To check if they are correct:
Main Menu > Game Settings > Missing Bios Check
- Find them online...
- Copy your files in the different
share/roms/folders. - Put your game's files in the correct emulator folders.
- Check the
_ìnfo.txtfiles in eachroms/subfolder for information on file format and folder structure to set things up. - I've included a list of specific game port folders below.
| Button | Function |
|---|---|
POWER |
Long press to turn on. When turned on, click for standby. |
START |
Menu |
F + VOLUME |
Change brightness |
B |
OK / Select |
A |
Cancel / Back |
F + POWER |
Quick Shutdown (not saving metadata) |
R3 / L3 |
Next / Previous Song (Frontend Music) |
-
A+Bbutton assignment can be switched:
Main Menu > System Settings > Frontend Developer Options > Switch Confirm & Cancel Buttons in EmulationStation. I recommend doing so. -
Shutdown the device:
Main Menu > Quit > Shutdown System > Yesor pressF + POWER.
| Button | Function |
|---|---|
START |
Quick Access |
L1 / L2 |
Previous emulator |
R1 / R2 |
Next emulator |
Y |
Quick Search |
B |
Side Menu |
| Button | Function |
|---|---|
SELECT |
View Options |
L1 / R1 |
Page list up / down |
L2 / R2 |
Previous / next emulator |
X (long press) |
Add / remove to Favorites |
A (long press) |
Edit meta data / Edit keyboard config |
- In games
AandBare often switched.
| Button | Function |
|---|---|
F + START |
Exit Game |
F + RIGHT |
Fast Forward |
F + L1 |
Take Screenshot |
F + UP / DOWN |
Select Quick Save Slot |
F + Y |
Quick Save Game |
F + X |
Quick Load Game |
F + A |
Reset Game |
F + R2 / L2 |
Select Shader |
F + B |
Emulator Menu |
Note: To see the screenshots you took in the menu, run Main Menu > Games Settings > Update Game List. Then, you will have a "Screenshots" section in your main menu.
- In most emulators, pressing
F + YorF + Xwill save or load a game's state. - There is a list of slots where you can save games, too. You select the slot via
F + UP / DOWN. - But you can also load a saved state when you are in the game list.
- In the game list, press
Xto show the saved state list. - Press
Ato load a state,Yto delete one, andBto cancel.
Follow these steps to set up Knulli on your device. I arranged the steps in a helpful order, so it is best to follow them along.
- I recommend using two SD cards – one for Knulli and one for the ROMs and your Knulli settings. This has the advantage of updating Knulli without messing up your settings or games.
- The left slot will contain the Knulli card, and the right will contain the game ROMs.
- Use at least a 32GB card for Knulli.
- Download Knulli for your device from the releases page.
- Flash the firmware to a (new!) SD card (e.g., use BalenaEtcher).
- Put the SD card in the device (left slot).
- Turn on the device (
Long-press on Power Button). - The device will now update the file structure on the SD card.
-
You need to format your second SD card (for the game ROMS) with the Linux ext4 file format to be able to run certain ports.
-
Put the SD card in the right slot.
-
Select the new card:
System Settings > Storage Device. -
Consider setting up WiFi (see below).
-
Reboot the device (
Menu > Quit > Restart System).
Main Menu > Network Settings.Main Menu > System Settings > Frontend Developer Options > Enable web API access.- Now, you can find your device in your network.
- IP Address:
Main Menu > Network Settings. - Note: You can also define multiple known WiFis.
- Now, you cam download themes and enable scraping and other tools that need an Internet connection.
- In addition, you can now find your device on your network.
- You can mount the device to copy data, connect via SSH or the Emulation Station Web Service:
http://[ip address]:1234. - Username and password are:
root/linux.
Note: The device has problems connecting to 5GHz and guest networks. Consider disabling the 5GHz Wifi.
- A recommended theme is
Art-Book-Next-ES:
Main Menu > Updates & Downloads > Themes > Art-Book-Next-ES - Enable your theme:
Main Menu > User Interface Settings > Theme Set
- A scraper can download game information to your device.
- You do need an active internet connection for this.
- Register an account at screenscraper.fr.
- Enter your credentials at
Main Menu > Scraper.
- Get a login at retroachievements.org.
- Enter your credentials:
Main Menu > Game Settings > RetroArchievements Settings.
Main Menu > Games Settings > Netplay Settings > Index New Games
Menu > User Interface Settings > On-Screen Help: OFF
Main Menu > System Settings > Overclock- Pick what works for you.
-
You can disable the in-menu music in
Main Menu > Sound Settings > Frontend Music. -
Consider disabling
Enable Navigation SoundsandEnable Video Preview Audiothere, too. -
If you get no sound after you connect the console via HDMI, you need to reset the audio output:
- Go to:
Main Menu > System Settings > Audio Output. - Select
AudioCodecand confirm. And then go back toAuto.
- Go to:
- To enable/disable the LED lights:
System Settings > Services > analog_stick_LED - Under
Toolsyou can configure the LEDs.
- Open and edit the file
share/system/batocera.conf. - Search for:
# ------------ B - Network ------------ #- There you can define multiple wifis, like this:
## Wi-Fi SSID (string)
wifi.ssid=[some id]
## Wi-Fi KEY (string)
## Escape your special chars (# ; $) with a backslash. eg. $ becomes \$
wifi.key=[the password]
## Secondary Wi-Fi (not configurable via the user interface)
wifi2.ssid=[some other wifi]
wifi2.key=[the password]- These WifFs are then automatically recognized and connected to.
To connect a bluetooth device, follow these steps:
- Go to
Main Menu > Controller & Bluetooth settings > Pain Bluetooth Pads Automatically. - Alternatively, run a manual detection and select your device.
- Enable pairing mode on your device.
- You will get a notification when the device is paired to the console.
- Follow the steps above.
- Turn on Bluetooth mode on your controller (e.g.,
Y + STARTon an 8bitdo Controller). - Enable pairing mode on your controller.
- Run the
Controller Mapping. - Adjust the
Player Assignmentsto use the controller, e.g.:P1 > ControllerP2 > #0 Deeplay-Keys
- Connect the audio device as described above.
- Select the Bluetooth audio device as audio output:
Main Menu > System Settings > Hardware > Audio Output > [Device]
You can also pair keyboards and mice as described above.
- In general, you can define global key settings for a system go to (here Amstrad):
Game Setting > Per System Advanced Configuration > Amstrad CPC > Edit PadToKey Profile - But you can define keys per game as well.
- To see the current configuration,
SELECT > View Pad to Keyboard Information. - To edit it:
A (long press) > Edit PadToKey Profile. - This will create a configuration file in your
roms/folder, either a.p2k.cfgor a.keysfile.
- In general, it's easier to use the UI to define keys, as described below,
.p2k.cfgfiles have a config style format.
0:select = j ;; Joystick.keysfiles are in JSON files.
{
"actions_player1": [
{
"trigger": "select",
"type": "key",
"target": "KEY_J",
"description": "Joystick"
}
]
}- The
.keysfile precedes the.k2p.cfgone. - You can also manually create a key config file in the folder. Use the name of the ROM/port and append the suffix.
- You can then add descriptions to the key definitions. For both examples above, add "Joystick" as a description.
- In the
.k2p.cfgfiles, the buttons areEAST,WEST. In the.keys, they are calledA,Y. - In the
.keyfiles,L1andR1are calledpage upandpage down. - The comments you enter in the key definition files will be displayed in the Key Definition UI.
- Copy files on the SD card (either from your computer or via WiFi).
- Remove Apple's dotfiles if needed (see below).
- Eject all mounted partitions.
- Put the card in RG35XX-H.
- Power on the device.
- Run the Scraper
Main Menu > Scraper > Scrape Now - Update the Game List
Main Menu > Games Settings > Update Game List - Play!!
Note: Alternatively, you can connect to your device via your network and mount the share/ folder if it is connected via WiFi. Copy your filed, update the game list, scrape, and update again.
- On a Mac, you can run
dot_clean /Volumes/SHARE. - I also suggest to create a dotclean script in your
portsfolder.
This section explains the "non-trivial" emulators (, how DOS or Daphne are being set up).
- Cheats will not only allow you to "cheat" in the game (duh).
- There are also patches that allow you to increase the game's performance (fixed FPS cheats).
- Download the PPSSPP cheats pack
Menu > Updates & Downloads > Content Downloader > Playstation Portable > Cheats for PPSSPP emulator - Enable Cheats per default
Game Settings > Per System Configuration > PlayStation Portable > Game Cheats: ON
TBD
-
The RGXX devices can be a little overwhelmed by high-end Playstation and PSP games. Here are settings that will get the games running more smoothly.
-
Use the
PPSSPPPemulator, as it offers all performance options and allows you to enable cheats. -
Press
Fto open the internal settings -
Quick Menu > Core Options > Hacks(Skip Buffer Effects = ON)Skip GPU Readback = ONLazy Texture Caching = ONSpline Bezier Quality = LOWLower resolution for effects: Balanced(may cause bugs) ORSafe(less likely to cause bugs)
-
Quick Menu > Core Options > VideoRendering Resolution = 1xFrameskip = 1Frameskip Type = Number of FramesAuto Frameskip = ONHardware Transform = ON(Software Skinning = ON)Texture Upscale Type = xBRZTexture Deposterize = ONAnisometric Filtering OFFTexture Filtering Auto
-
Skip Buffer Effectscould result in the game is not being rendered.
- The emulator used is Caprice32.
- Fire and movement will automatically recognized as joystick input.
- Therefore, don't map keyboard navigation to the joysticks or the D-PAD keys.
- Bind the virtual keyboard (
F9for Caprice32) tothe right analog stick clickfor all of Amstrad, in case you need other keys.
Game Setting > Per System Advanced Configuration > Amstrad CPC > Edit PadToKey Profile > Right Stick Press = F9 - For a game only assign the keys to select and start it (e.g., joystick or single-player mode).
When a game is selected:A (long press) > Create/Edit PadToKey Profile - Note: Amstrad's return key does not equal the
Enterkey. I have not found a way to map this to it.
| Button | Function |
|---|---|
R2 |
Toggle Display View Mode |
L2 + R2 |
Toggle Single Double View Msode |
- You need to change the default emulator to make games run smoothly.
- Go to
Game Settings > Per System Advanced Configuration > Nintendo 64.- Set
Emulator: Mupen64Plus:RICE. - Set
Power Mode: High Performance. - Set
Game Aspect Ration: 4:3.
- Set
- I have not yet found a way to access the hotkey menu or to Quick Load or Quick Save.
| Button | Function |
|---|---|
F + START |
Exit Game |
F + RIGHT |
Fast Forward |
F + A |
Reset Game |
F + L1 |
Take Screenshot |
- To switch the
AandBbuttons, edit thesystem\configs\mupen64\input.xmlfile:
<input name="b" value="C Button R" />
<input name="a" value="A Button" />- There are different DOS emulators that you can choose. Per default,
DOSBox Pureis used. - Copy a game folder to
roms/dos/. - Add
.DOSto the end of the folder name. - If there is a
dosbox.conffile in the game folder, its settings will be applied. - If there is a
dosbox.batfile in the game folder, it will be executed. - If you start the game without a
dosbox.batfile, you will get the start menu where you can select a file as the default executable. Use the right joystick and theYkey to select a file. You can also select a timeout, where the first X frames after starting a game are not shown. - After selecting an executable, it will be run, and a file called
AUTOBOOT.DBPwill be created. - A keyboard overlay will be shown if you press
R3. - Press the left and right shoulder keys to toggle between the keyboard layout and other settings. Use the start menu to define the default executable. On the top left of the overlay keyboard, there is an option to map keys manually. However, it is preferable to use the Batocera key mapping.
| Button | Function |
|---|---|
R3 |
Show Keyboard (and Keyboard Mapper button) |
LEFT JOYSTICK |
Mouse |
F + UP /DOWN |
Load / Save |
F + RIGHT |
Fast Forward |
Y |
OK |
You can also adjust the cycle speed in the dosbox.bat file, e.g.:
CONFIG -cycles 5000
Typical values for cycles are:
- 486 (66-100 MHz):
cycles=3000 to 6000 - Pentium (90-133 MHz):
cycles=5000 to 10000 - Pentium II (233-450 MHz): ` cycles=10000 to 20000
You can also disable the EMS in a similar war in the dosbox.bat file, in case a game gives you an error:
CONFIG -set ems false
With Dosbox-Pure some games show the above error, e.g. with PpwerMonger.
Add the LOADFIXcommand to the dosbox.bat to fix.
LOADFIX is an internal command that allocates 64k for the program to run.
| Button | Function |
|---|---|
LEFT |
Insert coin (not sure if this a pre-set) |
A |
OK / Select |
B |
Cancel / Back |
L3 |
Emulator Menu |
F + Y |
Quick save game |
F + X |
Quick load game |
F + A |
Reset game |
F + R2 |
Take screenshot |
F + L2 / F + R2 |
Select Shader |
TBD
This is a list of existing port folders/emulators available on the Knulli CFW by default.
| Port Folder | Game |
|---|---|
cannonball |
Out Run - Sega Arcade |
devilutionx |
Diablo & Diablo Hellfire |
eduke32 |
Duke Nukem 3D |
fallout1-ce |
Fallout 1 |
fallout2-ce |
Fallout 2 |
mrboom |
Bomberman |
ports |
Linux games |
prboom |
Doom 1 & Doom 2 |
quake3 |
Quake 3 |
scummvm |
Scumm Engine for Games like Monkey Island |
sdlpop |
Prince of Persia |
tyrquake |
Quake 1 |
vitaquake2 |
Quake 2 |
xash3d_fwgs |
Half-Life Engine |
- Here is a link to a complete list of available systems of Batocera Linux, which will be larger than for the RG35XX-H, but still might be helpful.
-
In addition to the pre-installed ports there is Portmaster nstalled on Knulli.
-
Portmaster is a program that allows you to install and manage “game ports”—that is, Linux-native versions or open-source re-implementations of classic and modern games.
-
Often, you need to copy the original game files into the installed ports folder.
-
Note: If your ROM SD card is not
ext4formatted, some ports might not run. -
Note: Always start by reading the
_info.txtfile in the emulator's folder.
Here are some popular ports that run on the RGXX device (see how-tos below):
- You bought Stardew Valley on Steam.
- You installed the Stardew Valley port via Portmaster on your handheld.
- To download the game, you need its app ID (here 413150) and the depot ID (= OS, here Linux and 413513), and then select the correct manifest (= version). On the manifest page, filter by compatibility.
- If you want a specific version, compare the manifest date with the version history. If not, use the most recent one (the one on the top).
- The easiest way to download the game is to use DepotDownloader.
- Download the latest version for your OS.
- In the SteamDB manifest list, click the copy button next to "your" release. You will get something like this in your clipboard:
-app 413150 -depot 413153 -manifest 8332166493523218127 -beta compatibility
(8332166493523218127refers to version 1.6.15.) - Use these parameters and include the -user parameter:
DepotDownloader -app 413150 -depot 413153 -manifest 8332166493523218127 -beta compatibility -user - You will have to enter your Steam password to download the files. DepotDownload will download your files in a folder structure like this:
depots/413153/16826373
- Copy the content of the bottom-most directory to your SD card to this folder:
share/roms/ports/stardewvalley/gamedata/ - Done! Now, Stardew Valley should run fine.
(And yes, it takes about 30 seconds for it to start. Don't worry.)
Note: If you want to update your Stardew Valley to a new version, follow all steps and re-install Stardew Valley via Portmaster on your device.
Note: You can also copy savegames from your computer onto your handheld and vice versa.
Note: I recommend scaling the UI and the Zoom level a bit – I use 110% (set it in the Stardew Valley Options).
Works as described here. Install via Portmaster and copy a single file.
- Copy
DIABDAT.MPQfrom the CD or Diablo installation toroms/devilutionx/folder. - To run the Diablo: Hellfire expansion, you will need also to copy
hellfire.mpq,hfmonk.mpq,hfmusic.mpq,hfvoice.mpq.
| Button | Function |
|---|---|
B |
OK / Select, Use Skill |
A |
Cancel / Back, Use Weapon |
X |
Pick up item |
Y |
Use Spell |
Left D-Pad |
Movement |
Right D-Pad |
Mouse |
START (pressed) |
In-Game Menu |
START (pressed) |
Spells |
START + F |
Show items |
L1 |
Use Health Potion |
R1 |
Use Mana Potion |
L2 |
Character |
R2 |
Inventory |
R2 |
Toggle Map |
- You cannot edit the
Advanced System Optionskey definitions. - You can edit the key definitions in the Game:
Settings > Pad mapping. There,AandB, andXandYare reversed. - There is also a Playstation version of Diablo. The controls are nicer, but the graphics are more "blocky." It runs a bit less smoothly.
- Create a folder called
dukeinroms/eduke32/and copyDUKE3D.GRPinto it. - Create file
Duke_Nukem_3D.eduke32inroms/eduke32/. - Add line
FILE = /duke/DUKE3D.GRPto it.
| Button | Function |
|---|---|
B |
OK / Select |
A |
Cancel / Back |
R2 |
Fire |
X |
Kick |
L1 |
Duck |
L2 |
Jump |
R1 |
Permanent ducking |
Left D-Pad |
Movement |
Right D-Pad |
Look |
SELECT |
Map |
START |
Main Menu |
F + X |
Load |
F + Y |
Save |
F + START |
Exit Emulator |
- You can edit the key definitions in the game:
Options > Control Setup > Controller Setup > Button Assignment. In there,AandBandXandYare reversed.
-
Copy the following files from your Fallout game into the
rom/dallout1-cefolder:master.datcritter.datdata/folder
-
Create an empty file called
Fallout.f1ce. -
Initially, only the right joystick works in the game.
-
Therefore, you need to define your keys:
Go to the Fallout entry in the Ports sectionA (long press) > Edit PadToKey Profile -
Suggested key definition:
Button Function D-PAD-UPCursor Up D-PAD-DOWNCursor Down D-PAD-LEFTCursor Left D-PAD-RIGHTCursor Right STARTENTERSELECTESCEASTMouse Left SOUTHMouse Right NORTHSWESTILEFT SHOULDERTABLeft Stick Press Mouse Left Right Stick Press Mouse Left Emulate Mouse Cursor Left Analog Stick
TBD
- Place the
.WADfiles of Doom 1 and/or in theroms/prboom/folder. - Supported wads (non-exhaustive list) are from Doom 1, Doom 2, The Ultimate Doom, The Plutonia Experiment, TNT: Evilution.
| Button | Function |
|---|---|
A |
OK / Select |
B |
Cancel / Back |
X |
Fire |
Left D-PAD |
Movement |
L1 / R1 |
Strave |
L2 / R2 |
Change weapon |
R3 |
Turn around |
START |
Main Menu |
SELECT |
Map |
F + Y |
Quick save game |
F + X |
Quick load game |
F + A |
Reset game |
F + B |
Emulator menu (in here B is OK) |
F + R2 |
Take screenshot |
F + L2 / F + R2 |
Select Shader |
- You can edit the key in the game:
F + B,Controls > Port 1 Controls
- ScummVM is an emulator for point-and-click adventures.
- Store games in the
roms/scummvm/folder. - Each game has a unique ID. You can find all games and their ID in the compatibility list, e.g., use
tentaclefor Day of the Tentacle. - Create a folder for each game and copy files into it.
- Inside the folder, create a file called
[id].scummvmfor each game you want to add. To be sure, also write and put the ID into the file. - Note: Indiana Jones and the Fate of Atlantis uses the id
indy4and notatlantis. The supported games list shows the required files for a game.
-
Per default, the games are not scaling to the Anbernic screen. Here are my settings to fix this. Go to
Game Settings > Per System Advanced Settings > ScummVMScale Factor: 3x Scaler Mode: ADVMAME Stretch Mode: Fit Resolution Scale -
For more details, see ScummVM: Understanding the Graphics Settings
- Edit the
share/system/scummvm/scummvm.inifile.kbdmouse_speed=3 subtitles=true gui_scale=150
| Button | Function |
|---|---|
LEFT D-PAD |
Mouse |
START |
Keyboard |
SELECT |
Main Menu |
A |
OK / Select |
X |
Skip |
L2 |
Settings, e.g. Save |
TBD
TBD
-
Install GebRB via Portmaster.
-
Create folders for your games:
ports/gemrb/games/[ID].Game ID Baldurs Gate BG1 Baldurs Gate 2 BG2 Icewind Dale IWD1 Icewind Dale 2 IWD2 Plancescape: Tornment PST -
Note: Portmaster will install a
GemRB.shfile, but it will not work properly. It will always wait (silently) for a keypress and then launch Baldur's Gate. -
Instead, copy these scripts into your ports folder. Use them to run your game,
- Create a folder
Half-Life. - Copy the contents of
Half-Life/valvein there. - Create a folder called
Half-Life.game. Keep in empty. - For Opposing Force copy
Half-Life/gearbox, for Blue Shift theHalf-Life/blueshiftfolder.
| Button | Function |
|---|---|
B |
OK / Select |
A |
Cancel / Back |
- You can view and change the controls in the game:
Configuration > Controls. In there,AandB, andXandYare reversed.
It is pre-installed on the device and can be found in the Port section.
| Button | Function |
|---|---|
A |
Cancel / Back |
B |
OK / Select |
SELECT |
Toggle selection of files |
START |
Open the folder in the other tab |
LEFT / RIGHT |
Toggle active tab |
X |
File actions, e.g. Delete |
Y |
General actions, e.g. Quit |
L1 / R1 |
Page up / down |
- Link: Batocera > OD Commander
- Let's add a simple script that deletes all Mac dot_files.
- Create a file called
dotclean.shinroms/tools/with the following content:
#!/bin/bash
# remove all ._* files from the system
find /userdata/ -name "._*" -exec rm {} \;
- Next, update the Game List:
Main Menu > Games Settings > Update Game List
If you have a NAS or some permanent running computer, I recommend installing and running Syncthing on your device. This service will automatically sync and back up folders. Follow these steps:
- Enable the syncthing service on your device
System Settings > Servicesand reboot. - Install and run the service it on your NAS
- Open the webfrontend on either service, e.g
http://192.168.178.60:8384/ - Delete the default folder
- Create a backup folder for your device
- Set up credentials TODO
- Add your device and give it a name
- Select the folder and define the folders to be saved.
userdata/saves//userdata/bios//userdata/roms/
-
Batocera Linux is an open-source operating system designed specifically for retro gaming. It transforms any computer or single-board device into a gaming console and includes a variety of pre-configured emulators and tools, making it easy to set up and use.
-
CFW (Custom Firmware) is modified firmware that enhances a device's capabilities and features beyond those the original manufacturer provides. In the context of retro gaming, CFW allows for custom emulation setups and additional functionalities.
-
EmulationStation is a graphical frontend for organizing and launching games on various emulators. It provides a user-friendly interface for retro gaming systems and works with Batocera Linux to offer a streamlined gaming experience.
-
Libretro: A lightweight, modular API that enables the creation of multi-system emulators. It is the backbone for many emulation projects and integrates with EmulationStation, allowing it to run various emulators through a standardized interface.
These components work together to create a cohesive retro gaming system, where Batocera Linux provides the foundation, EmulationStation offers the interface, and Libretro supports the underlying emulation functionality.