Thingtendo - a Game & Watch Clone Using ESP32 S3

by lonesoulsurfer in Circuits > Microcontrollers

524 Views, 9 Favorites, 0 Comments

Thingtendo - a Game & Watch Clone Using ESP32 S3

Thingtendo - A Nintendo Game & Watch Clone
JZCL8261.JPG
AZUE4594.JPG
CKWU6332.JPG
IFML1747.JPG
ONGY6526.JPG
LDJP3304.JPG
TKCK2685.JPG

When I was a kid I was lucky enough to get for Christmas one year a Nintendo Game & Watch. It was Donkey Kong Jr (DK-JR) and I played that thing until I clocked it!

Fast forward to 2026 and I still have it in my collection of vintage handheld games. However, they are starting to get old and I don’t really want to take the chance of breaking something when playing them, so I decided to build my own.

After a little research I stumbled across GitHub Repo that had the beginnings of what I was looking for.The one thing that it didn’t have through was DK-JR so it meant I’d have to do a deep dive and add it myself.

Whist working on the build, I decided to add a few more of my favourite G & W games to the platform, including; Mario Bros, Balloon fight and … (4 in total). The thing that these games all have in common is the button layout which made it easy to include them.

This build is a little tricker then other ones that I have done. The reason being, I can't provide the ROM's of the Bin files that you need to flash to the ESP32-S3 because they are copyrighted. This will mena that you will need to source your own (internet is your friend here. Check out the Internet Archive...) and create bin files along with the artwork etc. I have provided a file called 'Claude Guide' which you can find in my GitHub Repo. Add this to Claude along with a link to the repo and ask it for help creating the required files. From there it is straight forward.

Supplies

BLFL2279.JPG
MWRZ2100.JPG
BSZI9902.JPG
KNBL1716.JPG
WVBJ7154.JPG
OTZS0284.JPG
FLJP4971.JPG
FQBQ0370.JPG
GGVV3472.JPG

As usual in a project like this, I have provided the list of parts in a PDF which you can download. I find that this is easier to read and use. I have included links to all of the parts which I purchased from Ali Express.

Just download the PDF in this step and order your parts where required


Check out the next step to get your PCB, front & back panels manufactured

Downloads

Getting the Boards Printed

Kicad - GW.png

We all have different levels of knowledge, so when it comes to a build like this I want to make sure that I'm providing enough information so anyone with some basic soldering skills can make it. That includes ensuring there are instructions on how to get your own PCB's printed (which is super easy!)

So with that said, the first thing you will need to do is to get the front panel and PCB printed. I use JLCPCB (not affiliated) to get this done. The front panel is actually just a PCB without any components included! The front panel design is done in a program called Inkscape (available free) and the panel including the drilled holes is done in Fusion 360 (also free!)


STEPS:

  1. The files that you need to build Thingtendo can be found in my GitHub Repo so if you haven't already, download the repo to your desktop.
  2. Send the Gerber files (3) to a PCB manufacturer like JLCPCB (not affiliated!) who will print the 3 panels for you. There are other PCB manufacturers so use the one you want.
  3. when choosing the surface finish pick Lead Free HASL as this will ensure that there is no lead in the panel or PCB.
  4. You can pick whatever colour you want to choose for your front panel and PCB. I chose black.
  5. If you have no idea what any of the above means , then check out the Instructable I made on how to get your broads printed which can be found here.

Adding the Switches & Male Heading Pins to the Front Panel

GNXL5918.JPG
XAVN1195.JPG
MBTZ7889.JPG
HOSD9267.JPG
QKFK3076.JPG
XUTO4472.JPG

The biggest difference between this build and similar ones that I have done is, I have added the directional and control switches to the front panel! this has meant that I have had to add an additional male header to connect these switches to the ESP32-S3

STEPS:

  1. Solder each of the 5 momentary switches into place. These are the through hole ones.
  2. There are also 3 SMD momentary switches for time, A and B. Carefully solder these into place as well. I find the best way to do it is to add solder to each of the solder pads on the board then solder 1 leg of the switch down and then the other pressing down on the switch whist doing so.
  3. You can now add the male header to the front panel. When doing this we don't want to see any solder or pins coming out the top of the front panel so I did the following:
  4. there is a plastic shroud around the pins, push this up until just the top ofthe pins are showing
  5. put it into the boad and run for finger across the top, if you can just feel the pins you can then add solder to each to secure them into place. Solder 1 first and make sure the pin header is sitting straight before soldering the rest into place.
  6. In the next step I slightly trim the tops of the header pins on the TFT screen. You don't need to do this for these pins as they sit lower then the ones n the TFT screen.

Adding the Screen to the Front Panel

XRHK8616.JPG
FYWP0300.JPG
TFGW4402.JPG
JGMG2034.JPG
KDKR5228.JPG
VTXD1190.JPG
MODQ7349.JPG
NJVP1061.JPG
NQIG4476.JPG

