Really interested in putting together some kind of USB host to HID over GATT profile or Bluetooth HID to i2c/UART bridge.
We’re (Pimoroni) closing on shipping a dual RP2040 HDMI board (PicoVision) that’s great for bedroom coder style games, but lack of full fat Bluetooth support or USB HID host in MicroPython - and the relative pain of making and supporting a build that includes these features - make adding controllers… tricky.
Now I wish I’d kept the Dreamcast controller I modded with a custom cable to poke Maple bus. Hindsight!
Talking about RP2040 powered controller firmware. GP2040 is an amazing project, which is used a lot in the Fighting Game Community where custom controllers are common. https://github.com/OpenStickCommunity/GP2040-CE
I once tried putting an Arduino in an arcade stick, for reading controller inputs and sending keyboard presses via USB, but the lag was horrible. It's been on my to-do list to eventually dive enough into AVR-C to try to improve on it.
There is/was a premade board for this (don't remember what it was called), but it was quite expensive, and I didn't want to keep moving it between controllers.
The cycle accurate assembly language has enabled a number of timing sensitive FIFO data processes. What had to be done with FPGA's before has some limited support with PIO. I hope RPI increases the number of instructions and simultaneous running PIO machines in the future.
It's great to have the PIO in a smaller/cheaper device, but if that is the kind of thing that you really like, I do want to mention the BeagleBone SPUs and the Parallax Propeller / Propeller2 are similar/more powerful implementations of this concept.
I've done similar things (for a Playstation 1/2 controller) bit-banging with 8-bit microcontrollers. They often include instruction timing information in the datasheets.
I remember reading that the Maple bus used by Dreamcast's peripherals was pretty similar to USB in a lot of ways, and wondering why they didn't just use USB?
I definitely would not say this about all of Sega's hardware engineering efforts (I'm staring at you, Saturn) but the Dreamcast seemed like such a nicely engineered piece of equipment that I have always given Sega the benefit of the doubt. I assume there was an adequate reason: lower latency, cost, profits, quality control, licensing, etc. Or perhaps USB just wasn't mature enough - it was released in 1996 and Dreamcast design was probably already underway.
Not sure about the Dreamcast but with the GameCube I noticed the latency between plugging in a new controller and having the system respond to it is practically instantaneous.
I strongly suspect, but do not know, that the slowness in USB enumeration is a software stack issue on the host side of things.
If you think about plugging a USB device into a desktop OS, the OS has to check security settings, find and load a driver for the device, etc.
But as far as the protocol itself is concerned but I don't see any intrinsic reason why enumeration can't be nearly instant, for something like a console that only needs to recognize a few possible devices, each with minimal drivers that can be preloaded.
I have a modded Dreamcast free to a good home if anyone wants it and lives in Melbourne or Sydney. (I've found emulation easier for me these days, as I try to simplify my physical setup).
Very nice of you to offer, and rather tempting - though I have no time to play.
How is it modded? I recall that certain models, identified by some number on the bottom of the console, allowed burned discs to be played. What extra can you do with a modded system?
Near as I know, all DCs can boot suitably-prepared burned discs without modding. The only hardware mod I’m aware of would be to defeat region lock on original discs.
I like playing on real hardware whenever possible, but I dunno what it was about the Dreamcast. I've had three units die on me so far. Emulation is pretty much my only route left at this point, unless Sega ever gets around to releasing a Dreamcast Classic.
> https://github.com/DJm00n/ControllersInfo: HID profiles for Xbox 360, Xbox One, PS4, PS5, Stadia, and Switch
> "HID over GATT Profile (HOGP) 1.0" https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?d...
- [ ] MicroPython: wrap the Bluetooth HID over GATT Profile events and buttons
Perhaps your Dreamcast controller could do BLE and VMU wireless.