A while back I did a jail break on my 3DS after learning that @wavemotion's awesome port of Stella for the Nintendo DS, could run on it. It even runs games that use coprocessors in the cartridge like Stay Frosty 2!
I have a Virtual Boy that I'd picked up new in box when they were being cleared out in '96. I think I paid $30 for it, and $7 per game for the 11 games they still had in stock. While I kept the main box, sadly I did not keep the game boxes.
Install went without any problems. To install the ROMs I ran FTPd on the 3DS and used FileZilla on my Mac. This is more convenient than removing the handles on my 3DS so I can remove the SD card and pop it into the Mac. You can find information about this process in this reply of the StellaDS topic.
Forgot to mention - I find the ROM picker to be very touchy. You have to swipe up/down to scroll the list, but inevitably I'll accidentally launch a ROM while swiping. It might work better with the stylus, but it's trapped in my 3DS by the handles.
How current are you on the emulator? Reading this discussion at GitHub it looks like the 3D could not originally be adjusted, it was either on or off. Last week they made a change that lets you adjust the 3D using the 3D slider. After that an additional change was done so you can pick between 2 different modes for adjusting 3D.
That looks like a solid well done emulator, makes me sad there just isn't one for generic Windows/PC use which sucks other than really the decade old vbjin. I know mednafen has a corner for it, but that emulator is a dumspter fire of pure pain with it's archaic command line functions and variables just to load a basic rom... shame no one ever hacked it to add a GUI. I've tried using a couple outside projects at a GUI they never worked either. :\
The latest Release is still from 2 weeks ago though, so does not include it. It looks like you can get current build by clicking on a run under Actions, top run is currently clear screen when loading rom and has 2 files:
So I downloaded it then figured out I needed to run FBI -> Remote Install -> Receive URLs over the network on my 3DS, as well as a program to run on my computer to send over the cia file. I found Mac specific program 3DS-FBI-Link:
I have waited for Red Viper ever since the 3DS was announced to have stereoscopic 3D. Each year I became more and more disappointed that not even one VB game ever made it to the 3DS. I mean, the 3DS was practically MADE to run Virtual Boy games, a VB collection was a completely wasted opportunity. I feel fully satisfied now that Red Viper exists, especially after previous years of slow and incomplete VB emulators for 3DS.
I finally checked it out last weekend, that is really cool. It's not quite as nice as the real thing, and seems like it was making me a little woozy, but it's really cool as far as emulation goes.
Even the control settings aren't too bad with most games I tried. Seems like most games either rely on the right d-pad, or the B/A buttons, and not both at the same time.
I didn't know there was an unreleased Faceball game for VB. I don't know how finished it is, but I played it for quite a while.
I only did the 3DS-FBI-Link method that one time because the original touch-screen interface to select a game was very finicky, it kept launching games while scrolling the ROM list up/down with my finger. It was so annoying that when the commits were done to add support for physical controls I wanted to try it out ASAP. It wasn't yet part of the official release, that happened about 2 weeks later, so the QR Code method wouldn't have installed it at that time.
I suspected the stylus worked better. The handles I use on my 3DS, else my hands cramp, block access to the stylus. Wish it'd been designed with either a cutout to access the stylus storage, or a new place to store the stylus.
Could always just swipe one from the Wii U.
I've got a bunch of different styluses I've bought around the desk. I don't have any XLs, so the styluses that came with my 3/DSes are all pretty small.
Some of them have the little string loops on them so you can hang them on a handheld.
Uh oh, better find one.
I usually use this Totakeke stylus, but I've got plenty of basic third party ones lying around too, including one that resembles a clickable Sharpie.
Totakeke has definitely seen a lot of Ouendan.
Finally got around to setting up Red Viper this weekend. Here is how my setup turned out. The circle pad pro support is an awesome touch by the developer. I highly recommend this to those die-hard Virtual Boy fans out there.
Wasn't sure if the Circle Pad Pro was working as there's no indicator lights and the home screen of the 3DS doesn't appear to recognize it, so found a list of games that support it - nothing I have, so I tracked down a CIA for Kid Icarus Uprising
An Erlang driver is a library containing a set of native driver callbackfunctions that the Erlang Virtual Machine calls when certain events occur. Therecan be multiple instances of a driver, each instance is associated with anErlang port.
A driver callback is executed as a direct extension of the native code of theVM. Execution is not made in a safe environment. The VM cannot provide thesame services as provided when executing Erlang code, such as pre-emptivescheduling or memory protection. If the driver callback function does notbehave well, the whole VM will misbehave.
As from ERTS 5.5.3 the driver interface has been extended (seeextended marker). The extended interfaceintroduces version management, thepossibility to pass capability flags (seedriver_flags) to the runtime system at driverinitialization, and some new driver API functions.
Each driver instance is associated with a port. Every port has a port ownerprocess. Communication with the port is normally done through the port ownerprocess. Most of the functions take the port handle as an argument. Thisidentifies the driver instance. Notice that this port handle must be stored bythe driver, it is not given when the driver is called from the emulator (seedriver_entry).
Many of the output functions have a "header buffer", with hbuf and hlenparameters. This buffer is sent as a list before the binary (or list, dependingon port mode) that is sent. This is convenient when matching on messagesreceived from the port. (Although in the latest Erlang versions there is thebinary syntax, which enables you to match on the beginning of a binary.)
Drivers are locked either on driver level or port level(driver instance level). By default driver level locking will be used, that is,only one emulator thread will execute code in the driver at a time. If portlevel locking is used, multiple emulator threads can execute code in the driverat the same time. Only one thread at a time will call driver callbackscorresponding to the same port, though. To enable port level locking, set theERL_DRV_FLAG_USE_PORT_LOCKING driver flag inthe driver_entry used by the driver. When port levellocking is used, the driver writer is responsible for synchronizing all accessesto data shared by the ports (driver instances).
It is assumed that drivers do not access other drivers. If drivers access eachother, they must provide their own mechanism for thread-safe synchronization.Such "inter-driver communication" is strongly discouraged.
Most functions in this API are not thread-safe, that is, they cannot becalled from arbitrary threads. Functions that are not documented as thread-safecan only be called from driver callbacks or function calls descending from adriver callback call. Notice that driver callbacks can be called from differentthreads. This, however, is not a problem for any function in this API, as theemulator has control over these threads.
A function not explicitly documented as thread-safe can, at some point intime, have a thread-safe implementation in the runtime system. Such animplementation can however change to a thread unsafe implementation at anytime without any notice.
As mentioned in the warning textat the beginning of this section, it is of vital importance that a drivercallback returns relatively fast. It is difficult to give an exact maximumamount of time that a driver callback is allowed to work, but usually awell-behaving driver callback is to return within 1 millisecond. This can beachieved using different approaches. If you have full control over the code toexecute in the driver callback, the best approach is to divide the work intomultiple chunks of work, and trigger multiple calls to thetime-out callback using zero time-outs. Functionerl_drv_consume_timeslice can beuseful to determine when to trigger such time-out callback calls. However,sometimes it cannot be implemented this way, for example when callingthird-party libraries. In this case, you typically want to dispatch the work toanother thread. Information about thread primitives is provided below.
Timer functions - Control the timer that a driver can use. The timer hasthe emulator call the timeout entry functionafter a specified time. Only one timer is available for each driver instance.
Queue handling - Every driver instance has an associated queue. This queueis a SysIOVec, which works as a buffer. It is mostly used for the driver tobuffer data that is to be written to a device, it is a byte stream. If theport owner process closes the driver, and the queue is not empty, the driveris not closed. This enables the driver to flush its buffers before closing.
Output functions - With these functions, the driver sends data back to theemulator. The data is received as messages by the port owner process, seeerlang:open_port/2. The vector function and the function taking a driverbinary are faster, as they avoid copying the data buffer. There is also a fastway of sending terms from the driver, without going through the binary termformat.
795a8134c1