ROM Hacks (Game & Watch New)
If you have a new Game & Watch you can side-load any ROMs you like on it, even emulators.
This guide will walk you through the overview steps of what to do.
A super-easy single run setup script you can run to do all of the software setup is here https://github.com/angelsix/game-and-watch-retrosix.
Depending on if you have already done this before and have backups will depend where you need to start.
You will need to follow every step.
- Attach programmer to console
- Setup Linux environment
- Backup the original firmware
- Patch original firmware (support dual boot and large SPI)
- Flash retro go
If you have done it at least once, and have a copy of a mario or zelda firmware backup, you only need to run the Patch step to restore original firmware, and retro go steps to add the retro go emulator to the device.
This means calling flash-patch.sh and flash-single/dual boot.sh are all that is needed for a new device.
In short this means once you have done it once, for a new Game & Watch device you can simply open it straight up, solder in SWD wires to the USB, chuck on a 64MB SPI flash chip, close it back up, run flash-patch.sh and flash-single/dual boot.sh and its fully done :)
In order to program and hack the Game & Watch we first need to tap into the SWD interface.
We are going to mod the USB-C port to pass the SDIO and SWCLK points from the STM32 microcontroller out of the USB-C port so we can do all modding via a custom USB-C cable and not need to open the device again once done.
Open up the Game & Watch with a tri-wing screwdriver.
Locate the test pads for SWCLK and SWIO.

Solder SWIO to the USB-C port D- (bottom pin), and SWCLK to D+ (top pin).


The next step is to make up a custom USB-C cable on one end, and the other end soldering Ground, SWDIO and SWCLK.

TODO: NEW IMAGE OF CABLE IN STLINK
Once you have this cable, all you now need to do is connect the custom USB-C cable to the Game & Watch and the other end is the ST-Link device that connects to your PC. The cable communicates through the USB-C port via the new wires we soldered in place, going to the SWD pins.
If using the genuine STLink product you also need to solder the VTRef pin to the pin 1 of the programmer to work. Clones do not need this and should not be connected as it can inject 3.3V into the STM32 killing the MCU.
I personally recommend the ST-Link as it is simpler, but if you do want to use a J-Link you must solder the SWIO, SWCLK, GND, VTRef and !RESET pins to the header.
Use a real PC running Linux, or if your PC supports virtualization you can install Ubuntu on windows from the Window Store. There are many guides online on running the Linux Subsystem for Windows.
If running through virtual machine (WSL) you will also need to install these to allow you to connect a USB from the Windows Host to the Linux VM.
In short this involves downloading and installing usbipd-win_3.2.0 on Windows, running the following command on Ubuntu...
Then running an admin PowerShell with usbipd wsl list to find the programmer in the USB list. Note its BUSID and run usbipd wsl attach --busid <busid> in the PowerShell to attach it to the Linux VM, followed by lsusb on Ubuntu sidfe to confirm you see it.
A super-easy single run setup script you can run to do all of the software setup is here https://github.com/angelsix/game-and-watch-retrosix.
To do it manually, do the following steps below.
Download this repository to get started:
Next install OpenOCD with custom support for bank switching SPI RAM.
Finally install GCC toolchain.
And set the paths and clean-up:
Now clone all the required repositories.
When running the scripts below to hack the Game & Watch, the general idea is you need to power on the device (so from battery or externally via USB), and have your programmer connected to the SWD interface.
If you are using a J-Link or official STLink programmer, they cannot power the device, so you will have to plug and unplug the physical battery on the Game & Watch to power cycle the device.
If you are using a clone STLink programmer, you have the benefit of connecting up the USB-C 5V pin to the 5V output of the STLink programmer, allowing you to power the Game & Watch from this cable at the same time as programming. If you are doing this, I recommend disconnecting the battery so the device fully turns off when you unplug the USB-C allowing for really easy power-cycling during hacking.
TODO: Show image of clone STLink USB cable
From the, inside the game-and-watch-backup repository folder, it is time to run the sanity check. This makes sure all tools were installed correctly.
Swap stlink with jlink or rpi if using a J-Link or Raspberry Pi, and mario for zelda if using a Zelda Game & Watch.
Make sure your programmer is connected to your PC, and to the Game & Watch, and that the Game & Watch has power (via battery or programmer).
Turn on the Game & Watch, then go to the clock screen.
Depending on how you made your USB-C cable, you might have a cable that has independent D+ and D- pins on each side, meaning your cable will only work one way.
If it doesn't work one way just flip your cable around.
Run the backup script inside the game-and-watch-backup folder.
Swap stlink with jlink or rpi if using a J-Link or Raspberry Pi, and mario for zelda if using a Zelda Game & Watch.
If all goes well it should reboot the console and dump the firmware into the folder backups inside where the script files are.

