Code Monkey home page Code Monkey logo

maplepad's Introduction

MaplePad🍁

MaplePad is an all-in-one Dreamcast controller, VMU, and Purupuru (rumble pack) emulator for Dreamcast portables and custom Dreamcast controllers. It runs on RP2040 and is usable with the Raspberry Pi Pico as well as custom MaplePad PCBs. See the hardware folder for a wiring diagram.

Note: MaplePad is still a WIP. You may experience issues with Windows CE games. In almost all problematic titles, disabling VMU and rumble through the MaplePad menu will make the game playable. Check out the Compatibility List for details!

Features

With MaplePad you can cycle through 8 200-block internal VMUs with custom icons and colors, use an I2C or SPI OLED display to see the VMU screen in color and at 2x integer scale, and enjoy rumble that is 1:1 with the Performance TremorPak in most retail software (still some minor bugs!)

Feature List:

  • 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 (monochrome SSD1306 128*64 I2C OLED also supported)
  • Customizable color palettes for all 8 internal memory cards
  • Robust FT8 (vibration) functionality (WIP)
  • Robust FT3 (timer/RTC) reporting for compatibility purposes (no RTC)
  • Basic menu on SSD1306 and SSD1331 OLED for configuring MaplePad behavior (WIP)

To-do:

Release v1.6 is gated by the following TODOs

  • Finish menu (button test, VMU palette editor, misc. bugs)
  • Address issues with non-CE games (Crazy Taxi, Blue Stinger, Powerstone 2)
  • Finish FT8 (vibration) continuous vibration and AST

Future TODOs

  • Fix compatibility with Windows CE games
  • Implement 'fancy' VMU color palettes (gradients, animated backgrounds, etc.)
  • Implement option for DC boot animation on OLED
  • Add external RTC for true FT3 (timer/RTC) support
  • Implement FT4 (microphone) support

Project Showcase

StrikerDC MaplePad mod by Wesk

MaplePad Arcade Controller with VMU de GamesCare. link, video

Mini Arcade Stick de Mundo Yakara Colombia. Excellent video that showcases MaplePad v1.5 features! video

Mini plug'n'play virtual memory card by jounge. link

Various JAMMA Dreamcast adapters available on AliExpress. link 1, link 2, video (flashing lights warning!)

Giant Dreamcast VMU + Arcade Stick by CrazyJojo (code modified). video

Dumping VMUs to PC

You can use picotool to dump VMUs manually. Here's the process:

  • Put RP2040 into programming mode with BOOTSEL button and connect it to your PC
  • Use picotool to dump whichever VMU page you want: picotool save -r 10020000 10040000 dump1.bin image
  • VMUs start at 0x10020000 and each one is 0x20000 long. So to save page 7, for example, you'd use picotool save -r 100E0000 10100000 dump7.bin
  • Open dump in VMU Explorer image

License

Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.

Share — copy and redistribute the material in any medium or format
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made.

MaplePad is forked from Charlie Cole's Pop'n Music Controller.

Special thanks: Charlie Cole, Colton Pawielski and Wesk.

maplepad's People

Contributors

charcole avatar mackieks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

maplepad's Issues

Random disconnection

I'm use the release v1.4c-arcade on my raspberry pico. In memory menu on bios look like i connect and quickly disconnect the controller, and in 240p test suite in "Maple Devices" item, when i select the maplepad or another controller, the maplepad "disconnect" when I back to menu.

PS: Thanks to your dedication for this project

Arcade Stick version?

Is it possible to make an arcade stick version for this? Basically the same thing, but using C and Z buttons instead of L and R triggers, since digital inputs are better than analog for arcade sticks and games. It would be fantastic if this were possible!

Joystick range issues in numerous titles

Description:
Some games don't respond to diagonal joystick inputs properly.

To-do:
Capture logic traces with HKT-7700 and MaplePad to compare behavior. Maybe try a set joystick motion (like a clockwise circle) to capture the full range of values. Might need to use a debug load on MaplePad to print out stick values.

Affected titles:
(tested on 1.4c)

  • Blue Stinger
  • Star Wars Jedi Power Battles

