Files
libretro/emulators/nethersx2-turnip-classic.yml
T
Abdessamad Derraz a0b2263bae feat: let a profile say its pin is held on purpose
nethersx2-turnip-classic documents the shim rules of the revision it
pins, and says so in prose: the classic build is that revision. Compared
to HEAD it reported the same two changes every pass, and recaling would
have repointed its refs at rules this build never had.

pin_frozen says the freeze is deliberate, and the profile is then judged
against its own revision, exactly as one pinned to a superseded tag
already was. Recale and bump are refused for it, which is what makes the
declaration safe to trust.
2026-09-05 10:50:53 +02:00

825 lines
36 KiB
YAML

emulator: NetherSX2-Turnip Classic
type: standalone
core_classification: community_fork
bios_mode: agnostic
source: "https://github.com/nckstwrt/NetherSX2-Turnip"
upstream: "https://github.com/Trixarian/AetherSX2"
author: "nckstwrt"
profiled_date: "2026-08-12"
pin_frozen: "the classic build is this revision. v0.7 ships a newer shim, and its rules are described in the notes; recaling would repoint these refs at code this build never had."
source_commit: "8e17e584884e19b0a912f1988730d576d6d5aa84"
upstream_commit: "1d1f795dfc70e38da67724c7298779260f513889"
core_version: "2.2n-3668-Turnip-v0.7"
display_name: "Sony - PlayStation 2 (NetherSX2-Turnip Classic)"
mode: standalone
cores:
- "nethersx2-turnip-classic"
- "NetherSX2-Turnip-Classic"
- "NETHERSX2-TURNIP-CLASSIC"
systems:
- sony-playstation-2
bios_directory: "bios/"
notes: |
PlayStation 2 emulator for Android, package xyz.aethersx2.cturnip, activity
xyz.aethersx2.android.EmulationActivity, version name v2.2n-3668, label
NetherSX2 Classic (Turnip). It sits on the 3668 line: the library it starts
from is NetherSX2 Classic v2.2n-3668, itself a patch of the AetherSX2
v1.5-3668 package, and the library still names itself NetherSX2 v2.2n-3668
(Classic). Everything below was read from the v0.7 package:
lib/arm64-v8a/libemucore.so, libvulkad.so, the dex and the assets.
ref: nethersx2-turnip-classic v0.7 AndroidManifest.xml,
nethersx2-turnip-classic v0.7 libemucore.so 0xcdcba
The package pairs two revisions of the project. libemucore.so is the blob the
v0.7 commit carries, byte for byte; libvulkad.so is the one committed for
v0.6 and reports its own build date. libhook_impl.so, libmain_hook.so and the
six packed drivers are the same at both revisions. The shim rules described
here are therefore those of the older revision, which this profile pins:
SM8350, lahaina, sdm845 and napali still route to the a6xx-Patched driver,
and SM6475, SM6650 and SM7325 are not known to it.
ref: VulkanShim2/vulkan_shim.cpp:1027-1059,
nethersx2-turnip-classic v0.7 libvulkad.so
The patch rewrites twenty-four places in the library it starts from. Three are
the strings libvulkan.so, libvulkan.so.1 and the message naming them, each
turned into libvulkad.so, so the Vulkan loader opens the shim instead of the
system driver. Sixteen turn comparisons into unconditional paths, among them
the memchr scan for the twenty-two byte pattern that precedes the certificate
test and two byte-wise string comparisons whose result is forced to equal,
which is what lets the package be resigned under a new application id. Five
move settings defaults: the renderer enum from 12 to 14, the upscale
multiplier fallback from 1.0 to 2.0 with the configuration read
short-circuited, the hardware download mode default, and the warning text that
went with it. The same five sites carry their unpatched forms in the 4248
library this project also starts from, which is what places them here rather
than in the base. None of them is in a file loading path.
ref: nethersx2-turnip-classic v0.7 libemucore.so 0x105f5b,
nethersx2-turnip-classic v0.7 libemucore.so 0x829ae0-0x82a018,
nethersx2-turnip-classic v0.7 libemucore.so 0x82d10c-0x82d5c0,
nethersx2-turnip-classic v0.7 libemucore.so 0x82e41c,
nethersx2-turnip-classic v0.7 libemucore.so 0x82fbac-0x82fcac,
nethersx2-turnip-classic v0.7 libemucore.so 0x8034c4,
nethersx2-turnip-classic v0.7 libemucore.so 0x833d04,
nethersx2-turnip-classic v0.7 libemucore.so 0x83401c-0x834028,
nethersx2-turnip-classic v0.7 libemucore.so 0x834cb0
A BIOS image is required and boot stops without one, the application raising a
startup error saying it needs a PS2 BIOS in the bios folder of the data
directory. The data directory is getExternalFilesDir(null) with getDataDir()
behind it, so it follows the application id, and the folder names under it
come from the Folders section, Bios defaulting to bios. An image imported
through the interface is written to that folder under the CRC32 of its
contents, as %08X.bin.
ref: nethersx2-turnip-classic v0.7 libemucore.so 0x8057dc,
nethersx2-turnip-classic v0.7 libemucore.so 0x7dfaf0-0x7dfb10,
xyz/aethersx2/android/NativeLibrary initializeOnce,
xyz/aethersx2/android/NativeLibrary importBIOS
Detection is by content. The scan lists the BIOS folder with a * mask, keeps
files between 4194304 and 8388608 bytes, and accepts an image whose romdir
carries a RESET entry followed by a readable ROMVER; the fifth ROMVER
character gives the zone, A for USA, C for China, E for Europe, H for Asia,
J for Japan, P for Free, T for T10K and X for Test, any other character
standing for itself. The sixth character is read only to pick the word
Console or Devel for the description, and the acceptance flag is set outright
once ROMVER has been read, so development images pass with nothing patched
here. RESET and ROMVER are the only two names the scan compares. An image
named in the configuration is combined with the BIOS folder and opened at that
path when it exists, without the size filter and without the romdir test. No
name and no hash is matched anywhere. The image is read into the 4 MB ROM
region and truncated to it, and one shorter than 2465792 bytes turns off the
OSDSys parameter HLE.
ref: aethersx2/pcsx2/ps2/BiosTools.cpp:27-28,
aethersx2/pcsx2/ps2/BiosTools.cpp:62-175,
aethersx2/pcsx2/ps2/BiosTools.cpp:235-260,
aethersx2/pcsx2/ps2/BiosTools.cpp:272-332,
nethersx2-turnip-classic v0.7 libemucore.so 0x81bc00-0x81bc24,
nethersx2-turnip-classic v0.7 libemucore.so 0x81be44-0x81c1c0,
nethersx2-turnip-classic v0.7 libemucore.so 0x81b5e8-0x81b62c
Companions derive from the selected image. rom1 and rom2 are appended to the
full name first, then substituted for the existing extension, so an image at
ps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then
ps2-0230a-20080220.rom1. The nvm and the mec are read at the substituted
extension only, and both are written with defaults when they are absent or too
short. This code line loads no erom: the extension is named nowhere in the
library and the boot path goes from rom2 straight to the IRX.
ref: aethersx2/pcsx2/ps2/BiosTools.cpp:193-218,
aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,
aethersx2/pcsx2/CDVD/CDVD.cpp:158-226,
nethersx2-turnip-classic v0.7 libemucore.so 0x81b688-0x81b9a4
The network adapter opens eeprom.dat and flash.dat by bare name, so they
resolve against the process working directory, which the application never
sets. A compiled-in image stands in for the first and a card filled with 0xFF
for the second. DEV9hdd.raw is the default name of the empty disk image its
settings page writes. An IRX named in the configuration is read into the ROM
region at 0x3C0000 at boot; the field is empty by default and names no file of
its own.
ref: aethersx2/pcsx2/DEV9/DEV9.cpp:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160,
aethersx2/pcsx2/DEV9/flash.cpp:76-103,
aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,
nethersx2-turnip-classic v0.7 libemucore.so 0x7bb5cc-0x7bb680,
nethersx2-turnip-classic v0.7 libemucore.so 0x81b9a4-0x81bac4
The Vulkan path is the reason this build exists. libemucore.so opens
libvulkad.so.1 then libvulkad.so where the stock library names libvulkan.so,
and vkCreateInstance is resolved from it. That shim reads the Adreno model and
the platform name from the kgsl sysfs nodes, picks one of six Turnip drivers
packed beside it, creates a linker namespace over its own library directory
and loads libhook_impl.so and libmain_hook.so into it. The system
/system/lib64/libvulkan.so is then opened inside that namespace with its
soname patched, so its own driver load lands in the hook, which opens the
chosen Turnip driver instead of the vendor ICD. A driver present at
/data/local/tmp/libvulkan_freedreno.so is tested first and wins over all six.
When the namespace cannot be built the shim falls back to patching the system
library's global offset table, and that path alone loads libbase.so,
libcutils.so, libvndksupport.so and libhardware.so from the library directory.
The shim derives the package name from its own library path and appends to
vulkan_shim.log under the files folder of that package.
ref: VulkanShim2/vulkan_shim.cpp:43-73,
VulkanShim2/vulkan_shim.cpp:1008-1085,
VulkanShim2/vulkan_shim.cpp:1107-1175,
VulkanShim2/vulkan_shim.cpp:1179-1194,
VulkanShim2/hook_impl.cpp:38-140,
nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624
Resources are read out of the package itself. The library has no asset manager
of its own and calls back into readPackageFile, readPackageFileToString and
playSoundAsync, each taking an asset-relative name, so the game database, the
patch archives, the interface fonts, the shader sources every backend compiles
at startup and the achievement sounds are versioned with the build and never
looked for on disk. The sound names are joined to a file:///android_asset base
before they cross into Java. The game list draws its region flags and rating
stars from the same assets. The game database is this build's own, and five of
the shader sources differ from the ones the 4248 line carries: the OpenGL
preamble, its format conversion and texture function fragment shaders, and the
Vulkan texture function and format conversion shaders.
ref: nethersx2-turnip-classic v0.7 libemucore.so 0x828110,
xyz/aethersx2/android/NativeLibrary readPackageFile,
xyz/aethersx2/android/NativeLibrary playSoundAsync
files:
- name: ps2-0230a-20080220.bin
path: bios/ps2-0230a-20080220.bin
required: true
min_size: 4194304
max_size: 8388608
validation: [size]
description: "PS2 BIOS image"
note: >-
Any image whose romdir holds RESET and a readable ROMVER is accepted,
whatever its name. The 4 to 8 MB range gates the folder scan; an image
named in the configuration skips both that range and the romdir test.
source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, nethersx2-turnip-classic v0.7 libemucore.so 0x81bc00-0x81bc24 (size window), nethersx2-turnip-classic v0.7 libemucore.so 0x81c1c0 (acceptance flag set outright)"
- name: ps2-0230a-20080220.rom1
path: bios/ps2-0230a-20080220.rom1
required: false
max_size: 4194304
description: "DVD player ROM"
note: >-
Tried as {bios}.rom1 then {biosbase}.rom1. Read at 0x2404000 of the EE
memory block and truncated to 4 MB. Logged and skipped when absent.
source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2-turnip-classic v0.7 libemucore.so 0x81b688-0x81b810"
- name: ps2-0230a-20080220.rom2
aliases:
- "SCPH-90006_BIOS_VX_HK _230.ROM2"
path: bios/ps2-0230a-20080220.rom2
required: false
max_size: 524288
description: "Chinese ROM extension"
note: >-
Same two-step naming as rom1. Read at 0x2804000 of the EE memory block and
truncated to 512 KB. Only present on Chinese region consoles.
source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2-turnip-classic v0.7 libemucore.so 0x81b820-0x81b994"
- name: ps2-0230a-20080220.nvm
path: bios/ps2-0230a-20080220.nvm
required: false
hle_fallback: true
min_size: 1024
validation: [size]
description: "Console NVRAM"
note: >-
Read at the BIOS path with the extension replaced by nvm, opened r+b.
Carries the console id, the iLink id, the language and the OSD
configuration. A 1024 byte image is written when the file is missing or
shorter, zeroed except for a fixed iLink id and the language defaults of
the BIOS region.
source_ref: "aethersx2/pcsx2/CDVD/CDVD.cpp:158-226, nethersx2-turnip-classic v0.7 libemucore.so 0x790470-0x7906c8, nethersx2-turnip-classic v0.7 libemucore.so 0x790820-0x790944"
- name: ps2-0230a-20080220.mec
path: bios/ps2-0230a-20080220.mec
required: false
hle_fallback: true
min_size: 4
validation: [size]
description: "Mechacon version"
note: >-
Read at the BIOS path with the extension replaced by mec. Written as
03 06 02 00 when the file is missing or shorter than 4 bytes.
source_ref: "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, nethersx2-turnip-classic v0.7 libemucore.so 0x791700-0x7918f4"
- name: eeprom.dat
required: false
hle_fallback: true
size: 64
description: "DEV9 EEPROM"
note: >-
Opened O_RDWR by bare name when the network adapter starts and mapped over
64 bytes. A compiled-in image stands in when the file is missing or cannot
be mapped.
source_ref: "aethersx2/pcsx2/DEV9/DEV9.cpp:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160, nethersx2-turnip-classic v0.7 libemucore.so 0x7bb620-0x7bb680"
- name: flash.dat
required: false
hle_fallback: true
max_size: 8650752
description: "DEV9 SmartMedia flash image"
note: >-
Opened rb by bare name at network adapter init and read as 1024 blocks of
16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when
the file is absent.
source_ref: "aethersx2/pcsx2/DEV9/flash.cpp:76-103, nethersx2-turnip-classic v0.7 libemucore.so 0x7bb5cc-0x7bb61c"
- name: "<module>.irx"
required: false
unsourceable: "any IOP module the user points at, under no name the code expects"
description: "IOP module injected at boot"
note: >-
Opened at the path the configuration holds once it is four characters or
longer, and read into the ROM region at 0x3C0000, capped at 0x40000 bytes.
The field is empty by default and names no file of its own.
source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:220-233, aethersx2/pcsx2/ps2/BiosTools.cpp:327-328, nethersx2-turnip-classic v0.7 libemucore.so 0x81b9a4-0x81bac4"
- name: libvulkad.so
path: lib/arm64-v8a/libvulkad.so
required: false
bundled: true
size: 484560
md5: 1a68e1ac1eec29005c19df924146cf19
sha1: 2655469eca935d89a6d8fe0c3998fe3ec0dd2d65
description: "Vulkan loader shim"
note: >-
Opened as libvulkad.so.1 then libvulkad.so where the stock library names
libvulkan.so, and vkCreateInstance is resolved from it. Without it the
Vulkan backend does not open and the message names the shim. This package
carries the build committed for v0.6, one revision behind the emulator
library beside it.
source_ref: "VulkanShim2/vulkan_shim.cpp:969-1272 (the constructor that runs on load), nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624"
- name: libhook_impl.so
path: lib/arm64-v8a/libhook_impl.so
required: false
bundled: true
size: 461856
md5: c2a10d75f7a186f78debc79dd2204841
sha1: 5a86d24c83f4a0867a3526638182c8dc67e0033b
description: "Driver load hook"
note: >-
Opened into the adrenotools-libvulkan namespace and asked for
init_hook_param, which receives the driver directory and driver name. Its
hook_android_dlopen_ext is what replaces the vendor driver with the Turnip
one, and it reopens itself in each driver namespace it creates.
source_ref: "VulkanShim2/vulkan_shim.cpp:1138-1156, VulkanShim2/hook_impl.cpp:38-140"
- name: libmain_hook.so
path: lib/arm64-v8a/libmain_hook.so
required: false
bundled: true
size: 5648
md5: 3ded83b3f45773199b82bf81c86f8c89
sha1: e2ee6c00247fc05b88afe43237fa4bfa90212c54
description: "Namespace interposer"
note: >-
Loaded RTLD_GLOBAL into the same namespace before the system Vulkan
library, so its android_dlopen_ext and android_load_sphal_library are the
ones that library binds to.
source_ref: "VulkanShim2/vulkan_shim.cpp:1159-1160, VulkanShim2/main_hook.c:3-9"
- name: libvulkan_freedreno_T28.so
path: lib/arm64-v8a/libvulkan_freedreno_T28.so
required: false
bundled: true
size: 18606849
md5: 315f4b037b77dea81ea099e13e94fa11
sha1: 83406408d328d8529ffa2faf7ab878664a5c7a79
description: "Turnip driver, default branch"
note: >-
Chosen when no other branch matches. Loaded by name from the library
directory through the hook; a load failure falls back to the vendor
driver.
source_ref: "VulkanShim2/vulkan_shim.cpp:1011, VulkanShim2/vulkan_shim.cpp:1079-1080, VulkanShim2/hook_impl.cpp:127-135"
- name: libvulkan_freedreno_a8xx-turnip-gen8-V31.so
path: lib/arm64-v8a/libvulkan_freedreno_a8xx-turnip-gen8-V31.so
required: false
bundled: true
size: 14509832
md5: 7f6dbc9ec12cb53b1802c418cf532f9b
sha1: 2dc32726b7a68ced6a40ea2c6cc60848716907ab
description: "Turnip driver, Adreno 8xx branch"
note: >-
Chosen whenever the Adreno model reads non-zero, model 810 and 825
included. Model 825 also turns off framebuffer fetch.
source_ref: "VulkanShim2/vulkan_shim.cpp:1010, VulkanShim2/vulkan_shim.cpp:1037-1052, nethersx2-turnip-classic v0.7 libvulkad.so 0x22770-0x23108"
- name: libvulkan_freedreno_T24.so
path: lib/arm64-v8a/libvulkan_freedreno_T24.so
required: false
bundled: true
size: 18003849
md5: e90d691859e0ff8f0221f3fb497cca5d
sha1: d28f7c64a8296a6d1886b348946d01433c10b493
description: "Turnip driver, Adreno 810 branch"
note: >-
The Adreno 810 branch writes this path and the block it falls into
overwrites it with the 8xx driver before anything reads it, so this
revision never opens the file. The branch gained its own exit after the
revision this package was built from.
source_ref: "VulkanShim2/vulkan_shim.cpp:1039-1043, nethersx2-turnip-classic v0.7 libvulkad.so 0x22784-0x230d4"
- name: libvulkan_freedreno_25.3.0_R6_Gmem.so
path: lib/arm64-v8a/libvulkan_freedreno_25.3.0_R6_Gmem.so
required: false
bundled: true
size: 12048553
md5: 3f1b01295ab08d070bede8122ebd0aea
sha1: 2159a5172176f9ee0076370314d2d100de2fe1b1
description: "Turnip driver, Adreno 710 and 720 branch"
note: >-
Chosen when the model is unreadable and the GPU name holds 710 or 720.
source_ref: "VulkanShim2/vulkan_shim.cpp:1056-1059"
- name: libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so
path: lib/arm64-v8a/libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so
required: false
bundled: true
size: 9407968
md5: 7af55500464d372a609084fb4698e16d
sha1: 1abf76c578cb1330e354d5588634b87cef4bc057
description: "Turnip driver, SD845 to SD888 branch"
note: >-
Chosen when the platform reads SM8250, kona, SM8350, lahaina, sdm845 or
napali.
source_ref: "VulkanShim2/vulkan_shim.cpp:1027-1033"
- name: libvulkan_freedreno_T19.so
path: lib/arm64-v8a/libvulkan_freedreno_T19.so
required: false
bundled: true
size: 11581209
md5: 5f953080ba9ac858a99f3742c8302055
sha1: 4dc276dfd5842302c978ce9b2996f961dc6452f1
description: "Turnip driver, SM6125 branch"
note: "Chosen when the platform reads SM6125 or trinket."
source_ref: "VulkanShim2/vulkan_shim.cpp:1020-1023"
- name: libvulkan_freedreno.so
path: data/local/tmp/libvulkan_freedreno.so
required: false
unsourceable: "any Turnip build the user places at that path"
description: "Turnip driver override"
note: >-
Tested with access before any detection runs. When it exists it becomes
the driver and the driver directory becomes /data/local/tmp/, so none of
the six packed drivers is consulted.
source_ref: "VulkanShim2/vulkan_shim.cpp:1009, VulkanShim2/vulkan_shim.cpp:1012-1017"
- name: libbase.so
path: lib/arm64-v8a/libbase.so
required: false
bundled: true
size: 255352
md5: eae5ccb3f801b3333ec0e65592ce8a87
sha1: fecf95a804a7cb57e210f55d5482a56826c8684c
description: "Platform support library for the fallback path"
note: >-
Opened RTLD_GLOBAL from the library directory only when the namespace
approach failed and the shim falls back to patching the global offset
table.
source_ref: "VulkanShim2/vulkan_shim.cpp:1179-1194"
- name: libcutils.so
path: lib/arm64-v8a/libcutils.so
required: false
bundled: true
size: 91200
md5: 185cd93c21cce12ab4c3bc2430934684
sha1: 63e55bcae5ee690cf6bc7db69a5077c5502e4334
description: "Platform support library for the fallback path"
note: "Same fallback list as libbase.so, and a dependency of every packed driver."
source_ref: "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1248-1255"
- name: libvndksupport.so
path: lib/arm64-v8a/libvndksupport.so
required: false
bundled: true
size: 66881
md5: aa5065cca6695aa4b8cfdd3c164f3d28
sha1: a6f2d8498a2f0a00776dd69c58f012cdbb75a308
description: "Platform support library for the fallback path"
note: >-
Same fallback list as libbase.so. Its android_load_sphal_library is the
call the shim stubs so a vendor load can be redirected.
source_ref: "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1257-1269"
- name: libhardware.so
path: lib/arm64-v8a/libhardware.so
required: false
bundled: true
size: 66961
md5: 71e06a0726aa60b010e066d37021d36a
sha1: 555a6203cd7c23c2b49916d70615e5df7973aa87
description: "Platform support library for the fallback path"
note: "Same fallback list as libbase.so, and a dependency of every packed driver."
source_ref: "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1235-1246"
- name: GameIndex.yaml
path: assets/GameIndex.yaml
required: false
bundled: true
size: 1758721
md5: 3f33de7bf8e40e00a05cf27c18a6be0c
sha1: 58fb1f8ea6cf2d526904349640453e682fe388a1
description: "Game database"
note: >-
Read from the package by name, keyed by serial, and carrying the per-game
fixes, patches and settings overrides. Parsed into gamedb.cache in the
cache folder.
source_ref: "aethersx2/pcsx2/GameDatabase.cpp:35, nethersx2-turnip-classic v0.7 libemucore.so 0x2e45fc"
- name: cheats_ws.zip
path: assets/cheats_ws.zip
required: false
bundled: true
size: 1694454
md5: cc19970629feb0a25b9b95263194f08f
sha1: 1caae7ddf0cbba5f1f6d7404b2309300d913778c
description: "Widescreen patch archive"
note: >-
Per-game pnach entries matched on the disc CRC, read from the package when
widescreen patches are enabled. The cheats_ws folder under the data
directory takes precedence and the archive is skipped when it holds a
match.
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x804464"
- name: cheats_ni.zip
path: assets/cheats_ni.zip
required: false
bundled: true
size: 223122
md5: fb2a43dcea094a19db4f4bcdc4ad32eb
sha1: 31cbff66380f255d359ff9ee09b6edc06102579a
description: "No-interlacing patch archive"
note: >-
Same form as cheats_ws.zip, read when no-interlacing patches are enabled,
with the cheats_ni folder taking precedence.
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x80460c"
- name: Roboto-Regular.ttf
path: assets/fonts/Roboto-Regular.ttf
required: true
bundled: true
size: 305608
md5: 86da78cb59576328483a11c6ef74bc2b
sha1: 00d62fbdc8d5dec4c659005e116d0ba2ee63b547
description: "Interface font"
note: "Read as the standard font when the interface comes up. An empty read aborts the process."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1e78-0x7d1e8c, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
- name: RobotoMono-Medium.ttf
path: assets/fonts/RobotoMono-Medium.ttf
required: true
bundled: true
size: 86820
md5: 8ad82b1dc550319993a7d6c932b2656d
sha1: 9056e59b69c6f1160fdfb92a0773f17f6307f3ad
description: "Fixed-width interface font"
note: "Read for the fixed-width font. An empty read aborts the process."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1ecc-0x7d1ee0, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
- name: fa-solid-900.ttf
path: assets/fonts/fa-solid-900.ttf
required: true
bundled: true
size: 204528
md5: dffd9504fcb1894620fa41c700172994
sha1: 694b8a2445ff39de415bf4791845442a7b1b81e5
description: "Font Awesome icon font"
note: "Read for the interface icon glyphs. An empty read aborts the process."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1f20-0x7d1f34, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
- name: ffx_a.h
path: assets/shaders/common/ffx_a.h
required: false
bundled: true
size: 161481
md5: 2c539b603dcb15dcdcfdc420eda56ced
sha1: 726370c10154ad092c15c251b98c79185e980c7c
description: "FidelityFX common header"
note: "Prepended to the sharpening shader of both backends."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x627178"
- name: ffx_cas.h
path: assets/shaders/common/ffx_cas.h
required: false
bundled: true
size: 63512
md5: f8a3d7f48ae19fc372cd0d5d375d5a8d
sha1: a1d1a687577f7a607fda35bc88950f57c2129ca5
description: "FidelityFX CAS header"
note: "Prepended to the sharpening shader of both backends."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x627188"
- name: fxaa.fx
path: assets/shaders/common/fxaa.fx
required: false
bundled: true
size: 19420
md5: 5cdeb2963c1b68c3ffb04a789cc66d6e
sha1: 3ac5f68049ed00d8ff3d2811bd09ef0c036efd0a
description: "FXAA shader source"
note: "Read by both backends when FXAA is enabled."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x67c710, nethersx2-turnip-classic v0.7 libemucore.so 0x685fd0"
- name: common_header.glsl
path: assets/shaders/opengl/common_header.glsl
required: false
bundled: true
size: 1938
md5: 86a37e282f029d20f395cfd05263fddd
sha1: 9c391aae0daddf0c2ba3f0d5265aee9b491286e4
description: "OpenGL shader preamble"
note: "Prepended to every OpenGL program the renderer builds."
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x674618"
- name: convert.glsl
path: assets/shaders/opengl/convert.glsl
required: false
bundled: true
size: 10361
md5: 0dba3321d9f902439a50b79680b220c7
sha1: 26a17de3b4abc30e5c19987efad4ceac22e9a369
description: "OpenGL format conversion shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x674f78"
- name: present.glsl
path: assets/shaders/opengl/present.glsl
required: false
bundled: true
size: 9458
md5: afbb9a89f17ead2d8ce7252c1b44186f
sha1: bf2688971a8ef2f2c262c3c2ec579d3dd39793e6
description: "OpenGL presentation shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x675480"
- name: merge.glsl
path: assets/shaders/opengl/merge.glsl
required: false
bundled: true
size: 455
md5: 2c4d70f62928eac933eec932d7bfa0b3
sha1: d1a3c11a1273e1d6c740e4eacc3159842f206683
description: "OpenGL frame merge shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x675780"
- name: interlace.glsl
path: assets/shaders/opengl/interlace.glsl
required: false
bundled: true
size: 6246
md5: 0e537dd838a7ecd3b687f3f7cc60a7be
sha1: e74e58f530abb4af02c0875c2f04d507e854869e
description: "OpenGL deinterlacing shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x675aac"
- name: shadeboost.glsl
path: assets/shaders/opengl/shadeboost.glsl
required: false
bundled: true
size: 1457
md5: 3d1e2be521a66cbfc2c5ff32057e7bf4
sha1: 8d8b8966afd2ad840151f7fcb494739041708c89
description: "OpenGL brightness and contrast shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x675cb8"
- name: cas.glsl
path: assets/shaders/opengl/cas.glsl
required: false
bundled: true
size: 2448
md5: f8a684763e24557c97e3f5d05935bb3b
sha1: 1a69a0fc522caff98fc3829ebf3f12a6a006a058
description: "OpenGL sharpening shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x676fa0"
- name: tfx_vgs.glsl
path: assets/shaders/opengl/tfx_vgs.glsl
required: false
bundled: true
size: 5756
md5: a97e9616f298bb9041bf9e45ee2ec597
sha1: 0e9e98f766c9250b465af776d0077f49f797fed2
description: "OpenGL texture function vertex and geometry shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x677318"
- name: tfx_fs.glsl
path: assets/shaders/opengl/tfx_fs.glsl
required: false
bundled: true
size: 25906
md5: 9d80855607a6da1014f083340741b845
sha1: 919c3308c8850852d529d0127ce94e873375bfd2
description: "OpenGL texture function fragment shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x677328"
- name: tfx.glsl
path: assets/shaders/vulkan/tfx.glsl
required: false
bundled: true
size: 28290
md5: ebc0ffa3de6fd0a7a4dea17f8b74d806
sha1: b4ebf3f7f20fc88f91cda033552a7489a9ff179c
description: "Vulkan texture function shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x682098"
- name: convert.glsl
path: assets/shaders/vulkan/convert.glsl
required: false
bundled: true
size: 8025
md5: 553d33859963a1abe5508e8e45f1cb1e
sha1: 7a133d4cf115dc49cd1921bd7049ea64ad58acce
description: "Vulkan format conversion shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x68394c, nethersx2-turnip-classic v0.7 libemucore.so 0x685fb8"
- name: present.glsl
path: assets/shaders/vulkan/present.glsl
required: false
bundled: true
size: 8177
md5: 72626d625bb963c6cd7074d4dfd0adda
sha1: 4871ee00b249b41d16232769e2f661bedd1c83db
description: "Vulkan presentation shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x684728"
- name: interlace.glsl
path: assets/shaders/vulkan/interlace.glsl
required: false
bundled: true
size: 6707
md5: bf3caa2532873593218bc4a09e924d4e
sha1: f8d14d80036f11707c7e94db2a77531d582019dd
description: "Vulkan deinterlacing shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x684f74"
- name: merge.glsl
path: assets/shaders/vulkan/merge.glsl
required: false
bundled: true
size: 669
md5: b776383d21609db24d5348c381c2c286
sha1: b09de39d6459c70ffab28dcb3e3ef879b1648674
description: "Vulkan frame merge shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x6857c4"
- name: shadeboost.glsl
path: assets/shaders/vulkan/shadeboost.glsl
required: false
bundled: true
size: 1741
md5: 366b45b6c4e9ed8e6b7454eebcb5d010
sha1: 26b29f57685d8108cf519c4f1d340d43aacbff6e
description: "Vulkan brightness and contrast shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x686284"
- name: cas.glsl
path: assets/shaders/vulkan/cas.glsl
required: false
bundled: true
size: 2624
md5: 56f3cf4de895dd4d32d6c79d564d0c5b
sha1: 709fd5393188f7cff0fe4230d0e3e8b69a82f5b9
description: "Vulkan sharpening shader"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x6869c4"
- name: unlock.wav
path: assets/sounds/achievements/unlock.wav
required: false
bundled: true
size: 87714
md5: 4d035ee86f836bfed422a975cf65c9cc
sha1: eb488a76217629f620e40287567d7e2b30337680
description: "Achievement unlock sound"
note: >-
Joined to the file:///android_asset base and handed to playSoundAsync,
which opens it from the package and plays it through MediaPlayer.
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x811190"
- name: lbsubmit.wav
path: assets/sounds/achievements/lbsubmit.wav
required: false
bundled: true
size: 82096
md5: fa6a7030a9f259ee7300dd0bd49f24f3
sha1: 5ad1e110dcf0ffd26405981398892a82e4f3bad1
description: "Leaderboard submission sound"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x811814"
- name: message.wav
path: assets/sounds/achievements/message.wav
required: false
bundled: true
size: 15696
md5: d66b0bccd743bd11eaca55bcaec925da
sha1: c54f04b63ac6f04e0a0944ef260b5497e4494dbd
description: "Achievement notification sound"
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x810254"
- name: placeholder.png
path: assets/placeholder.png
required: false
bundled: true
size: 2762
md5: 8f846541ccbf088ee7f8c49c8dcb3a6a
sha1: c36292ab7e16bf5a6cbc4063f638e24872349c45
description: "Fallback interface texture"
note: >-
Requested from the texture cache when a notification or a loading screen
has no image of its own. A miss logs that it cannot continue and the
caller tears the interface down instead of bringing it up.
source_ref: "nethersx2-turnip-classic v0.7 libemucore.so 0x7d21fc, nethersx2-turnip-classic v0.7 libemucore.so 0x817be0, nethersx2-turnip-classic v0.7 libemucore.so 0x7ec54c"
- name: "<region>.png"
path: assets/icons/flags/NTSC-U.png
required: false
bundled: true
description: "Game list region flag"
note: >-
Loaded as icons/flags/<region>.png with the region string of the entry.
Thirty are carried, seven NTSC and twenty-two PAL plus Other.
source_ref: "nethersx2-turnip-classic v0.7 classes.dex icons/flags/%s.png"
- name: "star-<rating>.png"
path: assets/icons/star-0.png
required: false
bundled: true
description: "Game list compatibility rating icon"
note: "Loaded as icons/star-<rating>.png for ratings 0 to 5."
source_ref: "nethersx2-turnip-classic v0.7 classes.dex icons/star-%d.png"
- name: faq.html
path: assets/faq.html
required: false
bundled: true
size: 14048
md5: c2a64e0bcc401da9b0a3c7adf3cff410
sha1: 9163d4a3d19b87483f843e4bf3afe236a50a72d2
description: "Help page"
note: "Opened under the android_asset scheme by the setup wizard's browser view."
source_ref: "nethersx2-turnip-classic v0.7 classes.dex android_asset faq.html"
- name: 3rdparty.html
path: assets/3rdparty.html
required: false
bundled: true
size: 90296
md5: fb4ff036f3e4769aa6daefdc4c5dba57
sha1: 7743bf1d7e6e09a02f1b2972aa63bd8a9f26050d
description: "Third party notices page"
note: "Opened under the android_asset scheme in the built-in browser view."
source_ref: "nethersx2-turnip-classic v0.7 classes.dex android_asset 3rdparty.html"
exclusion_note: >
Left out are the libraries the package carries for the dynamic linker rather
than for its own code. libc.so, libm.so, libdl.so, ld-android.so, liblog.so
and libc++_shared.so sit beside the drivers so the namespace built over that
directory can satisfy their DT_NEEDED, and no code path names any of them;
android_linker_ns.o is a relocatable object nothing can open. libc++.so and
libsync.so are named in the fallback and promote arrays but the package
carries neither, and the promote call passes RTLD_NOLOAD, which never reads
from disk. libfile_redirect_hook.so and libgsl_alloc_hook.so are reachable
only under feature flags the shim never sets, the only flag passed being the
custom driver one. The system Vulkan loader and libandroid.so come from the
platform. Also left out are the assets no code path on this platform opens:
game_controller_db.txt, whose name appears in neither the library nor the dex,
pad input arriving through handleControllerButtonEvent and
handleControllerAxisEvent; the seven Direct3D shader sources under
shaders/dx11; icons/AppIconLarge.png and cover-placeholder.png;
fonts/Roboto-Regular-copyright and sounds/achievements/README.txt, which are
licence and credit texts; and dexopt/baseline.prof and baseline.profm, which
the Android runtime consumes. Everything the emulator produces for itself
under the data directory is out as well: memory cards as Mcd<nnn>.ps2 and
Mcd-Multitap<n>-Slot<nn>.ps2, DEV9hdd.raw for the internal disk, save states,
screenshots, covers, texture dumps, playtime.dat, emulog.txt, imgui.ini,
per-game settings, input profiles, the gamedb and gl_programs caches, and
vulkan_shim.log.
ref: VulkanShim2/vulkan_shim.cpp:1099-1105, VulkanShim2/vulkan_shim.cpp:1150,
VulkanShim2/vulkan_shim.cpp:1179-1194,
nethersx2-turnip-classic v0.7 libemucore.so 0x4a8c7c