
C64-Joystick Switcher
tebl/C64-Joystick-Switcher
Wanted a joystick switcher for my Commodore 64, so I built one by adapting C64 Mega Switcher for use with Atari-style joysticks.

Adapter for using Sega Mega Drive/Genesis controllers on a C64, with builtin port switcher so no more cable switching!
C64-Mega Switcher is an open-source printed circuit board by tebl, from the tebl/C64-Mega-Switcher repository on GitHub. It is a 2-layer board of 49.3 × 81.5 mm with 34 parts on 40 nets, routed with 477 tracks and 64 vias.
It is built around the 74HCT4053D, NE555 and BC547. Its parts include 12 diodes, 7 resistors, 5 connectors, 3 capacitors and 3 ICs. It belongs with the retro computing and games and interfaces and adapters boards of this library.
With 8bitdo starting recent productions of new quality wireless controllers for the Sega Mega Drive/Genesis, I thought it was time to look into adapting the usage of these with the Commodore 64. Normally a controller of this type would be HARMFUL to your C64 WITHOUT using of a suitable adapter, a great one was made by SukkoPera a while back and I've taken a lot of inspiration as well as lifting a couple of the kicad footprints from his OpenC64MegaDrivePadAdapter. What this project aims to add into the mix is a way of swapping the active port your joystick is connected to at the press of a button, that way you don't have to fiddle around with cables every time you try out a game that for some reason insists on having the joystick in the other port!
I could probably have made one that was a lot smaller by using SMD, or possibly even a lot more dynamic one by the use of an AVR at it's core, but I wanted one that was easy to build and does not require any other skills than pointing the hot end of a soldering iron to the requisite parts. Hopefully it'll be something anyone can build and have fun with!

