Reverse Engineering an NES Controller Using the Digital Discovery and WaveForms

NES Controller Using a Digital Discovery to work through a dev board

Some time ago, we had an old NES controller floating around the office. It wasn’t your run-of-the-mill NES controller, though – it had been “tampered” with. Instead of the normal console connector piece, we added a Pmod connector, so that it could work on one of our development boards. It stuck around for a while, was forgotten and later surfaced again when we were planning to move our office. Arthur, one of our engineers, saved this controller from its fate as a casualty of workplace transition and decided to put it to use as his own personal project.

There was one problem though: no documentation of the Pmod pin layout for this controller survived. So Arthur was left with a controller that wouldn’t work with an NES or a development board. ¬†Cool.

However, with the typical innate curiosity of an engineer, he knew there was another way. He got hold of a Digital Discovery,  plugged in the controller, opened WaveForms, and got to work with the logic analyzer and pattern generator functions to see what kind of data he could get out of it. In the end, he was able to use the Digital Discovery to extract the information needed to correctly map the signals to a development board.

Without the pattern generator on. DIO25 high indicates that there is a pullup in the controller, and that its likely a controller output, while the other two pins are inputs.
Clock and latch reversed (pattern generator DIOs connected to the wrong pins)
Correct connections with unconnected power. Not visible in this image, but lots of activity on DIO26, along with various glitches in the signal.
Power is no connected, but with no buttons pressed.
Power still connected, but this time with START button pressed. Note the change on DIO25.
Now, with A + B buttons pressed simultaneously. Again, note DIO25.

 

Be the 1st to vote.

Leave a Reply

Your email address will not be published. Required fields are marked *