Crazy Taxi – Rumble Issue

Description:
In the settings menu of Crazy Taxi, enabling rumble will cause the rumble motor to run forever, or until the game sends a new rumble command (setCondition) during gameplay.

This is probably a continuous vibration/AST-related issue. See #15

To-do:
Capture logic traces with HKT-7700+Performance TremorPak and MaplePad to compare behavior. Confirm that the game BlockWrites a new AST to the Performance TremorPak, and that it triggers a continuous vibration when rumble is enabled in the settings menu.

Affected titles:

  • Crazy Taxi

Rumble not detected in some non-CE titles

Description:
A few non-CE games still don't detect rumble. Probably a trivial error in packet formats or the way MaplePad responds to certain DC packets; I already fixed a similar issue caused by MaplePad not responding to GetMediaInfo with the Purupuru-specific info packet.

To-do:
Capture logic traces with HKT-7700+stock VMU and MaplePad to compare behavior.

Affected titles:
(tested on 1.4c)

  • Evil Dead: Hail to the King
  • Red Dog
  • Wacky Races

KISS Psycho Circus – Unsupported Device

Description:
KISS Psycho Circus' title screen says an unsupported device is connected and will not proceed further. Fixing this might help with other WinCE titles.

To-do:
Capture logic traces with HKT-7700 and MaplePad to compare behavior.

Affected titles:

  • KISS Psycho Circus

Implement continuous vibration and AST

Description:
Continuous vibration and AST (auto-stop time) is the last part of Dreamcast Purupuru spec left to implement. I tried a naïve implementation of BlockWriting AST at some point last year, but it didn't work as expected. This might fix a variety of rumble-related bugs in retail SW.

To-do:

  • Use Colton's Purupuru tester homebrew add link to cdi here to refresh my memory on how this functionality works.
  • Verify I can store AST data when the DC sends it via BlockWrite
  • Does the DC ever read back AST data with BlockRead? I bet CE games do... need to implement this
  • Verify AST works to end continuous vibration

BOM location

This is great. I downloaded it. But the BOM list doesn't mark the locations. Hope you can mark them. Thanks

Rumble issues in Windows CE titles

Description:
One of many, many problems with WinCE software. Some titles don't detect rumble at all. Some titles advise that an unsupported accessory has been connected when rumble is enabled, and work fine with rumble disabled. Sega Rally 2 seems to detect rumble, but hard crashes when rumble actually activates in-game, i.e. when the DC sends a setCondition packet to MaplePad (how this is even possible is beyond me.)

This is probably a packet format issue, or a packet that isn't being handled correctly by MaplePad. I already fixed some bugs where MaplePad wasn't responding to GetMediaInfo packets properly, so maybe there are more issues like that lurking in the code. The worst possible scenario would be if the vibeHandler timer ISR is somehow interfering with the receipt/transmission of rumble-related packets. Also, maybe continuous vibration/AST not being implemented is causing problems...? Really need to address that.

To-do:
Capture logic traces with HKT-7700+stock VMU and MaplePad to compare behavior. Some analysis of Sega Rally 2 already performed last year.

