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.
First some background. As many are aware, there are two models of the Sega Genesis controller: the classic 3 button controller, and the 6-button controller. The 6-button controller has a complicated detection scheme that essentially requires a microprocessor to detect. The 3-button controller however, is... a multiplexer and some pull-up resistors.
Also refer to this reference for the exact pinout and button assignment.
So I decided to make one. My main purpose is for arcade-style action games, not fighting games, so 3-buttons is not a problem for me. Here are the parts I selected for this particular project:
- SN74HC157N : The Multiplexer at the heart of the circuit
- 9 x 10 kΩ resistors : The pull up resistors
- A breadboard : I used a solderless breadboard because I'm prone to mistakes, but a solder protoboard is better for a "final" design.
- Screw terminals : For connecting the buttons to the circuit securely. I used 3 x 3 pin terminals.
- A black project box/equipment case to house everything.
- Seimitsu LS-40 Joystick
- Three 30mm Seimitsu PS14-GN-KN Screwbuttons : For the Action buttons
- One 24mm Seimitsu PS14-D-N-K Screwbutton : For the start button
- DA15 port : Per above, I already had a cable spliced for this. For any dedicated Genesis projects, DE9 is much more suitable.
- Quick connects and wires
Buttons, Port and Joystick are the same as the other Joystick. I drilled holes to mount everything, and inserted it accordingly. I wired up common ground lines connected to one end of each button and the signal wires connected to the other. The Joystick already had 4 signal wires and a ground wire, so each was connected to the corresponding screw terminal. All ground wires go to the same screw terminal, while the signal wires each connect to their own. With 8 signals (up, down, left, right, A, B, C, Start) plus ground, this uses up all 9 screw terminals on my setup.
From then it was just a matter of carefully referring to the pinout listed above compared to the data sheet for the multiplexer and deciding which input is connected to which port on the chip. The select line obviously needs to be connected to the select port as well, and every button/directional input, multiplexed or not, needs a pull-up resistor. The 9th resistor is connected to the select line so it defaults high when it is not used. This will ensure compatibility with the Sega Master System as well.
And here is the result. Feel free to comment if you have any questions or need any details. Because I used the same parts and essentially the same circuit, it is 100% compatible with all Sega Genesis games, compatible systems, or any USB converters.