Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

SNESoIP: The SNES ethernet adapter

SNESoIP prototype


The SNESoIP ethernet adapter for the Super Nintendo Entertainment System (also known as the Super NES, SNES or Super Nintendo) is an open-source, proof-of-concept, network-bridge for sharing local controller-inputs over the Internet.

The project it currently in its early stage, but fully functional and could be used to play multiplayer games over the Internet. Also some kind of server-controlled BBS system could be conceivable as a future project.

SNESoIP is an open-source project developed completely in my spare time. If you find it useful, please consider donating a small amount of money. Your donation will be used to support further development of the project.

The easiest way to donate is via PayPal, simply click here.

If you want to help in the development of this project, join us in #retrotardation on euIRC. We're also working on a similar Gameboy Classic / Super Gameboy project.

And feel free to contribute to our development wiki. Any help is welcome!


  • Plug and play (IP is obtained via DHCP),
  • DNS lookup of the server hostname,
  • small firmware size (fits on an ATmega8),
  • easy to rebuild (even on a stripboard),
  • low component count,
  • adaption of other platforms (e.g. Sega Mega Drive) is possible,
  • possible cross-platform capability.


  • Some kind of interface to avoid hard-coded configuration,
  • detailed documentation.

How it works


The SNESoIP ethernet adapter is continuously sending 4-byte data packets via UDP to a (remote) server and receive 2-byte answer packets from the (remote) server.

A packet sent to the server has the following format:

| Controller Data |  CID   | P2CID  |

An answer packet has the following format:

| Controller Data |

The 2-byte Controller Data field holds the state of SNES controller which is basically a 16 bit shift register of which 12 bits are being used to represent button states (unused bits are pulled high).

CID is a value uniqely identifying the sending controller instance to the server and used to store its state on the server.

P2CID is the CID of your selected "Player Two". The server will answer your packet with the controller data of the controller identified by P2CID.

Update packets are being sent to the server continuously even if the local controller state does not change state.

Switch Mode

To ease sorting out which player is to play as player 1 and which is to play as player 2 and prevent tedious interchanging of plugs the SNESoIP implements a "Switched mode" which exchanges player 1 and 2 in software.

To activate "Switched mode" simply hold down the B and Y keys of your controller while booting the SNESoIP. If successful, the SNESoIP's LED will blink briefly.

To deactivate "Switch Mode", simply reboot the SNESoIP without any buttons held down.

Special thanks goes to

  • lytron for testing the initial prototype,
  • Farbauti for his code improvements,
  • the community for all the support and motivation and
  • last but not least, to my mates at our local hackerspace, shackspace. You guys rock!


The whole project (except the IP stack by has has been released under the terms of a BSD-like license. See the file LICENSE for details.

"Nintendo" is a registered trademark of Nintendo of America Inc.


The SNES Wi-Fi adapter







No releases published


No packages published