Hello everyone, I'm Mick and I managed to turn my Arduino UNO rev3 in a USB HID joystick with 4 axes and 32 buttons, which maps input from two N64 controllers to these axes and buttons; it is composed of two parts, a .ino sketch for the ATmega328p which sends a command to two N64 controllers and reads 4 bytes from each controller; the first two bytes represent the x and y axes value, which range from -128 to 127; the other two bytes represent the status for each button in each bit (0 means no pressure, 1 means button pressed); there are actually 14 buttons on a N64 controller, which means that 2 bits are unused; after reading the status of the two controllers, the sketch writes on the serial port the two statuses; the other part is an .hex file for the ATmega16u2 which let the Arduino enumerate as an HID USB joystick with 4 axes and 32 buttons , named "Arduino Joystick"; all I did was actually taking some code from this Instructable
for the sketch, and from this page
for the USB HID firmware; on the sketch, I just removed the unused code (it was originally meant to be also used on a GCN controller, which is a pain in the a** to connect with unless you want to tear apart a standard GCN connector from your GCN), and turned it to probe two controllers instead of only one (cos I happen to have 2 N64 controllers, and playing with a friend is much more fun!)... on the firmware code, I modified the USB descriptor part in Descriptor.c or .h , don't remember, to my specs (which is, I repeat, 4 axes and 32 buttons). So all the original credit goes to these two guys
Btw, the cool thing of this is that, not only you could use your spare N64 controllers to play with your favourite game/emulator/whateveryouwant on your PC, which is super cool by itself, but also, you could easily make your own sketch for the ATmega328p that converts some input (say 2 arcade joysticks and 32 buttons...) into two N64-like statutes (2x8 bit values, 16x1 bit values) and use it to control something on your PC! Of course, you should be aware that this sketch first writes 2 axes and 16 buttons values on the serial port, then writes 2 other axes and 16 more buttons, so don't mess up the order of the things to write on the serial port.
Here I'm also adding a Github repository I use for this code with some brief explanation of what to do to get the whole thing up and running: MickMad N64-To-USB
For future reference, I also added this github repository link in the "Interfacing with Hardware / Gamepads" section of the Arduino Playground page.
Cheers and go get your N64 controllers NOW!!
Ps: this is my first ever post on this forum, yay!