Good news for fans of PlayStation Vita — a new project from [Sergi “xerpi” Granell] allows users to run software written for Sony’s erstwhile handheld system on Nintendo’s latest money printing machine, the Switch. To be clear, there’s a very long road ahead before the vita2hos project is able to run commercial games (if ever). But it’s already able to run simple CPU-rendered Vita homebrew binaries on the Switch, demonstrating the concept is sound.
On a technical level, vita2hos is not unlike WINE, which enables POSIX-compliant operating systems such as Linux, Mac OS, and BSD to run Windows programs so long as they use the same processor architecture. Since the Switch’s ARM v8 processor is capable of executing code compiled for the Vita’s ARM v7 while running in 32-bit compatibility mode, there’s no emulation necessary. The project simply needs to provide the running program with work-alike routines fast enough, and nobody is the wiser. Of course, that’s a lot easier said than done.
According to the project page, the big hurdle right now is 3D graphics support. As you could imagine, many Vita games would have been pushing the system’s graphical hardware to the limit, making it exceptionally difficult to catch all the little edge cases that will undoubtedly come up when and if the project expands to support commercial titles. But for homebrew Vita games and utilities that may not even utilize the system’s 3D hardware, adding compatibility will be much easier. For instance, it’s already able to run [xerpi]’s own CHIP-8 emulator.
[xerpi] provides instructions on how to install vita2hos and the Vita executable to be tested onto an already hacked Nintendo Switch should you want to give it a shot. But unless you’ve got experience developing for the Vita or Switch and are willing to lend a hand, you might want to sit this one out until things mature a bit.
Thanks to [NeoTechni] for the tip.
“CPU-rendered Vita homebrew” means the homebrew games are effectively writing to screenbuffer. Properly implementing a virtual GPU would be accomplished best using shaders. However, a more sane approach would be to implement the system libraries, statically recompile the binary, and link those libraries. This would result in binary that would run natively on your target platform. It wouldn’t be entirely optimal but it greatly surpasses emulation.
That’s a more performance oriented solution for sure. But it also seems like a lot more man hours, for each game, if I’m understanding correctly.
You are not understanding correctly because the system libraries are standard and every game dynamically links to them.
I am not very well versed in 3D game dev, but I wanted to share what I have looked into with this. While the ARMv7 binaries run on the system with translated systems calls, the issue currently is the compiled shaders running on the Switch hardware. The shader binaries will need to be parsed and then converted to the native switch shader format and then compiled again. In the simple examples shown, the shaders were able to be done by scratch, but I would image that the graphics code being used in a lot of games might be optimized in unpredictable ways. I would imagine that a possible solution would be to leverage code being used in PS Vita emulation to convert Vita shaders to a well documented shader format, and then pre-compiling to Switch format to be transferred with the ROM file to the Switch.
Can’t wait for the day in which I’ll be able to play a GBA game emulated on a psp emulated on Vita emulated on switch emulated on a nested VM.
That GBA game should be one of the NES Classics series.
Ha