Motivation for this Project - aefermiano/psxton64adapter GitHub Wiki

Nintendo 64 controller has a very good analog stick. It has a smart mechanical arrange that allowed progressive resistence force with the movement, allowing player to keep the analog in a fixed position more easily. This feature is not present in all analog controllers.

It also featured an optical movement detection instead of the potentiometers used at the time, or magnetic coupling used nowadays. For each axis, there is a disc with small holes in the border connected to the analog mechanism, with a laser-detector pair aligned to these holes. When the analog is moved, a circuit counts the times the laser is interrupted, and therefore the number of holes the laser has gone through, so it's able to know the distance that the stick has moved. The advantage of this system over potentiometers is that this optical process does not involve intermediary analog quantities that can be disturbed by noise or non-linearities. In the case of potentiometers, the analog intermediary is the voltage level. The practical consequence of this optical system is the increase of the precision, so if a player is aiming in a FPS game and keep the analog in a fixed position, the crosshair will stay steady, not trembling.

However, N64 analog stick has a severe problem (not related with the detection method): it won't last long. All the analog mechanism is built with fragile plastic, and the friction during the usage will eventually make the pieces wear down. Here are some pictures, courtesy of George Tremoulis (taken from this article):

The problem of these damaged analog sets are: increase of deadzone, decrease of controller maximum range and analog sticks harder to move. With the use, the controller will eventually become unusable.

Well, I like retrogaming so I bought a Nintendo 64 for my collection. The controller that came with it had the analog stick very damaged (not a surprise since the console was discontinued several years ago), so I started looking for options. Unfortunately none of the them were good to me, here is a list:

  • Buy a new genuine N64 controller. PROBLEM: Impossible to find, since community already consumed all the available controllers.
  • Fix the analog of my controller. PROBLEM: The only solution I found on the internet was "padding" the damaged parts with tape, and no matter how careful you are in the process, analog will never feel the same as new.
  • Buy a 3rd party N64 controller. PROBLEM: There were still some new no-brand controllers being sold last time I looked, but their construction was very poor. The main problem was (again) the analog stick, that was built with cheap potentiometers, so they were very imprecise and had a very high deadzone. I also looked for used 3rd party controllers, and the only good one I found out was a japanese model called Hori Mini. The problem was that people were asking US$70 for it, way too expensive for an used controller.
  • Buy a controller adaptor. I found this guy selling Game Cube to N64 controller adaptors, and they looked very professional. Additionally, the guy made the project files free so anyone could build his own circuit. The reason why I didn't get this adaptor was that its price + new Game Cube controller + shipping was too high for my country - at the time this article was written, a new genuine Game Cube controller was not very easy to find and price was about US$40.
  • Replace analog stick by a 3rd party one. PROBLEM: I found some Game Cube analogs adapted for Nintendo 64 controllers that promised to be the perfect replacement. The problem with them is that N64 controllers have each axis (X, Y) expressed as a byte (256 values), meaning each direction can logically have 128 values (one of them actually 127 because of the value zero). However, the real controller can only reach ~63% of this range (precision probably limited due the holes spacing in the disc used for detection of position). Game Cube analog uses the full range, which results in a very high sensitive controller when it's used in a Nintendo 64. It makes games that require precision unplayable, and cause glitches in others.

Since I was out of great options, I decided to create my own.

2020 Update: You can nowadays find decent replacement parts for your controller (I got 10 sets or something myself), so this project is not as useful as it used to be in 2012 :)