The following step ensures that you can remove the front panel easily and without having to de-solder anything. This is important, especially for maintenance, battery changes, troubleshooting etc.

STEPS:

Adding the screen to the panel

  1. On the front panel, there are 4 holes where the TFT screen will be attached. Add a 20mm M2 screw (I like to use hex socket head screws) to each hole and then add a M2 nut to secure the screws into place.
  2. Before adding the screen, trim the tops of the pin header that is soldered to the TFT screen. This will ensure you get a nice low profile when the screen is added to the PCB. I only took off about 2mm from the ends of the pins.
  3. Place the screen on top of the screws and align it to the front panel. The screen should sit flat to the front panel as the nuts you added earlier act like spacers.
  4. Now - you need to add a small M2 spacer (5mm) to each of the screws.
  5. You can now add the low profile female header pins to the male ones on the TFT screen.
  6. Don’t solder the female header pins yet to the PCB, we’ll do that near the end


Adding the ESP32-S3 Zero, Amp & Charging Module to the PCB

FJMR1771.JPG
ITPQ1569.JPG
PXPB1695.JPG
QSNL4708.JPG
ONBD3288.JPG
PZNF4673.JPG
PYOO4362.JPG
SEPB9546.JPG
TQKK2564.JPG

STEPS:

  1. Solder the male header pins to the ESP32-S3.
  2. Place into the PCB and solder the male header pins into place
  3. Now onto the charging and voltage booster module. This board is a changing module and a buck booster all in one. First, let’s set the output voltage to 5V from the Charging & voltage booster module. Connect the module up to a power source (this could be mobile phone battery, variable power source or whatever you have around, as long as it is lower than 5V’s)
  4. Now with a multimeter, check the voltage output. You need to try and get as close as possible to 5V’s so turn the potentiometer until you reach 5Vs.
  5. Now you can add the module to the PCB. I added a little superglue to the bottom of the board to ensure it was secured into place
  6. Add some solder to each of the solder points on the module and then add some wire from a resistor leg to each solder points.
  7. Bend the wire down so it is touching the solder pad on the PCB and trim.
  8. Add solder to the solder pad on the PCB and connect the wire to each. This will give you a good strong connection.
  9. Solder the slide switch into place

Adding Power

QLEU4931.JPG
QJJK5480.JPG
GMOR4087.JPG

I usually use recycled mobile batteries that I have havescavenged from e-waste. In this build I used an old camera battery which works well as it is a low profile battery. No isses with using a li-po battery - just make sure that it will fit into the space that you have on the board whichis about 40mm X 40mm

