Input devices: Difference between revisions
From NESdev Wiki
Jump to navigationJump to search
(→Hardware: a few more, some off of Tepples's birthday wishlist @ http://forums.nesdev.com/viewtopic.php?p=175591#p175591) |
(→Usage of port pins by hardware type: Removes read clock signal from controllers that likely don't actually use it.) |
||
(24 intermediate revisions by 7 users not shown) | |||
Line 10: | Line 10: | ||
** On the original Famicom, the two ports differ: $4016 D0 and D2 and $4017 D0 are permanently connected to both controllers, while $4016 D1 and all of $4017's D0-D4 are connected to the expansion port. | ** On the original Famicom, the two ports differ: $4016 D0 and D2 and $4017 D0 are permanently connected to both controllers, while $4016 D1 and all of $4017's D0-D4 are connected to the expansion port. | ||
** On the AV Famicom, only D0 is connected to the controller ports. The expansion port is unchanged. | ** On the AV Famicom, only D0 is connected to the controller ports. The expansion port is unchanged. | ||
== Programmer's reference == | |||
* [[ | * [[Controller reading]] | ||
== Hardware == | |||
* [[Controller port pinout]] | * [[Controller port pinout]] | ||
* Controllers | * Controllers | ||
** '''NES [[Standard controller]]''' | |||
** [[Arkanoid controller]] | ** [[Arkanoid controller]] | ||
** [[Bandai Hyper Shot]] | |||
** [[Coconuts Pachinko]] | |||
** [[Doremikko Keyboard]] | |||
** [[Exciting Boxing Punching Bag]] | |||
** [[Family BASIC Keyboard]] | ** [[Family BASIC Keyboard]] | ||
** [[Four Score|Four Score | ** [[Four Score|Four Score, NES Satellite]] 4-player adapters | ||
** [[Hori 4 Players Adapter]] for Famicom | |||
** [[Jissen Mahjong controller]] | |||
** [[Konami Hyper Shot]] | |||
** [[Miracle Piano]] | |||
** [[Mouse]] (SNES Mouse, Subor Mouse) | |||
** [[Oeka Kids tablet]] | |||
** [[Partytap]] | |||
** [[Pokkun Moguraa Mat]] | |||
** [[Power Glove]] | |||
** [[Power Pad]] | ** [[Power Pad]] | ||
** [[RacerMate Bicycle]] | ** [[RacerMate Bicycle]] | ||
** [[ | ** [[SNES controller]] | ||
** [[Top Rider Bike]] | |||
** [[U-Force]] | ** [[U-Force]] | ||
** [[ | ** [[Virtual Boy controller]] | ||
** [[ | ** [[Zapper]] lightgun | ||
* [[Infrared controllers]] | |||
== Other I/O devices == | |||
* [[Famicom 3D glasses]] | * [[Famicom 3D glasses]] | ||
* [[Family BASIC Data Recorder]] | * [[Family BASIC Data Recorder]] | ||
* [[R. O. B.]] | * [[R.O.B.]] | ||
* [[Battle Box]] | * [[Battle Box]] | ||
* [[Turbo File]] | * [[Turbo File]] | ||
* [[Barcode Battler]] | * [[Barcode Battler]] | ||
* [[TV-NET Rank 2 controller]] | |||
* [[FAM-NET Keyboard]] | |||
* [[Family Computer Network Adapter]] | |||
* [[Super Famicom NTT Data Keypad]] | |||
== Usage of port pins by hardware type == | |||
{| class="wikitable" | |||
|- | |||
|style="text-align: left;"|type | |||
!colspan="3" style="border-left: 2px solid black;"|output | |||
!colspan="6" style="border-left: 2px solid black;"|Joypad 1 | |||
!colspan="6" style="border-left: 2px solid black;"|Joypad 2 | |||
!style="border-left: 2px solid black;"|audio output | |||
|- | |||
|style="text-align: left;"|signal | |||
!style="border-left: 2px solid black;"|OUT2 | |||
!OUT1 | |||
!OUT0 | |||
!style="border-left: 2px solid black;"|/OE1 | |||
!style="border-left: 2px solid gray;"|D4 | |||
!D3 | |||
!D2 | |||
!D1 | |||
!D0 | |||
!style="border-left: 2px solid black;"|/OE2 | |||
!style="border-left: 2px solid gray;"|D4 | |||
!D3 | |||
!D2 | |||
!D1 | |||
!D0 | |||
!style="border-left: 2px solid black;"|AUDIO | |||
|- | |||
|access method | |||
|colspan="3" style="text-align: center; border-left: 2px solid black;"|write $4016 | |||
|style="border-left: 2px solid black;"|<ref>/OE1 is activated by reading $4016.</ref> | |||
|colspan="5" style="text-align: center; border-left: 2px solid gray;"|read $4016 | |||
|style="border-left: 2px solid black;"|<ref>/OE2 is activated by reading $4017.</ref> | |||
|colspan="5" style="text-align: center; border-left: 2px solid gray;"|read $4017 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
!style="text-align: left; border-top: 2px solid black;"|available on these ports | |||
!colspan="3" style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!colspan="5" style="border-left: 2px solid gray; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!colspan="5" style="border-left: 2px solid gray; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
|- | |||
|Controller port 1 (AV Famicom) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|Controller port 1 (Famicom (internal)) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Controller port pinout|Controller port]] 1 (NES) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|Controller port 2 (AV Famicom) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|Controller port 2 (Famicom (internal)) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
|D2 | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Controller port pinout|Controller port]] 2 (NES) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Expansion port#Famicom|Expansion port]] (Famicom) | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
|D0 | |||
|style="border-left: 2px solid black; text-align: center;"|AUDIO | |||
|- | |||
|[[Expansion port#NES|Expansion port]] (NES) | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
|D0 | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
|D0 | |||
|style="border-left: 2px solid black; text-align: center;"|AUDIO | |||
|- | |||
!style="text-align: left; border-top: 2px solid black;"|used by these devices | |||
!colspan="3" style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!colspan="5" style="border-left: 2px solid gray; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
!colspan="5" style="border-left: 2px solid gray; border-top: 2px solid black;"| | |||
!style="border-left: 2px solid black; border-top: 2px solid black;"| | |||
|- | |||
|[[Standard controller|Controller]] (port 1)<ref name="port">Controllers using NES ports can be plugged into either port, using that port's /OE and data lines. However, games may expect a controller to only be in a specific port.</ref> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Standard controller|Controller]] (port 2)<ref name="port" /> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Standard controller|Controller]] (Famicom controller 2)<ref>The Famicom controller 2 has a microphone that sends audio input over $4016 D2. This is not affected by OUT0 nor /OE2.</ref> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
|D2 | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Standard controller|Controller]] (expansion port) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black; text-align: center;"|AUDIO<ref>A Famicom expansion controller may connect the audio output signal to a headphone jack (for example: IQ502 joypad).</ref> | |||
|- | |||
|[[Arkanoid controller]] (port 2)<ref name="port" /> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Arkanoid controller]] (expansion port) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Arkanoid controller#Arkanoid II expansion port|Arkanoid II controller]] (2 controllers) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Bandai Hyper Shot]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black; text-align: center;"|AUDIO | |||
|- | |||
|[[Exciting Boxing Punching Bag]] | |||
|style="border-left: 2px solid black;"| | |||
|OUT1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[FAM-NET Keyboard]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Power Pad#Family Trainer Mat|Family Trainer Mat]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Family BASIC Keyboard]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Famicom 3D System]] | |||
|style="border-left: 2px solid black;"| | |||
|OUT1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Famicom Network Controller|Famicom Network System controller]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|Four player adapter ([[Four Score]]) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|Four player adapter ([[Four Score|Hori 4 Players Adapter]]) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Hori Track]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Jissen Mahjong controller]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Konami Hyper Shot]] | |||
|style="border-left: 2px solid black;"|OUT2 | |||
|OUT1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Oeka Kids tablet]] | |||
|style="border-left: 2px solid black;"| | |||
|OUT1 | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
|D3 | |||
|D2 | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Coconuts Japan Pachinko Controller|Pachinko controller]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Party Tap]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
|D2 | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Power Pad]] (port 2)<ref name="port" /> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Port test controller]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"|/OE2 | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[TV-NET controller]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[TV-NET Rank 2 controller]] | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
|D1 | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Zapper]] (port 2) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|- | |||
|[[Zapper]] (expansion port) | |||
|style="border-left: 2px solid black;"| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"|D4 | |||
|D3 | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black; text-align: center;"|<ref>The Casel Zapper plays audio when the trigger is pulled, but this is done entirely by the controller independent of the console's audio out.</ref> | |||
|- | |||
|[[Zapper]] (Vs. System) (port 1)<ref name="port" /> | |||
|style="border-left: 2px solid black;"| | |||
| | |||
|OUT0 | |||
|style="border-left: 2px solid black;"|/OE1 | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
|D0 | |||
|style="border-left: 2px solid black;"| | |||
|style="border-left: 2px solid gray;"| | |||
| | |||
| | |||
| | |||
| | |||
|style="border-left: 2px solid black;"| | |||
|} | |||
<references/> |
Latest revision as of 07:11, 20 January 2024
The NES has two general-purpose controller ports on the front of the console, as well as a (rarely used) 48-pin expansion port underneath.
The Famicom's standard controllers are hardwired to the front of the unit, and a special 15-pin expansion port is commonly used for third-party controllers. The AV Famicom, however, features detachable controllers using the same ports as the NES.
The NES and Famicom have a set of I/O ports used for controllers and other peripherals, consisting of the following:
- One output port, 3 bits wide, accessible by writing the bottom 3 bits of $4016.
- The values latched by $4016/write appear on the OUT0-OUT2 output pins of the 2A03/07, where OUT0 is routed to the controller ports and OUT0-OUT2 to the expansion port on the NES.
- Two input ports, each 5 bits wide, accessible by reading the bottom 5 bits of $4016 and $4017. Reading $4016 and $4017 activates the /OE1 and /OE2 signals, respectively, which are routed to the controller ports and the expansion port.
- On the NES, only D0, D3, and D4 are connected to both controller ports, while all of D0-D4 are connected to the expansion port.
- On the original Famicom, the two ports differ: $4016 D0 and D2 and $4017 D0 are permanently connected to both controllers, while $4016 D1 and all of $4017's D0-D4 are connected to the expansion port.
- On the AV Famicom, only D0 is connected to the controller ports. The expansion port is unchanged.
Programmer's reference
Hardware
- Controller port pinout
- Controllers
- NES Standard controller
- Arkanoid controller
- Bandai Hyper Shot
- Coconuts Pachinko
- Doremikko Keyboard
- Exciting Boxing Punching Bag
- Family BASIC Keyboard
- Four Score, NES Satellite 4-player adapters
- Hori 4 Players Adapter for Famicom
- Jissen Mahjong controller
- Konami Hyper Shot
- Miracle Piano
- Mouse (SNES Mouse, Subor Mouse)
- Oeka Kids tablet
- Partytap
- Pokkun Moguraa Mat
- Power Glove
- Power Pad
- RacerMate Bicycle
- SNES controller
- Top Rider Bike
- U-Force
- Virtual Boy controller
- Zapper lightgun
- Infrared controllers
Other I/O devices
- Famicom 3D glasses
- Family BASIC Data Recorder
- R.O.B.
- Battle Box
- Turbo File
- Barcode Battler
- TV-NET Rank 2 controller
- FAM-NET Keyboard
- Family Computer Network Adapter
- Super Famicom NTT Data Keypad
Usage of port pins by hardware type
type | output | Joypad 1 | Joypad 2 | audio output | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
signal | OUT2 | OUT1 | OUT0 | /OE1 | D4 | D3 | D2 | D1 | D0 | /OE2 | D4 | D3 | D2 | D1 | D0 | AUDIO |
access method | write $4016 | [1] | read $4016 | [2] | read $4017 | |||||||||||
available on these ports | ||||||||||||||||
Controller port 1 (AV Famicom) | OUT0 | /OE1 | D0 | |||||||||||||
Controller port 1 (Famicom (internal)) | OUT0 | /OE1 | D0 | |||||||||||||
Controller port 1 (NES) | OUT0 | /OE1 | D4 | D3 | D0 | |||||||||||
Controller port 2 (AV Famicom) | OUT0 | /OE2 | D0 | |||||||||||||
Controller port 2 (Famicom (internal)) | OUT0 | D2 | /OE2 | D0 | ||||||||||||
Controller port 2 (NES) | OUT0 | /OE2 | D4 | D3 | D0 | |||||||||||
Expansion port (Famicom) | OUT2 | OUT1 | OUT0 | /OE1 | D1 | /OE2 | D4 | D3 | D2 | D1 | D0 | AUDIO | ||||
Expansion port (NES) | OUT2 | OUT1 | OUT0 | /OE1 | D4 | D3 | D2 | D1 | D0 | /OE2 | D4 | D3 | D2 | D1 | D0 | AUDIO |
used by these devices | ||||||||||||||||
Controller (port 1)[3] | OUT0 | /OE1 | D0 | |||||||||||||
Controller (port 2)[3] | OUT0 | /OE2 | D0 | |||||||||||||
Controller (Famicom controller 2)[4] | OUT0 | D2 | /OE2 | D0 | ||||||||||||
Controller (expansion port) | OUT0 | /OE1 | D1 | AUDIO[5] | ||||||||||||
Arkanoid controller (port 2)[3] | OUT0 | /OE2 | D4 | D3 | ||||||||||||
Arkanoid controller (expansion port) | OUT0 | D1 | /OE2 | D1 | ||||||||||||
Arkanoid II controller (2 controllers) | OUT0 | D1 | /OE2 | D4 | D3 | D1 | ||||||||||
Bandai Hyper Shot | OUT2 | OUT1 | OUT0 | /OE1 | D1 | D4 | D3 | AUDIO | ||||||||
Exciting Boxing Punching Bag | OUT1 | D4 | D3 | D2 | D1 | |||||||||||
FAM-NET Keyboard | OUT2 | OUT1 | OUT0 | D4 | D3 | D2 | D1 | |||||||||
Family Trainer Mat | OUT2 | OUT1 | OUT0 | D4 | D3 | D2 | D1 | |||||||||
Family BASIC Keyboard | OUT2 | OUT1 | OUT0 | D4 | D3 | D2 | D1 | |||||||||
Famicom 3D System | OUT1 | |||||||||||||||
Famicom Network System controller | OUT0 | /OE1 | D1 | |||||||||||||
Four player adapter (Four Score) | OUT0 | /OE1 | D0 | /OE2 | D0 | |||||||||||
Four player adapter (Hori 4 Players Adapter) | OUT0 | /OE1 | D1 | /OE2 | D1 | |||||||||||
Hori Track | OUT0 | /OE2 | D1 | |||||||||||||
Jissen Mahjong controller | OUT2 | OUT1 | OUT0 | /OE2 | D1 | |||||||||||
Konami Hyper Shot | OUT2 | OUT1 | D4 | D3 | D2 | D1 | ||||||||||
Oeka Kids tablet | OUT1 | OUT0 | D3 | D2 | ||||||||||||
Pachinko controller | OUT0 | /OE1 | D1 | |||||||||||||
Party Tap | OUT0 | /OE2 | D4 | D3 | D2 | |||||||||||
Power Pad (port 2)[3] | OUT0 | /OE2 | D4 | D3 | ||||||||||||
Port test controller | OUT0 | /OE1 | D4 | D3 | D0 | /OE2 | D4 | D3 | D0 | |||||||
TV-NET controller | OUT0 | /OE1 | D1 | |||||||||||||
TV-NET Rank 2 controller | OUT0 | /OE1 | D1 | |||||||||||||
Zapper (port 2) | D4 | D3 | ||||||||||||||
Zapper (expansion port) | D4 | D3 | [6] | |||||||||||||
Zapper (Vs. System) (port 1)[3] | OUT0 | /OE1 | D0 |
- ↑ /OE1 is activated by reading $4016.
- ↑ /OE2 is activated by reading $4017.
- ↑ 3.0 3.1 3.2 3.3 3.4 Controllers using NES ports can be plugged into either port, using that port's /OE and data lines. However, games may expect a controller to only be in a specific port.
- ↑ The Famicom controller 2 has a microphone that sends audio input over $4016 D2. This is not affected by OUT0 nor /OE2.
- ↑ A Famicom expansion controller may connect the audio output signal to a headphone jack (for example: IQ502 joypad).
- ↑ The Casel Zapper plays audio when the trigger is pulled, but this is done entirely by the controller independent of the console's audio out.