Talk:Standard controller

From NESdev Wiki
Jump to navigationJump to search


How to do microphone? --Zzo38 19:18, 16 September 2012 (MDT)

Nevermind I found it on the other page it says $4016 bit2 is microphone. --Zzo38 19:19, 16 September 2012 (MDT)

SNES-in-NES reads

It says "all subsequent reads will return D=1 on an authentic controller but may return D=0 on third party controllers", and what happen on Super Nintendo controllers? --Zzo38 17:50, 27 September 2012 (MDT)

After the first eight bits, the Super NES controller returns A, X, L, R, four zero bits, then all 1. -- 18:22, 27 September 2012 (MDT)

Bit deletion detection?

Official controllers have the correct 8 bits, then all 1s. Couldn't you detect the absence of a bit deletion by seeing if the 8th bit is 0 and the 9th bit is 1? This only works while right is not pressed, but ... —Lidnariq (talk) 12:12, 8 February 2013 (MST)

Reading 9 bits to skip rereading if Right is not held could work provided that you're sure that the user isn't using a Four Score, an official Super NES controller, or an unlicensed controller that has all 0s after its report. The Four Score and Super NES controller have longer reports (24-bit and 16-bit respectively), but these reports likewise end with a transition from 0 to 1. In any case, in games that don't use players 3 and 4, it'd be quicker just to re-read than to look for the Four Score signature. --Tepples (talk) 13:34, 8 February 2013 (MST)

Open bus

Lidnariq: Some more details on the difference between 'x' and '0' in the $4016/$4017 diagrams would be nice, and on what M/F read as on NES. -Ulfalizer (talk) 01:22, 19 March 2013 (MDT)

Done, but my presentation is lousy. I'm not certain if it's even possible to reunify the diagrams anymore.—Lidnariq (talk) 02:05, 19 March 2013 (MDT)
Much clearer now at least - thanks! -Ulfalizer (talk) 02:13, 19 March 2013 (MDT)

Famicom 2nd controller missing Select and Start

The article says

Button status for each controller is returned as an 8-bit report in the following order: A, B, Select, Start, Up, Down, Left, Right. The Select and Start buttons are completely missing on the second controller of the plain Famicom.

So reading $4017 bit 0 on a Famicom returns which one of the following?:

  • a 6-bit report: A, B, Up, Down, Left, Right
  • an 8-bit report: A, B, 0, 0, Up, Down, Left, Right
  • an 8-bit report: A, B, 1, 1, Up, Down, Left, Right
  • something else?

--Bavi H (talk) 17:23, 19 March 2013 (MDT)

The 2nd of those three. I've updated the article to state this explicitly.—Lidnariq (talk) 17:58, 19 March 2013 (MDT)

Bit deletion in other input devices

Does bit deletion still do in controllers that don't use the shift registers (such as the light gun and keyboard)? From the instructions, it seems to me it is safe to use DPCM if using the light gun or keyboard, but I am unable to test this, and the article should probably be made clear. --Zzo38 (talk) 12:35, 25 August 2013 (MDT)

The article does say that the CLK line is what causes bit deletions; devices that don't use it (such as the zapper, keyboard, data recorder, Oeka Kids tablet, &c) won't be affected. I'm uncertain how to edit this to make that more explicit. —Lidnariq (talk) 12:53, 25 August 2013 (MDT)

Distinguishing hardware variant

It says bit3 and bit4 of $4016 is "Open bus on traditional Famicom, all 0s on AV Famicom". Does this mean that a code like this might be able to distinguish the traditional Famicom from other hardware?

   LDX #$17
   LDA $3FFF,X
   AND #$18

I don't know exactly know how open bus works though, but maybe someone is able to test this. --Zzo38 (talk) 12:54, 7 January 2014 (MST)

Yes, that is what it means. Well, not exactly that, because the page wrapping of the LDA abs,X should cause a read from $3F16 before the useful read, which will pre-seed open bus to whatever the PPU's internal open bus is. So I think something like
   LDX #$FF
   STX $2002
   LDA $3F17,X
   AND #$18