Soldering together the few components should be easy going as long as you have access to reasonable tools, personally I'm using a cheap soldering station with adjustable temperature so no need to go expensive if you don't have to. Use 60/40 soldering tin, the lead free makes to job a lot harder if you're new to the hobby.
Start by studying the PCB, both sides and perform dry fits to see that you have an idea of where everything goes since removing things is always a lot harder than getting it right in the first place (match orientation to symbols, see gallery images for reference if you're unsure). The diodes are installed standing, the stripe goes into the board so that it is laying directly against the board - a hint for making these look pretty, is wrapping one of the wires around a small screwdriver to get the loops looking almost identical!
The female DB9 connectors used for port 1/2 comes with a metal shroud, this comes off when you remove the two screws that would be in the way anyway. Given that the C64 ports are made out of plastic, the metal shroud is not needed though you could possibly keep it by gluing it to the connector if you really wanted to and then filling in the screw holes with solder to keep them together afterwards. Do a testfit of the connectors with the C64 before soldering them to the board, this is recommended in order to avoid adding any stress to the C64 board, usually I keep the metal anchors as they keep the connector from wriggling around too much.
I recommend putting something underneath the board, so that it isn't flexing too much when pressing the buttons. Nylon standoffs cut to size, extreme amounts of layered tape - you decide what works best for you and whatever leftovers you can find in the parts-bin!

Firmly insert the switcher into the C64, making sure that it is inserted the whole way and fits firmly without feeling loose. When playing a game, if you encounter a game that expects a joystick inserted into the other port, just press the button for the port you want to use instead. The module supports alternate fire, in other words the second button that was found on the ill-fated Commodore 64 Games System console - this works, but I've so far only tested it with Robocop 2 on cartridge.
WARNING!
The supplied KiCad files should be sufficient as both a schematic and as a starting point for ordering PCBs (basically you could just zip the contents of the export folder and upload that on a fabrication site), the schematic is also available in PDF-format and this is what you'll need to print and work your way through this things don't work as expected after assembly.
Most parts should be easy to get a hold of from your favourite local electronic component shop, but given that I don't have access to such shops where I live so everything was based on whatever I could get cheapest from ebay/AliExpress (free shipping, plan on usually waiting 3-4 weeks though). Parts listed in parenthesis are optional and is only used for the secondary fire button, so you can safely skip these unless you want the whole thing built in one go (BC547 can be substituted with a 2N2222 connected the wrong way around).
| Reference | Item | Count |
|---|---|---|
| PCB | Fabricate using Gerber files (order) | 1 |
| C1-C3 | 100nF capacitor | 3 |
| D1,D2 | 5mm LED | 2 |
| D3-D12 | 1N4148 diode | 10 |
| R1,R2 | 10k ohm resistor | 2 |
| R3,R4 | 220 ohm resistor | 2 |
| R5,R7 | 2k2 ohm resistor | (2) |
| R6 | 100k ohm resistor | (1) |
| Q1 | BC547 TO-92 transistor | (1) |
| U1 | 74HCT4053 or CD4053 DIP-16 | 2 |
| U3 | NE555 DIP-8 | 1 |
| SW1,SW2 | SPST momentary push button | 2 |
| JP1 | 2-pin straight header | 1 |
| J1,J2 | Female DB9 right-angle connector | 2 |
| J3 | Male DB9 right-angle connector | 1 |
| J4,J5 | 2x2-pin straight header | 2 |
| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 1N4148 | Diodes_THT:D_DO-35_SOD27_P2.54mm_Vertical_AnodeUp | D3, D4, D5, D6, D7, D8, D9, D10, D11, D12 |
| 3 | 100nF | Capacitors_THT:C_Disc_D4.7mm_W2.5mm_P5.00mm | C1, C2, C3 |
| 2 | 10k | Resistors_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2 |
| 2 | 220 | Resistors_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R4 |
| 2 | 2k2 | Resistors_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R5, R7 |
| 2 | 74HCT4053 | Housings_DIP:DIP-16_W7.62mm_Socket | U1, U2 |
| 1 | 100k | Resistors_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R6 |
| 1 | BC547 | TO_SOT_Packages_THT:TO-92_Inline_Wide | Q1 |
| 1 | B_SEL | Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm | J5 |
| 1 | C_SEL | Pin_Headers:Pin_Header_Straight_2x03_Pitch2.54mm | J4 |
| 1 | Mega Drive | RND:DSUB-9_Male_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm | J3 |
| 1 | NE555 | Housings_DIP:DIP-8_W7.62mm_Socket | U3 |
| 1 | P1_LED | LEDs:LED_D5.0mm | D2 |
| 1 | P1_SEL | Buttons_Switches_THT:SW_PUSH_6mm | SW1 |
| 1 | P2_LED | LEDs:LED_D5.0mm | D1 |
| 1 | P2_SEL | Buttons_Switches_THT:SW_PUSH_6mm | SW2 |
| 1 | Port 1 | RND:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm | J1 |
| 1 | Port 2 | RND:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset7.70mm_Housed_MountingHolesOffset9.12mm | J2 |
| 1 | UP | Pin_Headers:Pin_Header_Straight_1x02_Pitch2.54mm | JP1 |
It measures 49.3 × 81.5 mm and has 2 copper layers, 1.6 mm thick.
34 parts, built around the 74HCT4053D, NE555 and BC547. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the tebl/C64-Mega-Switcher repository on GitHub, at the commit this page was made from: the board is C64 Mega Switcher.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask tebl before reusing the design.

tebl/C64-Joystick-Switcher
Wanted a joystick switcher for my Commodore 64, so I built one by adapting C64 Mega Switcher for use with Atari-style joysticks.

tebl/Amiga-Mouse-Switch
An attempt at building an automatic Amiga Mouse/Joystick switch (when used with Amiga port 1) - pushing the button changes the device connected. No more two-cable Merengue for me on the Amiga 500, forever more!



s13n/AES42HAT
A digital audio interface in the shape of a Raspberry Pi Hat for AES42 microphones and more.


