After publishing my
NES/SNES Controller to USB adapter project, I have been asked a few times if there
was a way to connect more than one controller. I finally found the time to do it and this
page explains how it is done. Since this is a variation of the initial project mentionned
above, I wont cover everything in great detail. If necessary, refer to the original
project page.
Supporting multiple controllers at the same time is basically done by programming the Atmega8
with a different firmware. This new firmware automagically detects whether each connected
controller is a NES or SNES controller. Up to 4 NES and/or SNES controller(s) can be used at the same time.
New! Version 1.3 adds support for the SNES Multitap (Only tested with Naki Tribal tap)
Up
Exemple 1: PCB for 4 SNES controllers:
I am working on a 4 player adapter for SNES controllers. The enclosure is not ready yet but it electronic
is already working fine. SNES connectors like the one that are in use here are available
in my
online store.
Example 2: Adaptater for the NES FourScore:
Example 3: SNES Multitap to USB
Only tested with the Naki Tribal Tap as shown here. Supports up to 4 controllers. The fifth port,
while present, appears not to be usable and in fact is
probably a fraud!
Example 4: Adapter box for 2 NES and 2 SNES controllers:
Up
Here is the schematic and a pinout reference for NES and SNES controllers:
Notes and comments:
All the controllers share power,
clock and
latch signals. However, the
data signal
coming from each controller has to be connected to an unique input on the microcontroller. A ceramic resonator can be used instead of a crystal + two capacitors. Refer to
Andrew Biem's schematic in the
user pictures section.
Printed circuit board:
You can use the printed circuit board from the initial project:
http://www.raphnet.net/electronique/snes_nes_usb/index_en.php#pcb
Here is also a wiring diagram for PCB rev.C:
Using multiuse pcb2:
The
multiuse PCB2 board is also a good
choice for this projet. Here are wiring diagrams that apply if this board is used:
SNES Multitap support (4 players)
Starting with firmware 1.3, the SNES multitap is supported. With this peripheral,
4 controllers are read using only 2 inputs thanks to a muliplexer controlled
by a SELECT signal. After latching the 4 controllers button states simultaneously
using the 'latch' line, controllers 1 and 2 are read serially. This operation
is then repeated, but with SELECT in a different state to access controllers 3 and 4.
Here is a multitap pinout diagram including MCU pin names for wiring:
Up
| File(s) | Date | Description |
4nes4snes-1.4.1.tar.gz (84.7 KB)
4nes4snes-m168-1.4.1.hex (10.7 KB)
4nes4snes-m8-1.4.1.hex (10.4 KB)
| April 26, 2013 |
- Reduced declared max current from 120mA to 100mA. This makes it possible to connect the adapter to my keyboard USB port but is still a conservative estimate for the worst combination of hypothetical non-standard power hungry controllers.
- Various code cleanups.
|
4nes4snes-1.4.tar.gz (84.5 KB)
4nes4snes-m168-1.4.hex (10.8 KB)
4nes4snes-m8-1.4.hex (10.5 KB)
| April 24, 2013 |
- Support for the Atmega168 (and compatibles). Use Makefile.atmega168
- Simplified main loop by removing setIdle/getIdle implementation. Optional for joysticks according to HID specification appendix G.
|
4nes4snes-1.3.tar.gz (83.8 KB)
4nes4snes-1.3.hex (11 KB)
| April 14, 2012 |
Added SNES Multitap support (4 player mode). Only tested with Naki Tribal Tap. |
4nes4snes-1.2.tar.gz (92.5 KB)
4nes4snes-1.2.hex (10.1 KB)
| May 2, 2009 |
- Implemented 'Live autodetection'. This allows NES and SNES controllers to be changed during use so it is no longer necessary to power cycle the adapter. This feature can be disabled by closing JP1.
- Added NES fourscore support. At power up only, when a fourscore is detected in port 1, fourscore mode is entered and ports 1 and 2 are used to read up to 4 NES controllers.
- License changed to GPLv2.
|
4nes4snes-1.1.tar.gz (70.2 KB)
4nes4snes-1.1.hex (8.7 KB)
| April 18, 2007 |
First public version. Used proprietary Objective Development License (modified GPL). See License.txt. |
Using .hex files
- Atmega8: The *-m8-*.hex or *.hex files prior to version 1.4 are for programming an Atmega8. The fuse bytes for
Atmega8 are: high byte = 0xc9, low byte = 0x9f.
- Atmega168: The *-m168*.hex files are for programming an Atmega168. The fuse bytes for the Atmega168 are:
high=0xd5, low=0xdf, extended=0x01
For informations about how to program an AVR MCU, visit my
AVR programming page.
Source code (.tar.gz files):
Unless otherwise noted, the source code is released under the terms of the GPLv2 License.
See License.txt more information. The project compiles with avr-gcc under linux.
4nes4snes-1.2.tar.gz
Note: If you are using the source code release under Linux, look at the Makefile. It has a
flash and a fuse target which uses uisp to program the flash and fuses.
Up
I enjoy seeing how others build my projects. It also makes good assembly examples. Please send me your pictures and I'll add them here.
Steve and Andi, from Austria, sent me the following pictures:
Declan Williams (16 years old), from Australia, sent me the following
pictures. Notice he found a pretty clever way to build his own SNES-style
connectors:
Andrew Biem, from Whidbey Island, Washington, USA, sent me the following pictures.
Notice that he used a ceramic resonator instead of a
crystal + two capacitors. He also provided an updated schematic.
Gunther Baumgartner, from Germany, has installed the circuit inside a NES Four Score:
Lucas Romero, from Germany, built this project for being able to use SNES pads with
his laptop which has no parallel port. He named his project "RetroBox" and added an internal
USB Hub with a 2GB USB-Stick so he always has his favorite SNES and MAME roms with him:
(Pictures received on May 31, 2008)
Craig O'Connor sent me the following pictures:

(Pictures received on October 4, 2008)
Tim Wylie built this 4 controller adapter (2 Snes and 2 NES) using
the pre-assembled circuit:

(Picture received on June 17, 2009)
Jeff Erbrecht has installed the circuit inside a SNES multitap. It
was necessary to remove some components from the original Multitap
circuit since they caused some problems.

(Pictures received on June 25, 2009)
Thomas Lapauw built an adapter for two SNES controllers. He also
added a power LED:

(Pictures received on August 14, 2011)
Alex (
here is his blog)created a through-hole PCB, and provided the Eagle schematic and board files:
Eagle schematic: V-USB_4SNES_Mame_Panel_Atmega8.sch
Eagle pcb: V-USB_4SNES_Mame_Panel_Atmega8.brd
(Received January 9, 2013)
3 Mai 2013 : Nicolas Roux sent me pictures of an adapter using home made connectors inspired by the work of Declan Williams (see above) and explains:
"We took two plastic plates which we temporarily stuck together (using double face tape) for drilling. We then took them apart to install the contacts (with wires pre-soldered to prevent melting the plastic). Then we prepared the protections (wood) to surround the contacts and wired-in the circuit (and installed the protections using screws)".
Up
This page contains documentation about the Snes controllers 'protocol':
Sci.Electronics FAQ: Super Nintendo Entertainment System: pinouts & protocol
I use the software USB driver from Objective Development. For more information, visit their site:
http://www.obdev.at/products/avrusb/index.html
This was useful for understanding how Windows/Direct Input interprets the report descriptor and why
some axes were not recognized by Windows 98:
http://www.microsoft.com/whdc/device/input/hidgame.mspx
Up
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 :)
Up