mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
279 lines
15 KiB
YAML
279 lines
15 KiB
YAML
emulator: aPS3e
|
|
type: standalone
|
|
core_classification: community_fork
|
|
source: "https://github.com/aenu1/aps3e"
|
|
source_branch: main4
|
|
upstream: "https://github.com/RPCS3/rpcs3"
|
|
profiled_date: "2026-10-06"
|
|
source_commit: "c6ca18217f2f1563235f83d94df78e35423a1720"
|
|
upstream_commit: "1f080485b95db2700c5cf244b1314f73b6cf564e"
|
|
core_version: "2.43"
|
|
display_name: "Sony - PlayStation 3 (aPS3e)"
|
|
cores:
|
|
- aps3e
|
|
systems:
|
|
- sony-playstation-3
|
|
|
|
notes: |
|
|
PlayStation 3 emulator for Android, distributed on Google Play as aenu.aps3e
|
|
and aenu.aps3e.premium. RPCS3 is vendored whole under app/src/main/cpp/rpcs3
|
|
rather than pulled as a submodule, and a JNI layer of about six thousand lines
|
|
replaces the Qt front end. The vendored tree reports itself as 0.0.42-alpha.1
|
|
at RPCS3 commit 1f080485.
|
|
ref: app/src/main/cpp/rpcs3/rpcs3/git-version.h:3,
|
|
app/src/main/cpp/rpcs3/rpcs3/rpcs3_version.cpp:29
|
|
|
|
Source drops land on successive branches, not on the default one. Release 2.43
|
|
of 2026-10-05 is the commit titled 2.43 at the head of main4; the lightweight
|
|
tags 2.39 to 2.43 all sit on the head of main2, the default branch, an April
|
|
tree that predates every one of those releases and whose generated
|
|
git-version.h was never filled in. main4 is the tree read here. No versionName is usable either:
|
|
the only gradle file committed is app/build.gradle.bak, which carries the
|
|
placeholder 1.19a and is renamed and completed with the signing block at build
|
|
time.
|
|
ref: aps3e/README.md, app/build.gradle.bak:16
|
|
|
|
Emulator paths derive from APS3E_DATA_DIR, set by the Java layer to the
|
|
external files directory of the package. The config directory holds dev_flash,
|
|
dev_hdd0, custom_cfg and the global config.yml; caches live beside it. The
|
|
custom font directory sits at the data root, and the custom GPU driver
|
|
directory sits in internal storage because the external filesystem cannot
|
|
carry an executable mapping.
|
|
ref: app/src/main/cpp/aps3e_rp3_impl.cpp:139-145,
|
|
app/src/main/java/aenu/aps3e/Application.java:21-64
|
|
|
|
The PS3 firmware is required and nothing runs without it. Three independent
|
|
gates enforce it: the game list refuses to launch an entry when the marker
|
|
config/dev_flash/.installed is absent, the quick start wizard keeps its Next
|
|
button disabled on the firmware page until that marker exists, and the boot
|
|
path itself returns firmware_missing when dev_flash/sys/external/liblv2.sprx
|
|
is not a file. The third gate covers the intent launched directly against
|
|
EmulatorActivity, which does not pass through the game list. The shipped
|
|
configuration leaves Libraries Control empty, so liblv2.sprx keeps its default
|
|
entry in the module list and the check fires.
|
|
ref: app/src/main/java/aenu/aps3e/MainActivity.java:144-146,
|
|
app/src/main/java/aenu/aps3e/MainActivity.java:188-191,
|
|
app/src/main/java/aenu/aps3e/QuickStartActivity.java:317-319,
|
|
app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2829-2849,
|
|
app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:86,
|
|
aps3e/app/src/main/assets/config/config.yml
|
|
|
|
Overlay text is drawn from a font list chosen by the Font File Selection
|
|
setting. From Firmware, the default, asks for Arial.ttf, arial.ttf, the
|
|
Android system face at /system/fonts/Roboto-Regular.ttf and then
|
|
SCE-PS3-VR-R-LATIN.TTF for Latin, SCE-PS3-SR-R-JPN.TTF and SCE-PS3-DH-R-CGB.TTF
|
|
for the CJK base, and SCE-PS3-YG-R-KOR.TTF for Hangul. The SCE faces are
|
|
resolved against dev_flash/data/font and dev_flash/data/font/SONY-CC, so they
|
|
come from the firmware rather than from a separate download. Custom points all
|
|
three classes at one file and reverts to From Firmware when that path no
|
|
longer exists.
|
|
ref: app/src/main/cpp/aps3e_rp3_impl.cpp:204-234,
|
|
app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:112-117
|
|
|
|
Vulkan is reached through a loader chosen before the emulator starts. The
|
|
global config YAML is read directly for Use Custom Driver and Custom Driver
|
|
Library Path, and the named library is opened through libadrenotools as a
|
|
custom driver when both are set and the path exists; otherwise the system
|
|
libvulkan.so is dlopened. Drivers are imported either as a bare shared object
|
|
or as a zip whose meta.json names the library.
|
|
ref: app/src/main/cpp/aps3e_emu.cpp:952-976,
|
|
app/src/main/cpp/vkapi.cpp:18-33,
|
|
app/src/main/java/aenu/aps3e/EmulatorSettings.java:1232-1327
|
|
|
|
Encrypted disc images are decrypted by the ISO loader. Launching an ISO makes
|
|
the Java layer look for a sidecar key beside it, trying the base name with
|
|
.dkey and then with .key, and hand the descriptor down beside the image. At
|
|
most 32 bytes of the key are read: a full 32-byte read is taken as a hex
|
|
string, a 16-byte file as raw bytes, and the result is installed as an AES-128
|
|
decryption context. A 3k3y watermark at offset 0xF70 is recognised separately
|
|
and needs no key.
|
|
ref: app/src/main/java/aenu/aps3e/Utils.java:185-205,
|
|
app/src/main/java/aenu/aps3e/EmulatorActivity.java:148-154,
|
|
app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:362-408,
|
|
app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:517-562
|
|
|
|
One import entry point takes EDAT, RAP and PKG. A RAP is copied verbatim into
|
|
the exdata folder of user 00000001 and rejected unless it is exactly 16 bytes.
|
|
An EDAT is parsed for its NPD header, rejected below 0x90 bytes or without the
|
|
NPD magic, and written to the same folder under the content id the header
|
|
carries. A PKG goes through the package reader and lands in dev_hdd0.
|
|
ref: app/src/main/java/aenu/aps3e/MainActivity.java:624-658,
|
|
app/src/main/java/aenu/aps3e/Emulator.java:820-845,
|
|
app/src/main/cpp/aps3e_emu.cpp:878-906,
|
|
app/src/main/cpp/aps3e_emu.cpp:860-870
|
|
|
|
patch.yml, compatibility_table.json and database_config.json ship inside the
|
|
APK as assets and are not user supplied.
|
|
ref: aps3e/app/src/main/assets
|
|
|
|
files:
|
|
- name: PS3UPDAT.PUP
|
|
required: true
|
|
storage: large_file
|
|
description: "PS3 system software update package"
|
|
note: >-
|
|
Selected through the file picker and read from a descriptor. The PUP object
|
|
rejects an empty file, a wrong magic, a declared size the file does not
|
|
reach, an unreadable entry table and a failed entry hash. Segment 0x300
|
|
carries the installation package database and segment 0x100 the version
|
|
string; the packages whose names contain dev_flash_ are decrypted with the
|
|
SCEPKG keys and their inner TARs extracted over dev_flash. The Java layer
|
|
creates dev_flash/.installed once the native call returns true. No digest
|
|
of the file itself is compared against anything.
|
|
source_ref: "app/src/main/cpp/aps3e_emu.cpp:664-835, app/src/main/cpp/emulator_aps3e.cpp:1078, app/src/main/java/aenu/aps3e/MainActivity.java:591-623, app/src/main/res/values/strings.xml:120-122"
|
|
|
|
- name: "<game>.dkey"
|
|
aliases: ["<game>.key"]
|
|
required: false
|
|
size: [16, 32]
|
|
validation: [size]
|
|
size_note: "Read capped at 32 bytes: a file of 32 bytes or more is taken as hex from its first 32 characters, a 16-byte file as raw, any other length is refused."
|
|
unsourceable: "per-disc AES-128 key named after the image it decrypts, one per title, carried by disc dump catalogues rather than by the emulator"
|
|
description: "Redump disc decryption key read beside an encrypted ISO"
|
|
note: >-
|
|
Resolved as a sidecar of the image being launched, .dkey first then .key,
|
|
and passed down as a second descriptor. Up to 32 bytes are read: a full
|
|
32-byte read is taken as a hex string and converted, a 16-byte file as raw;
|
|
any other length fails the key check. An image whose odd regions are
|
|
encrypted does not boot without it.
|
|
source_ref: "app/src/main/java/aenu/aps3e/Utils.java:185-205, app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:362-408, app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:855-882"
|
|
|
|
- name: "<content_id>.rap"
|
|
required: false
|
|
size: 16
|
|
validation: [size]
|
|
unsourceable: "per-title activation licence tied to the account that bought the content, never distributed generically"
|
|
description: "PSN content licence"
|
|
note: >-
|
|
Imported through the EDAT/RAP/PKG entry and copied byte for byte into
|
|
dev_hdd0/home/00000001/exdata under the name it was given. The import is
|
|
refused unless the source is exactly 16 bytes. SELF decryption looks the
|
|
matching file up by content id, with a lowercase extension, in the exdata
|
|
folder of each user under dev_hdd0/home, and rejects a content id longer
|
|
than 0x30 characters or outside A-Z, a-z, 0-9, - and _.
|
|
source_ref: "app/src/main/java/aenu/aps3e/MainActivity.java:649-653, app/src/main/java/aenu/aps3e/Emulator.java:820-845, app/src/main/cpp/rpcs3/rpcs3/Crypto/unself.cpp:1312-1343, app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:396-421"
|
|
|
|
- name: "<content_id>.edat"
|
|
required: false
|
|
min_size: 144
|
|
validation: [size]
|
|
unsourceable: "per-content licensed data file, shipped with the content it belongs to"
|
|
description: "Encrypted data file for licensed content"
|
|
note: >-
|
|
Imported through the same entry. The NPD header is read and the file
|
|
refused below 0x90 bytes or when the magic is not NPD, then written whole
|
|
to dev_hdd0/home/00000001/exdata under the content id the header declares.
|
|
source_ref: "app/src/main/java/aenu/aps3e/MainActivity.java:654-658, app/src/main/cpp/aps3e_emu.cpp:878-906, app/src/main/cpp/emulator_aps3e.cpp:1085, app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:440"
|
|
|
|
- name: "<font>.ttf"
|
|
aliases: ["<font>.ttc", "<font>.otf"]
|
|
required: false
|
|
config_key: "Miscellaneous/Custom Font File Path"
|
|
unsourceable: "any TrueType, TrueType collection or OpenType face the user picks, with no name or version the code expects"
|
|
description: "Replacement face for the overlay text"
|
|
note: >-
|
|
Copied into the font directory at the data root by the picker, its absolute
|
|
path stored in the configuration. Used for the default, CJK base and Hangul
|
|
classes at once, and only while Font File Selection is Custom. The setting
|
|
reverts to From Firmware when the stored path no longer resolves, so the
|
|
firmware faces cover the absence.
|
|
source_ref: "app/src/main/java/aenu/aps3e/EmulatorSettings.java:1329-1349, app/src/main/cpp/aps3e_rp3_impl.cpp:215-227, app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:402-403"
|
|
|
|
- name: "<driver>.so"
|
|
aliases: ["<driver>.zip"]
|
|
required: false
|
|
config_key: "Video/Vulkan/Custom Driver Library Path"
|
|
unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact"
|
|
description: "Replacement Vulkan driver"
|
|
note: >-
|
|
Imported as a shared object, or as a zip whose meta.json names the library
|
|
to keep, and unpacked into the driver directory in internal storage. Read
|
|
from the global config YAML before the emulator initialises and opened
|
|
through libadrenotools in place of the system loader. The system
|
|
libvulkan.so is used when Use Custom Driver is off, the path is empty, or
|
|
the file is gone.
|
|
source_ref: "app/src/main/java/aenu/aps3e/EmulatorSettings.java:1232-1327, app/src/main/cpp/aps3e_emu.cpp:952-976, app/src/main/cpp/vkapi.cpp:18-33, app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:209-211"
|
|
|
|
# Layout produced by extracting PS3UPDAT.PUP, and the paths this tree reads from it.
|
|
dev_flash:
|
|
path: "config/dev_flash/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:15, app/src/main/cpp/aps3e_rp3_impl.cpp:139-141"
|
|
note: >-
|
|
Mounted at /dev_flash and rooted at the config directory. Written only by the
|
|
firmware installer, which extracts the dev_flash_ packages of the PUP into it.
|
|
|
|
sys_external:
|
|
path: "dev_flash/sys/external/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUModule.cpp:2703-2705, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:208, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellSysmodule.cpp:1031"
|
|
note: >-
|
|
Firmware SPRX modules. liblv2.sprx gates the boot and pulls the rest in;
|
|
each module can be forced to LLE or HLE through Libraries Control, which
|
|
the shipped configuration leaves empty. flashATRAC.pic is named by
|
|
cellSysmodule for the ATRAC module path.
|
|
critical_file: "liblv2.sprx"
|
|
|
|
sys_internal:
|
|
path: "dev_flash/sys/internal/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:33-34"
|
|
note: "Internal modules, libfs_utility_init.sprx among them."
|
|
|
|
fonts:
|
|
path: "dev_flash/data/font/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:226-241, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:281, app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:116-117"
|
|
note: >-
|
|
Faces cellFontOpenFontset maps by type, and the directory the overlay
|
|
searches for its own list. A fontset the emulator does not implement falls
|
|
back to SCE-PS3-RD-R-LATIN.TTF.
|
|
files:
|
|
- "SCE-PS3-RD-R-LATIN.TTF"
|
|
- "SCE-PS3-RD-L-LATIN.TTF"
|
|
- "SCE-PS3-RD-B-LATIN.TTF"
|
|
- "SCE-PS3-RD-R-LATIN2.TTF"
|
|
- "SCE-PS3-RD-L-LATIN2.TTF"
|
|
- "SCE-PS3-RD-B-LATIN2.TTF"
|
|
- "SCE-PS3-MT-R-LATIN.TTF"
|
|
- "SCE-PS3-NR-R-JPN.TTF"
|
|
- "SCE-PS3-NR-L-JPN.TTF"
|
|
- "SCE-PS3-NR-B-JPN.TTF"
|
|
- "SCE-PS3-YG-R-KOR.TTF"
|
|
- "SCE-PS3-SR-R-LATIN.TTF"
|
|
- "SCE-PS3-SR-R-LATIN2.TTF"
|
|
- "SCE-PS3-SR-R-JPN.TTF"
|
|
- "SCE-PS3-VR-R-LATIN.TTF"
|
|
- "SCE-PS3-VR-R-LATIN2.TTF"
|
|
- "SONY-CC/SCE-PS3-DH-R-CGB.TTF"
|
|
|
|
certs:
|
|
path: "dev_flash/data/cert/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellSsl.cpp:110"
|
|
note: "Root certificates cellSsl enumerates."
|
|
|
|
vsh:
|
|
path: "dev_flash/vsh/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/util/sysinfo.cpp:651-653, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUThread.cpp:4799-4807, app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_user_list_dialog.cpp:207, app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/FriendsList/overlay_friends_list_dialog.cpp:85"
|
|
note: >-
|
|
vsh/etc/version.txt supplies the installed firmware version, compared
|
|
against the PS3_SYSTEM_VER a title declares. vsh/module/eseibrd.sprx is
|
|
precompiled at boot and vsh/resource/explore/user carries the avatars the
|
|
user list and the friends list draw.
|
|
|
|
ps1emu:
|
|
path: "dev_flash/ps1emu/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2253"
|
|
note: "ps1_newemu.self, the argv[0] of a PS1 Classics boot."
|
|
|
|
pspemu:
|
|
path: "dev_flash/pspemu/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2281"
|
|
note: "psp_emulator.self, the argv[0] of a PSP minis boot."
|
|
|
|
dev_flash2:
|
|
path: "config/dev_flash2/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:16, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:28"
|
|
note: "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH2. Mount point only, created empty."
|
|
|
|
dev_flash3:
|
|
path: "config/dev_flash3/"
|
|
source_ref: "app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:17, app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:27"
|
|
note: "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH3. Mount point only, created empty."
|