6 ms·
Hmm, I am not 100% sure, but I recall the NES gamepad uses an 8 bit shift register not a microcontroller.
by kh_hk 11y ago
Hmm, I am not 100% sure, but I recall the NES gamepad uses an 8 bit shift register not a microcontroller.
- jpwright 11y agoYup! It's a humble 4021N.
- kh_hk 11y agoHumble indeed, I find it really clever
- fictivmade 11y agoDave from Fictiv here - 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 :)
- 6502nerdface 11y agoYes! Also goes by part number 74LS165 (edit: actually they are just similar) [1]. Here's how to use it in your game code: http://wiki.nesdev.com/w/index.php/Standard_controller http://wiki.nesdev.com/w/index.php/Standard_controller 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/philips/74HC_HCT165_CNV_2.pdf.shtml http://www.datasheetcatalog.com/info_redirect/datasheet/phil...
- kh_hk 11y agoMaybe relevant, a while ago wrote a post about using an Arduino to interface a NES gamepad as HID device. http://eskerda.com/arduino-nes-gamepad/ http://eskerda.com/arduino-nes-gamepad/ Repo with full instructions: https://github.com/eskerda/arduines https://github.com/eskerda/arduines
- cnvogel 11y agoLook closely, the '165 is a little different, both in functionality and pinout. You'll not be able to swap in one for the other. -- But yes, both are parallel in, serial in/out shift registers. http://www.nxp.com/documents/data_sheet/HEF4021B.pdf http://www.nxp.com/documents/data_sheet/HEF4021B.pdf http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf http://www.nxp.com/documents/data_sheet/74HC_HCT165.pdf (pinout for LS is the same)
- duskwuff 11y agoThe 4021 and 74LS165 are similar, inasmuch as they're both PISO shift registers, but they're not the same part. Here's representative datasheets for both parts from TI: http://www.ti.com/lit/ds/symlink/cd4021b.pdf http://www.ti.com/lit/ds/symlink/cd4021b.pdf http://www.ti.com/lit/ds/symlink/sn74ls165a.pdf http://www.ti.com/lit/ds/symlink/sn74ls165a.pdf I don't think the differences are relevant in this application, though.
- mrob 11y agoBouncing isn't an issue if you poll the button state once a frame, because almost all switches will finish bouncing within 16ms.
- dyselon 11y agoSNES is a 12 bit shift register, as well.
- Orangeair 11y agoTechnically a 16-bit register if I'm not mistaken (but that's just splitting hairs; it only uses 12 bits). Here's a short article on the configuration: http://www.gamefaqs.com/snes/916396-super-nintendo/faqs/5395 http://www.gamefaqs.com/snes/916396-super-nintendo/faqs/5395
- rasz_pl 11y agoYes, its Genesis 6 button Pads that used microcontroller. 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.
- arantius 11y agoCouldn't help but notice this. The next page down, in the image, they get it right. And are similarly loose with their terminology throughout the article.