🍁 Dreamcast controller emulator using RP2040. Supports 8-page memory card, SPI/I2C OLED for VMU LCD, and rumble.
Enough improvements accumulated to justify a new release. Features/bugfixes previously slated for v1.5 are being pushed to 1.6.
Whew! 😪
Enter the MaplePad menu by holding Y + Start on powerup.
In the menu, you can calibrate the analog stick and triggers, edit deadzones, enable or disable subperipherals, change settings, and view the current controller type and firmware version. Select Exit to save your settings and start the controller.
An arcade stick (HKT-7300) binary is included in the release. It supports both rumble and VMU which is impossible on a real HKT-7300.
Color and monochrome OLEDs are selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED.
You can cycle to the next VMU page with Start + D-pad Right or the previous page with Start + D-pad Left
A momentary switch to GND on GPIO21 can also be used to cycle through the 8 VMU pages.
Deadzones and Antideadzones:
A 'deadzone' is an area surrounding the stick/trigger's idle position that produces no signal. Increasing the deadzone size increases the minimum amount of movement required to produce a signal on the stick/trigger (i.e., reduces initial sensitivity.) Deadzones are useful for filtering out stick/trigger jitter so they don't activate when idle.
An 'antideadzone' is an area surrounding the stick/trigger's maximum position that always produces the maximum possible signal. Increasing the antideadzone size decreases the threshold required to generate the maximum signal; in other words, the stick/trigger will reach its maximum value sooner. Antideadzones are useful for ensuring the stick/trigger reaches its maximum value consistently.
The stick/trigger input is always scaled linearly between where the deadzone ends and the antideadzone begins. Barring hardware issues, the stick/trigger mapping will always produce a full range of 0x00 to 0xff between the deadzone and antideadzone. The deadzones and antideadzones are preconfigured to reasonable values for my Xbox S dev controller, but may require adjustment on different hardware.
Autoreset Usage: This is an experimental feature that will automatically soft-reset the Dreamcast with ABXY+Start after a certain period of time has elapsed without user input. You must wire together GPIO20 of all connected MaplePads so they can tell each other when they receive input. (This is so activity on P2 prevents P1 from softresetting the console and vice versa.) You can configure the autoreset timeout between 2s and 510s in the menu. You should offset the autoreset timeout on each connected MaplePad by 2s so they do not all spam the DC with autoreset signals at the same time (i.e. P1 100s, P2 102s, P3 104s, P4 106s.) In this scheme, only the MaplePad with the shortest timeout will ever send an autoreset signal.
v1.4e - Hotfix for page cycling + first boot flag bug
Bugfixes & Improvements:
Notes:
v1.4d - Monochrome OLED update
Bugfixes & Improvements:
Notes:
v1.4c - Menu Update + VMU/Timer/Rumble improvements + minor bugfixes
Bugfixes & Improvements:
Notes:
v1.4b - Minor Packet Format Improvements
Bugfixes & Improvements:
Notes:
v1.4 - VMU and Rumble Improvements
Bugfixes & Improvements:
Notes:
v1.3b - Purupuru Overhaul + SPI DMA + Formatting hotfix
Notes:
v1.3 - Purupuru Overhaul + SPI DMA
Notes:
v1.2 - Purupuru Progress
Notes:
v1.1b - Page Button Fix
A momentary switch to GND on GP21 can be used to cycle through the 8 memory cards. Debouncing and cycle-limiting is now implemented in software.