Gamecube controller to NES adapter

Introduction

At the opposite of most adapters I have designed until now, this one is not meant to use old game controllers on modern hardware. Instead, it allows one to control our good old NES with a controller that came out 15 years later.

Having been contacted to make a Gamecube to NES adapter, I spent a few evenings on this project and a lot more time in testing (It's a pleasure to rediscover old games with a Wavebird).

Specifications:
  • Connects directly to a standard NES port.
  • Supports most Gamecube controllers. Tested with normal controllers, with the white japanese imports with very long cable, with the popular Nintendo Wavebird and an Intec wireless controller.
  • Turbo feature. While L is pressed, A and B become turbos.
  • Special mode for Mario Bros. (autorun).

Ready to use adapters available!
Complete adapter (ready to play)



Pictures

Here are a few pictures. Please send me yours!
En développemnet.

En développemnet.

Jour que d'une main...

Jour que d'une main...

NES et Wavebird

NES et Wavebird

Adaptateur

Adaptateur

Manette blanche supportée

Manette blanche supportée


Note: The 2 NES systems that can be seen above are my regular modded NES and my heavily modified NES for Super Mario Bros arcade version.


Usage

The button mapping quite straight forward:

GamecubeNES
AA
BB
StartStart
ZSelect
D-PadD-Pad
JoystickD-Pad
LTurbo A/B
Special modes
  • If 'A' is held when turning on the NES, the 'auto run' mapping is enabled. In this mode, the analog stick will press B automatically above a certain threshold. Try playing Super Mario in this mode, the only button you need to use is Jump!
  • If 'B' is held when turning on the NES, the gamecube joystick will use a lower threshold (i.e. less deflection required to trigger the corresponding D-Pad direction).




Compatibility

The adapter should work with most games. Up to now, the following have been tested. Don't hesitate to contact me if you try other games with the adapter!

Baseball, Battle Tank, Blades of steel, Bubble Bobble, Ikari Warriors, Kid Icarus, Legendary Wings, Lifeforce, MetalStorm, Metroid, Paperboy, R.C. Pro-AM, Super Mario Bros, Super Mario Bros II, Super Mario Bros III, Turtles II, Zelda II.

Note: The pause screen in Paperboy does not work because of the way the game is coded. With release 1.0, you cannot exit the pause screen. In firmware 1.1, changes have been made which unpauses the game automatically. (Sorry, with the current hardware, nothing better can be done. If the projet gets popular enough, I will design new hardware to provide 100% compatiblity)


Electronics

I once again used my multiuse pcb2 circuit with an Atmega8a. I use a linear regulator to obtain the 3.3 volt power required for the Gamecube controller from the 5 volt available at the NES controller port. For this project, the MCU needs a crystal to run at 12Mhz.

Atmega8 pinNES/Gamecube signal
PD2 / INT0NES Latch
PC0NES Data
PC1NES Clock
PC5Gamecube data (install external 1k pull-up resistor to 3.3 volt)

Important: Make sure the MCU has a 5 volt supply (3.3 volt is too low for 12 Mhz). Also, make sure you supply both 3.3 volt and 5 volt to the gamecube controller.

Here is the pinout for the NES and Gamecube connectors:

Careful! The colors above are NOT representative of the wire colors (depends on the brand). Only use the signal names!



Firmware

The firmware is available as a source code package (GPL License) and pre-compiled .hex file.

Important!
For the controller to run at the correct speed (12Mhz), setting the fuse bytes to the appropriate values is mandatory. In this case, this means the following:
  • Atmega8: high_byte=0xc9 low_byte=0x9f
  • Atmega168: ext_byte=0x01, high_byte=0xD5, low_byte=0xD7
For more information about programming an Atmel AVR microcontroller, you may refer to my short AVR programming page.

Now here are the files:
Version v1.2
October 23, 2016 (Sunday)
Updated gamecube IO code (transplanted from gcn64usb v2.9.2). Fixes some compatibility issues.
File(s):
gc_to_nes-1.2.tar.gz (30.4 KB)
gc_to_nes-1.2-atmega8.hex (18.3 KB)
gc_to_nes-1.2-atmega168.hex (16.9 KB)
Show previous releases...
Version v1.1.1
September 2, 2013
Atmega168 support
File(s):
gamecube_to_nes-1.1.1.tar.gz (24.2 KB)
gc_to_nes-1.1.1-atmega168.hex (16.8 KB)
Version v1.1
April 15, 2012
This new version fixes problems with Mario Bros 3.
File(s):
gc_to_nes-1.1.tar.gz (23.4 KB)
gc_to_nes-1.1.hex (18.3 KB)
Version v1.0
February 2012
Initial release.
File(s):
gc_to_nes-1.0.tar.gz (21.2 KB)
gc_to_nes-1.0.hex (8.7 KB)
This project is also available on GitHub!
To request features, report issues or contribute, you may send me an email or use the GitHub repository:
https://github.com/raphnet/gamecube_to_nes




Disclaimer

I cannot be held responsible for any damages that could occur to you or your equipment while following the procedures present on this page. Also, I GIVE ABSOLUTELY NO WARRANTY on the correctness and usability of the informations on this page. Please note, however, that the procedures above have worked in my case without any damages or problems.

Now you cannot say that I did not warn you :)