User Tools

Site Tools


controls:nes_snes_controller

Differences

This shows you the differences between two versions of the page.


Previous revision
controls:nes_snes_controller [2019/08/27 20:45] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +===== NES/SNES/Famicom Pad Pinouts =====
 +
 +|  {{controls:nes.gif}}  |  {{controls:snes.gif}}  |  {{controls:fami.gif}}  |
 +^NES Controller Port^SNES Controller Port^Famicom Controller Port^
 +
 +This page is divided into two halves: The pinouts (above) and the labels for them (immediately below). Farther down you'll a brief description of how it all works and a diagram detailing the internals of a SNES controller. Special thanks, as usual, to Game Lab magazine (Japanese only, sadly) and Kevin Horton who helped me wrap my head around this odd little IC.
 +
 +
 +^  Pinout Data  ^^^^
 +^Pin Name^NES Pin #^SNES Pin #^Famicom Pin #^
 +|GND|1|1|8|
 +|P/S (Latch)|3|5|12|
 +|Clock|7|6|10|
 +|Data|5|4|11|
 +|Vcc +5v|2|7|9|
 +|Data 2((Data 2 and Data 3 are not used for normal controllers. For the NES they're used for things like the Zapper and other specialized controls (Arkanoid paddle, etc). Ditto for the SNES - these lines are reserved for use with things like the Super Scope.))|4|N/A|N/A|
 +|Data 3|6|N/A|N/A|
 +
 + There's not much to it. The 4021 IC is an 8-channel parallel to serial convertor. Every time the P/S line is switched on, the IC 'loads' each of the inputs. It makes each one a single 'bit' - 0 if not pressed, 1 if pressed. Every time the 'clock' line pulses, the IC shifts one bit out the serial output line.
 +
 +This about it this way: The NES is constantly outputting a 'clock' signal - a pulse of electricity switching between on and off very rapidly. Every time the NES wants to know what buttons are being pressed, it briefly activates the 'P/S' line (think of it as a 'load' line) causing the 4021 to 'load' each button as one bit.
 +
 +If you imagine the inside of the 4021 as a conveyor belt, it's just placed each 'bit' (A 1 or 0) onto the belt, each in it's own little pocket on the belt. The 'load' line turns off, and the conveyor belt moves in time to the 'clock' signal. Every time the clock 'pulses' the conveyor belt moves one bit over, and shoves the next bit out the serial line. When all the bits are gone, the NES activates the load line and loads the next 8 bits onto the conveyor.
 +
 +There's only one more step to this with the SNES controller. As you can see below, there are two chips. One line of the 4021 is a serial input. Imagine two conveyor belts hooked together - the bottom chip shoves the bits into the end of the first one, making one long 16-bit conveyor belt. The SNES activates the 'load' line every sixteen bits and then waits while the 'clock' line shifts the conveyor 16-bits along. Once all sixteen bits are received, the load line is activated again, and the bits are reloaded onto the belt. 
 +
 +{{http://www.gamesx.com/grafx/snesnesicschem.gif}}
 +
 +There's not too much to it. The blue lines are the inputs - each one is labelled. The green line is the 'conveyor belt' connector, bridging the serial output of the bottom IC into the input of the top one. The red line is the 'Load' line. The always-pulsing clock line is pink. There are four extra buttons not used on the 2nd chip, you can see they're not attached. Each line is held "high" by the +5v power and the 10k ohm resistor (see the [[http://www.gamesx.com/misctech/controltech.htm|Controller Primer]]) until a switch is pressed, grounding the pin. To make a NES connector, simply ignore the second IC.
 +
 +{{controls:nesicschem.gif}}
 +
 +Please note the changes: Button A routed to pin 1, B to pin 15, pin 11 routed to ground.
 +
 +For a more complicated explanation of the SNES communication protocol, see [[http://www.gamesx.com/controldata/snesdat.htm|our old page]].
 +
 +On SNES controller boards manufactured by Mitsumi a single custom chip is used. The schematic is shown below for reference.
 +
 +{{controls:snes_mitsumi_upd.gif}}
 +
  
controls/nes_snes_controller.txt · Last modified: 2019/08/27 20:45 by 127.0.0.1