Files
libretro/emulators/vita3k.yml
2026-03-18 10:57:00 +01:00

300 lines
16 KiB
YAML

# Vita3K emulator firmware profile
# Generated from source analysis of https://github.com/Vita3K/Vita3K
# Commit analyzed: HEAD as of 2026-03-17
emulator: Vita3K
type: standalone
source: "https://github.com/Vita3K/Vita3K"
logo: "https://raw.githubusercontent.com/Vita3K/Vita3K/master/data/image/icon.png"
profiled_date: "2026-03-18"
core_version: "0.2.1"
display_name: "Vita3K (PS Vita)"
systems: [sony-playstation-vita]
firmware_file: "PSVUPDAT.PUP"
firmware_source: "https://www.playstation.com/en-us/support/hardware/psvita/system-software/"
firmware_detection: "pup_decrypt"
firmware_install: "decrypts PUP, extracts FAT/exFAT images into os0/, vs0/, sa0/, pd0/"
validation:
method: "pup_decrypt_and_extract"
source_ref: "vita3k/packages/src/pup.cpp:260-314"
note: >
PUP is decrypted using SCE keys (register_keys), then four filesystem images are
extracted: os0.img (FAT), pd0.img (exFAT), sa0.img (FAT), vs0.img (FAT).
Each image is mounted to its respective partition path.
firmware_version:
path: "PUP_DEC/PUP/version.txt"
source_ref: "vita3k/packages/src/pup.cpp:303-309"
note: "Read from version.txt inside the decrypted PUP during installation"
# Firmware partitions extracted from PSVUPDAT.PUP
partitions:
os0:
image: "os0.img"
filesystem: "FAT"
source_ref: "vita3k/packages/src/pup.cpp:293"
note: "Core OS partition. Contains kernel modules and low-level system components."
vs0:
image: "vs0.img"
filesystem: "FAT"
source_ref: "vita3k/packages/src/pup.cpp:299"
note: >
Main system partition. Contains firmware modules (sys/external/*.suprx),
system apps (app/), LiveArea resources, themes, and system configuration.
directories:
sys_external:
path: "vs0/sys/external/"
source_ref: "vita3k/modules/module_parent.cpp:332"
note: >
Primary firmware module directory. Modules are loaded as .suprx files.
RPCS3-style LLE/HLE toggle: Vita3K can load real firmware modules (LLE)
or use built-in reimplementations (HLE) per module.
app:
path: "vs0/app/"
note: "System applications (settings, browser, store, etc)"
data_internal:
path: "vs0/data/internal/"
note: "Internal system data: themes, LiveArea defaults"
files:
- {path: "theme/", purpose: "Default system themes"}
- {path: "livearea/default/sce_sys/icon0.png", purpose: "Default app icon"}
sa0:
image: "sa0.img"
filesystem: "FAT"
source_ref: "vita3k/packages/src/pup.cpp:297"
note: "System assets partition. Contains firmware fonts (PVF files)."
directories:
fonts:
path: "sa0/data/font/pvf/"
source_ref: "vita3k/gui/src/gui.cpp:228-267"
note: >
PS Vita system fonts in PVF format (PlayStation Vita Font). Used for
system UI, LiveArea, and games that use the sceFt2/libpvf font API.
Without these, Vita3K falls back to bundled open-source fonts.
files:
- {name: "ltn0.pvf", type: "Latin Regular", required: true, note: "Primary UI font, checked at startup"}
- {name: "jpn0.pvf", type: "Japanese", required: false}
- {name: "kr0.pvf", type: "Korean", required: false}
- {name: "cn0.pvf", type: "Chinese Simplified", required: false}
pd0:
image: "pd0.img"
filesystem: "exFAT"
source_ref: "vita3k/packages/src/pup.cpp:295"
note: "System data partition. Contains system BGM and other data."
files:
- {path: "data/systembgm/initialsetup.at9", purpose: "Initial setup background music"}
# Firmware modules (vs0/sys/external/*.suprx)
firmware_modules:
# Auto-LLE modules (loaded from firmware by default)
auto_lle:
source_ref: "vita3k/module/src/load_module.cpp:142-161"
note: "These modules are automatically loaded via LLE when firmware is present"
modules:
- {id: "SCE_SYSMODULE_HTTP", libs: ["libhttp"]}
- {id: "SCE_SYSMODULE_SSL", libs: ["libssl"]}
- {id: "SCE_SYSMODULE_HTTPS", libs: ["libhttp", "libssl"]}
- {id: "SCE_SYSMODULE_ULT", libs: ["libult"]}
- {id: "SCE_SYSMODULE_SAS", libs: ["libsas"]}
- {id: "SCE_SYSMODULE_PGF", libs: ["libpgf"]}
- {id: "SCE_SYSMODULE_FIOS2", libs: ["libfios2"]}
- {id: "SCE_SYSMODULE_SYSTEM_GESTURE", libs: ["libsystemgesture"]}
- {id: "SCE_SYSMODULE_XML", libs: ["libSceXml"]}
- {id: "SCE_SYSMODULE_SQLITE", libs: ["libSceSqlite"]}
- {id: "SCE_SYSMODULE_RUDP", libs: ["librudp"]}
- {id: "SCE_SYSMODULE_NET_ADHOC_MATCHING", libs: ["adhoc_matching"]}
- {id: "SCE_SYSMODULE_MP4", libs: ["libscemp4"]}
- {id: "SCE_SYSMODULE_ATRAC", libs: ["libatrac"]}
- {id: "SCE_SYSMODULE_FACE", libs: ["libface"]}
- {id: "SCE_SYSMODULE_SMART", libs: ["libsmart"]}
- {id: "SCE_SYSMODULE_AVPLAYER", libs: ["libsceavplayer", "libscemp4"]}
- {id: "SCE_SYSMODULE_JSON", libs: ["libSceJson"]}
# Always-LLE preload modules
preload:
source_ref: "vita3k/interface.cpp:497-504, vita3k/module/src/load_module.cpp:187"
note: "These modules are always loaded from firmware (LLE), never HLE"
modules:
- {name: "libc", note: "C standard library"}
- {name: "libSceFt2", note: "FreeType2 font engine"}
- {name: "libpvf", note: "PlayStation Vita Font library"}
- {name: "libcdlg", note: "Common dialog library"}
# All registered sysmodule mappings
sysmodule_map:
source_ref: "vita3k/module/src/load_module.cpp:25-109"
note: "Complete mapping of SCE_SYSMODULE IDs to firmware library filenames"
modules:
# Networking
- {id: "SCE_SYSMODULE_NET", libs: ["libnet", "libnetctl"]}
- {id: "SCE_SYSMODULE_HTTP", libs: ["libhttp"]}
- {id: "SCE_SYSMODULE_SSL", libs: ["libssl"]}
- {id: "SCE_SYSMODULE_HTTPS", libs: ["libhttp", "libssl"]}
# Performance / Threading
- {id: "SCE_SYSMODULE_PERF", libs: ["libperf"]}
- {id: "SCE_SYSMODULE_FIBER", libs: ["libfiber"]}
- {id: "SCE_SYSMODULE_ULT", libs: ["libult"]}
# Debug
- {id: "SCE_SYSMODULE_DBG", libs: ["librazorcapture_es4", "librazorhud_es4"]}
- {id: "SCE_SYSMODULE_RAZOR_CAPTURE", libs: ["librazorcapture_es4"]}
- {id: "SCE_SYSMODULE_RAZOR_HUD", libs: ["librazorhud_es4"]}
# Audio
- {id: "SCE_SYSMODULE_NGS", libs: ["libngs"]}
- {id: "SCE_SYSMODULE_SULPHA", libs: ["libsulpha"]}
- {id: "SCE_SYSMODULE_SAS", libs: ["libsas"]}
- {id: "SCE_SYSMODULE_AUDIOCODEC", libs: ["libaudiocodec"]}
- {id: "SCE_SYSMODULE_AACENC", libs: ["libnaac"]}
- {id: "SCE_SYSMODULE_ATRAC", libs: ["libatrac"]}
- {id: "SCE_SYSMODULE_VOICE", libs: ["libvoice"]}
- {id: "SCE_SYSMODULE_VOICEQOS", libs: ["libvoiceqos"]}
# Font / Text
- {id: "SCE_SYSMODULE_PGF", libs: ["libpgf"]}
- {id: "SCE_SYSMODULE_IME", libs: ["libime"]}
- {id: "SCE_SYSMODULE_HANDWRITING", libs: ["libhandwriting"]}
# System
- {id: "SCE_SYSMODULE_APPUTIL", libs: ["apputil"]}
- {id: "SCE_SYSMODULE_FIOS2", libs: ["libfios2"]}
- {id: "SCE_SYSMODULE_SYSTEM_GESTURE", libs: ["libsystemgesture"]}
- {id: "SCE_SYSMODULE_LOCATION", libs: ["liblocation"]}
- {id: "SCE_SYSMODULE_CLIPBOARD", libs: ["libclipboard"]}
- {id: "SCE_SYSMODULE_TRIGGER_UTIL", libs: ["trigger_util"]}
- {id: "SCE_SYSMODULE_LIVEAREA", libs: ["livearea_util"]}
- {id: "SCE_SYSMODULE_BG_APP_UTIL", libs: ["bgapputil"]}
- {id: "SCE_SYSMODULE_INCOMING_DIALOG", libs: ["incoming_dialog"]}
- {id: "SCE_SYSMODULE_IPMI", libs: ["libipmi_nongame"]}
- {id: "SCE_SYSMODULE_NOTIFICATION_UTIL", libs: ["notification_util"]}
- {id: "SCE_SYSMODULE_SHUTTER_SOUND", libs: ["libSceShutterSound"]}
- {id: "SCE_SYSMODULE_SCREEN_SHOT", libs: ["libSceScreenShot"]}
# PlayStation Network
- {id: "SCE_SYSMODULE_NP_BASIC", libs: ["np_basic"]}
- {id: "SCE_SYSMODULE_NP", libs: ["np_common", "np_manager", "np_basic"]}
- {id: "SCE_SYSMODULE_NP_COMMERCE2", libs: ["np_commerce2"]}
- {id: "SCE_SYSMODULE_NP_UTILITY", libs: ["np_utility"]}
- {id: "SCE_SYSMODULE_NP_MATCHING2", libs: ["np_matching2"]}
- {id: "SCE_SYSMODULE_NP_SCORE_RANKING", libs: ["np_ranking"]}
- {id: "SCE_SYSMODULE_NP_ACTIVITY", libs: ["np_activity_sdk"]}
- {id: "SCE_SYSMODULE_NP_TROPHY", libs: ["np_trophy"]}
- {id: "SCE_SYSMODULE_NP_MESSAGE", libs: ["np_message_padding", "np_message"]}
- {id: "SCE_SYSMODULE_NP_PARTY", libs: ["np_party"]}
- {id: "SCE_SYSMODULE_NP_TUS", libs: ["np_tus"]}
- {id: "SCE_SYSMODULE_NP_SNS_FACEBOOK", libs: ["np_sns_facebook"]}
- {id: "SCE_SYSMODULE_NP_SIGNALING", libs: ["np_signaling"]}
- {id: "SCE_SYSMODULE_NP_WEBAPI", libs: ["np_webapi"]}
# Media
- {id: "SCE_SYSMODULE_MP4", libs: ["libscemp4"]}
- {id: "SCE_SYSMODULE_AVPLAYER", libs: ["libsceavplayer", "libscemp4"]}
- {id: "SCE_SYSMODULE_AVCDEC", libs: ["avcdec_for_player"]}
- {id: "SCE_SYSMODULE_MP4_RECORDER", libs: ["libSceMp4Rec"]}
- {id: "SCE_SYSMODULE_PHOTO_EXPORT", libs: ["libScePhotoExport"]}
- {id: "SCE_SYSMODULE_VIDEO_EXPORT", libs: ["libSceVideoExport"]}
- {id: "SCE_SYSMODULE_MUSIC_EXPORT", libs: ["libSceMusicExport"]}
# Other
- {id: "SCE_SYSMODULE_XML", libs: ["libSceXml"]}
- {id: "SCE_SYSMODULE_JSON", libs: ["libSceJson"]}
- {id: "SCE_SYSMODULE_SQLITE", libs: ["libSceSqlite"]}
- {id: "SCE_SYSMODULE_RUDP", libs: ["librudp"]}
- {id: "SCE_SYSMODULE_NET_ADHOC_MATCHING", libs: ["adhoc_matching"]}
- {id: "SCE_SYSMODULE_PSPNET_ADHOC", libs: ["pspnet_adhoc"]}
- {id: "SCE_SYSMODULE_FACE", libs: ["libface"]}
- {id: "SCE_SYSMODULE_SMART", libs: ["libsmart"]}
- {id: "SCE_SYSMODULE_MARLIN", libs: ["libmln"]}
- {id: "SCE_SYSMODULE_MARLIN_DOWNLOADER", libs: ["libmlndownloader"]}
- {id: "SCE_SYSMODULE_MARLIN_APP_LIB", libs: ["libmlnapplib"]}
- {id: "SCE_SYSMODULE_TELEPHONY_UTIL", libs: ["libSceTelephonyUtil"]}
- {id: "SCE_SYSMODULE_DTCP_IP", libs: ["libSceDtcpIp"]}
- {id: "SCE_SYSMODULE_VIDEO_SEARCH_EMPR", libs: ["libSceVideoSearchEmpr"]}
- {id: "SCE_SYSMODULE_BEISOBMF", libs: ["libSceBeisobmf"]}
- {id: "SCE_SYSMODULE_BEMP2SYS", libs: ["libSceBemp2sys"]}
- {id: "SCE_SYSMODULE_NEAR_UTIL", libs: ["libScenNearUtil"]}
- {id: "SCE_SYSMODULE_NEAR_DIALOG_UTIL", libs: ["libSceNearDialogUtil"]}
- {id: "SCE_SYSMODULE_LOCATION_EXTENSION", libs: ["liblocation_extension"]}
- {id: "SCE_SYSMODULE_MAIL_API", libs: ["mail_api_for_local_libc"]}
- {id: "SCE_SYSMODULE_TELEPORT_CLIENT", libs: ["libSceTeleportClient"]}
- {id: "SCE_SYSMODULE_TELEPORT_SERVER", libs: ["libSceTeleportServer"]}
- {id: "SCE_SYSMODULE_APPUTIL_EXT", libs: ["apputil_ext"]}
- {id: "SCE_SYSMODULE_CODECENGINE_PERF", libs: ["libcodecengine_perf"]}
# Internal sysmodule mappings
internal_modules:
source_ref: "vita3k/module/src/load_module.cpp:114-136"
modules:
- {id: "SCE_SYSMODULE_INTERNAL_JPEG_ENC_ARM", libs: ["libscejpegencarm"]}
- {id: "SCE_SYSMODULE_INTERNAL_AUDIOCODEC", libs: ["audiocodec"]}
- {id: "SCE_SYSMODULE_INTERNAL_BXCE", libs: ["bXCe"]}
- {id: "SCE_SYSMODULE_INTERNAL_INI_FILE_PROCESSOR", libs: ["ini_file_processor"]}
- {id: "SCE_SYSMODULE_INTERNAL_NP_ACTIVITY_NET", libs: ["np_activity"]}
- {id: "SCE_SYSMODULE_INTERNAL_PAF", libs: ["libpaf"]}
- {id: "SCE_SYSMODULE_INTERNAL_SQLITE_VSH", libs: ["sqlite"]}
- {id: "SCE_SYSMODULE_INTERNAL_DBUTIL", libs: ["dbutil"]}
- {id: "SCE_SYSMODULE_INTERNAL_ACTIVITY_DB", libs: ["activity_db"]}
- {id: "SCE_SYSMODULE_INTERNAL_COMMON_GUI_DIALOG", libs: ["common_gui_dialog"]}
- {id: "SCE_SYSMODULE_INTERNAL_MSG_DIALOG", libs: ["libcdlg_msg"]}
- {id: "SCE_SYSMODULE_INTERNAL_SAVEDATA_DIALOG", libs: ["libcdlg_savedata"]}
- {id: "SCE_SYSMODULE_INTERNAL_IME_DIALOG", libs: ["libcdlg_ime"]}
- {id: "SCE_SYSMODULE_INTERNAL_COMMON_DIALOG_MAIN", libs: ["libcdlg_main"]}
- {id: "SCE_SYSMODULE_INTERNAL_DB_RECOVERY_UTILITY", libs: ["dbrecovery_utility"]}
- {id: "SCE_SYSMODULE_INTERNAL_DRM_PSM_KDC", libs: ["psmkdc"]}
- {id: "SCE_SYSMODULE_INTERNAL_LOCATION_INTERNAL", libs: ["liblocation_internal"]}
# IO device layout (full Vita filesystem)
io_devices:
source_ref: "vita3k/io/include/io/VitaIoDevice.h:22-50"
firmware_partitions:
- {device: "os0", purpose: "Core OS kernel modules"}
- {device: "vs0", purpose: "System firmware modules and apps"}
- {device: "sa0", purpose: "System assets (fonts)"}
- {device: "pd0", purpose: "System data (BGM, resources)"}
user_partitions:
- {device: "ux0", purpose: "Main storage (memory card)"}
- {device: "ur0", purpose: "Internal user storage"}
- {device: "uma0", purpose: "USB mass storage (PSTV)"}
- {device: "imc0", purpose: "Internal memory card (Slim)"}
- {device: "grw0", purpose: "Game card (writable area)"}
- {device: "gro0", purpose: "Game card (read-only area)"}
app_partitions:
- {device: "app0", purpose: "Current running application"}
- {device: "addcont0", purpose: "Additional content (DLC)"}
- {device: "savedata0", purpose: "Save data (slot 0)"}
- {device: "savedata1", purpose: "Save data (slot 1)"}
# Fallback fonts when firmware is not installed
fallback_fonts:
source_ref: "vita3k/gui/src/gui.cpp:276-318"
path: "data/fonts/"
files:
- {name: "mplus-1mn-bold.ttf", purpose: "Primary fallback monospaced font"}
- {name: "SourceHanSansSC-Bold-Min.ttf", purpose: "Chinese fallback font"}
- {name: "neodgm.ttf", purpose: "Korean fallback font"}
note: "Open-source fonts bundled with Vita3K, used when firmware fonts (sa0) are not installed"
notes: |
Vita3K requires the official PS Vita firmware (PSVUPDAT.PUP) from Sony for full
compatibility. The firmware is decrypted using SCE keys and extracted into four
partition images: os0 (kernel), vs0 (system), sa0 (assets), pd0 (data).
The most important firmware components are:
1. vs0/sys/external/*.suprx - Firmware modules loaded by games
2. sa0/data/font/pvf/*.pvf - System fonts (ltn0.pvf is checked at startup)
3. vs0/data/internal/ - LiveArea resources and default themes
Vita3K uses a hybrid LLE/HLE approach:
- Some modules (libc, libSceFt2, libpvf, libcdlg) are always loaded from firmware (LLE)
- Others can be toggled between LLE and HLE per module via settings
- Without firmware, many games will fail to load required modules
The module loading path is: first check app0:sce_module/{name}.suprx (game-bundled),
then fall back to vs0:sys/external/{name}.suprx (firmware). This allows games to
ship their own module versions.
CLI firmware install: vita3k --firmware /path/to/PSVUPDAT.PUP
GUI: File > Install Firmware
Vita3K does not have a libretro core. It is standalone only.