A Virtual Boy emulator for the 3DS
A Virtual Boy emulator for the Nintendo 3DS continuing mrdanielps's work on r3Ddragon, which is itself based on Reality Boy / Red Dragon. It uses a dynamic recompiler with busywait detection and a hardware-accelerated renderer to achieve high performance on the 3DS's limited hardware.
A modded 3DS is needed. Once that's sorted, you can install it using Universal Updater.
You can also scan this QR code with FBI.
Alternatively, the latest release can be manually downloaded here, provided as a 3DSX (can be loaded with Homebrew Launcher) and as a CIA (can be installed to the HOME Menu with FBI). ROMs can be placed in any desired location on your SD card. The emulator will remember the location of the last ROM you loaded.
ROM files must use the .vb extension to be recognized. They may be archived in .zip files.
ROM files may be placed anywhere on the SD card - the emulator has a file browser, and remembers the most recently used directory.
If you're looking for games, check out Planet Virtual Boy's homebrew section!
It doesn't work! / What's this DSP firmware error?
Try updating your Luma3DS installation (I tested with v13.0.2). Once it's updated, you may need to dump your DSP firmware.
Can I use a flashcart, like Gateway 3DS?
Red Viper uses a dynamic recompiler, which requires functionality only available when Luma is installed. Flashcarts cannot provide this, and therefore unfortunately cannot run Red Viper.
The depth slider is weird.
The Virtual Boy wasn't designed with a depth slider, so games can't have their depth scaled in the way 3DS games can. The alternative is to shift the entire image backwards or forwards, similar to how the Virtual Boy's IPD slider works. The default setting (3DS mode) starts at a "neutral" level and pushes the image further back as you move the slider up, keeping the metaphor fairly similar to how most 3DS games work. Alternatively, "Virtual Boy IPD" mode can be enabled, which unlocks the full range, from closest to furthest.
To use the "default" level, use 3DS mode and keep the depth slider on, but near the bottom.
What do the numbers in the performance info mean?
This displays the time taken for All processing in one frame, DRC processing (CPU emulation), Citro3D processing (CPU graphics), and PICA200 processing (GPU graphics). It also displays the Memory usage of the DRC cache (increases over time then resets).
As this is a developer option at heart, frametimes are displayed in milliseconds rather than FPS, as the former is much easier to reason about in this context. The target is usually 20ms, though some games only draw every other frame, so rendering has more leeway there.
After setting up devkitPro, install the additional dependencies:
> pacman -S 3ds-zlibAfter cloning the repository, fetch the last dependencies:
> git submodule init
> git submodule updateOnce that's all sorted, you can choose between four different make targets:
make release is the default, and adds -O3 to CFLAGS.make testing adds -O3 to CFLAGS. It will output basic debug info to a connected debugger.make debug adds -g -O0 to CFLAGS. It builds without optimizations so it can be debugged more easily.make slowdebug adds -g -O0 to CFLAGS. It will output a lot of debug information, which will slow emulation down but might be helpful to debug game-specific issues.A Virtual Boy ROM can be bundled into a Red Viper CIA, so that the game takes a space on the HOME Menu. This can be done as follows:
cd followed by a space, then drag the ExtractedBanner folder into your command prompt window, then hit enter. The terminal should now display the path to your ExtractedBanner folder. -evfd banner.cgfx bannerout, then hit enter. A new "bannerout" folder should be created. -ivfd banner.cgfx bannerout, then hit enter. Note that unlike step 9, with "-evfd", this one contains "-ivfd".You should now have a "red-viper_Edited.cia" file in your extract folder. This contains your provided ROM and all the metadata changes.
Some of the code is distributed under the MIT License (check source files for that) but, since this is a port of Reality Boy, here is (part of) the original readme:
…No open issues yet, or sync has not completed.