USB SNES Controller

A Teensy and old SNES Controller Project.

creator: x14km2d | build: 2021-09-17 | update: 2022-01-18


In 1994 I was in the late stages of puberty and my grandmother gave me a PAL-region SNSP-001A Super Nintendo Entertainment System video game console. I have to work off some side jobs and pool all my birthday money. Before that I had already had the Amiga 500 and loved the console, but I had to have the SNES. All the cool kids had it, and I wanted it. Super Mario World was already included with the console and my best friend and I played almost every free minute. Little by little I bought The Legend of Zelda - A Link to the past, F-Zero, Super Street Fighter II and many more games. I spent a lot of pocket money on game tapes over the next few years.

I loved the graphics on the SNES, which was much nicer in terms of colors than on the Amiga 500. Also, the hardware wasn’t that complicated. We put the tape in and started the game. Wonderful if you just wanted to play for an hour. No long loading times or floppy disks to change. Nintendo had achieved a very high status as a company for me this year and even today I still wear a key holder from that time. The sound was overwhelming and I can still hum the some melodies. A console that has strongly influenced my life. Unfortunately my original broke down in 2004 due to a water damage and all I could save was a controller. Until a few days ago, he rotted away in a drawer. While researching Adafruit, I saw that the controller could be converted to USB with very simple means and immediately I had leaked blood again. Play old retro games on Linux? Yes!

My work means that I have very little time left to play. I had bought a Windows 10 (I reformatted it after a few months with a Linux distro) gaming laptop for a job at a big Finnish phone manufacturer and opened my steam account again, but most games swallow up so much time that unfortunately I don’t have. Skyrim is still super nice with all graphical modifications and the matching hardware and the game has a really good game design. But it takes a long time if you don’t do a speed run. I don’t usually do that because I want to enjoy computer games. I want to immerse myself in the world and be entertained. Since my media machine uses the Linux Mint distibution, we will also adapt the tutorial for it. I don’t use Teensy 2.0, but Teensy LC. Please note this, because there are differences in the connections.


With the Material it is best if we have an original SNES controller. I don’t know now how it is with the model from America with the ugly design, if there are other microcontrollers and so on. It shouldn’t, but why is it a different model? When we buy the USB cable, we have to make sure that the cable can also carry data. Sometimes some dealers sell cables that can only be used for power supply. I can’t say if they’re doing this by accident or cheating on us. Better ask again. You can also use the Teensy 2.0 in an emergency, but I used the LC model. This works the same way and costs on average 5€ less. Old cables (colorful, so that the inside looks nice) I have from an old project. Since I don’t throw anything away with electronics I always save money.

You don’t have to buy antistatic adhesive tape and isolation tape is usually enough. Some also use hot glue, but I’m not a friend of it, because it’s always a big mess and it’s hard to remove it fromthe components. The white and red markers are optional, because I had this fancy idea with the two logos of Nine Inch Nails and Nintendo in mind and wanted to realize this absolutely. Otherwise we need everything we should have in our toolbox. In this tutorial we are working with Linux Mint and if you want to use another distribution, you have to touch many places. With the software, the project was a little bitchy and I had to test a lot.


Before we can work on the hardware, we have to set up our development environment and install software on the Teensy LC. I had to find all the information from different sources and modify it in some places. Sometimes the information was out of date or a certain tutorial could no longer be found online. I will play the steps one after the other, but I will not copy all the individual instructions for each software. You can find them in the help files and I will link everything to current pages.

First we have to connect our
Teensy LC to our computer and test it. If the small LED flashes everything works and you don’t have to replace the hardware. Sometimes it is possible that you have a loose contact on your USB port. You can’t give up right away and you have to take a closer look if you make a mistake. If you did everything right, it should look like the video below.

The next step is to install the Arduino IDE. Unfortunately, we cannot do this via Linux package manager1, but have to install the software manually. This is because we have to install Teensyduino afterwards and it does not work with the latest versions from the package manager. Unfortunately, this is often forgotten in other tutorials and one searches there daftly until one has found the error. Furthermore, we now have to maintain the SNESpaduino library. Finally, the Teensy Loader. This should give us everything we need for the project. As already mentioned above, I won’t give all installation instructions here and in case of errors you have to go to the help files on your own. I have already implemented this several times in other projects and all possible sources of errors and their solutions are described very well.

