mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 13:33:24 -05:00
feat: profile five more emulators and refine seven
This commit is contained in:
1 parent
9af958e9f8
commit
f3d912f3d3
12 files changed
+862
No files matched your search
@@ -36,6 +36,7 @@ notes: |
|
||||
files:
|
||||
- name: "sl31253.bin"
|
||||
system: fairchild-channelf
|
||||
priority: 2
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "Channel F PSU1 ROM (original). Fallback if sl90025.bin is missing."
|
||||
@@ -50,6 +51,7 @@ files:
|
||||
|
||||
- name: "sl90025.bin"
|
||||
system: fairchild-channelf
|
||||
priority: 1
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "Channel F II PSU1 ROM. Tried first, preferred over sl31253.bin."
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
emulator: KEmulator nnmod
|
||||
type: standalone
|
||||
core_classification: community_fork
|
||||
source: "https://github.com/shinovon/KEmulator"
|
||||
upstream: "https://github.com/shinovon/KEmulator"
|
||||
author: "shinovon"
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "4230a6af24e8e5d60e00e760750cfd9f195f0bd5"
|
||||
core_version: "2.21.5"
|
||||
display_name: "Mobile - J2ME (KEmulator nnmod)"
|
||||
cores:
|
||||
- kemulator
|
||||
- KEMULATOR
|
||||
systems:
|
||||
- j2me
|
||||
mode: standalone
|
||||
verification: existence
|
||||
|
||||
notes: |
|
||||
MIDP/CLDC runtime running on the host JVM, developed from decompiled KEmulator
|
||||
1.0.3. MIDlet bytecode executes against the javax.microedition classes compiled
|
||||
into the application, so no device firmware is read.
|
||||
|
||||
Yamaha SMAF audio is the one thing the user supplies. MMFPlayer.initialize()
|
||||
probes the directory holding the executable for a hardware emulator library in
|
||||
a fixed order, MA-7 then MA-5 then MA-3, and keeps the first complete set. MA-3
|
||||
ships with the emulator, so .mmf playback works on a stock install and the MA-5
|
||||
and MA-7 libraries raise the chip generation: MA-5 adds 32 PCM channels, MA-7
|
||||
adds DSP effects and is the only mode where supportsAudioTracks() is true,
|
||||
which the MEXA phrase audio track API reads to size its track array.
|
||||
ref: src/media/emulator/media/mmf/MMFPlayer.java:11-40,
|
||||
src/media/emulator/media/mmf/MaDll.java:862-864,
|
||||
src/media/emulator/media/mmf/PhrasePlayerImpl.java:20-26
|
||||
|
||||
The probe is 32-bit Windows only. isX64() returns before any file is touched,
|
||||
so the x64 build loads none of these. The MIDI-through-MA path passes
|
||||
notMmf=true, which skips the MA-7 branch and leaves MA-5 or MA-3.
|
||||
ref: src/media/emulator/media/mmf/MMFPlayer.java:15-17,
|
||||
src/media/javax/microedition/media/PlayerImpl.java:206-211,
|
||||
win/src/main/emulator/EmulatorPlatform.java:9-11,
|
||||
x64/src/main/emulator/EmulatorPlatform.java:9-11
|
||||
|
||||
Every caller degrades when the probe fails. PlayerImpl.midi() breaks out of the
|
||||
ma block and falls back to MidiSystem; PlayerImpl.mmf(), SmafPlayer, AudioClip
|
||||
and PhrasePlayerImpl each throw and lose SMAF audio alone. Only the file's
|
||||
existence is tested, then the path goes to Native.load, so the code reads no
|
||||
size and no hash.
|
||||
ref: src/media/javax/microedition/media/PlayerImpl.java:212-249,
|
||||
src/oem/com/jblend/media/smaf/SmafPlayer.java:91,
|
||||
src/oem/com/samsung/util/AudioClip.java:61,
|
||||
src/media/emulator/media/mmf/MaDll.java:181-190
|
||||
|
||||
The 3D and Mascot Capsule backends default to their OpenGL implementations, so
|
||||
the two shipped native libraries below load only when the user selects the
|
||||
SWERVE M3G engine or the Mascot Capsule DLL engine.
|
||||
ref: src/main/emulator/Settings.java:20-21,
|
||||
win/src/main/emulator/EmulatorPlatform.java:41-80
|
||||
|
||||
Two settings hold user-chosen paths with no fixed filename. SoundfontPath takes
|
||||
any .sf2 or .dls and is empty by default, leaving useCustomSoundfont() false and
|
||||
the JVM default soundbank in place. VlcDir points at a VLC installation that
|
||||
vlcj scans for libvlc.
|
||||
ref: src/media/emulator/media/EmulatorMIDI.java:26-36,
|
||||
src/main/emulator/ui/swt/Property.java:1864-1905
|
||||
|
||||
files:
|
||||
- name: M7_EmuSmw7.dll
|
||||
system: j2me
|
||||
required: false
|
||||
validation: [existence]
|
||||
description: "Yamaha MA-7 SMAF sequencer library"
|
||||
note: "First branch of the MMFPlayer probe, taken only when M7_EmuHw.dll sits beside it and the caller did not pass notMmf. Selects MODE_MA7, the only mode carrying phrase audio tracks. Distributed with the SoftBank MEXA emulator."
|
||||
source_ref: "src/media/emulator/media/mmf/MMFPlayer.java:19-23, src/media/emulator/media/mmf/MaDll.java:186"
|
||||
|
||||
- name: M7_EmuHw.dll
|
||||
system: j2me
|
||||
required: false
|
||||
validation: [existence]
|
||||
description: "Yamaha MA-7 SMAF hardware layer"
|
||||
note: "Tested for existence next to M7_EmuSmw7.dll; the MA-7 branch is skipped unless both are present. Loaded by the Windows loader as a dependency of the sequencer library, which is the path handed to Native.load."
|
||||
source_ref: "src/media/emulator/media/mmf/MMFPlayer.java:21"
|
||||
|
||||
- name: M5_EmuSmw5.dll
|
||||
system: j2me
|
||||
required: false
|
||||
validation: [existence]
|
||||
description: "Yamaha MA-5 SMAF sequencer library"
|
||||
note: "Second branch of the probe, taken when the MA-7 pair is absent or the caller passed notMmf and M5_EmuHw.dll sits beside it. Selects MODE_MA5, whose init walks a 1024-byte allocation to an address ending in 0x81 before calling MaSound_EmuInitialize."
|
||||
source_ref: "src/media/emulator/media/mmf/MMFPlayer.java:24-27, src/media/emulator/media/mmf/MaDll.java:184, src/media/emulator/media/mmf/MaDll.java:231-241"
|
||||
|
||||
- name: M5_EmuHw.dll
|
||||
system: j2me
|
||||
required: false
|
||||
validation: [existence]
|
||||
description: "Yamaha MA-5 SMAF hardware layer"
|
||||
note: "Tested for existence next to M5_EmuSmw5.dll; the MA-5 branch is skipped unless both are present."
|
||||
source_ref: "src/media/emulator/media/mmf/MMFPlayer.java:25"
|
||||
|
||||
- name: ma3smwemu.dll
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
size: 724992
|
||||
md5: c1625f6c2fbf66e2e838c6bc74ffe641
|
||||
sha1: b566d111ccd3e303d21ab5c4cd1519dc238a4fce
|
||||
validation: [existence]
|
||||
description: "Yamaha MA-3 SMAF emulator"
|
||||
note: "Last branch of the probe and the only one satisfied by a single file. Selects MODE_MA3, whose init calls MaSound_Initialize directly. Present in a stock install, so .mmf playback needs nothing from the user on the 32-bit Windows build."
|
||||
source_ref: "src/media/emulator/media/mmf/MMFPlayer.java:28-30, src/media/emulator/media/mmf/MaDll.java:182, src/media/emulator/media/mmf/MaDll.java:227-230"
|
||||
|
||||
- name: jsr184client.dll
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
size: 405504
|
||||
md5: 9fcb2bd1f36d1e8d94f8e4e2650914c9
|
||||
sha1: ed9a60d56ddcc91514b033c16f2062638c3e6eeb
|
||||
validation: [existence]
|
||||
description: "SWERVE M3G native engine"
|
||||
note: "Loaded from the executable's directory by the static initializers of the SWERVE javax.microedition.m3g classes, with a System.loadLibrary fallback on the library path. Reached only when the 3D engine setting is SWERVE, the LWJGL engine being the default."
|
||||
source_ref: "m3g_swerve/src/javax/microedition/m3g/Graphics3D.java:275, m3g_swerve/src/javax/microedition/m3g/Loader.java:378, src/main/emulator/i.java:6-14"
|
||||
|
||||
- name: java_micro3d_v3_32.dll
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
size: 27648
|
||||
md5: 60045cd91e30880c731c9fea8c712093
|
||||
sha1: b1d6aef4559bb46af27eebda50fe06e0de659966
|
||||
validation: [existence]
|
||||
description: "Mascot Capsule V3 JNI bridge"
|
||||
note: "System.loadLibrary from the static initializers of the com.mascotcapsule.micro3d.v3 classes, reached only when the Mascot Capsule engine setting is DLL. Its import table names micro3d_v3_32.dll."
|
||||
source_ref: "micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:162-165, micro3d_dll/src/com/mascotcapsule/micro3d/v3/Graphics3D.java:279"
|
||||
|
||||
- name: micro3d_v3_32.dll
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
size: 475136
|
||||
md5: d5ab04740801208b92fa3de7252a75d8
|
||||
sha1: f59e0d445aafe2503c6e5249ca07df4b89626f8f
|
||||
validation: [existence]
|
||||
description: "Mascot Capsule V3 renderer"
|
||||
note: "Pulled in by the Windows loader when java_micro3d_v3_32.dll loads; no Java code names it."
|
||||
source_ref: "micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:163"
|
||||
|
||||
- name: amrdecoder.dll
|
||||
aliases:
|
||||
- amrdecoder_64.dll
|
||||
- amrdecoder_arm64.dll
|
||||
- libamrdecoder.so
|
||||
- libamrdecoder_64.so
|
||||
- libamrdecoder_arm32.so
|
||||
- libamrdecoder_arm64.so
|
||||
- libamrdecoder.dylib
|
||||
- libamrdecoder_arm64.dylib
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
validation: [existence]
|
||||
description: "opencore-amr decoder for AMR audio"
|
||||
note: "System.load on a name composed from os.name and os.arch, resolved against the executable's directory. The 32-bit Windows build asks for amrdecoder.dll unconditionally. A load failure is printed and swallowed."
|
||||
source_ref: "win/src/main/emulator/EmulatorPlatform.java:91-97, x64/src/main/emulator/EmulatorPlatform.java:173-212"
|
||||
|
||||
- name: s60snr.ttf
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
validation: [existence]
|
||||
description: "Series 60 typeface"
|
||||
note: "Read from /res inside the jar the first time a FontAWT is built for the Series 60 face, then cached and derived per style and size."
|
||||
source_ref: "src/main/emulator/graphics2D/awt/FontAWT.java:20-28"
|
||||
|
||||
- name: Nokia.ttf
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
validation: [existence]
|
||||
description: "Nokia typeface"
|
||||
note: "Read from /res inside the jar the first time a FontAWT is built for the Nokia face."
|
||||
source_ref: "src/main/emulator/graphics2D/awt/FontAWT.java:29-37"
|
||||
|
||||
- name: presets.xml
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
validation: [existence]
|
||||
description: "Device presets: screen sizes, key maps, platform identities"
|
||||
note: "Devices.load reads the PresetsPath setting, /res/presets.xml by default, as a jar resource and falls back to a disk read when the resource is absent, which is how a user-supplied preset file is picked up."
|
||||
source_ref: "src/main/emulator/Settings.java:133, src/main/emulator/Devices.java:25-50, src/main/emulator/Emulator.java:641"
|
||||
|
||||
- name: en.txt
|
||||
system: j2me
|
||||
required: false
|
||||
bundled: true
|
||||
category: game_data
|
||||
validation: [existence]
|
||||
description: "UI strings, English"
|
||||
note: "Read from the lang directory next to the executable at startup and kept as the fallback bundle; the language setting names a sibling in the same directory. Every lookup that misses both bundles falls back to the string built into the call site."
|
||||
source_ref: "src/main/emulator/UILocale.java:11-48"
|
||||
@@ -0,0 +1,272 @@
|
||||
emulator: Kenji-NX
|
||||
type: standalone
|
||||
core_classification: community_fork
|
||||
source: "https://git.ryujinx.app/projects/Kenji-NX"
|
||||
source_branch: libryujinx_bionic
|
||||
upstream: "https://git.ryujinx.app/projects/Ryubing"
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "8d7d8f344cb01257c5bc59bb02a74bb89ab9bb5f"
|
||||
core_version: "2.1.0-pr.2"
|
||||
display_name: "Nintendo - Switch (Kenji-NX)"
|
||||
cores:
|
||||
- kenji-nx
|
||||
- kenjinx
|
||||
- "KENJI-NX"
|
||||
systems:
|
||||
- nintendo-switch
|
||||
mode: standalone
|
||||
|
||||
notes: |
|
||||
Nintendo Switch emulator in C#, a fork of the Ryujinx line maintained by
|
||||
KeatonTheBot. Two builds come out of one repository: the desktop Avalonia
|
||||
front end on master, and the Android app on libryujinx_bionic, which carries
|
||||
the whole desktop tree plus src/KenjinxAndroid and src/LibKenjinx. That branch
|
||||
is the one read here, since master has no Android code at all. The Android
|
||||
package is org.kenjinx.android and ES-DE launches it with the action
|
||||
org.kenjinx.android.LAUNCH_GAME and the ROM in EXTRA_bootPath.
|
||||
ref: README.md:15-24, src/KenjinxAndroid/app/build.gradle:11-15,
|
||||
src/KenjinxAndroid/app/src/main/AndroidManifest.xml:8,69
|
||||
|
||||
Every external file hangs off one data root. AppDataManager.Initialize takes a
|
||||
base path, keeps a portable directory next to the binary when one exists and
|
||||
otherwise falls back to %APPDATA%/Ryujinx, the default directory name being
|
||||
still Ryujinx. Android hands it getExternalFilesDir(null), which differs from
|
||||
the user profile path and already exists, so the launch mode is Custom and the
|
||||
~/.switch fallback that ReloadKeySet consults in UserProfile mode never fires
|
||||
there. games, profiles and system are created under the root on every start.
|
||||
ref: src/Ryujinx.Common/Configuration/AppDataManager.cs:11-17,47,50-104,223-230,
|
||||
src/LibKenjinx/LibKenjinx.cs:54-95,
|
||||
src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt:264-298
|
||||
|
||||
Firmware is installed rather than placed. ContentManager takes a directory, a
|
||||
zip or an xci with an update partition, verifies each NCA against the key set
|
||||
and refuses a package carrying unrelated archives, then registers the contents
|
||||
under bis/system/Contents/registered. Android passes a file descriptor instead
|
||||
of a path but reaches the same two methods. Nothing gates the launch on it:
|
||||
homebrew NRO goes through ProcessLoader without touching the key set, and the
|
||||
failure is deferred to the first service that needs a system archive.
|
||||
ref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:431-498,675-749,893-903,
|
||||
src/LibKenjinx/Android/JniExportedMethods.cs:459-495,
|
||||
src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs:189-205
|
||||
|
||||
Two read paths belong to the desktop build alone, because the Android build
|
||||
drops LibKenjinx.Native.cs and wires those subsystems differently.
|
||||
SDL_GameControllerDB.txt is read by SDL3Driver, whose only callers are the
|
||||
SDL3 audio, gamepad and keyboard drivers; on Android JnaDeviceInitialize
|
||||
builds an OpenALHardwareDeviceDriver and InitializeInput builds a
|
||||
VirtualGamepadDriver, so SDL3 never initialises. Amiibo diverge the same way:
|
||||
the desktop scan decrypts a dump through AmiiboBinReader and therefore needs
|
||||
key_retail.bin, while the Android entry buffers the raw tag in
|
||||
KenjinxAmiiboShim and INfp reads the figure id straight out of offset 0x1DC.
|
||||
ref: src/LibKenjinx/LibKenjinx.csproj:11-13,
|
||||
src/LibKenjinx/Android/JniExportedMethods.cs:347-348,1046-1060,
|
||||
src/LibKenjinx/LibKenjinx.Input.cs:28-39,
|
||||
src/Ryujinx.HLE/Kenjinx/AmiiboBridge.cs:10-44,
|
||||
src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/KenjinxAmiiboShim.cs:15-41,
|
||||
src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs:149-166,257-279
|
||||
|
||||
Config.json, Profiles.json, updates.json, dlc.json, mods.json, metadata.json
|
||||
and system/amiibo/<amiibo id>.json are written by the emulator itself, and
|
||||
system/amiibo/Amiibo.json is a catalogue the desktop window downloads from
|
||||
AmiiboAPI and rewrites. None of them is user supplied. The Android app keeps
|
||||
its own settings in Android shared preferences.
|
||||
ref: src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs:198-243,
|
||||
src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs:61-63,
|
||||
src/Ryujinx.Common/ReleaseInformation.cs:14-19,
|
||||
src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/QuickSettings.kt:92
|
||||
|
||||
Distribution moved off GitHub: Kenji-NX/Android-Releases returns HTTP 451
|
||||
under the Nintendo notice of 2026-02-12, and both the source and the builds
|
||||
are served by the Forgejo instance, which is where ES-DE points as well.
|
||||
ref: https://github.com/github/dmca/blob/master/2026/02/2026-02-12-nintendo.md,
|
||||
tmp/es-de/ANDROID.md:470-474
|
||||
|
||||
files:
|
||||
- name: prod.keys
|
||||
required: true
|
||||
path: system/prod.keys
|
||||
description: "Production key set for NCA decryption"
|
||||
note: >-
|
||||
Read from the system directory under the data root, and additionally from
|
||||
~/.switch when the launch mode is UserProfile, which Android never is. The
|
||||
four key files are looked up independently, so each is optional to the
|
||||
reader, but an empty header key stops NCA header decryption outright and
|
||||
no encrypted content loads. The desktop importer accepts a .keys file or a
|
||||
zip of them and rejects any line that is not "name = value" in lowercase
|
||||
hexadecimal; the Android importer accepts the name prod.keys only and
|
||||
copies it straight into the system directory.
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:231-266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:500-537,681-684,1082-1118, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt:254-301"
|
||||
|
||||
- name: title.keys
|
||||
required: false
|
||||
path: system/title.keys
|
||||
description: "Per-title key set mapping rights id to title key"
|
||||
note: >-
|
||||
Read beside prod.keys and passed to the same key file reader. Tickets
|
||||
found in a container are imported into the key set at load time, so a
|
||||
title shipping its own ticket does not need an entry here. The importer
|
||||
validates each line as two 32-character hexadecimal fields.
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:241,250-253,266,269-297, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1086,1100-1102"
|
||||
|
||||
- name: console.keys
|
||||
required: false
|
||||
path: system/console.keys
|
||||
description: "Console-unique key set"
|
||||
note: >-
|
||||
Read beside prod.keys and passed to the same key file reader as the
|
||||
console-specific set. Validated as "name = value" lines like prod.keys.
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:242,255-258,266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1103-1105"
|
||||
|
||||
- name: dev.keys
|
||||
required: false
|
||||
path: system/dev.keys
|
||||
description: "Development-unit key set"
|
||||
note: >-
|
||||
Read beside prod.keys and handed to the key file reader as the development
|
||||
set, alongside the production one rather than instead of it. Validated as
|
||||
"name = value" lines.
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:243,260-263,266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1104-1105"
|
||||
|
||||
- name: "<firmware>.zip"
|
||||
aliases: ["<firmware>.xci"]
|
||||
required: false
|
||||
storage: large_file
|
||||
description: "Switch system firmware package"
|
||||
note: >-
|
||||
Chosen through a file picker and read whole at install time, by path on
|
||||
desktop and by file descriptor on Android. A zip is walked entry by entry
|
||||
and an xci is opened at its update partition; a directory of NCAs is also
|
||||
accepted on desktop. Each NCA is decrypted with the key set to read its
|
||||
title id and content type, the package is rejected when it carries
|
||||
archives that belong to no system title, and the version string comes out
|
||||
of title 0100000000000809. The NCAs are then registered under
|
||||
bis/system/Contents/registered and read from there, never as loose files.
|
||||
No digest of the package itself is compared against anything.
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:431-498,675-749,751-1045, src/LibKenjinx/Android/JniExportedMethods.cs:459-495, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt:308-364"
|
||||
|
||||
- name: key_retail.bin
|
||||
required: false
|
||||
path: system/key_retail.bin
|
||||
size: 160
|
||||
validation: [size]
|
||||
description: "Amiibo master keys used to decrypt tag dumps"
|
||||
note: >-
|
||||
Read from the system directory under the data root and split into two
|
||||
80-byte master keys, the data key then the tag key, each being a 16-byte
|
||||
HMAC key, a 14-byte type string, a reserved byte, a magic size byte, 16
|
||||
magic bytes and a 32-byte XOR pad. Any total other than 160 bytes throws
|
||||
and the scan fails. The desktop window hides its amiibo-from-dump entry
|
||||
when the file is absent. Only the desktop scan path decrypts a dump; the
|
||||
Android slots hand the raw bytes to the tag buffer instead.
|
||||
source_ref: "src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs:22-44,331-336, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs:10-16, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboMasterKey.cs:15-39, src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs:385,2243"
|
||||
|
||||
- name: SDL_GameControllerDB.txt
|
||||
required: false
|
||||
path: SDL_GameControllerDB.txt
|
||||
category: game_data
|
||||
description: "SDL gamepad mapping database"
|
||||
note: >-
|
||||
Read from the data root and handed to SDL_AddGamepadMappingsFromFile when
|
||||
the SDL3 driver starts, which happens on the desktop build only. Guarded
|
||||
by an existence test, and SDL carries its own built-in mappings, so a
|
||||
missing file costs only the extra pad definitions.
|
||||
source_ref: "src/Ryujinx.SDL3.Common/SDL3Driver.cs:100-105, src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs:53, src/Ryujinx.Audio.Backends.SDL3/SDL3HardwareDeviceDriver.cs:36, src/Ryujinx/UI/Windows/MainWindow.axaml.cs:110"
|
||||
|
||||
- name: "<amiibo>.bin"
|
||||
required: false
|
||||
unsourceable: "dump of one physical amiibo figure, tied to the tag it was read from and never distributed generically"
|
||||
description: "Amiibo tag dump"
|
||||
note: >-
|
||||
Read whole from wherever the picker points. The desktop path decrypts it
|
||||
with key_retail.bin, accepts 532 bytes by padding to the 540 of 135 pages
|
||||
of 4, and writes the tag back when a game edits its application area. The
|
||||
Android slots read the bytes through the content resolver and buffer them
|
||||
for the NFP service, which takes the figure id from offset 0x1DC without
|
||||
decrypting anything.
|
||||
source_ref: "src/Ryujinx.HLE/HOS/Horizon.cs:355-363, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs:22-44,151-283, src/LibKenjinx/LibKenjinx.cs:700-729, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt:328-349"
|
||||
|
||||
- name: "<CaCertificateId>.der"
|
||||
required: false
|
||||
path: system/ssl/
|
||||
unsourceable: "replacement certificate the user picks for one certificate authority, with no canonical artefact behind the name"
|
||||
description: "Override for one built-in root certificate"
|
||||
note: >-
|
||||
Looked up under system/ssl by the enumeration name of the certificate
|
||||
being read out of the firmware certificate store, and substituted for the
|
||||
store entry when the file exists. The store itself comes from title
|
||||
0100000000000800, so the absence of an override changes nothing.
|
||||
source_ref: "src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs:25,91-112,114-180"
|
||||
|
||||
- name: "<driver>.zip"
|
||||
required: false
|
||||
path: drivers/
|
||||
unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact"
|
||||
description: "Replacement Vulkan driver for the Android build"
|
||||
note: >-
|
||||
Imported through a picker filtered on application/zip and unpacked into a
|
||||
folder named after the archive under drivers in the data root. A folder is
|
||||
offered only when it holds a meta.json naming a libraryName that resolves
|
||||
to a file present beside it; the chosen path is remembered in a file named
|
||||
selected. At renderer start the folder is copied into internal storage,
|
||||
because the external filesystem cannot carry an executable mapping, loaded
|
||||
through the rootless Adreno driver loader, and the resulting handle is
|
||||
passed to the Vulkan loader. An empty selection uses the system loader.
|
||||
source_ref: "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/VulkanDriverViewModel.kt:13-167, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt:202-243, src/LibKenjinx/Android/JniExportedMethods.cs:532-555, src/LibKenjinx/VulkanLoader.cs:27-29"
|
||||
|
||||
# System archives read out of the installed firmware, never as loose files.
|
||||
firmware_titles:
|
||||
- id: "0100000000000809"
|
||||
name: "System version"
|
||||
content: ["file"]
|
||||
required: false
|
||||
note: "Version string reported for the installed firmware, and the value the installer returns after verifying a package."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:32,1047-1080"
|
||||
|
||||
- id: "010000000000080E"
|
||||
name: "TimeZoneBinary"
|
||||
content: ["binaryList.txt", "zoneinfo/"]
|
||||
required: false
|
||||
note: "Location list and zone rules. Without it the location cache holds UTC alone and the time zone manager is marked initialised without rules."
|
||||
source_ref: "src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs:24,62-86,88-119"
|
||||
|
||||
- id: "0100000000000810"
|
||||
name: "FontNintendoExtended"
|
||||
content: ["nintendo_ext_003.bfttf"]
|
||||
required: false
|
||||
note: "Shared font, XOR-decoded from BFTTF into the shared memory the pl:u service exposes."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:73,93, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125,159-180"
|
||||
|
||||
- id: "0100000000000811"
|
||||
name: "FontStandard"
|
||||
content: ["nintendo_udsg-r_std_003.bfttf"]
|
||||
required: false
|
||||
note: "Shared font. A missing font title throws InvalidSystemResourceException, so a title that asks for shared fonts stops there."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:68,88, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125"
|
||||
|
||||
- id: "0100000000000812"
|
||||
name: "FontKorean"
|
||||
content: ["nintendo_udsg-r_ko_003.bfttf"]
|
||||
required: false
|
||||
note: "Shared font."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:71,91"
|
||||
|
||||
- id: "0100000000000813"
|
||||
name: "FontChineseTraditional"
|
||||
content: ["nintendo_udjxh-db_zh-tw_003.bfttf"]
|
||||
required: false
|
||||
note: "Shared font."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:70,92"
|
||||
|
||||
- id: "0100000000000814"
|
||||
name: "FontChineseSimplified"
|
||||
content: ["nintendo_udsg-r_org_zh-cn_003.bfttf", "nintendo_udsg-r_ext_zh-cn_003.bfttf"]
|
||||
required: false
|
||||
note: "Shared fonts. One title carries both the base and the extended simplified faces."
|
||||
source_ref: "src/Ryujinx.HLE/FileSystem/ContentManager.cs:69-70,89-90"
|
||||
|
||||
- id: "0100000000000800"
|
||||
name: "Certificate store"
|
||||
content: ["ssl_TrustedCerts.bdf", "ssl_TrustedCerts.tcf"]
|
||||
required: false
|
||||
note: "Trusted root certificates for the ssl service, the .tcf name being the one used up to firmware 2.3.0. Absent, the service logs and serves nothing."
|
||||
source_ref: "src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs:25,114-180"
|
||||
@@ -48,6 +48,7 @@ files:
|
||||
- name: "saturn_bios.bin"
|
||||
path: "kronos/saturn_bios.bin"
|
||||
system: sega-saturn
|
||||
priority: 1
|
||||
required: true
|
||||
size: 524288
|
||||
validation: [size]
|
||||
@@ -60,6 +61,7 @@ files:
|
||||
- name: "sega_101.bin"
|
||||
system: sega-saturn
|
||||
region: [japan]
|
||||
priority: 2
|
||||
required: false
|
||||
size: 524288
|
||||
validation: [size]
|
||||
@@ -72,6 +74,7 @@ files:
|
||||
- name: "mpr-17933.bin"
|
||||
system: sega-saturn
|
||||
region: [north-america, europe]
|
||||
priority: 3
|
||||
required: false
|
||||
size: 524288
|
||||
validation: [size]
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
emulator: Linkboy
|
||||
type: standalone
|
||||
core_classification: embedded_hle
|
||||
source: "https://play.google.com/store/apps/details?id=com.pixelrespawn.linkboy"
|
||||
upstream: closed-source
|
||||
author: "Pixel Respawn LLC"
|
||||
profiled_date: "2026-08-11"
|
||||
core_version: "3.11.0"
|
||||
display_name: "Nintendo - Game Boy / Color / Advance (Linkboy)"
|
||||
mode: standalone
|
||||
cores:
|
||||
- "linkboy"
|
||||
- "Linkboy"
|
||||
- "LINKBOY"
|
||||
systems:
|
||||
- nintendo-gb
|
||||
- nintendo-gbc
|
||||
- nintendo-gba
|
||||
- nintendo-sgb
|
||||
|
||||
notes: |
|
||||
Android package com.pixelrespawn.linkboy, closed source, free on Google Play with a
|
||||
paid unlock, reached by ES-DE through its LINKBOY find rule. Two Play distribution
|
||||
builds are read here, 3.11.0 (versionCode 86, minSdk 26, targetSdk 36, xapk sha256
|
||||
83b92276d28d71e491ebcbec3fa85cef42ef49d8ee0c6fd1bbe0045bc118f866) and 1.4.2
|
||||
(versionCode 12), both carrying the app signing certificate sha256
|
||||
feb643cfdd9c49f58eb325fde3d869cefcf59e45dfadb8e540beca35a7b1c28e and the Play
|
||||
distribution source stamp. Emulation lives in liblinkboy.so behind a JNI bridge;
|
||||
addresses below are armeabi-v7a of 3.11.0 and class names are those of its
|
||||
obfuscated dex.
|
||||
|
||||
Four subsystems are declared: GBA, GBC, GB and SGB (ve0.java:16-21). An SGB
|
||||
cartridge runs in GB mode when prefer-sgb is off (wo0.java:62, c51.java:183-185).
|
||||
|
||||
The three firmware images are the only files the emulator reads that it does not
|
||||
write itself. One table holds their names, sizes and md5 sums (cr.java:8), and the
|
||||
firmware screen reports each as present, mismatched or absent by comparing the
|
||||
size and then the md5 of the whole file (br.java:24-88, yz1.java:39, hr1.java:110).
|
||||
Saves, cheats, thumbnails, keymaps and the ips, ups and bps patches picked up next
|
||||
to a ROM are written or supplied per game, not fixed files.
|
||||
|
||||
An image is read only while the use-bios preference is on, which is off until set
|
||||
(wo0.java:63, a75.java:165-173, c51.java:186,268, w41.java:243). The loader appends
|
||||
firmware/ and the name to the directory handed to setDataDir, the app's external
|
||||
files directory (c51.java:69, hg3.java:32-38), and opens the result with fopen "rb".
|
||||
A file whose length is not exactly the expected size is closed and treated as
|
||||
absent, as is a short read; on success the loader returns the crc32 of the bytes
|
||||
(liblinkboy.so 0x1c870-0x1ca10, crc32 at 0x1c4cc).
|
||||
|
||||
A missing image stops nothing. The GBA path copies a replacement bios compiled into
|
||||
the library over the 16 KB region and zero fills the remainder (0x109de8-0x109e64).
|
||||
The GB and GBC path hands the reset routine a boot rom present flag, false when no
|
||||
image was loaded, and the machine starts from its post boot state
|
||||
(0x14f534-0x14f5b8, 0x14f638-0x14f654).
|
||||
|
||||
Save states record the crc32 of the image they were made under. Loading a state
|
||||
whose value differs from the running machine re-reads the file and refuses the state
|
||||
when the crc32 still disagrees (0x10aa40-0x10aa98, 0x14fe00-0x14fe64).
|
||||
|
||||
files:
|
||||
- name: gba_bios.bin
|
||||
path: firmware/gba_bios.bin
|
||||
system: nintendo-gba
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 16384
|
||||
md5: a860e8c0b6d573d191e4ec7db1b1e4f6
|
||||
validation: [size, md5]
|
||||
config_key: "use-bios"
|
||||
description: "Game Boy Advance BIOS"
|
||||
note: "Read into the 16 KB bios region when use-bios is on. Absent, mismatched in size or short, the region is filled with a replacement bios compiled into the library and zero padded."
|
||||
source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x109de8-0x109e64 (size argument 0x4000), loader 0x1c870-0x1ca10"
|
||||
|
||||
- name: gbc_bios.bin
|
||||
path: firmware/gbc_bios.bin
|
||||
system: nintendo-gbc
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 2304
|
||||
md5: dbfce9db9deaa2567f6a84fde55f9680
|
||||
validation: [size, md5]
|
||||
config_key: "use-bios"
|
||||
description: "Game Boy Color boot ROM"
|
||||
note: "Read when use-bios is on and the machine is a Game Boy Color. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state."
|
||||
source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f5a0-0x14f5b0 (size argument 0x900), 0x14f638-0x14f654, loader 0x1c870-0x1ca10"
|
||||
|
||||
- name: gb_bios.bin
|
||||
path: firmware/gb_bios.bin
|
||||
system: nintendo-gb
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 256
|
||||
md5: 32fbbd84168d3482956eb3c5051637f5
|
||||
validation: [size, md5]
|
||||
config_key: "use-bios"
|
||||
description: "Game Boy boot ROM"
|
||||
note: "Read when use-bios is on and the machine is a Game Boy. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state."
|
||||
source_ref: "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f58c-0x14f59c (size argument 0x100), 0x14f638-0x14f654, loader 0x1c870-0x1ca10"
|
||||
@@ -0,0 +1,105 @@
|
||||
emulator: "Lynx.emu"
|
||||
type: standalone
|
||||
core_classification: community_fork
|
||||
source: "https://github.com/Rakashazi/emu-ex-plus-alpha"
|
||||
upstream: "https://mednafen.github.io/"
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943"
|
||||
core_version: "1.5.85"
|
||||
display_name: "Atari - Lynx (Lynx.emu)"
|
||||
mode: standalone
|
||||
cores:
|
||||
- "lynx-emu"
|
||||
- "Lynx.emu"
|
||||
- "LYNX-EMU"
|
||||
systems:
|
||||
- atari-lynx
|
||||
|
||||
notes: |
|
||||
Member of the EX Emulator series by Robert Broglia, which targets Android and
|
||||
Linux (README.md:3-4,12-13) and keeps iOS and Pandora build shortcuts in the
|
||||
tree (Lynx.emu/ios.mk, Lynx.emu/pandora.mk). Published as
|
||||
com.explusalpha.LynxEmu (Lynx.emu/metadata/conf.mk:2,6,7) and reached by ES-DE
|
||||
through its LYNX-EMU find rule. Mednafen's Lynx module, itself derived from
|
||||
Handy by K. Wilkins, is vendored under Lynx.emu/src/lynx
|
||||
(Lynx.emu/metadata/conf.mk:8, Lynx.emu/src/main/AppMeta.cc:26) and driven by
|
||||
the app's own video, audio and input layers. The vendored copy declares
|
||||
Mednafen 1.32.0-UNSTABLE
|
||||
(EmuFramework/include/shared/mednafen/mednafen-config.h:167); the upstream
|
||||
comparisons below are against the 1.32.1 release. Content is read from .lnx,
|
||||
.lyx and .o files (Lynx.emu/metadata/conf.mk:5,
|
||||
Lynx.emu/src/main/AppMeta.cc:30), and the module also takes a headerless image
|
||||
of 128, 256 or 512 KB, a filetype upstream rejects
|
||||
(Lynx.emu/src/lynx/system.cpp:90-91,112; mednafen src/lynx/system.cpp:86-93).
|
||||
|
||||
The boot ROM is the one file the user supplies and it carries no name of its
|
||||
own. The picker takes any name ending in .img and stores the chosen URI in
|
||||
biosPath (Lynx.emu/src/main/EmuMenuViews.cc:32-50,
|
||||
Lynx.emu/src/main/system.ccm:70, Lynx.emu/src/main/options.cc:33,55).
|
||||
MDFN_MakeFName returns that URI for MDFNMKF_FIRMWARE and drops the
|
||||
lynxboot.img name the module hands it, the name upstream resolves in its
|
||||
firmware directory (Lynx.emu/src/main/options.cc:150-154,
|
||||
Lynx.emu/src/lynx/system.cpp:103; mednafen src/lynx/system.cpp:101). CRom
|
||||
opens the file only when the path is not empty and throws unless it is exactly
|
||||
512 bytes (Lynx.emu/src/lynx/rom.cpp:75-95). Upstream has neither test: it
|
||||
opens whatever the firmware directory yields and takes 512 bytes or more
|
||||
(mednafen src/lynx/rom.cpp:55-74). A path that is set but cannot be opened, or
|
||||
that is the wrong length, aborts the content load rather than falling back
|
||||
(EmuFramework/src/shared/mednafen-emuex/StreamImpl.cc:53-63,
|
||||
Lynx.emu/src/lynx/system.cpp:337-342).
|
||||
|
||||
With no path mValid stays false (Lynx.emu/src/lynx/rom.h:77) and Reset builds a
|
||||
stub boot ROM in place: 512 bytes of 0x88, the reset vectors, and STA $FD97 at
|
||||
$FE00, $FE19, $FE4A and $FF80 (Lynx.emu/src/lynx/rom.cpp:55-72,
|
||||
Lynx.emu/src/lynx/rom.h:50, Lynx.emu/src/lynx/system.cpp:241-263). A write to
|
||||
that register from inside the ROM window dispatches to the four HLE routines
|
||||
(Lynx.emu/src/lynx/mikie.cpp:1033-1053), which clear RAM, pull the encrypted
|
||||
loader blocks off the cartridge shifter, run them through lynx_decrypt and jump
|
||||
to $0200 (Lynx.emu/src/lynx/system.cpp:150-208,
|
||||
Lynx.emu/src/lynx/lynxdec.cpp:265). Neither the stub nor lynxdec.cpp exists
|
||||
upstream, where the constructor reaches the throw and Reset carries the
|
||||
homebrew branch alone (mednafen src/lynx/system.cpp:169-177).
|
||||
|
||||
No hash is checked. The module holds no crc32 table, and its only md5 use is
|
||||
the content hash that names saves and states (Lynx.emu/src/lynx/cart.cpp:
|
||||
245-264, Lynx.emu/src/lynx/system.cpp:313,319). The custom palette entry
|
||||
survives in the module table and reaches nothing: Lynx_SetPixelFormat passes an
|
||||
empty span where upstream Emulate passes espec->CustomPalette
|
||||
(Lynx.emu/src/lynx/system.cpp:352,555,583; mednafen src/lynx/system.cpp:
|
||||
267,298), the app calls MDFNGI::Load directly instead of going through the
|
||||
Mednafen frontend that reads .pal files
|
||||
(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-145,
|
||||
Lynx.emu/src/main/Main.cc:62-65), and the frame spec is value-initialised so
|
||||
CustomPalette stays null
|
||||
(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:153,
|
||||
EmuFramework/src/shared/mednafen/git.h:399). Cheats answer false against
|
||||
CheatInfo_Empty (Lynx.emu/src/main/options.cc:126-127,
|
||||
Lynx.emu/src/lynx/system.cpp:586), no Cheats.cc is in the build
|
||||
(Lynx.emu/src/CMakeLists.txt:6-21), and the app declares no bundled content,
|
||||
the framework definition defaulting to an empty span
|
||||
(EmuFramework/src/AppMeta.cc:40,
|
||||
EmuFramework/include/emuframework/AppMeta.hh:66-68).
|
||||
|
||||
MDFN_MakeFName is called once and only for the firmware, so the module asks for
|
||||
no save file (Lynx.emu/src/lynx/system.cpp:103). What the app writes is .mca
|
||||
states (Lynx.emu/src/main/system.ccm:86, Lynx.emu/src/main/Main.cc:47-54) and
|
||||
LynxEmu.config (Lynx.emu/src/main/AppMeta.cc:27). ui.png, gpOverlay.png and the
|
||||
shader sources are drawn by the framework from the application bundle
|
||||
(EmuFramework/include/emuframework/AssetManager.hh:61-65,
|
||||
EmuFramework/src/AssetManager.cc:58-65,
|
||||
EmuFramework/src/VideoImageEffect.cc:164-172).
|
||||
|
||||
files:
|
||||
- name: lynxboot.img
|
||||
system: atari-lynx
|
||||
required: false
|
||||
hle_fallback: true
|
||||
has_builtin: true
|
||||
size: 512
|
||||
validation: [size]
|
||||
description: "Atari Lynx boot ROM"
|
||||
note: >-
|
||||
Picked by the user from any path, under any name ending in .img. The length
|
||||
is the only test and a file of another length aborts the load rather than
|
||||
falling back.
|
||||
source_ref: "Lynx.emu/src/lynx/system.cpp:103 (firmware request), Lynx.emu/src/main/options.cc:150-154 (path comes from the picker), Lynx.emu/src/lynx/rom.cpp:75-95 (open and size test), Lynx.emu/src/main/EmuMenuViews.cc:32-50 (picker and extension filter), Lynx.emu/src/lynx/system.cpp:241-263 (stub boot ROM when absent)"
|
||||
@@ -0,0 +1,163 @@
|
||||
emulator: M64Plus FZ
|
||||
type: standalone
|
||||
core_classification: community_fork
|
||||
source: "https://github.com/fzurita/mupen64plus-ae"
|
||||
upstream: "https://github.com/fzurita/mupen64plus-ae"
|
||||
source_branch: fz-master
|
||||
profiled_date: "2026-08-11"
|
||||
source_commit: "f3c381bcc58e4adce897aba323193d3f407e30e3"
|
||||
core_version: "3.0.335 (beta)"
|
||||
display_name: "Nintendo - Nintendo 64 (M64Plus FZ)"
|
||||
cores:
|
||||
- m64plus-fz
|
||||
- M64PLUS-FZ
|
||||
- org.mupen64plusae.v3.fzurita
|
||||
- org.mupen64plusae.v3.fzurita.pro
|
||||
- org.mupen64plusae.v3.fzurita.amazon
|
||||
systems:
|
||||
- nintendo-64
|
||||
- nintendo-64dd
|
||||
mode: standalone
|
||||
|
||||
notes: |
|
||||
Android application forked from Paul Lamb's Mupen64Plus AE and published under
|
||||
three package ids built from one code line: org.mupen64plusae.v3.fzurita, the
|
||||
paid .pro and the Amazon .amazon. Those flags gate advertising and Google
|
||||
Drive backup and nothing else (AppData.java:334-337,
|
||||
DataPrefsActivity.java:173-182, GamePrefsActivity.java:288-296), so the three
|
||||
packages want the same files. The repository default branch is a 2017 snapshot
|
||||
of the parent project; the application is built from fz-master, which carries
|
||||
mupen64plus-core, the hle, cxd4 and parallel RSP plugins, the GLideN64,
|
||||
glide64mk2, gln64, rice, angrylion-plus and parallel video plugins, its own
|
||||
audio, touchscreen and raphnet input plugins, and a miniupnp bridge for
|
||||
netplay (settings.gradle:1). ES-DE launches it for both n64 and n64dd with an
|
||||
ACTION_VIEW intent carrying a storage access uri, which the splash screen
|
||||
forwards to the gallery as a rom path (AndroidManifest.xml:83-96,
|
||||
ActivityHelper.java:191-198).
|
||||
|
||||
Cartridge boot needs no boot ROM. The PIF boot sequence is simulated
|
||||
(mupen64plus-core device/pif/bootrom_hle.c:48, entered from
|
||||
device/r4300/interrupt.c:445,496 and main/main.c:1875) and the CIC-NUS-6105
|
||||
challenge is answered by an algorithm rather than a stored table
|
||||
(device/pif/n64_cic_nus_6105.c:93). Nothing fills the PIF ROM window from a
|
||||
file.
|
||||
|
||||
Which 64DD IPL is used is not decided by the code. Two settings hold a path
|
||||
and both end up as the same working file dd_rom.n64: the global one, titled
|
||||
64DD IPL (J), read when the launched file is itself a disk, and a per game
|
||||
one, titled 64DD IPL, read when a cartridge is launched with a disk attached
|
||||
(CoreService.java:599-612, CoreInterface.java:142,229,455-484). The core
|
||||
offers a callback that would name the image per disk region and the front end
|
||||
leaves it null (CoreInterface.java:221, main/main.c:1082-1086), so whichever
|
||||
image sits in the slot is the one loaded. A disk is recognised only when its
|
||||
system data header matches and carries one of three region words, 0xe848d316
|
||||
for Japan, 0x2263ee56 for the United States and 0x00000000 for development
|
||||
(RomHeader.java:180-212); the word sets a country code used for the ROM
|
||||
database and cheat lookup, never for picking the IPL. Launching a bare disk
|
||||
with the global slot empty stops before the core starts
|
||||
(CoreService.java:621-623), and since disk only games still need a cartridge
|
||||
image the application feeds the m64p_test_rom.v64 asset in its place
|
||||
(CoreService.java:620,625-630). Disk content inside a .zip or .7z is unpacked to
|
||||
the working directory first (CoreInterface.java:486-518).
|
||||
|
||||
Transfer Pak carts come from four per player path settings copied into the
|
||||
working directory as playerN_gb_rom.gb and playerN_gb_ram.gb
|
||||
(CoreService.java:558-568, CoreInterface.java:196-210,430-452). The core
|
||||
rejects a cart under 32 KiB and an unknown type byte at 0x147
|
||||
(device/gb/gb_cart.c:994-1008) and fixes no name, size or hash, so neither the
|
||||
cart nor its save carries an entry here.
|
||||
|
||||
Seven data files ship inside the package and are unpacked on first start into
|
||||
the private files directory, which is also what the core is told is
|
||||
SharedDataPath (ExtractAssetsOrCleanupTask.java:63-73, SplashActivity.java:402,
|
||||
AppData.java:411-423, NativeConfigFiles.java:112). mupen64plus.ini is the ROM
|
||||
database, read by the core (main/rom.c:473-490 from api/frontend.c:106) and by
|
||||
the gallery (SplashActivity.java:447, ScanRomsFragment.java:195,
|
||||
GamePrefsActivity.java:244). mupencheat.default is copied over
|
||||
Profiles/customCheats.txt into mupencheat.txt and parsed in Java
|
||||
(SplashActivity.java:443, CheatUtils.java:88-93, GamePrefsActivity.java:618);
|
||||
the core's own cheat.c opens no file. font.ttf is reached by GLideN64 only
|
||||
after /system/fonts/DroidSans.ttf fails, which it does on current Android
|
||||
(TextDrawer.cpp:201-233,235-241, NativeConfigFiles.java:292); the core's OSD,
|
||||
the other upstream reader of that name, is absent from the Android source list
|
||||
(mupen64plus-core.mk:24-105). RiceVideoLinux.ini holds rice's per ROM settings
|
||||
(rice Config.cpp:38,933-951), Glide64mk2.ini glide64mk2's
|
||||
(glide64mk2 Main.cpp:1581-1590), and gln64.conf with gln64rom.conf gln64's
|
||||
global and per ROM settings (gln64 Config.cpp:245-252,296-300).
|
||||
|
||||
Two more assets are read straight out of the package and never unpacked:
|
||||
m64p_test_rom.v64, and GLideN64.custom.ini, whose per ROM overrides the front
|
||||
end reads itself and writes into mupen64plus.cfg (AppData.java:416-417,
|
||||
ConfigFile.java:224-230, NativeConfigFiles.java:224). GLideN64 also asks the
|
||||
core for GLideN64.custom.ini in SharedDataPath, where it was never placed, so
|
||||
that native lookup finds nothing (Config_mupenplus.cpp:325-341). The
|
||||
touchscreen skins, the shader files and the controller, touchscreen and
|
||||
emulation profile templates are used from the package the same way
|
||||
(AppData.java:412,421-423).
|
||||
|
||||
Optional content with no canonical artifact: hi-res texture packs under
|
||||
CoreConfig/UserData/mupen64plus/hires_texture, imported from a user archive
|
||||
(GlobalPrefs.java:472, NativeConfigFiles.java:268, ExtractTexturesFragment.java),
|
||||
the <ROM>_HIRESTEXTURES.htc and .hts caches the plugin builds from them, read
|
||||
back for their alpha flag (NativeConfigFiles.java:364-371), customCheats.txt,
|
||||
custom touchscreen skins and cover art (GlobalPrefs.java:484-490), and
|
||||
alp_screen.vert with alp_screen.frag, which angrylion-plus opens as working
|
||||
directory relative paths before falling back to its embedded shaders
|
||||
(angrylion-plus output/vdac.c:119-165,245-247).
|
||||
|
||||
Written rather than obtained: mupen64plus.cfg and the plugin sections in it,
|
||||
the mempak, eeprom, flashram and sram saves and 64DD disk saves opened with
|
||||
default content when absent, savestates, screenshots, the texture dump and
|
||||
cache directories, the GLideN64 shader cache and romInfoCache.cfg
|
||||
(GlobalPrefs.java:466-484, NativeConfigFiles.java:109-112,276,289).
|
||||
|
||||
One file in the tree this build never reads: cxd4's rsp_conf.bin. Its reader
|
||||
is the zilmar variant of update_conf behind #if !defined(M64P_PLUGIN_API); the
|
||||
build defines that macro (mupen64plus-rsp-cxd4.mk:8), so the variant compiled
|
||||
takes its settings from the core config API and ignores the filename it is
|
||||
handed (mupen64plus-rsp-cxd4 module.c:83-93,239,636-657).
|
||||
|
||||
files:
|
||||
- name: "64DD_IPL_JP.n64"
|
||||
aliases: ["64DD_IPL_v12_JPN.bin", "64DD_IPL.bin"]
|
||||
system: nintendo-64dd
|
||||
required: true
|
||||
validation: [signature]
|
||||
description: "64DD IPL ROM (Japanese retail)"
|
||||
note: >
|
||||
The image every commercially released disk needs, and the one the global
|
||||
setting is named for. No name is fixed by the code: the path comes from a
|
||||
document picker with no extension filter and the file is copied to
|
||||
dd_rom.n64 before the core sees it. The core reads it whole, then
|
||||
byteswaps after identifying the first word as one of 0x80270740 (z64),
|
||||
0x40072780 (n64) or 0x27804007 (v64); any other value logs an invalid IPL
|
||||
and disables 64DD. Size is not checked and no hash is computed.
|
||||
source_ref: "app/src/main/java/paulscode/android/mupen64plusae/jni/CoreService.java:599-612,622-624, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:455-484, app/src/main/java/paulscode/android/mupen64plusae/persistent/GlobalPrefs.java:417,715, mupen64plus-core/upstream/src/main/main.c:1080-1145"
|
||||
|
||||
- name: "64DD_IPL_US.n64"
|
||||
aliases: ["64DD_IPL_USA.bin", "IPL_USA.n64"]
|
||||
system: nintendo-64dd
|
||||
required: true
|
||||
validation: [signature]
|
||||
description: "64DD IPL ROM (American retail)"
|
||||
note: >
|
||||
Needed for a disk whose system data carries the US region word
|
||||
0x2263ee56, which the header reader accepts alongside the Japanese and
|
||||
development words. The front end holds one IPL path at a time and never
|
||||
branches on that region, so this image is loaded by putting it in the same
|
||||
setting. Same load path, format check and absence of size or hash
|
||||
validation as the Japanese image.
|
||||
source_ref: "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-212, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:221,455-484, mupen64plus-core/upstream/src/main/main.c:1080-1145"
|
||||
|
||||
- name: "64DD_IPL_DEV.n64"
|
||||
aliases: ["64DD_IPL_DEV.bin", "IPL_DEV.n64"]
|
||||
system: nintendo-64dd
|
||||
required: true
|
||||
validation: [signature]
|
||||
description: "64DD IPL ROM (development)"
|
||||
note: >
|
||||
Needed for a disk whose system data carries the development region word
|
||||
0x00000000, the third value the header reader accepts before giving up on
|
||||
a file as a disk. Shares the single IPL setting with the other two images.
|
||||
Same load path, format check and absence of size or hash validation.
|
||||
source_ref: "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-212, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:221,455-484, mupen64plus-core/upstream/src/main/main.c:1080-1145"
|
||||
@@ -39,6 +39,7 @@ files:
|
||||
- name: "ti83se.rom"
|
||||
system: ti-83
|
||||
description: "TI-83 Plus Silver Edition ROM dump"
|
||||
priority: 1
|
||||
required: false
|
||||
source_ref: "libnumero/libretro/libretronew.cpp:576-578"
|
||||
note: "Checked first. Recommended for largest storage capacity."
|
||||
@@ -46,6 +47,7 @@ files:
|
||||
- name: "ti83plus.rom"
|
||||
system: ti-83
|
||||
description: "TI-83 Plus ROM dump"
|
||||
priority: 2
|
||||
required: false
|
||||
source_ref: "libnumero/libretro/libretronew.cpp:583-585"
|
||||
note: "Checked second, used if ti83se.rom is missing."
|
||||
@@ -53,6 +55,7 @@ files:
|
||||
- name: "ti83.rom"
|
||||
system: ti-83
|
||||
description: "TI-83 ROM dump"
|
||||
priority: 3
|
||||
required: false
|
||||
source_ref: "libnumero/libretro/libretronew.cpp:591-593"
|
||||
note: "Checked last. Original TI-83 (non-Plus)."
|
||||
@@ -20,6 +20,7 @@ notes: >
|
||||
files:
|
||||
- name: "scph1001.bin"
|
||||
description: "SCPH-1001 (v2.2 12-04-95 A)"
|
||||
priority: 1
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 524288
|
||||
@@ -28,6 +29,7 @@ files:
|
||||
|
||||
- name: "scph5501.bin"
|
||||
description: "SCPH-5501 (v3.0 11-18-96 A)"
|
||||
priority: 2
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 524288
|
||||
@@ -36,6 +38,7 @@ files:
|
||||
|
||||
- name: "scph7001.bin"
|
||||
description: "SCPH-7001 (v4.1 12-16-97 A)"
|
||||
priority: 3
|
||||
required: false
|
||||
hle_fallback: true
|
||||
size: 524288
|
||||
|
||||
@@ -43,6 +43,7 @@ files:
|
||||
|
||||
- name: "iplrom.dat"
|
||||
path: "keropi/iplrom.dat"
|
||||
priority: 1
|
||||
size: 131072
|
||||
required: true
|
||||
note: >
|
||||
@@ -53,6 +54,7 @@ files:
|
||||
|
||||
- name: "iplrom30.dat"
|
||||
path: "keropi/iplrom30.dat"
|
||||
priority: 2
|
||||
size: 131072
|
||||
required: false
|
||||
note: >
|
||||
@@ -62,6 +64,7 @@ files:
|
||||
|
||||
- name: "iplromco.dat"
|
||||
path: "keropi/iplromco.dat"
|
||||
priority: 3
|
||||
size: 131072
|
||||
required: false
|
||||
note: >
|
||||
@@ -71,6 +74,7 @@ files:
|
||||
|
||||
- name: "iplromxv.dat"
|
||||
path: "keropi/iplromxv.dat"
|
||||
priority: 4
|
||||
size: 131072
|
||||
required: false
|
||||
note: >
|
||||
|
||||
@@ -35,6 +35,7 @@ notes: |
|
||||
files:
|
||||
- name: "saturn_bios.bin"
|
||||
system: sega-saturn
|
||||
priority: 1
|
||||
required: true
|
||||
hle_fallback: true
|
||||
note: "Primary Saturn BIOS. Any region accepted."
|
||||
@@ -43,6 +44,7 @@ files:
|
||||
- name: "sega_101.bin"
|
||||
system: sega-saturn
|
||||
region: [japan]
|
||||
priority: 2
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "Saturn BIOS v1.01 (Japan). Fallback if saturn_bios.bin missing."
|
||||
@@ -51,6 +53,7 @@ files:
|
||||
- name: "mpr-17933.bin"
|
||||
system: sega-saturn
|
||||
region: [north-america, europe]
|
||||
priority: 3
|
||||
required: false
|
||||
hle_fallback: true
|
||||
note: "Saturn BIOS v1.003 (NA/EU). Last fallback."
|
||||
|
||||
@@ -34,6 +34,7 @@ notes: |
|
||||
files:
|
||||
- name: "saturn_bios.bin"
|
||||
system: sega-saturn
|
||||
priority: 1
|
||||
required: true
|
||||
hle_fallback: true
|
||||
max_size: 524288
|
||||
@@ -44,6 +45,7 @@ files:
|
||||
- name: "sega_101.bin"
|
||||
system: sega-saturn
|
||||
region: [japan]
|
||||
priority: 2
|
||||
required: false
|
||||
hle_fallback: true
|
||||
max_size: 524288
|
||||
@@ -54,6 +56,7 @@ files:
|
||||
- name: "mpr-17933.bin"
|
||||
system: sega-saturn
|
||||
region: [north-america, europe]
|
||||
priority: 3
|
||||
required: false
|
||||
hle_fallback: true
|
||||
max_size: 524288
|
||||
|
||||
Reference in new issue
Block a user