MCPcopy Index your code
hub / github.com/ducalex/retro-go

github.com/ducalex/retro-go @1.46

Chat with this repo
repository ↗ · DeepWiki ↗ · release 1.46 ↗ · + Follow
7,142 symbols 18,232 edges 611 files 1,245 documented · 17%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Table of contents

Description

Retro-Go is a firmware to play retro games on ESP32-based devices (officially supported are ODROID-GO and MRGC-G32, check this list for other devices). 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!

Supported systems:

  • Nintendo: NES, SNES (slow), Gameboy, Gameboy Color, Game & Watch
  • Sega: SG-1000, Master System, Mega Drive / Genesis, Game Gear
  • Coleco: Colecovision
  • NEC: PC Engine
  • Atari: Lynx
  • Others: DOOM (including mods!)

Retro-Go features:

  • In-game menu
  • Favorites and recently played
  • GB color palettes, RTC adjust and save
  • NES color palettes, PAL roms, NSF support
  • More emulators and applications
  • Scaling and filtering options
  • Better performance and compatibility
  • Turbo Speed/Fast forward
  • Customizable launcher
  • Cover art and save state previews
  • Multiple save slots per game
  • Wifi file manager
  • And more!

Screenshots

Preview

Installation

ODROID-GO

  1. Download retro-go_1.x_odroid-go.fw from the release page and copy it to /odroid/firmware on your sdcard.
  2. Power up the device while holding down B.
  3. Select retro-go in the files list and flash it.

MyRetroGameCase G32 (GBC)

  1. Download retro-go_1.x_mrgc-g32.fw from the release page and copy it to /espgbc/firmware on your sdcard.
  2. Power up the device while holding down MENU (the volume knob).
  3. Select retro-go in the files list and flash it.

Other devices

  1. Download the .img for your device from the release page.
  2. Connect your device to a computer with a USB cable.
  3. Flash the image with esptool:
    • Command line: Run esptool.py write_flash --flash_size detect 0x0 retro-go_*.img
    • Web version: Connect your device, click Erase Flash, then select your .img file and set address to 0x0, finally click Program)

Your particular device may require extra steps (like holding a button during power up) or different esptool flags or a special cable. If the above steps fail, you might need to ask the manufacturer for instructions on how to flash new firmware!

If your device is not already supported or if a prebuilt version isn't available for it you can check the development section for more information on how to build for your device.

Usage

Game covers / artwork

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). Two naming schemes are supported: - Filename-based: /romart/nes/Super Mario.png (notice the rom extension is not included) - CRC32-based: /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), and A is the first character of the CRC32

Note: CRC32-based, which is what is used in the pre-made pack, is much slower than name-based! This type is useful because filenames vary greatly despite having identical CRCs, but if you generate your own art I suggest you use filename-based format and delete all CRC-based art from your SD Card to improve responsiveness.

BIOS files

Some emulators support loading a BIOS. The files should be placed as follows: - GB: /retro-go/bios/gb_bios.bin - GBC: /retro-go/bios/gbc_bios.bin - FDS: /retro-go/bios/fds_bios.bin - MSX: In folder /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

Game & Watch

The roms must be packed with LCD-Game-Shrinker and a tutorial can be found here.

Wifi

To use wifi you will need to create a /retro-go/config/wifi.json config file. You can define up to 4 different networks, then selectable in the menu. Its content should look like this:

{
  "ssid0": "my-network",
  "password0": "my-password",
  "ssid1": "my-other-network",
  "password1": "my-password",
  "ssid2": "my-third-network",
  "password2": "my-password",
  "ssid3": "my-last-network",
  "password3": "my-password"
}

Time synchronization

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.

File manager

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.

External DAC (headphones)

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.

Pinout

GO PIN PCM5102A PIN
1 GND
2 -
3 LCK
4 DIN
5 BCK
6 VIN
7 -
8 -
9 -
10 -

Issues

Black screen / Boot loops

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.

Sound quality

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.

Game Boy SRAM (aka Save/Battery/Backup RAM)

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.

ZIP files

Most Retro-Go applications now support ZIP files. ZIP archives should contain only one ROM file and nothing else. ZIP support also depends on available memory and larger ROMs may fail to load on some devices unfortunately.

Development

If you wish to build or modify Retro-Go, you can find help in the following documents:

Acknowledgements

License

Everything in this project is licensed under the GPLv2 license with the exception of the following components: - fmsx/components/fmsx (MSX Emulator, custom non-commercial license) - handy-go/components/handy (Lynx emulator, zlib)

Core symbols most depended-on inside this repo

m68ki_write_8
called by 499
gwenesis/components/gwenesis/src/cpus/M68K/m68kcpu.h
GetPC
called by 316
retro-core/components/handy/c65c02.h
lss_read
called by 302
retro-core/components/handy/system.cpp
m68ki_write_16
called by 294
gwenesis/components/gwenesis/src/cpus/M68K/m68kcpu.h
lss_write
called by 294
retro-core/components/handy/system.cpp
mz_zip_set_error
called by 260
components/retro-go/libs/miniz/miniz.c
m68ki_read_8
called by 243
gwenesis/components/gwenesis/src/cpus/M68K/m68kcpu.h
m68ki_write_32
called by 193
gwenesis/components/gwenesis/src/cpus/M68K/m68kcpu.h

Shape

Function 6,815
Class 155
Method 142
Enum 30

Languages

C65%
C++35%
Python1%

Modules by API surface

gwenesis/components/gwenesis/src/cpus/M68K/m68kops.h1,706 symbols
retro-core/components/snes9x/src/cpuops.c482 symbols
components/retro-go/libs/lodepng/lodepng.c249 symbols
retro-core/components/pce-go/h6280_instr.h210 symbols
components/retro-go/libs/miniz/miniz.c191 symbols
retro-core/components/snes9x/src/dsp.c121 symbols
components/retro-go/libs/cJSON/cJSON.c117 symbols
prboom-go/components/prboom/p_enemy.c90 symbols
retro-core/components/snes9x/src/apu_blargg.c83 symbols
prboom-go/components/prboom/m_menu.c82 symbols
gwenesis/components/gwenesis/src/cpus/M68K/m68kcpu.h80 symbols
components/retro-go/rg_system.c74 symbols

For agents

$ claude mcp add retro-go \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact