First of all, I would like to thank Instructables for these amazing guides:
Homemade Odroid-Go Compatible Game Console
https://www.instructables.com/Homemade-Odroid-go-Compatible-Game-Console
ESP32 VMU Handheld Console – Yes, It Plays Doom
https://www.instructables.com/ESP32-VMU-Handheld-Console-Yes-It-Plays-Doom/
They were incredibly valuable resources for me.
I’d also like to thank ducalex on GitHub for creating such an awesome project like Retro-Go.
ducalex/retro-go: Retro emulation for the ODROID-GO and other ESP32 devices
I would like to thank Kit, my childhood relative and gaming companion from the 80s who has been playing alongside me until today. Those joyful childhood memories with my friends have inspired me to pursue building these kinds of devices as a hobby.
– Noch
Section: Hardware0. Check list
Before getting started, make sure you have all the components ready according to the parts list. In this example, I’ll be using a 1.54" display. For those using a 1.69" display, the wiring is the same—the only difference is the screen size.
Also, make sure to 3D print the front shell and all the buttons beforehand. For the 1.69" version, I didn’t include a hole for the status LED. If you want to use that feature, you’ll need to drill the hole yourself.
1. Prepare a 5×7 cm universal PCB and cut away the section that prevents the display from sitting flush against the board. You can trim just enough to make it fit, or cut it the same way I did—it’s up to you.
Keep the piece you cut off—we’ll be using it later.
2.Use thin double-sided tape on the display, then attach it flush onto the PCB. But don’t press it down firmly just yet.
3. Place it into the 3D-printed front shell, then adjust the display until it fits properly.
Mark the positions where the buttons will be installed, then apply double-sided tape to the back of the buttons to align them properly.
Test the button presses to make sure they feel just right to you.
Secure all the buttons in place before starting the soldering process.
4.Solder all the buttons.
5. Next, use copper wire to connect the common ground. Be sure to check the button terminals carefully, and use a multimeter to confirm which side is common ground and which side is the signal.
6. Try placing the ESP32-S3 module on the board first to check its position. I’ll be placing it as shown in the picture.
At this stage, if the ESP32-S3 blocks access to any button connection points, route those wires to the underside of the board to make future soldering easier. In the photo, I routed the Retro-Go volume button connection to the bottom side.
7. Use double-sided tape to secure the ESP32-S3 onto the board. At this stage, be careful not to let any solder joints touch the copper wires, as this could cause a short circuit.
8. Connect the buttons as follows:
LCD
LCD → S3:
GND → GND
VCC → 3V3
SCL → D13
SDA → D11
RES → RST
DC → D10
CS → D2
BLC → A7
[GND, VCC, SCL, and SDA will be shared with other modules, so make sure to leave shared connection points for them.]SD Card
SD → S3:
3V3 → 3V3
CS → D3
MOSI → D11 (also connect to LCD SDA)
CLK → D13 (also connect to LCD SCL)
MISO → D12
GND → GNDSound
LRC → A5
BCLK → A3
DIN → A4
VCC → 3V3
GND → GNDButtons
UP → D6
DOWN → A1
LEFT → A2
RIGHT → A6
A → D4
B → D5
START → D7
SELECT → D8
MENU → D9
[Vol connect diagram will show in next section]Vol button
3V3 → R10K → B0 → Switch → GNDI connected a 10K resistor between 3V3 and B0 like this, then routed it to the switch.
Battery indicator
BAT+ ----[100k]----+---- GPIO1
| |
[100k] |
| === 0.1uF
GND |
GNDFor the battery indicator module, I used the leftover PCB piece I cut earlier and wired it like this: connect A0 to one leg of the capacitor that is tied to the 100K resistor. Then connect Batt+ to the other side of the 100K resistor—the same node that links back to A0. (You can follow along by comparing it with the diagram.)
LED (Optional)
LED - S3
Cathode - GND
Anode - D18. When wiring everything, refer to the GPIO assignments I’ve shown.One small technique I use: at points where a connection branches to another module, since we’re using solderable wire, you can simply solder directly onto the existing wire. This lets you join connections together without having to cut the wire first
9. Complete all the remaining connections.
10.After finishing all the wiring, insert the buttons and test them. Sometimes you may find that certain buttons are slightly misaligned or don’t press properly. If that happens, don’t worry—you can use small patches of double-sided tape to adjust them, as shown in the picture.
In the photo, you can see that my B button shifted slightly to the left, making it less responsive when pressed. To fix this, I used small patches of double-sided tape, angled toward the button’s center to correct the alignment.
You can also use double-sided tape patches on the directional buttons to make the presses feel softer and more responsive.
Since the rest of the build is quite similar to the RP2350 Gameboy, if anything is unclear, you can refer back to that project for guidance.
RP2350 Gameboy mini - Hackster.io
Section: Software1. Select the Retro-Go firmware version that matches the display you’re using.
or download from github
* Wonderswan and NeogeoPocket emulator is on early state but it playable.
put roms into
\roms\ws and \roms\ngp
about these two emulator. I port from this one:
2. Load the ESP Flasher tool.
Releases · Jason2866/ESP_Flasher
3. Run the program, and you should see a screen similar to this.
4. Connect the ESP32-S3 Nano to your PC, then click Reload once. After that, select the ESP32-S3 port—in my case, it shows up as COM5.
5. Click Browse to Select Firmware
When selecting the firmware file, note that its extension is
.img
. You may need to change the file filter at the bottom-right corner to
All Files (*)
so it becomes visible.
6. In the
Actions
section, click
Flash ESP
, then wait until the process is complete.
7. For the SD card contents, you can use the files provided in the guide from https://www.instructables.com/ESP32-VMU-Handheld-Console-Yes-It-Plays-Doom/
Direct link: https://github.com/DynaMight1124/retro-go/releases/download/VMU/VMU-S3.SD.Files.zip
I used that file as well.
8. Upload game and Play :)
For showcase and more information, I review over here (in Thai language) If you’d like to hear the English audio, just switch the track accordingly.
About FW:
For 1.69" (Original Retro-Go) and For 1.54" (Original Retro-Go)
these two fw are original build use Retro-go 1.4.6 as base.
For 1.69" and 1.54" (Enchant Retro-Go)
Like above but add Netplay for gb and gbc with more game support (except Mario Tennis) now we can trade aPokemon and battle with friends!. Snes can play with better speed. NES can use Game Genie and support Famicom Disk System. Megadrive can map key on each game. Support Neogeo Pocket Color with nice speed. Wonder Swan support but fps is not good (just playable in some game).Nano-S3+ preview:
V 1.0 update:
- FCEUmm: Tune up for more FPS (nearly close to nofrendo FPS now.) Add core switch can choose between Nofrendo or FCEUmm. add palette choose, add cheat with save .cht for future use
- Famicom Disk System: support with full speed. Menu+Down = disk eject, Menu + select = switch side A<->B, Menu+Up = disk insert.
- GB/GBC: add Netplay (Now, we can trade pokemon)
- Neogeo Pocket Color: tune FPS up nearly close to 60 FPS
- Megadrive: can map key depend on which game you play.
- Super Famicom: with little overclock, now we can reach 60 fps.
- Turbo turn on/off in A/B with Menu+A/B: Fceumm, Neogeo Pocket, Megadrive can use this features.












Comments