MaplePad Versions Save

🍁 Dreamcast controller emulator using RP2040. Supports 8-page memory card, SPI/I2C OLED for VMU LCD, and rumble.

1.5

6 months ago

v1.5 - Menu and OLED improvements + Arcade Autoreset

Enough improvements accumulated to justify a new release. Features/bugfixes previously slated for v1.5 are being pushed to 1.6.

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Robust FT3 (timer/RTC) reporting for compatibility
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • Stick calibration is now fully automatic and much more robust!
  • Configurable stick/trigger deadzones and antideadzones. See below for details
  • Implemented oledFlip for monochrome OLED
  • Fixed upside-down mono OLED splashscreen
  • Optimized pixel functions for both OLEDs, greatly reducing flickering/disconnect issues during saving with mono OLED
  • Fixed monochrome OLED clearDisplay bug (no longer being called every LCD update)
  • Improved firstBoot behavior (now runs when upgrading from previous MaplePad versions)
  • Fixed some flags with incorrect default values
  • Added controller type indicator to Settings menu
  • Experimental auto soft-reset for arcade setups. See below for usage details

Whew! 😪

Notes:

  • 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.

1.4e

1 year ago

v1.4e - Hotfix for page cycling + first boot flag bug

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Robust FT3 (timer/RTC) reporting for compatibility
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • Fixed an issue with the way flags were handled on first boot
  • Fixed a minor issue with page cycling

Notes:

  • Enter the MaplePad menu by holding Y + Start on powerup.
  • In the menu, you can calibrate the analog stick and triggers, enable or disable subperipherals, change settings, and view the current 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 now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED.
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 VMU pages.
  • You can also cycle to the next VMU page with Start + D-pad Right or the previous page with Start + D-pad Left

1.4d

1 year ago

v1.4d - Monochrome OLED update

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Robust FT3 (timer/RTC) reporting for compatibility
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • Proper monochrome I2C OLED (SSD1306 ) support is back!
  • Use GPIO22 (OLED_SEL) to select OLED type at boot.
  • Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED.
  • Monochrome OLED is crisper than color OLED, but you miss out on per-VMU color palettes and the rainbow menu effect. Also, OLED Flip in the menu only works for SSD1331 color OLED right now.

Notes:

  • Enter the MaplePad menu by holding Y + Start on powerup.
  • In the menu, you can calibrate the analog stick and triggers, enable or disable subperipherals, change settings, and view the current 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 now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED.
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 VMU pages.
  • You can also cycle to the next VMU page with Start + D-pad Right or the previous page with Start + D-pad Left

1.4c

1 year ago

v1.4c - Menu Update + VMU/Timer/Rumble improvements + minor bugfixes

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Robust FT3 (timer/RTC) reporting for compatibility
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • Cycle VMU pages forward with Start + D-pad Right or backward with Start + D-pad Left
  • FT3 (timer/RTC) is now implemented (no RTC on Pico, time/date are stubbed)
  • FT8 (vibration) GetMediaInfo now actually works (fixes rumble in many games)
  • Enable and disable VMU and rumble directly from MaplePad menu
  • Stick and trigger calibration menu options are now functional
  • invertX, invertY, invertL, and invertR menu options are now functional
  • Fixed some major stick/trigger calibration bugs
  • Fixed device status info string lengths
  • 'OLED Flip' option in menu now flips SSD1331 OLED in real-time

