Sega Saturn Controller Adapter. Microcontroller Based Demultiplexer, Discrete Output


A little over a year ago I posted this topic where I was troubleshooting a Saturn controller demuxer schematic that I found on another forum. While it worked with official Saturn pads, I could not get it to interface properly with my MC Cthulhu. With some help I ended up solving the problem and posting an updated schematic which you can see in that thread. I had hoped to design a Supergun utilizing that controller demuxer which I could use to play my CPS2 PCBs, but the problem that still remained with the design was it’s high parts cost due to being made from all discrete logic. Lots of chips = high BOM for such a simple function so streamlining had to be done. I had hoped to revisit it sooner, but life got in the way and that never really came to fruition.

Yesterday however, I got a wild hair to tinker with an online Arduino simulator, and the first idea that came to mind was to try writing a sketch that would perform the same demultiplexing logic that all of those discrete chips in the other design were being used for. In about an hour I had something vaguely functional so I transitioned to working on a real Arduino in my workshop. Several hours of debugging later I have a seemingly functional piece of hardware here that should be able to perform the same task with a single atmega328p chip instead of 7 discrete ICs and a mile of wire.

I would consider this in to be alpha status currently. I know that both official Saturn pads and MC Cthulhu boards work properly, monitored inputs and outputs on my scope, and everything looks good. The only thing I haven’t done yet is wire the test board to a jamma harness and test for latency on real hardware. I’ll probably hold off on that until after Christmas.

Here is a link to the Github repository for this project. Feel free to play with this, it was written for an Arduino uno or other compatible boards… I plan to make a dedicated pcb for this. Probably as a db15 adapter to start with, and we’ll see what else I want to do after that. Unlike last time, I think I’ll actually have the time to see this simple project through to the end.


It looks great. I am really interested in this. I was looking to build something like this on my own before I found your prototype board on osh park.

How are you sourcing the female Saturn controller connectors?


I source the connectors from controller extension cables like this. It’s not an ideal solution, but I can’t find anything better that’s in current production.

As far as the prototype boards on Oshpark, I have unshared the original v0.1 board. It has an error with one of the vias for the crystal coming into contact with a nearby trace. Don’t know how I missed that. I have a working version of the v0.1 board on the workbench that I had to cut traces and bodge some wires to get working. The current shared version is V0.4 and should be functional at this point. I have not ordered it yet because I need to do a little more work adding some pads for ISP programming the microcontroller, and I need to fix the pin pitch of the Saturn connector pads. They are slightly too close together so the connector alignment isn’t perfect.

The next version of the board that I release will in all likelihood be completely good to go.

Here’s a pic of the currently working, but sort of hacked together v0.1 board.


I ordered the boards and come extension cables and I am going to give them a shot. I picked up a cheap programmer and I am going to try and figure it all out. Thanks for your work man.


Did you order the v0.4 board? If so there are a few things to keep in mind when you build them.

If you plan to program the chip once installed on the board, you will need to solder a wire to pin 29 of the Atmega328p for reset because as of that revision I did not provide a pad for reset on the board. the other ISP pins can be found on the db15 connector. MISO, MOSI and SCK are on DB15 pins 2, 10, and 11 respectively. Also the current version of the code on Github needs to be updated to reflect the new pin assignments the current PCB. I’ll definitely have that done before you get your boards from Oshpark.

Looking forward to hearing your feedback once you’ve got one put together.


I will keep you posted as things come in. I am in Canada so it takes a while.

Did you leave some of the db15 pins unconnected or can you reprogram for every pin? I used pin 2, 9 and 10 for the extra 3 buttons in 6 button games. Would it be possible for me to drop those assignments into the code?


Not sure if this applies but a member from, RGB, makes DB15 to Saturn adapters. Wasn’t sure if you’re aware, maybe you guys can share info. His supergun has the ability of reprogramming buttons and turbo. So does his DB15 pass-through for Neo, this makes it super easy to swap B and C for some games for me, like Karnov’s.



I use the same pinout as Undamned for his usb decoder.

All of the outputs can be remapped in the code by changing which pin they are defined to. As of the current board revisions I do not have pin 3 or 9 wired to anything because the only other buttons available for them on the Saturn pad are L and R which I didn’t think would be of much use. If people are using 3 and 9 in some DB15 pinouts, I could definitely wire them in a future board.

I’m planning on adding on the fly button remapping to the code at some point, but I haven’t quite settled on how to approach it yet.

I’m aware of his adapter. I wanted to make something that was open source that anyone could build themselves.


I did on my board but I am not sure what others are doing. I guess my thought was to make sure all 15 pins are connected so that can be mapped if people choose to.


I see, I’ll add those to my next board revision. I had thought that most people were using a pinout similar to what undamned uses, so I didn’t think they’d be necessary. If you’re not opposed to bodging a couple of extra wires on the board you could connect pins 1 and 32 from the ATMEGA328P to pads 3 and 9 on the db15 connector.


I am new to this stuff so I looked for a standard pin out and couldn’t find it. I can do those bodges when it arrives for sure.