This project implements a flash cartridge for the Watara Supervision handheld game console using a Raspberry Pi Pico (RP2040). It lets you load and play Watara Supervision ROM files (.sv) on original hardware by serving ROM data from the RP2040 to the console bus.
Watara menu rom from https://github.com/vrodin/menu-watara
Download the latest firmware: Watapico Firmware
A web-based ROM manager is available to simplify the process of adding and removing ROMs from the firmware. You can access it here: Watapico ROM Manager
- Open the Watapico ROM Manager in your web browser.
- Load your
watapico.uf2firmware file by dragging and dropping it into the designated area or by clicking to select it. - Manage your ROMs:
- The current ROMs will be displayed in a list.
- You can delete ROMs by clicking the "Delete" button next to them.
- You can add new
.svROMs by dragging and dropping them into the ROMs area.
- Save your changes:
- Click the "Save Updated UF2 File" button to generate and download a new
watapico_updated.uf2file with your changes.
- Click the "Save Updated UF2 File" button to generate and download a new
- Download the manufacturing files: Gerbers or the full KiCad project.
- Use a RP2040 board that exposes GPIO 0–29. The common purple RP2040 clone that breaks out all 30 GPIOs is recommended.
The firmware assumes the following fixed wiring between the RP2040 and the Supervision cartridge connector:
| Bus signal | RP2040 GPIO |
|---|---|
| Address A0–A16 | GP0–GP16 |
| Data D0–D7 | GP17–GP24 |
| PWR_ON | GP25 |
| /RD | GP29 |
Notes:
- System clock is set to 400 MHz for timing headroom.
PWR_ONis driven high to simulate cartridge presence/power.
The project has two main components:
- Firmware (
watapico.c): Initializes clocks and GPIOs and serves data during /RD cycles. On boot it selects a ROM at random and mirrors it onto the data bus. - ROM tool (
roms/makeroms.py): Converts.svfiles into a generated header (roms/roms.h) containing ROM byte arrays and a lookup table.
- Supported input: Watara Supervision
.svfiles. - On boot, the firmware selects the next ROM using a persistent index stored at the end of flash. The index is incremented and saved on each start, so each power cycle advances to the next ROM.
- Address wrap: the generator computes a power-of-two mask so smaller ROMs mirror correctly over the address space.
- Important: The firmware buffer is 64 KiB (
uint8_t rom[65536]). Do not include ROMs larger than 64 KiB or they will not fit.
watapico.c: Main RP2040 firmware.CMakeLists.txt: Build configuration (Pico SDK; MinSizeRel by default).roms/: Place your.svfiles here and store the generated header here.roms/makeroms.py: ROM header generator.roms/roms.h: Generated. Do not edit manually.
The recommended way to manage ROMs is to use the web-based ROM manager.
However, if you prefer to use the command-line tools, you can follow these steps:
-
Copy your
.svfiles intoroms/. -
Generate the header (ensure the output path matches the include in
watapico.c):python3 roms/makeroms.py roms/ -o roms/roms.h
Prerequisites:
- Install the Raspberry Pi Pico SDK and toolchain, and set
PICO_SDK_PATH.
Configure and build:
export PICO_SDK_PATH=/path/to/pico-sdk
cmake -S . -B build -DPICO_PLATFORM=pico
cmake --build build -jArtifacts are written under bin/<platform>/<config>/. With defaults this is:
bin/pico/MinSizeRel/watapico.uf2
- Hold BOOTSEL and plug the Pico into USB.
- Copy
watapico.uf2to the mass-storage device.
Contributions are welcome! Please open an issue or PR.
- Hardware design: Sa Gin
- Software: xrip, vrodin
- Beta testing: Oleg
This project is licensed under the MIT License. See the LICENSE file for details.