Notes:

  • Enter the MaplePad menu by holding Y + Start on powerup.
  • In the menu, you can calibrate the analog stick and triggers, enable or disable subperipherals, change settings, and view the current 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 now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED. (Warning, I2C OLED hasn't been tested recently and may be deprecated soon!)
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 VMU pages.
  • You can also cycle to the next VMU page with Start + D-pad Right or the previous page with Start + D-pad Left

1.4b

1 year ago

v1.4b - Minor Packet Format Improvements

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • Various fixes for improved transaction accuracy (ALL_DEVICE_STATUS, GET_MEDIA_INFO)
  • Reverted memcards to 200 blocks to avoid stability/compatibility issues in BIOS and retail SW
  • FT2 (vibration) now handles commands with a vibePower of 0 properly (fixes Rez)
  • FT2 (vibration) timer interrupt callback timing is more consistent
  • Flash writeback delay is increased (should make copies and saving more reliable)
  • Button combo for VMU page-cycling is now properly rate-limited
  • All 8 VMUs are now preformatted with custom colors visible in the Dreamcast BIOS
  • New custom Volume and Label Icons for VMU

Notes:

  • 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 now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED. (Warning, I2C OLED hasn't been tested recently!)
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 VMU pages.
  • You can also cycle through VMU pages with a button combo (X + Y + Start).

1.4

1 year ago

v1.4 - VMU and Rumble Improvements

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes
  • Robust FT8 (vibration) functionality (still WIP)

Bugfixes & Improvements:

  • FT2 (vibration) now handles commands with a vibePower of 0 properly (fixes Rez)
  • FT2 (vibration) timer interrupt callback timing is more consistent
  • Flash writeback delay is increased (should make copies and saving more reliable)
  • Button combo for VMU page-cycling is now properly rate-limited
  • Filesystem tweaked to increase VMU block count to 238 per page
  • All 8 VMUs are now preformatted with custom colors visible in the Dreamcast BIOS
  • New custom Volume and Label Icons for VMU

Notes:

  • 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 now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED. (Warning, I2C OLED hasn't been tested recently!)
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 VMU pages.
  • You can also cycle through VMU pages with a button combo (X + Y + Start).

1.3b

1 year ago

v1.3b - Purupuru Overhaul + SPI DMA + Formatting hotfix

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes
  • Robust FT8 (vibration) functionality (still WIP)

Notes:

  • An arcade stick (HKT-7300) binary is included in the release now. It supports both rumble and VMU which is impossible on a real HKT-7300.
  • Rumble (Purupuru) functionality is now much more robust and supports repeated pulses as well as converging and diverging vibration. Most retail software works with rumble as expected now, with some exceptions that seem to rely on continuous vibration and the related auto-stop feature. A future release will include these final features (they are disabled for now.)
  • All 8 memory card pages are now formatted on first boot rather than on the fly (fixes disconnect bug in BIOS)
  • SSD1331 96*64 color OLED is now updated over DMA, rather than spi_write_blocking.
  • Color and monochrome OLEDs are now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED. (Warning, I2C OLED hasn't been tested recently!)
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 memory cards. Debouncing and cycle-limiting is now implemented in software.
  • You can now also cycle through VMU pages with a button combo (X + Y + Start).
  • Splashscreen has been updated to the new MaplePad logo as seen in the README.

1.3

1 year ago

v1.3 - Purupuru Overhaul + SPI DMA

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 color SPI OLED or SSD1306 mono I2C OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes
  • Robust FT8 (vibration) functionality (still WIP)

Notes:

  • Rumble (Purupuru) functionality is now much more robust and supports repeated pulses as well as converging and diverging vibration. Most retail software works with rumble as expected now, with some exceptions that seem to rely on continuous vibration and the related auto-stop feature. A future release will include these final features.
  • SSD1331 96*64 color OLED is now updated over DMA, rather than spi_write_blocking.
  • Color and monochrome OLEDs are now selectable with GPIO22. Leave GPIO22 floating to enable SPI for SSD1331 color OLED, or connect it to GND to enable SSD1306 monochrome I2C OLED. (Warning, I2C OLED hasn't been tested recently!)
  • A momentary switch to GND on GPIO21 can be used to cycle through the 8 memory cards. Debouncing and cycle-limiting is now implemented in software.
  • You can now also cycle through VMU pages with a button combo (X + Y + Start).
  • Splashscreen has been updated to the new MaplePad logo as seen in the README.

1.2

1 year ago

v1.2 - Purupuru Progress

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1331 96*64 color SPI OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes
  • Basic FT8 (vibration) functionality (WIP)

Notes:

  • 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.
  • Support for SSD1306 128*64 monochrome I2C OLED has been temporarily dropped as I develop for the color SPI OLED. A future release will support both OLEDs (selectable via a GPIO.)
  • Rumble (Purupuru) functionality is in early stages and won't work properly in retail software.

1.1b

2 years ago

v1.1b - Page Button Fix

  • Full FT0 (controller) support including analog joystick and triggers
  • Full FT1 (storage) support for savegames with 1600 blocks of space
  • Multipaging for memory card (8 separate 200-block memory cards)
  • Full FT2 (LCD) support with SSD1306 128*64 OLED for VMU display
  • Basic FT3 (timer/RTC) reporting for compatibility purposes

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.