Raspberry Pi Pico Converts Retro Game Controllers To USB

Raspberry Pi
(Image credit: Lee, More Fun Making It)

In the 1980s and 90s the 9-pin D-Sub connector reigned supreme across the home computer scene. Atari, Commodore, Sega and many more used the ubiquitous connector for joysticks and pads. These controllers are our interface to the retro games that we love and that's why there’s nothing quite like implementing vintage hardware in your Raspberry Pi project. This project was originally from NickZero over at Instructables but we saw this via maker and developer Lee from More Fun Making It. The project relies on a Raspberry Pi Pico to convert a 9-pin D-Sub interface to USB in order to use an old-school joystick with his Raspberry Pi 400 Amiga project.

If you’re new to More Fun Making It, you’re in for a treat. Lee specializes in retro gaming and vintage tech—building arcade cabinets and pinball machines as well as repairing retro hardware, as the YouTube channel name suggests, just for the fun of it. This Pico-powered adapter is just one of many in his portfolio of projects and definitely one of the most useful when it comes to retrogaming.

Like many Pi projects, this one was born out of necessity. After setting up his Raspberry Pi 400 to run Pimiga—he realized that his Atari-ready Zipstick joystick had no way of connecting. To remedy this issue, he delved into this project that uses the RP2040 board to convert 9-pin D-Sub input to USB.

It doesn’t require much hardware to get off the ground with this adapter. It uses a Raspberry Pi Pico as the main board with a male 9-Pin D-Sub connector soldered to the GPIO. What is interesting about this project is that it doesn't use any logic level conversion. Typically the older 9-pin D-Sub connectors run at 5V, which isn't strictly compatible with the Pico's 3.3V GPIO. If we were to build this project we would use a logic level converter or a simple voltage divider (1K Ohm and 2K Ohm resistors will work; see resistor color codes to identify them) to ensure that the Pico's GPIO remains safe. 

The housing is a simple, 3D-printed case held together with a couple of M2.5 screws and standoffs with access to both the D-Sub port and USB-C port. There is a top panel that can be removed to access the Pico hardware inside.

To aid in the construction process, Lee is using this Joystick to USB converter guide over at Instructables for help. The software used to program the adapter was created using Arduino IDE but it could be easily replicated in MicroPython or CircuitPython. We also have a guide on how to emulate Amiga on the Raspberry Pi if you’re interested in creating an Amiga-based Pi project of your own.

If you want to recreate this D-Sub to USB Raspberry Pi project, check out the original thread over at Twitter to get a closer look at how it goes together. Be sure to follow Lee for more cool retro projects as well as any updates on this one.

Ash Hill
Freelance News and Features Writer

Ash Hill is a Freelance News and Features Writer at Tom's Hardware US. She manages the Pi projects of the month and much of our daily Raspberry Pi reporting.

  • Findecanor
    A microcontroller running on 3.3V wouldn't be my first choice for a 9-pin joystick converter, but if I did I would definitely use a logic-level converter and then some external pull-up resistors.

    Many vintage joysticks with autofire are not driven by the +5V pin, but actually by the pull-up current.

    You might also be tempted to connect a Sega gamepad, but Sega also uses another pin as the +5V pin.
    Reply
  • TerryLaze
    Findecanor said:
    You might also be tempted to connect a Sega gamepad, but Sega also uses another pin as the +5V pin.
    https://github.com/ryansalerno/raspberry-pico-retro-controller-adapters#readmeSega, snes and nes version, the pinout used is in the .py for each.
    Reply
  • bp_968
    I agree about using a 5v MC. Especially if their programming it with arduino anyway.

    If someone wants to build one of these and can print a nice box/case for them ill send you a couple microcontrollers (i have the arduino mini, micro and a handful of other types in my drawer of micro controllers and SBCs. I could even russle up the resistors and stuff too and send that. I just want the printed case you end up using for my own copy :) i want to make one for SNES controllers and or sega genesis controllers.

    One of these days i need to build a arcade emulator machine to play gauntlet or xmen or TMNT on (ooh and golden axe, another epic game of the time).
    Reply
  • TerryLaze
    Findecanor said:
    A microcontroller running on 3.3V wouldn't be my first choice for a 9-pin joystick converter, but if I did I would definitely use a logic-level converter and then some external pull-up resistors.
    bp_968 said:
    I agree about using a 5v MC. Especially if their programming it with arduino anyway.
    But why?!
    The only reason 5V is the standard is because that's what the micros had back then, there is nothing in a joystick that needs any "power" (current) at all, let alone a specific amount, you just need any amount of "power" (current) to be able to distinguish if the circuit is open or closed.

    Or am I missing something here?
    Reply