Sega MD/Genesis gampepad adapter to USB.
Adapter is actually a shield for Arduino Pro Micro based on ATmega 32U4.
ATmega 32U4 has a hardware support for fullspeed USB, thus polling rate 1000Hz is not an issue for that chip.
You can use the gerber file to order the PCB.
Attached code uses port registers so that is quite efficient. The code is based on SegaController library. That library was changed to use port registers and support HOME button. The code was tested with M30 2.4G for SEGA Genesis & Mega Drive and SEGA Genesis 6-button Arcade Pad. M30 2.4G for SEGA Genesis & Mega Drive has a HOME button and it is fully supported by the code.
One footprint is not trivial: DB9 male socket (J1). Officialy the J1 footprint (segapad2usb has been designed in KiCad) is "DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset9.90mm_Housed_MountingHolesOffset11.32mm" however it was chosen to fit LD09P13A4GX00LF Amphenol.
J2 is redundant -- you can use it to add some new features like autofire switch or sth.
Sometimes during uploading code to Arduino board you may face some issues -- then you will need to use RESET -- so SW1 can be useful if you like to develope your own code.
SW2 can be usefull to have a so-called "Hot key" -- you can need it eg. in Batocera.
LED D1 shows whether controller is working in 6-button mode. LED D2 shows is Sega MD/Genesis gampepad connected at all. LED D3 show status of Arduino (turn on in setup() function of firmware).
BOM:
Qty | Reference(s) | Description |
---|---|---|
2 | D1, D2, D3 | LEDs 3mm |
1 | J1 | DB9 Male Connector LD09P13A4GX00LF Amphenol |
1 | J2 | 2x4 Pinheader. pitch terminal: 2.54mm |
1 | R1, R2. R3 | resistors for D1, D2 and D3 |
1 | SW1,SW2 | Tact switches from Arduino breadboard projects |
1 | U1 | DIP20 socket (width 15.24mm) + Arduino Pro Micro |