Standard controller: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(moving DPCM glitch to Controller reading (not specific to standard controller, applies generically to all controllers))
(cautionary references to the DPCM conflict)
Line 18: Line 18:


After 8 bits are read, all subsequent bits will report 1 on a standard NES controller, but third party and other controllers may report other values here.
After 8 bits are read, all subsequent bits will report 1 on a standard NES controller, but third party and other controllers may report other values here.
If using DPCM audio samples, read conflicts must be corrected with a software technique. The most common symptom of this is spurious Right presses as the DPCM
conflict deletes one bit of the report, and an extra 1 bit appears in the Right press position. See: [[Controller reading#DPCM conflict|Controller reading: DPCM conflict]].


== Input ($4016 write) ==
== Input ($4016 write) ==
Line 55: Line 58:


In the NES controller, this input is grounded. But because the signals from the controllers pass through an inverter before reaching the CPU, the register produces a 1 for all reads after the first eight.
In the NES controller, this input is grounded. But because the signals from the controllers pass through an inverter before reaching the CPU, the register produces a 1 for all reads after the first eight.
If using DPCM audio samples, read conflicts may occur requiring a software technique to correct for them. See: [[Controller reading#DPCM conflict|Controller reading: DPCM conflict]].


== Turbo ==
== Turbo ==

Revision as of 00:06, 21 April 2019

All NES units come with at least one standard controller - without it, you wouldn't be able to play any games!

Standard controllers can be used in both controller ports, or in a Four score accessory.

For code examples, see: Controller reading code

Report

The standard NES controller will report 8 bits on its data line:

0 - A
1 - B
2 - Select
3 - Start
4 - Up
5 - Down
6 - Left
7 - Right

After 8 bits are read, all subsequent bits will report 1 on a standard NES controller, but third party and other controllers may report other values here.

If using DPCM audio samples, read conflicts must be corrected with a software technique. The most common symptom of this is spurious Right presses as the DPCM conflict deletes one bit of the report, and an extra 1 bit appears in the Right press position. See: Controller reading: DPCM conflict.

Input ($4016 write)

7  bit  0
---- ----
xxxx xxxS
        |
        +- Controller shift register strobe

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.

(Note that bits 2-0 of $4016/write are stored in internal latches in the 2A03/07.)

Output ($4016/$4017 read)

The first 8 reads will indicate which buttons are pressed (1 if pressed, 0 if not pressed). All subsequent reads will return D=1 on a Nintendo brand controller but may return D=0 on third party controllers such as the U-Force.

Button status for each controller is returned as an 8-bit report in the following order: A, B, Select, Start, Up, Down, Left, Right. On plug-in controllers (the NES and AV Famicom) and the first controller of the original Famicom, all buttons are present. However, on the original Famicom's second controller the Select and Start buttons are absent, and the encoder chip returns 0 instead: A, B, 0, 0, Up, Down, Left, Right. Because these buttons do not exist, games for the Famicom should never require the second player to press Select or Start.

In the NES and Famicom, the top three (or five) bits are not driven, and so retain the bits of the previous byte on the bus. Usually this is the most significant byte of the address of the controller port—0x40. Certain games (such as Paperboy) rely on this behavior and require that reads from the controller ports return exactly $40 or $41 as appropriate. See: Controller reading: unconnected data lines.

Due to the presence of internal pull-up resistors, and the internal inverter, any pin without power connected will return zero, as shown above in the diagrams.

Because the Famicom controllers are permanently attached, some games (such as Castlevania II - Simon's Quest) allow the use of the player 3 and 4 data for players 1 and 2.

A Super NES controller can be wired to the NES controller port, and it returns a 16-bit report in a similar order: B, Y, Select, Start, Up, Down, Left, Right, then A, X, L, R, and four 0 bits.

Hardware

The 4021 (or 74LS165) IC is an 8-bit parallel-to-serial shift register. It has a pin "serial input", ordinarily used to chain the output of one shift register into the next one as seen in the Four Score or the Super NES controller. The serial input on the tail end of such a chain (or the only one in the case of an NES) can be tied to ground or Vcc, which determines the state of the output after all bits have been shifted out. If this is grounded, the shift register produces a 0 after all bits have been shifted out; if it's tied to Vcc, it produces a 1.

In the NES controller, this input is grounded. But because the signals from the controllers pass through an inverter before reaching the CPU, the register produces a 1 for all reads after the first eight.

If using DPCM audio samples, read conflicts may occur requiring a software technique to correct for them. See: Controller reading: DPCM conflict.

Turbo

A turbo controller such as the NES Max or NES Advantage is read just like a standard controller, but the user can switch some of its buttons to be toggled by an oscillator. Such an oscillator turns the button on and off at 15 to 30 Hz, producing rapid fire in games.

A controller should not toggle the button states on each strobe pulse. Doing so will cause problems for games that poll the controller in a loop until they get two identical consecutive reads (see DMC conflict above). The game may halt while the turbo button is held, or crash, or cause other unknown behaviour.

See also

References

  • Forum post: Famicom controller PCB and exterior photographs