Retro emulation for the ODROID-GO and other ESP32 devices
Retro-Go is a firmware to play retro games on ESP32-based devices (officially supported are ODROID-GO and MRGC-G32). The project consists of a launcher and half a dozen applications that have been heavily optimized to reduce their cpu, memory, and flash needs without reducing compatibility!
retro-go_1.x_odroid-go.fw
from the release page and copy it to /odroid/firmware
on your sdcard.retro-go_1.x_mrgc-g32.fw
from the release page and copy it to /espgbc/firmware
on your sdcard.This method is intended to be used when .fw support isn't available (when porting to a new device) or undesirable (devices with smaller flash).
esptool.py write_flash --flash_size detect 0x0 retro-go_*.img
Note: Your particular device may require extra steps (like holding a button during power up), different esptool flags, or modifying base.sdkconfig.
Game covers should be placed in the romart
folder at the base of your sd card. You can obtain a pre-made pack here. Retro-Go is also compatible with the older Go-Play romart pack.
You can add missing cover art by creating a PNG image (160x168, 8bit) named according to the following scheme:
/romart/nes/A/ABCDE123.png
where nes
is the same as the rom folder, and ABCDE123
is the CRC32 of the game
(press A -> Properties in the launcher to find it).
Some emulators support loading a BIOS. The files should be placed as follows:
/retro-go/bios/gb_bios.bin
/retro-go/bios/gbc_bios.bin
/retro-go/bios/fds_bios.bin
/retro-go/bios/msx/
put: MSX.ROM
MSX2.ROM
MSX2EXT.ROM
MSX2P.ROM
MSX2PEXT.ROM
FMPAC.ROM
DISK.ROM
MSXDOS2.ROM
PAINTER.ROM
KANJI.ROM
The roms must be packed with LCD-Game-Shrinker and a tutorial can be found here.
To use wifi you will need to create a /retro-go/config/wifi.json
config file. Its content should look like this:
{
"ssid": "my-network",
"password": "my-password"
}
Multiple networks can be defined using the following format (then selectable in the Options menu):
{
"ssid0": "my-network",
"password0": "my-password",
"ssid1": "my-network",
"password1": "my-password",
"ssid2": "my-network",
"password2": "my-password"
}
Time synchronization happens in the launcher immediately after a successful connection to the network.
This is done via NTP by contacting pool.ntp.org
and cannot be disabled at this time.
Timezone can be configured in the launcher's options menu.
You can find the IP of your device in the about menu of retro-go. Then on your PC navigate to http://192.168.x.x/ to access the file manager.
Retro-Go supports the external DAC mod for the ODROID-GO
which allows high quality audio through headphones. You can switch to it in the menu Audio Out: Ext DAC
.
GO PIN | PCM5102A PIN |
---|---|
1 | GND |
2 | - |
3 | LCK |
4 | DIN |
5 | BCK |
6 | VIN |
7 | - |
8 | - |
9 | - |
10 | - |
Retro-Go typically detects and resolves application crashes and freezes automatically. However, if you do
get stuck in a boot loop, you can hold DOWN
while powering up the device to return to the launcher.
The volume isn't correctly attenuated on the GO, resulting in upper volume levels that are too loud and
lower levels that are distorted due to DAC resolution. A quick way to improve the audio is to cut one
of the speaker wire and add a 33 Ohm (or thereabout)
resistor in series. Soldering is better but not
required, twisting the wires tightly will work just fine.
A more involved solution can be seen here.
Alternatively you can use the headphones DAC mod mentioned earlier in this document.
In Retro-Go, save states will provide you with the best and most reliable save experience. That being said, please read on if you need or want SRAM saves. The SRAM format is compatible with VisualBoyAdvance so it may be used to import or export saves.
You can configure automatic SRAM saving in the options menu. A longer delay will reduce stuttering at the cost of losing data when powering down too quickly. Also note that when resuming a game, Retro-Go will give priority to a save state if present.
Instructions moved to THEMING.md.
Instructions moved to BUILDING.md.
Everything in this project is licensed under the GPLv2 license with the exception of the following components: