mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-21 03:09:08 -05:00
Profiles that read two repositories, a libretro port and its upstream, now prefix each citation with source or upstream, decided by which tree carries the cited value at its pin. The emulator pages use the word to tell libretro glue, emulator code as the port carries it, and the upstream emulator apart.
202 lines
11 KiB
YAML
202 lines
11 KiB
YAML
emulator: melonDS Nightly
|
|
type: standalone
|
|
core_classification: community_fork
|
|
source: "https://github.com/rafaelvcaetano/melonDS-android"
|
|
upstream: "https://github.com/rafaelvcaetano/melonDS-android-lib"
|
|
source_commit: "c42995caff0144f37ad9791dc9bc96d82e8a6f65"
|
|
upstream_commit: "431ab4bd0003c4356e25fce89640ae1004579b9b"
|
|
profiled_date: "2026-08-12"
|
|
core_version: "2.0.1 (NIGHTLY)"
|
|
display_name: "Nintendo - DS (melonDS Nightly)"
|
|
cores: ["melonds-nightly"]
|
|
systems: [nintendo-ds, nintendo-dsi]
|
|
mode: standalone
|
|
|
|
notes: |
|
|
Android port of melonDS. The emulation code is the melonDS-android-lib
|
|
submodule, a fork of melonDS-emu/melonDS pinned at 431ab4bd and declaring
|
|
version 1.1 (CMakeLists.txt:20), and the app around it is Kotlin plus a JNI layer
|
|
under app/src/main/cpp.
|
|
|
|
Nightly is a product flavor, not a separate tree: the build dimension "build"
|
|
has prod and nightly, and nightly sets applicationIdSuffix ".nightly" and the
|
|
version suffix " (NIGHTLY)" (app/build.gradle.kts:59-61,76-79), giving the package
|
|
id me.magnum.melonds.nightly. Its source set holds an app name and a launcher
|
|
icon (app/src/nightly/res), and the gitHubNightly set points the update check
|
|
at the nightly release instead of the tagged one
|
|
(app/src/gitHubNightly/java/me/magnum/melonds/github/repositories/GitHubNightlyUpdatesRepository.kt:31).
|
|
No load path differs from the prod flavor.
|
|
|
|
Files live in two directories the user picks through the storage access
|
|
framework, stored in the preferences bios_dir and dsi_bios_dir
|
|
(app/src/main/res/xml/pref_custom_firmware.xml:29-39). Both are read by
|
|
basename, so bios7.bin, bios9.bin and firmware.bin each name a DS image in one
|
|
directory and a DSi image in the other. The accepted lengths are what tell them
|
|
apart. The app lists the expected names on screen when a directory is unset or
|
|
rejected (app/src/main/res/values/strings.xml:116,118). Entries below carry the
|
|
basename the app opens in the path, under the console identifier the picker
|
|
binds to each directory, ds and dsi
|
|
(app/src/main/res/xml/pref_custom_firmware.xml:33,39).
|
|
|
|
use_custom_bios defaults off (app/src/main/res/xml/pref_custom_firmware.xml:11,
|
|
app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:258-260). With it off, launching a ROM
|
|
skips the directory check entirely and the core substitutes FreeBIOS and a
|
|
firmware built in memory, so DS games run with nothing supplied. Booting into
|
|
the firmware menu instead of a ROM always turns it on
|
|
(app/src/main/java/me/magnum/melonds/impl/emulator/AndroidEmulatorManager.kt:247-253), as does any per-ROM console override
|
|
(app/src/main/java/me/magnum/melonds/impl/emulator/AndroidEmulatorManager.kt:239). DSi needs both directories: the DSi check
|
|
runs the DS check after its own (app/src/main/java/me/magnum/melonds/domain/services/ConfigurationDirectoryVerifier.kt:13-21).
|
|
|
|
The generated firmware keeps its Wi-Fi access point block in wfcsettings.bin,
|
|
read at boot and written back by the emulator
|
|
(app/src/main/cpp/EmulatorArgsBuilder.cpp:189,200-226, app/src/main/cpp/MelonInstance.cpp:58-62). It resolves
|
|
against context.filesDir (app/src/main/cpp/PlatformAndroid.cpp:158-163,
|
|
app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:155), app-private internal storage the
|
|
user cannot write to, and holds settings this build produced. Not listed below:
|
|
there is nothing to obtain.
|
|
|
|
Neither SD card is reachable in this build. getSDCardArgs returns nothing when
|
|
a card is disabled (app/src/main/cpp/SDCardArgsBuilder.cpp:19-20) and the JNI layer hardcodes
|
|
both the DSi card and the homebrew DLDI card to disabled
|
|
(app/src/main/cpp/MelonDSAndroidConfiguration.cpp:93-94), with no preference anywhere in the app
|
|
to turn either on, and the README lists DSi SD card support under missing features. The Action Replay database the core can parse is likewise
|
|
never built: ARDatabaseDAT is reached only from src/frontend/qt_sdl, and the
|
|
Android build sets BUILD_QT_SDL OFF and links the core alone
|
|
(app/CMakeLists.txt:8,73). Cheats are entered in the app's own database.
|
|
|
|
files:
|
|
# --- DS BIOS directory (preference bios_dir) ---
|
|
- name: bios9.bin
|
|
aliases: [NDS_Bios9.bin, nds9.bin]
|
|
path: "ds/bios9.bin"
|
|
system: nintendo-ds
|
|
config_key: "bios_dir"
|
|
description: "Nintendo DS ARM9 BIOS"
|
|
required: false
|
|
hle_fallback: true
|
|
size: 4096
|
|
crc32: 2ab23573
|
|
validation: [size, crc32]
|
|
note: >-
|
|
The picker rejects any length other than 4096. The core hashes what it
|
|
loads and keeps the result as a flag rather than refusing the image: a
|
|
CRC32 other than 2ab23573 marks the BIOS non-native, which forces direct
|
|
boot and makes SetupDirectBoot copy the Nintendo logo out of the ROM header
|
|
into the BIOS at 0x20 so DS-to-GBA communication still works. FreeBIOS is
|
|
substituted when custom BIOS is off.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:51-53, 100-113, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:149, source app/src/main/cpp/EmulatorArgsBuilder.cpp:19-40, upstream src/MemConstants.h:30-36, upstream src/NDS.cpp:807-811, upstream src/NDS.cpp:277-296, 303-310"
|
|
|
|
- name: bios7.bin
|
|
aliases: [NDS_Bios7.bin, nds7.bin]
|
|
path: "ds/bios7.bin"
|
|
system: nintendo-ds
|
|
config_key: "bios_dir"
|
|
description: "Nintendo DS ARM7 BIOS"
|
|
required: false
|
|
hle_fallback: true
|
|
size: 16384
|
|
crc32: 1280f0d5
|
|
validation: [size, crc32]
|
|
note: >-
|
|
The picker rejects any length other than 16384. A CRC32 other than
|
|
1280f0d5 marks the BIOS non-native, which forces direct boot and leaves
|
|
Key1_KeyBuf zeroed instead of seeding it from offset 0x0030, so cartridge
|
|
Key1 encryption is unavailable. FreeBIOS is substituted when custom BIOS is
|
|
off.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:47-49, 100-113, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:148, source app/src/main/cpp/EmulatorArgsBuilder.cpp:42-62, upstream src/MemConstants.h:30-36, upstream src/NDS.cpp:801-805, upstream src/NDSCart.cpp:138-151"
|
|
|
|
- name: firmware.bin
|
|
aliases: [dsfirmware.bin]
|
|
path: "ds/firmware.bin"
|
|
system: nintendo-ds
|
|
config_key: "bios_dir"
|
|
description: "Nintendo DS firmware image"
|
|
required: false
|
|
hle_fallback: true
|
|
size: [131072, 262144, 524288]
|
|
validation: [size]
|
|
note: >-
|
|
Three lengths are accepted and everything else is rejected. Loaded only in
|
|
DS mode. DSi mode reads the firmware from the DSi directory but still needs
|
|
this file present, because the DSi check re-runs the DS directory check.
|
|
Nickname, message, language, colour, birthday and MAC are written into the
|
|
image before it reaches the core. A firmware the core reports as
|
|
non-bootable forces direct boot. When custom BIOS is off the core builds a
|
|
firmware in memory instead.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:55-70, 120, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:150, source app/src/main/cpp/EmulatorArgsBuilder.cpp:93-185, 289-337, upstream src/NDS.cpp:286-288"
|
|
|
|
# --- DSi BIOS directory (preference dsi_bios_dir) ---
|
|
- name: dsi_bios9.bin
|
|
aliases: [biosdsi9.bin]
|
|
path: "dsi/bios9.bin"
|
|
system: nintendo-dsi
|
|
config_key: "dsi_bios_dir"
|
|
description: "Nintendo DSi ARM9i BIOS"
|
|
required: true
|
|
size: 65536
|
|
validation: [size]
|
|
note: >-
|
|
Opened as bios9.bin inside the DSi directory. The picker rejects any length
|
|
other than 65536, and no hash is computed on it. A load failure aborts the
|
|
launch. DSi boot copies four blocks out of it
|
|
into ITCM from 0x87F4, 0x9920, 0x99A0 and 0xA9E8, and cartridge Key1 in DSi
|
|
mode is seeded from 0x99A0. With the boot screen off, the reset vector is
|
|
overwritten in memory with 0xEAFFFFFE.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:76-78, 100-113, 124, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:152, source app/src/main/cpp/EmulatorArgsBuilder.cpp:235-260, 475-477, upstream src/DSi.cpp:950-955, upstream src/NDSCart.cpp:127-134"
|
|
|
|
- name: dsi_bios7.bin
|
|
aliases: [biosdsi7.bin]
|
|
path: "dsi/bios7.bin"
|
|
system: nintendo-dsi
|
|
config_key: "dsi_bios_dir"
|
|
description: "Nintendo DSi ARM7i BIOS"
|
|
required: true
|
|
size: 65536
|
|
validation: [size]
|
|
note: >-
|
|
Opened as bios7.bin inside the DSi directory. The picker rejects any length
|
|
other than 65536, and no hash is computed on it. A load failure aborts the
|
|
launch. Offset 0x8308 holds the ES key used
|
|
to derive the NAND AES keys, so the NAND cannot be opened without this
|
|
exact image. DSi boot copies four blocks out of it from 0x8188, 0xB5D8,
|
|
0xC6D0 and 0xD718. With the boot screen off, the reset vector is
|
|
overwritten in memory with 0xEAFFFFFE.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:72-74, 100-113, 123, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:151, source app/src/main/cpp/EmulatorArgsBuilder.cpp:262-287, 347, 471-473, upstream src/DSi.cpp:959-962"
|
|
|
|
- name: dsi_firmware.bin
|
|
aliases: [dsifirmware.bin]
|
|
path: "dsi/firmware.bin"
|
|
system: nintendo-dsi
|
|
config_key: "dsi_bios_dir"
|
|
description: "Nintendo DSi firmware image"
|
|
required: true
|
|
size: 131072
|
|
validation: [size]
|
|
note: >-
|
|
Opened as firmware.bin inside the DSi directory, where only 131072 is
|
|
accepted against three accepted lengths in the DS directory. Read in DSi
|
|
mode in place of the DS firmware, and customised the same way. The core has
|
|
no generator for DSi firmware, so nothing stands in for it.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:80-93, 125, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:153, source app/src/main/cpp/EmulatorArgsBuilder.cpp:289-337"
|
|
|
|
- name: dsi_nand.bin
|
|
path: "dsi/nand.bin"
|
|
agnostic: true
|
|
system: nintendo-dsi
|
|
config_key: "dsi_bios_dir"
|
|
description: "Nintendo DSi NAND dump"
|
|
required: true
|
|
storage: large_file
|
|
validation: [existence]
|
|
note: >-
|
|
Opened as nand.bin inside the DSi directory. The only test the app makes is
|
|
that the entry is a file: no length, no hash. It is opened for read and
|
|
write and must already exist. The core
|
|
wants the nocash footer "DSi eMMC CID/CPU" at 0x40 before the end, falling
|
|
back to 0x000FF800 for images cut short by external tools, and reads the
|
|
eMMC CID and console ID from there to derive the FAT and ES keys with the
|
|
key at 0x8308 of the ARM7i BIOS. Touchscreen calibration is rewritten in
|
|
the mounted user data on every launch. Any regional dump works. A DSiWare
|
|
title is refused unless it is already installed in this image.
|
|
source_ref: "source app/src/main/java/me/magnum/melonds/impl/FileSystemConfigurationDirectoryVerifier.kt:95-98, 126, source app/src/main/java/me/magnum/melonds/impl/SharedPreferencesSettingsRepository.kt:154, source app/src/main/cpp/EmulatorArgsBuilder.cpp:339-420, 479-481, source app/src/main/java/me/magnum/melonds/domain/services/EmulatorLaunchPreconditionChecker.kt:47-70, upstream src/DSi_NAND.cpp:43-70"
|