An Arduino-based multitap device for Sega Genesis / Mega Drive. Can be used with a real hardware console to play 3-player games.
Compatibility • Usage • Build • Notes • Q&A • Support • License • Credits
Quadnesis implements the same protocol as Team Player does and is therefore compatible with games that support Team Player. It does not work with 4-Way Play or J-Cart games (unless they support Team Player as well).
Quadnesis only supports consoles that provide +5 V on gamepad ports.
Depending on console circuitry, the actual voltage might be lower than +5 V quite a bit. Per datasheet, ATmega328 needs at least 3.78 V to run at 16 MHz. Therefore, make sure that your console provides at least 4.0 V via pin 5 of a gamepad port. If it does not, you might be able to trace the power lines inside the console and find a diode or two; replacing them with Schottky analogs might give you the required voltage bump. Do this at your own risk; please make sure you understand possible side effects of such a mod (like burning something) before venturing into it!
If you happen to have a Genesis clone with custom gamepads that are powered from 3.3 V or something like that (not sure if such clones exist, but anyway), do not use Quadnesis at all and do not attempt to increase that voltage (at the risk of burning the gamepads).
Quadnesis only supports standard 3-button and 6-button gamepads. It does not support any other peripherals like a mouse or a light gun.
To play 3-player games with Quadnesis X2, connect one gamepad to console port 1 and two other gamepads to Quadnesis (a "1+2" configuration), and connect Quadnesis to console port 2. Some games might need a different configuration. Remember to only perform all connections with the console powered off!
Quadnesis can work in one of two modes:
- Multitap mode, where all gamepads connected to Quadnesis can be used in the game. The game must explicitly support multitap protocol, which is why 99% regular 1- or 2-player games do not work in this mode at all.
- Passthrough mode, where only one of the gamepads is connected to the console at a time. Works fine with regular 1- or 2-player games, but you only get one gamepad per console port, just as if there were no Quadnesis at all in the picture.
- The only reason for having a passthrough mode is to let you play different games (multitap and non-multitap) without re-connecting all those cables.
- In Passthrough mode, you can choose which gamepad is connected, and even select another gamepad on the fly during the game (but do not connect or disconnect cables when the console is powered on!). This way two people can control a single character in turns, e.g. it lets you help a less experienced player in difficult moments.
The mode switch on Quadnesis X2 has three positions:
- Multitap mode,
- Auto-detection,
- Passthrough mode, gamepad 1 active.
You can switch between these at any moment, but remember that going from passthrough to multitap (or vice versa) on the fly might be a total surprise to the game and you might need to reset the console.
When the switch is in the "Auto" position, Quadnesis will first try the multitap protocol. If the game does not initiate multitap exchange, it will fall back to passthrough mode with gamepad 1 active. This lets you play all kinds of games without ever touching the mode switch.
Also, when Auto mode switches to passthrough for the first time, it will make one more attempt (just once in this session!) to use the multitap protocol when you press Start on the active gamepad. This is useful if you're starting games from a flash cartridge where Start is needed to actually run the game, and Quadnesis is connected to port 1.
There are two more switches that control optional features of the device:
- Dummy gamepad: the switch can enable or disable the dummy 3rd gamepad (see below). You'll want this one off most of the time, except for some games.
- Hotkeys: this switch can be used to disable gamepad-swapping hotkeys (such as
Startin passthrough mode andStart+X/Y/Zin multitap mode, see below). Might be useful in competitive games.
Some functions can be activated directly from gamepads, without the need to reach over to Quadnesis and flip a switch there.
Button sequences should be pressed the same way as hotkeys on a PC, e.g. for Start+A you hold Start, press and release A, then release Start.
In multitap mode:
Start+XorY: connect your gamepad to another player slot (i.e. swap gamepad 1 and gamepad 2). TheXbutton will make your gamepad first, theYbutton will make it second (and the other gamepad first).- Might be useful to switch between characters in The Lost Vikings, e.g. to help a less experienced player.
- In competitive games this function might be undesirable and can be turned off with the feature switch. On the other hand, pressing
Startwill typically pause the game and therefore the swap won't go unnoticed anyway. - These hotkeys are not supported on 3-button gamepads as this would conflict with some games (The Lost Vikings). Come on, it's high time you upgraded to 6-button controllers :).
Start+Z: with this, you can even connect your gamepad to slot 3, i.e. replace the dummy gamepad (see below), though it makes little sense in practice.- Pressing it enables the dummy gamepad if it was not enabled with the feature switch. Probably the only sensible use of this hotkey.
In passthrough mode, on the inactive gamepad:
Start: switch to this gamepad (and make the other one inactive).Start+A: switch to multitap mode.- A typical scenario for this is when Quadnesis has auto-switched to passthrough because the game initially did not request multitap, but you want to go back to multitap mode. Often happens when you start a multitap game from a "smart" flash cartridge.
There's a whole separate page on this.
Anyway, here's a short summary of what you'll need to build the device:
- Arduino Pro Mini running at 16 MHz
- Two DE-9 sockets
- An electrolytic capacitor
- A handful of resistors
- A couple of slide switches
- A gamepad cable
- Arduino-style connectors to tie everything together
- Ability to make a PCB or a strong determination to wire everything on a prototyping board.
Most components can be ripped off of an old motherboard (if you happen to have one) or purchased online or offline - they are ridiculously cheap anyway.
Please check the aforementioned page for detailed instructions.
Reset
When you reset the console, this does not reset Quadnesis, and technically Quadnesis can't even detect it that the console gets reset. So if you want to restart Quadnesis for some reason, power off the console and then power it on again.
As a side effect, sometimes resetting the console might help e.g. if you have flipped the mode switch but the console does not "see" the new mode.
Dummy 3rd gamepad on X2
Quadnesis X2 (with only two gamepad ports) can emulate a third, dummy gamepad, reporting it as a 6-button gamepad that no one touches ever (all buttons released all the time). This is specifically needed for a hacked version of Rock N' Roll Racing that supports 3 players in a "1+2" configuration - but absolutely requires 3 gamepads on multitap, even if the 3rd one remains unused.
You can see the dummy gamepad in Multitap IO Sample Program.
Indicators
With such things as hotkeys and the Auto mode, it's not always clear what mode the device is currently in. Unfortunately Quadnesis X2 uses up all pins for communication with gamepads and the console, and therefore does not have a dedicated pin to indicate the current mode with an LED. Instead, it uses a "trick" of sorts to make the Arduino's built-in LED indicate the mode.
In passthrough mode, the built-in LED will always be on unless one of the A or B buttons is pressed on the active gamepad. Yes, it will flash during the game if you're actively using one of those buttons.
In multitap mode, the built-in LED will be switched off (in fact, it will be lit just a little).
If you want it the other way around, the LED being on in multitap mode and off in passthrough mode, you can remove the built-in LED and solder an external LED to the same pin (13), hooking it to Vcc instead of GND (remember to add a resistor as well!).
Please note that indication actually depends on how the game polls gamepad ports - while Quadnesis tries to do its best, it might simply have no chance to switch the LED the way it needs. In some cases, the LED might be fully lit even when multitap mode is forced with the mode switch; this typically happens with games that do not support multitap. Indication works better in the Auto mode.
4 gamepads anyone?
At 16 MHz, ATmega328 is several times faster than the console's CPU. However, this is barely enough for bit-banging with two gamepad ports. I had to go down to asm level and massage the C code to achieve the expected timings.
For more ports, one would have to use a faster microcontroller. Buffered modes (both passthrough and multitap) might still be possible with ATmega328 and PISO registers (parallel-in-serial-out), but whether the thing would be fast enough I don't know.
Q: Can it burn out my console?
Short answer: It should not, but there's no rock-solid guarantee. Use at your own risk!
Long answer:
Let's see what can possibly go wrong.
1. Clash on output pins.
On gamepad ports, the console can configure each pin to serve either as an input or an output; same holds for Arduino pins. If both Arduino and the console configure the same line as output, and then set it to different levels (e.g. high on Arduino side and low on console side), it will short-circuit Vcc to GND.
Sounds scary, eh? Come, sit a bit closer :).
Now, some good news:
- On Quadnesis PCB, all outputs towards the console are protected with 300 Ohm resistors, which limits the short-circuit current to ~17 mA. Arduino will survive that - its pins can source up to 40 mA. Whether the console survives, depends on its hardware.
- The only line between Arduino and the console that is not protected on Quadnesis PCB is Select, which is never switched to output mode by the firmware (and is supposed to have a resistor on the console side, see below).
- Consoles often have 300-330 Ohm resistors on their typical outputs (Select and Start/C), which might indicate that they can withstand that current too.
- It doesn't necessarily mean that yours has them.
- Also, games are not supposed to switch any pins to output that are not protected with resistors.
- In properly implemented gamepad and multitap protocols, output pins on Arduino side are always connected to input pins on the console side and vice versa. No clashes. Not until something goes nuts - either the game or Quadnesis firmware.
2. Arduino bootloader
On a regular Arduino board, the first thing that starts up on power-on is the bootloader. On older boards (pre-Optiboot), the bootloader first waits a second for UART communication (to give Arduino IDE a chance to upload a new sketch), and only then executes the real firmware.
In other words, for a second between power-on and firmware startup, the console sees something weird on the gamepad port, which looks neither like a gamepad nor like a multitap device. Exactly what the console sees, depends on the bootloader. Naturally one would expect all Arduino pins going to console (port B) to be in the INPUT mode, which the console would read as a disconnected port. In practice, however, I've seen different, confusing results.
Good news? With Optiboot, there's nothing to worry about, because Quadnesis firmware starts right at the power-on, without the extra 1-second delay.
You see, it should not burn out anything without a reason, but that can't be universally guaranteed.
Caution
DISCLAIMER: The author of this project is not liable for any damage to your console caused by this device. Please use the device at your own risk.
Q: My flash cartridge doesn't start / hangs up / shows colored stripes with Quadnesis plugged into port 1.
A: Chances are it doesn't like what it's seeing on the gamepad port while Arduino's bootloader is running. Reset the console (a hot reset, not a power-off) and it should all start normally.
Also, consider replacing your bootloader with Optiboot.
Q: Can I use an Arduino Nano / Uno / another edition?
A: You'll have to "downgrade" the board by unsoldering the USB-to-UART bridge (FT232 or something) because Quadnesis makes use of those UART pins. It might be easier to just buy a Pro Mini.
Q: Can I use ATmega168?
A: Only if it runs at 16 MHz, i.e. not ATmega168V (this one is limited to 10 MHz). I haven't tested it though.
Q: Can I use a non-AVR board compatible with Arduino IDE, such as ESP32?
A: Not with this firmware. The firmware is bound to the ATmega168/328 architecture - in particular, it uses direct port access, relies on instruction timings, etc.
You can, however, use the firmware as a starting point and adapt it to your MCU, provided that it has enough pins to connect everything.
There's no support per se, but if you need help or would like to discuss something (project-related of course), feel free to open a new discussion topic here.
If you believe you've found a bug, go ahead and report it as usual on GitHub.
Quadnesis firmware is licensed under the MIT License.
PCB designs are licensed under CERN-OHL-P version 2. For more information about CERN Open Hardware Licence, refer to this page.
Many thanks to:
- Sega engineers for creating Mega Drive/Genesis.
- Plutiedev for awesome docs on Genesis protocols.
- Whoever is the author of the Multitap - IO Sample Program ROM - for visualizing my mistakes :).


