USB SNES controller with Teensy LC

Retro Gaming / Hardware

Preface

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 (M. Bison, Blanka and Dhalsim) 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. Gamble 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.) 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 Linux Mint Distibution, we will also adapt the tutorial for it. So there is no Microsoft Windows content here! I don't use Teensy 2.0, but Teensy LC. Please note this, because there are differences in the connections. I had also planned to repaint the housing of the controller, but had never done so. This will be implemented in a later tutorial, because overall the hardware has suffered a lot in recent years.

Materials

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 from the 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.

  • SNES controller (original)
  • Teensy LC
  • Old cable (different colors)
  • Wire stripper
  • Multimeter
  • Side cutter pliers
  • Antistatic adhesive tape
  • Soldering iron and Solder
  • Saefty googles
  • Computer with Linux Mint (or other Linux distro)
  • Screwdriver
  • Isolating tape
  • Sharp model knife
  • White and red permanent marker (optional)

Realisation Software

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 laptop (or 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 manager, but have to implement it 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 sudo apt-get. We need and jstest-gtk. I will not link the ROM image for games here, because this is a legal grey area and you have to act on your own responsibility.

    sudo apt-get update
    sudo apt get install zsnes jstest-gtk        

When we have done all this (this can take longer than expected) we can finally deal with the hardware.

Realisation Hardware

Before we can start working on the hardware, you should read a the 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.

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 colours 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.

At this point I had a spontaneous idea that I absolutely had to implement. I put the logos together as NINtendo mashup and transferred them with a red and white marker to the back of the board. As I already mentioned above, you don't always have to recreate everything exactly as you read it in this documentary. I would even like you to be creative yourself. This way your projects become something very individual and in the best case you can even improve idea and optimize the technology. This is how electrical engineering and science work, you steal an idea from an great inventor who is much better than yourself and become successful with it. I have also followed various instructions and built on this knowledge. By the way. The quotation standing on the shoulders of giants is not the original by Sir Isaac Newton, but was already used by Bernard of Chatres. If you notice that at a party, a lot of diggers will hate you for your knowledge.

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 what you are doing. The blunt copying of movements and techniques is far from making sense.

When we're done soldering, we can finally reassemble the controller. To do this, we take the individual rubber parts and buttons that we have put aside in a safe place and put them back into the housing (as can be seen in the photos). If you have problems with this, take a very close look at the lower case. There you will find all information on how to insert the components. For example, on the button for the left side (left index finger) there is a big L and also on the case is a small L. This is like a very simple puzzle and you should really have no difficulties to finish it in the right order.

Software test

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 used which are really expensive. I'm not buying the SNES Mini, because that's kind of unfaithful.

Conclusion

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 to take an inventory in the basement anyway, so far I've been able to avoid it successfully.

Attentive observers have certainly noticed that the two buttons on top and left were not selected in the config (screenshot). 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. I still have a few ideas and will take a closer look at them in due course.