should DTRT.—Lidnariq (talk) 14:33, 7 January 2014 (MST)
OK, thanks. I forgot about that. (I don't know what "DTRT" means, but I think I can mainly understand your message nevertheless.) --Zzo38 (talk) 18:07, 7 January 2014 (MST)
Google says "Do the right thing". --Tepples (talk) 16:36, 8 January 2014 (MST)

A controller MUST NOT toggle the button states on each strobe pulse; that'll break any game that rereads the controller.

Is this wiki targeted at controller manufacturers? Or is it for emulators that simulate turbo controllers? In all cases this sentence comes out weird in this context, especially with the strong emphasis on the all caps 'must not'. - Bregalad (talk) 07:37, 26 May 2015

I agree, and have revised it. "MUST NOT" seems to imply enforcement of policy, of which there is none here. NesDev users can do what they like, the Wiki's job is just to keep them aware of the problems. I added an explanation of exactly why it can cause a problem, which is probably a lot more helpful than telling people IT IS FORBIDDEN. It's probably a perfectly sensible approach if you're building a turbo controller circuit for specific games. - Rainwarrior (talk) 10:37, 26 May 2015 (MDT)
It's for controller manufacturers. I have seen hobbyist controller manufacturers in both NESdev BBS and #nesdev on EFnet. As used in documents that cite RFC 2119, these strong words are "used where it is actually required for interoperation", and a homemade controller that toggles buttons every strobe will not interoperate with games that misbehave when the controller toggles buttons every strobe. --Tepples (talk) 16:57, 26 May 2015 (MDT)

74165 compatibility "74hc165 wont work because they dont appreciate the clock being high when the latch is low."

I'd have to look closely at datasheets and test actual hardware to be sure, but it seems that the HC/HCT versions don't work for NES. Anyone actually tested this with custom hardware? If it indeed works on the 74HC(T)165 variants, we can revert this edit and put a note on compatibility. alphamule (talk) 01:28, 15 August 2015 (MDT)

I have tried using a HC165 as a controller for a NES clone (an old one not based in a NOAC) and it worked good for most of the games. However, in some ones like Pac Man it seems to malfunction. The load signal needs to be inverted, for example using a transistor.

As a curiosity, HP inkjet multifunction printers like PSC1215 and many other models with the same shape use a button pad with a HC165 wired like a NES controller. From the track face of the PCB, with the connector at top, and from left to right, this is the pinout to use it with a NES:


Just remember to add the inverter! Seems the 74HC works fine? "I have used two 74HC165 Shift registers to make a joypad adaptation, although I had to buy a cheap joypad to get the connector. " alphamule (talk) 02:13, 15 August 2015 (MDT)

Reorganization needed with Controller Reading

We have this article, Standard controller and also Controller Reading.

This article talks about too many different types of controllers. It's mostly about the NES' internal controller interface, and only a little bit about the actual NES controller. This needs to be separated.

Similarly, Controller Reading (which should really be Controller reading for consistent naming convention) is more general than being about the NES controller, and really is mostly about code techniques that apply to using the NES' internal interface, and only a little bit about the specific controller.

I think between these two articles, we should have instead 2 or maybe 3 different articles:

  1. Standard controller - should only be about the NES controller, and should really just be about the 8 bits it reports, a mention that it will normally spit out 1s after the 8 bits, and maybe some info about where it can be connected (e.g. Four Score, expansion, etc.)
  2. Controller reading - should be about the NES' internal interface and how it applies to all controllers. DPCM deletion is part of this etc. It should not really require code examples they should go into...
  3. Controller reading code - or something suitably named, so we can keep all these code dumps separate from the reference information about the interface.

-- Rainwarrior (talk) 21:23, 5 January 2019 (MST)

Well, I did that change.
-- Rainwarrior (talk) 18:45, 20 April 2019 (MDT)