Now we have the Flash backed up, we must also backup the internal flash.
Run the backup internal flash script.
Swap stlink with jlink or rpi if using a J-Link or Raspberry Pi, and mario for zelda if using a Zelda Game & Watch.
Once done you should end up with the internal backup file too.

The next step is now to run the unlock script to unlock the STM32. It is as simple as following the instructions given.
Run the unlock script. Follow the guide given.
Swap stlink with jlink or rpi if using a J-Link or Raspberry Pi, and mario for zelda if using a Zelda Game & Watch.
The final step before swapping the SPI RAM is to restore the original but unlocked firmware.
It is as simple as following the instructions given.
Run the restore script. Follow the guide given.
Swap stlink with jlink or rpi if using a J-Link or Raspberry Pi, and mario for zelda if using a Zelda Game & Watch.
Now desolder the old SPI RAM and solder in your new larger SPI RAM such as the 64MB chip MX25U51245GZ4I00.
It is as simple as desoldering the old one and soldering in the new.
IMPORTANT: Once you have the larger flash installed, you cannot run any of the backup and restore scripts except Unlock, as those scripts do not support larger flash.
Once you have the large flash installed, just run the flash-patch.sh script to restore the original firmware, or the flash-single/dual-boot.sh scripts to flash the retro go emulator.
Now you have your Game & Watch unlocked and the stock firmware reinstalled, if you would like to dual boot retro go (have the original UI and games on the Game & Watch and run the retro go emulator by pressing Game + Left) you must patch the firmware on the device.
If you play to run only retro go and no original UI, you can skip this step.
First clone the patch GitHub code:
Next run the following commands changing stlink and mario as needed. Do this while holding the power button and having the programmer connected.
Also note we have LARGE_FLASH=1 flag as we are using the 64MB (512MBit) SPI Flash.
As you hit enter on the last command it will attempt to program the device so make sure its all connected and power button is held down.
If the command fails just keep re-trying the command while holding the power button. It takes several attempts to get it working sometimes.
Once it works it will look like this, and seem to mention errors but its worked fine.
Now power off and on the console and it should be running the stock firmware again, but now with patched firmware ready for dual boot.
To test it worked, turn on the Game & Watch and press Game + Left. It should turn the screen black (because Retro Go isn't yet on the SPI).
Finally time for the fun part. Loading up the retro-go emulator. This emulator can play games from the following consoles:
- ColecoVision (col)
- Gameboy / Gameboy Color (gb/gbc)
- Game & Watch / LCD Games (gw)
- Nintendo Entertainment System (nes)
- PC Engine / TurboGrafx-16 (pce)
- Sega Game Gear (gg)
- Sega Master System (sms)
- Sega SG-1000 (sg)
For this you can use many versions of retro-go, including:
For this I'm going to use the sylverb variant, but the same steps are used for all.
Now after running the above commands you will have a romsfolder. Inside there is each console to place your ROMs in.
For screenshots make them the size they specify in the list above and call them the exact same name as the ROM file but with a .png extension.
Once done your folder should look something like this (NES folder inside ROMs as the example).

If you don't care about the original Game & Watch UI and dual games, you can just flash over the top of the firmware completely.
The COVERFLOW flag is used to make sure we get thumbnails.
NOTE: If you didn't upgrade your SPI to 64MB you can omit the EXTFLASH_SIZE_MB statement, or change it to the size of your SPI you upgraded to.
To preserver the original firmware, and have the Retro Go open up when you press Game and Left on the Game & Watch console, build the image with the following command.
NOTE: If you didn't upgrade your SPI to 64MB you can omit the EXTFLASH_SIZE_MB statement, or change it to the size of your SPI you upgraded to.
This is for the 64MB SPI Flash and Mario. For Zelda the original flash was 4MB so the command and offset is like this:
This will compile the image ready for flashing.
To flash to the device, turn it on, connect the programmer, hold the power button and run:
Change mario to zelda if flashing Zelda, and stlink to jlink as required.
Once you see the Game and Watch Flash App appear on screen you can let go of the power button.
Either screenshot your own from emulators, or get many from places like https://github.com/libretro-thumbnails/libretro-thumbnails.
Run the images through a resizer to the correct size (128x96) here https://bulkresizephotos.com/īģŋ