Example Projects | Connected to Dreamcast |
---|---|
![]() |
![]() |
Pico2Maple is a Dreamcast Maple bus emulator for the RP2350. The goal of this project of to provide a way to for people to use a variety of non-Dreamcast controllers and accessories on the Sega Dreamcast.
Currently, it is possible to use several USB controllers, dongles, mice, and keyboards. Pico2Maple also integrates VMU support and saving to a microSD card.
Feel free to hop into the Discord server to discuss the project, ask questions, or share your own projects using Pico2Maple.
Download the latest firmware:
- pico2maple_2025-09-07, USB only for Pico 2 and W boards.
- pico2maple-w_2025-09-07, USB and wireless for Pico 2 W boards.
To install the firmware on the Pico 2:
- Hold down the BOOTSEL button while connecting the Pico to a PC. This should make it appear as a USB storage device.
- Copy the pico2maple uf2 file to the Pico. It should reboot itself with the new firmware.
For a more detailed breakdown of supported devices, please check out the full device compatibility list.
- Steam Controller (wireless with dongle only)
- Sony PlayStation DS 3/4/5 Controllers
- XInput Controllers (Xbox 360, One, Series, etc.)
- 8BitDo Wireless Dongle (great for connecting a huge variety of other controllers)
- 8BitDo SN30 Pro Xbox Edition
- USB Keyboards
- USB Mice
Pico2Maple uses Bluepad32 to handle BT connectivity. Check out Bluepad32 supported controller list for a summary of supported devices.
The following controllers have been tested and confirmed working:
- Sony PlayStation DS 4/5 Controllers
- Xbox Series Wireless Controller (3-button version)
- Nintendo WiiU Pro Controller
- 8BitDo SN30 Pro
- 8BitDo SN30 Pro Xbox Edition
Controls are mapped as you would expect with a few extra features:
- Select + Right Bumper/Left Bumper switch currently-active VMU bank (cycles through 10 different VMU banks).
- Select + A enable standard Dreamcast controller layout.
- Select + B enable all controller inputs which activates the second joystick and the C,Z buttons. Z is mapped to left bumper and C to right bumper. Not all games will accept this layout.
- Select + X enable Twin Stick layout. Uses both controller joysticks, bumpers and triggers.
- Select + Y enable Fight Stick layout. This layout remaps RB and RT inputs to the Z and C buttons respectively. LB maps to RT.
- Select + Dpad Right enable a custom layout if one has been configured.
- Select + Dpad Left enable Racing Wheel layout. This layout will appear as an official Dreamcast Racing Wheel to games that support it.
Pico2Maple has a fairly flexible controller remapping implementation which allows the entire controller to be reconfigured. Custom controller layouts are currently a work-in-progress and feedback is greatly appreciated.
The easiest method to create a layout is to use the Pico2Maple Mapper tool. Custom layouts can then be uploaded to the device using Raspberry Pi's picotool. Pre-compiled picotool binaries are also available.
Optionally, for instructions on how to load a custom layout from an SD card, please check out the Controller Layouts docs. Layouts loaded from an SD card will be stored internally so only need to be loaded once.
- Raspberry Pi Pico 2
- Dreamcast controller cable or plug
- Micro-USB to female USB-A adapter
- Optional:
Use a multi-meter to check which wires on the controller cable correspond to the following pins on the controller plug.
Connect the controller wires to the labelled pins on the Pico below by soldering or otherwise.
Optionally connect the SPI micro-SD board and the SSD1306 OLED screen to the labelled pins on the Pico 2.
With everything wired up, it's simply a matter of plugging in a USB device to the Pico 2 using the USB-A to Mini-USB adapter and plugging the Dreamcast controller cable into the console.
- Added a new layout which will appear as an official Dreamcast Racing Wheel to games that support it. Press Select + Dpad Left to enable.
- Added support for Logitech G29 Racing Wheel via USB with PS4 mode. Have a racing wheel you want supported? Make a GitHub issue or join the Discord server to discuss!
- Fully tested USB and BT support for PlayStation 4 controller. Many third-party PS4 compatible controllers will be detected but are untested.
- Move to pico-sdk 2.2.0
- Fully tested USB support for PlayStation 3 controller. Many third-party PS3 compatible controllers will be detected but are untested. GP-2040CE now works with either PS3 or XInput modes.
- Improved Twin Stick controller mapping to accommodate Hori 360 Twin Sticks.
- BT support for Dreamwave controller.
- Experimental support for custom controller layouts/remapping, an SD card is required to load the layout. More info at CONTROLLER_LAYOUTS.md.
- Added a Fight Stick layout to accomodate typical stick layouts where the fifth and sixth buttons are RB and RT. Press Select + Y to enable. This layout remaps RB and RT inputs to the Z and C buttons on the Dreamcast respectively.
- Implemented HID report parsing for handling a wider range of USB devices. PS3/4 controllers may work, give it a try
- Much improved USB mouse compatibility with proper HID parsing
- Small improvements to controller input handling
- Wireless support for Pico2 W boards. A USB device will be used if detected, otherwise will search for a bt device.
- Refactoring of USB code
- Add support for Twin Stick layout, press Select+X to enable
- OLED improvements
- Change VMU data location on flash storage, backup your internal VMU data before updating
- Automatically backup internal VMU data to microSD card on boot
- Additional stability improvements in preparation for bluetooth support
- Improved stability of the Maple bus
- Additional OLED display features showing what type of device is active (controller, keyboard, or mouse)
- Initial release
Feedback on this project is very welcome!
- Rumble support for Xbox/PS controllers
- Support a wider range of USB controllers (ongoing).
- pico-sdk - BSD 3-Clause
- tinyusb - MIT
- tusb_xinput - MIT
- no-OS-FatFS-SD-SDIO-SPI-RPi-Pico - Apache 2.0
- btstack - non-commercial, pico commercial exception
- cyw43-driver - License
- bluepad32 - Apache 2.0