VirtualBoy controller to USB adapter
ContentsIntroduction

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.
Pictures
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:
December 2020: Someone recently asked about the diode and resistor visible in the pictures above.
It has been a while, and this build was for a customer,
but if I recall correctly, this was a hack to use the power switch to select mappings. The trick was to short the battery
contacts inside the battery enclosure (using fake batteries), and then wire the battery wire (pin 6) to PC0 on the PCB.
The diode and resistor were there for safety in case someone ever connected a controller with actual batteries. The diode
is to make sure you can only pull PC0 towards ground and not inject voltage into the board, and the resistor to limit current
in case of reverse-inserted batteries.
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!
Mappings
USB | Default | Alternate |
---|
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.
Schematics and wiring
Here is the schematic and annotated pictures of the connectors:
Here is a table mapping pin numbers to colors and functions:
# | Name | Color | Comments |
1 | Data | Yellow | |
2 | +5v | Blue | 5 volt from console to controller. |
3 | Latch | Brown | |
4 | Clock | Orange | |
5 | GND | Black | |
6 | Vbat | Red | Battery voltage |
Software
Version v1.1 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
|
File(s): virtualboy_usb-1.1.tar.gz (91.7 KB)
virtualboy_usb-1.1.hex (7.3 KB)
|
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.
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.
Disclaimer
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 :)