Skip to content

EmuCoreV - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/sashkinbro/EmuCoreV
Upstream https://github.com/Vita3K/Vita3K
Version 0.1.8
Profiled 2026-08-11
Cores emucorev
Systems sony-playstation-vita
Author Oleksandr (sashkinbro)
Technical notes

PlayStation Vita emulator for Android, package com.sbro.emucorev, arm64-v8a only. A Kotlin and Compose front end drives a Vita3K tree vendored verbatim under app/src/main/cpp/vita3k, reached through an adapter layer that owns every JNI entry point. Frontends start the exported activity com.sbro.emucorev.core.vita.Emulator with an AppStartParameters string array; ES-DE passes -r followed by the title id read from the .psvita file. ref: app/src/main/cpp/emucorev/README.md:1-13, app/src/main/AndroidManifest.xml:85-101, app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:128, app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:140-152, app/build.gradle.kts:85-86, app/build.gradle.kts:95

The Android library is built from the JNI sources plus interface.cpp and performance.cpp, and links app, audio, compat, config, cppcommon, ctrl, dialog, display, ime, lang, gdbstub, gxm, io, miniz, modules, motion, packages, patch, renderer, shader, touch, util and psvpfsparser, with overlay and np arriving through renderer and modules. The ImGui front end under vita3k/gui is never added as a subdirectory, gui-qt is desktop only, and the adapter drops those two and updater from the link line as well when a configuration defines them. So the home screen, live area, themes, trophy collection, user avatars and the pd0 background music player are not compiled: pd0 is written by a firmware install and never read back, which is why no third preinst package is offered. ref: app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:122-124, app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:154-172, app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:212-215, app/src/main/cpp/emucorev/cmake/AttachToVita3K.cmake:31, app/src/main/cpp/emucorev/cmake/CoreTargetFilter.cmake:19-23

Firmware installation calls vanilla install_pup. The file is tested for the SCEUF magic and nothing else, the SCE segments are decrypted with the built-in keys, os0.img, pd0.img, sa0.img and vs0.img are joined from their pieces, and each image with content is extracted into the Vita filesystem root. The version string is read from the version.txt the package carries. No digest and no length is compared. ref: app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:86-102, app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:119-123, app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:239-258, app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:260-314

Two packages are named in code, both pinned to firmware 3.74 and fetched from Sony. Each URL carries the MD5 of the package it serves in its rel_ and sd_ path segment. The byte counts beside them feed the progress bar and its fallback alone, and one of the two is not the length of the file it names, so nothing measures what was downloaded. ref: app/src/main/java/com/sbro/emucorev/core/FirmwareSource.kt:16-37, app/src/main/java/com/sbro/emucorev/ui/onboarding/FirmwareDownloadViewModel.kt:96-124

Both packages are required. launchInstalledTitle returns MissingFirmware before doing any work when vita/vs0 holds no file, and MissingFirmwareUpdate when vita/sa0 holds no file, each with its own refusal string. The refusal is the app's own: nothing in the vendored core tests either partition before a run, and the only sa0 test in the tree sits in the front end that is not compiled. The gate also sits in the in-app launcher alone, so a frontend starting the activity itself, which is what ES-DE does, reaches the core without passing through it. ref: app/src/main/java/com/sbro/emucorev/core/VitaLaunchBridge.kt:24-30, app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:262-272, app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:140-152, app/src/main/res/values/strings.xml:27-31, app/src/main/res/values/strings.xml:710-711

What the partitions are read for. Every launch queues os0:kd/bootimage.skprx and os0:kd/sysmodule.skprx, then for each preload module that is LLE takes app0:sce_module/.suprx when the title carries one and vs0:sys/external/.suprx otherwise. libc, libSceFt2, libpvf and libfiber are always LLE, alongside an automatic list of nineteen sysmodules, and a failed module load is logged and stepped over. The overlay renderer registers sa0/data/font/pvf as the firmware font directory and asks it for the ltn, jpn, cn and kr faces by name, falling back to /system/fonts for its own text. ref: app/src/main/cpp/vita3k/vita3k/interface.cpp:499-535, app/src/main/cpp/vita3k/vita3k/module/src/load_module.cpp:142-161, app/src/main/cpp/vita3k/vita3k/module/src/load_module.cpp:187-195, app/src/main/cpp/vita3k/vita3k/renderer/src/renderer.cpp:114-127, app/src/main/cpp/vita3k/vita3k/overlay/src/font.cpp:116-160, app/src/main/cpp/vita3k/vita3k/overlay/src/font.cpp:174-234

Storage. The Vita filesystem is a directory named vita under a storage root the user can move to a card, holding ux0 and the partitions a firmware install writes. Configuration, logs, patches, the texture folders and the cache stay on internal storage. Static assets never reach the filesystem: on Android the static assets path is left empty and shaders, fonts and images are read out of the package through SDL. ref: app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:36-46, app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:101-148, app/src/main/cpp/vita3k/vita3k/app/src/app_init.cpp:244-256

Titles arrive as VPK, ZIP, PKG or an already extracted directory, and a PKG needs a zRIF that is either typed in or derived from a license already installed for that content id. ref: app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:104-197, app/src/main/cpp/vita3k/vita3k/packages/src/pkg.cpp:356-376

13 files | 2 required, 11 optional | 6 in repo, 7 missing Categories: 3 BIOS, 10 game data

PSVUPDAT.PUP required in repo large_file
PS Vita system software update package

PSP2UPDAT.PUP required in repo large_file
PS Vita firmware font package

app_compat_db.xml optional in repo game_data
per-title compatibility ratings

commercial_list.json optional in repo game_data
commercial title index

psvita_games.db optional in repo game_data bundled
bundled catalog of Vita titles

config.txt optional missing game_data
taiHEN plugin configuration

<plugin>.suprx optional missing game_data
taiHEN plugin

<TITLEID>.txt optional missing game_data
per-title binary patch list

PATCHLIST.TXT optional in repo game_data
shared binary patch list

<hash>.png optional missing game_data
replacement texture

<hash>.dds optional missing game_data
replacement texture, compressed

<driver>.zip optional missing
replacement Vulkan driver package

work.bin optional missing game_data
title license

Generated on 2026-08-23T16:12:06Z