STEPS:

  1. Add some solder to the battery solderpoints on the PCB
  2. Add a little solder to each of the solder points on the battery. Try and do this quickly as you don't ant to melt the plastic around the solder point on the battery too much
  3. Add a couple resister legs to each of the soler point son the battery (I had to use wire as my battery didn't align right with the solder point on the PCB)
  4. Add a little glue to the back of the battery and stick it into place onthe PCB, ensuring the resistor legs are connecting to thesolder points on the PCB.
  5. Finish soldering everything

Flashing the Firmware Onto Your ESP32-S3 Zero

images.jpg

This step covers writing the pre-built firmware files onto the ESP32-S3-Zero using esptool, a free command-line tool from Espressif (the makers of the ESP32 chip). This works the same way on Windows, Mac, and Linux — the guide below uses Windows commands, with Mac/Linux equivalents included.

You do not need Arduino IDE or any other software for this step — just Python and esptool.

What You Need

  1. The 4 firmware files from the release: bootloader.bin, partition-table.bin, ota_data_initial.bin, gandw_handheld.bin. These can be found on the GitHub Repo
  2. A USB cable that can carry data (not a charge-only cable)
  3. Python 3 installed on your computer (python.org — during install on Windows, check the box "Add Python to PATH")

1: Install esptool

Open a terminal (Windows button + R on your keyboard) (Command Prompt on Windows, Terminal on Mac/Linux) and run:


pip install esptool

Confirm it installed correctly:


python -m esptool version

You should see a version number printed (e.g. esptool v5.3.1). If you get an error instead, double check Python installed correctly and is on your system PATH.

2: Plug In the Board

Connect the ESP32-S3-Zero to your computer via USB.

3: Find the Serial Port

Windows: Open Device Manager, expand "Ports (COM & LPT)". Look for something like "USB Serial Device (COM4)" or "Silicon Labs CP210x (COM3)" — note the COM number.

Mac: Open Terminal and run ls /dev/cu.* — look for something like /dev/cu.usbserial-0001 or /dev/cu.SLAB_USBtoUART.

Linux: Run ls /dev/ttyUSB* or ls /dev/ttyACM* — note whichever device shows up.

If nothing shows up on any platform, your computer may need a driver for the board's USB-to-serial chip. Check your specific board's listing/documentation for which chip it uses (commonly CP210x or CH340) and search for that chip name plus "driver" for your OS.

4: Navigate to the Firmware Files

In your terminal, cd into the folder containing the 4 downloaded .bin files. For example, on Windows:


cd "C:\Users\YourName\Downloads\firmware"

Confirm all 4 files are there:

Windows: dir *.bin Mac/Linux: ls *.bin

5: Flash It

Run the following command, replacing COM4 with your actual port from Step 3 (on Mac/Linux, use the port path instead, e.g. /dev/cu.usbserial-0001 or /dev/ttyUSB0):


python -m esptool --chip esp32s3 -b 460800 --port COM4 --before default-reset --after hard-reset write-flash --flash-mode dio --flash-size 4MB --flash-freq 80m 0x0 bootloader.bin 0x8000 partition-table.bin 0xe000 ota_data_initial.bin 0x10000 gandw_handheld.bin

You should see the tool connect to the chip, then write and verify each of the 4 files in turn, ending with something like:


Hash of data verified.
Hard resetting via RTS pin...

That means it worked. The board will reset automatically and boot into the new firmware.

Troubleshooting

"No such file or directory" for one of the .bin files — you're not in the right folder. Repeat Step 4 and confirm with dir *.bin / ls *.bin before flashing.

It hangs at "Connecting..." and never proceeds — some ESP32-S3 boards need to be manually put into bootloader/download mode before they'll accept new firmware. If your board has BOOT and RESET buttons: hold BOOT, tap RESET, release BOOT, then re-run the flash command. Not every board needs this — some reset into bootloader mode automatically — but if the plain command hangs, this fixes it.

Permission denied (Mac/Linux only) — you may need to run the command with sudo, or add your user to the dialout group (Linux):


sudo usermod -a -G dialout $USER

then log out and back in.

Confirming It Worked

Once flashed, the screen should power on and show the game selection menu. If you have your buttons and screen wired up already, you should be able to navigate and start playing immediately.

Putting the Panels Together

PHDU7272.JPG
HLOJ6814.JPG
YEZJ8032.JPG
IGKI6749.JPG

How to Play

FI47HBQMUCWK23C.jpg

How to Use Your Game & Watch Handheld

1: Power On

Slide the power switch to ON. After a moment the game selection menu appears on the screen.

To charge the battery, plug a USB-C cable into the charging port.

2: Choose a Game

The menu shows one game at a time, with its name and year at the bottom of the screen. There are 13 games:

  1. Donkey Kong Jr. (1982)
  2. Balloon Fight (1986)
  3. Climber (1986)
  4. Super Mario Bros. (1986)
  5. Ball (1980)
  6. Helmet (1981)
  7. Parachute (1981)
  8. Octopus (1981)
  9. Popeye (1981)
  10. Fire (1981)
  11. Turtle Bridge (1982)
  12. Tropical Fish (1985)
  13. Mario the Juggler (1991)

Press Left or Right to scroll through the games. Press Jump to load the game shown on screen.

When a game loads, it first shows the clock screen, just like the original Game & Watch.

  1. Press Game A to start the normal game.
  2. Press Game B to start the harder, faster version.

4: Play

The controls depend on the game.

Donkey Kong Jr., Balloon Fight, Climber and Super Mario Bros.

  1. Use the D-pad (Up, Down, Left, Right) to move.
  2. Press Jump to jump or perform the game's action.

Tip for Donkey Kong Jr.: to grab the key at the top of the screen, walk to the left edge of the top right branch. Wait until the key swings closest to you, then press Jump + Left together.

All other games (two button games)

These games were originally played with just a left and a right button. On this handheld:

  1. D-pad Right moves left.
  2. Jump moves right.

This puts one button under each thumb, just like the original handhelds.


5: The Time Button

The Time button is your function key. On its own or combined with another button, it gives you extra features.

Control What it does

Tap Time Pause or resume the game

Time + Left Volume down

Time + Right Volume up

Hold Time + Down for 2 seconds Return to the game menu

Hold Time + Up for 2 seconds (in a game) Continue after a game over

Hold Time + Up for 2 seconds (in the menu) Turn colour mode on or off


6: Pause

Tap Time quickly during a game. The screen freezes and the sound stops. Tap Time again to carry on playing.

You can still return to the menu while the game is paused by holding Time + Down for 2 seconds.

7: Adjust the Volume

Hold Time and press Right to turn the volume up, or Left to turn it down. This works in the menu and during a game.

8: Continue After a Game Over

Lost your last life? Don't give up. Within about 10 seconds of the game ending, hold Time + Up for 2 seconds. The game jumps back roughly a few seconds, to a point where you still had lives left.

Your score also goes back to what it was at that point.

9: Colour Mode (Easter Egg)

The original Game & Watch screens only showed black on grey, but this handheld has a hidden colour mode.

  1. Go to the game menu.
  2. Scroll to the game you want in colour.
  3. Hold Time + Up for 2 seconds. You will hear a beep.
  4. Press Jump to start the game in colour.


10: Return to the Menu

To switch games, hold Time + Down for 2 seconds during play. You will return to the game selection menu.