The Super Nintendo controller is one of the best gamepads ever made. This tutorial will show how you can breathe life into your old SNES controller so you can use it with your PC and your PS3.

You will need the following items:

SNES Controller 
Teensy 2.0 USB Board (http://www.pjrc.com/teensy/ )
USB Cable (http://www.pjrc.com/store/cable_usb_mini_b.html )
Soldering Iron
Solder and Flux
Wire Stripper
Slip Joint Pliers
Needle Nose Pliers
Diagonal Pliers
Knife or Blade
Philips Precision Screwdriver

Step 1: The SNES Controller

Remove the 5 screws from the back of the SNES controller and pull the back of the controller off. We can see the back of the PCB and the wire harness connector. Remove the wire harness. We are going to use the wire harness to attach the Teensy, so be careful when removing it.

Step 2: The Teensy USB Board

Think of the Teensy as a tiny computer we are going to program to behave like a USB/PS3 gamepad. All we have to do is hook up the SNES wires to it.

First, we need to put our program onto the Teensy. Download the Teensy loader application at:


Next, download our USB/PS3 program for SNES from:


This file is the program we are going to run on the Teensy. It tells the Teensy to behave like a PS3 controller. If you are a programmer, feel free to grab the source code and make your own modifications. I also have a hex file that tells the Teensy to treat the SNES gamepad like a USB Keyboard, which is useful for some Android tablets that have USB input, but don't support gamepads.

Now that we have the loader application and the hex file, we need to put the hex file on the Teensy.

Step 1: Connect the Teensy to your PC
Step 2: Press the reset button on the Teensy
Step 3: Select the hex file you downloaded above with the loader application.
Step 4: Press 'Program'
Step 5: Wait a few seconds...
Step 6: Press 'Reboot'
Step 7: Wait a few seconds...
Step 8: You are done programming the Teensy!

Additional instructions for connecting and programming the Teensy can be found at http://www.pjrc.com/teensy/first_use.html

Step 3: Stripping the wire harness

Strip the wire harness so it looks like the picture. When stripping the wires, note that they have threading inside that will need to be clipped away. You only need to expose a small tip of each wire, we are going to solder that into the Teensy.

Step 4: Soldering the wire harness to the Teensy

Solder each wire into the Teensy as follows:

White Cable (VCC)         -> Teensy VCC
Yellow Cable (CLOCK)  -> Teensy PB0
Orange Cable (LATCH) -> Teensy PB1
Red Cable (DATA)          -> Teensy PB2
Brown Cable (GND)       -> Teensy GND

Teensy pinout is at:

http://www.pjrc.com/teensy/pinout.html  (Teensy 2.0 Pin Assignments, Using C Language)

Step 5: Making room for the Teensy

We need to modify the back of the SNES controller case to make room for the Teensy. The picture shows the 2 spots that need removed. First clip the plastic, then use the needle pliers to peel the plastic away from the base. When you are finished, it should like the bottom-right picture. The free space we just created is where we are going to put the Teensy.

Step 6: Put the USB cable on a diet

The head of a USB cable is fat. We need it slim so it will fit inside the SNES controller case. We are going to cut away the rubber housing around the connector. Put the connector on it's side and hold it with pliers. Follow the edge and cut gently with a blade for each side. WARNING!!! DO NOT PUT YOUR FINGERS NEAR THE BLADE!!! When you are done it should look like the right side of the picture. Wrap the wire we just exposed with some electrical tape.

Step 7: Putting it all together

Connect the wire harness to the connector on the PCB. Wrap the USB cable around the notches that lead out of the casing. Now, VERY GENTLY, put the controller back together. Watch out for pinched cables and pinched Teensies! Take your time with this, it takes me a couple minutes to get everything situated just right. Put the 5 screws back in and bask in the glory of your hard work. You now have a USB/PS3/KEYBOARD gamepad that can be reprogrammed to be whatever you want it to be!

Step 8: Button Mappings

Button Mappings:

A -> Circle
B -> Cross
X -> Triangle
Y -> Square
L1 -> L1
R1 -> R1
Up -> Up
Down -> Down
Left -> Left
Right -> Right
Start -> Start
Select -> Select

Virtual Button Mappings:

Select + Start -> PS Home
Select + L1 -> L2
Select + R1 -> R2
Select + Start + L1 + R1 -> Reboot (for when you want to load a new program with the Teensy loader application)

You can test your new gamepad in Windows 7 by running "joy.cpl". Highlight the controller and select 'Properties'.

Step 9: Credits

For awesome instructions on reading data from the NES pins (SNES is similiar):


For amazing details on SNES/NES pinouts:


For blowing my mind with PS3 Home button support (This code is the basis for what we are using here):


For developing a kick-ass, affordable and easy-to-use USB board:


<p>the hex code keeps turning the teensy on and off and it won't show that i'm using a virtua stick what could be the problem&quot;</p>
<p>same here</p>
<p>So what exactly could you do on a ps3 or pc with this controller? </p>
<p>Hi I'm trying to build this as a christmas present for someone but I've hit a hurdle on two boards.</p><p>My Teensy 2.0 shows up as &quot;Virtua Stick High Grade&quot; for a second then becomes &quot;USB Input Device&quot;</p><p>My Pololu A-Star 32U4 Micro also shows up as &quot;Virtua Stick High Grade&quot; but constantly disconnects and re-connects.</p><p>Can anyone offer a solution to either of these problems?</p>
Does the controller still work? Teensy tech support may be able help
<p>Thank you for replying so promptly to my last message (can't say the same for myself). The solution was simple. It would help if the 5V line hadn't slipped out of the breadboard. It worked and the controller mod was a gift well received.</p><p>Any ideas why the A-Star board behaved the way it did? Do note the PB0 isn't broken out on the A-Star but the Teensy didn't mind when I had CLK not attached.</p>
<p>where is the source code? I need to make a lot of adjustments to this program so that I will be able to use it for a class project.</p>
<p><a href="https://github.com/johnburkert/YeOldeJoystick/" rel="nofollow">https://github.com/johnburkert/YeOldeJoystick/</a></p>
I've tried now and it works :)
This is great, I've been waiting to do this for ages. Would this work with a PAL gamepad? If not, what changes should I make? <br> <br>Thanks! :D
Can this work for the Teensy 3.0?
Could I use a ATMEGA32L-8AU MCU AVR Development Board for this? <br>e.g. http://www.ebay.co.uk/itm/ATMEL-Minimum-Development-Board-Core-System-Shield-Board-for-Atmega32-Mega32-AVR-/281012534396?pt=LH_DefaultDomain_0&amp;hash=item416da6fc7c
Cool! I hadn't heard of these Teeny things, thanks for the intro :D
this is really cool but im guessing using different codes can this be done with an NES controller also? have you ever tired it?if so would you be willing to post the codes for us to use? <br> <br>Thank you
does this work with Teensy++
yes, but you will need to make changes to the makefile for the different processor and the pin locations are different on the Teensy++.
Ok thanks, I was wondering if you can modify the make file and compile for me because I'm not familiar at all on how to modify the files.
Excellent instructable! I'm trying a different approach - using the exact same circuit and code, but keeping the Teensy outside of the controller. I created an SNES controller &quot;jack&quot; by cutting a cheap controller extension cable in half, and connecting the corresponding wires to the Teensy. This allows you to plug the SNES controller into the circuit instead of modding the actual controller. The downside of course is that you have to create some kind of housing for the Teensy, SNES jack and the USB. I'll let you know if it turns out as expected.
Very cool. I have a famicom project I am working on with an external teensy and I was going to use one of these:<br><br>http://www.hammondmfg.com/dwg9.htm<br><br>My local Fry's carries them. Good Luck!
I posted a follow-up tutorial using this same hack with a joystick.&nbsp;<a href="http://www.instructables.com/id/SNES-Super-Advantage-Teensy-USBPS3-Gamepad/">http://www.instructables.com/id/SNES-Super-Advantage-Teensy-USBPS3-Gamepad/</a>
So your project is the first half of this?<br> <br> <a href="http://ladyada.net/make/usbgamepad/">http://ladyada.net/make/usbgamepad/</a><br>
We go about it differently. They solder directly to the pcb. I read the output and convert. I like my solution better.
Do you know why they did it their way as opposed to how you did it?
Their way takes a lot more time and effort. The only reason to do it that way is if the controller's chip is dead. They are bypassing the chip when they solder directly to the pcb. The advantage of my way is it works with any snes controller (even the super advantage joystick) and it takes less time. But if your controller is busted, then soldering to the pcb is the only way to do it.
Thanks for the explanation, that would make sense. Though it seems to me that their way would work with any, where as your way would only work with a functional controller.
Awesome retro hack!

About This Instructable


125 favorites


More by johnburkert: SNES Super Advantage + Teensy = USB/PS3 Joystick SNES + Teensy = USB/PS3 Gamepad
Add instructable to: