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.