Affected titles:
(tested on 1.4b/c)

  • 4x4 Evolution (VMU icon shows up, but disappears. VMU isn't recognized as formatted)
  • Bust-A-Move 4
  • Ducati World Racing
  • Hundred Swords
  • Q*bert
  • Resident Evil 2
  • Sega Rally 2 (poster child for WinCE issues)
  • Tom Clancy's Rainbow Six

Weak rumble in numerous titles

Description:
Some games exhibit weak/faint rumble during gameplay. None seem to be WinCE games.

  • Maybe a bug in the vibeHandler function? (unlikely)
  • Or these games use continuous vibration, and the incomplete implementation is only generating one pulse and ending, instead of repeating the pulse until AST is hit (more likely)

To-do:
Capture logic traces with HKT-7700+Performance TremorPak and MaplePad to compare behavior.

Affected titles:
(tested on 1.4b)

  • Fighting Vipers 2
  • Looney Tunes Space Race
  • Macross
  • Marvel vs Capcom
  • Mr. Driller
  • Powerstone 2
  • Sega Marine Fishing
  • Soul Calibur

Support SOCD cleaning (Simultaneous Opposing Cardinal Directions)

It would be nice if MaplePad supported (if it doesn't already) SOCD cleaning, which is used on button style joysticks (Hitbox). Often games don't know how to handle opposite directions since they were made with Joysticks / D-Pads in mind.

Ideally it would have options for different types of SOCD options:

  • Off (don't filter)
  • Neutral (L + R = None & U + D = None)
  • Neutral/Up (L + R = None & U + D = U)
  • Last Win (L -> R = R)
  • First Win (L -> R = L)

I2C OLED can't working and bug on 1.4b pio version

hi Sir

bug1
test 1.4b pio and found the i2c OLED display can't working , once connect I2C OLED display Dreamcast was disconnect PIO board
the screen on OLED as below
image

bug2
for the VMU, when format or copy some game save file on the VMU's last page (8th page) some times Dreamcast will disconnect the PIO board and need re-plug pio board for fix it

suggestion
now the FW is 1.4d but can't working on PIO board as my tested , is it possible for keep update PIO version FW?
and is it possible for read VMU file via USB port?

Erroneous Right/Down constant pressing when used with separate controller.

I am current using the software of this project as a separate VMU to use with my console, it appears and functions perfectly however it will cause the directional pad Right or Down operations to constantly occur after being pressed on a controller connected to a different port. This can be fixed by pressing the button again, but makes any sort of gameplay incredibly difficult.

System thinks VMU has an executable file installed

Description:
Homebrew and retail SW seem to think the virtual VMUs have executable files (i.e. VMU minigames) installed, even when they're freshly formatted on a first boot.

To-do:
Read through VMU filesystem docs and figure out how executable file presence is specified, and what's wrong with MaplePad's implementation. Maybe a FAT thing?

Only works on first controller port

Finally got this working, but I wired one and I found that it only works on the first controller port.

I tried it on Marvel Vs Capcom 2, which grays out the Vs mode option if there are less than two controllers. The VS Mode option just blinks really fast if I connect a regular controller on the first port and a Maplepad to the second port. If I put MaplePad on the first and the stock controller on the second port, it works fine. Any ideas about what's going on?

Conflict Zone – Unsupported Device

Description:
Conflict Zone's title screen says an unsupported device is connected and will not proceed further. Fixing this might help with other WinCE titles.

To-do:
Capture logic traces with HKT-7700 and MaplePad to compare behavior.

Affected titles:

  • Conflict Zone

VMU not working in Windows CE titles

Description:
One of many, many problems with WinCE software. Some titles sort of detect the VMU, while others don't detect it at all. Some games seem to constantly connect/disconnect the controller (VMU packets clearly aren't passing some sort of sanity or CRC check, so the Maple device is being disconnected as per the spec) which can result in frame drops, stuttering and crashes in-game.

It's likely there's some underlying issue with the packet format, Maple Bus PIO engine, or packet state machine that WinCE titles are simply more sensitive to than software made with the normal SDK. There might be an additional packet format that isn't documented in the early Sega docs, or a packet I haven't implemented correctly. It could also be a MaplePad response speed issue, since tests indicates WinCE titles spam Maple reads much more rapidly than normal SDK games.

To-do:
Capture logic traces with HKT-7700+stock VMU and MaplePad to compare behavior.

Affected titles:
(tested on 1.4b/c)

  • 4x4 Evolution (VMU icon shows up, but disappears. VMU isn't recognized as formatted)
  • Armada
  • Bust-A-Move 4
  • Ducati World Racing
  • Half Life (Says VMU is full)
  • Hoyle Casino
  • Hundred Swords
  • Midway's Greatest Arcade Hits
  • Nightmare Creatures II
  • Q*bert
  • Rayman 2
  • Resident Evil 2
  • Sega Rally 2 (poster child for WinCE issues)
  • Sno-Cross Championship Racing
  • Tom Clancy's Rainbow Six
  • Wild Metal
  • Worms Armageddon
  • Worms World Party

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.