The NES, SNES and Virtual Boy share the same serial communication protocol with few differences :
- NES controllers only send 1 byte of data (8 bits) whereas SNES and Virtual Boy controllers send 2 bytes of data (16 bits) due to the fact they have more buttons
- Button mapping is slightly different between the SNES and the VB (well not really if you look at the physical position of buttons, the left D-pad of the VB corresponding to buttons B/A/Y/X on the SNES pad)
In order to build my adapter I pulled a SNES controller port from a dead unit and for the plug on the VB side I used a NES one I cut a little to make it fit in the VB port:
The adapter also includes the PSU plug of the SNES (with the Graëtz bridge and the 7805).
The data sent by the SNES are in the following order:
B-Y-Select-Start-Up-Down-Left-Right-A-X-L-R = 12 bits, the remaining 4 bits are always high
For the VB:
Down(R)-Left(R)-Select-Start-Up(L)-Down(L)-Left(L)-Righ(L)-Right(R)-Up(R)-L-R-B-A = 14 bits, bit 15 being the low battery indicator and the last one being always high
The right D-pad on the VB having no real use as far as I know, I decided to reroute Down(R) and Right(R) to buttons A and B.
[EDIT] Seemingly 3 games can be problematic:
- 3D Tetris: the right D-pad is used for block rotation, so the lack of Down(R) and Right(R) means you have to press Up(R) or Left(R) 3 times instead of 1 to obtain the desired orientation.
- Red Alarm: in this game buttons A and B have the same function as Select and Start thus you can play the game with an unmodified SNES pad.
- Teleroboxer: unfortunately this game needs every single button. One solution is to add 2 buttons to a SNES pad.
Back to the mod.
Two 4021 are daisy chained to serialise data. What have to be done:
- reroute button A from pin 1 of the right 4021 to pin 5 (of the same 4021)
- reroute button B from pin 1 of the left 4021 to pin 4 of the right 4021
- pull pin 1 of both 4021 to +5V, if not the console will see Down(R) and Right(R) as pressed
Pin 1 of the left 4021 and pins 1/4/5 of the right 4021 have to be lifted (be careful they are mounted head to tail).
Then the following connections have to be made:
- pad 1 of the right 4021 has to be connected to pin 5 (lifted) of the same 4021
- pad 1 of the left 4021 has to be connected to pin 4 (lifted) of the right 4021
- pin 1 (lifted) of both 4021 have to be connected to +5V
The pads can be difficult to access so you can solder on the resistors: