Sega Master system had basically an atari standard port, Genesis 3 button pads added select signal for swapping two pages (alternating between a/b c/start), finally 6 button controller added third page, but to trigger it you needed to pulse select line 3 times, and this was deemed to complex for discrete logic, hence microcontroller in 6 button pads.
Thanks for the contribution and wiki article -- will update the post accordingly and welcome any other feedback/suggestions. Teardowns are all about learning + community input so keep the comments coming :)
Basically you write high voltage to the "strobe" line of the shift register in the controller, putting it in a state where it continuously updates to reflect current button presses. Once you remove the high voltage, it "freezes" its 8-bit state representing whatever combination of the eight buttons were last depressed, and then you make 8 successive reads from the shift register's serial line, reading off the state 1 bit at a time. It's up to the game software to be robust against bouncing, as well as against a tricky hardware bug where the DMC module of the NES's audio processing unit conflicts with the latching mechanism used by the controller's serial line. Needless to say, this must all be emulated by accurate NES emulators, too :)
[1] http://www.datasheetcatalog.com/info_redirect/datasheet/phil...
http://eskerda.com/arduino-nes-gamepad/
Repo with full instructions: https://github.com/eskerda/arduines
http://www.nxp.com/documents/data_sheet/HEF4021B.pdf http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf (pinout for LS is the same)
http://www.ti.com/lit/ds/symlink/cd4021b.pdf
http://www.ti.com/lit/ds/symlink/sn74ls165a.pdf
I don't think the differences are relevant in this application, though.
Here's a short article on the configuration: http://www.gamefaqs.com/snes/916396-super-nintendo/faqs/5395