Zerk Zone

Pages for the Creations of Ryan Armstrong

Teensy-based XInput Arcade Stick

Posted on January 20th, 2019 @ 11:41 am by Zerker

Having built a couple joysticks and devices since then, it seemed about time to revisit the first joystick I made: the PC/SNES stick. My original stick still works well, but there were a few minor issues that started adding up:

  1. No direct support for XInput games or games with limited controller compatibility
  2. I accidentally used 25 mm action buttons and would have preferred the full-size 30 mm buttons.
  3. The box I picked is a bit higher than I would like

And then a bunch of minor wishlist items that started coming up (pinball buttons!) while I was thinking more about it. So I started planning and found the MSF-XINPUT library by Zack Littell, which then directed my attention to the Teensy LC. This also informed my use of the Teensy 2.0 on the previous project, as both were planned concurrently. I also still wanted SNES-compatibility, but the Teensy uses 3.3V logic while the SNES uses 5 V logic. So this also meant a line-level converter, but I conveniently already had a 4-channel one from Adafruit. Beyond that, it was just a matter of finding a suitably-sized box, and ordering a bunch of arcade parts including my current favourite stick, the Seimistu LS-40.

(more…) Comments (0)

Filed under: Hardware |

Sega Genesis/Master System to USB Converter

Posted on December 24th, 2018 @ 9:42 am by Zerker

With my Sega Genesis arcade stick, and a more recent Master System/C64 stick I put together, I have been increasingly unhappy with commercial Genesis to USB converters. The one I have essentially assumes a 6-button Genesis Pad, and doesn’t do proper detection. This means nuisance extra button presses when using a less capable device, which is no good. So I decided to make my own.

For this project, I decided on the Teensy 2.0, which gives me a small size, good IO complement, nice USB features, and most importantly: 5 volt logic.

Mechanical design was pretty basic: just a small project box, a DE9 connector, wiring to the Teensy and some drilling/dremelling. The Teensy, however, seems to be designed to mount directly by pins into a protoboard/breadboard. Since I was wiring directly to the board, I needed a different solution. Thankfully, I already had some Scotch Brand mounting tape, which works extremely well for securing small PCBs into a project.

When assembled and programmed, the converter works the way a converter of this type should work. If a 1-button C64/Atari stick is inserted, that button registers as the primary button 1 only. If a 2-button Master System stick is inserted, those two buttons become buttons 1 and 2. For the 3-button Genesis pad, the buttons are 1, 2, 3 and 10, which is a customary position for the start button on Windows games. The 6-button pad therefore adds buttons 4, 5, 6 and 9 to fill out the set. Buttons 7 and 8 positions are unused; most software would expect those to be L2/R2 buttons which have no equivalent.

For source code and more information on the software, check out the github project page. Per the project page readme, I am intentionally maintaining several branches depending on the desired USB device type. Please see the readme for more information and select the branch of interest.

Comments (0)

Filed under: Hardware |

Sega Genesis to Gameport Converter

Posted on January 1st, 2017 @ 1:43 pm by Zerker

Hurray, more hardware projects. This one is a bit esoteric, and probably won’t appeal to any but the most dedicated retro gamer.

But that’s OK with me.

It started when I was getting frustrated with the quality of gamepads available for DOS games. Analog Joysticks are easy, but quality gamepads are few and far between. I had two criteria for a gamepad:

  1. It had to have a good D-pad
  2. It had to support both 2 and 4 button games, with reasonable button arrangements for each

The ‘classic’ Gravis Gamepad passes on the second point with the 2 to 4 button switch, but fails quite dramatically on the first one. Most other gamepads I looked up mirrored the Gravis pad’s four button arrangement, but unfortunately this is absolutely terrible for 2-button games.

So I made an adaptor. I picked the Sega Genesis (3 button) gamepad as my source, because, if you count the start button, it has exactly four buttons. And I recently made my Genesis arcade stick, so I’d like to use that for DOS games too.

Comments (4)

Filed under: Hardware |

Sega Genesis Arcade Stick

Posted on February 15th, 2016 @ 10:25 am by Zerker

When I was working on the USB/SNES Arcade Stick, I had originally intended it to be compatible with both the SNES and the Sega Genesis. That was the main reason I used a DA15 port; it allowed me to provide separate pins for both consoles. However, the Arduino appeared to draw too much power from the Sega Genesis on the controller port, so that idea was shelved.

I still wanted a Custom Arcade stick for the Genesis, however, so a new project was born. Due to the problem with the Arduino, I would either need to find a new microprocessor that would function as intended OR… do the project without a microprocessor at all.

Comments (2)

Filed under: Hardware |

Arduino Leonardo Custom Joystick

Posted on June 28th, 2015 @ 2:35 pm by Zerker

As hinted at in the previous post: I made a joystick. While you can buy dedicated PCBs for custom joysticks (and I would potentially recommend this for most people), I felt like doing mine a bit more manually with an Arduino instead. And here’s how it looks!



Comments (6)

Filed under: Hardware |

Why won’t my unofficial SNES adaptor work with Super Gameboy?

Posted on June 21st, 2015 @ 12:16 pm by Zerker

So recently I made myself a custom SNES Joystick. I’ll be posting about that later, but I noticed that it wouldn’t work with the Super Gameboy, despite working with other SNES games. I also noticed that my third-party PS2 to SNES adaptor as well as my NES to SNES adaptor wouldn’t work either! Something is clearly up with the Super Gameboy.

So I bought an oscilloscope.

Comments (2)

Filed under: Hardware |