Demo Vision
The Demo Vision, also branded as Demo Boy II, is a specialized NES console used in Game Boy kiosks. It does not have a cartridge slot nor controllers. Instead, an attached Game Boy supplies video and audio to the system.
The system has been reverse engineered primarily from its rev B firmware software with no access to the hardware, and as such, the current knowledge should be considered incomplete.
Design
The Demo Vision uses two pairs of standard, 8 KiB CHR-RAM (32 KiB total) to hold Game Boy screen data. Each pair is used as a screen buffer. The active pair is read by the PPU to render the screen, while Game Boy screen data is written into the inactive pair. Their roles can be swapped at any time by firmware software running on the NES CPU. An additional 8 KiB of CHR-ROM is present, used to hold the screen border graphics.
An MMC5 or MMC5A mapper is built into the system, allowing any of the active 24 KiB of CHR data to be used anywhere on the screen. The active screen buffer is available as the first 16 KiB of CHR, followed immediately by the CHR-ROM. The inactive screen buffer is not mapped.
The firmware software is contained in 8 KiB of PRG-ROM. This software sets up the mapper, nametables, attributes, and palettes for displaying the Game Boy screen data and border, and is responsible for controlling power to the Game Boy unit, which it enables after completing setup. The firmware is also responsible for switching screen buffers. This is done in an interrupt handler, but rather than using NMIs at the NES frame rate, an IRQ at the Game Boy frame rate is used, ensuring the active buffer always contains a complete Game Boy frame. However, there is still visible tearing because the swap can happen at any time in the NES frame.
The CPU address space features 8 KiB of RAM at $0000-1FFF, rather than the standard 2 KiB.
There are 6 DIP switches available for software use. The firmware uses switches 1-3 for a gameplay timer. If configured with a time, the firmware will reset the Game Boy after the timer expires by toggling its power. The other 3 are unused.
Demo Vision systems were available in 6 variations: domestic, Europe, and UK, each in single and dual varieties. Domestic versions use an NTSC CPU and PPU and Europe versions use a PAL CPU and PPU. The UK variant has not been documented. The dual systems are believed to use two identical Demo Vision boards with no logical connections between them.
Registers
$4016 write
7 bit 0 ---- ---- .... ..BP || |+- Game Boy power (0 = off, 1 = on) +-- Active screen buffer
- Game Boy power should be set to 1 once the system is configured and ready. The Game Boy can be reset by clearing this to 0 for at least 2 PPU frames and then setting it back to 1.
- Active screen buffer swaps which 16 KiB of CHR-RAM is accessible to the PPU as the first 16 KiB of CHR and which is being filled with Game Boy screen data. It is not known if the active CHR-RAM can be written by the PPU.
$4016 read
7 bit 0 ---- ---- ..65 4321 || |||| ++-++++- DIP switches 6-1 (0 = off/up, 1 = on/down)
IRQ
The CPU /IRQ is believed to be asserted at some point during every Game Boy vblank. It is asserted for a limited time and does not require an ack. The firmware software's IRQ handler includes a 1281 cycle wait loop, and the handler takes 1322 cycles in total, which should be taken as an upper bound on the IRQ length.
DIP switches
There are 6 DIP switches. They are software-readable and have no other hardware function. They read as 0 in the off/up position and 1 in the on/down position.
Software
- 1: Gameplay time
- 2: Gameplay time
- 3: Gameplay time
- 4: Unused
- 5: Unused
- 6: Unused
SW3 | SW2 | SW1 | Gameplay time |
---|---|---|---|
0 | 0 | 0 | 1 minute |
0 | 0 | 1 | 3 minutes |
0 | 1 | 0 | 5 minutes |
0 | 1 | 1 | 8 minutes |
1 | 0 | 0 | 12 minutes |
1 | 0 | 1 | Unlimited |
1 | 1 | 0 | Unlimited |
1 | 1 | 1 | Unlimited |
If the firmware software detects that switches 1-3 have changed, it resets the Game Boy and sets the timer with the new time.
Hardware configurations
Demo Vision:
- Board:
- Rev B
- Chipsets:
- RP2A03G / RP2C02G-0 (domestic)
- RP2A07A / RP2C07-0 (Europe)
Demo Boy II:
- Board:
- Rev A
- Rev B
- Chipsets:
- RP2A03G / RP2C02G-0
- RP2A07A / RP2C07-0 (Europe)