Vita3K Progress Report - April 2018
Lately I’ve been contributing a lot to an emulation project that was open-sourced a few months ago by its founding developer, PetMac. As the title suggests, it aims to emulate the Playstation Vita.
When it was initially released, it booted a bunch of homebrew titles and a few months later - after me and a few other developers have been working on it - it has progressed a great deal.
Anyway, that’s it for the preface - I’m posting the whole thing below or alternatively you can read it on our project’s blog here: https://vita3k.github.io/blog.html.
Welcome to our first progress report!
This past month Vita3K has seen numerous improvements, achieving an important milestone in the development of any emulator: commercial games starting to show signs of life!
In addition, a lot of homebrews have progressed as a few important parts of the PS Vita kernel were implemented.
Module loading was the final hurdle for loading commercial games. In a few words, it allows loading dynamic modules included with games, in Vita3K’s internal representation of the Vita’s memory.
‘Downwell’, ‘VVVVVV’, ‘Duke Nukem 3D: Megaton Edition’ and probably many other commercial games load and print debugging output.
It’s important to note that frangarcj was able to implement this thanks to the reversing work done by many people in the Vita homebrew scene, including but not limited to yifanlu and xyz.
Unfortunately, it will be a while before we’ll get graphical output from commercial games, since we’re still in the process of reversing the shader format of the Vita’s GPU. After that, we’ll need to translate those shaders to a host format, which is a challenge in and of itself. There are possible workarounds for this until we get to that point, but we haven’t explored them yet as games crash because of reasons unrelated to graphics.
This is solved by providing synchronization primitives. Two very common examples are semaphores and mutexes. The Vita also has “lightweight” versions of those, which essentially perform faster by making some trade-offs.
The PRs above essentially implement semaphores, mutexes and lightweight mutexes. The Vita kernel supports many more types, but these are some really common ones used by nearly every game.
This and subsequent PRs implement a basic graphical interface using the ‘dear imgui’ immediate-mode GUI library. It adds some debugging tools that we’ll no doubt improve and expand upon as development progresses.
Booting games is still only possible by supplying them as command-line arguments, but that will change in the future.
Here’s a few other screeshots showing homebrews that either boot or are playable for the first time after this month’s work.
Flood it (#152)
Numpty Physics (#163)
Here’s a rough list of features we’re prioritizing at the moment. They will likely be explained in more detail once implemented.
- Callback system It is common for Vita functions to work with callbacks instead of blocking. We don’t have such a system for callbacks yet, so we can’t implement all those functions properly.
- Fonts Every homebrew that uses SceFont (a lot of them) can’t boot at the moment, it’s one of the most important modules needed for homebrew to work.
- More sync primitives Conditional variables and Lightweight conditional variables
- Dialogs There has been some initial work on this using our new GUI, but more is needed.
It’s not easy to sift through each commit/Pull Request and pick out more to show off here, but hopefully we gave a decent overview of our progress the past month.
This post was written by a developer - unless we get more people willing to help write these reports (or record/edit videos), we can’t promise they’ll be regular and more detailed, so if you’re interested, contact us on our Discord.
Thanks to IllusionMan1212 for providing the screenshots and testing.
That’s all for now, thanks for reading!