You are not logged in. | Register | Resend Activation

System Overview

1 Introduction

The Virtual Boy is a portable 3-D videogame device developed by Gunpei Yokoi (1941-1997) for Nintendo. Featuring a 3D display capable of 384×224 resolution with 4 shades of red for each eye, and powered by a 20MHz V810 RISC CPU. Originally released in 1995 for around $200 in the US, the VB quickly fell under intense criticism from the video game Industry for being over priced and unimpressive. Nintendo let the system flounder for only a year before pulling the plug on it, making it the only system released by Nintendo to date that was a major flop. When the dust had settled there where 11 US/Japan titles, 3 US titles, and additional 8 titles released only in Japan. This is a guide to hacking the Nintendo Virtual Boy. Over the past several years, with the help of many other people, I have begun reverse engineering the VB system. This is a collection of what has been discovered so far. I hope that you will be able to glean a little useful information from this document.

2 Equipment needed

To hack the VB for yourself you will need some specific equipment, depending on how far you want to go. For starters, to understand the internals and code that follows you will need at least a rudimentary understanding on Assembly language, and the inner workings of a computer (memory, CPU, I/O, etc.). In order to run the demo code you will need a PC, running windows or Linux, and an Internet connection to grab the emulator and assembler or gccVB. And finally to 'hack' the real VB you will need some soldering equipment and patience, along with an EPROM programmer to actually test the code on the real thing. Finally in this document I assume that you understand the difference between Binary, Integer, and Hex number systems (Base-2, Base-10, and Base16), and how to convert between them, see appendix A for details.

3 Hardware Overview

The VB hardware consists of:

  • NEC v810 RISC CPU clocked at 20 MHz
    • Includes custom opcodes
    • Intel byte order architecture (little-endian)
    • Five maskable interrupts (Controller, Timer, Expansion Port, Link Port, Display Retrace)
    • 64 KB Program Scratch Memory
    • 96 KB Display Memory
    • Up to 16 MB of Cartridge ROM
    • Up to 8 MB of Cartridge Ram (saved ram)
    • Up to 16 MB of cartridge expansion area
  • Two Reflection Technologies P4 LED Displays
    • 384×224 resolution per display
    • Four shades of red on screen at one time
    • Refreshes at 50 Hz, period is 20 ms, display redraw takes 5 ms per screen
    • Double buffer of video memory
  • Bi-directional Link Port
    • Clock 50 kHz(20 µs) fixed or 40-500 kHz user pulsed
    • Hardware Interrupt
  • 16 bit Controller Port
    • Hardware/software read
    • Hardware Interrupt
  • 16 bit timer
    • 20 ms/100 ms clock resolution
    • Hardware Interrupt
  • Programmable Sound Generator
    • 41.7 kHz with 10-bit precision 1)
    • 6 sound channels:
      • Four 6-bit PCM wave channels
      • One Sweep/Modulation channel
      • One pseudo-random noise generator
    • Stereo output; per-channel panning
  • Hardware Sprite engine
    • Display 2048 sprites simultaneously
    • 32 Worlds (layers)
    • Simple 'parallax' 3D support
    • Affine transformation (scale, rotate, skew)
1) this is the actual DAC bit depth; 13-bit precision is used internally
 


Last modified: 06.01.2010