Dreamcast controller to USB adapter

Introduction

Dreamcast to USB

Dreamcast to USB

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:




Pictures

My development setup

My development setup

Completed adapter

Completed adapter

Tested controller: HKT-7700

Tested controller: HKT-7700

Tested mouse <sup>[1]</sup> : HKT-4200

Tested mouse [1] : HKT-4200


Controller under win7

Controller under win7

Controller under win7

Controller under win7

Mouse under win7

Mouse under win7

Performance P-20-007

Performance P-20-007

Tested keyboard: HKT-4000

Tested keyboard: HKT-4000

Tested keyboard: HKT-7600

Tested keyboard: HKT-7600

Keyboard under Win7

Keyboard under Win7

Keyboard under Win7

Keyboard under Win7



[1]: Mouse support is incomplete (wheel not working).


Schematic

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)
File(s):
dreamcast_usb-1.2.tar.gz (111.1 KB)
dc_usb-1.2.hex (22.7 KB)
Show previous releases...
Version v1.1.1
November 2, 2013 (Saturday)
Increased timeout waiting for an answer. Fixes Performance P-20-007 dreamcast controller.
File(s):
dreamcast_usb-1.1.1.tar.gz (106.3 KB)
dc_usb-1.1.1.hex (18.1 KB)
Version v1.1
October 27, 2013 (Sunday)
Initial release:
  • Standard controller support.
  • Incomplete mouse support (wheel not supported).
File(s):
dreamcast_usb-1.1.tar.gz (106.2 KB)
dc_usb-1.1.hex (18.1 KB)
This project is also available on GitHub!
To request features, report issues or contribute, you may send me an email or use the GitHub repository:
https://github.com/raphnet/dreamcast_usb
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...

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

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

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:


Disclaimer

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.

Now you cannot say that I did not warn you :)