I have received many requests and while I had been looking forward to the challenge of building this adapter,
due to other not less interesting projects, it took a very long time before I finally began working on it.
But now it is finally ready. It works. You are invited to read this project's
build log for the technical
details of the path that led to the final result.
Features:
Standard Dreamcast controller support. (Tested with Sega HKT-7700 and and Peformance P-20-007)
Dreamcast keyboard support. (Tested with: HKT-4000, HKT-7600 and HKT-7631)
Standard USB HID interface. (Tested with Linux and Win7)
Works well with the nulldc emulator.
Arcade style controllers should also work. (Not tested)
Incomplete (wheel not working) mouse support. (Tested with HKT-4200)
I might eventually add support for the Jump Pack (vibration). Memory cards will never be supported by this design.
A few items based on this project or otherwise related are available in my store:
[1]: Mouse support is incomplete (wheel not working).
Schematic
Schematic
The dreamcast controller is powered directly from the USB 5 volt line. Communication
with the controller is done at 3.3v so a regulator is required for the MCU. This
simple design uses an Atmega168 running at 16MHz. At 3.3v, the documented maximum
is around 13MHz, so the MCU is overclocked. This does not seem to cause problems,
but eventually I might design a more complicated version with a level translator to
do away with this practise.
Here is a view of both connector types (console side and peripheral side) with
pin numbers.
Also, since my multiuse PCB2
is well suited for this project, here is a wiring diagram using it:
Note that the circuit should have a 3.3v regulator installed. The proper 0 ohm
resistor (or bridges) should be present for the MCU to run at 3.3v (not 5v).
Firmware
Version v1.2 November 23, 2013 (Saturday)
New features:
Dreamcast keyboard support (Tested: HKT-7600 and HKT-4000)
Increased poll rate for better responsiveness
Display an image on the LCD if present. (Hardcoded image. Not usable by emulators)
Using the .hex files
The Atmega168 has to be programmed using the .hex file. The "fuse bytes" for this
project are:
extended_fuse=0x01, high_fuse=0xd5, low_fuse=0xd7
For more information about the tools required to program an AVR microcontroller,
please visit my
AVR programming page.
Source Code (.tar.gz files):
Unless indicated otherwise, the source code is published under the GPL license. Please
consult the included LICENSE file for more information. The project compiles using the
included makefiles using avr-gcc under Linux.
Use
Thinking the adapter would probably be used with the
nulldc emulator, I made sure it would work properly. Here is a configuration
example:
Start nulldc and go to Options-> Maple->Port A. Attach the "PuruPuru Dreamcast Controller"
to the port.
Options-> Maple->Port A-> Attach...
Next, navigate again to Options-> Maple->Port A and open the configuration
window by clicking "Config keys for Player 1".
«Config keys for Player 1».
Options-> Maple->Port A-> Config...
Finally, in the configuration window, assign the controller buttons and axis. Note that
I configured the "deadzone" option to the minimum value (1%) because to me, the
game felt like it did on a real Dreamcast with this setting.
Plugin configuration
User pictures
I like seeing how others build my projects. If you build an adapter, please send me pictures and I'll add them here. February 1, 2014 (Saturday) Phil did a very clean job of converting a controller to USB. He writes: "I didn't build an adapter, but I modded the controller using ALL the parts of the controller including the cable but converting it to usb. It works great!". He adds: "I had to extend the wires, trim some plastic with a razor blade of course to fit the usb plug and I made a little black cover for the plug out of a dvd case I had laying around. All in all I think it looks good.".
January 7, 2020 (Tuesday) Someone in china built an adapter using the atmega168 mini with success.
References
The following documents were very useful for this project:
I cannot be held responsible for any damages that could occur to you
or your equipment while following the procedures present on this page.
Also, I GIVE ABSOLUTELY NO WARRANTY on the correctness and usability
of the informations on this page. Please note, however, that the procedures
above have worked in my case without any damages or problems.