NES controller
The NES's controller pairs a cross-shaped Control Pad with Select, Start, B, and A, and the console reads its eight buttons one at a time.
The NES controller (NES-004) came with the Nintendo Entertainment System, two to each console2. Its parts are the Control Pad, the Select and Start buttons, and buttons B and A, with B to the left of A1. Nintendo of America introduced the NES in the New York City area before Christmas 19852. The earliest known cross pad is on Nintendo’s Game & Watch Donkey Kong of 19823.
#Design
Nintendo’s manual calls the pad the “4-way Control Pad”: it moves the main character up, down, left, and right, and A and B do what each game gives them4. By the manual, Select picks a variation of the game and Start begins it and pauses it, both on controller 1 only4. That rule is for games to follow, not the hardware’s: both controllers report all eight buttons5, and Super Mario Bros.’s title screen takes Start and Select from either one6. Seen from above, the controller measures about 124 × 53 mm7.
The console reads a controller one button at a time. A game writes 1 and then 0 to the controller’s port, which stops the controller reloading its buttons, and each read after that returns the next one, in the order A, B, Select, Start, Up, Down, Left, Right5. Games then sort the bits into buttons held and buttons newly pressed (controller reading).
#Origins
Game & Watch Donkey Kong, released in June 1982, a year before the Famicom, has the earliest known one3. Its makers built many prototypes, and Gunpei Yokoi insisted on a slightly concave center, so that the pad could be worked without looking8.
Nintendo patented the switch in the United States as US 4,687,200, “Multi-directional switch”, naming Ichiro Shirai as its inventor. It was filed in August 1985 as a continuation of an application of August 1983, and it issued in August 1987. Its drawings put the cross on a handheld game with a liquid-crystal screen9. The first claim never says “cross”: it covers a key that tilts in several directions under a fingertip, with a concave top, and later claims add arms reaching out from the center, four of them making a cross10.
Nintendo launched the Family Computer (Famicom), the NES’s Japanese original, in 198311. Its second controller, built into the console, has no Select or Start5.
Games
- Super Mario Bros. (1985): A: jump; B: run, shoot; Start: pause; Control Pad: move, crouch.12
- Super Mario Bros. (1985), swimming: A: swim; B: shoot; Start: pause; Control Pad: move, crouch.13
- Super Mario Bros. (1985), title screen: Select: choose; Start: confirm.6
References
- ^ abManualNES Control Deck manual
How we know
CONTROL PAD … SELECT BUTTON … START BUTTON … BUTTON B BUTTON A
p. 2, 1. NES Components, Controller figure · archived copy ↗ - ^ abManualNES Control Deck manual · CHM, NES-004 controller · iFixit, NES controller · Computer Entertainer, February 1986
How we know
Your NES includes two identical controllers.
p. 10, Using the Controllers · archived copy ↗ NES-004 (MODEL NUMBER)
Item Details · archived copy ↗ The controller shipped with the original Nintendo Entertainment System in 1985. It has the model number NES-004.
overview · archived copy ↗ area a little before Christmas, 1985 by Nintendo of America.
p. 12, The Nintendo Entertainment System · archived copy ↗ - ^ abInterviewIwata Asks: Game & Watch, vol. 1 p. 5 · Nintendo: Game & Watch history
How we know
それに、このタイトルでは … 初めて十字ボタンを採用しました。
page 5, Izushi · archived copy ↗ Our translationAnd this title was the first to adopt the cross button.ファミコンが発売される1年前に … 十字ボタンが『ドンキーコング』で初めて採用されたんですよね。
page 5, Iwata · archived copy ↗ Our translationThe cross button was first adopted in Donkey Kong, a year before the Famicom came out.『ドンキーコング』=ゲーム&ウオッチのマルチスクリーンシリーズの第2弾ソフト。 … 1982年6月発売。
page 5, note 21 · archived copy ↗ Our translationDonkey Kong: the second title in the Game & Watch Multi Screen series. … Released June 1982.またこのシリーズから方向入力に初めて十字キーが登場しました。
Multi Screen series · archived copy ↗ Our translationAnd with this series the cross key first appeared, for direction input. - ^ abManualNES Control Deck manual
How we know
SELECT BUTTON (Controller ① only). … The SELECT button is used to … select the particular variation you want to play from the menu displayed at the begin- … START BUTTON (Controller ① only) … push the START button to … start the game. The START button can also be used to take a … If you push the START button in the middle of a game, the game will freeze … (pause) where it is until the START button is pressed again. … The ④-way Control Pad moves the main character of the game up, down, left, and right; … although its function may vary from game to game. … Buttons A and B perform different functions in different games.
p. 10, Using the Controllers · archived copy ↗ - ^ abcWikiNESdev Wiki, “Standard controller”
How we know
While S (strobe) is high, the shift registers in the controllers are continuously reloaded from the button states, and reading $4016/$4017 will keep returning the current state of the first button (A). Once S goes low, this reloading will stop. … Hence a 1/0 write sequence is required to get the button states, after which the buttons can be read back one at a time.
Input ($4016 write) · archived copy ↗ Status for each controller is returned as an 8-bit report in the following order: A, B, Select, Start, Up, Down, Left, Right. … Each read reports one bit at a time through D0. … Primary controller status bit |+-- Expansion controller status bit (Famicom) … The first 8 reads will indicate which buttons or directions are pressed (1 if pressed, 0 if not pressed). … controller 1 is read through $4016, and controller 2 is separately read through $4017.
Output ($4016/$4017 read) · archived copy ↗ The original Famicom's hard-wired second controller (II) is missing the Select and Start buttons. Its corresponding bits will read as 0 … These gave the same standard 8-bit report, but through D1 instead of D0.
Famicom · archived copy ↗ - ^ abCodeSuper Mario Bros. instruction booklet · Xkeeper0/smb1prg.asm 330–353, 364–376, 402–407, 428–433, 622–626, 638–645
How we know
Use this button to move the mushroom mark to the
p. 4, SELECT button · archived copy ↗ Press this button to begin.
p. 5, START button · archived copy ↗ 330GameMenuRoutine: 331 LDY #$00 332 LDA SavedJoypad1Bits ; check to see if either player pressed 333 ORA SavedJoypad2Bits ; only the start button (either joypad) 334 CMP #Start_Button 335 BEQ StartGame 336 CMP #A_Button+Start_Button ; check to see if A + start was pressed 337 BNE ChkSelect ; if not, branch to check select button 338StartGame: 339 JMP ChkContinue ; if either start or A + start, execute here 340ChkSelect: 341 CMP #Select_Button ; check to see if the select button was pressed ⋮
src/prg.asm lines 330–353 at 1cc3c92 · upstream ↗ 364 CPY #$01 ; was the B button pressed earlier? if so, branch 365 BEQ IncWorldSel ; note this will not be run if world selection is disabled 366 LDA NumberOfPlayers ; if no, must have been the select button, therefore 367 EOR #%00000001 ; change number of players and draw icon accordingly 368 STA NumberOfPlayers 369 JSR DrawMushroomIcon 370 JMP NullJoypad 371IncWorldSel: 372 LDX WorldSelectNumber ; increment world select number 373 INX 374 TXA 375 AND #%00000111 ; mask out higher bits ⋮
src/prg.asm lines 364–376 at 1cc3c92 · upstream ↗ 402ChkContinue: 403 LDY DemoTimer ; if timer for demo has expired, reset modes 404 BEQ ResetTitle 405 ASL ; check to see if A button was also pushed 406 BCC StartWorld1 ; if not, don't load continue function's world number 407 LDA ContinueWorld ; load previously saved world number for secret
src/prg.asm lines 402–407 at 1cc3c92 · upstream ↗ - ^WebiFixit, NES controller · CHM, NES-004 controller
How we know
Width: 4.86 inches (123.4 mm) … Height: 2.096 inches (53.2 mm) … Depth: .6875 inches (17.5 mm)
Specifications · archived copy ↗ 4 7/8w x 3/4h x 2 1/8l (in) … 12.38w x 1.9h x 5.4l (cm)
Item Details, Dimension · archived copy ↗ - ^InterviewIwata Asks: Game & Watch, vol. 1 p. 5
How we know
この十字ボタンは、ものすごく試行錯誤していました。
page 5, Yamamoto · archived copy ↗ Our translationWe went through an enormous amount of trial and error on this cross button.本当にたくさんの試作品をつくりました。 … 手元を見なくても、きっちり操作できるように … 十字ボタンの真ん中を少し凹んだ形状にしたりとか、 … 横井さんはものすごくこだわっていましたから。
page 5, Izushi · archived copy ↗ Our translationWe made a great many prototypes. So it could be worked precisely without looking at your hands, Mr. Yokoi was very particular, about things like making the middle of the cross button slightly concave. - ^PatentUS patent 4,687,200 (cross-shaped switch)
How we know
MULTI-DIRECTIONAL SWITCH … Aug. 18, 1987 … inventor: Ichiro Shirai, Kyoto, Japan … Assignee: Nintendo Co., Ltd., Kyoto, Japan … Aug. 9, 1985 … Continuation of Ser. No. 521,116, Aug. 5, 1983, aban … doned.
p. 1, front page · archived copy ↗ character moving switch 8 is formed in the shape of a … cross and is adapted such that characters 9a to 9d are … selectively displayed responsive to the pressing direc … 1, a body 1 comprises a liquid crystal display plate 2. … Referring to FIG. 2, the hand-held type game playing apparatus is the same as the apparatus shown in FIG. 1, except the below described points.
col. 3, description of FIG. 2 · archived copy ↗ - ^PatentUS patent 4,687,200 (cross-shaped switch)
How we know
1. A multi-directional switch which can be manually … actuated in multiple directions by a depressing action … with the tip of a finger of an operator … (b) an integral key member disposed above said base … having a downwardly concave upper surface for … receiving a fingertip of the operator
col. 6, claim 1 · archived copy ↗ 6. A multi-directional switch according to claim 1, … the manipulation portion of said key member includes … a plurality of protrusions extending outwardly … from a central portion of said key member
col. 6, claim 6 · archived copy ↗ the shape of a cross is formed with inclinations so as to … become concave in the center. With these inclinations, … the operational surface 14 is fitted perfectly for the … touch of the fingers
col. 3 · archived copy ↗ 8. A multi-directional switch according to claim 6, … including four protrusions, two of said protrusions ex … said four protrusions thereby defining a cruciform … shape.
col. 7, claim 8 · archived copy ↗ - ^PublisherNintendo, Company History
How we know
Launched the home video game system, Family Computer System (known as Nintendo Entertainment System outside Japan.)
1983 · archived copy ↗ - ^CodeSuper Mario Bros. instruction booklet · Xkeeper0/smb1prg.asm 4913–4918, 5000–5010, 5024–5025, 5142–5161, 4372–4378, 4702–4711, 213–216, 186–188, 4080–4083
How we know
Jump... ... Mario (Luigi) jumps higher if you hold the button down longer.
p. 4, 2. Names of Controller Parts, A button · archived copy ↗ Accelerate ... Press this button to speed up, then jump and you can go all the … Fireballs ...... After you pick up the fire flower, you can use this button to throw
p. 4, 2. Names of Controller Parts, B button · archived copy ↗ Walk to the right. … (Push button B at the … Crouch. … (Super Mario only.)
p. 3, 2. Names of Controller Parts, Control Pad · archived copy ↗ If you wish to interrupt play in the middle of a game, press the START button. … The pause tone will sound, and the game will stop. Press the START button again
p. 5, START button · archived copy ↗ 4913 LDA A_B_Buttons ; check for A button press 4914 AND #A_Button 4915 BEQ NoJump ; if not, branch to something else 4916 AND PreviousA_B_Buttons ; if button not pressed in previous frame, branch 4917 BEQ ProcJumping 4918NoJump:
src/prg.asm lines 4913–4918 at 1cc3c92 · upstream ↗ 5000ProcPRun: 5001 INY ; if mario on the ground, increment Y 5002 LDA AreaType ; check area type 5003 BEQ ChkRFast ; if water type, branch 5004 DEY ; decrement Y by default for non-water type area 5005 LDA Left_Right_Buttons ; get left/right controller bits 5006 CMP Player_MovingDir ; check against moving direction 5007 BNE ChkRFast ; if controller bits <> moving direction, skip this part 5008 LDA A_B_Buttons ; check for b button pressed 5009 AND #B_Button 5010 BNE SetRTmr ; if pressed, skip ahead to set timer
src/prg.asm lines 5000–5010 at 1cc3c92 · upstream ↗ 5024SetRTmr: 5025 LDA #$0a ; if b button pressed, set running timer
src/prg.asm lines 5024–5025 at 1cc3c92 · upstream ↗ Walk to the left.
p. 3, 2. Names of Controller Parts, Control Pad · archived copy ↗ - ^CodeSuper Mario Bros. instruction booklet · Xkeeper0/smb1prg.asm 2337–2341, 4921–4930, 5000–5003, 4361–4371, 213–216
How we know
Swim... ..When you're in the water, each press of this button makes you bob
p. 4, 2. Names of Controller Parts, A button · archived copy ↗ 2337 LDA AreaType ; check area type 2338 BNE ChkStPos ; if water type, set swimming flag, otherwise do not set 2339 INY 2340ChkStPos: 2341 STY SwimmingFlag
src/prg.asm lines 2337–2341 at 1cc3c92 · upstream ↗ 4921ProcJumping: 4922 LDA Player_State ; check player state 4923 BEQ InitJS ; if on the ground, branch 4924 LDA SwimmingFlag ; if swimming flag not set, jump to do something else 4925 BEQ NoJump ; to prevent midair jumping, otherwise continue 4926 LDA JumpSwimTimer ; if jump/swim timer nonzero, branch 4927 BNE InitJS 4928 LDA Player_Y_Speed ; check player's vertical speed 4929 BPL InitJS ; if player's vertical speed motionless or down, branch 4930 JMP X_Physics ; if timer at zero and player still rising, do not swim
src/prg.asm lines 4921–4930 at 1cc3c92 · upstream ↗ 5000ProcPRun: 5001 INY ; if mario on the ground, increment Y 5002 LDA AreaType ; check area type 5003 BEQ ChkRFast ; if water type, branch
src/prg.asm lines 5000–5003 at 1cc3c92 · upstream ↗
Sources
Code
- doppelganger and Xkeeper. 2022. “smb1: Super Mario Bros. disassembly for asm6f (Xkeeper0/smb1).” Commit 1cc3c92. Xkeeper0/smb1 @ 1cc3c92 · licence, all uses
Primary
- Nintendo. 1988. “Nintendo Entertainment System Control Deck instruction manual (1988).” NES Control Deck instruction manual, chapter I (NES Instruction Manual). Nintendo of America. original · archived · licence, all uses
- Co., Nintendo and Ltd. n.d. “社長が訊く「ゲーム&ウオッチ」 Vol.1, page 5.” Nintendo Co., Ltd. original · archived · licence, all uses
- Co., Nintendo and Ltd. n.d. “ゲーム&ウオッチ ヒストリー (Nintendo Game & Watch history page).” Nintendo Co., Ltd. original · archived · licence, all uses
- Nintendo. 1985. “Super Mario Bros. instruction booklet (NES).” Super Mario Bros. instruction booklet, pp. 1-16. Nintendo of America. original · archived · licence, all uses
- Ichiro, Shirai,. 1987. “US 4,687,200: Multi-directional switch.” United States patent 4,687,200, filed 9 August 1985 as a continuation of Ser. No. 521,116, filed 5 August 1983 (abandoned). Nintendo Co., Ltd. (assignee). original · archived · licence, all uses
- Co., Nintendo and Ltd. 2026. “Corporate Information: Company History (Nintendo).” original · archived · licence, all uses
Secondary
- Museum, Computer History. n.d. “Nintendo Entertainment System controller (Computer History Museum, X3821.2007).” Computer History Museum collection catalog 102673391. original · archived · licence, all uses
- iFixit contributors. n.d. “Nintendo Entertainment System Controller (iFixit device page).” iFixit. original · archived · licence, all uses
- Computer Entertainer editors. 1986. “Computer Entertainer, Vol. 4, No. 11 (February 1986).” Computer Entertainer, vol. 4, no. 11 (February 1986), pp. 12-13. Computer Entertainer. original · archived · licence, all uses
- NESdev Wiki contributors. n.d. “Standard controller.” NESdev Wiki. Version oldid 23466. original · archived · licence, all uses