This is a very quick and dirty port of the retro-go emulator collection that is intended to run on the Nintendo® Game & Watch™ 2020 edition.
Currently playable
- GB
- NES
❗ Please read this before reporting issues.
You may run the script ./report_issue.sh
and follow the steps lined out, or continue reading:
Please include the following:
- Which console (NES or GB)
- The full name of the ROM you are running, e.g. "Super_Tilt_Bro_(E).nes"
- The git hash of this repo and the submodule. Run the following:
git describe --all --long --dirty=-dirty; cd retro-go-stm32; git describe --all --long --dirty=-dirty
With this information, please head over to the Discord and post in the #support channel. If you don't want to use discord for some reason, please create an issue.
- Do you have any changed files, even if you didn't intentionally change them? Please run
git reset --hard
to ensure an unchanged state. - Did you pull but forgot to update the submodule? Run
git submodule update --init --recursive
to ensure that the submodules are in sync. - Always run
make clean
before building something new. The makefile should handle incremental builds, but please do this first before reporting issues. - If you have limited resources, remove the
-j$(nproc)
flag from themake
command, i.e. runmake flash_all
. - It is still not working? Try the classic trouble shooting methods: Disconnect power to your debugger and G&W and connect again. Try programming the Base project first to ensure you can actually program your device.
- Still not working? Ok, head over to #support on the discord and let's see what's going on.
- You will need a recent arm-gcc-none-eabi toolchain. Please make sure it's installed either in your PATH, or set the environment variable
GCC_PATH
to thebin
directory inside the extracted directory (e.g./opt/gcc-arm-none-eabi-10-2020-q4-major/bin
). - In order to run this on a Nintendo® Game & Watch™ you need to first unlock it.
Note: make -j8
is used as an example. You may use make -j$(nproc)
on Linux or make -j$(sysctl -n hw.logicalcpu)
on Mac, or just write the number of threads you want to use, e.g. make -j8
.
# Configure the debug adapter you want to use.
# stlink is also the default, but you may set it to something else:
# export ADAPTER=jlink
# export ADAPTER=rpi
export ADAPTER=stlink
# Clone and build flashloader:
git clone https://github.com/ghidraninja/game-and-watch-flashloader
cd game-and-watch-flashloader
make -j8
cd ..
# Clone this repo with submodules:
git clone --recurse-submodules https://github.com/kbeckmann/game-and-watch-retro-go
cd game-and-watch-retro-go
# Place GB roms in `./roms/gb/` and NES roms in `./roms/nes/`:
# cp /path/to/rom.gb ./roms/gb/
# cp /path/to/rom.nes ./roms/nes/
# Build and program external and internal flash.
# Note: If you are using the 16MB external flash, build using:
# make -j8 LARGE_FLASH=1 flash_all
# A custom flash size may be specified with the EXTFLASH_SIZE variable.
make -j8 flash_all
- If you need to change the project settings and generate c-code from stm32cubemx, make sure to not have a dirty working copy as the tool will overwrite files that will need to be perhaps partially reverted. Also update Makefile.common in case new drivers are used.
- Settings are not persistent
- Key input support
- Audio support (works well!)
- Video support (uses RGB565 color mode)
- Audio volume
- Power button -> deep sleep (saves and loads state)
- VSync
- State saving/loading
- Support multiple ROMs
- OSD menu
- Key input support
- Audio support (works well)
- Video support (uses indexed colors w/ a configurable palette)
- Audio volume
- Power button -> deep sleep (saves and loads state)
- VSync
- State saving/loading
- Support multiple ROMs
- OSD menu
Please join the Discord.
This project is licensed under the GPLv2. Some components are also available under the MIT license. Respective copyrights apply to each component.