raphnet.net banner

VirtualBoy controller to USB adapter

Contents: Introduction | Pictures | Mappings | Schematics and wiring | Software | User pictures | Disclaimer


So you want to play with a Virtual Boy emulator on your PC, depriving yourself the pleasure of adopting an unpleasant posture and of getting a headache? At least, don't go so far as to deny yourself the privilege of holding the real controller in your hands! (Ok, I admit I never really tried a real Virtual Boy. Maybe it's not that bad...)

Anyway, in order to use a Virtual boy controller on a PC, I designed an adapter. The schematics, wiring and source code are on this page.

goto top Up


Here are a few pictures demonstrating how this project can be implemented.

1. Building an adapter

If you have the small circuit board with the controller connector salvaged from an (hopefully broken) console, you can build an adapter:

2. Converting a controller (with internal circuit)

If you don't have the console-side connector, a permanent controller conversion can be made by building an/or installing the circuit internally:

3. Converting a controller (with external circuit)

The circuit can also be built/installed externally, in-line with the original cable. Make sure to protect it with an enclosure!

goto top Up


Axes 1 and 2 Left D-Pad Left D-Pad
Axes 3 and 4 Right D-Pad
Button 1 A A
Button 2 B B
Button 3 Start Start
Button 4 Select Select
Button 5 R R
Button 6 L L
Button 7 Right-D-pad Up
Button 8 Right-D-Pad right
Button 9 Right-D-Pad down
Button 10 Right-D-Pad left
How to use mappings:

1: If the START button is held when powering-up the adapter (eg: by connecting the USB cable), the alternate mapping will be enabled.

2: The mapping can be changed "live" by connecting PB1 or PC0 to GND through a jumper or switch.

goto top Up

Schematics and wiring

Here is the schematic and annotated pictures of the connectors:


Cable side pinout

Cable side pinout

Console side pinout

Console side pinout

Here is a table mapping pin numbers to colors and functions:
2+5vBlue5 volt from console to controller.
6VbatRedBattery voltage

goto top Up


virtualboy_usb-1.1.tar.gz (91.7 KB)
virtualboy_usb-1.1.hex (7.3 KB)
February 22, 2014 (Saturday) Version 1.1:
  • Alternate mapping can be enabled at run-time by grounding PORTC0 or PORTB1.
  • Updates for compilation with recent GCC
  • Updated USB VID/PID
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:
Using the .hex files
The Atmega8a has to be programmed using the .hex file. The "fuse bytes" for this project are high_byte=0xc9, low_byte=0x9f.

For more information about the tools required to program an AVR microcontroller, please visit my AVR programming page.

Source Code (.tar.gz files):
Unless indicated otherwise, the source code is published under the GPL license. Please consult the included LICENSE file for more information. The project compiles using the included makefiles using avr-gcc under Linux.

goto top Up

User pictures

I like seeing how others build my projects. If you build an adapter, please send me pictures and I'll add them here.

goto top 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 :)

goto top Up

Trademarks used in this site are the property of their respectives owners.
Copyright © 2002-2018, Raphaël Assénat
Website coded withWebsite coded with vimLast update: October 14, 2016 (Friday)