We copy the source code for the Teensy from this page and it worked best (for me). Since we will have to test our controller later and emulate the ROM somewhere, we have to install some packages via terminal. We need ZSNES and jstest-gtk. I will not link ROM images for games here, because this is a legal grey area and you have to act on your own responsibility. Use only ROMS from your own games, Kids!

apt-get update
apt get install zsnes jstest-gtk


Before we can start working on the hardware, you should read a SNES + Teensy = USB/PS3 Controller tutorial, which is similar in some parts of our documentation. For example, I don’t describe how to get the plastic out of the inner housing of the controller, because I assume that it was already done by you before. You should also check the technical specifications and the layout of the Teensy LC tiller. So you know (which I won’t explain in detail) how to solder the cables, please also have a look at the file for the SNES / Super Famicom Joystick Data. This should give you all the information you need and fewer questions should arise. Everything else can be read from my photographs, you just have to look closely enough.

Even if it looks like this on the photos above, I didn’t cut the cables to a certain length. I left them as long as possible, because in most cases it is better to have too much than too little. With the wire stripper we remove the cover at one end so that the ends lie bare and we can solder them better. It’s not necessary (because you won’t see the cables later anyway), but I picked out some extra cables in nice colors. Of course it is better to use a black cable for GND), a red cable for VCC and so on. Unfortunately, the base colors are so incredibly ugly.

Now we will have to modify one end (which is connected to the Teensy) of the USB cable. We will remove the superfluous plastic from the case like in the Instruables Tutorial and thus create a little space, but the plug is unfortunately too big. In most of the manuals I have read on the internet, all the rubber on the plug is cut away. I found that too exaggerated and cut it off as far as possible, but only to the extent that it doesn’t all fall apart into its individual parts. I used a sharp model knife, which should be quite easy to do. If you have a plug that should have somehow installed metal, take the small side cutter with which we have already cut the cables at the top. To avoid disturbances or unwanted short circuits, I connected the end of the plug with Kapton tape. However, electrical tape should also be sufficient to secure the area.

We solder all cables tightly to the board. Since in my case the controller no longer had a plug because it broke off at some point, I had to solder on the PCB. It doesn’t make any difference now. Otherwise, follow the instructions in the other tutorials that use the connector. To avoid errors in the solder joints, we use our multimeter and test everything. If there’s a mistake, we’ll fix it. Then we bend the cables around the board and glue them with electric tape so that the other parts remain the same and do not slip.

It’s only now we’re cutting the cables. We put the Teensy on the board and look how much cable will absolutely need. Then we cut it off again with the side cutter and cut it with the wire stripper.First we solder the blue cable (may have a different color) to the 5V pin to the right of the USB connector. The orange cable comes to the 1st pink to the 5th and violet to the 3rd, the last cable is brown and comes to G (ground). If you’ve done everything just like me, you don’t have to worry about the colors. They are just an additional hint and you have to read the specifications so that you not only learn, but really understand.


We connect the controller to our laptop via USB. Then we start jstest-gtk. There we select our controller (usually a teeny is shown in the list) and press all buttons. Black boxes should appear when you press a button. Then we start zsnes load our ROM into the emulator and set our keys in the config. After that we can play and have the feeling of the original. And yes, it makes a difference whether you play Super Mario World with the keyboard or with the controller. Of course an original game and the console would be even cooler, but unfortunately they are no longer produced and u

I really enjoyed the project and I was 14 years old again. Nintendo Hardware is super good when you want to implement ideas, because it is not only very easy to set up but you can also understand them very quickly. In addition, the community is very large and you can find a lot of information very quickly on the Internet. I have to check if I have more old retro hardware in the basement, because I honestly didn’t have an overview. I’d have t

Attentive observers have certainly noticed that the two buttons on top and left were not selected in the config. I could not fix this error even after a few attempts and I don’t know where else to look. Since the housing of the controller is already old and in many places broken, I am toying with the idea of building a new controller myself and modifying it further in some places. For example, I would like to be able to use the teensy’s reset button without having to unscrew the case.

  1. The Arduino IDE LPM version on Linux Mint is horribly outdated.↩︎

Download the source file or follow this page with RSS. Some readers will want to know what Equipment I use. Who wants can Support my work or leave a Comment. Please use my PGP-Key for your submission. | 2021-2022 | Made for the Web1.1 with a Terminal and Pandoc.