Some days ago, I took apart my SNES gamepad to connect it to an Arduino. And I was astonished by the fact how simple the electronics inside are. OK, I have to mention that those controllers were manufactured since 1990…
Basically, the gamepad consists only of 12 buttons, 2 resistors, 1 capacitor and 1 IC.
This Gamepad is a model SNSP-005, made in Japan. On the front side there are the Buttons A, B, X, Y, Start, Select as well as the digital D-Pad (Up, Down, Left, Right). There are also 2 shoulder buttons, which distinguishes the SNES controller from its older brother, the NES controller, which only has 8 buttons (A, B, Start, Select, Up, Down, Left, Right).
On the back there are the model number, the Nintendo logo and 5 screws (phillips heads), which have to be unscrewed to open up the controller’s case.
Teardown: The design
When all screws are removed, the back part of the controller’s case can easily be lifted off. Inside is the main PCB (in total, there are 3, but more about this later). It’s a single-sided PCB, the only part on the back of it is the internal connector for the connecting wire, which is held in place by 3 plastic posts to provide strain-relief.
The PCB itself isn’t screwed in place, it’s just held by the case. The PCB’s front side reveals its technology: From one of the connector’s pins, there are conductor paths leading to all 12 buttons, all over the PCB. Those buttons consist of 2 pads of conducting material (graphite?) on the PCB. When a button is pushed, a rubber membrane pushes another conducting pad down to connect the 2 pads on the PCB, closing the circuit.
We can now suspect that those conductor paths leading to all 12 buttons are connected to 0V/GND. If all pads were supplied with +5V, there would likely be problems with input at the IC, due to voltage losses or “high” currents. It’s more convenient to use pull-up resistors supplying +5V on each IC pin and pull the pin to GND.
The shoulder buttons are a bit special: They function the same way, but sit on 2 separate PCBs. They are only connected to the main PCB through 2 tiny wires each, and held in place by plastic inforcements from the back of the case. “Efficient Design”…
The IC: Parallel to Serial Shift Register
As 2 of the 5 connection pins are used for +5V and GND, there are 3 pins left for the communication.
Each of the main IC’s pins lead to a button. Aside from +5V and GND, 3 more pins are connected directly to the connector. So I suspect the IC to be a shift register. A short online research confirms that, although I wasn’t able to find that specific part’s datasheet. The model number says TG 9732H V520B (32nd Week 1997, 5V 20 Pin shift register?)
As I already know the basics of Serial to Parallel shift registers, I know these things have a Clock-pin, a Latch-pin and a Data-pin. The Serial to Parallel shift register uses Data as an input, its voltage is interpreted as a bit on each rising edge of a Clock pulse and stored internally. The Latch pulse triggers the output, the data from the internal storage is taken to supply voltage to each output pin (parallel).
Obviously, the chip inside the gamepad functions the other way around: 12 pins (parallel) function as inputs. The Latch pulse triggers the inputs to be stored internally, and the Data line is set to High or Low for each bit, which is put out after another by sending a pulse on the Clock line.
So I think the IC has internal Pull-Ups. The 2 resistors on the board are pull-ups for 2 of the communication pins, which most likely are Clock and Latch, as Data is an output. (Checked that, yes they are). So it could be that Clock and Latch trigger on the signal’s falling edge. I didn’t test that, but it should be easy to find out.
Nintendo put simple and robust electronics into the SNSP-005 Super NES (PAL) Controller. Some buttons, 2 pull-up resistors, 1 capacitor (smoothing out voltage drops?), and a shift register, that’s all there is to it. Unfortunately, I don’t know the exact price a controller has cost back in these days. But I think Nintendo made lots of money with this.
Personally, I just love the simplicity of the design. After some experiments, I might build my own “SNES Controller”, as I still have a Super Nintendo Entertainment System. And because the design is so simple, it was very simple to connect the gamepad to an Arduino. Additionally, this should mean that it’s also simple to write a SNES Controller emulator running on the arduino. Speedrun cheats, anyone? ;)
There is one special thing, not everybody is aware of:
In the case, there are holes for each of the 4 buttons A, B, X and Y, all labeled internally. Those 4 buttons are labeled Blue, Green, Yellow and Red. That’s how I always knew this controller. But there are also 2 additional labels, indicating that 2 buttons were purple, 2 “lavender”. This is for the North-American NTSC version, which looks completely different from the European and Japanese PAL version.
Finally, here is a complete list of all parts inside the gamepad:
|Case front||56V302 S-3|
|Case back||56V303 S-2|
|2x Rubber-Membrane L/R|
|4 Buttons (Blue, Green, Yellow, Red)||C-X, C-Y, C-B, C-A|
|Shift Register||TG 9732H V520B|
|2x PCB Shoulder Buttons||56V314|
And, of course, 4 wires for the shoulder buttons’ PCBs and a 5-wired Cable for the plug connector.
This connector has a total of 7 contacts, divided into 3 / 4 contacts to ensure this can only be plugged in the right way. Pins 5 and 6 are not connected (N/C).
This was a complete teardown of the SNSP-005 Super NES (PAL) Controller. I hope you enjoed this, and perhaps learned a bit from it.
As I increasingly engage in electronics, I plan to do more of these look-insides for electrnic gadgets. If you have any ideas or recommendations which device I should tear apart next time, please leave a comment.
Please head over to the German version of this article to view the picture gallery containing 12 images at the end of the post.