From 92b2a1a4982da6e16618adde2021c1f77267caa7 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Sun, 4 Oct 2026 14:58:55 +0200 Subject: [PATCH] chore: update profiles to current upstream pins --- emulators/cemu.yml | 845 +++++++++++++++++++++--------- emulators/dingooemu.yml | 107 +++- emulators/dosbox-x.yml | 73 +-- emulators/eka2l1.yml | 849 +++++++++++++++++++++++++++++-- emulators/gearcoleco.yml | 96 +++- emulators/geargrafx.yml | 106 ++-- emulators/hatari.yml | 119 +++-- emulators/hatarib.yml | 60 ++- emulators/higan_sfc.yml | 215 +++++--- emulators/higan_sfc_balanced.yml | 176 +++++-- emulators/idtech4a++.yml | 18 +- emulators/jollycv.yml | 83 +-- emulators/mesence.yml | 486 +++++++++++++----- emulators/pokketstation.yml | 20 +- emulators/pom2.yml | 291 ++++++----- emulators/race.yml | 47 +- emulators/ruffle.yml | 72 +-- emulators/supermodel.yml | 145 +++++- emulators/xemu.yml | 207 +++++--- emulators/xendroid.yml | 50 +- emulators/xenia-edge.yml | 41 +- emulators/zesarux.yml | 236 +++++---- 22 files changed, 3186 insertions(+), 1156 deletions(-) diff --git a/emulators/cemu.yml b/emulators/cemu.yml index a4b194f4..4ec9d762 100644 --- a/emulators/cemu.yml +++ b/emulators/cemu.yml @@ -1,406 +1,777 @@ emulator: Cemu -type: standalone -source: "https://github.com/cemu-project/Cemu" +type: standalone + libretro +core_classification: community_fork +source: "https://git.libretro.com/libretro/cemu-libretro" +source_mirror: "https://github.com/WizzardSK/cemu-libretro" +upstream: "https://github.com/cemu-project/Cemu" logo: "https://raw.githubusercontent.com/cemu-project/Cemu/main/dist/linux/info.cemu.Cemu.png" -profiled_date: "2026-03-18" -source_commit: "51250c02dea9ec9333e4725a17c0eac705128ff0" +profiled_date: "2026-09-17" +source_commit: "575236a302d399a217fb0942aaaa231538b48134" +upstream_commit: "3310f3b8b184d64a62b89fd59088c799432badf5" core_version: "2.6" -display_name: "Cemu (Wii U)" +display_name: "Nintendo - Wii U (Cemu)" cores: - cemu systems: [nintendo-wiiu] -analysis_date: "2026-03-17" -analysis_commit: "HEAD (depth=1)" -# keys.txt - disc decryption keys (AES-128, one per line, hex format) -# Located in Cemu user data root directory -# otp.bin and seeprom.bin - console-specific dumps for online features -# MLC path contains firmware titles under sys/title/ +data_directories: + - ref: cemu-gameprofiles + destination: "Cemu/gameProfiles/default" + source_ref: "src/Cafe/GameProfile/GameProfile.cpp:181-195, src/libretro/CemuLibretro.cpp:1249-1257" + - ref: cemu-graphic-packs + destination: "Cemu/graphicPacks/downloadedGraphicPacks" + source_ref: "src/Cafe/GraphicPack/GraphicPack2.cpp:96-111, src/libretro/CemuLibretro.cpp:3334-3349" + +notes: | + Wii U emulator. The libretro core is a fork of the whole Cemu tree, kept + merged with upstream, with the frontend glue in src/libretro/. The + upstream_commit above is the last merge base. It builds without wxWidgets and + ships as a bare shared object on six buildbot targets: linux-x86_64, + windows-x86_64, osx-x86_64, osx-arm64, android-arm64-v8a, android-x86_64. + Nothing that the standalone distribution carries next to the executable + (resources/, gameProfiles/default/) comes with the core. + ref: CMakeLists.txt:221-232, src/CMakeLists.txt:71-80, + .github/workflows/libretro.yml:1-8 + + Path model. Cemu resolves every file through four roots: the user data + path (keys.txt, otp.bin, seeprom.bin, cafeLibs/, graphicPacks/, + shareddata.bin, resources/miiverse/, the default mlc01), the config path + (settings.xml, network_services.xml, controllerProfiles/, per-title + gameProfiles/), the data path (resources/sharedFonts/, gameProfiles/default/) + and the MLC. The libretro core points user data, config, cache and data at + /Cemu, and puts the MLC at /Cemu/mlc01 unless + settings.xml under /Cemu names another mlc_path. The Cemu + subdirectory is not doubled when the frontend already hands over a + directory of that name (saves sorted per core). Standalone Cemu uses the + portable directory next to the executable when it exists, otherwise + %APPDATA%/Cemu on Windows, XDG_DATA_HOME/Cemu and XDG_CONFIG_HOME/Cemu on + Linux, and the MLC defaults to /mlc01. path: entries below are + the libretro destination under the system directory; standalone_path: is + relative to the Cemu user data directory. + ref: src/libretro/CemuLibretro.cpp:1197-1257, + src/libretro/CemuLibretro.cpp:2590-2601, + src/gui/wxgui/CemuApp.cpp:90-123, src/gui/wxgui/CemuApp.cpp:127-171, + src/config/ActiveSettings.cpp:295-321 + + keys.txt is read once from the user data path. A missing file is created + with a comment header and an example key; each line is stripped of + comments, spaces, dashes and underscores and must then be 32 hex + characters, otherwise an error is raised for that line. FindDiscKey tries + every key in order against the encrypted partition header of a .wud/.wux + and falls back to a 16-byte .key next to the image. The libretro + core asks that question before setting up any renderer and refuses the + load with a message naming keys.txt when no key matches, so an encrypted + disc image does not start without it. .wua archives, .rpx and NUS + directories are not encrypted with a disc key and load without the file. + ref: src/Cafe/Filesystem/FST/KeyCache.cpp:64-136, + src/Cafe/Filesystem/FST/FST.cpp:192-246, + src/libretro/CemuLibretro.cpp:3862-3905 + + Shared fonts. LoadSharedData runs at every title start and looks for the + four fonts of title 0005001b-10042400 in the MLC first, then under + resources/sharedFonts/ of the data path. All four must be found in one + place or the other, otherwise none is loaded and the code tries + shareddata.bin, a 32 MiB dump of the shared data region, read from the + user data path straight into 0xF8000000. With nothing loaded a title that + calls OSGetSharedData receives the placeholder font compiled into the + binary, decompressed from a zlib array, so games run but with one Latin + face standing in for the CJK sets. The four files in resources/sharedFonts/ + of the source tree are Noto Sans CJK Medium faces under the console names, + not dumps: the standalone distribution ships them, the libretro core does + not and looks under /Cemu/resources/sharedFonts/. + ref: src/Cafe/CafeSystem.cpp:283-362, src/Cafe/CafeSystem.cpp:875-879, + src/Cafe/OS/libs/coreinit/coreinit.cpp:137-184, + src/resource/CafeDefaultFont.cpp:2562-2569 + + Online files. iosuCrypto_init reads otp.bin and seeprom.bin from the user + data path and rejects any size other than 1024 and 512 bytes; without a + valid OTP no certificate is loaded and online mode is off. The certificate + table names 8 client certificates with their AES-encrypted RSA keys and 39 + CA certificates, all under sys/title/0005001b/10054000/content/ of the + MLC; olive and wood appear twice under distinct ids, so 7 distinct client + pairs and 39 CA files are read. A key file must be a non-empty multiple of + 16 bytes and is decrypted with the key at OTP offset 0x120. Online mode is + only enabled when every file of the table is present. For the libretro + core these live in the save directory, not the system directory. + ref: src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330, + src/Cafe/IOSU/legacy/iosu_crypto.cpp:463-606, + src/Cafe/IOSU/legacy/iosu_crypto.cpp:608-655, + src/config/ActiveSettings.cpp:50-55, src/Cafe/Account/Account.cpp:422-458 + + cafeLibs. When a title depends on a module, the loader first looks for + .rpl in cafeLibs/ under the user data path and loads it in place + of Cemu's own implementation, as long as the game profile does not set + loadSharedLibraries to false (the default is true). Any Cafe OS module can + be placed there; the code names snd_user.rpl and snduser2.rpl as the ones + to dump when a title uses an unsupported audio effect, and gates + swkbd.rpl and erreula.rpl on the presence of their data packs in the MLC + (swkbd.pack of title 0005001b-1004f000, erreula.pack of 0005001b-10051000), + falling back to the built-in applets when the pack is absent. + ref: src/Cafe/OS/RPL/rpl.cpp:1923-1933, src/Cafe/OS/RPL/rpl.cpp:1965-1985, + src/Cafe/OS/RPL/rpl.cpp:2136-2148, src/config/ActiveSettings.cpp:57-60, + src/Cafe/OS/libs/snd_user/snd_user.cpp:1220-1227 + + Data directories. A title's game profile is read from gameProfiles/.ini under the config path, then from gameProfiles/default/<title + id>.ini under the data path; upstream ships 236 of them in + bin/gameProfiles/default and the libretro data path is <system_dir>/Cemu. + Graphic packs are every directory holding a rules.txt under + graphicPacks/ of the user data path; the standalone downloader extracts + the cemu_graphic_packs release into graphicPacks/downloadedGraphicPacks/, + and the libretro core enables the packs flagged default on load. Miiverse + posts for The Wind Waker HD are served from resources/miiverse/OfflineDB.zar + under the user data path when the Nintendo network service is selected. + ref: src/Cafe/GameProfile/GameProfile.cpp:181-195, + src/Cafe/GraphicPack/GraphicPack2.cpp:96-111, + src/gui/wxgui/DownloadGraphicPacksWindow.cpp:133, + src/gui/wxgui/DownloadGraphicPacksWindow.cpp:234-238, + src/libretro/CemuLibretro.cpp:3334-3349, + src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:21-31, + src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:124-125, + src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp:242-248 + + Generated, not collected: settings.xml, network_services.xml (custom + service URLs, read when present), controllerProfiles/, title_list_cache.xml + (disabled in the core), the shader caches, log.txt, sdcard/, dump/, and + the language.txt and country.txt the wx frontend writes into title + 0005001b-1005c000 of the MLC on first run. title.tmd, title.tik and + bootSound.btsnd belong to each title's own dump. + ref: src/main.cpp:129-192, src/config/NetworkSettings.cpp:10-14, + src/gui/wxgui/CemuApp.cpp:580-606, + src/Cafe/HW/Latte/Core/LatteShaderCache.cpp:238 files: - # --- Disc decryption keys --- - - name: "keys.txt" + - name: keys.txt + path: Cemu/keys.txt + standalone_path: keys.txt required: true - path: "" # Cemu root / user data directory - size: null - note: "AES-128 disc keys for WUD/WUX decryption, one 32-char hex key per line" - source_ref: "src/Cafe/Filesystem/FST/KeyCache.cpp:63" + description: "Disc title keys, one AES-128 key per line" + note: >- + Tried in file order against the encrypted partition header of a .wud + or .wux image, with a 16-byte <image>.key beside the image as the last + resort. Created with a template when absent. The libretro core + refuses to load an encrypted image whose key is not in it. + source_ref: "src/Cafe/Filesystem/FST/KeyCache.cpp:64-136, src/Cafe/Filesystem/FST/FST.cpp:192-246, src/libretro/CemuLibretro.cpp:3862-3905" - # --- Console-specific dumps (online play) --- - - name: "otp.bin" + - name: otp.bin + path: Cemu/otp.bin + standalone_path: otp.bin required: false - path: "" # Cemu root / user data directory size: 1024 - note: "Wii U OTP dump, required for online mode and SSL certificate generation" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:556" + validation: [size] + description: "Wii U OTP dump" + note: >- + Read into the OTP mirror at init; any other size is rejected and + online mode stays off. Its keys decrypt the client certificate keys + and sign the device certificate. + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:553-577, src/Cafe/IOSU/legacy/iosu_crypto.cpp:619-626" - - name: "seeprom.bin" + - name: seeprom.bin + path: Cemu/seeprom.bin + standalone_path: seeprom.bin required: false - path: "" # Cemu root / user data directory size: 512 - note: "Wii U SEEPROM dump, required for online mode and console region detection" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:579" + validation: [size] + description: "Wii U SEEPROM dump" + note: >- + Read into the SEEPROM mirror at init; any other size is rejected and + online mode stays off. + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:579-600, src/Cafe/IOSU/legacy/iosu_crypto.cpp:627-632" - # --- Shared system fonts (title 0005001b-10042400) --- - # Fallback: Cemu also checks resources/sharedFonts/ in its data directory - - name: "CafeCn.ttf" - required: true - path: "mlc01/sys/title/0005001b/10042400/content/" - note: "Shared font - Chinese" - source_ref: "src/Cafe/CafeSystem.cpp:289" - - - name: "CafeKr.ttf" - required: true - path: "mlc01/sys/title/0005001b/10042400/content/" - note: "Shared font - Korean" - source_ref: "src/Cafe/CafeSystem.cpp:290" - - - name: "CafeStd.ttf" - required: true - path: "mlc01/sys/title/0005001b/10042400/content/" - note: "Shared font - Standard (Latin/Japanese)" - source_ref: "src/Cafe/CafeSystem.cpp:291" - - - name: "CafeTw.ttf" - required: true - path: "mlc01/sys/title/0005001b/10042400/content/" - note: "Shared font - Traditional Chinese (Taiwan)" - source_ref: "src/Cafe/CafeSystem.cpp:292" - - # --- SSL client certificates (title 0005001b-10054000) --- - # Required for online features, loaded only when otp.bin is present - - name: "WIIU_COMMON_1_CERT.der" + # Shared fonts, title 0005001b-10042400. Two slots per font: the console + # dump in the MLC, read first, and the replacement Cemu ships in + # resources/sharedFonts/ of its data path, read when the MLC has none. + - name: CafeCn.ttf + path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeCn.ttf + standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeCn.ttf + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client certificate - common" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471" + hle_fallback: true + description: "Shared font, Simplified Chinese, console dump" + note: >- + The four fonts are loaded as a set: one missing in both locations + drops the whole set to shareddata.bin, then to the placeholder font + compiled into the binary. + source_ref: "src/Cafe/CafeSystem.cpp:289, src/Cafe/CafeSystem.cpp:297-353" - - name: "WIIU_COMMON_1_RSA_KEY.aes" + - name: CafeKr.ttf + path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeKr.ttf + standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeKr.ttf + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client key - common (AES-encrypted)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471" + hle_fallback: true + description: "Shared font, Korean, console dump" + source_ref: "src/Cafe/CafeSystem.cpp:290, src/Cafe/CafeSystem.cpp:297-353" - - name: "WIIU_ACCOUNT_1_CERT.der" + - name: CafeStd.ttf + path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeStd.ttf + standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeStd.ttf + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client certificate - account" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472" + hle_fallback: true + description: "Shared font, standard Latin and Japanese, console dump" + source_ref: "src/Cafe/CafeSystem.cpp:291, src/Cafe/CafeSystem.cpp:297-353" - - name: "WIIU_ACCOUNT_1_RSA_KEY.aes" + - name: CafeTw.ttf + path: Cemu/mlc01/sys/title/0005001b/10042400/content/CafeTw.ttf + standalone_path: mlc01/sys/title/0005001b/10042400/content/CafeTw.ttf + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client key - account (AES-encrypted)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472" + hle_fallback: true + description: "Shared font, Traditional Chinese, console dump" + source_ref: "src/Cafe/CafeSystem.cpp:292, src/Cafe/CafeSystem.cpp:297-353" - - name: "WIIU_OLIVE_1_CERT.der" + - name: CafeCn.ttf + path: Cemu/resources/sharedFonts/CafeCn.ttf + standalone_path: resources/sharedFonts/CafeCn.ttf required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client certificate - olive (Miiverse)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473" + bundled: true + hle_fallback: true + size: 9664448 + sha1: 2d95227b9b3eaf1c74d9293ecd0d190ec7ffbbe3 + description: "Shared font replacement, Noto Sans SC Medium" + note: >- + Carried in bin/resources/sharedFonts/ of the source tree and installed + next to the standalone executable. Read only when the MLC copy is + absent. The libretro core ships without it and looks under + <system_dir>/Cemu/resources/sharedFonts/. + source_ref: "src/Cafe/CafeSystem.cpp:289, src/Cafe/CafeSystem.cpp:326-331, bin/resources/sharedFonts/CafeCn.ttf" - - name: "WIIU_OLIVE_1_RSA_KEY.aes" + - name: CafeKr.ttf + path: Cemu/resources/sharedFonts/CafeKr.ttf + standalone_path: resources/sharedFonts/CafeKr.ttf required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client key - olive (AES-encrypted)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473" + bundled: true + hle_fallback: true + size: 5626464 + sha1: f0ef38fcc6133c24f4f38ff9b5c06b37e970d3cc + description: "Shared font replacement, Noto Sans KR Medium" + source_ref: "src/Cafe/CafeSystem.cpp:290, src/Cafe/CafeSystem.cpp:326-331, bin/resources/sharedFonts/CafeKr.ttf" - - name: "WIIU_VINO_1_CERT.der" + - name: CafeStd.ttf + path: Cemu/resources/sharedFonts/CafeStd.ttf + standalone_path: resources/sharedFonts/CafeStd.ttf required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client certificate - vino" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474" + bundled: true + hle_fallback: true + size: 5363768 + sha1: da0d4bcc3b13339179bee946eba16adfd731b4d3 + description: "Shared font replacement, Noto Sans JP Medium" + source_ref: "src/Cafe/CafeSystem.cpp:291, src/Cafe/CafeSystem.cpp:326-331, bin/resources/sharedFonts/CafeStd.ttf" - - name: "WIIU_VINO_1_RSA_KEY.aes" + - name: CafeTw.ttf + path: Cemu/resources/sharedFonts/CafeTw.ttf + standalone_path: resources/sharedFonts/CafeTw.ttf required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client key - vino (AES-encrypted)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474" + bundled: true + hle_fallback: true + size: 6593548 + sha1: 8ec796192ebc710f23ab6bd55453cae523b70444 + description: "Shared font replacement, Noto Sans TC Medium" + source_ref: "src/Cafe/CafeSystem.cpp:292, src/Cafe/CafeSystem.cpp:326-331, bin/resources/sharedFonts/CafeTw.ttf" - - name: "WIIU_WOOD_1_CERT.der" + - name: shareddata.bin + path: Cemu/shareddata.bin + standalone_path: shareddata.bin required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client certificate - wood" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475" + hle_fallback: true + description: "Dump of the shared data region of a console" + note: >- + Read only when the four shared fonts are not all present: 32 MiB + copied from the user data path to 0xF8000000, table of font entries + included. Nothing about it is validated. + source_ref: "src/Cafe/CafeSystem.cpp:354-362" - - name: "WIIU_WOOD_1_RSA_KEY.aes" + - name: snd_user.rpl + path: Cemu/cafeLibs/snd_user.rpl + standalone_path: cafeLibs/snd_user.rpl required: false - path: "mlc01/sys/title/0005001b/10054000/content/ccerts/" - note: "Nintendo client key - wood (AES-encrypted)" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475" + hle_fallback: true + description: "Cafe OS sound library" + note: >- + Loaded from cafeLibs/ in place of the built-in module whenever a title + depends on snd_user, unless the game profile turns shared libraries + off. Named by the code as the module to dump when a title uses an + audio effect the built-in one does not implement. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1965-1985, src/Cafe/OS/RPL/rpl.cpp:2136-2148, src/Cafe/OS/libs/snd_user/snd_user.cpp:1220-1227" - # --- SSL CA certificates (title 0005001b-10054000) --- - # Nintendo CA certs - - name: "CACERT_NINTENDO_CA.der" + - name: snduser2.rpl + path: Cemu/cafeLibs/snduser2.rpl + standalone_path: cafeLibs/snduser2.rpl + required: false + hle_fallback: true + description: "Cafe OS sound library, second generation" + note: >- + Same mechanism as snd_user.rpl, for titles that depend on snduser2. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1965-1985, src/Cafe/OS/RPL/rpl.cpp:2136-2148, src/Cafe/OS/libs/snd_user/snd_user.cpp:1220-1227" + + - name: swkbd.rpl + path: Cemu/cafeLibs/swkbd.rpl + standalone_path: cafeLibs/swkbd.rpl + required: false + hle_fallback: true + description: "Cafe OS software keyboard applet library" + note: >- + Loaded from cafeLibs/ only when swkbd.pack is present in the MLC; + otherwise the built-in keyboard is used and the file is ignored. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1923-1927, src/Cafe/OS/RPL/rpl.cpp:1972-1982" + + - name: erreula.rpl + path: Cemu/cafeLibs/erreula.rpl + standalone_path: cafeLibs/erreula.rpl + required: false + hle_fallback: true + description: "Cafe OS error viewer applet library" + note: >- + Loaded from cafeLibs/ only when erreula.pack is present in the MLC; + otherwise the built-in error viewer is used and the file is ignored. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1929-1933, src/Cafe/OS/RPL/rpl.cpp:1972-1982" + + - name: swkbd.pack + path: Cemu/mlc01/sys/title/0005001b/1004f000/content/00/swkbd/swkbd.pack + standalone_path: mlc01/sys/title/0005001b/1004f000/content/00/swkbd/swkbd.pack + load_from: save_dir + required: false + description: "Software keyboard applet data, title 0005001b-1004f000" + note: >- + Its presence in the MLC is what lets a swkbd.rpl from cafeLibs/ be + used; the applet then reads it through the Cafe filesystem. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1923-1927" + + - name: erreula.pack + path: Cemu/mlc01/sys/title/0005001b/10051000/content/00/erreula/erreula.pack + standalone_path: mlc01/sys/title/0005001b/10051000/content/00/erreula/erreula.pack + load_from: save_dir + required: false + description: "Error viewer applet data, title 0005001b-10051000" + note: >- + Its presence in the MLC is what lets an erreula.rpl from cafeLibs/ be + used; the applet then reads it through the Cafe filesystem. + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1929-1933" + + - name: OfflineDB.zar + path: Cemu/resources/miiverse/OfflineDB.zar + standalone_path: resources/miiverse/OfflineDB.zar + required: false + unsourceable: "archive of Wind Waker HD Miiverse posts in a layout only this reader describes, never published with any Cemu release" + description: "Archived Miiverse posts for The Wind Waker HD" + note: >- + ZArchive opened lazily from the user data path when a title running + with the Nintendo network service asks for posts. The reader serves + PostList_WindWakerHD.xml, memo/<post id> and image/<post id>.jpg for + the three Wind Waker HD title ids and nothing for any other title. + Without it the post list is empty. + source_ref: "src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:21-31, src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:67-72, src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:114-135, src/Cafe/OS/libs/nn_olv/nn_olv_OfflineDB.cpp:186-197, src/Cafe/OS/libs/nn_olv/nn_olv_InitializeTypes.cpp:242-248" + + # Client certificates, title 0005001b-10054000. Each pair is read from the + # MLC and the .aes key is decrypted with the OTP key at offset 0x120. + - name: WIIU_COMMON_1_CERT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_CERT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_CERT.der + load_from: save_dir + required: false + description: "Client certificate, common" + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471, src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" + + - name: WIIU_COMMON_1_RSA_KEY.aes + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_RSA_KEY.aes + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_COMMON_1_RSA_KEY.aes + load_from: save_dir + required: false + description: "Client key, common, AES-CBC encrypted" + note: "Must be a non-empty multiple of 16 bytes." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471, src/Cafe/IOSU/legacy/iosu_crypto.cpp:312-326" + + - name: WIIU_ACCOUNT_1_CERT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_CERT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_CERT.der + load_from: save_dir + required: false + description: "Client certificate, account" + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472, src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" + + - name: WIIU_ACCOUNT_1_RSA_KEY.aes + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_RSA_KEY.aes + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_ACCOUNT_1_RSA_KEY.aes + load_from: save_dir + required: false + description: "Client key, account, AES-CBC encrypted" + note: "Must be a non-empty multiple of 16 bytes." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472, src/Cafe/IOSU/legacy/iosu_crypto.cpp:312-326" + + - name: WIIU_OLIVE_1_CERT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_CERT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_CERT.der + load_from: save_dir + required: false + description: "Client certificate, olive (Miiverse)" + note: "Registered twice, under ids 4 and 7." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473, src/Cafe/IOSU/legacy/iosu_crypto.cpp:476, src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" + + - name: WIIU_OLIVE_1_RSA_KEY.aes + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_RSA_KEY.aes + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_OLIVE_1_RSA_KEY.aes + load_from: save_dir + required: false + description: "Client key, olive, AES-CBC encrypted" + note: "Must be a non-empty multiple of 16 bytes." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473, src/Cafe/IOSU/legacy/iosu_crypto.cpp:476, src/Cafe/IOSU/legacy/iosu_crypto.cpp:312-326" + + - name: WIIU_VINO_1_CERT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_CERT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_CERT.der + load_from: save_dir + required: false + description: "Client certificate, vino (Nintendo TVii)" + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474, src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" + + - name: WIIU_VINO_1_RSA_KEY.aes + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_RSA_KEY.aes + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_VINO_1_RSA_KEY.aes + load_from: save_dir + required: false + description: "Client key, vino, AES-CBC encrypted" + note: "Must be a non-empty multiple of 16 bytes." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474, src/Cafe/IOSU/legacy/iosu_crypto.cpp:312-326" + + - name: WIIU_WOOD_1_CERT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_CERT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_CERT.der + load_from: save_dir + required: false + description: "Client certificate, wood (eShop)" + note: "Registered twice, under ids 6 and 8." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475, src/Cafe/IOSU/legacy/iosu_crypto.cpp:477, src/Cafe/IOSU/legacy/iosu_crypto.cpp:303-330" + + - name: WIIU_WOOD_1_RSA_KEY.aes + path: Cemu/mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_RSA_KEY.aes + standalone_path: mlc01/sys/title/0005001b/10054000/content/ccerts/WIIU_WOOD_1_RSA_KEY.aes + load_from: save_dir + required: false + description: "Client key, wood, AES-CBC encrypted" + note: "Must be a non-empty multiple of 16 bytes." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475, src/Cafe/IOSU/legacy/iosu_crypto.cpp:477, src/Cafe/IOSU/legacy/iosu_crypto.cpp:312-326" + + # CA certificates, same title, scerts/. Parsed as DER X.509 and added to + # the SSL store; every one of them must load for online mode. + - name: CACERT_NINTENDO_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:480" - - name: "CACERT_NINTENDO_CA_G2.der" + - name: CACERT_NINTENDO_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:481" - - name: "CACERT_NINTENDO_CA_G3.der" + - name: CACERT_NINTENDO_CA_G3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CA_G3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:482" - - name: "CACERT_NINTENDO_CLASS2_CA.der" + - name: CACERT_NINTENDO_CLASS2_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:483" - - name: "CACERT_NINTENDO_CLASS2_CA_G2.der" + - name: CACERT_NINTENDO_CLASS2_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:484" - - name: "CACERT_NINTENDO_CLASS2_CA_G3.der" + - name: CACERT_NINTENDO_CLASS2_CA_G3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CACERT_NINTENDO_CLASS2_CA_G3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:485" - # Commercial CA certs - - name: "BALTIMORE_CYBERTRUST_ROOT_CA.der" + - name: BALTIMORE_CYBERTRUST_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/BALTIMORE_CYBERTRUST_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/BALTIMORE_CYBERTRUST_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:488" - - name: "CYBERTRUST_GLOBAL_ROOT_CA.der" + - name: CYBERTRUST_GLOBAL_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/CYBERTRUST_GLOBAL_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/CYBERTRUST_GLOBAL_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:489" - - name: "VERIZON_GLOBAL_ROOT_CA.der" + - name: VERIZON_GLOBAL_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERIZON_GLOBAL_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERIZON_GLOBAL_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:490" - - name: "GLOBALSIGN_ROOT_CA.der" + - name: GLOBALSIGN_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:491" - - name: "GLOBALSIGN_ROOT_CA_R2.der" + - name: GLOBALSIGN_ROOT_CA_R2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:492" - - name: "GLOBALSIGN_ROOT_CA_R3.der" + - name: GLOBALSIGN_ROOT_CA_R3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GLOBALSIGN_ROOT_CA_R3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:493" - - name: "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der" + - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:494" - - name: "VERISIGN_UNIVERSAL_ROOT_CA.der" + - name: VERISIGN_UNIVERSAL_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_UNIVERSAL_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_UNIVERSAL_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:495" - - name: "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der" + - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:496" - - name: "THAWTE_PRIMARY_ROOT_CA_G3.der" + - name: THAWTE_PRIMARY_ROOT_CA_G3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA_G3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA_G3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:497" - - name: "THAWTE_PRIMARY_ROOT_CA.der" + - name: THAWTE_PRIMARY_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PRIMARY_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:498" - - name: "GEOTRUST_GLOBAL_CA.der" + - name: GEOTRUST_GLOBAL_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:499" - - name: "GEOTRUST_GLOBAL_CA2.der" + - name: GEOTRUST_GLOBAL_CA2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_GLOBAL_CA2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:500" - - name: "GEOTRUST_PRIMARY_CA.der" + - name: GEOTRUST_PRIMARY_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:501" - - name: "GEOTRUST_PRIMARY_CA_G3.der" + - name: GEOTRUST_PRIMARY_CA_G3.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA_G3.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GEOTRUST_PRIMARY_CA_G3.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:502" - - name: "ADDTRUST_EXT_CA_ROOT.der" + - name: ADDTRUST_EXT_CA_ROOT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ADDTRUST_EXT_CA_ROOT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ADDTRUST_EXT_CA_ROOT.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:503" - - name: "COMODO_CA.der" + - name: COMODO_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/COMODO_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/COMODO_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:504" - - name: "UTN_DATACORP_SGC_CA.der" + - name: UTN_DATACORP_SGC_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/UTN_DATACORP_SGC_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/UTN_DATACORP_SGC_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:505" - - name: "UTN_USERFIRST_HARDWARE_CA.der" + - name: UTN_USERFIRST_HARDWARE_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/UTN_USERFIRST_HARDWARE_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/UTN_USERFIRST_HARDWARE_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:506" - - name: "DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der" + - name: DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:507" - - name: "DIGICERT_ASSURED_ID_ROOT_CA.der" + - name: DIGICERT_ASSURED_ID_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:508" - - name: "DIGICERT_GLOBAL_ROOT_CA.der" + - name: DIGICERT_GLOBAL_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:509" - - name: "GTE_CYBERTRUST_GLOBAL_ROOT.der" + - name: GTE_CYBERTRUST_GLOBAL_ROOT.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/GTE_CYBERTRUST_GLOBAL_ROOT.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/GTE_CYBERTRUST_GLOBAL_ROOT.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:510" - - name: "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der" + - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:511" - - name: "THAWTE_PREMIUM_SERVER_CA.der" + - name: THAWTE_PREMIUM_SERVER_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PREMIUM_SERVER_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/THAWTE_PREMIUM_SERVER_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:512" - - name: "EQUIFAX_SECURE_CA.der" + - name: EQUIFAX_SECURE_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/EQUIFAX_SECURE_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/EQUIFAX_SECURE_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:513" - - name: "ENTRUST_SECURE_SERVER_CA.der" + - name: ENTRUST_SECURE_SERVER_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_SECURE_SERVER_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_SECURE_SERVER_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:514" - - name: "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der" + - name: VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:515" - - name: "ENTRUST_CA_2048.der" + - name: ENTRUST_CA_2048.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_CA_2048.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_CA_2048.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:516" - - name: "ENTRUST_ROOT_CA.der" + - name: ENTRUST_ROOT_CA.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:517" - - name: "ENTRUST_ROOT_CA_G2.der" + - name: ENTRUST_ROOT_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/ENTRUST_ROOT_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:518" - - name: "DIGICERT_ASSURED_ID_ROOT_CA_G2.der" + - name: DIGICERT_ASSURED_ID_ROOT_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_ASSURED_ID_ROOT_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:519" - - name: "DIGICERT_GLOBAL_ROOT_CA_G2.der" + - name: DIGICERT_GLOBAL_ROOT_CA_G2.der + path: Cemu/mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA_G2.der + standalone_path: mlc01/sys/title/0005001b/10054000/content/scerts/DIGICERT_GLOBAL_ROOT_CA_G2.der + load_from: save_dir required: false - path: "mlc01/sys/title/0005001b/10054000/content/scerts/" source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:520" - # --- Optional firmware libraries (cafeLibs/) --- - - name: "snd_user.rpl" - required: false - path: "cafeLibs/" - note: "Wii U firmware sound library, improves audio accuracy for some games" - source_ref: "src/Cafe/OS/libs/snd_user/snd_user.cpp:1225" - - - name: "snduser2.rpl" - required: false - path: "cafeLibs/" - note: "Wii U firmware sound library v2, improves audio accuracy for some games" - source_ref: "src/Cafe/OS/libs/snd_user/snd_user.cpp:1225" - -# Firmware title IDs referenced in the source firmware_titles: - id: "0005001b-10042400" name: "Shared fonts" content: ["CafeCn.ttf", "CafeKr.ttf", "CafeStd.ttf", "CafeTw.ttf"] - required: true - source_ref: "src/Cafe/CafeSystem.cpp:289-292" + required: false + note: "Read from the MLC before the resources/sharedFonts/ copy of the data path." + source_ref: "src/Cafe/CafeSystem.cpp:283-293" - id: "0005001b-10054000" name: "SSL certificates" content: ["ccerts/", "scerts/"] required: false - note: "Only needed for online features, requires otp.bin" - source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:535" + note: "Every file of the certificate table must be present for online mode, with a valid otp.bin and seeprom.bin." + source_ref: "src/Cafe/IOSU/legacy/iosu_crypto.cpp:463-521, src/Cafe/IOSU/legacy/iosu_crypto.cpp:535" + + - id: "0005001b-1004f000" + name: "Software keyboard applet" + content: ["content/00/swkbd/swkbd.pack"] + required: false + note: "Presence of the pack lets a dumped swkbd.rpl in cafeLibs/ replace the built-in keyboard." + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1923-1927" + + - id: "0005001b-10051000" + name: "Error viewer applet" + content: ["content/00/erreula/erreula.pack"] + required: false + note: "Presence of the pack lets a dumped erreula.rpl in cafeLibs/ replace the built-in error viewer." + source_ref: "src/Cafe/OS/RPL/rpl.cpp:1929-1933" - id: "0005001b-1005c000" - name: "System language/country data" + name: "Language and country lists" content: ["language.txt", "country.txt"] required: false - note: "Auto-generated by Cemu if missing" - source_ref: "src/gui/wxgui/CemuApp.cpp:535-561" + note: "Written by the wx frontend on first run when absent; the libretro core creates neither." + source_ref: "src/gui/wxgui/CemuApp.cpp:580-606" - - id: "00050010-10041200" - name: "System version" - content: ["version.bin"] - required: false - note: "Referenced but not strictly loaded (TODO in source)" - source_ref: "src/Cafe/OS/libs/coreinit/coreinit_MCP.cpp:203" - - - id: "00050010-10040000" - name: "Wii U Menu (JPN)" - required: false - source_ref: "src/Cafe/OS/libs/sysapp/sysapp.cpp:382" - - - id: "00050010-10040100" - name: "Wii U Menu (USA)" - required: false - source_ref: "src/Cafe/OS/libs/sysapp/sysapp.cpp:382" - - - id: "00050010-10040200" - name: "Wii U Menu (EUR)" - required: false - source_ref: "src/Cafe/OS/libs/sysapp/sysapp.cpp:382" - -# MLC directory structure expected by Cemu mlc_structure: - - "mlc01/sys/title/0005001b/10042400/content/" # shared fonts - - "mlc01/sys/title/0005001b/10054000/content/ccerts/" # client certs - - "mlc01/sys/title/0005001b/10054000/content/scerts/" # server CA certs - - "mlc01/sys/title/0005001b/1005c000/content/" # language files - - "mlc01/sys/title/00050010/" # system applets - - "mlc01/usr/title/00050000/" # base games - - "mlc01/usr/title/0005000c/" # DLC - - "mlc01/usr/title/0005000e/" # updates - - "mlc01/usr/save/" # save data - - "mlc01/usr/boss/" # SpotPass data - -notes: | - Cemu is a standalone Wii U emulator (not a libretro core). - Minimum to run games: keys.txt with disc decryption keys. - Shared fonts are required but Cemu ships fallback fonts in resources/sharedFonts/. - Online play requires otp.bin (1024 bytes) + seeprom.bin (512 bytes) + SSL certificates. - The cafeLibs/ directory can hold original Wii U firmware .rpl libraries for accuracy. - Any .rpl from the Wii U firmware placed in cafeLibs/ will override Cemu's HLE implementation. + - "mlc01/sys/title/0005001b/10042400/content/" + - "mlc01/sys/title/0005001b/10054000/content/ccerts/" + - "mlc01/sys/title/0005001b/10054000/content/scerts/" + - "mlc01/sys/title/0005001b/1004f000/content/00/swkbd/" + - "mlc01/sys/title/0005001b/10051000/content/00/erreula/" + - "mlc01/sys/title/0005001b/1005c000/content/" + - "mlc01/usr/title/00050000/" + - "mlc01/usr/title/0005000c/" + - "mlc01/usr/title/0005000e/" + - "mlc01/usr/save/" + - "mlc01/usr/boss/" diff --git a/emulators/dingooemu.yml b/emulators/dingooemu.yml index 01016325..33bd393b 100644 --- a/emulators/dingooemu.yml +++ b/emulators/dingooemu.yml @@ -3,44 +3,99 @@ type: standalone + libretro core_classification: pure_libretro source: "https://github.com/AloysHF/DingooEmu" upstream: "https://github.com/AloysHF/DingooEmu" -profiled_date: "2026-09-03" -source_commit: "746d6f116c707b9a2ede23c4b25468f90e26af26" -core_version: "0.2.0" -display_name: "Dingoo - A320 (DingooEmu)" +profiled_date: "2026-09-17" +source_commit: "f57c9339e6021cd37c4bd694c14b0813a9b5ee72" +core_version: "0.3.0" +display_name: "Dingoo - A320 / Gemei A330 (DingooEmu)" cores: - dingooemu systems: - dingoo-a320 + - gemei-a330 notes: | - Dingoo A320 emulator written in Rust by AloysHF. The libretro core and - the dingoo-emu standalone binary share the dingooemu-core crate. A .app - file is parsed from its full path (need_fullpath = true, - crates/dingooemu-libretro/src/api.rs:87; Emulator::from_path, - crates/dingooemu-core/src/emulator.rs:316-319; - crates/dingooemu-core/src/app_loader.rs:119-122) and its imports are - bound to Rust implementations of the Dingoo SDK - (crates/dingooemu-core/src/emulator/sdk_hle/mod.rs:22-30). No firmware - image, font or system file backs those calls. + Dingoo A320 and Gemei A330 emulator written in Rust by AloysHF. The + libretro core and the dingoo-emu standalone binary share the + dingooemu-core crate. Content is read from its full path (need_fullpath + = true, crates/dingooemu-libretro/src/api.rs:87; + crates/dingooemu/src/main.rs:226; crates/dingooemu-core/src/emulator.rs:33-37; + crates/dingooemu-core/src/package.rs:124-135). The CCDL package's load + address selects the runtime: a .app loaded in the 0x8xxxxxxx range runs on + the MIPS32 interpreter as an A320, a .cc, .c2s or .c3s loaded at + 0x10100000 (retail SDK) or 0x13800000 (homebrew SDK) runs on the + ARM32/Thumb interpreter as an A330 + (crates/dingooemu-core/src/content.rs:66-74, 104-121; + crates/dingooemu-core/src/emulator.rs:44-55). Both runtimes bind the + package's imports to Rust implementations of the device SDK + (crates/dingooemu-core/src/a320/runtime/sdk_hle/mod.rs:22-30; + crates/dingooemu-core/src/a330/runtime/sdk_hle/mod.rs:226-234). No + firmware code is executed and no font or system file backs those calls. - The guest file API (crates/dingooemu-core/src/emulator/sdk_hle/files.rs:43-129) + The A320 guest file API + (crates/dingooemu-core/src/a320/runtime/sdk_hle/files.rs:43-128) resolves a name in three steps: a file under the save directory, a resource packed inside the .app, then a host file relative to the .app's - own directory (crates/dingooemu-core/src/emulator.rs:1684-1706, - crates/dingooemu-core/src/emulator.rs:1433-1501). fsys_findfirst + own directory (crates/dingooemu-core/src/a320/runtime.rs:1645-1665, + crates/dingooemu-core/src/a320/runtime.rs:1592-1618, + crates/dingooemu-core/src/a320/runtime.rs:1424-1428, + crates/dingooemu-core/src/a320/runtime.rs:1449-1462). fsys_findfirst enumerates the .app's directory and refuses to leave it - (crates/dingooemu-core/src/emulator.rs:1545-1591). Files the game - creates land in the frontend save directory - (crates/dingooemu-libretro/src/api.rs:152-155) or, when the frontend - gives none, beside the .app (crates/dingooemu-core/src/emulator.rs:411). - The core queries RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only + (crates/dingooemu-core/src/a320/runtime.rs:1519-1529). + + The A330 guest file API + (crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:74-135) + resolves a name in five steps: a file under the save directory, a host + file relative to the content's directory, a resource packed inside the + package, the zip payload appended to the package, then an entry of the + firmware archive mounted from the content's directory; a name none of + them answers fails the open. fsys_findfirst enumerates the content's + directory and refuses to leave it + (crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:381-395). + + Files the game creates land in the frontend save directory + (crates/dingooemu-libretro/src/api.rs:150-155, + crates/dingooemu-core/src/emulator.rs:173-179) or, when the frontend + gives none and in the standalone, beside the content + (crates/dingooemu-core/src/a320/runtime.rs:372, + crates/dingooemu-core/src/a330/runtime.rs:415-417). The core queries + RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY only (crates/dingooemu-libretro/src/constants.rs:30); no system directory constant exists in the crate. With the diagnostic core option on, dingooemu-diagnostic.txt is written - to the save directory (crates/dingooemu-libretro/src/diagnostics.rs:83-89, - crates/dingooemu-libretro/src/diagnostics.rs:311-316). No include_bytes! - data is compiled in. + to the save directory, or beside the content without one + (crates/dingooemu-libretro/src/api.rs:156-159, + crates/dingooemu-libretro/src/diagnostics.rs:8, + crates/dingooemu-libretro/src/diagnostics.rs:83-89, + crates/dingooemu-libretro/src/diagnostics.rs:310-318). No include_bytes! + data is compiled in. The .info declares firmware_count = 0: the one file + below is read from the content's directory, never from the system + directory. -exclusion_note: "No file is read outside the content: the .app path is the only input, guest file calls resolve to the save directory, the .app's resource table or the .app's own directory, nothing queries the system directory, no data is embedded with include_bytes!, and the .info declares firmware_count = 0." -files: [] +files: + - name: "A330.HXF" + system: gemei-a330 + required: false + storage: large_file + load_from: content_dir + size: 76352901 + validation: [signature] + md5: "d8e1849773223a842076ca04053a13a4" + sha1: "69b3544d992a23e8b736c61837914a4d1b4e7bb5" + description: "Gemei A330 firmware update archive, V1.1 build3 of 2011-02-13" + note: >- + Mounted when an A330 package loads: the content's directory is + scanned and the first entry whose extension is hxf, in any case, is + read whole. The file must start with WADF0100 and declare at offset + 20 a size within its own length; each record is a u32 name length, + the name, one byte, a u32 data length and the data, and a zero name + length ends the table. Names are lowercased, backslashes turned to + slashes and a leading drive letter dropped, so Z:\SYSTEM\nls\c_936.nls + and system/nls/c_936.nls reach the same entry. The archive is the + last source consulted when a game opens a file the save directory, + the content directory, the package's resources and its appended zip + payload do not hold; without it such an open fails and the runtime + goes on. The image itself is never hashed, and the hashes here name + the last firmware Gemei published; the V1.10 image of 2011-01-25 + indexes the same way. + source_ref: "crates/dingooemu-core/src/a330/runtime.rs:415-418, crates/dingooemu-core/src/a330/firmware_archive.rs:16-50, 54-58, 63-96, 117-124, crates/dingooemu-core/src/a330/runtime/sdk_hle/files.rs:108-133" diff --git a/emulators/dosbox-x.yml b/emulators/dosbox-x.yml index a0d156f6..0bcb7cb9 100644 --- a/emulators/dosbox-x.yml +++ b/emulators/dosbox-x.yml @@ -3,9 +3,9 @@ type: standalone core_classification: enhanced_fork source: "https://github.com/joncampbell123/dosbox-x" upstream: "https://github.com/joncampbell123/dosbox-x" -source_commit: "6cad735d685406bd4ef2a0b60a4613569e211fd8" -profiled_date: "2026-08-08" -core_version: "2026.08.02" +source_commit: "c98f5a359729f61263d88ae816a4263a7a15f12e" +profiled_date: "2026-09-17" +core_version: "2026.08.31" display_name: "DOS (DOSBox-X)" cores: - dosbox-x @@ -25,7 +25,7 @@ notes: | olivetti/m24/att6300, pc3270, ega, ega200, jega, mcga, vgaonly, the S3, Tseng, Paradise and ATI SVGA cards, the vesa variants, and pc98/pc9801/pc9821. fm_towns is marked STUB in the same list. - ref: src/dosbox.cpp:1530-1566 + ref: src/dosbox.cpp:1534-1574 No system BIOS: the PC BIOS, VGA BIOS, video fonts, keyboard layouts, codepage tables, the Z: drive utilities including GLIDE2X.OVL, and the TTF text font are @@ -36,10 +36,17 @@ notes: | Files named without a directory are searched in the working directory, the program directory, the user configuration directory and the resource directory. On Linux the configuration directory is $XDG_CONFIG_HOME/dosbox-x - or ~/.config/dosbox-x, and the resource directory is $XDG_DATA_HOME/dosbox-x, - then /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses - C:\DOSBox-X. - ref: src/ints/int10.cpp:1442-1485, src/misc/cross.cpp:128-175 + or ~/.config/dosbox-x, and the resource directory is $APPDIR/usr/share/dosbox-x + inside an AppImage, otherwise $XDG_DATA_HOME/dosbox-x, then + /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses C:\DOSBox-X. + ref: src/ints/int10.cpp:1442-1485, src/misc/cross.cpp:129-190, 193-226 + + Configuration: -conf and -userconf name the files to read. Otherwise + dosbox-x.conf then dosbox.conf is tried in the working directory, then in the + program directory, then in the configuration directory, which is last tried + for dosbox-x-<version>.conf; that file is written with the defaults when it + does not exist. + ref: src/gui/sdlmain.cpp:8664-8740, src/misc/cross.cpp:229-245 MT-32: libmt32emu is built from src/libs/mt32. Only four file names are ever opened, and each candidate is identified by exact file size then SHA1, so the @@ -51,7 +58,7 @@ notes: | the MT32 names. The directory is mt32.romdir, then the working directory, then the resource directory, then the configuration directory. A missing pair logs the accepted file names and disables the device. - ref: src/gui/midi_mt32.h:246-275, src/dosbox.cpp:3577-3582 + ref: src/gui/midi_mt32.h:246-275, src/dosbox.cpp:3585-3595 FluidSynth reads fluid.soundfont; fluid_synth_sfload is the only check. With the setting empty it probes /usr/share/soundfonts/default.sf2, @@ -77,22 +84,27 @@ notes: | identified by its size, which covers ASC16 and ASCFONT.15 from UCDOS and ETen Chinese DOS, ASC24, HZK14, HZK16, HZK24 and STDFONT.15 and STDFONT.24. Unset settings fall back to the built-in font data. - ref: src/ints/int_dosv.cpp:654-749, 1631-1710, src/dosbox.cpp:2539-2574 + ref: src/ints/int_dosv.cpp:654-749, 1631-1710, src/dosbox.cpp:2547-2580 BOOT -bios loads a BIOS image at the top of the first megabyte, truncated to 128 KB, or 96 KB on PC-98 where it also looks for <image>.itf.rom, <image>.ITF.ROM, itf.rom and ITF.ROM to serve the bank switched Initial Firmware Test region through port 43Dh. - ref: src/dos/dos_programs.cpp:2250-2338 + ref: src/dos/dos_programs.cpp:2225-2226, 2249-2338 BIOSTEST.COM loads an image of up to 64 KB at F000:0 and restarts the CPU at the reset vector; it is compiled only when the debugger is enabled. The settings call binary on reset and call binary on boot load blobs of up to 128 KB into the ROM BIOS area for CPU testing. - ref: src/dos/dos_programs.cpp:3587-3646, src/ints/bios.cpp:13280-13353 + ref: src/dos/dos_programs.cpp:3589-3642, src/ints/bios.cpp:13280-13356 + + A build configured with --enable-dosbox_agent reads the key=value file named + by -agent-config to start the RPC debugger agent; the file names the + transport and endpoint, nothing else is read from disk. + ref: configure.ac:1441-1448, src/gui/sdlmain.cpp:8487-8493, src/agent/protocol/agent_protocol.cpp:477-632 Glide passthrough loads glide2x.dll, libglide2x.so or libglide2x.dylib. - ref: src/hardware/glide.cpp:353-359, src/dosbox.cpp:3477-3479 + ref: src/hardware/glide.cpp:353-359, src/dosbox.cpp:3485-3487 ttf.font, ttf.fontbold, ttf.fontital and ttf.fontboit name a TTF, OTF, FON or TTC font resolved through the same search order plus the system font @@ -109,9 +121,10 @@ notes: | the customcodepage translation table, .kl layout files and the KEYBOARD.SYS to KEYBRD4.SYS libraries read from a mounted drive, the glshaders directory and the .lng translations. - ref: src/ints/bios.cpp:11463-11472, src/gui/sdlmain.cpp:7010-7017, - src/dos/dos.cpp:4402-4425, src/dos/dos_keyboard_layout.cpp:300-340, - src/gui/render.cpp:1538-1545, src/misc/messages.cpp:294-320 + ref: src/ints/bios.cpp:11463-11472, src/gui/sdlmain.cpp:966-968, 7010-7018, + src/gui/sdl_mapper.cpp:5731-5787, src/dos/dos.cpp:4402-4437, + src/dos/dos_keyboard_layout.cpp:300-340, src/gui/render.cpp:1538-1545, + src/misc/messages.cpp:294-320 files: # -- MT-32 and CM-32L control ROMs -- @@ -260,7 +273,7 @@ files: note: > any SF2 or SF3 file loads; fluid.soundfont names it and fluid_synth_sfload is the only check - source_ref: "src/gui/midi_synth.h:346-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3710" + source_ref: "src/gui/midi_synth.h:346-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3724" # -- PC-98 character generator -- @@ -274,7 +287,7 @@ files: 256 8x8 cells at 0x0, 256 8x16 cells at 0x800, 96 by 92 16x16 cells at 0x1800; a file of any other length is rejected. Enabled by pc-98 try font rom, on by default - source_ref: "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2483-2484" + source_ref: "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2491-2492" - name: "ANEX86.BMP" description: "PC-98 character generator, Anex86 bitmap" @@ -285,7 +298,7 @@ files: pixel, no compression, inverse colour scheme; the first row is the 8x16 single-width set and the rest is 16x16 full-width. Also reachable through the pc-98 anex86 font setting, which is tried before FONT.ROM - source_ref: "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2487-2490" + source_ref: "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2495-2498" - name: "FREECG98.BMP" description: "PC-98 character generator, free generated bitmap" @@ -335,32 +348,32 @@ files: description: "Printer Roman typeface" required: false note: "also the fallback typeface for any unmapped LQ selection" - source_ref: "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4621" + source_ref: "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4629-4631" - name: "sansserif.ttf" path: "FONTS/sansserif.ttf" description: "Printer Sans Serif typeface" required: false - source_ref: "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4621" + source_ref: "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4629-4631" - name: "courier.ttf" path: "FONTS/courier.ttf" description: "Printer Courier typeface" required: false - source_ref: "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4621" + source_ref: "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4629-4631" - name: "script.ttf" path: "FONTS/script.ttf" description: "Printer Script typeface" required: false - source_ref: "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4621" + source_ref: "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4629-4631" - name: "ocra.ttf" path: "FONTS/ocra.ttf" description: "Printer OCR-A typeface" required: false note: "serves both the OCR-A and OCR-B selections" - source_ref: "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4621" + source_ref: "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4629-4631" # -- PC-98 sound board BIOS -- @@ -373,7 +386,7 @@ files: note: > 16 KB read into CC000h from the working directory only, when pc-98 sound bios and pc-98 load sound bios rom file are both set - source_ref: "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2384-2392" + source_ref: "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2392-2399" # -- Video BIOS ROM images -- # Loaded in place of the built-in INT 10h when vga bios use rom image is set. @@ -387,7 +400,7 @@ files: max_size: 65536 validation: [size] note: "default file name for machine = svga_et4000" - source_ref: "src/dosbox.cpp:942-986, src/dosbox.cpp:2751-2763" + source_ref: "src/dosbox.cpp:943-994, src/dosbox.cpp:2759-2770" - name: "TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin" description: "S3 Trio64 video BIOS" @@ -398,7 +411,7 @@ files: max_size: 65536 validation: [size] note: "default file name for machine = svga_s3" - source_ref: "src/dosbox.cpp:947-949, src/dosbox.cpp:2751-2763" + source_ref: "src/dosbox.cpp:951-953, src/dosbox.cpp:2759-2770" - name: "ibm-vga.bin" description: "IBM VGA option ROM of 10/27/86, laid out as mapped at C000:0" @@ -411,7 +424,7 @@ files: read by LOADROM.COM from a mounted local drive; accepted when the file starts with 55 AA, byte 3 masked with 0xFC equals 0xE8 and the string IBM appears at offset 0x1E, and the machine is EGA or better - source_ref: "src/dos/dos_programs.cpp:3529-3555, src/dos/dos_programs.cpp:3566-3571" + source_ref: "src/dos/dos_programs.cpp:3529-3555, src/dos/dos_programs.cpp:3566-3572" # -- IBM ROM BASIC -- @@ -428,7 +441,7 @@ files: 32 KB to 64 KB in 4 KB steps; LOADROM.COM maps the same image at F600:0 when it is exactly 32768 bytes, starts with E9 8F 7E and carries the string IBM at offset 0x4CD4 - source_ref: "src/ints/bios.cpp:13212-13232, src/dos/dos_programs.cpp:3556-3560, src/dosbox.cpp:1937-1939" + source_ref: "src/ints/bios.cpp:13212-13232, src/dos/dos_programs.cpp:3556-3560, src/dosbox.cpp:1945-1947" # -- PCjr -- @@ -454,7 +467,7 @@ files: loaded at the top of the first megabyte, rounded up to a paragraph and truncated to 128 KB, or to 96 KB on PC-98; a larger image is clamped rather than rejected - source_ref: "src/dos/dos_programs.cpp:2250-2299" + source_ref: "src/dos/dos_programs.cpp:2249-2299" - name: "ITF.ROM" description: "PC-98 Initial Firmware Test BIOS" diff --git a/emulators/eka2l1.yml b/emulators/eka2l1.yml index 72c2b6a4..eb50a0e3 100644 --- a/emulators/eka2l1.yml +++ b/emulators/eka2l1.yml @@ -1,54 +1,819 @@ emulator: eka2l1 -type: standalone -source: "https://github.com/EKA2L1/EKA2L1" +type: standalone + libretro +core_classification: community_fork +source: + standalone: "https://github.com/EKA2L1/EKA2L1" + libretro: "https://github.com/WizzardSK/eka2l1-libretro/tree/libretro" upstream: "https://github.com/EKA2L1/EKA2L1" -profiled_date: "2026-03-26" -source_commit: "f8a9a0a380d62f82a463bcc299f2b9250b819674" -core_version: "continuous" -display_name: "EKA2L1 (Symbian OS / N-Gage)" +profiled_date: "2026-09-17" +source_commit: + standalone: "293e399b34eb0cee1519fb095587be65a0a4edd2" + libretro: "97ac3df6767f819c95405e4c86e7007d2e8ae61d" +upstream_commit: + libretro: "47b4ad76a6dd7d3656f52be86dfd5b9ff9a50c70" +core_version: "0.0.9" +display_name: "Nokia - Symbian / N-Gage (EKA2L1)" cores: - eka2l1 systems: - ngage -analysis_date: "2026-03-26" -analysis_commit: "e67f84d (depth=1)" -mode: standalone - -# EKA2L1 emulates Symbian OS kernel and reimplements critical app servers and -# libraries. Supports S60v1 through Symbian Belle, including N-Gage 1.0/2.0. -# -# Each phone model requires its own ROM dump identified by firmware code. -# ROM path at runtime: {storage}/roms/{firmware_code_lowercase}/SYM.ROM -# Storage defaults to data/ relative to executable. -# -# Device installation (GUI or CLI) processes ROM dumps: -# - Raw .rom files → copied to roms/{firmcode}/SYM.ROM -# - RPKG files → extracted to drives/z/{firmcode}/ (system partition) -# - VPL firmware packages → extracted to roms/ and drives/ -# -# drives/z/{firmcode}/ content is generated during installation, not -# user-placed. drives/c/, drives/d/, drives/e/ are runtime storage. -# -# Firmware codes for N-Gage systems: -# NEM-4 = Nokia N-Gage (original, S60v1) -# RH-29 = Nokia N-Gage QD (S60v1) -# For N-Gage 2.0 games, a S60v3 phone ROM is needed (e.g., RM-409 = 5320 XpressMusic). -# -# No libretro core exists. No .info file. -# resources/ files (shaders, soundfonts, gamecontrollerdb.txt) ship with the -# emulator distribution, not user-supplied. + - symbian notes: | - Pure standalone Symbian OS / N-Gage emulator. No libretro core. - Requires phone ROM dumps (SYM.ROM) obtained from real Nokia devices. - The emulator supports 100+ Nokia phone models (NEM-4, RH-29, RM-409, etc.). - No hash or size validation on the ROM file; the loader parses the ROM structure. - Batocera maps the ngage system to eka2l1 in configgen-defaults.yml. - No dedicated Batocera configgen generator exists. + Symbian OS and N-Gage emulator: the EKA1 and EKA2 kernels are emulated and + the critical application servers and libraries reimplemented in C++, while + the ROM of a real phone supplies the rest of the operating system, so every + device to emulate is built from a firmware dump. Covers the N-Gage and + N-Gage 2.0 libraries and the game libraries from S60v1 to Symbian Belle. One + tree builds the Qt desktop frontend, the Android and iOS applications, and a + libretro core; the core lives on the libretro branch of the WizzardSK fork, + merged from upstream at 47b4ad76. + ref: README.md:20, README.md:29-32, src/emu/CMakeLists.txt:61-62, + CMakeLists.txt:18, .gitlab-ci.yml:14-22 + + A device is registered in <storage>/devices.yml and holds its ROM image at + <storage>/roms/<firmware code, lower case>/SYM.ROM with the unpacked ROFS + tree beside it under <storage>/drives/z/<firmware code>/. Selecting the + device opens that SYM.ROM; a parse failure or a missing file makes set_device + return false and nothing runs. The image is parsed for its root directory + list and never checked against a size or a hash. <storage> is the + data-storage option, "data" by default, relative to the working directory. + ref: src/emu/system/include/system/consts.h:23-25, + src/emu/system/src/epoc.cpp:1393-1401, src/emu/system/src/epoc.cpp:805-829, + src/emu/loader/src/rom.cpp:281-299, src/emu/system/src/devices.cpp:175-200, + src/emu/config/include/config/options.inl:45 + + Three installers produce that layout from a dump. A bare ROM image is enough + when it is an EKA1 image carrying z:\system\versions\sw.txt, the N-Gage case: + its files are unpacked to drives/z/, the firmware code is read from them and + the image is copied to SYM.ROM. An EKA2 image needs the RPKG made by the + Dumber tool beside it, which supplies the ROFS. A .vpl variant packing list + names the .fpsx flash images of a factory firmware, from which the core image, + the ROFS and the drive contents are extracted. The names of the dump files + are free; SYM.ROM is the name the installers give the resident copy. + ref: src/emu/system/src/installation/rpkg.cpp:43-64, + src/emu/system/src/installation/rpkg.cpp:131-193, + src/emu/system/src/installation/rpkg.cpp:202-248, + src/emu/system/src/installation/rpkg.cpp:251-253, + src/emu/system/src/installation/firmware.cpp:290-303, + src/emu/system/src/installation/firmware.cpp:381-406, + src/emu/system/src/installation/firmware.cpp:425-428, + src/emu/system/src/installation/firmware.cpp:467-487 + + Standalone, the Qt frontend installs through its device dialog, from a ROM, + a ROM with its RPKG, or a VPL; the settings dialog can also rescan drives/z/ + and rebuild devices.yml from the directories that still hold a SYM.ROM. On + Linux and macOS the working directory is the EKA2L1 folder of the user data + location and the shipped patch, resources, scripts and compat folders are + copied there at startup; on Windows it is the directory the executable is + started from. + ref: src/emu/qt/src/device_install_dialog.cpp:161-171, + src/emu/qt/src/device_install_dialog.cpp:180-184, + src/emu/qt/src/settings_dialog.cpp:526, src/emu/system/src/epoc.cpp:383-445, + src/emu/qt/src/main.cpp:101-121 + + The libretro core keeps everything under <system>/eka2l1: data-storage is + forced to that directory whatever config.yml carries. On retro_init, when no + device is registered, <system>/eka2l1/firmware is scanned once and the first + .vpl found is installed, otherwise the first .rom or .fpsx with the first + .rpkg beside it. The result is saved to devices.yml and device 0 is selected. + Without a device the core logs where the dump goes and refuses to start when + the GL context arrives, so the firmware folder is required. Content is a + .sis, .sisx or .n-gage package, installed on first load and remembered in + <system>/eka2l1/libretro-content.txt against the UID it registered, or a + .eka2l1 text shortcut naming the UID of an application already installed. + supports_no_game is false. is_experimental is true in the .info. + ref: src/emu/libretro/src/main.cpp:51-53, src/emu/libretro/src/state.cpp:12-17, + src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111, + src/emu/libretro/src/main.cpp:161-169, src/emu/libretro/src/main.cpp:68-69, + src/emu/libretro/src/main.cpp:116-117, src/emu/libretro/src/content.cpp:119, + src/emu/libretro/src/content.cpp:244-249 + + At this revision the libretro build stages none of the shipped resource + folders and never calls set_runtime_resource_root, so the GL shaders, the + compat folder and panic.json are looked up relative to the process working + directory. It calls neither initialize_user_parties nor mount for drive Z + and creates no audio or controller driver, so the patch libraries, the Lua + scripts, the MIDI banks and the controller database are not read there. + Those entries carry mode standalone. + ref: src/emu/libretro/CMakeLists.txt:8-45, src/emu/libretro/src/thread.cpp:19-38, + src/emu/libretro/src/thread.cpp:41-60, src/emu/libretro/src/thread.cpp:83-89, + src/emu/common/src/path.cpp:427-450, src/emu/system/src/epoc.cpp:1296-1317 + + Shipped runtime files are read at their own name below the working + directory. Patch libraries: every patch/*.map is parsed, the DLL is + <map name>_<version suffix>.dll for the device's Symbian version upward, then + <map name>_general.dll; a map naming a source picks that DLL prefix; a map + requiring host-tls is skipped below S60v3 FP1; a missing folder is skipped. + goommonitor and avkonfep have no map: the Qt and Android frontends copy them + over the ROM's own Z:\sys\bin DLL, from S60v5 and from S60v3 FP1 on. Shaders: + the eight files under resources are compiled by the OpenGL driver at start + and an unreadable one leaves the program without source. The upscale filter + named in an application's screen-upscale setting is read from + resources/upscale/<name>.frag; the 21 filters ship from the upscale-shaders + submodule, pinned at 49dd304c. MIDI: resources/defaultbank.sf2 feeds the + TinySoundFont player and resources/defaultbank.hsb the miniBAE player, the + paths being the sf2-bank-path and hsb-bank-path options. SDL2 controller + mappings come from resources/gamecontrollerdb.txt. compat/panicBlackList.json + names thread panics to swallow and compat/<UID>.yml carries per-application + settings; panic.json holds the panic category descriptions. Lua scripts under + scripts/ are loaded when the build carries LuaJIT and require the eka2l1.* + modules from scripts/eka2l1/; the libretro recipe builds without it. Fonts + the user imports live in <storage>/fonts and are added to the font store + after the ROM fonts. + ref: src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:435-438, + src/emu/kernel/src/libmanager.cpp:495-540, src/emu/kernel/src/libmanager.cpp:557-561, + src/emu/qt/src/state.cpp:181-204, + src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264-282, + src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, + src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, + src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, + src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, + src/emu/config/include/config/options.inl:72-73, + src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, + src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/config/src/app_settings.cpp:82-114, + src/emu/utils/src/panic.cpp:32-38, src/emu/scripting/src/manager.cpp:196-202, + src/emu/scripting/src/manager.cpp:230-256, src/emu/services/src/fbs/fbs.cpp:434, + src/emu/services/src/fbs/impls/font.cpp:1190-1213, .gitlab-ci.yml:19, + src/emu/qt/CMakeLists.txt:264-278, src/emu/qt/CMakeLists.txt:289-290, + src/emu/qt/CMakeLists.txt:376-377, cmake/Symbian.cmake:20-31 + + config.yml, bindings/<profile>.yml, devices.yml, the drives/ tree and + libretro-content.txt are written by the emulator itself. + ref: src/emu/config/src/config.cpp:344-350, src/emu/config/src/config.cpp:358-368, + src/emu/system/src/devices.cpp:248-249 files: - - name: "SYM.ROM" + - name: SYM.ROM + system: ngage + path: eka2l1/firmware/SYM.ROM + standalone_path: data/roms/nem-4/SYM.ROM required: true + size: 18612224 + description: "Nokia N-Gage (NEM-4) firmware 4.03 ROM image, EKA1" + note: >- + An EKA1 image carrying sw.txt installs on its own: the libretro core + picks it up from the firmware folder under any name ending in .rom and + the standalone frontends take it through the device dialog. The + installers copy it to roms/nem-4/SYM.ROM, the path the emulator opens + whenever the device is selected. Every other phone model needs its own + dump, an EKA2 image with its RPKG, or a VPL with its .fpsx images. + source_ref: + standalone: "src/emu/system/src/epoc.cpp:1393-1401, src/emu/system/src/epoc.cpp:805-829, src/emu/system/include/system/consts.h:23-25, src/emu/system/src/installation/rpkg.cpp:43-64, src/emu/system/src/installation/rpkg.cpp:190-193, src/emu/qt/src/device_install_dialog.cpp:161-171" + libretro: "src/emu/libretro/src/main.cpp:82-100, src/emu/libretro/src/content.cpp:44-111, src/emu/libretro/src/main.cpp:161-169, src/emu/system/src/installation/rpkg.cpp:202-248" + + - name: audiooutputrouting.dll.map + standalone_path: patch/audiooutputrouting.dll.map mode: standalone - description: "Symbian OS phone ROM dump. One per device, placed in roms/{firmware_code}/ subdirectory." - source_ref: "src/emu/system/src/epoc.cpp:1288, src/emu/system/src/epoc.cpp:794-799, src/emu/system/include/system/consts.h:23-25" + required: false + bundled: true + description: "Export map routing audiooutputrouting.dll to the host" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, cmake/Symbian.cmake:20-31, src/patch/CMakeLists.txt:6" + + - name: audiooutputrouting_general.dll + standalone_path: patch/audiooutputrouting_general.dll + mode: standalone + required: false + bundled: true + description: "Patched audiooutputrouting.dll, all Symbian versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/audiooutputrouting/group/audiooutputrouting.dll.map:1" + + - name: avkonfep_general.dll + standalone_path: patch/avkonfep_general.dll + mode: standalone + required: false + bundled: true + description: "Avkon FEP bridged to the host input method, copied over Z:\\sys\\bin\\avkonfep.dll on S60v3 FP1 and later" + source_ref: "src/emu/qt/src/state.cpp:181-204, src/patch/CMakeLists.txt:5" + + - name: backlightctrl.dll.map + standalone_path: patch/backlightctrl.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for backlightctrl.dll, bound to the DLL UIDs it names" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:10" + + - name: backlightctrl_v81a.dll + standalone_path: patch/backlightctrl_v81a.dll + mode: standalone + required: false + bundled: true + description: "Patched backlightctrl.dll for Symbian 8.1a" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/backlightctrl/group/backlightctrl.dll.map:1-4" + + - name: commdb.dll.map + standalone_path: patch/commdb.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for the in-ROM commdb.dll of Symbian 6" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:17" + + - name: commdb_v6.dll + standalone_path: patch/commdb_v6.dll + mode: standalone + required: false + bundled: true + description: "Patched commdb.dll for Symbian 6" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/commdb/group/commdb.dll.map:1-7" + + - name: ecam.dll.map + standalone_path: patch/ecam.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for ecam.dll, the camera API" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:8" + + - name: ecam_general.dll + standalone_path: patch/ecam_general.dll + mode: standalone + required: false + bundled: true + description: "Patched ecam.dll, all Symbian versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/ecam/group/ecam.dll.map:1-4" + + - name: goommonitor_general.dll + standalone_path: patch/goommonitor_general.dll + mode: standalone + required: false + bundled: true + description: "Global OOM monitor client, copied over Z:\\sys\\bin\\goommonitor.dll on S60v5 and later" + source_ref: "src/emu/qt/src/state.cpp:181-204, src/patch/CMakeLists.txt:15" + + - name: mediaclientaudio.dll.map + standalone_path: patch/mediaclientaudio.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for mediaclientaudio.dll, CMdaAudioPlayerUtility and friends" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:11" + + - name: mediaclientaudio_general.dll + standalone_path: patch/mediaclientaudio_general.dll + mode: standalone + required: false + bundled: true + description: "Patched mediaclientaudio.dll, EKA2 versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:1-4" + + - name: mediaclientaudio_v81a.dll + standalone_path: patch/mediaclientaudio_v81a.dll + mode: standalone + required: false + bundled: true + description: "Patched mediaclientaudio.dll for Symbian 8.1a" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientaudio/group/mediaclientaudio.dll.map:424-427" + + - name: mediaclientaudioinputstream.dll.map + standalone_path: patch/mediaclientaudioinputstream.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for mediaclientaudioinputstream.dll, served by the mediaclientaudiostream DLLs through its source key" + source_ref: "src/emu/kernel/src/libmanager.cpp:495-508, src/patch/mediaclientaudiostream/group/mediaclientaudioinputstream.dll.map:1" + + - name: mediaclientaudiostream.dll.map + standalone_path: patch/mediaclientaudiostream.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for mediaclientaudiostream.dll" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:12" + + - name: mediaclientaudiostream_general.dll + standalone_path: patch/mediaclientaudiostream_general.dll + mode: standalone + required: false + bundled: true + description: "Patched mediaclientaudiostream.dll, EKA2 versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" + + - name: mediaclientaudiostream_v81a.dll + standalone_path: patch/mediaclientaudiostream_v81a.dll + mode: standalone + required: false + bundled: true + description: "Patched mediaclientaudiostream.dll for Symbian 8.1a" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientaudiostream/group/mediaclientaudiostream.dll.map:1" + + - name: mediaclientvideo.dll.map + standalone_path: patch/mediaclientvideo.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for mediaclientvideo.dll" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:13" + + - name: mediaclientvideo_v100.dll + standalone_path: patch/mediaclientvideo_v100.dll + mode: standalone + required: false + bundled: true + description: "Patched mediaclientvideo.dll for Symbian^3 and Belle" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/mediaclientvideo/group/mediaclientvideo.dll.map:1" + + - name: postingsurfacefactory.dll.map + standalone_path: patch/postingsurfacefactory.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for postingsurfacefactory.dll, the video posting surface" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:14" + + - name: postingsurfacefactory_general.dll + standalone_path: patch/postingsurfacefactory_general.dll + mode: standalone + required: false + bundled: true + description: "Patched postingsurfacefactory.dll, all Symbian versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/postingsurfacefactory/group/postingsurfacefactory.dll.map:1" + + - name: scdv.dll.map + standalone_path: patch/scdv.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for scdv.dll, CFbsDrawDevice and CDirectScreenBitmap" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:495-540, src/patch/CMakeLists.txt:7" + + - name: scdv_general.dll + standalone_path: patch/scdv_general.dll + mode: standalone + required: false + bundled: true + description: "Patched scdv.dll, EKA2 versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/scdv/group/scdv.dll.map:1-28" + + - name: scdv_v81a.dll + standalone_path: patch/scdv_v81a.dll + mode: standalone + required: false + bundled: true + description: "Patched scdv.dll for Symbian 8.1a and earlier EKA1 releases" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/scdv/group/scdv.dll.map:29-45" + + - name: ssl.dll.map + standalone_path: patch/ssl.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for ssl.dll routed to the host TLS stack, skipped below S60v3 FP1" + source_ref: "src/emu/kernel/src/libmanager.cpp:435-438, src/patch/ssl/group/ssl.dll.map:1-4, src/patch/CMakeLists.txt:16" + + - name: ssl_general.dll + standalone_path: patch/ssl_general.dll + mode: standalone + required: false + bundled: true + description: "Patched ssl.dll, all Symbian versions" + source_ref: "src/emu/kernel/src/libmanager.cpp:530-540, src/emu/kernel/src/libmanager.cpp:557-561, src/patch/ssl/group/ssl.dll.map:6-9" + + - name: vibractrl.dll.map + standalone_path: patch/vibractrl.dll.map + mode: standalone + required: false + bundled: true + description: "Export map for vibractrl.dll, bound to the DLL UIDs it names" + source_ref: "src/emu/kernel/src/libmanager.cpp:407-411, src/emu/kernel/src/libmanager.cpp:448-464, src/patch/CMakeLists.txt:9" + + - name: vibractrl_v81a.dll + standalone_path: patch/vibractrl_v81a.dll + mode: standalone + required: false + bundled: true + description: "Patched vibractrl.dll for Symbian 8.1a" + source_ref: "src/emu/kernel/src/libmanager.cpp:511-528, src/patch/vibractrl/group/vibractrl.dll.map:1-4" + + - name: sprite_norm.vert + standalone_path: resources/sprite_norm.vert + mode: standalone + required: true + bundled: true + description: "Vertex shader shared by the sprite, mask and upscale programs" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:264, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:274, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189, src/emu/qt/CMakeLists.txt:272" + + - name: sprite_norm.frag + standalone_path: resources/sprite_norm.frag + mode: standalone + required: true + bundled: true + description: "Fragment shader of the sprite program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:265, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:278, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: sprite_mask.frag + standalone_path: resources/sprite_mask.frag + mode: standalone + required: true + bundled: true + description: "Fragment shader of the masked sprite program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:266, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:279, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: sprite_upscaled.frag + standalone_path: resources/sprite_upscaled.frag + mode: standalone + required: true + bundled: true + description: "Fragment shader of the default upscale program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:267, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:280, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-398, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: brush.vert + standalone_path: resources/brush.vert + mode: standalone + required: true + bundled: true + description: "Vertex shader of the brush program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:268, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:275, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: brush.frag + standalone_path: resources/brush.frag + mode: standalone + required: true + bundled: true + description: "Fragment shader of the brush program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:269, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:281, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: pen.vert + standalone_path: resources/pen.vert + mode: standalone + required: true + bundled: true + description: "Vertex shader of the pen program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:270, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:276, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: pen.frag + standalone_path: resources/pen.frag + mode: standalone + required: true + bundled: true + description: "Fragment shader of the pen program" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:271, src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:282, src/emu/drivers/src/graphics/backend/ogl/shader_ogl.cpp:184-189" + + - name: 2xBR.frag + standalone_path: resources/upscale/2xBR.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: 4xBR.frag + standalone_path: resources/upscale/4xBR.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: 4xhq.frag + standalone_path: resources/upscale/4xhq.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: 5xBR-lv2.frag + standalone_path: resources/upscale/5xBR-lv2.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: 5xBR.frag + standalone_path: resources/upscale/5xBR.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: aacolor.frag + standalone_path: resources/upscale/aacolor.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: CRT-Hyllian.frag + standalone_path: resources/upscale/CRT-Hyllian.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: CRT-Lottes-TV.frag + standalone_path: resources/upscale/CRT-Lottes-TV.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: CRT-Lottes.frag + standalone_path: resources/upscale/CRT-Lottes.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: dot.frag + standalone_path: resources/upscale/dot.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: dot_mobile.frag + standalone_path: resources/upscale/dot_mobile.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: dotpsp_color_mobile.frag + standalone_path: resources/upscale/dotpsp_color_mobile.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: fxaa.frag + standalone_path: resources/upscale/fxaa.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: grayscale.frag + standalone_path: resources/upscale/grayscale.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: inversecolors.frag + standalone_path: resources/upscale/inversecolors.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: natural.frag + standalone_path: resources/upscale/natural.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: scanline-emu.frag + standalone_path: resources/upscale/scanline-emu.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: scanline.frag + standalone_path: resources/upscale/scanline.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: sharpen.frag + standalone_path: resources/upscale/sharpen.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: zfast_lcd.frag + standalone_path: resources/upscale/zfast_lcd.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: zfast_lcd_mobile.frag + standalone_path: resources/upscale/zfast_lcd_mobile.frag + mode: standalone + required: false + bundled: true + description: "Upscale filter selected by an application's filter-shader-path setting" + source_ref: "src/emu/drivers/src/graphics/backend/ogl/graphics_ogl.cpp:397-409, src/emu/services/src/window/screen.cpp:404-406, src/emu/qt/src/settings_dialog.cpp:312-313, .gitmodules:70-72, src/emu/qt/CMakeLists.txt:273" + + - name: defaultbank.sf2 + standalone_path: resources/defaultbank.sf2 + mode: standalone + required: false + bundled: true + description: "SoundFont bank of the TinySoundFont MIDI player, the sf2-bank-path option" + source_ref: "src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:66-77, src/emu/drivers/src/audio/backend/tinysoundfont/player_tsf.cpp:192-196, src/emu/config/include/config/options.inl:73, src/emu/qt/src/state.cpp:157-158, src/emu/qt/CMakeLists.txt:275" + + - name: defaultbank.hsb + standalone_path: resources/defaultbank.hsb + mode: standalone + required: false + bundled: true + description: "Beatnik bank of the miniBAE MIDI player, the hsb-bank-path option" + source_ref: "src/emu/drivers/src/audio/backend/minibae/player_minibae.cpp:86-96, src/emu/config/include/config/options.inl:72, src/emu/qt/src/state.cpp:157-158, src/emu/qt/CMakeLists.txt:274" + + - name: gamecontrollerdb.txt + standalone_path: resources/gamecontrollerdb.txt + mode: standalone + required: false + bundled: true + description: "SDL2 controller mapping database handed to SDL_GameControllerAddMappingsFromFile" + source_ref: "src/emu/drivers/src/input/backend/emu_controller_sdl2.cpp:143-145, src/emu/qt/CMakeLists.txt:277" + + - name: joystick_base.png + standalone_path: resources/joystick_base.png + mode: standalone + required: false + bundled: true + description: "Joystick image of the Qt button mapping editor" + source_ref: "src/emu/qt/src/btnmap/joystick.cpp:113-117, src/emu/qt/CMakeLists.txt:278" + + - name: overlay_font.ttf + standalone_path: resources/overlay_font.ttf + mode: standalone + required: false + bundled: true + description: "Overlay font of the Qt button mapping editor" + source_ref: "src/emu/qt/src/btnmap/editor.cpp:60-62, src/emu/qt/CMakeLists.txt:278" + + - name: panicBlackList.json + standalone_path: compat/panicBlackList.json + mode: standalone + required: false + bundled: true + description: "Thread panics the kernel swallows instead of killing the thread, by process, thread, category and code" + source_ref: "src/emu/config/src/panic_blacklist.cpp:27-35, src/emu/kernel/src/kernel.cpp:1536, src/emu/qt/CMakeLists.txt:276" + + - name: 101FD3DE.yml + standalone_path: compat/101FD3DE.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FD3DE: frame rate and launch delay" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: 101FD3F5.yml + standalone_path: compat/101FD3F5.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FD3F5: frame rate and launch delay" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: 101FD3F6.yml + standalone_path: compat/101FD3F6.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FD3F6: frame rate and launch delay" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: 101FD3FD.yml + standalone_path: compat/101FD3FD.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FD3FD: frame rate and launch delay" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: 101FD409.yml + standalone_path: compat/101FD409.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FD409, The ONE: T9 bypass" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: 101FE1CA.yml + standalone_path: compat/101FE1CA.yml + mode: standalone + required: false + bundled: true + description: "Per-application settings for UID 0x101FE1CA: frame rate and launch delay" + source_ref: "src/emu/config/src/app_settings.cpp:82-114, src/emu/qt/CMakeLists.txt:276" + + - name: panic.json + standalone_path: panic.json + mode: standalone + required: false + bundled: true + description: "Panic category descriptions read when the system is created" + source_ref: "src/emu/utils/src/panic.cpp:32-38, src/emu/system/src/epoc.cpp:634, src/emu/qt/CMakeLists.txt:269" + + - name: aq_crash_fix.lua + standalone_path: scripts/aq_crash_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: eternal_legacy_crash_fix.lua + standalone_path: scripts/eternal_legacy_crash_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: hero_of_sparta_crash_fix.lua + standalone_path: scripts/hero_of_sparta_crash_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: s3_driver_patch.lua + standalone_path: scripts/s3_driver_patch.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: s60v3_empty_avkon_menu_fix.lua + standalone_path: scripts/s60v3_empty_avkon_menu_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: wh40k_slow_load_fix.lua + standalone_path: scripts/wh40k_slow_load_fix.lua + mode: standalone + required: false + bundled: true + description: "Compatibility script, loaded from scripts/ by builds carrying LuaJIT" + source_ref: "src/emu/scripting/src/manager.cpp:196-202, src/emu/scripting/src/manager.cpp:230-256, src/emu/qt/CMakeLists.txt:271" + + - name: common.lua + standalone_path: scripts/eka2l1/common.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.common module the shipped scripts require through package.path" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:1, src/emu/qt/CMakeLists.txt:289-290" + + - name: cpu.lua + standalone_path: scripts/eka2l1/cpu.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.cpu module the shipped scripts require through package.path" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:3, src/emu/qt/CMakeLists.txt:289-290" + + - name: events.lua + standalone_path: scripts/eka2l1/events.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.events module the shipped scripts require through package.path" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:2, src/emu/qt/CMakeLists.txt:289-290" + + - name: helper.lua + standalone_path: scripts/eka2l1/helper.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.helper module required by the other eka2l1 modules" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/emu/qt/CMakeLists.txt:289-290" + + - name: kernel.lua + standalone_path: scripts/eka2l1/kernel.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.kernel module the shipped scripts require through package.path" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:4, src/emu/qt/CMakeLists.txt:289-290" + + - name: std.lua + standalone_path: scripts/eka2l1/std.lua + mode: standalone + required: false + bundled: true + description: "eka2l1.std module the shipped scripts require through package.path" + source_ref: "src/emu/scripting/src/manager.cpp:252, src/scripts/aq_crash_fix.lua:5, src/emu/qt/CMakeLists.txt:289-290" diff --git a/emulators/gearcoleco.yml b/emulators/gearcoleco.yml index 2bec6605..ac40842d 100644 --- a/emulators/gearcoleco.yml +++ b/emulators/gearcoleco.yml @@ -3,36 +3,96 @@ type: libretro core_classification: official_port source: "https://github.com/drhelius/Gearcoleco" upstream: "https://github.com/drhelius/Gearcoleco" -profiled_date: "2026-03-23" -source_commit: "ca4d13bae91e402d0dce29ed98d6bee2b41b1922" -core_version: "1.0.0" -display_name: "Coleco - ColecoVision (Gearcoleco)" +profiled_date: "2026-09-17" +source_commit: "8d32d242c6ba2104d75c17bb79773275387d4c37" +core_version: "1.7.0-7-g8d32d24" +display_name: "Coleco - ColecoVision / ADAM (Gearcoleco)" cores: - gearcoleco systems: - colecovision + - coleco-adam notes: | - ColecoVision emulator by Ignacio Sanchez (drhelius). Official port - maintained by the upstream author. The ColecoVision BIOS ROM is required. - Without it, the core renders a static placeholder image (kNoBiosImage from - no_bios.h) and games do not execute. + ColecoVision and Coleco ADAM emulator by Ignacio Sanchez (drhelius); the + libretro port lives in the same repository. Three firmware roles are + declared in kAdamFirmwareMetadata (src/Adam.cpp:26-42): OS-7, EOS and + SmartWriter, each with a size, a CRC32 and its accepted file names. - The libretro wrapper (platforms/libretro/libretro.cpp:295-308) tries "colecovision.rom" first, - then falls back to "coleco.rom". Both resolve to the same LoadBios() call - in src/Memory.cpp:256-287 which validates size == 0x2000 (8192 bytes) only. - No hash check is performed. + find_firmware() (platforms/libretro/libretro.cpp:773-834) walks the + frontend system directory and then its gearcoleco subdirectory + (libretro.cpp:787), trying every accepted name in each. A file whose size + differs from the role's size is skipped with a warning (libretro.cpp:806-811). + Every candidate that passes is compared to the first one found: two + valid-sized images with different bytes are an ambiguous role and the load + fails (libretro.cpp:820-827). CRC32 is computed after the search and only + logged when it differs from the table (libretro.cpp:867-870, 918-929). - On reset, BIOS byte at offset 0x69 is patched for region selection: - 0x3C for NTSC, 0x32 for PAL (src/Memory.cpp:206-209). + The machine is chosen per load (libretro.cpp:2387-2389): .ddp, .dsk, a ZIP + holding an ADAM image, an .m3u playlist, no content at all, or a cartridge + with the core option gearcoleco_cartridge_hardware set to ADAM start the + ADAM; any other cartridge starts the ColecoVision. The "adam" subsystem + (libretro.cpp:529-537) takes a cartridge, two disks and two data packs. - SGM (Super Game Module) expanded RAM requires no additional BIOS files. + ColecoVision: load_colecovision_firmware() (libretro.cpp:852-879) needs OS-7 + and retro_load_game() returns false without it (libretro.cpp:2399-2403). + It runs again on retro_reset() (libretro.cpp:2204-2205). The image goes + through Memory::LoadBiosFromBuffer() (src/Memory.cpp:310-319) and byte 0x69 + is patched on reset, 0x32 when the cartridge is PAL and 0x3C otherwise + (src/Memory.cpp:246-249); the ADAM always gets 0x3C (src/Memory.cpp:221). + + ADAM: load_adam_firmware() (libretro.cpp:881-942) needs all three roles and + every ADAM entry point returns false when one is missing (libretro.cpp: + 2372-2373, 2429-2433, 2446-2447, 2530-2534). Adam::LoadFirmware() + (src/Adam.cpp:168-190) copies the three images, IsFirmwareReady() + (src/Adam.cpp:139-148) gates StartAdam() (src/GearcolecoCore.cpp:410-415). + The MIOC maps SmartWriter over the lower 32 KiB with EOS replacing its + last 8 KiB bank when the control latch selects it, and OS-7 over the first + 8 KiB in cartridge mode (src/Adam.cpp:531-555). + + Save RAM, save states and IPS patches are read next to the content or in + the frontend save directory; they are state the core writes, not files a + user obtains. files: - name: "colecovision.rom" - aliases: ["coleco.rom"] + aliases: ["coleco.rom", "os7.u2"] + description: "ColecoVision OS-7 BIOS" system: colecovision required: true size: 8192 - validation: [size] - source_ref: "platforms/libretro/libretro.cpp:448-470, src/Memory.cpp:230-283" + crc32: "3aa93ef3" + sha1: "45bedc4cbdeac66c7df59e9e599195c778d86a92" + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:773-834 (find_firmware), 852-879 (load_colecovision_firmware), 2399-2403, 2204-2205, src/Adam.cpp:28-32, src/Adam.h:53, src/Memory.cpp:310-319, src/Memory.cpp:246-249" + note: > + Loaded for both machines. Any 8192-byte image is accepted; a CRC32 + other than 3aa93ef3 logs "Unknown OS-7 revision" and runs. PAL timing + comes from the byte patched at 0x69, not from a PAL dump. + + - name: "eos.rom" + description: "ADAM EOS (Elementary Operating System) ROM" + system: coleco-adam + required: true + size: 8192 + crc32: "05a37a34" + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:881-942 (load_adam_firmware), 2372-2373, 2429-2433, 2446-2447, 2530-2534, src/Adam.cpp:33-36, src/Adam.h:54, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:537-540" + note: > + The 8 KiB EOS bank, the first half of the 16 KiB u22 chip; a CRC32 + other than 05a37a34 logs "Unknown EOS revision" and runs. Only the ADAM + needs it: ColecoVision cartridges load without it. + + - name: "writer.rom" + aliases: ["wp.rom", "wp_r80.rom"] + description: "ADAM SmartWriter word processor ROM" + system: coleco-adam + required: true + size: 32768 + crc32: "58d86a2a" + sha1: "d4aec4efe1431e56fe52d83baf9118542c525255" + validation: [size, crc32] + source_ref: "platforms/libretro/libretro.cpp:881-942 (load_adam_firmware), 2372-2373, 2429-2433, 2446-2447, 2530-2534, src/Adam.cpp:37-41, src/Adam.h:55, src/Adam.cpp:139-148, src/Adam.cpp:168-190, src/GearcolecoCore.cpp:410-415, src/Adam.cpp:531-540" + note: > + A CRC32 other than 58d86a2a logs "Unknown SmartWriter revision" and + runs. Only the ADAM needs it: ColecoVision cartridges load without it. diff --git a/emulators/geargrafx.yml b/emulators/geargrafx.yml index 25d497a9..afe9577e 100644 --- a/emulators/geargrafx.yml +++ b/emulators/geargrafx.yml @@ -3,9 +3,9 @@ type: libretro core_classification: official_port source: "https://github.com/drhelius/Geargrafx" upstream: "https://github.com/drhelius/Geargrafx" -profiled_date: "2026-03-23" -source_commit: "0a68ce8f6d3d787e84d7bc9efa30e982fa3d4c77" -core_version: "1.6.0" +profiled_date: "2026-09-17" +source_commit: "78fc3d7a1b9f55d78d8fe64c13368131a269e204" +core_version: "1.7.22" display_name: "NEC - PC Engine / SuperGrafx / CD (Geargrafx)" cores: - geargrafx @@ -16,24 +16,49 @@ systems: notes: | Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by - Ignacio Sanchez (drhelius). HuCard games run without BIOS. + Ignacio Sanchez (drhelius). HuCard games run without any external file. - CD-ROM games require a System Card BIOS from the system directory. The core - option "geargrafx_cdrom_bios" selects which card: Auto (default, maps to - syscard3.pce), System Card 1, System Card 2, System Card 3, or Game Express. - load_bios() in libretro.cpp builds "{system_directory}/{filename}" and calls - core->LoadBios(path, true) for the syscard, then always attempts to load - gexpress.pce via core->LoadBios(path, false). + CD-ROM content needs a System Card image from the frontend system directory. + load_bios() in platforms/libretro/libretro.cpp:617-658 picks the file name + from the core option geargrafx_cdrom_bios (libretro.cpp:1429-1452): + System Card 1 loads syscard1.pce, System Card 2 loads syscard2.pce, System + Card 3 (the default) and Force Game Express load syscard3.pce; the older + values Auto and Game Express are still accepted and map to the same. The + path is "{system_directory}/{name}" (libretro.cpp:644). When the card is + missing the core posts "CD-ROM BIOS not found" and continues + (libretro.cpp:645-654). gexpress.pce is then always attempted from the + same directory (libretro.cpp:656-657), silently. load_bios() runs from + retro_load_game() for CD content only (libretro.cpp:466-467) and again on + retro_reset() when a CD is loaded (libretro.cpp:312). With the libretro + VFS the file goes through load_bios_file() into LoadBiosFromBuffer(), + otherwise through Media::LoadBios() (libretro.cpp:580-615, + src/media.cpp:391-431). - LoadBios() in media.cpp reads the file, strips a 512-byte header if present, - computes CRC32, and checks it against k_game_database entries flagged with - GG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. If the CRC32 is not - found, the BIOS is marked as "Unknown" and invalid, but loading still proceeds. - Size is checked against expected constants and logged if wrong, but not enforced. + Media::LoadBiosData() (src/media.cpp:447-488) compares the file size with + GG_BIOS_SYSCARD_SIZE (0x40000) or GG_BIOS_GAME_EXPRESS_SIZE (0x8000) + (src/defines.h:53-54) and only logs a mismatch. A 512-byte header is + stripped when the size has bit 9 set, the data is copied into a zeroed + buffer of the expected size, and CRC32 is computed over that whole buffer. + GatherBIOSInfoFromDB() (src/media.cpp:777-811) looks the CRC up in + k_game_database entries flagged GG_GAMEDB_BIOS_SYSCARD or + GG_GAMEDB_BIOS_GAME_EXPRESS (src/game_db.h:48-56); an unknown CRC marks the + image "Unknown" and invalid but it is still used. The CRC is therefore the + CRC of the padded buffer, not of the file: the 16384-byte Game Express + Green dump (file CRC32 20E0A364) is recognised as 16AAF05A. - Game Express CD-ROM games are auto-detected via CRC32 lookup in game_db.h - (GG_GAMEDB_GAME_EXPRESS flag). Arcade Card games are also detected from - game_db.h and enable extra 0x30000 bytes of Card RAM for Super CD-ROM mode. + For CD content the ROM banks map onto the System Card buffer, or onto the + Game Express buffer when the disc is a Game Express title + (src/media.cpp:845-849). A Game Express disc is detected by its CRC in + game_db.h (GG_GAMEDB_GAME_EXPRESS, src/media.cpp:743-747) or forced by the + option (src/media.cpp:604-608). With no card loaded the buffer is zeros and + the CD does not boot. Arcade Card titles are also detected from game_db.h + and run on the selected System Card. + + Backup RAM is exposed through RETRO_MEMORY_SAVE_RAM (libretro.cpp:540-548) + and saved by the frontend. A connected Memory Base 128 is persisted by the + core itself as geargrafx_mb128.sav in the frontend save directory + (libretro.cpp:660-740). Both are state the core writes, not files a user + obtains. files: - name: "syscard3.pce" @@ -41,43 +66,47 @@ files: size: 262144 required: true validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:632, platforms/libretro/libretro.cpp:647-649, src/media.cpp:435-532, src/defines.h:52, src/game_db.h:50, src/game_db.h:54" + source_ref: "platforms/libretro/libretro.cpp:622, platforms/libretro/libretro.cpp:634-639, platforms/libretro/libretro.cpp:644-654, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:51-52, src/game_db.h:54" note: > - Default BIOS for CD-ROM games (cdrom_bios Auto or System Card 3). - game_db.h recognizes Japan (CRC32 6D9A73EF) and USA (CRC32 2B5B75FE) - variants under the same filename. + Loaded for the default option value System Card 3 and for Force Game + Express. game_db.h accepts three images under this name: Japan + (CRC32 6D9A73EF), the Japan NuFont Hack (CRC32 0ECEA1F3, syscard3.pce + patched with xlateFont-JPN.ips from dshadoff/SYSCARD_Translatefont) + and USA (CRC32 2B5B75FE). - name: "syscard2.pce" - description: "CD-ROM System Card 2.0" + description: "CD-ROM System Card 2.0 / 2.1" size: 262144 required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:631, platforms/libretro/libretro.cpp:641-642, src/media.cpp:435-532, src/game_db.h:48-49, src/game_db.h:53" + source_ref: "platforms/libretro/libretro.cpp:621, platforms/libretro/libretro.cpp:631-632, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:49-50, src/game_db.h:53" note: > - cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h - recognizes three variants: v2.0 Japan (CRC32 52520BC6), v2.1 Japan - (CRC32 283B74E0), and USA (CRC32 FF2A5EC3). + Loaded when geargrafx_cdrom_bios is System Card 2. game_db.h accepts + v2.0 Japan (CRC32 52520BC6), v2.1 Japan (CRC32 283B74E0) and USA + (CRC32 FF2A5EC3). - name: "syscard1.pce" description: "CD-ROM System Card 1.0 (Japan)" size: 262144 + crc32: "3F9F95A4" required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:630, platforms/libretro/libretro.cpp:638-639, src/media.cpp:435-532, src/game_db.h:47" - note: > - cdrom_bios = 'System Card 1'. Very early CD-ROM2 games only. - CRC32 3F9F95A4. + source_ref: "platforms/libretro/libretro.cpp:620, platforms/libretro/libretro.cpp:628-629, src/media.cpp:447-488, src/defines.h:53, src/game_db.h:48" + note: "Loaded when geargrafx_cdrom_bios is System Card 1." - name: "gexpress.pce" - description: "Game Express CD Card" + description: "Games Express CD Card" size: 32768 required: false validation: [size, crc32] - source_ref: "platforms/libretro/libretro.cpp:633, platforms/libretro/libretro.cpp:633-634, platforms/libretro/libretro.cpp:535-536, src/media.cpp:435-532, src/defines.h:53, src/game_db.h:55-56" + source_ref: "platforms/libretro/libretro.cpp:623, platforms/libretro/libretro.cpp:656-657, src/media.cpp:447-488, src/media.cpp:604-608, src/media.cpp:743-747, src/defines.h:54, src/game_db.h:55-56" note: > - Always loaded alongside the selected System Card BIOS (platforms/libretro/libretro.cpp:642). - Required for Game Express CD-ROM titles. game_db.h recognizes Blue Version - (CRC32 51A12D90) and Green Version (CRC32 16AAF05A). + Always attempted after the System Card, used for discs flagged + GG_GAMEDB_GAME_EXPRESS in game_db.h or when the option is Force Game + Express. game_db.h accepts the Blue Version (CRC32 51A12D90, 32768 + bytes) and the Green Version (CRC32 16AAF05A over the 32768-byte + buffer; the dump is 16384 bytes, file CRC32 20E0A364, zero-padded by + LoadBiosData). valid_bios_crc32: syscard: @@ -85,8 +114,9 @@ valid_bios_crc32: - { crc32: "52520BC6", name: "CD-ROM System Card 2.0 (J)" } - { crc32: "283B74E0", name: "CD-ROM System Card 2.1 (J)" } - { crc32: "6D9A73EF", name: "Super CD-ROM System 3.0 (J)" } + - { crc32: "0ECEA1F3", name: "Super CD-ROM System 3.0 (J) NuFont Hack" } - { crc32: "FF2A5EC3", name: "TurboGrafx CD System Card 2.0 (USA)" } - { crc32: "2B5B75FE", name: "TurboGrafx CD Super System 3.0 (USA)" } game_express: - - { crc32: "51A12D90", name: "Game Express Card Blue Version (J)" } - - { crc32: "16AAF05A", name: "Game Express Card Green Version (J)" } + - { crc32: "51A12D90", name: "Games Express CD Card Blue Version (J)" } + - { crc32: "16AAF05A", name: "Games Express CD Card Green Version (J)", file_crc32: "20E0A364", file_size: 16384 } diff --git a/emulators/hatari.yml b/emulators/hatari.yml index c8bbc9de..a159fabe 100644 --- a/emulators/hatari.yml +++ b/emulators/hatari.yml @@ -4,8 +4,8 @@ core_classification: official_port source: "https://github.com/libretro/hatari" upstream: "https://github.com/hatari/hatari" logo: "https://raw.githubusercontent.com/hatari/hatari/main/share/icons/hicolor/scalable/apps/hatari.svg" -profiled_date: "2026-09-03" -source_commit: "7fd34ccf34c6ea12b7f2b960b2f167d7f251892d" +profiled_date: "2026-09-17" +source_commit: "5831f66e05ae19435bd9d8ef1c6f9c93998ff6f4" upstream_commit: "51ed9991101fdc4623b3b38ec16e5a170cf2dffa" core_version: "2.6.1-devel" display_name: "Atari - ST/STE/TT/Falcon (Hatari)" @@ -23,50 +23,61 @@ notes: | January 2026, plus the port commits that follow the merge base recorded as upstream_commit: VFS, disk control, core options and hard disk loading. It builds as hatari_libretro (.gitlab-ci-libretro.yml:10-11, - src/CMakeLists.txt:371-402), reports library_name hatari and the - HATARI_VERSION string 2.6.1-devel (src/retro/main_retro.c:219-220, + src/CMakeLists.txt:371-404), reports library_name hatari and the + HATARI_VERSION string 2.6.1-devel (src/retro/main_retro.c:218-219, src/includes/version.h:8). The .info shipped in the tree declares no firmware (share/libretro/info/libretro-hatari.info); the - hatari_libretro.info in libretro-core-info still describes the 1.8 port - and its tos.img MD5, which this code never checks. + hatari_libretro.info in libretro-core-info took that file's metadata on + 2026-09-16 and keeps a tos.img firmware entry with the TOS 1.02 US MD5, + which this code never checks. retro_init builds <system>/tos.img, records whether it exists and passes - it as --tos (src/retro/main_retro.c:157-204); when it is absent a + it as --tos (src/retro/main_retro.c:157-207); when it is absent a frontend message is shown and retro_run only refreshes the framebuffer - (src/retro/main_retro.c:186-189, src/retro/main_retro.c:251-262). The + (src/retro/main_retro.c:186-189, src/retro/main_retro.c:250-261). The name is fixed by that check: the .rom and .tos fallbacks of File_Read - (src/tos.c:61-67, src/file.c:298-339, src/file.c:530-569) are never - reached under a frontend. Without a system directory Main_Init runs - with no --tos and the TOS path falls back to tos.img in the Hatari data - directory derived from the executable location (src/configuration.c:810-812, - src/paths.c:299-331, CMakeLists.txt:418-430). TOS_LoadImage strips the - 256-byte (34-byte for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS - at offset 0x2c, refuses images below 0x40 bytes, above 1 MB, with a - version outside 0x100-0x6FF or a load address other than 0xE00000 or - 0xFC0000, and coerces machine type and CPU to the TOS version unless - the image is a 512 KB or larger EmuTOS (src/tos.c:976-1097, - src/tos.c:838-969). ROM patches apply when the hatari_patch_tos option - is on (src/retro/options.c:250-263, src/retro/options.c:783). No TOS is - embedded. Because nSymbolsAutoLoad defaults to SYM_AUTOLOAD_DEBUGGER - (src/configuration.c:621, src/includes/configuration.h:29-31), every TOS - load also reads a <tos>.sym symbol table when one exists - (src/tos.c:1094, src/debug/symbols.c:1095-1113, - src/debug/symbols.c:1002-1020, src/debug/symbols.c:372-407). + (src/tos.c:60-66, src/file.c:312-353, src/file.c:544-583) are never + reached under a frontend. A missing --tos file fails option parsing + (src/options.c:1026-1079, src/options.c:1937-1945); Main_ErrorExit only + raises the quit flag in this build (src/retro/main_retro.c:478-490), so + Main_Init carries on with bUseTos cleared and TOS_InitImage installs the + built-in test stub of faketosData.c instead of reading a ROM + (src/tos.c:43, src/tos.c:1112-1131, src/tos.c:1151-1162). Without a + system directory Main_Init runs with no --tos, the TOS path falls back to + tos.img in the Hatari data directory derived from the executable location + (src/configuration.c:810-812, src/paths.c:305-356, CMakeLists.txt:422-434) + and have_bios is never set. TOS_LoadImage strips the 256-byte (34-byte + for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS at offset 0x2c, + refuses images below 0x40 bytes, above 1 MB, with a version outside + 0x100-0x6FF or a load address other than 0xE00000 or 0xFC0000, and + coerces machine type and CPU to the TOS version unless the image is a + 512 KB or larger EmuTOS (src/tos.c:976-1097, src/tos.c:838-969). ROM + patches apply when the hatari_patch_tos option is on and the image is + not EmuTOS (src/retro/options.c:250-263, src/retro/options.c:784, + src/tos.c:1220-1222). No TOS is embedded. Because nSymbolsAutoLoad + defaults to SYM_AUTOLOAD_DEBUGGER (src/configuration.c:621, + src/includes/configuration.h:29-31), every TOS load also reads a + <tos>.sym symbol table when one exists (src/tos.c:1094, + src/debug/symbols.c:1095-1113, src/debug/symbols.c:1002-1020, + src/debug/symbols.c:372-407). The Hatari home directory is the RetroArch save directory (src/paths.c:236-250). Configuration is read from <CONFDIR>/hatari.cfg, /etc on Unix and the current directory on Windows, then from hatari.cfg in that home directory, before the --tos argument is applied - (src/main.c:256-278, src/main.c:315-318, src/configuration.c:862-867, - src/configuration.c:1061-1071, CMakeLists.txt:440-457). Every section is - honoured: the cartridge image (src/configuration.c:487-493), floppy - images, GEMDOS directories and ACSI, SCSI and IDE images - (src/configuration.c:362-364, src/configuration.c:375-483), MIDI, printer - and RS232 host endpoints (src/configuration.c:509-543), all disabled by - default (src/configuration.c:736-761) and opened by Midi_Host_Open, - Printer_TransferByteTo and RS232_OpenCOMPort when enabled - (src/midi.c:342-367, src/printer.c:42-65, src/printer.c:89-106, - src/rs232.c:175-230). szMappingFileName is parsed + (src/main.c:260-282, src/main.c:319-322, src/configuration.c:862-867, + src/configuration.c:1061-1071, CMakeLists.txt:444-461). The boot core + options are applied right after the command line, so the machine, DSP, + CPU, FPU, memory and hatari_patch_tos keys of hatari.cfg are overwritten + by them (src/main.c:328-330, src/retro/options.c:724-789). Every other + section is honoured: the cartridge image (src/configuration.c:487-493), + floppy images, GEMDOS directories and ACSI, SCSI and IDE images + (src/configuration.c:362-364, src/configuration.c:375-483), MIDI, printer, + RS232 and SCC host endpoints (src/configuration.c:509-543), all disabled + by default (src/configuration.c:736-761) and opened by Midi_Host_Open, + Printer_TransferByteTo, RS232_OpenCOMPort and SCC_Init_Channel when + enabled (src/midi.c:342-367, src/printer.c:42-65, src/printer.c:89-106, + src/rs232.c:175-246, src/scc.c:439-500). szMappingFileName is parsed (src/configuration.c:256) but the port's Keymap_LoadRemapFile is empty (src/retro/keymap.c:222-224); only the SDL build reads a keymap file (src/sdl/keymap.c:701). The autosave snapshot is restored by @@ -76,31 +87,35 @@ notes: | src/falcon/nvram.c:334-337). Content is a floppy image, an .m3u list parsed relative to its own - directory (src/retro/disk_control.c:96-184), an .ide image put on the + directory (src/retro/disk_control.c:94-182), an .ide image put on the IDE master, a .vhd image put on ACSI 0 or a .gem marker naming a GEMDOS - directory (src/retro/main_retro.c:370-424, src/retro/harddisk.c:32-129). + directory (src/retro/main_retro.c:369-427, src/retro/harddisk.c:32-129). With a .gem, <system>/hatari/BOOT.ST is inserted into drive A when it - exists (src/retro/harddisk.c:104-127). A disk whose name ends in A pulls + exists (src/retro/harddisk.c:105-127). A disk whose name ends in A pulls the sibling ending in B into drive B (src/floppy.c:300-343, src/floppy.c:385-388), and an STX image reads its .wd1772 overlay from - the same directory (src/floppies/stx.c:807-825). Savestates pass through + the same directory (src/floppies/stx.c:807-827). Savestates pass through hatari_savestate.tmp in the system directory - (src/retro/main_retro.c:41, src/retro/main_retro.c:293-357). IPF support + (src/retro/main_retro.c:41, src/retro/main_retro.c:292-359). IPF support is compiled in from rsn8887/capsimg when ENABLE_STATIC_CAPSIMAGE is on - (cmake/BuildDependencies.cmake:93-126); the Windows and Vita CI jobs turn - it off (.gitlab-ci-libretro.yml:97, .gitlab-ci-libretro.yml:105, - .gitlab-ci-libretro.yml:189). + (cmake/BuildDependencies.cmake:93-126); the Windows jobs build with it + since September 2026 (.gitlab-ci-libretro.yml:101, + .gitlab-ci-libretro.yml:109) and the static Vita, Wii, Wii U and Switch + jobs turn it off (.gitlab-ci-libretro.yml:193, .gitlab-ci-libretro.yml:202, + .gitlab-ci-libretro.yml:210, .gitlab-ci-libretro.yml:218). File access goes through the libretro VFS when the frontend provides it - (src/retro/vfs.c:17-49, src/file.c:239-286, src/file.c:465-478). + (src/retro/vfs.c:17-48, src/file.c:253-302, src/file.c:479-492), and a + device-prefixed path such as ux0:/ counts as absolute (src/file.c:152-164). files: - name: "tos.img" path: "tos.img" description: "Atari TOS ROM image" required: true + min_size: 64 max_size: 1048576 validation: [size] - source_ref: "src/retro/main_retro.c:157-204, src/retro/main_retro.c:251-262, src/options.c:1937-1945, src/tos.c:61-67, src/tos.c:976-1097, src/tos.c:838-969, src/file.c:298-339" + source_ref: "src/retro/main_retro.c:157-207, src/retro/main_retro.c:250-261, src/options.c:1937-1945, src/tos.c:60-66, src/tos.c:976-1097, src/tos.c:838-969, src/file.c:312-353" note: > Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. The file must carry this exact name: retro_init only enables emulation when @@ -125,19 +140,20 @@ files: min_size: 40 max_size: 131076 validation: [size] - source_ref: "src/cart.c:39-46, src/cart.c:52-88, src/cart.c:97-105, src/cart.c:115-141, src/configuration.c:487-493, src/configuration.c:814" + source_ref: "src/cart.c:41-47, src/cart.c:53-88, src/cart.c:97-104, src/cart.c:114-142, src/configuration.c:487-493, src/configuration.c:814" note: > Set through hatari.cfg. Raw images up to 0x20000 bytes or .stc images of exactly 0x20004 bytes whose 4-byte header is skipped; extensions .img, .rom and .stc are tried when the configured path is missing. Replaced by the built-in GEMDOS trampoline whenever GEMDOS - hard disk emulation, extended VDI or OS tracing is on. + hard disk emulation, extended VDI, program autostart or OS tracing + is on. - name: "BOOT.ST" path: "hatari/BOOT.ST" description: "Boot floppy inserted with GEMDOS hard disk folders" required: false - source_ref: "src/retro/harddisk.c:78-129, src/retro/main_retro.c:393-396" + source_ref: "src/retro/harddisk.c:78-129, src/retro/main_retro.c:391-395" note: "Inserted into drive A when the content is a .gem file." - name: "hatari.cfg" @@ -146,10 +162,11 @@ files: required: false storage: user_provided unsourceable: "user settings in Hatari's INI format; no canonical contents" - source_ref: "src/main.c:256-278, src/main.c:315-318, src/configuration.c:862-867, src/configuration.c:1061-1071, src/paths.c:236-250, CMakeLists.txt:440-457" + source_ref: "src/main.c:260-282, src/main.c:319-322, src/main.c:328-330, src/configuration.c:862-867, src/configuration.c:1061-1071, src/paths.c:236-250, CMakeLists.txt:444-461" note: > Read from <CONFDIR>/hatari.cfg and then from hatari.cfg in the - RetroArch save directory, before the --tos argument is applied. + RetroArch save directory, before the --tos argument and the boot + core options are applied. - name: "hatari.nvram" path: null @@ -160,7 +177,7 @@ files: validation: [size] storage: user_provided unsourceable: "machine state the emulator writes itself at exit; no canonical contents" - source_ref: "src/falcon/nvram.c:96-97, src/falcon/nvram.c:116-141, src/falcon/nvram.c:148-171, src/falcon/nvram.c:282-294, src/falcon/nvram.c:334-337, src/paths.c:236-250, src/main.c:204" + source_ref: "src/falcon/nvram.c:96-97, src/falcon/nvram.c:116-141, src/falcon/nvram.c:148-171, src/falcon/nvram.c:282-294, src/falcon/nvram.c:334-337, src/paths.c:236-250, src/main.c:208" note: > Read from the RetroArch save directory at NvRam_Init; a short read keeps the built-in defaults. Saved back on exit. diff --git a/emulators/hatarib.yml b/emulators/hatarib.yml index f39b8e9e..4447fad0 100644 --- a/emulators/hatarib.yml +++ b/emulators/hatarib.yml @@ -3,10 +3,10 @@ type: libretro core_classification: community_fork source: "https://github.com/bbbradsmith/hatariB" upstream: "https://github.com/hatari/hatari" -profiled_date: "2026-09-03" -source_commit: "e9bbbd5fb35076402dc6b3c8ee3259e1809001cf" +profiled_date: "2026-09-17" +source_commit: "55a67d34238031a79d9de7f91a5c51e9771bd146" upstream_commit: "6a8e26d69fb32d61efd398dc1ad9a77122400034" -core_version: "0.5" +core_version: "1.1 unstable preview" display_name: "Atari - ST/STE/TT/Falcon (hatariB)" cores: - hatarib @@ -19,17 +19,22 @@ systems: notes: | hatariB carries Hatari 2.6.1 in its hatari/ directory, every change fenced by __LIBRETRO__ (DEVELOP.md:7-14, DEVELOP.md:44-48), and - builds as hatarib (makefile.libretro:1-3, core/core.c:1134); the - upstream_commit is the v2.6.1 tag the tree was taken from. The core - reads and writes through core_file.c, using the libretro VFS when the - frontend offers version 3 (core/core_file.c:747-790). Hatari's own + builds as hatarib (makefile.libretro:1, makefile.libretro:3, + core/core.c:1134); the upstream_commit is the v2.6.1 tag the tree was + taken from. The core reads and writes through core_file.c, using the + libretro VFS when the frontend offers version 3 + (core/core_file.c:747-790). Hatari's own directory strings are replaced by <nopath> (hatari/src/paths.c:339-350), hatari.cfg is never read because Main_LoadInitialConfig calls - core_config_init instead (hatari/src/main.c:984-1012, - core/core_config.c:1421-1426), and printer, RS232 and keymap file + core_config_init instead (hatari/src/main.c:987-1015, + core/core_config.c:1440-1445), and printer, RS232 and keymap file settings keep their disabled defaults with no option to change them (hatari/src/configuration.c:728, hatari/src/keymap.c:63, - hatari/src/keymap.c:699-718). + hatari/src/keymap.c:699-718). The AVI recorder is compiled out and + replaced by stubs (hatari/src/avi_record.c:102, + hatari/src/avi_record.c:1535-1547), and File_Length, File_Lock and + File_InputAvailable are removed with it (hatari/src/file.c:374, + hatari/src/file.c:744, hatari/src/file.c:802). At retro_set_environment the core looks for <system>/tos.img and lists every entry of <system>/hatarib/, up to 128 files and 16 directories @@ -37,29 +42,29 @@ notes: | hatarib_tos, hatarib_cartridge and hatarib_hardimg options, 100 values each: TOS candidates end in .img, .rom, .bin or .tos, cartridges in .img, .rom, .bin or .cart, hard disks are any file or subdirectory - (core/core_config.c:11, core/core_config.c:1299-1366). The TOS option + (core/core_config.c:11, core/core_config.c:1318-1385). The TOS option defaults to <tos.img> when the file exists and to EmuTOS 192uk otherwise - (core/core_config.c:68-92, core/core_config.c:1306-1321); the four + (core/core_config.c:68-92, core/core_config.c:1325-1340); the four special values select tos.img or one of the built-in images, any other value is a path under the system directory - (core/core_config.c:1094-1117). TOS_LoadImage copies the built-in image + (core/core_config.c:1112-1135). TOS_LoadImage copies the built-in image or reads the file with core_read_file_system and caches it (hatari/src/tos.c:45-63, hatari/src/tos.c:1028-1078); a failed load raises a notification and halts the CPU instead of leaving (hatari/src/tos.c:1080-1086, hatari/src/tos.c:1250-1262, - core/core.c:419-433, hatari/src/main.c:903-922). Validation is + core/core.c:419-433, hatari/src/main.c:906-925). Validation is upstream's (hatari/src/tos.c:1114-1160), but TOS_CheckSysConfig only warns and never switches machine or CPU (hatari/src/tos.c:859-1000). The hatarib_emutos_region and hatarib_emutos_framerate options rewrite the OS header word of an EmuTOS image (hatari/src/tos.c:1351-1365, - core/core_config.c:1163-1169). Symbols_LoadTOS still runs + core/core_config.c:1181-1187). Symbols_LoadTOS still runs (hatari/src/tos.c:1193) but resolves <tos>.sym against the process working directory, so nothing is read from the system directory. The three EmuTOS images are EmuTOS 1.4 built from the hatarib-custom-140 branch of bbbradsmith/emutos, which lets DESKTOP.INF and NEWDESK.INF be loaded, and are compiled in through emutos/bin_to_h.py - (DEVELOP.md:10, README.md:305-307). + (DEVELOP.md:10, README.md:313-315). A cartridge is read with core_read_file_system from the option value (hatari/src/cart.c:40, hatari/src/cart.c:57-100) and disabled with @@ -67,15 +72,15 @@ notes: | (hatari/src/cart.c:108-147). A permanent hard disk comes from system/hatarib through hatarib_hardimg and hatarib_hardtype, GEMDOS folder, ACSI, SCSI or IDE (core/core_config.c:186-233, - core/core_config.c:1000-1057, core/core_config.c:1151-1162); temporary + core/core_config.c:1018-1075, core/core_config.c:1169-1180); temporary ones are content with an .acsi, .ahd, .vhd, .scsi, .shd, .ide or .gem extension or lines of an M3U (core/core_disk.c:16-23, core/core_disk.c:676-713, core/core_disk.c:782-785, - core/core_config.c:1059-1087). Images open through core_file_open_hard + core/core_config.c:1077-1105). Images open through core_file_open_hard (hatari/src/hdc.c:903, hatari/src/hdc.c:961-963, hatari/src/ide.c:663-666) and GEMDOS folders through core_scandir_hard - (hatari/src/gemdos.c:663, hatari/src/gemdos.c:761, - hatari/src/gemdos.c:1321); hard disks are write protected by default + (hatari/src/gemdos.c:672, hatari/src/gemdos.c:770, + hatari/src/gemdos.c:1330); hard disks are write protected by default (hatari/src/configuration.c:918). Floppy content is ST, MSA, DIM, STX, IPF or CTR, also inside a ZIP, ZST or GZ, or an M3U or M3U8 list with #BOOTA, #BOOTB, #AUTO and #RES directives (core/core_disk.c:14-24, @@ -98,9 +103,10 @@ files: description: "Atari TOS ROM image, default when present" required: false has_builtin: true + min_size: 64 max_size: 1048576 validation: [size] - source_ref: "core/core_file.c:791-851, core/core_config.c:68-92, core/core_config.c:1094-1117, core/core_config.c:1306-1321, hatari/src/tos.c:1028-1160" + source_ref: "core/core_file.c:791-851, core/core_config.c:68-92, core/core_config.c:1112-1135, core/core_config.c:1325-1340, hatari/src/tos.c:1028-1160" note: > Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. Further images go in system/hatarib/ with an .img, .rom, .bin or .tos extension and @@ -116,7 +122,7 @@ files: sha1: 38dc8baf5224229df55e7d0804b6b7b6bacfc7a0 sha256: 757c571b98b955887ea6d9034513555f4263040420e9d2195cd0c6f8de06c451 crc32: 118b35b4 - source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:76, core/core_config.c:1096-1116" + source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:76, core/core_config.c:1114-1134" note: > Compiled into the core from emutos/etos1024k.img and never opened at run time. Built from the hatarib-custom-140 branch of @@ -131,7 +137,7 @@ files: sha1: ef3a3ccffcb317bff7d0dceca0abacefc3a58abc sha256: 5c679e6b1b8ed178fa079e4957ed66f9277094f0fe0a5b50c8cbea041e220250 crc32: fe4c3ff1 - source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:77, core/core_config.c:91, core/core_config.c:1096-1116" + source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:77, core/core_config.c:91, core/core_config.c:1114-1134" note: > Compiled into the core from emutos/etos192uk.img and never opened at run time. Selected when no tos.img exists and no other image is @@ -147,7 +153,7 @@ files: sha1: bb98cd8a50df53afecfe183b049eda4014fc0d05 sha256: ccccc420908012e03b4b38b8ed4530923bb04f27ab189eb2c694bf7e8509b666 crc32: 18030f9a - source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:78, core/core_config.c:1096-1116" + source_ref: "emutos/bin_to_h.py:1-30, hatari/src/tos.c:45-63, hatari/src/tos.c:1038-1046, core/core_config.c:78, core/core_config.c:1114-1134" note: > Compiled into the core from emutos/etos192us.img and never opened at run time. Built from the hatarib-custom-140 branch of @@ -161,7 +167,7 @@ files: min_size: 40 max_size: 131076 validation: [size] - source_ref: "core/core_config.c:166-185, core/core_config.c:1145-1149, core/core_config.c:1332-1344, core/core_file.c:256-259, hatari/src/cart.c:40, hatari/src/cart.c:57-100, hatari/src/cart.c:108-147" + source_ref: "core/core_config.c:166-185, core/core_config.c:1163-1167, core/core_config.c:1351-1363, core/core_file.c:256-259, hatari/src/cart.c:40, hatari/src/cart.c:57-100, hatari/src/cart.c:108-147" note: > Any file of system/hatarib/ with an .img, .rom, .bin or .cart extension. Raw images up to 0x20000 bytes or .stc images of exactly @@ -188,7 +194,7 @@ files: path: null description: "CAPSImage 5.1 shared library for IPF and CTR floppy images, Linux, macOS, Android and Raspberry Pi builds" required: false - source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:632-640, hatari/src/floppy_ipf.c:686-744, hatari/src/floppy_ipf.c:752-764, hatari/CMakeLists.txt:246, hatari/cmake/config-cmake.h:99-101, DEVELOP.md:56, DEVELOP.md:59" + source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:637-645, hatari/src/floppy_ipf.c:691-749, hatari/src/floppy_ipf.c:757-769, hatari/CMakeLists.txt:246, hatari/cmake/config-cmake.h:99-101, DEVELOP.md:56, DEVELOP.md:59" note: > Opened with dlopen on the first IPF or CTR read, from the dlopen search path or next to the core, and required to export the CAPS @@ -200,7 +206,7 @@ files: path: null description: "CAPSImage 5.1 shared library for IPF and CTR floppy images, Windows build" required: false - source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:632-640, hatari/src/floppy_ipf.c:686-744, hatari/src/floppy_ipf.c:752-764, DEVELOP.md:56" + source_ref: "hatari/src/floppy_ipf.c:320-331, hatari/src/floppy_ipf.c:637-645, hatari/src/floppy_ipf.c:691-749, hatari/src/floppy_ipf.c:757-769, DEVELOP.md:56" note: > Opened with LoadLibrary on the first IPF or CTR read, from the RetroArch directory or the library search path; without it those diff --git a/emulators/higan_sfc.yml b/emulators/higan_sfc.yml index 89a6bcc2..e7acb616 100644 --- a/emulators/higan_sfc.yml +++ b/emulators/higan_sfc.yml @@ -1,11 +1,12 @@ emulator: "higan (SFC Accuracy)" type: libretro -core_classification: community_fork -source: "https://github.com/libretro/nSide" -upstream: "https://github.com/byuu/higan" -profiled_date: "2026-03-23" -source_commit: "5e965d0db4c0d05e7e8fb6449035538781c73473" -core_version: "v105 (Super Famicom Accuracy)" +core_classification: frozen_snapshot +source: "https://gitlab.com/higan/higan" +source_branch: libretro +upstream: "https://gitlab.com/higan/higan" +profiled_date: "2026-09-17" +source_commit: "d3f592013a27cb78f17d84f90a6be6cf6f6af1d1" +core_version: "106" display_name: "Nintendo - SNES / Famicom (higan Accuracy)" cores: - higan_sfc @@ -14,124 +15,212 @@ systems: - nintendo-sgb notes: | - Fork of higan v106 by hex-usr, renamed at byuu's request. Dot-based - PPU profile (cycle-accurate, most demanding). Current nSide source - blocks accuracy build (#error at libretro.cpp:39, libretro-sfc.cpp:8). - Core is orphaned from an older nSide revision. - Coprocessor firmware loaded via icarus manifest system from system_dir. - File names follow icarus convention: {identifier}.{content}.rom. - SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories, - with fallback to SGB.sfc/ and Super GameBoy.sfc/. - SPC700 IPL ROM (ipl.rom, 64 bytes) compiled into binary. - Accuracy and balanced cartridge loading code is identical. + The libretro target lives on the libretro branch of higan's own repository, + merged with the v106 release: Emulator::Version is "106" + (higan/emulator/emulator.hpp:15) and retro_get_system_info announces it as + library_version under the name "higan (Super Famicom Accuracy)" + (higan/target-libretro/libretro.cpp:405-412, + higan/target-libretro/libretro-sfc.cpp:513). The buildbot recipe builds + higan_sfc from that branch (libretro-super + recipes/linux/cores-linux-x64-generic:71), whose last commit dates from + 2017-11-19. The library is named higan_$(corename)_libretro with corename + sfc (higan/target-libretro/GNUmakefile:1-11, + higan/target-libretro/GNUmakefile:13-19). nSide, from which + nside_sfc_balanced is built, refuses core=sfc at build time + (nSide nSide/target-libretro/GNUmakefile:1-2). + + The system manifest and the 64-byte SPC700 IPL ROM are compiled into the + binary and served from memory (higan/target-libretro/libretro-sfc.cpp:364-396, + higan/sfc/smp/smp.cpp:25-33). + + Coprocessor firmware. A ROM is imported through icarus, whose heuristics + detect the coprocessor from the cartridge header + (icarus/heuristics/super-famicom.cpp:707-759) and write a manifest naming + each firmware file with its size + (icarus/heuristics/super-famicom.cpp:482-545). DSP1 games are given the + DSP1B names; dsp1.program.rom and dsp1.data.rom are named for the Campus + Challenge '92 and Powerfest '94 cartridges + (icarus/heuristics/super-famicom.cpp:623-640, + icarus/heuristics/super-famicom.cpp:416-417, + icarus/heuristics/super-famicom.cpp:437-438). When the image does not carry + the firmware appended (icarus/heuristics/super-famicom.cpp:106-190), the + importer reports the file as missing (icarus/core/super-famicom.cpp:64-71) + and the target reads it through locate_libretro, appends it to the image + and imports again (higan/target-libretro/libretro.cpp:105-141). + locate_libretro tries the system directory, then higan/ under the user's + config and data directories (higan/target-libretro/libretro.cpp:15-35). No + hash is checked; the sizes below are those the manifest declares, and a + shorter file leaves the second import short and the load fails. + + The icarus database is read from Database/ next to the frontend + executable or under the icarus config and data directories, and takes + precedence over the heuristics when the image's SHA-256 is listed + (icarus/core/core.cpp:1-16, icarus/icarus.cpp:7-15, + icarus/core/super-famicom.cpp:17-24). It names dsp1.program.rom and + dsp1.data.rom for several DSP1 titles and sgb.boot.rom for the Super Game + Boy cartridge. + + Super Game Boy. Loading a .gb or .gbc file selects the folder named by the + higan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/ + (higan/target-libretro/libretro-sfc.cpp:154-156, + higan/target-libretro/libretro-sfc.cpp:354). program.rom is looked up in + that folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's + manifest is generated from its program.rom and *.boot.rom files + (higan/target-libretro/libretro-sfc.cpp:202-243, + icarus/core/super-famicom.cpp:1-11). The heuristics recognise the cartridge + by its header and name the boot ROM sgb1.boot.rom or sgb2.boot.rom + (icarus/heuristics/super-famicom.cpp:612-621, + icarus/heuristics/super-famicom.cpp:225-245). The Game Boy system opens + that name from the folder first and from the system directory root as a + fallback (higan/gb/system/system.cpp:54-65, + higan/sfc/coprocessor/icd2/icd2.cpp:34-38, + higan/target-libretro/libretro.cpp:200-278). Once a Game Boy image is + loaded both files are mandatory: a missing program.rom fails + load_special_bios, a missing boot ROM sets the failure flag, and + retro_load_game returns false (higan/target-libretro/libretro-sfc.cpp:223-227, + higan/target-libretro/libretro.cpp:635-642). The source tree ships no copy + of the boot ROMs or of the coprocessor firmware. files: - # DSP coprocessors - uPD7725 (split data+program format) - - name: "dsp1.data.rom" - system: nintendo-snes - required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" - + # NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words, + # 1024 x 16-bit data words - name: "dsp1.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database; other DSP1 games use dsp1b.program.rom." + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:416, icarus/heuristics/super-famicom.cpp:437" - - name: "dsp1b.data.rom" + - name: "dsp1.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + note: "Named for the Campus Challenge '92 and Powerfest '94 cartridges and by the icarus database; other DSP1 games use dsp1b.data.rom." + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:417, icarus/heuristics/super-famicom.cpp:438" - name: "dsp1b.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:482, icarus/heuristics/super-famicom.cpp:712-720" - - name: "dsp2.data.rom" + - name: "dsp1b.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:483, icarus/heuristics/super-famicom.cpp:712-720" - name: "dsp2.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:492, icarus/heuristics/super-famicom.cpp:734" - - name: "dsp3.data.rom" + - name: "dsp2.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:493, icarus/heuristics/super-famicom.cpp:734" - name: "dsp3.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:502, icarus/heuristics/super-famicom.cpp:738" - - name: "dsp4.data.rom" + - name: "dsp3.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:503, icarus/heuristics/super-famicom.cpp:738" - name: "dsp4.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:457-502" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:512, icarus/heuristics/super-famicom.cpp:742" - # CX4 coprocessor - HG51BS169 + - name: "dsp4.data.rom" + system: nintendo-snes + size: 2048 + required: false + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:513, icarus/heuristics/super-famicom.cpp:742" + + # Hitachi HG51B169 (Cx4): 1024 x 24-bit data words - name: "cx4.data.rom" system: nintendo-snes + size: 3072 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:405-454" - - # Seta coprocessors - uPD96050 - - name: "st010.data.rom" - system: nintendo-snes - required: false - source_ref: "nSide/sfc/cartridge/load.cpp:504-548" + source_ref: "higan/sfc/cartridge/load.cpp:201-225, icarus/heuristics/super-famicom.cpp:255, icarus/heuristics/super-famicom.cpp:708" + # NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words, + # 2048 x 16-bit data words - name: "st010.program.rom" system: nintendo-snes + size: 49152 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:504-548" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:522, icarus/heuristics/super-famicom.cpp:750" - - name: "st011.data.rom" + - name: "st010.data.rom" system: nintendo-snes + size: 4096 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:504-548" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:523, icarus/heuristics/super-famicom.cpp:750" - name: "st011.program.rom" system: nintendo-snes + size: 49152 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:504-548" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:533, icarus/heuristics/super-famicom.cpp:754" - # ST018 coprocessor - ARM6 - - name: "st018.data.rom" + - name: "st011.data.rom" system: nintendo-snes + size: 4096 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:362-402" + source_ref: "higan/sfc/cartridge/load.cpp:227-257, icarus/heuristics/super-famicom.cpp:534, icarus/heuristics/super-famicom.cpp:754" + # SETA ARM6 (ST018): 128 KiB program, 32 KiB data - name: "st018.program.rom" system: nintendo-snes + size: 131072 required: false - source_ref: "nSide/sfc/cartridge/load.cpp:362-402" + source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:544, icarus/heuristics/super-famicom.cpp:758" - # Super Game Boy - - name: "SGB1.sfc/sgb1.boot.rom" + - name: "st018.data.rom" + system: nintendo-snes + size: 32768 + required: false + source_ref: "higan/sfc/cartridge/load.cpp:185-199, icarus/heuristics/super-famicom.cpp:545, icarus/heuristics/super-famicom.cpp:758" + + # Super Game Boy: cartridge ROM and boot ROM per folder + - name: "program.rom" + path: "SGB1.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/gb/system/system.cpp:54-65" + note: "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom." + source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80" - - name: "SGB1.sfc/program.rom" + - name: "sgb1.boot.rom" + path: "SGB1.sfc/sgb1.boot.rom" + system: nintendo-sgb + aliases: + - "sgb.boot.rom" + size: 256 + required: false + note: "Falls back to sgb1.boot.rom at the system directory root. Named sgb.boot.rom by the icarus database entry for the cartridge." + source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:232, icarus/heuristics/super-famicom.cpp:619, icarus/core/super-famicom.cpp:17-24" + + - name: "program.rom" + path: "SGB2.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" + note: "Selected by the higan_sfc_sgb_bios option." + source_ref: "higan/target-libretro/libretro-sfc.cpp:202-243, higan/sfc/cartridge/load.cpp:77-80" - - name: "SGB2.sfc/sgb2.boot.rom" + - name: "sgb2.boot.rom" + path: "SGB2.sfc/sgb2.boot.rom" system: nintendo-sgb + size: 256 required: false - source_ref: "nSide/gb/system/system.cpp:54-65" - - - name: "SGB2.sfc/program.rom" - system: nintendo-sgb - required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" + note: "Falls back to sgb2.boot.rom at the system directory root." + source_ref: "higan/gb/system/system.cpp:54-65, icarus/heuristics/super-famicom.cpp:243, icarus/heuristics/super-famicom.cpp:614" diff --git a/emulators/higan_sfc_balanced.yml b/emulators/higan_sfc_balanced.yml index 68620e36..c5e3ed52 100644 --- a/emulators/higan_sfc_balanced.yml +++ b/emulators/higan_sfc_balanced.yml @@ -3,131 +3,221 @@ type: libretro core_classification: enhanced_fork source: "https://github.com/libretro/nSide" upstream: "https://gitlab.com/higan/higan" -profiled_date: "2026-03-23" -source_commit: "5e965d0db4c0d05e7e8fb6449035538781c73473" -core_version: "v105 (Super Famicom Balanced)" -display_name: "Nintendo - SNES / Famicom (nSide Balanced)" +profiled_date: "2026-09-17" +source_commit: "f8a3ac45ef31a3a367d0a9ecd925110124e73eff" +upstream_commit: "3353efd3a1087f4d16d9b9fd2a8e465087ab8ec0" +core_version: "106.25" +display_name: "Nintendo - SNES / SFC (nSide Balanced)" cores: + - nside_sfc_balanced - higan_sfc_balanced systems: - nintendo-snes - nintendo-sgb +exclusion_note: > + The .info declares SGB1.sfc/sgb1.boot.rom and SGB2.sfc/sgb2.boot.rom. The + core opens the boot ROM under the name the manifest derives from the + architecture, lr35902.boot.rom, in the selected SGB folder + (nSide/gb/system/system.cpp:60-61, nSide/emulator/game.hpp:101-104). A + sgb1.boot.rom or sgb2.boot.rom is only looked up, at the system directory + root, when the Super Game Boy cartridge is itself imported as an SFC game + (icarus/core/super-famicom.cpp:49-54), a load that ends on the Game Boy + cartridge manifest the libretro target cannot provide + (nSide/target-libretro/libretro.cpp:284-287). + notes: | - Fork of higan v106 by hex-usr, renamed at byuu's request. Balanced - PPU profile (scanline-precision, faster than dot-based accuracy). - Coprocessor firmware loaded via icarus manifest system from system_dir. - File names follow icarus convention: {identifier}.{content}.rom. - SGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories, - with fallback to SGB.sfc/ and Super GameBoy.sfc/. + Fork of higan by hex_usr (nSide v009r16, README.txt:1-4), synchronised with + higan v106r25: Emulator::Version is "106.25" (nSide/emulator/emulator.hpp:16) + and retro_get_system_info announces it as library_version under the name + "higan (Super Famicom Balanced)" (nSide/target-libretro/libretro.cpp:87-93, + nSide/target-libretro/libretro-sfc.cpp:486). The balanced profile keeps a + scanline-based PPU; the accuracy profile is refused at build time + (nSide/target-libretro/GNUmakefile:1-2, nSide/target-libretro/libretro.cpp:38-39). + The library is named nside_$(corename)_libretro with corename sfc_balanced + (nSide/target-libretro/GNUmakefile:4-13, nSide/target-libretro/GNUmakefile:18-23), + which the GitLab CI publishes as nside_sfc_balanced (.gitlab-ci.yml:15, + .gitlab-ci.yml:53-54). The core options keep the higan_sfc_ prefix so the + settings are shared with higan's core (nSide/target-libretro/libretro-sfc.cpp:321-329). + + System files manifest.bml, boards.bml and ipl.rom are compiled into the + binary and served from memory (nSide/target-libretro/libretro-sfc.cpp:335-341, + nSide/target-libretro/resource/sfc.bml:1-4, nSide/sfc-balanced/smp/smp.cpp:25-33). + + Coprocessor firmware. A ROM is imported through icarus, whose manifest names + each firmware memory by architecture and identifier + (icarus/heuristics/super-famicom.cpp:90-115). When the image does not carry + the firmware appended (icarus/heuristics/super-famicom.cpp:406-414), the + importer reports {identifier}.{content}.rom as missing + (icarus/core/super-famicom.cpp:46-57) and the libretro target reads that + name through locate_libretro, appends it to the image and imports again + (nSide/target-libretro/icarus.cpp:111-142). locate_libretro tries the system + directory, then higan/ and nSide/ under the user's config and data + directories (nSide/target-libretro/libretro.cpp:3-31). Identifiers come from + the cartridge label: DSP1 for PILOTWINGS, DSP2 for DUNGEON MASTER, DSP3 for + SD Gundam GX, DSP4 for TOP GEAR 3000 and PLANETS CHAMP TG3000, DSP1B + otherwise; ST011 for 2DAN MORITA SHOUGI, ST010 otherwise; ST018 and Cx4 have + a single revision (icarus/heuristics/super-famicom.cpp:512-541). No hash is + checked; a file shorter than the size the manifest declares leaves the + second import short and the load fails. The sizes below are those declared + by the heuristics. + + Super Game Boy. Loading a .gb or .gbc file selects the folder named by the + higan_sfc_sgb_bios option, SGB1.sfc/ by default or SGB2.sfc/ + (nSide/target-libretro/libretro-sfc.cpp:142-145, + nSide/target-libretro/libretro-sfc.cpp:326). program.rom is looked up in + that folder, then in SGB.sfc/ and Super GameBoy.sfc/, and the folder's + manifest is generated from its program.rom and *.boot.rom files + (nSide/target-libretro/libretro-sfc.cpp:179-215, + icarus/core/super-famicom.cpp:1-11). The Game Boy system then opens the boot + ROM the manifest names, lr35902.boot.rom, from the folder first and from the + system directory root as a fallback (nSide/gb/system/system.cpp:54-65, + nSide/target-libretro/program.cpp:19-81). Once a Game Boy image is loaded + both files are mandatory: a missing one sets the failure flag and + retro_load_game returns false + (nSide/target-libretro/program.cpp:75-78, nSide/target-libretro/libretro.cpp:286). + The SHA-1 values on the boot ROMs and on cx4.data.rom are those of the copies + the source tree ships in icarus/firmware/. files: - # DSP coprocessors - uPD7725 (split data+program format) + # NEC uPD7725 (DSP1, DSP1B, DSP2, DSP3, DSP4): 2048 x 24-bit program words, + # 1024 x 16-bit data words - name: "dsp1.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:534" - name: "dsp1.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:534" - name: "dsp1b.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:539" - name: "dsp1b.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:539" - name: "dsp2.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:535" - name: "dsp2.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:535" - name: "dsp3.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:536" - name: "dsp3.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:536" - name: "dsp4.data.rom" system: nintendo-snes + size: 2048 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:115, icarus/heuristics/super-famicom.cpp:537-538" - name: "dsp4.program.rom" system: nintendo-snes + size: 6144 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:457-501, icarus/heuristics/super-famicom.cpp:114, icarus/heuristics/super-famicom.cpp:537-538" - # CX4 coprocessor - HG51BS169 + # Hitachi HG51BS169 (Cx4): 1024 x 24-bit data words - name: "cx4.data.rom" system: nintendo-snes + size: 3072 + sha1: "a002f4efba42775a31185d443f3ed1790b0e949a" required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:405-454, icarus/heuristics/super-famicom.cpp:110, icarus/heuristics/super-famicom.cpp:529-531" - # Seta coprocessors - uPD96050 + # NEC uPD96050 (ST010, ST011): 16384 x 24-bit program words, + # 2048 x 16-bit data words - name: "st010.data.rom" system: nintendo-snes + size: 4096 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:516-521" - name: "st010.program.rom" system: nintendo-snes + size: 49152 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:516-521" - name: "st011.data.rom" system: nintendo-snes + size: 4096 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:99, icarus/heuristics/super-famicom.cpp:519" - name: "st011.program.rom" system: nintendo-snes + size: 49152 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:504-548, icarus/heuristics/super-famicom.cpp:98, icarus/heuristics/super-famicom.cpp:519" - # ST018 coprocessor - ARM6 + # SETA ARM6 (ST018): 128 KiB program, 32 KiB data - name: "st018.data.rom" system: nintendo-snes + size: 32768 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:92, icarus/heuristics/super-famicom.cpp:512-514" - name: "st018.program.rom" system: nintendo-snes + size: 131072 required: false - source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402" + source_ref: "nSide/sfc-balanced/cartridge/load.cpp:362-402, icarus/heuristics/super-famicom.cpp:91, icarus/heuristics/super-famicom.cpp:512-514" - # Super Game Boy - - name: "SGB1.sfc/sgb1.boot.rom" + # Super Game Boy: cartridge ROM and boot ROM per folder + - name: "program.rom" + path: "SGB1.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/gb/system/system.cpp:54-65" + note: "Also looked up as SGB.sfc/program.rom and Super GameBoy.sfc/program.rom." + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162" - - name: "SGB1.sfc/program.rom" + - name: "lr35902.boot.rom" + path: "SGB1.sfc/lr35902.boot.rom" + system: nintendo-sgb + size: 256 + sha1: "aa2f50a77dfb4823da96ba99309085a3c6278515" + required: false + note: "Falls back to lr35902.boot.rom at the system directory root." + source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527" + + - name: "program.rom" + path: "SGB2.sfc/program.rom" system: nintendo-sgb required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" + note: "Selected by the higan_sfc_sgb_bios option." + source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215, nSide/sfc-balanced/cartridge/load.cpp:159-162" - - name: "SGB2.sfc/sgb2.boot.rom" + - name: "lr35902.boot.rom" + path: "SGB2.sfc/lr35902.boot.rom" system: nintendo-sgb + size: 256 + sha1: "93407ea10d2f30ab96a314d8eca44fe160aea734" required: false - source_ref: "nSide/gb/system/system.cpp:54-65" - - - name: "SGB2.sfc/program.rom" - system: nintendo-sgb - required: false - source_ref: "nSide/target-libretro/libretro-sfc.cpp:179-215" + note: "Falls back to lr35902.boot.rom at the system directory root." + source_ref: "nSide/gb/system/system.cpp:54-65, nSide/emulator/game.hpp:101-104, icarus/heuristics/super-famicom.cpp:103, icarus/heuristics/super-famicom.cpp:523-527" diff --git a/emulators/idtech4a++.yml b/emulators/idtech4a++.yml index 885ea2b7..bcb337f9 100644 --- a/emulators/idtech4a++.yml +++ b/emulators/idtech4a++.yml @@ -4,8 +4,8 @@ core_classification: game_engine source: "https://github.com/glKarin/com.n0n3m4.diii4a" upstream: "https://github.com/glKarin/com.n0n3m4.diii4a" author: "glKarin" -profiled_date: "2026-08-11" -source_commit: "dea1eb9f122cfae042961cfc32a3474e59354589" +profiled_date: "2026-09-17" +source_commit: "e4d1382275155b18d51f91c3e1af35ca1fd16e13" core_version: "1.1.0harmattan72" display_name: "id Tech engine collection (idTech4A++)" cores: @@ -291,15 +291,19 @@ files: required: true bundled: true category: game_data - size: 98396 - md5: 3155df291027d253e2596db3fca1ac4a - sha1: 2651f1eff1785999918c08600f079e1ad4a206e7 + size: 98425 + md5: a0fcf6c54d453a80c8aac693d17979b8 + sha1: 604636a62dd04c90392b19adf61d3a62381dfb02 description: "The Dark Mod GLSL shader set rewritten for OpenGL ES" note: >- Unpacked into the standalone directory as `glslprogs/`, the tree the renderer compiles its programs from. Version-stamped with the engine - release so a Dark Mod update replaces it. - source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391" + release and a patch number, so a Dark Mod update or a shader fix replaces + it. TDM_GLSL_SHADER_VERSION reads 2.14.2 here: the four SSAO programs + moved their uniform-dependent initialisers out of global scope and cast + their integer terms to float. The 2.14.1 pack it replaced is kept as a + variant. + source_ref: "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391, Q3E/src/main/jni/darkmod/glslprogs/ssao.frag.glsl:78-80, 163-166" - name: renderprogs.pk4 required: true diff --git a/emulators/jollycv.yml b/emulators/jollycv.yml index fc5695be..ef970f75 100644 --- a/emulators/jollycv.yml +++ b/emulators/jollycv.yml @@ -3,9 +3,10 @@ type: libretro core_classification: official_port source: "https://github.com/libretro/jollycv" upstream: "https://gitlab.com/jgemu/jollycv" -profiled_date: "2026-03-24" -source_commit: "eb14292005d51e2bef954cb75145981037ee9988" -core_version: "2.0.0" +profiled_date: "2026-09-17" +source_commit: "2790d59c7194d29e83f8603ffd7e9da17f11575e" +upstream_commit: "18875ffdb1891cec04217cf02928af563a3af9d8" +core_version: "2.1.0" display_name: "ColecoVision/CreatiVision/My Vision (JollyCV)" cores: - jollycv @@ -15,70 +16,76 @@ systems: - myvision notes: | - JollyCV is a multi-system emulator by Rupert Carmichael supporting - ColecoVision (with Super Game Module), CreatiVision, and My Vision. + JollyCV emulates the ColecoVision (with Super Game Module), the VTech + CreatiVision and the Nichibutsu My Vision. The libretro port and the + Jolly Good build share the same src/ tree; only the front end differs. - BIOS handling depends on the detected system type (set via core option - or auto-detected from ROM database via jcv_process_hash/jcv_get_dbflags): + The libretro port picks the system from the file name + (libretro/libretro.c:670-679): ".myv" is My Vision, ".rom" and ".bin" + are looked up by MD5 in the CreatiVision table (src/jcv_db.c:109-176, + reached through src/jollycv.c:118-120) and fall back to ColecoVision, + ".col" is ColecoVision. A CreatiVision image whose MD5 is not in the + table runs as ColecoVision. Version 2.1.0 moved that table from + libretro/gamedb.h into src/jcv_db.c so both builds share it. - - ColecoVision (JCV_SYS_COLECO): loads "coleco.rom" from system dir. - BIOS is mapped at 0x0000-0x1FFF. Size must be exactly 8192 bytes - (SIZE_CVBIOS = SIZE_8K = 0x2000). Load fails if size mismatches. - Without the BIOS, ColecoVision games will not run (load returns false). + BIOS files are read from the front end's system directory, no + subdirectory, as "<system_dir>/coleco.rom" or "<system_dir>/bioscv.rom" + (libretro/libretro.c:696-716). jcv_bios_load_file (src/jollycv.c:406-432) + opens the file, reads it whole and hands the buffer to + jcv_coleco_bios_load or jcv_crvision_bios_load, which keep it only when + the size is exactly SIZE_CVBIOS (8192) or SIZE_CRVBIOS (2048). The return + value of that size check is dropped at src/jollycv.c:427, so a file of the + wrong size passes the loader while the BIOS pointer stays NULL; the first + BIOS read (src/jcv_coleco.c:281-282, src/jcv_crvision.c:443-444) then + dereferences it. A missing file fails retro_load_game. My Vision loads no + BIOS (libretro/libretro.c:717-719). - - CreatiVision (JCV_SYS_CRVISION): loads "bioscv.rom" from system dir. - BIOS is mapped at 0xF800-0xFFFF. Size must be exactly 2048 bytes - (SIZE_CRVBIOS = SIZE_2K = 0x800). Without the BIOS, CreatiVision - games will not run. + The Jolly Good build reads the same two names from the front end's BIOS + path (jg.c:463-481) and declares them through jg_get_bioslist with an + MD5 each (jg.c:151-156). The core never compares those MD5; the reference + front end hashes the file against them for a debug log only + (jgrf src/jgrf.c:441-458). The md5: fields below carry these values. - - My Vision (JCV_SYS_MYVISION): no BIOS required. - - The libretro port constructs paths via snprintf("%s%c%s", sysdir, pss, - filename) in libretro.c:699-711. jcv_bios_load_file() opens the file, - reads it fully, then delegates to jcv_coleco_bios_load() or - jcv_crvision_bios_load() which validate size before copying. - - ColecoVision cartridge header bytes at offset 0x0000-0x0001 control - boot behavior: 0xAA55 shows the BIOS title screen, 0x55AA jumps - directly to the game code vector. - - The core includes a built-in ROM database with MD5 hashes (gamedb.h) - for game-specific flags, but this is for game compatibility, not BIOS - verification. + ColecoVision cartridges start with 0xAA55 to show the BIOS title screen or + 0x55AA to jump straight to the game vector (src/jcv_coleco.c:421-426). + The MD5 database of ColecoVision games in src/jcv_db.c selects cartridge + mappers and controller flags. files: - # --- ColecoVision BIOS (required for CV games) --- - name: "coleco.rom" system: colecovision + description: "ColecoVision BIOS" required: true size: 8192 + md5: "2c66f5911e5b42b8ebe113403548eee7" validation: [size] - source_ref: "libretro/libretro.c:701, src/jcv_coleco.c:402-406" - note: "Mapped at 0x0000-0x1FFF. Replaced by SGM lower RAM when Super Game Module is active. Must be exactly 8192 bytes." + source_ref: "libretro/libretro.c:697-703, src/jollycv.c:406-432, src/jcv_coleco.c:402-410, jg.c:151-153" + note: "Mapped at 0x0000-0x1FFF, replaced by the lower 8K of SGM RAM when the Super Game Module enables it. The MD5 is the value the JG bioslist declares; the core compares the size only." - # --- CreatiVision BIOS (required for CreatiVision games) --- - name: "bioscv.rom" system: creativision description: "VTech CreatiVision BIOS ROM" required: true size: 2048 + md5: "3b1ef759d8e3fb4071582efd33dd05f9" validation: [size] - source_ref: "libretro/libretro.c:711, src/jcv_crvision.c:315-318" - note: "Mapped at 0xF800-0xFFFF. Must be exactly 2048 bytes." + source_ref: "libretro/libretro.c:707-713, src/jollycv.c:406-432, src/jcv_crvision.c:316-324, jg.c:154-155" + note: "Mapped at 0xF800-0xFFFF. The MD5 is the value the JG bioslist declares; the core compares the size only." platform_details: colecovision: bios_filename: "coleco.rom" bios_size: 8192 memory_map: "0x0000-0x1FFF" - source_ref: "src/jcv_coleco.c:269-281" + source_ref: "src/jcv_coleco.c:268-283" creativision: bios_filename: "bioscv.rom" bios_size: 2048 memory_map: "0xF800-0xFFFF" - source_ref: "src/jcv_crvision.c:315-337, 441" + source_ref: "src/jcv_crvision.c:316-318, 443-445" myvision: bios_required: false - note: "No BIOS needed. My Vision games run without any system ROM." + source_ref: "libretro/libretro.c:717-719" + note: "No BIOS is loaded for My Vision." diff --git a/emulators/mesence.yml b/emulators/mesence.yml index b4d8f5f9..a2e40b18 100644 --- a/emulators/mesence.yml +++ b/emulators/mesence.yml @@ -1,11 +1,17 @@ emulator: MesenCE -type: standalone +type: standalone + libretro core_classification: enhanced_fork -source: "https://github.com/nesdev-org/MesenCE" +source: + standalone: "https://github.com/nesdev-org/MesenCE" + libretro: "https://github.com/libretro/MesenCE" upstream: "https://github.com/SourMesen/Mesen2" -profiled_date: "2026-08-06" -source_commit: "af2342818ca81a93b346146802047760400fc7b1" -core_version: "2.2.1" +profiled_date: "2026-09-17" +source_commit: + standalone: "20f497c9620a7f4e55b7752e1d22734f9d7492fa" + libretro: "4c4e069f16a8ad6ed79e046046c56d51558c7daf" +core_version: + standalone: "2.2.1" + libretro: "2.0.0" display_name: "Multi-System (MesenCE)" cores: [mesence, mesen2] systems: @@ -35,131 +41,340 @@ notes: | GB/GBC/GBA, PC Engine (including CD-ROM and SuperGrafx), SMS/Game Gear/ SG-1000/ColecoVision and WonderSwan (including Pocket Challenge V2). - All firmware is loaded from a flat <home>/Firmware/ folder - (FolderUtilities::GetFirmwareFolder, Utilities/FolderUtilities.cpp:81-91). - The core enforces exact file sizes at load time (FirmwareHelper.h - AttemptLoadFirmware). The UI additionally knows SHA256 values per file - (UI/Interop/FirmwareTypeExtensions.cs) and warns on mismatch when - importing through the firmware prompt, but a mismatched file can still - be used. The sha256 values below come from that table. + The libretro port lives in the libretro fork of the same tree: Libretro/ + wraps the core and Makefile.libretro compiles every file under Core/ with + LIBRETRO defined (Makefile.libretro:165-166,183-184). The fork branched from + af2342818ca81a93b346146802047760400fc7b1 and does not touch + Core/Shared/FirmwareHelper.h, so both builds read the same names with the + same size checks. The buildbot publishes it as mesen2_libretro; the port + announces library_version 2.0.0 (Libretro/libretro.cpp:2803) while the + compiled core reports 2.2.1 (Core/Shared/EmuSettings.cpp:165-168). - SNES DSP-1/1B/2/3/4 and ST010/ST011 firmware is loaded from the combined - file listed below, or from a split pair <name>.program.rom + <name>.data.rom + Firmware folder. Standalone reads <home>/Firmware/ (Utilities/FolderUtilities.cpp:81-91). + The libretro port sets the home folder to the frontend system directory + and overrides the firmware folder with that same directory + (Libretro/libretro.cpp:2253-2256), so every firmware sits at the system + directory root. Satellaview streams and MesenNesDB.txt are read relative + to the home folder in both builds, which puts them under system/Satellaview/ + and system/MesenNesDB.txt for libretro. + + Size checks are exact at load time (FirmwareHelper.h AttemptLoadFirmware). + The standalone UI additionally knows SHA256 values per file + (UI/Interop/FirmwareTypeExtensions.cs) and warns on mismatch when + importing through the firmware prompt; a mismatched file can still be + used. The sha256 values below come from that table. The libretro port + has no prompt: a MissingFirmware notification reaches no listener, the + retry in FirmwareHelper fails the same way and the error goes to the OSD + (Libretro/LibretroMessageManager.h:26-39). + + SNES DSP-1/1B/2/3/4 and ST010/ST011 firmware is read as the combined + file first, then as the split pair <name>.program.rom + <name>.data.rom (FirmwareHelper.h AttemptLoadDspFirmware). ROM dumps with the firmware appended to the game ROM need no external file (LoadDspFirmware embedded - path, Core/Shared/FirmwareHelper.h:131-135). + path, Core/Shared/FirmwareHelper.h:132-135). GB/GBC/SGB boot ROM images are compiled into the core - (Core/Gameboy/GbBootRom.h:8,49,99); the external files below override them. - Super Game Boy mode falls back to the plain GB core when SGB1.sfc/SGB2.sfc - is missing (Core/SNES/BaseCartridge.cpp:698-717). + (Core/Gameboy/GbBootRom.h:8,49,99); the external files override them. + Super Game Boy mode falls back to the plain GB core when the SNES-side + ROM is missing (Core/SNES/BaseCartridge.cpp:698-716). GameboyConfig + keeps UseSgb2 at true and no core option changes it + (Core/Shared/SettingTypes.h:433), so the libretro build only ever asks + for SGB2.sfc and sgb2_boot.bin; SGB1.sfc and sgb_boot.bin are standalone + reads. The libretro port also offers a "Super Game Boy" subsystem taking + a GB ROM plus an SNES-side ROM (Libretro/libretro.cpp:1041-1052): the + second entry is copied into the system directory as SGB1.sfc or SGB2.sfc + by size for the duration of the load, then removed or restored + (Libretro/libretro.cpp:2627-2677,2692-2761). - Satellaview data broadcasts are read from <home>/Satellaview/ as - BSX<channel>-<index>.bin (Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74). Five stream files and - MesenNesDB.txt ship inside the application binary (Dependencies.zip) and - are extracted to the home folder at startup; user-provided replacements - are preserved (UI/Utilities/DependencyHelper.cs:14-66). NES and SNES - cheat databases (CheatDb.Nes.json, CheatDb.Snes.json) are read directly - from the embedded archive and never touch the filesystem + WonderSwan boot ROMs are read only when WsConfig.UseBootRom is on + (Core/WS/WsConsole.cpp:145-150). The libretro port never sets it, so + those three files are standalone reads. + + PC Engine CD. For .cue content the libretro port first materialises + "[BIOS] Super CD-ROM System (Japan) (v3.0).pce" in the system directory + from syscard3.pce, syscard3.bin, syscard.pce or syscard.bin when the + canonical file is absent or not 256 KB: a 0x40200 or 0x60200 source is + read past its 512-byte header, only the first 256 KB are written, and the + stub is removed after the load (Libretro/libretro.cpp:108-196,2347-2358,2380-2384). + Then FirmwareHelper reads the canonical name or syscard3.pce at exactly + 256 KB, in both builds. + + NES game database. The libretro port embeds a 6213-line MesenDB.txt + (Libretro/libretro.cpp:85-86,592-594) and then reads MesenNesDB.txt from + the home folder on the first lookup (Core/NES/GameDatabase.cpp:92-103), + merging its 10668 entries over the embedded ones. Standalone deploys the + file from the application's Dependencies.zip. Five Satellaview stream + files ship the same way and are extracted to the home folder at startup; + user replacements are preserved (UI/Utilities/DependencyHelper.cs:14-67). + Nothing deploys them for libretro. NES and SNES cheat databases + (CheatDb.Nes.json, CheatDb.Snes.json) are read directly from the + embedded archive and never touch the filesystem (DependencyHelper.cs GetFileContent, UI/ViewModels/CheatDatabaseViewModel.cs:33). - HdPacks are per-game texture/audio replacements under <home>/HdPacks/, - game content rather than system files. + MesenPalette.pal is a libretro read: the mesen_palette core option value + Custom loads it from the home folder, 192 or 1536 bytes + (Libretro/libretro.cpp:1178-1204,1304-1306). + + HdPacks are per-game texture/audio replacements under <home>/HdPacks/ + (system/HdPacks/ for libretro), game content rather than system files. + + The libretro port lists nes|fds|unf|unif|sfc|smc|gb|gbc|gba|pce|sgx|cue| + sms|gg|ws|wsc as valid extensions (Libretro/libretro.cpp:2838-2840). The + load path itself dispatches on the console extension tables, so .bs, .st, + .col, .sg, .pc2 and .studybox content loads when the frontend passes it. + +exclusion_note: >- + The .info declares syscard1.pce, syscard2.pce and gexpress.pce. No code + path opens those names: the CD firmware loader reads + "[BIOS] Super CD-ROM System (Japan) (v3.0).pce" or syscard3.pce and the + Games Express loader reads "[BIOS] Games Express CD Card (Japan).pce" or + gecard.pce (Core/Shared/FirmwareHelper.h:330-368); the libretro stub + adds syscard3.bin, syscard.pce and syscard.bin as sources for the Super + CD-ROM image only (Libretro/libretro.cpp:114). files: # ------------------------------------------------------- # SNES coprocessor firmware # ------------------------------------------------------- - name: "dsp1.rom" - path: "Firmware/dsp1.rom" + path: "dsp1.rom" + standalone_path: "Firmware/dsp1.rom" aliases: ["SNES_dsp1.rom"] system: nintendo-snes required: true size: 8192 validation: [size] sha256: "91e87d11e1c30d172556bed2211cce2efa94ba595f58c5d264809ef4d363a97b" - note: "DSP-1 program+data (0x1800+0x800). Split pair dsp1.program.rom + dsp1.data.rom also accepted. Not needed when the game dump embeds the firmware." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:59-79,130-152" + note: "DSP-1 program+data (0x1800+0x800). Tried before the split pair dsp1.program.rom + dsp1.data.rom. Not needed when the game dump embeds the firmware." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:59-79,130-152, UI/Interop/FirmwareTypeExtensions.cs:11" + + - name: "dsp1.program.rom" + path: "dsp1.program.rom" + standalone_path: "Firmware/dsp1.program.rom" + system: nintendo-snes + required: false + size: 6144 + validation: [size] + note: "DSP-1 program ROM, read with dsp1.data.rom when dsp1.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:69-76" + + - name: "dsp1.data.rom" + path: "dsp1.data.rom" + standalone_path: "Firmware/dsp1.data.rom" + system: nintendo-snes + required: false + size: 2048 + validation: [size] + note: "DSP-1 data ROM, read with dsp1.program.rom when dsp1.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:69-76" - name: "dsp1b.rom" - path: "Firmware/dsp1b.rom" + path: "dsp1b.rom" + standalone_path: "Firmware/dsp1b.rom" aliases: ["SNES_dsp1b.rom"] system: nintendo-snes required: true size: 8192 validation: [size] sha256: "d789cb3c36b05c0b23b6c6f23be7aa37c6e78b6ee9ceac8d2d2aa9d8c4d35fa9" - note: "DSP-1B revision. Split pair dsp1b.program.rom + dsp1b.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:59-79" + note: "DSP-1B revision. Tried before the split pair dsp1b.program.rom + dsp1b.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:12" + + - name: "dsp1b.program.rom" + path: "dsp1b.program.rom" + standalone_path: "Firmware/dsp1b.program.rom" + system: nintendo-snes + required: false + size: 6144 + validation: [size] + note: "DSP-1B program ROM, read with dsp1b.data.rom when dsp1b.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:69-76" + + - name: "dsp1b.data.rom" + path: "dsp1b.data.rom" + standalone_path: "Firmware/dsp1b.data.rom" + system: nintendo-snes + required: false + size: 2048 + validation: [size] + note: "DSP-1B data ROM, read with dsp1b.program.rom when dsp1b.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:69-76" - name: "dsp2.rom" - path: "Firmware/dsp2.rom" + path: "dsp2.rom" + standalone_path: "Firmware/dsp2.rom" aliases: ["SNES_dsp2.rom"] system: nintendo-snes required: true size: 8192 validation: [size] sha256: "03ef4ef26c9f701346708cb5d07847b5203cf1b0818bf2930acd34510ffdd717" - note: "DSP-2 (Dungeon Master). Split pair dsp2.program.rom + dsp2.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:59-79" + note: "DSP-2 (Dungeon Master). Tried before the split pair dsp2.program.rom + dsp2.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:13" + + - name: "dsp2.program.rom" + path: "dsp2.program.rom" + standalone_path: "Firmware/dsp2.program.rom" + system: nintendo-snes + required: false + size: 6144 + validation: [size] + note: "DSP-2 program ROM, read with dsp2.data.rom when dsp2.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:69-76" + + - name: "dsp2.data.rom" + path: "dsp2.data.rom" + standalone_path: "Firmware/dsp2.data.rom" + system: nintendo-snes + required: false + size: 2048 + validation: [size] + note: "DSP-2 data ROM, read with dsp2.program.rom when dsp2.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:69-76" - name: "dsp3.rom" - path: "Firmware/dsp3.rom" + path: "dsp3.rom" + standalone_path: "Firmware/dsp3.rom" aliases: ["SNES_dsp3.rom"] system: nintendo-snes required: true size: 8192 validation: [size] sha256: "0971b08f396c32e61989d1067dddf8e4b14649d548b2188f7c541b03d7c69e4e" - note: "DSP-3 (SD Gundam GX). Split pair dsp3.program.rom + dsp3.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:59-79" + note: "DSP-3 (SD Gundam GX). Tried before the split pair dsp3.program.rom + dsp3.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:14" + + - name: "dsp3.program.rom" + path: "dsp3.program.rom" + standalone_path: "Firmware/dsp3.program.rom" + system: nintendo-snes + required: false + size: 6144 + validation: [size] + note: "DSP-3 program ROM, read with dsp3.data.rom when dsp3.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:69-76" + + - name: "dsp3.data.rom" + path: "dsp3.data.rom" + standalone_path: "Firmware/dsp3.data.rom" + system: nintendo-snes + required: false + size: 2048 + validation: [size] + note: "DSP-3 data ROM, read with dsp3.program.rom when dsp3.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:69-76" - name: "dsp4.rom" - path: "Firmware/dsp4.rom" + path: "dsp4.rom" + standalone_path: "Firmware/dsp4.rom" aliases: ["SNES_dsp4.rom"] system: nintendo-snes required: true size: 8192 validation: [size] sha256: "752d03b2d74441e430b7f713001fa241f8bbcfc1a0d890ed4143f174dbe031da" - note: "DSP-4 (Top Gear 3000). Split pair dsp4.program.rom + dsp4.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:59-79" + note: "DSP-4 (Top Gear 3000). Tried before the split pair dsp4.program.rom + dsp4.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:15" + + - name: "dsp4.program.rom" + path: "dsp4.program.rom" + standalone_path: "Firmware/dsp4.program.rom" + system: nintendo-snes + required: false + size: 6144 + validation: [size] + note: "DSP-4 program ROM, read with dsp4.data.rom when dsp4.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:69-76" + + - name: "dsp4.data.rom" + path: "dsp4.data.rom" + standalone_path: "Firmware/dsp4.data.rom" + system: nintendo-snes + required: false + size: 2048 + validation: [size] + note: "DSP-4 data ROM, read with dsp4.program.rom when dsp4.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:69-76" - name: "st010.rom" - path: "Firmware/st010.rom" + path: "st010.rom" + standalone_path: "Firmware/st010.rom" aliases: ["SNES_st010.rom"] system: nintendo-snes required: true size: 53248 validation: [size] sha256: "fa9bced838fedea11c6f6ace33d1878024bdd0d02cc9485899d0bdd4015ec24c" - note: "ST010 (F1 ROC II) program+data (0xC000+0x1000). Split pair st010.program.rom + st010.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:59-79" + note: "ST010 (F1 ROC II) program+data (0xC000+0x1000). Tried before the split pair st010.program.rom + st010.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:17" + + - name: "st010.program.rom" + path: "st010.program.rom" + standalone_path: "Firmware/st010.program.rom" + system: nintendo-snes + required: false + size: 49152 + validation: [size] + note: "ST010 program ROM, read with st010.data.rom when st010.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:69-76" + + - name: "st010.data.rom" + path: "st010.data.rom" + standalone_path: "Firmware/st010.data.rom" + system: nintendo-snes + required: false + size: 4096 + validation: [size] + note: "ST010 data ROM, read with st010.program.rom when st010.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:69-76" - name: "st011.rom" - path: "Firmware/st011.rom" + path: "st011.rom" + standalone_path: "Firmware/st011.rom" aliases: ["SNES_st011.rom"] system: nintendo-snes required: true size: 53248 validation: [size] sha256: "8b2b3f3f3e6e29f4d21d8bc736b400bc988b7d2214ebee15643f01c1fee2f364" - note: "ST011 (Hayazashi Nidan Morita Shogi) program+data. Split pair st011.program.rom + st011.data.rom also accepted." - source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:59-79" + note: "ST011 (Hayazashi Nidan Morita Shogi) program+data. Tried before the split pair st011.program.rom + st011.data.rom." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:59-79, UI/Interop/FirmwareTypeExtensions.cs:18" + + - name: "st011.program.rom" + path: "st011.program.rom" + standalone_path: "Firmware/st011.program.rom" + system: nintendo-snes + required: false + size: 49152 + validation: [size] + note: "ST011 program ROM, read with st011.data.rom when st011.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:69-76" + + - name: "st011.data.rom" + path: "st011.data.rom" + standalone_path: "Firmware/st011.data.rom" + system: nintendo-snes + required: false + size: 4096 + validation: [size] + note: "ST011 data ROM, read with st011.program.rom when st011.rom is absent." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:69-76" - name: "st018.rom" - path: "Firmware/st018.rom" + path: "st018.rom" + standalone_path: "Firmware/st018.rom" aliases: ["SNES_st018.rom"] system: nintendo-snes required: true size: 163840 validation: [size] sha256: "6df209ab5d2524d1839c038be400ae5eb20dafc14a3771a3239cd9e8acd53806" - note: "ST018 ARM coprocessor (Hayazashi Nidan Morita Shogi 2). Missing file leaves the coprocessor ROMs zero-filled." - source_ref: "Core/SNES/Coprocessors/ST018/St018.cpp:32-36, Core/Shared/FirmwareHelper.h:153-171" + note: "ST018 ARM coprocessor (Hayazashi Nidan Morita Shogi 2). Missing file leaves the coprocessor ROMs uninitialised." + source_ref: "Core/SNES/Coprocessors/ST018/St018.cpp:31-36, Core/Shared/FirmwareHelper.h:153-171, UI/Interop/FirmwareTypeExtensions.cs:19" - name: "BS-X.bin" - path: "Firmware/BS-X.bin" + path: "BS-X.bin" + standalone_path: "Firmware/BS-X.bin" system: nintendo-satellaview required: true size: 1048576 @@ -167,10 +382,11 @@ files: validation: [size] sha256: "27cfdb99f7e4252bf3740d420147b63c4c88616883bc5e7fe43f2f30bf8c8cbb,a49827b45ff9ac9cf5b4658190e1428e59251bc82d8a63d8e9e0f71e439f008f,3ce321496edc5d77038de2034eb3fb354d7724afd0bc7fd0319f3eb5d57b984d,77d94d64d745014bf8b51280a4204056cdeb9d41ea30eae80dbc006675bebef8" note: "BS-X application cartridge ROM, mandatory for .bs Satellaview files. Core accepts any file of 32 KB or more; the known dumps are 1 MB (Japan/English, with and without DRM)." - source_ref: "Core/SNES/BaseCartridge.cpp:60-64, Core/Shared/FirmwareHelper.h:81-92,172-188" + source_ref: "Core/SNES/BaseCartridge.cpp:60-64, Core/Shared/FirmwareHelper.h:81-92,172-188, UI/Interop/FirmwareTypeExtensions.cs:23-31" - name: "SufamiTurbo.sfc" - path: "Firmware/SufamiTurbo.sfc" + path: "SufamiTurbo.sfc" + standalone_path: "Firmware/SufamiTurbo.sfc" aliases: ["STBIOS.bin"] system: nintendo-sufami-turbo required: true @@ -178,33 +394,36 @@ files: validation: [size] sha256: "edacb453da14f825f05d1134d6035f4bf034e55f7cfb97c70c4ee107eabc7342" note: "Sufami Turbo base cartridge BIOS, mandatory for .st files." - source_ref: "Core/SNES/Coprocessors/SufamiTurbo/SufamiTurbo.h:38-42, Core/Shared/FirmwareHelper.h:189-207" + source_ref: "Core/SNES/Coprocessors/SufamiTurbo/SufamiTurbo.h:39-44, Core/Shared/FirmwareHelper.h:189-207, UI/Interop/FirmwareTypeExtensions.cs:21" - name: "SGB1.sfc" - path: "Firmware/SGB1.sfc" + standalone_path: "Firmware/SGB1.sfc" + mode: standalone system: nintendo-super-game-boy required: false size: 262144 validation: [size] sha256: "bba9c269273bedb9b38bd5eb23bfaa6e509b8decc7cb80bb5513905af04f4ceb,c6c4daab5c899b69900c460787de6089edabe94b760f96d9f583d30cc0a5bb30,a75160f7b89b1f0e20fd2f6441bb86285c7378db5035ef6885485eaff6059376" - note: "Super Game Boy SNES-side ROM (Rev 0/1/2). Without it, GB games run on the plain GB core instead of SGB mode." - source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228" + note: "Super Game Boy SNES-side ROM (Rev 0/1/2), read when the UseSgb2 setting is off. Without it, GB games run on the plain GB core instead of SGB mode. The libretro build keeps UseSgb2 on and never opens this name." + source_ref: "Core/SNES/BaseCartridge.cpp:698-716, Core/Shared/FirmwareHelper.h:208-228, Core/Shared/SettingTypes.h:433, UI/Interop/FirmwareTypeExtensions.cs:40-47" - name: "SGB2.sfc" - path: "Firmware/SGB2.sfc" + path: "SGB2.sfc" + standalone_path: "Firmware/SGB2.sfc" system: nintendo-super-game-boy required: false size: 524288 validation: [size] sha256: "c172498a23d1176672931bab33b629c7d28f914a43dca9e540b8af1b37ccf2c6" - note: "Super Game Boy 2 SNES-side ROM, used when the SGB2 option is enabled." - source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228" + note: "Super Game Boy 2 SNES-side ROM, read when the UseSgb2 setting is on (the default, and the only state of the libretro build). Without it, GB games run on the plain GB core instead of SGB mode." + source_ref: "Core/SNES/BaseCartridge.cpp:698-716, Core/Shared/FirmwareHelper.h:208-228, Core/Shared/SettingTypes.h:433, UI/Interop/FirmwareTypeExtensions.cs:49" # ------------------------------------------------------- # Game Boy boot ROMs (embedded copies used when absent) # ------------------------------------------------------- - name: "dmg_boot.bin" - path: "Firmware/dmg_boot.bin" + path: "dmg_boot.bin" + standalone_path: "Firmware/dmg_boot.bin" aliases: ["gb_bios.bin"] system: nintendo-gb required: false @@ -212,10 +431,11 @@ files: validation: [size] sha256: "cf053eccb4ccafff9e67339d4e78e98dce7d1ed59be819d2a1ba2232c6fce1c7,26e71cf01e301e5dc40e987cd2ecbf6d0276245890ac829db2a25323da86818e" note: "DMG boot ROM override. An embedded copy is used when the file is absent." - source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:102-110, Core/Gameboy/GbBootRom.h:8" + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:102-110, Core/Gameboy/GbBootRom.h:8, UI/Interop/FirmwareTypeExtensions.cs:33" - name: "cgb_boot.bin" - path: "Firmware/cgb_boot.bin" + path: "cgb_boot.bin" + standalone_path: "Firmware/cgb_boot.bin" aliases: ["gbc_bios.bin"] system: nintendo-gbc required: false @@ -223,48 +443,52 @@ files: validation: [size] sha256: "b4f2e416a35eef52cba161b159c7c8523a92594facb924b3ede0d722867c50c7,3a307a41689bee99a9a32ea021bf45136906c86b2e4f06c806738398e4f92e45" note: "GBC boot ROM override. An embedded copy is used when the file is absent." - source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:99" + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:99, UI/Interop/FirmwareTypeExtensions.cs:34" - name: "sgb_boot.bin" - path: "Firmware/sgb_boot.bin" + standalone_path: "Firmware/sgb_boot.bin" + mode: standalone aliases: ["sgb_bios.bin"] system: nintendo-super-game-boy required: false size: 256 validation: [size] sha256: "0e4ddff32fc9d1eeaae812a157dd246459b00c9e14f2f61751f661f32361e360" - note: "SGB1 GB-side boot ROM override. An embedded copy is used when the file is absent." - source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49" + note: "SGB1 GB-side boot ROM override, read when the UseSgb2 setting is off. An embedded copy is used when the file is absent. The libretro build keeps UseSgb2 on and never opens this name." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:94-97, Core/Gameboy/GbBootRom.h:49, UI/Interop/FirmwareTypeExtensions.cs:37" - name: "sgb2_boot.bin" - path: "Firmware/sgb2_boot.bin" + path: "sgb2_boot.bin" + standalone_path: "Firmware/sgb2_boot.bin" aliases: ["sgb_bios.bin"] system: nintendo-super-game-boy required: false size: 256 validation: [size] sha256: "fd243c4fb27008986316ce3df29e9cfbcdc0cd52704970555a8bb76edbec3988" - note: "SGB2 GB-side boot ROM override. An embedded copy is used when the file is absent." - source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49" + note: "SGB2 GB-side boot ROM override, read when the UseSgb2 setting is on. An embedded copy is used when the file is absent." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:94-97, Core/Gameboy/GbBootRom.h:49, UI/Interop/FirmwareTypeExtensions.cs:38" # ------------------------------------------------------- # Game Boy Advance # ------------------------------------------------------- - name: "gba_bios.bin" - path: "Firmware/gba_bios.bin" + path: "gba_bios.bin" + standalone_path: "Firmware/gba_bios.bin" system: nintendo-gba required: true size: 16384 validation: [size] sha256: "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570" note: "GBA BIOS. When missing, the boot ROM region is zero-filled and games calling BIOS routines fail; there is no HLE replacement." - source_ref: "Core/GBA/GbaConsole.cpp:76-79, Core/Shared/FirmwareHelper.h:272-291" + source_ref: "Core/GBA/GbaConsole.cpp:76-79, Core/Shared/FirmwareHelper.h:272-291, UI/Interop/FirmwareTypeExtensions.cs:35" # ------------------------------------------------------- # NES / Famicom # ------------------------------------------------------- - name: "disksys.rom" - path: "Firmware/disksys.rom" + path: "disksys.rom" + standalone_path: "Firmware/disksys.rom" aliases: ["FdsBios.bin"] system: nintendo-fds required: true @@ -272,30 +496,33 @@ files: validation: [size] sha256: "99c18490ed9002d9c6d999b9d8d15be5c051bdfa7cc7e73318053c9a994b0178,a0a9d57cbace21bf9c85c2b85e86656317f0768d7772acc90c7411ab1dbff2bf" note: "FDS BIOS. When missing, the BIOS region is zero-filled and disk games cannot boot." - source_ref: "Core/NES/Mappers/FDS/Fds.cpp:21-28, Core/Shared/FirmwareHelper.h:292-310" + source_ref: "Core/NES/Mappers/FDS/Fds.cpp:21-28, Core/Shared/FirmwareHelper.h:292-310, UI/Interop/FirmwareTypeExtensions.cs:51-57" - name: "StudyBox.bin" - path: "Firmware/StudyBox.bin" + path: "StudyBox.bin" + standalone_path: "Firmware/StudyBox.bin" system: nintendo-nes required: false size: 262144 validation: [size] sha256: "365f84c86f7f7c3aaa2042d78494d41448e998ec5a89ac1b5fecb452951d514c" note: "Famicom Study Box BIOS, mandatory for .studybox tape dumps only. When missing, the BIOS region is zero-filled." - source_ref: "Core/NES/Mappers/StudyBox.h:64-70, Core/Shared/FirmwareHelper.h:311-329" + source_ref: "Core/NES/Mappers/StudyBox.h:64-70, Core/Shared/FirmwareHelper.h:311-329, UI/Interop/FirmwareTypeExtensions.cs:59" - name: "ymf288_adpcm_rom.bin" - path: "Firmware/ymf288_adpcm_rom.bin" + path: "ymf288_adpcm_rom.bin" + standalone_path: "Firmware/ymf288_adpcm_rom.bin" system: nintendo-nes required: false size: 8192 validation: [size] sha256: "53afd0fa9c62eda3e2be939e23f3adf48a2af8ad37bb1640261726c5d5adeba8" note: "YMF288 ADPCM rhythm ROM for EPSM expansion audio (NES 2.0 header flag). Without it, EPSM sound is incorrect." - source_ref: "Core/NES/BaseMapper.cpp:763-768, Core/Shared/FirmwareHelper.h:439-458" + source_ref: "Core/NES/BaseMapper.cpp:764-768, Core/Shared/FirmwareHelper.h:439-456, UI/Interop/FirmwareTypeExtensions.cs:83" - name: "lh5323m1.bin" - path: "Firmware/lh5323m1.bin" + path: "lh5323m1.bin" + standalone_path: "Firmware/lh5323m1.bin" system: nintendo-nes required: false size: 262144 @@ -309,99 +536,117 @@ files: required: false size: 548608 sha256: "7eee6516f351ccc7db286587917bec415a1d8042ff5ef87c279f38200a3418dd" - note: "NES game database for mapper and input detection, read from the home folder root. Deployed automatically from the application's embedded Dependencies.zip." - source_ref: "Core/NES/GameDatabase.cpp:92-101, UI/Utilities/DependencyHelper.cs:14-66" + note: "NES game database for mapper and input detection, read from the home folder root on the first lookup. Standalone deploys it from the application's embedded Dependencies.zip; the libretro build starts from a 6213-line embedded copy and merges this file over it when present." + source_ref: "Core/NES/GameDatabase.cpp:92-103, UI/Utilities/DependencyHelper.cs:14-67, Libretro/libretro.cpp:85-86,592-594" + + - name: "MesenPalette.pal" + path: "MesenPalette.pal" + mode: libretro + system: nintendo-nes + required: false + size: [192, 1536] + validation: [size] + note: "NES colour palette read from the home folder when the mesen_palette core option is Custom: 64 RGB triplets, or 512 covering the emphasis combinations. Any other size leaves the default palette in place." + source_ref: "Libretro/libretro.cpp:1178-1204, Libretro/libretro.cpp:1304-1306" # ------------------------------------------------------- # PC Engine # ------------------------------------------------------- - name: "[BIOS] Super CD-ROM System (Japan) (v3.0).pce" - path: "Firmware/[BIOS] Super CD-ROM System (Japan) (v3.0).pce" - aliases: ["syscard3.pce"] + path: "[BIOS] Super CD-ROM System (Japan) (v3.0).pce" + standalone_path: "Firmware/[BIOS] Super CD-ROM System (Japan) (v3.0).pce" + aliases: ["syscard3.pce", "syscard3.bin", "syscard.pce", "syscard.bin"] system: nec-pc-engine-cd required: true size: 262144 validation: [size] sha256: "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce" - note: "Super CD-ROM System card, mandatory for CD games. Load fails without it." - source_ref: "Core/PCE/PceConsole.cpp:61-63,151-164, Core/Shared/FirmwareHelper.h:330-349" + note: "Super CD-ROM System card, mandatory for CD games. Load fails without it. Both builds read this name or syscard3.pce at exactly 256 KB; the libretro build first builds the canonical file from syscard3.pce, syscard3.bin, syscard.pce or syscard.bin, skipping a 512-byte header, for the duration of a .cue load." + source_ref: "Core/PCE/PceConsole.cpp:61-63,151-164, Core/Shared/FirmwareHelper.h:330-349, Libretro/libretro.cpp:108-183,2347-2358, UI/Interop/FirmwareTypeExtensions.cs:61-62" - name: "[BIOS] Games Express CD Card (Japan).pce" - path: "Firmware/[BIOS] Games Express CD Card (Japan).pce" + path: "[BIOS] Games Express CD Card (Japan).pce" + standalone_path: "Firmware/[BIOS] Games Express CD Card (Japan).pce" aliases: ["gecard.pce"] system: nec-pc-engine-cd required: false - size: 32768 + size: [32768, 16384] validation: [size] sha256: "4b86bb96a48a4ca8375fc0109631d0b1d64f255a03b01de70594d40788ba6c3d,da173b20694c2b52087b099b8c44e471d3ee08a666c90d4afd997f8e1382add8" - note: "Games Express CD card, mandatory for Games Express discs (auto-detected by sector signature). Exactly 0x8000 or 0x4000 bytes accepted." - source_ref: "Core/PCE/PceConsole.cpp:153-160, Core/Shared/FirmwareHelper.h:350-368" + note: "Games Express CD card, mandatory for Games Express discs (auto-detected by sector signature). Exactly 0x8000 bytes (Blue Version card) or 0x4000 bytes (Green Version card) accepted." + source_ref: "Core/PCE/PceConsole.cpp:153-160, Core/Shared/FirmwareHelper.h:350-368, UI/Interop/FirmwareTypeExtensions.cs:64-68" # ------------------------------------------------------- # SMS / Game Gear / ColecoVision # ------------------------------------------------------- - name: "bios.sms" - path: "Firmware/bios.sms" + path: "bios.sms" + standalone_path: "Firmware/bios.sms" system: sega-mastersystem required: false sha256: "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50,1eb16fc06ceaf05651d7cfd69d1713e6ddccc4349a511f6fd17e037d71f9d85b,67846e26764bd862f19179294347f7353a4166b62ac4198a5ec32933b7da486e,cb01de3464797a77b52e82f5f9b05398540df8c1151d31128d49584028589062,6f4e6de10f1d07bda695c629c67457bb0248eeb8ffa0c61a2742b8529274de30,0c08e17b0ecc3967e1094f12841fdc97fdcbbf986e3bf9a06b35b69e7d95e4cd,1a73bc6e1a9973b98432774a1480b3ac1259027a97590d5e67d52745159abbbc,e9eb04ec80ded8658f765c4eca75cdbe23cbc7d8fed73f9c3db7a868dbf649ff,13c0639cc037167f53e6151dbdea013758c3d09a76b064a894bf15c39c0a3897,aaf39841be10f9cd6908a95a7451c3a0c8ac77125eb412b7a41cad260c888ab5,57abf3c00c82a8e042ebeb2bfe412adac9ba005e9009845236390de3ee645248,c51ec80b7a609c5ee3d203ceee2b602ae4dfb4479caf15dc1d030c40c0364e93" - note: "Master System boot ROM, mapped when present. Loaded without any size check; known dumps are 8/16/128/256 KB." - source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380" + note: "Master System boot ROM, also read for SG-1000 content, mapped when present. Loaded without any size check; known dumps are 8/16/128/256 KB." + source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-379, UI/Interop/FirmwareTypeExtensions.cs:71-77" - name: "bios.gg" - path: "Firmware/bios.gg" + path: "bios.gg" + standalone_path: "Firmware/bios.gg" system: sega-gamegear required: false size: 1024 sha256: "8c8a21335038285cfa03dc076100c1f0bfadf3e4ff70796f11f3dfaaab60eee2" note: "Game Gear boot ROM, mapped when present. Loaded without any size check." - source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380" + source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-379, UI/Interop/FirmwareTypeExtensions.cs:79" - name: "bios.col" - path: "Firmware/bios.col" + path: "bios.col" + standalone_path: "Firmware/bios.col" system: coleco-colecovision required: true size: 8192 validation: [size] sha256: "990bf1956f10207d8781b619eb74f89b00d921c8d45c95c334c16c8cceca09ad,fb4a898eb93b19b36773d87a6c70eb28f981b2686bebdd2d431b05dcdf9cffd4" - note: "ColecoVision BIOS. The system boots through it; games cannot start without it." - source_ref: "Core/SMS/SmsConsole.cpp:71-74, Core/Shared/FirmwareHelper.h:381-399" + note: "ColecoVision BIOS, NTSC or PAL console dump. The system boots through it; games cannot start without it." + source_ref: "Core/SMS/SmsConsole.cpp:71-74, Core/Shared/FirmwareHelper.h:381-398, UI/Interop/FirmwareTypeExtensions.cs:70" # ------------------------------------------------------- - # WonderSwan + # WonderSwan (standalone only: UseBootRom is never set by the libretro port) # ------------------------------------------------------- - name: "bootrom.ws" - path: "Firmware/bootrom.ws" + standalone_path: "Firmware/bootrom.ws" + mode: standalone system: bandai-wswan required: false size: 4096 validation: [size] sha256: "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e" note: "WonderSwan boot ROM, also used for Pocket Challenge V2. Loaded only when the UseBootRom setting is enabled (default off); without it the boot screen is skipped." - source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-438" + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:80" - name: "bootrom.wsc" - path: "Firmware/bootrom.wsc" + standalone_path: "Firmware/bootrom.wsc" + mode: standalone system: bandai-wswanc required: false size: 8192 validation: [size] sha256: "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2" note: "WonderSwan Color boot ROM. Loaded only when the UseBootRom setting is enabled." - source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438" + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:81" - name: "bootrom_sc.wsc" - path: "Firmware/bootrom_sc.wsc" + standalone_path: "Firmware/bootrom_sc.wsc" + mode: standalone system: bandai-wswanc required: false size: 8192 validation: [size] sha256: "82e96addf5ab1ce09a84b6eedaa904e4ca432756851f7e0cc0649006c183834d" note: "SwanCrystal boot ROM. Loaded only when the UseBootRom setting is enabled and the SwanCrystal model is selected." - source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438" + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-437, UI/Interop/FirmwareTypeExtensions.cs:82" # ------------------------------------------------------- - # Satellaview broadcast data (auto-deployed) + # Satellaview broadcast data (auto-deployed by the standalone UI) # ------------------------------------------------------- - name: "BSX0120-0.bin" path: "Satellaview/BSX0120-0.bin" @@ -410,8 +655,8 @@ files: required: false size: 34 sha256: "ba0c17b5786724959bc206714fc18f708c16fdcd77f8fb19aaf9768338e3ce01" - note: "Satellaview data stream for channel 0120 (time channel). Deployed automatically from the application's embedded Dependencies.zip; user replacements are preserved." - source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + note: "Satellaview data stream for channel 0120 (time channel), read from <home>/Satellaview/. Standalone deploys it from the application's embedded Dependencies.zip and preserves user replacements; the libretro build reads it from system/Satellaview/ and deploys nothing." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48" - name: "BSX0121-0.bin" path: "Satellaview/BSX0121-0.bin" @@ -420,8 +665,8 @@ files: required: false size: 34 sha256: "fbe51a53638dd366b50ea53adf92f54447667d7767c502e508d89b008e31c53f" - note: "Satellaview data stream for channel 0121. Deployed automatically; user replacements are preserved." - source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + note: "Satellaview data stream for channel 0121. Deployed by the standalone UI; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48" - name: "BSX0122-0.bin" path: "Satellaview/BSX0122-0.bin" @@ -430,8 +675,8 @@ files: required: false size: 1031 sha256: "a0329450e1d42cd18d30070a86e0e481a876cb5c9cfbaab4a0d8895150976ee7" - note: "Satellaview data stream for channel 0122. Deployed automatically; user replacements are preserved." - source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + note: "Satellaview data stream for channel 0122. Deployed by the standalone UI; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48" - name: "BSX0123-0.bin" path: "Satellaview/BSX0123-0.bin" @@ -440,8 +685,8 @@ files: required: false size: 16 sha256: "dbf5ef12ce586712ee666fc5805e6dfcaa1e253fdd36644f773909514868a590" - note: "Satellaview data stream for channel 0123. Deployed automatically; user replacements are preserved." - source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + note: "Satellaview data stream for channel 0123. Deployed by the standalone UI; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48" - name: "BSX0124-0.bin" path: "Satellaview/BSX0124-0.bin" @@ -450,12 +695,15 @@ files: required: false size: 97 sha256: "4d7d7bf5afe5c4f71b96965e58003816c70c13e8af9b581431504d5e52a0cec1" - note: "Satellaview data stream for channel 0124. Deployed automatically; user replacements are preserved." - source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + note: "Satellaview data stream for channel 0124. Deployed by the standalone UI; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:68-74, UI/Utilities/DependencyHelper.cs:44-48" platform_details: - firmware_folder: "Firmware/" + firmware_folder: + standalone: "Firmware/" + libretro: "system directory root" firmware_size_check: exact - ui_hash_check: "sha256, advisory (UI/Interop/FirmwareTypeExtensions.cs)" + ui_hash_check: "sha256, advisory, standalone UI only (UI/Interop/FirmwareTypeExtensions.cs)" satellaview_streams: "Satellaview/BSX<channel>-<index>.bin" - source_ref: "Utilities/FolderUtilities.cpp:81-91, Core/Shared/FirmwareHelper.h" + libretro_subsystem: "Super Game Boy: gb|gbc|gbx + sfc|smc" + source_ref: "Utilities/FolderUtilities.cpp:81-91, Libretro/libretro.cpp:2253-2256, Core/Shared/FirmwareHelper.h" diff --git a/emulators/pokketstation.yml b/emulators/pokketstation.yml index c7f0d045..ae479433 100644 --- a/emulators/pokketstation.yml +++ b/emulators/pokketstation.yml @@ -3,9 +3,9 @@ type: libretro core_classification: official_port source: "https://github.com/mentalfoundry/pokketstation" upstream: "https://github.com/mentalfoundry/pokketstation" -profiled_date: "2026-09-03" -source_commit: "11fb6de0139d5cbdbd44e37839571a0bf25e5ab2" -core_version: "v1.11.1" +profiled_date: "2026-09-17" +source_commit: "484933271b7d362e8e76f1121839c33e5d5ec83e" +core_version: "v1.12" display_name: "Sony - PocketStation (pokketstation)" cores: [pokketstation] systems: [sony-pocketstation] @@ -14,15 +14,19 @@ notes: | PocketStation emulator with a portable C core (core/) shared by the libretro core, an SDL2 desktop application and a PS Vita port. The libretro core reports library_version "0.1"; the project version is the release tag, - v1.11.1 in the desktop frontend (frontends/desktop/main.c:40). + v1.12 in the desktop frontend (frontends/desktop/main.c:40). load_bios opens <system>/pocketstation.bin, reads 16384 bytes and fails when fewer are read; a longer file is accepted and truncated. psemu_load_bios copies the image and rejects any size other than PSEMU_BIOS_SIZE. retro_load_game returns false when load_bios fails, and psemu_run executes nothing while no BIOS is loaded: there is no HLE and no embedded copy. - Content (.mcr, .mcd, .mcs, .pss) is identified by its bytes, not by the - extension. Save RAM is the full 128 KB flash image. + Content (.mcr, .mcd, .mcs, .pss, .bin, .gme) is identified by its bytes, + not by the extension: a 128 KB image is a full card, a 134976-byte file + opening with 123-456-STD is a DexDrive dump whose 3904-byte header is + skipped, anything else is tried as a single save then as a Title Sector + body (core/src/psemu.c:187-209, 301-317). Save RAM is the full 128 KB + flash image. psemu_settings_offsets_known hashes the loaded image with FNV-1a and compares it with 0xB2E46838, the retail 110 revision the project traced; a match @@ -30,7 +34,7 @@ notes: | 16 KB image boots. Two mask ROM revisions are documented: 061, from prototype hardware, and 110, the retail one; the ASCII tags at offsets 0x1DFC (C061 or C110) and 0x3FFC (J061 or J110) identify them - (docs/hardware-notes.md:778-788). SWI 0Fh FlashWriteSerial works on 061 + (docs/hardware-notes.md:782-792). SWI 0Fh FlashWriteSerial works on 061 and locks the CPU on 110. The desktop application takes the BIOS path from the command line, then @@ -46,7 +50,7 @@ files: required: true validation: [size] standalone_path: "bios.bin" - source_ref: "frontends/libretro/libretro.c:178-196, frontends/libretro/libretro.c:206-208, core/src/psemu.c:90-97, core/src/psemu.c:458-461, core/src/psemu.c:795-820, core/include/psemu/psemu.h:19" + source_ref: "frontends/libretro/libretro.c:178-196, frontends/libretro/libretro.c:206-208, core/src/psemu.c:90-97, core/src/psemu.c:474-477, core/src/psemu.c:854-879, core/include/psemu/psemu.h:19" note: > Read from the frontend system directory. The desktop application reads the whole file and psemu_load_bios rejects any size other than 16384; diff --git a/emulators/pom2.yml b/emulators/pom2.yml index 90f92c27..3e671182 100644 --- a/emulators/pom2.yml +++ b/emulators/pom2.yml @@ -3,9 +3,9 @@ type: standalone core_classification: other source: "https://github.com/habib256/pom2" upstream: "https://github.com/habib256/pom2" -profiled_date: "2026-09-14" -source_commit: "78aa14c1135ea9eaf3e68f09d624fab788aab236" -core_version: "0.9.2" +profiled_date: "2026-09-17" +source_commit: "95cdbd1dc18b86a6b347dacd513503ac8ed73921" +core_version: "0.9.3" display_name: "Apple - Apple II (POM2)" cores: - pom2 @@ -16,20 +16,21 @@ mode: standalone notes: | Apple ][, ][+, //e, //c and //c+ emulator by Arnaud Verhille, C++ with an ImGui frontend, plus a browser build and a headless CLI. Nine machine - profiles (SystemProfile.cpp:32-300): Apple ][ Original, ][+, //e + profiles (src/SystemProfile.cpp:32-302): Apple ][ Original, ][+, //e Unenhanced, //e Enhanced, //c, //c Plus, and PAL variants of the //e Unenhanced, //e Enhanced (the default) and //c (Le Chat Mauve). Every file is looked up by a relative name through findResource - (ResourcePaths.cpp:173-246): the per-user data directory + (src/ResourcePaths.cpp:178-251): the per-user data directory (~/.local/share/POM2, ~/Library/Application Support/POM2, - %LOCALAPPDATA%\POM2), the executable directory, its parent, - ../share/POM2, then the working directory and its two parents. The - first hit wins. Release packages ship the whole roms/ tree, the fonts and - the two photos (packaging/bundle.manifest). + %LOCALAPPDATA%\POM2) when it really is per-user, the executable + directory, its parent, ../share/POM2, the temp fallback data directory + otherwise, then the working directory and its two parents. The first hit + wins. Release packages ship the whole roms/ tree, the fonts and the two + photos (packaging/bundle.manifest). Machine firmware is a probe chain per profile, first name found wins - (SystemProfile.cpp romProbeOrder, MainWindow_Slots.cpp:1458-1481): + (SystemProfile.cpp romProbeOrder, src/ProfileSwitch.cpp:113-133): ][ Original apple2o.rom, apple2.rom ][+ apple2p.rom, apple2.rom //e Unenhanced apple2e_unenh.rom, 342-0135-b.64.rom, apple2e.rom @@ -37,47 +38,60 @@ notes: | //c apple2c-32Kv0.rom, apple2c-16K.rom, 3420033a.256 //c Plus apple2cp.rom, apple2c-plus.rom, apple2c-32Kv0.rom With no candidate the machine runs on a $D000-$FFFF stub and the Welcome - panel opens (MainWindow.cpp:318-326). A first run with no //e image falls - back to the ][+ chain (MainWindow.cpp:223-236). Memory::loadAppleIIRom - (Memory.cpp:174-224) maps 12 KB at $D000, 16 KB at $C000, skips the 4 KB - pad of a 20 KB ][+ dump, and slices a 32 KB dump by profile: //e images - carry the firmware in the upper half, //c and //c+ images are two firmware - banks with bank 0 in the lower half (SystemProfile.cpp:432). + panel opens (src/MainWindow.cpp:323-331). A first run with no //e image + falls back to the ][+ chain (src/MainWindow.cpp:228-241). + Memory::loadAppleIIRom (src/Memory.cpp:173-236) maps 12 KB at $D000, + 16 KB at $C000, skips the 4 KB pad of a 20 KB ][+ dump, and slices a + 32 KB dump by profile: //e images carry the firmware in the upper half, + //c and //c+ images are two firmware banks with bank 0 in the lower half + (src/SystemProfile.cpp:429). Character generators follow charRomProbeOrder per profile, or the locale - picked in the toolbar (CharRomCatalog.cpp:42-79, MainWindow_Slots.cpp: - 1489-1505). Memory::loadCharRom accepts 2 KB, 4 KB and 8 KB dumps - (Memory.cpp:313-345); an 8 KB dump is two 4 KB banks, loaded as one bank - or kept dual-bank with annunciator 2 selecting the live set. + picked in the toolbar (src/CharRomCatalog.cpp:42-79, + src/ProfileSwitch.cpp:135-141). Memory::loadCharRom accepts 2 KB, 4 KB + and 8 KB dumps (src/Memory.cpp:324-357); an 8 KB dump is two 4 KB banks, + loaded as one bank or kept dual-bank with annunciator 2 selecting the + live set. - Peripheral ROMs are read when the card is plugged (SlotCardFactory.cpp). + Peripheral ROMs are read when the card is plugged (src/SlotCardFactory.cpp). The Disk II carries the 341-0027-A boot PROM and the 16-sector P6 - sequencer built in (DiskIICard.cpp:135-150). CFFA, Liron, Workstation and - the MC68705 mouse card leave the slot empty without their dump; Grappler+, - ThunderClock+ and TransWarp run a synthetic ROM instead. The catalogue - behind the ROM Status panel (RomCatalog.h) lists every name in probe - order with the size the loader enforces and, where POM2 vouches for a - dump, its CRC32; the panel hashes each present file - (RomStatus_ImGui.cpp:169-181, 306). + sequencer built in (src/DiskIICard.cpp:135-148). CFFA, Liron, + Workstation and the MC68705 mouse card leave the slot empty without + their dump; Grappler+, ThunderClock+ and TransWarp run a synthetic ROM + instead. The catalogue behind the ROM Status panel (src/RomCatalog.h) + lists every name in probe order with the size the loader enforces, + what a missing dump costs (degraded, card unavailable, unused) and, + where POM2 vouches for a dump, its CRC32; the panel hashes each present + file (src/RomStatus_ImGui.cpp:169-181, 311). - Help > Download missing ROMs (RomFetch.cpp:61-141) fetches 18 dumps with - curl from raw.githubusercontent.com/Abdess/retrobios and installs a - download only when its size, CRC32 and SHA-256 match the catalogue - (RomFetch.cpp:398-431); a present local file is re-checked with the same - gate (RomFetch.cpp:583-603). Unavailable in the browser build. + Help > Download missing ROMs (src/RomFetch.cpp:66-263) fetches 37 dumps + with curl from raw.githubusercontent.com/Abdess/retrobios, pinned to + HTTPS (src/RomFetch.cpp:694-710). Every entry carries the SHA-256 of the + dump POM2 ships in its own roms/ tree, eight a CRC32 as well; a download + is installed only when its size, CRC32 and SHA-256 match + (src/RomFetch.cpp:591-627). A present file is re-checked with the same + gate and, when it is not the catalogued dump, replaced after a copy to + roms-replaced/ under the data directory (src/RomFetch.cpp:541-589, + 795-815, 824-842); a 12 KB apple2p.rom is the one alternate size kept as + is. Two entries are members of MAME romsets, read in-process + (src/ZipMember.cpp): apple2e_unenh.rom is 342-0135-b.64 then + 342-0134-a.64 from apple2e.zip, mouse_341-0270-c.bin is 341-0270-c.4b + from a2mouse.zip. Downloads land in the per-user data directory's roms/ + (src/RomFetch.cpp:763-783). Unavailable in the browser build + (src/RomFetch.cpp:884-887). The floppy mechanical sounds are MAME's samples/floppy set, read from roms/floppy_samples/ as two banks of ten WAV files prefixed 525_ and 35_ - (FloppySoundDevice.cpp:80-118, MainWindow.cpp:335-348); a missing sample - is logged and the drive stays silent. + (src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353); a + missing sample is logged and the drive stays silent. Media named by the code are not firmware and are not listed here: the browser demo boots floppyemu/DIX.po (wasm/shell.html:89) or, when the - shell passes no disk, floppyemu/Total Replay v6.1.hdv (main.cpp:281-285); - the headless CLI mounts disks_5.4/dos33_master.dsk by default - (pom2_headless.cpp:263). Disk, tape and hard-disk images are browsed - from disks_5.4/, disks_3.5/, hdv/, floppyemu/, cassettes/ and - prodos_folder/ next to the executable. + shell passes no disk, floppyemu/Total Replay v6.1.hdv + (src/main.cpp:282-286); the headless CLI mounts + disks_5.4/dos33_master.dsk by default (src/pom2_headless.cpp:262-264). + Disk, tape and hard-disk images are browsed from disks_5.4/, disks_3.5/, + hdv/, floppyemu/, cassettes/ and prodos_folder/ next to the executable. files: - name: "apple2o.rom" @@ -89,7 +103,7 @@ files: sha256: "68d9db6bb4c305d40c3fa89fa0f2d7b7f71516a9431e3138859f23bc5bddb2d1" sha1: "78008be557f643e956a106121bcc182c0fb9ea6d" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:174-224, src/RomFetch.cpp:61-63" + source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:173-236, src/RomFetch.cpp:70-73" note: "First candidate of the Apple ][ Original profile; apple2.rom is probed next." - name: "apple2.rom" path: "roms/apple2.rom" @@ -100,18 +114,20 @@ files: sha256: "fc3e9d41e9428534a883df5aa10eb55b73ea53d2fcbb3ee4f39bed1b07a82905" sha1: "33a24f5489ba9195b44be77d9afb2252594cb5c7" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/MainWindow_Slots.cpp:1470-1477, src/RomFetch.cpp:65-67" + source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/ProfileSwitch.cpp:121-128, src/RomFetch.cpp:74-81" note: "Probed after the profile image for the ][ and ][+ profiles. When it resolves in place of that image the loader logs that the ROM identity may not match the machine." - name: "apple2p.rom" path: "roms/apple2p.rom" description: "Apple ][+ Autostart monitor and Applesoft, 4 KB pad then $C000-$FFFF" required: false priority: 1 + size: 20480 size_options: [12288, 20480] + sha256: "92c4bef609920842ea472d21b661a0d35dbda6cd90963b8b734a205e22d84108" sha1: "29a53f3bb158b160433369e8e4a1d7cd5bf68ac6" - validation: [size] - source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:209-219, src/RomFetch.cpp:69-79" - note: "First candidate of the ][+ profile and of the first-run fallback (MainWindow.cpp:234). The loader drops the leading 4 KB of a 20 KB dump. The fetcher builds a 12 KB image from the six 2 KB chips of the MAME apple2p set and accepts either size as present; it carries no digest for this file." + validation: [size, sha256] + source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:221-231, src/RomFetch.cpp:82-94, src/RomFetch.cpp:824-835" + note: "First candidate of the ][+ profile and of the first-run fallback (src/MainWindow.cpp:237-241). The loader drops the leading 4 KB of the 20 KB dump. The fetch gate names that dump; a 12 KB six-chip image already on disk is kept as present without a digest check." - name: "apple2e.rom" path: "roms/apple2e.rom" description: "Apple //e Enhanced firmware, 32 KB dump with the 16 KB firmware in the upper half" @@ -121,7 +137,7 @@ files: sha256: "c17bc38c75ba96c33a30c688a1efd60144811073423533fe7f8453cdd9457aab" sha1: "d756eba578a6c5a4807510dfee30ee585c63755e" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:239-251, src/Memory.cpp:189-201, src/Memory.cpp:220-222, src/MainWindow.cpp:223-226, src/RomFetch.cpp:80-83" + source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:241-253, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/MainWindow.cpp:228-231, src/RomFetch.cpp:95-98" note: "Sole candidate of the //e Enhanced profiles, NTSC and PAL, PAL being the default machine. Also the last fallback of the //e Unenhanced chain." - name: "apple2e_unenh.rom" path: "roms/apple2e_unenh.rom" @@ -133,8 +149,8 @@ files: sha256: "1fb812584c6633fa16b77b20915986ed1178d1e6fc07a647f7ee8d4e6ab9d40b" sha1: "61fa9254628e5bb7236fb474006116d67684d747" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:265-277, src/RomFetch.cpp:84-87" - note: "First candidate of the //e Unenhanced profiles; 342-0135-b.64.rom is probed second, apple2e.rom third." + source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:267-279, src/RomFetch.cpp:51-56, src/RomFetch.cpp:99-107" + note: "First candidate of the //e Unenhanced profiles; 342-0135-b.64.rom is probed second, apple2e.rom third. The fetcher assembles it from the two 8 KB chips of the MAME apple2e set, 342-0135-b.64 then 342-0134-a.64." - name: "apple2c-32Kv0.rom" path: "roms/apple2c-32Kv0.rom" description: "Apple //c two-bank firmware, bank 0 in the lower 16 KB" @@ -142,8 +158,10 @@ files: priority: 1 size: 32768 crc32: "323952d1" + sha256: "d65bbf97058b9cdce8eaebf74124048e3b4e42dca1bd42be316747bbc27dc124" sha1: "fb0d644aafaff1352d0816bc8494f6c9913809d5" - source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-438, src/Memory.cpp:189-201, src/Memory.cpp:220-222" + validation: [size, sha256] + source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/RomFetch.cpp:108-111" note: "First candidate of the //c and //c PAL profiles, third of the //c Plus chain. Bank 0 is mapped at reset, the $C028 ROMBANK switch selects the other. Identical to 3420033a.256 with its first 256 bytes zeroed." - name: "apple2c-16K.rom" path: "roms/apple2c-16K.rom" @@ -152,8 +170,10 @@ files: priority: 2 size: 16384 crc32: "f0edaa1b" + sha256: "3ca1c8a27bf111aa0f4dc9372c5e6404457adb9a458ce32ae4b03a7e989e0c76" sha1: "1a9b8aca5e32bb702ddb7791daddd60a89655729" - source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:207-208" + validation: [size, sha256] + source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:219-220, src/RomFetch.cpp:112-115" note: "Second candidate of the //c chain, loaded at $C000." - name: "3420033a.256" path: "roms/3420033a.256" @@ -162,8 +182,10 @@ files: priority: 3 size: 32768 crc32: "c8b979b3" + sha256: "678d5c9d374664d2ee94ba9c9564d26a917b31116b07c46df30a3e82c640885b" sha1: "10767e96cc17bad0970afda3a4146564e6272ba1" - source_ref: "src/SystemProfile.cpp:142-143" + validation: [size, sha256] + source_ref: "src/SystemProfile.cpp:142-143, src/RomFetch.cpp:116-119" note: "Third candidate of the //c chain." - name: "apple2cp.rom" path: "roms/apple2cp.rom" @@ -173,8 +195,10 @@ files: aliases: ["apple2c-plus.rom"] size: 32768 crc32: "0b996420" + sha256: "5a62070f6a0b07784681d4df4bf2ce88b2809bec0cbaa65fcb963e804ed60374" sha1: "1a27ae26966bbafd825d08ad1a24742d3e33557c" - source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:432-438" + validation: [size, sha256] + source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/RomFetch.cpp:120-123" note: "First candidate of the //c Plus profile; apple2c-plus.rom is probed second and apple2c-32Kv0.rom third." - name: "apple2_char.rom" path: "roms/apple2_char.rom" @@ -185,7 +209,7 @@ files: sha256: "08f5d22230481019844492dde0a29a018cb193712a9e4a43770a3870608f28de" sha1: "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:90-93, src/Memory.cpp:313-345" + source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:126-129, src/Memory.cpp:324-357" note: "Sole candidate of the ][ and ][+ profiles and the last fallback of every //e-class chain." - name: "apple2e_char.rom" path: "roms/apple2e_char.rom" @@ -197,8 +221,8 @@ files: sha256: "52c3b87900ac939f6525402cab1ccfd8f8259290fc6df54da48fb4c98ae3ed0f" sha1: "b2b5d87f52693817fc747df087a4aa1ddcdb1f10" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:94-97, src/Memory.cpp:313-345" - note: "First candidate of the //e Enhanced, //c and //c Plus profiles; the same dump answers to apple2e_char_us.rom in the locale picker." + source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:130-142, src/Memory.cpp:324-357" + note: "First candidate of the //e Enhanced, //c and //c Plus profiles; the same dump answers to apple2e_char_us.rom in the locale picker, and the fetcher writes both names." - name: "apple2e_char_us_unenh.rom" path: "roms/apple2e_char_us_unenh.rom" description: "Apple //e Unenhanced character generator 342-0133-A, 4 KB" @@ -209,8 +233,8 @@ files: sha256: "ed5bdd4afa509134e85f1d020685af7ff50e279226eb869a17825b471cc1634c" sha1: "58ad0008df72896a18601e090ee0d58155ffa5be" validation: [size, sha256] - source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:98-101, src/Memory.cpp:313-345" - note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom; the same dump ships under both names." + source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:143-150, src/Memory.cpp:324-357" + note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom; the same dump ships under both names and the fetcher writes both." - name: "apple2e_char_fr.rom" path: "roms/apple2e_char_fr.rom" description: "Apple //e French character generator, 4 KB" @@ -218,19 +242,21 @@ files: aliases: ["apple2e_char_frca_unenh.rom"] size: 4096 crc32: "ab0be706" + sha256: "52d8e46b487a617c288caaf12ab7ad6cb81030b6ab92419f9a2e19c43d765566" sha1: "42afb02aab4146f781ac52803a2733adc4da834e" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" - note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A." + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:153-156, src/Memory.cpp:324-357" + note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A, a name the fetcher does not serve." - name: "apple2e_char_frca.rom" path: "roms/apple2e_char_frca.rom" description: "Apple //e French Canadian Enhanced character generator, 4 KB" required: false size: 4096 crc32: "2c8fc403" + sha256: "56479cbec4767651c62a4d0f61e6ed103395216f2b86eddba74d85495dd71cc4" sha1: "4043e0808af8be096660827445e41149d16c5c85" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:157-160, src/Memory.cpp:324-357" note: "Locale picker entry; equals the low bank of 342-0274-a.e9." - name: "apple2e_char_uk.rom" path: "roms/apple2e_char_uk.rom" @@ -238,9 +264,10 @@ files: required: false size: 4096 crc32: "dda11653" + sha256: "d55bd5391485cd78c68c71408f09bd088e82a73d179a0a25820067a0c1554acd" sha1: "d19c2e2cc12b27d77edc403d5d0701186a4ed988" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:161-164, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_uk_unenh.rom" path: "roms/apple2e_char_uk_unenh.rom" @@ -248,9 +275,10 @@ files: required: false size: 4096 crc32: "7a9a91ef" + sha256: "f2199fbfb473e98a8c3fb7e7c3312faaf76b4b010b02c655b662e5f87dc997f3" sha1: "6ca9767e0f47f642d1caab6ed41b8f58c58bb9eb" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:165-168, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_de.rom" path: "roms/apple2e_char_de.rom" @@ -258,9 +286,10 @@ files: required: false size: 4096 crc32: "0d72f153" + sha256: "b92576b4fa994384501078ff99963b53cfa98eff4bb641eb61649d484a469315" sha1: "a7fd75ae8611572b0b4d99ad54562014b879dbbf" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:169-172, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_de_improved.rom" path: "roms/apple2e_char_de_improved.rom" @@ -268,9 +297,10 @@ files: required: false size: 4096 crc32: "d345d332" + sha256: "0e32ab131e3932fc61c0a5f0f5509b4c37ab8db6239027f5955d47feba56d39f" sha1: "12ce44f02bd28c350e2b0723d94ab8d9066f8798" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:151-165, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:173-176, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "342-0274-a.e9" path: "roms/342-0274-a.e9" @@ -278,9 +308,10 @@ files: required: false size: 8192 crc32: "8f342081" + sha256: "d4d29771658372c6ab5d18ff3bdab6b3b2b02b8de30ed6b021efb8a415192432" sha1: "c81c1bbf237e70f8c3e5eef3c8fd5bd9b9f54d1e" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:73-76, src/CharRomCatalog.cpp:144-149, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:73-76, src/CharRomCatalog.cpp:144-149, src/RomFetch.cpp:177-182, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357" note: "Locale picker entries select bank 0 or bank 1; loaded whole, both banks stay live and annunciator 2 picks the set." - name: "apple2e_char_ft_blockascii.rom" path: "roms/apple2e_char_ft_blockascii.rom" @@ -288,9 +319,10 @@ files: required: false size: 8192 crc32: "1eae3944" + sha256: "c69c8e1eb26923c5df03d3507fdf86c5f768283a924a5fffdd80377cf2339321" sha1: "f79815457437e50404f4f537d8aabe34bff3a220" - validation: [size] - source_ref: "src/CharRomCatalog.cpp:77-78, src/Memory.cpp:313-345" + validation: [size, sha256] + source_ref: "src/CharRomCatalog.cpp:77-78, src/RomFetch.cpp:183-187, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357" note: "Locale picker entry loaded dual-bank: annunciator 2 flips between the text set and the block glyphs." - name: "Videx Lower Case Chip ROM.bin" path: "roms/Videx Lower Case Chip ROM.bin" @@ -298,9 +330,10 @@ files: required: false size: 2048 crc32: "00f68076" + sha256: "6a516bcd96382597af7a498fb1da7547490c830db0f9d22d541fb065b9cd048b" sha1: "447874fe0850c8add3fd5b13fa98f6648fe6f999" - validation: [size, crc32] - source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:143-148, src/RomStatus_ImGui.cpp:306" + validation: [size, crc32, sha256] + source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:166-172, src/RomFetch.cpp:188-192, src/RomStatus_ImGui.cpp:311" note: "Locale picker entry for the ][ and ][+ profiles; without it the picker keeps the stock uppercase set." - name: "disk2.rom" path: "roms/disk2.rom" @@ -311,7 +344,7 @@ files: sha256: "de1e3e035878bab43d0af8fe38f5839c527e9548647036598ee6fe7ec74d2a7d" sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:135-140, src/DiskIICard.cpp:150-172, src/RomFetch.cpp:104-107" + source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:135-140, src/DiskIICard.cpp:150-173, src/RomFetch.cpp:195-198" note: "The card carries the same PROM built in; the file replaces it when present." - name: "diskii_p6.rom" path: "roms/diskii_p6.rom" @@ -322,7 +355,7 @@ files: sha256: "e5e30615040567c1e7a2d21599681f8dac820edbdcda177b816a64d74b3a12f2" sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:141-148, src/DiskIICard.cpp:175-197, src/DiskIICard.cpp:245-262, src/RomFetch.cpp:108-111" + source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:141-148, src/DiskIICard.cpp:175-201, src/DiskIICard.cpp:250-262, src/RomFetch.cpp:199-202" note: "Loading the file switches the bit-level LSS path on for every image; without it the legacy 32-cycle nibble gate serves non-WOZ images and the built-in PROM serves WOZ images." - name: "disk2_13.rom" path: "roms/disk2_13.rom" @@ -332,8 +365,8 @@ files: sha256: "2d2599521fc5763d4e8c308c2ee7c5c4d5c93785b8fb9a4f7d0381dfd5eb60b6" sha1: "afd060e6f35faf3bb0146fa889fc787adf56330a" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:203-220, src/RomCatalog.h:79-81, src/RomFetch.cpp:112-115" - note: "13-sector disks mount but cannot boot without it." + source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:203-220, src/DiskIICard.cpp:263-287, src/RomCatalog.h:90-93, src/RomFetch.cpp:203-206" + note: "A mounted 13-sector disk switches the card to this PROM at $Cn00 and forces the bit-level LSS; without it the disk mounts but cannot boot." - name: "diskii_p6_13.rom" path: "roms/diskii_p6_13.rom" description: "Disk II 13-sector P6 logic state sequencer PROM 341-0010" @@ -342,17 +375,18 @@ files: sha256: "383c55f5333cbfde39dd41528186631e5aca2eddfec30716344f03b6a4d44655" sha1: "e3d6d1c30653572b49ecc2dc54ce073978411a04" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:222-239, src/RomCatalog.h:82-84, src/RomFetch.cpp:116-119" - note: "Paired with disk2_13.rom; the card never switches to the 13-sector pair without both." + source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:222-239, src/DiskIICard.cpp:272-282, src/RomCatalog.h:94-97, src/RomFetch.cpp:207-210" + note: "Read into the card and not consumed: the 13-sector switch depends on disk2_13.rom alone, and the sequencer keeps running the 16-sector P6 on 13-sector disks." - name: "cffa20eec02.bin" path: "roms/cffa20eec02.bin" description: "CFFA 2.0 firmware, 65C02 build" required: false size: 4096 crc32: "fb3726f8" + sha256: "a08cb25ad80054649ee5fcb620e01ed56f025acb28c753bc28dd187a1d149cab" sha1: "080ff88f19de22328e162954ee2b51ee65f9d5cd" - validation: [size, crc32] - source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:103-106" + validation: [size, crc32, sha256] + source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:119-123, src/RomFetch.cpp:221-224" note: "Preferred when the CPU is a 65C02, the 6502 build is the fallback; the slot stays empty when neither is found." - name: "cffa20ee02.bin" path: "roms/cffa20ee02.bin" @@ -363,7 +397,7 @@ files: sha256: "3d7f6918f9af3828f5a6299299a817df0d354ee62e547bc0238755de66162a88" sha1: "d600692ed9626668233a22a48236af639410cb7b" validation: [size, crc32, sha256] - source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:107-110, src/RomFetch.cpp:122-126" + source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:124-129, src/RomFetch.cpp:217-220" note: "Preferred on an NMOS 6502, fallback for a 65C02." - name: "mouse_341-0270-c.bin" path: "roms/mouse_341-0270-c.bin" @@ -373,8 +407,8 @@ files: sha256: "7f8e50c0e8a409991264201f9300f109b872b68e09c43f3e6c26af35fd8b89af" sha1: "3a9d881a8a8d30f55b9719aceebbcf717f829d6f" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:51-83, src/SlotCardFactory.cpp:232-247, src/MouseCard.cpp:115-149, src/MouseCardAppleWin.cpp:87-100, src/RomFetch.cpp:127-130" - note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only." + source_ref: "src/SlotCardFactory.cpp:51-83, src/SlotCardFactory.cpp:232-247, src/MouseCard.cpp:119-153, src/MouseCardAppleWin.cpp:87-100, src/RomFetch.cpp:241-246" + note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only. The fetcher extracts it from the MAME a2mouse set as 341-0270-c.4b." - name: "mouse_341-0269.bin" path: "roms/mouse_341-0269.bin" description: "AppleMouse II card MC68705P3 MCU mask ROM 341-0269" @@ -383,7 +417,7 @@ files: sha256: "66480812edad5f6bd70349949cf8bd8fbafee2dc8bf396541d4e78bac2629ec0" sha1: "3a2baa6648efe4456d3ec3721216e57c64f7acfc" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:51-83, src/MouseCard.cpp:146-149, src/M68705P3.cpp:85-104, src/RomFetch.cpp:131-134" + source_ref: "src/SlotCardFactory.cpp:51-83, src/MouseCard.cpp:150-153, src/M68705P3.cpp:85-104, src/RomFetch.cpp:237-240" note: "The MC68705 mouse card leaves its slot empty without it." - name: "grappler_plus.bin" path: "roms/grappler_plus.bin" @@ -394,7 +428,7 @@ files: sha256: "9be4dea7722ad8928aee64c2ae708f365a6d66c50a63bff8a3c1a4e7596d44c6" sha1: "829072cc19a58b24d36c2af972abaad6f9ba35d9" validation: [size, sha256] - source_ref: "src/SlotCardFactory.cpp:147-166, src/GrapplerCard.cpp:29-52, src/RomCatalog.h:113-118, src/RomFetch.cpp:135-138" + source_ref: "src/SlotCardFactory.cpp:147-166, src/GrapplerCard.cpp:29-52, src/RomCatalog.h:132-138, src/RomFetch.cpp:233-236" note: "Without it the card runs a stub ROM: PR#n prints, the graphics dump commands are absent." - name: "ae_transwarp_1.4.bin" path: "roms/ae_transwarp_1.4.bin" @@ -403,28 +437,32 @@ files: aliases: ["ae transwarp rom v1.4.bin"] size: 4096 crc32: "afe37f55" + sha256: "bcbb1a3bab083b0c2988b502f5e024ff4346fab5dbf09276b32724693bcbd0e9" sha1: "7b75534e7895e04859a0b1337801c6eeb0cef52a" - validation: [size, crc32] - source_ref: "src/TranswarpCard.h:166, src/TranswarpCard.cpp:200-218, src/RomCatalog.h:119-125" - note: "Not shipped by POM2. The card accelerates without it and only shadows $F000-$FFFF with the speed-corrected monitor when the dump is present." + validation: [size, crc32, sha256] + source_ref: "src/TranswarpCard.h:167, src/TranswarpCard.cpp:213-231, src/RomCatalog.h:139-146, src/RomFetch.cpp:229-232" + note: "Shipped in roms/ since v0.9.3. The card accelerates without it and only shadows $F000-$FFFF with the speed-corrected monitor when the dump is present; the shadow steps aside for a main ROM reload and covers the new firmware." - name: "thunderclock_u9_v1.3.bin" path: "roms/thunderclock_u9_v1.3.bin" description: "Thunderware ThunderClock+ slot ROM rev 1.3, U9" required: false aliases: ["thunderclock_u9.bin", "thunderclock.rom", "Thunderware_REV_1.3_ROM_U9.bin"] + size: 2048 size_options: [256, 2048] + sha256: "ecca793179427fdd193373080bf23e49a95743bd7b5e0b218c747663938b6c03" sha1: "60f434f5325899d7ea257a6e56e6f53eae65146a" - validation: [size] - source_ref: "src/ClockCard.cpp:469-524, src/RomCatalog.h:150-160" - note: "A 2 KB dump supplies the $C800 expansion ROM as well. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place." + validation: [size, sha256] + source_ref: "src/ClockCard.cpp:469-530, src/RomCatalog.h:174-184, src/RomFetch.cpp:225-228" + note: "The card loads a 256-byte slot ROM or the 2 KB chip, which supplies the $C800 expansion ROM as well; the fetch gate names the 2 KB dump and replaces a 256-byte file. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place." - name: "liron.rom" path: "roms/liron.rom" description: "Apple Liron SmartPort controller firmware, 4 KB" required: false size: 4096 + sha256: "42c1ae66c6bec932669239599eb8989a5364752d56fa5c8997bb23d8dfc0b657" sha1: "fa94ecc2aa23f336f7da9e18bc8f4a6cfbb4ea60" - validation: [size] - source_ref: "src/SlotCardFactory.cpp:194-220, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:87-90" + validation: [size, sha256] + source_ref: "src/SlotCardFactory.cpp:194-220, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:100-104, src/RomFetch.cpp:213-216" note: "The Liron card refuses to plug without it. The SmartPort 3.5 card loads it on machines with physical slots and otherwise presents a synthetic identity." - name: "341-0358-A.bin" path: "roms/341-0358-A.bin" @@ -433,9 +471,10 @@ files: aliases: ["341-0358-a.bin"] size: 65536 crc32: "63819dcb" + sha256: "ce785b913b9fcec6db0fab89b2d94f07fcd07664a822531dcbba3a5ca70ca3bf" sha1: "59c8e8c88bac5c31ada1306b412edfcf5912a720" - validation: [size, crc32] - source_ref: "src/SlotCardFactory.cpp:169-192, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:133-142" + validation: [size, crc32, sha256] + source_ref: "src/SlotCardFactory.cpp:169-192, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:156-164, src/RomFetch.cpp:253-256" note: "The Workstation card leaves its slot empty without it; the card runs its own 65C02 on the upper 32 KB." - name: "341-0438-a.bin" path: "roms/341-0438-a.bin" @@ -443,9 +482,10 @@ files: required: false size: 32768 crc32: "c73ff25b" + sha256: "084587835c1d2c92f5708a9745fdd43ba32136fcdb861a12ee7d690de22dc172" sha1: "440c3f84176c7b9f542da0b6ddf4fb13ec326c46" validation: [size, crc32, sha256] - source_ref: "src/RomCatalog.h:91-96, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:139-141" + source_ref: "src/RomCatalog.h:105-111, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:249-252" note: "No card reads it; the ROM Status panel and the fetch gate check it." - name: "342-0326-a.f12" path: "roms/342-0326-a.f12" @@ -453,10 +493,11 @@ files: required: false size: 2048 crc32: "f04970a9" + sha256: "4ae7ff693a486b155a70a8833047b3d4363464dace6760ed64bfb68db233ed4b" sha1: "806a602195c18ffec637c03b6bb3405188b0dc1e" - validation: [size, crc32] - source_ref: "src/RomCatalog.h:97-102, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:306" - note: "Host keys are mapped directly, no keyboard decode ROM is emulated; the ROM Status panel checks the file only." + validation: [size, crc32, sha256] + source_ref: "src/RomCatalog.h:112-118, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:311, src/RomFetch.cpp:257-260" + note: "Host keys are mapped directly, no keyboard decode ROM is emulated; the ROM Status panel and the fetch gate check the file only." - name: "525_seek_2ms.wav" path: "roms/floppy_samples/525_seek_2ms.wav" description: "MAME floppy sample, 5.25 inch drive, 2 ms head seek" @@ -464,7 +505,7 @@ files: required: false size: 5336 sha1: "2d046a880476218685ed738fe8c8381962afd74a" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent." - name: "525_seek_6ms.wav" path: "roms/floppy_samples/525_seek_6ms.wav" @@ -473,7 +514,7 @@ files: required: false size: 14860 sha1: "6f698055fa6e9da6c5ae3fd6fb05de76b92a45a9" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_seek_12ms.wav" path: "roms/floppy_samples/525_seek_12ms.wav" description: "MAME floppy sample, 5.25 inch drive, 12 ms head seek" @@ -481,7 +522,7 @@ files: required: false size: 22764 sha1: "fbbbb5e8724c076d194e66a4443d299d54a8efd6" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_seek_20ms.wav" path: "roms/floppy_samples/525_seek_20ms.wav" description: "MAME floppy sample, 5.25 inch drive, 20 ms head seek" @@ -489,7 +530,7 @@ files: required: false size: 30060 sha1: "b6cd14944454c743861196edb4fcab1cc9b586d4" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_empty.wav" path: "roms/floppy_samples/525_spin_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, no disk" @@ -497,7 +538,7 @@ files: required: false size: 8864 sha1: "4b13701d9a7f8ab0f0827f17ba80b5c32b4e0fa7" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_loaded.wav" path: "roms/floppy_samples/525_spin_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, disk loaded" @@ -505,7 +546,7 @@ files: required: false size: 17708 sha1: "875f90538a3ff5db863ad4c384e1808841ddea9b" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_start_empty.wav" path: "roms/floppy_samples/525_spin_start_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, no disk" @@ -513,7 +554,7 @@ files: required: false size: 11180 sha1: "b87d89c4b46c36dd78dec3dc5170ca61501e7cd9" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_start_loaded.wav" path: "roms/floppy_samples/525_spin_start_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, disk loaded" @@ -521,7 +562,7 @@ files: required: false size: 17708 sha1: "510476098848e2b5cdfe9f1608f8dfa3207fe9b4" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_end.wav" path: "roms/floppy_samples/525_spin_end.wav" description: "MAME floppy sample, 5.25 inch drive, motor stop" @@ -529,7 +570,7 @@ files: required: false size: 8864 sha1: "f8d9b94c4d92d35d9ffb1117b693fc74a93f613f" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_step_1_1.wav" path: "roms/floppy_samples/525_step_1_1.wav" description: "MAME floppy sample, 5.25 inch drive, single track step" @@ -537,7 +578,7 @@ files: required: false size: 6628 sha1: "669ee98fb9fac4371c72ed0b60be1bc8470bc7f8" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_2ms.wav" path: "roms/floppy_samples/35_seek_2ms.wav" description: "MAME floppy sample, 3.5 inch drive, 2 ms head seek" @@ -545,7 +586,7 @@ files: required: false size: 7450 sha1: "55caafbd19486b8d517e4b33a6fa65250df55e25" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent." - name: "35_seek_6ms.wav" path: "roms/floppy_samples/35_seek_6ms.wav" @@ -554,7 +595,7 @@ files: required: false size: 22230 sha1: "87e5dec269e67497681c15849777ebfc301131c1" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_12ms.wav" path: "roms/floppy_samples/35_seek_12ms.wav" description: "MAME floppy sample, 3.5 inch drive, 12 ms head seek" @@ -562,7 +603,7 @@ files: required: false size: 26540 sha1: "c6b34fc61496943134ac45cc836a24e743caf794" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_20ms.wav" path: "roms/floppy_samples/35_seek_20ms.wav" description: "MAME floppy sample, 3.5 inch drive, 20 ms head seek" @@ -570,7 +611,7 @@ files: required: false size: 44144 sha1: "b2fe4c3a4185146a7d11483d92d4412dd79dbc78" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_empty.wav" path: "roms/floppy_samples/35_spin_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, no disk" @@ -578,7 +619,7 @@ files: required: false size: 17708 sha1: "db04fc097bdd0411cff232f57525ded491b48c6c" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_loaded.wav" path: "roms/floppy_samples/35_spin_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, disk loaded" @@ -586,7 +627,7 @@ files: required: false size: 17708 sha1: "96ce04a5b02af0da6d311f06fc4906a3cf71c78f" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_start_empty.wav" path: "roms/floppy_samples/35_spin_start_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, no disk" @@ -594,7 +635,7 @@ files: required: false size: 17708 sha1: "af770fd9261a8efee23d66cd39b27be7b2ab7853" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_start_loaded.wav" path: "roms/floppy_samples/35_spin_start_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, disk loaded" @@ -602,7 +643,7 @@ files: required: false size: 35308 sha1: "c82b1714378bf2507ed86dea1e9fe743c380abab" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_end.wav" path: "roms/floppy_samples/35_spin_end.wav" description: "MAME floppy sample, 3.5 inch drive, motor stop" @@ -610,7 +651,7 @@ files: required: false size: 17684 sha1: "a8901b692de15eb7a9052f61283f0e7a2b63d67d" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_step_1_1.wav" path: "roms/floppy_samples/35_step_1_1.wav" description: "MAME floppy sample, 3.5 inch drive, single track step" @@ -618,7 +659,7 @@ files: required: false size: 6878 sha1: "40d756d0cb5f7998ca26ac1de142a96a83fa2b97" - source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:335-348" + source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "DejaVuSans.ttf" path: "fonts/DejaVuSans.ttf" description: "DejaVu Sans, the frontend text font" @@ -628,7 +669,7 @@ files: unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 759720 sha1: "3061cf7af25793a655a1ff5a509385f3620f3eb3" - source_ref: "src/main.cpp:522-535" + source_ref: "src/main.cpp:530-543" note: "Falls back to the system DejaVu, Arial Unicode or Segoe UI, then to the ImGui bitmap font." - name: "fa-solid-900.ttf" path: "fonts/fa-solid-900.ttf" @@ -639,7 +680,7 @@ files: unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 426112 sha1: "0c8c9706abc0116f08b66d11a69da6aa9ef7e6bf" - source_ref: "src/main.cpp:582-600" + source_ref: "src/main.cpp:590-608" note: "Without it every icon renders as an empty box." - name: "Apple_II_plus.jpg" path: "pic/Apple_II_plus.jpg" diff --git a/emulators/race.yml b/emulators/race.yml index bcd163e3..621f629a 100644 --- a/emulators/race.yml +++ b/emulators/race.yml @@ -3,8 +3,9 @@ type: libretro core_classification: community_fork source: "https://github.com/libretro/RACE" upstream: "https://github.com/8bitpsp/race" -profiled_date: "2026-03-25" +profiled_date: "2026-09-17" source_commit: "c7810dd7f172827bfa2004813bc000b13786636b" +upstream_commit: "065db2eb614d4414ed49a1a9e241022450bb844d" core_version: "v2.16" display_name: "SNK - Neo Geo Pocket / Color (RACE)" cores: [race] @@ -15,15 +16,19 @@ notes: | Judge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified by theelf, then adapted for libretro. - No external BIOS files are required. The upstream versions (GP2X, PSP) support - optional loading of NPBIOS.BIN, but the libretro port disabled it entirely - with #if 0 in race-memory.c:loadBIOS(). The comment explains: "Using a real - bios file causes nothing but issues." + No external BIOS files are required. The upstream versions (GP2X, PSP) load + NPBIOS.BIN optionally; the libretro port's loadBIOS() returns 0 + unconditionally, and the disabled file-reading body it once carried under + #if 0 was removed in June 2026, so the port no longer names the file. The + core never queries the system directory: the only files it opens are the + ROM and the .ngf flash save in the save directory. - The core uses a software HLE approach: a compiled-in koyote_bin RAM dump - (post-boot console state) is copied into mainram at startup, a fake SWI jump - table is built at cpurom[0xE000], and doBios() in tlcs900h.c handles 33 BIOS - functions in software. The Z80 sound CPU is emulated via cz80 or DrZ80. + The core boots through a software HLE path: a compiled-in koyote_bin RAM + snapshot (12 KB of main RAM captured after a real BIOS has booted) is copied + into mainram, a fake SWI jump table is built at cpurom[0xE000], doBios() in + tlcs900h.c answers 14 BIOS call numbers in software, and the system font + is an embedded table in ngpBios.c. The Z80 sound CPU is emulated via cz80 + or DrZ80. files: [] @@ -33,10 +38,24 @@ analysis: size: 65536 # 64 KB (0x10000) loaded_by: "race-memory.c:loadBIOS()" status: disabled - source_ref: "race-memory.c:337-361" + source_ref: "race-memory.c:330-340, race-memory.c:354-357" upstream_status: optional - upstream_ref: "memory.cpp:346-365 (8bitpsp/race)" + upstream_ref: "memory.cpp:346-366 (8bitpsp/race)" note: | - loadBIOS() is wrapped in #if 0 and always returns 0 in the libretro port. - In upstream (8bitpsp/race, alekmaul/race), the function is live and loads - NPBIOS.BIN optionally, falling back to HLE if not found. + loadBIOS() returns 0 unconditionally in the libretro port, so mem_init() + always takes the HLE branch. The #if 0 body that opened NPBIOS.BIN with + filestream_open() was dropped by commit 0e4783a on 2026-06-15; the + libretro tree no longer contains the name. In upstream, loadBIOS() opens + NPBIOS.BIN from the working directory with fopen(), requires exactly + 0x10000 bytes, and falls back to HLE when the file is absent or short. + hle: + ram_snapshot: "koyote_bin.h:1-6" + ram_snapshot_size: 12288 + ram_snapshot_copy: "race-memory.c:406-407" + jump_table: "race-memory.c:360-369" + interrupt_vectors: "race-memory.c:318-328" + bios_calls: "tlcs900h.c:5837-5921" + bios_call_count: 14 + system_font: "ngpBios.c:15" + filesystem_access: "ROM at main.c:266-268, .ngf flash save at flash.c:231-233 and flash.c:344-346" + system_directory_used: false diff --git a/emulators/ruffle.yml b/emulators/ruffle.yml index 088921c4..3cf6fdfc 100644 --- a/emulators/ruffle.yml +++ b/emulators/ruffle.yml @@ -3,9 +3,9 @@ type: standalone core_classification: game_engine source: "https://github.com/ruffle-rs/ruffle" upstream: "https://github.com/ruffle-rs/ruffle" -profiled_date: "2026-08-08" -source_commit: "1636c780671f5f751504240c462524ae6cfcc4bb" -core_version: "0.5.0" +profiled_date: "2026-09-17" +source_commit: "74ade97342205ac55d264f2ceb1e642573a21d48" +core_version: "0.6.0" display_name: "Adobe Flash (Ruffle)" cores: - ruffle @@ -16,18 +16,20 @@ mode: standalone notes: | Flash Player and Adobe AIR runtime written in Rust, playing SWF files of any ActionScript version, as a desktop binary or as a WebAssembly browser build. - Distribution is by nightly build: Batocera compiles the nightly-2026-01-31 tag - and installs ruffle_desktop as ruffle, RetroDECK pulls the rs.ruffle.Ruffle - Flathub build. ES-DE runs it as `ruffle --fullscreen <rom>`, Batocera as - `ruffle <rom>`, RetroBat as `ruffle.exe --graphics <renderer> --force-align - -q <quality> <rom>`, RetroDECK as `ruffle --graphics vulkan --config - /var/data/ruffle --save-directory <saves>/ruffle <rom>`. The ActionScript - class library is compiled by build_playerglobal into playerglobal_avm1.swf and - playerglobal_avm2.swf and linked into the binary from OUT_DIR - (core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:548), so startup reads - nothing. Locale texts, wgsl shaders, the window icon and the OpenH264 license - are embedded the same way (desktop/src/gui/locale.rs:7-12, - desktop/src/app.rs:464, render/wgpu/src/shaders.rs:28-76). + Versioned releases sit next to the nightlies: Batocera 43.1 compiles the + nightly-2026-01-31 tag and installs ruffle_desktop as ruffle, RetroDECK pulls + the rs.ruffle.Ruffle Flathub build. ES-DE runs it as `ruffle --fullscreen + <rom>`, Batocera as `ruffle <rom>`, RetroBat as `ruffle.exe --graphics + <renderer> --force-align -q <quality> <rom>`, RetroDECK as `ruffle --graphics + vulkan --config /var/data/ruffle --save-directory <saves>/ruffle <rom>`. The + ActionScript class library is compiled by build_playerglobal into + playerglobal_avm1.swf and playerglobal_avm2.swf and linked into the binary + from OUT_DIR (core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:548), so + startup reads nothing. Locale texts, wgsl shaders, the window icon and the + OpenH264 license are embedded the same way (desktop/src/gui/locale.rs:7-12, + desktop/src/app.rs:464, render/wgpu/src/shaders.rs:30-95, + desktop/src/gui/movie.rs:44, + desktop/src/gui/dialogs/preferences_dialog.rs:517). H.264 video is the one external dependency. external_video is a default feature and pulls ruffle_video_external with openh264 @@ -51,30 +53,34 @@ notes: | Text uses system fonts. fontdb::Database::load_system_fonts() fills the database at startup (desktop/src/app.rs:433-434), and both the Flash device fonts and the egui menu bar resolve family names against it and take whatever - face the host answers with. How that face is read now depends on the renderer: - freetype joined the desktop default features, so on Linux it goes through - FreetypeFontRenderer, and the plain memory map of the file is the other branch - (desktop/src/backends/ui.rs:366-406,518-562, - desktop/src/gui/controller.rs:760-803). The families asked for are Times New - Roman, Arial, Courier New and their metric-compatible substitutes, plus the - CJK, Hebrew, Arabic and Thai faces (desktop/src/player.rs:361-412, - desktop/src/gui/controller.rs:639-711), and on Unix fontconfig sorts the - fallback chain (desktop/src/backends/ui.rs:363-376,536-550). No name, path, - size or hash is fixed anywhere. The compiled-in Noto Sans subset sits behind - the default_font feature, which the desktop build does not enable - (core/src/player.rs:84-85, core/Cargo.toml:82,95, desktop/Cargo.toml:22), so - an unmatched family leaves the run without that face rather than falling back + face the host answers with (desktop/src/backends/ui.rs:321-360, + desktop/src/gui/controller.rs:741-787). The face is memory-mapped and parsed + by Ruffle's own rasterizer unless preferences.toml sets device_font_renderer + to freetype, which routes Linux builds through FreetypeFontRenderer instead; + the freetype default feature only compiles that branch, the preference + selects it (desktop/src/backends/ui.rs:190-192,443-487,489-519, + desktop/src/preferences/read.rs:74-75, desktop/Cargo.toml:83). The families + asked for are Times New Roman, Arial, Courier New and their metric-compatible + substitutes, plus the CJK, Hebrew, Arabic and Thai faces + (desktop/src/player.rs:361-414, desktop/src/gui/controller.rs:620-694), and + on Unix fontconfig sorts the fallback chain + (desktop/src/backends/ui.rs:363-376,536-628). No name, path, size or hash is + fixed anywhere. The compiled-in Noto Sans subset sits behind the default_font + feature, which the web and exporter crates enable and the desktop build does + not (core/src/player.rs:84-85, core/Cargo.toml:82,95, web/Cargo.toml:63-65, + exporter/Cargo.toml:16, desktop/Cargo.toml:22), so on the desktop an + unmatched family leaves the run without that face rather than falling back to a bundled one. Files the player writes rather than expects: preferences.toml, bookmarks.toml and recents.toml under --config, each defaulted when absent (desktop/src/preferences.rs:54-96), .sol SharedObjects under --save-directory - (frontend-utils/src/backends/storage.rs:31-60), and the log file - (desktop/src/main.rs:156-166). ruffle-bundle.toml is the manifest inside a - .ruf bundle, which is content alongside the .swf rather than a runtime input + (frontend-utils/src/backends/storage.rs:31-60, desktop/src/cli.rs:129-130), + and the log file under <cache>/ruffle/log (desktop/src/main.rs:155-166). + ruffle-bundle.toml is the manifest inside a .ruf bundle, which is content + alongside the .swf rather than a runtime input (frontend-utils/src/bundle/info.rs:11, frontend-utils/src/bundle.rs:42-53). - mms.cfg is not - implemented, the name appears only in an AVM2 error string + mms.cfg is not implemented, the name appears only in an AVM2 error string (core/src/avm2/error_messages.rs:237). files: diff --git a/emulators/supermodel.yml b/emulators/supermodel.yml index 51b1c204..d2f148e5 100644 --- a/emulators/supermodel.yml +++ b/emulators/supermodel.yml @@ -1,16 +1,23 @@ emulator: Supermodel -type: standalone -source: https://github.com/trzy/Supermodel -upstream: https://github.com/trzy/Supermodel -profiled_date: "2026-03-26" -source_commit: "24d2ffcfc7f14229337f05f4920fe26b56633d9d" -core_version: "0.3a" -display_name: "Supermodel (Sega Model 3)" +type: standalone + libretro +core_classification: community_fork +source: + standalone: "https://github.com/trzy/Supermodel" + libretro: "https://git.libretro.com/libretro/Libretro-Supermodel" +upstream: "https://github.com/trzy/Supermodel" +profiled_date: "2026-09-17" +source_commit: + standalone: "24d2ffcfc7f14229337f05f4920fe26b56633d9d" + libretro: "9f0a51daf6cef6ec2a304538f18c6dbb4c4b9da2" +upstream_commit: "24d2ffcfc7f14229337f05f4920fe26b56633d9d" +core_version: + standalone: "0.3a-WIP" + libretro: "v0.3a-libretro" +display_name: "Sega - Model 3 (Supermodel)" cores: - supermodel systems: - sega-model3 -mode: standalone notes: | Open-source Sega Model 3 arcade emulator by Bart Trzynadlowski (trzy) and @@ -18,54 +25,142 @@ notes: | 2.0/2.1) including Real3D graphics, SCSP sound, DSB1/DSB2 MPEG music boards, drive boards, and net board. Cross-platform (Windows, Linux, macOS). + The libretro core is Libretro-Supermodel, developed by sgiannop on top of + the 2019 libretro attempt and now held under the libretro organisation on + GitHub, mirrored at the same revision on git.libretro.com where the buildbot + pipeline lives (.gitlab-ci.yml). It carries the whole Supermodel tree with + its own OSD under Src/OSD/libretro and reports v0.3a-libretro. The older + libretro/supermodel repository on GitHub keeps the full trzy history and + received the same feature branch as its PR #2, but has no CI file and is + not what the buildbot publishes. + ref: Src/OSD/libretro/libretro.cpp:937-938, Docs/README.md:5-12 + Uses MAME-compatible ROM sets loaded from ZIP archives. GameLoader identifies - games by CRC32 checksums defined in Config/Games.xml. Parent/child ROM set + games by CRC32 checksums defined in Games.xml. Parent/child ROM set relationships exist between regional variants of the same game, not as shared BIOS sets. No standalone BIOS or firmware files are loaded outside of game ZIPs. + The core routes the ZIP reads through the libretro VFS. + ref: Src/OSD/libretro/LibretroWrapper.cpp:828-832, Src/OSD/libretro/vfs_ioapi.cpp + + Standalone: four data files of its own are read from the install tree, Config/ + and Assets/ relative to the working directory on Windows and macOS. On Linux + the same relative directories are used when Config/ exists in the working + directory, otherwise ~/.supermodel/ when present, otherwise the XDG data and + config homes. Supermodel.ini is written from a compiled-in default when it is + absent and rewritten after interactive input configuration; NVRAM/<game>.nv + and Saves/<game>.st<slot> are written by the emulator itself. + ref: Src/OSD/Windows/FileSystemPath.cpp:28-49, Src/OSD/OSX/FileSystemPath.cpp:28-48, + Src/OSD/Unix/FileSystemPath.cpp:51-157, Src/OSD/SDL/Main.cpp:1394-1413, + Src/OSD/SDL/Main.cpp:1451, Src/OSD/SDL/Main.cpp:2239 + + Libretro: retro_init joins "supermodel" to the frontend system directory and + the core creates that directory through the VFS. Supermodel.ini, Games.xml and + Music.xml are looked up flat in it first, then under a Config/ subdirectory + kept for the initial port's layout. Games.xml and Supermodel.ini are also + compiled into the binary from the repository copies, and when neither layout + holds the file the embedded bytes are written to the flat path on first run. + An external file is read in preference to the embedded one and never updated + afterwards. Music.xml has no embedded copy. + ref: Src/OSD/libretro/libretro.cpp:855-863, Src/OSD/libretro/libretro.cpp:889-894, + Src/OSD/libretro/libretro.cpp:1113, Src/OSD/libretro/LibretroWrapper.cpp:166-206, + Src/OSD/libretro/LibretroWrapper.cpp:208-228, Makefile:638-647, Makefile:653-655 + + Libretro NVRAM is the frontend .srm through the memory API. On the first frame + a <game>.nv written by the standalone build is imported from the save directory + when the .srm is empty; it is never written back. Save states are serialised in + memory, and a state file on disk is loaded only when InitStateFile names one, + which the core option layer leaves empty. + ref: Src/OSD/libretro/libretro.cpp:766-781, Src/OSD/libretro/libretro.cpp:1380-1409, + Src/OSD/libretro/libretro.cpp:1685-1690, Src/OSD/libretro/LibretroWrapper.cpp:479, + Src/OSD/libretro/LibretroWrapper.cpp:544-545, Src/OSD/libretro/LibretroConfigProvider.h:15 + + The Legacy3D renderer compiles its shaders from built-in strings and reads a + file only when VertexShader or FragmentShader names one; both default to an + empty string in either build. + ref: Src/Graphics/Shader.cpp:52-63, Src/Graphics/Shader.cpp:100-108, + Src/OSD/libretro/LibretroConfigProvider.h:22-23 EmuDeck installs the Flatpak package (com.supermodel3.Supermodel). Config stored in ~/.supermodel/Config/. No checkBIOS entry in EmuDeck. - Four data files of its own are read from the install tree, Config/ and Assets/ - relative to the working directory on Windows and macOS, under the home - directory on Linux. Supermodel.ini, NVRAM/<game>.nv and Saves/<game>.st<slot> - are written by the emulator itself. - ref: Src/OSD/Windows/FileSystemPath.cpp:28-49 - files: - name: Games.xml - path: "Config/Games.xml" + standalone_path: "Config/Games.xml" + mode: standalone required: true bundled: true + size: 151626 + sha1: "6871a47de90ca67f9ff8e4e280416851a8164563" + md5: "0c7cfc0cba2f2cd674d94e093936f9f8" description: "ROM set definitions" - note: "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it." + note: "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it. Nothing about the file is verified beyond parsing; the hash is that of the copy the pinned revision ships." source_ref: "Src/OSD/SDL/Main.cpp:117, Src/OSD/SDL/Main.cpp:1506, Src/OSD/SDL/Main.cpp:1963, Src/OSD/SDL/Main.cpp:2326-2336, Src/GameLoader.cpp:549-559, Src/GameLoader.cpp:1014-1017" + - name: Games.xml + path: "supermodel/Games.xml" + mode: libretro + required: false + bundled: true + has_builtin: true + size: [148364, 148362] + sha1: + - "fa334ab5ba6366bd28168860c913e6365b9fec96" + - "57500ad35b883acb5e7766c04f5b42e65185715c" + md5: + - "2d16307ceb658636a05d34c7ba935b48" + - "29fd5bc40cea222e040c1a1cfd60ea2e" + description: "ROM set definitions, libretro copy" + note: "Read through the VFS from {system}/supermodel/Games.xml, or Config/Games.xml under it, and parsed from memory. When the read yields nothing the bytes compiled in from Config/Games.xml are parsed instead, so the core identifies every set without a file on disk; a file that is present takes precedence. The second hash is the embedded array, which predates the indentation cleanup of the repository copy by one tab." + source_ref: "Src/OSD/libretro/LibretroWrapper.cpp:187-206, Src/OSD/libretro/LibretroWrapper.cpp:221-222, Src/OSD/libretro/LibretroWrapper.cpp:822, Src/OSD/libretro/LibretroWrapper.cpp:834-859, Src/GameLoader.cpp:1019-1030, Makefile:645-647" + + - name: Supermodel.ini + path: "supermodel/Supermodel.ini" + mode: libretro + required: false + bundled: true + has_builtin: true + size: 9421 + sha1: "cbda2b3fa65e37c5c2824a4630f95f145533c360" + md5: "06533608174992f6ea180ae190011778" + description: "Configuration override" + note: "Read from {system}/supermodel/Supermodel.ini, or Config/Supermodel.ini under it, when present; a file that fails to parse aborts the load. Core options are applied over it afterwards, so it only reaches keys the options do not set and per-game sections. Extracted from the embedded copy when absent." + source_ref: "Src/OSD/libretro/LibretroWrapper.cpp:187-206, Src/OSD/libretro/LibretroWrapper.cpp:219-220, Src/OSD/libretro/LibretroWrapper.cpp:812-817, Src/OSD/libretro/LibretroWrapper.cpp:858, Src/OSD/libretro/LibretroWrapper.cpp:865-866, Makefile:653-655" + - name: p1crosshair.bmp - path: "Assets/p1crosshair.bmp" + standalone_path: "Assets/p1crosshair.bmp" + mode: standalone size: 295992 + sha1: "581cea232c296c7bd76f3101c3ae1bffdf5abf08" + md5: "9012018f50f707c1707009346eb5d18b" required: true bundled: true description: "Player 1 light gun crosshair texture" - note: "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2." - source_ref: "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2379-2385, Assets/DIR.txt" + note: "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2. The libretro build opens the same two files from the Assets directory of the standalone layout, outside the frontend directories, but forces the vector style and never draws them, and its repository does not ship them." + source_ref: "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2379-2385, Assets/DIR.txt, Src/OSD/libretro/libretroCrosshair.cpp:36-60, Src/OSD/libretro/LibretroWrapper.cpp:465-471, Src/OSD/libretro/LibretroConfigProvider.h:361" - name: p2crosshair.bmp - path: "Assets/p2crosshair.bmp" + standalone_path: "Assets/p2crosshair.bmp" + mode: standalone size: 295992 + sha1: "13c5e692c7acf2ec8243ac421d58fdf69c6c2370" + md5: "866dbf59a0e2d849de2365e1c953cc97" required: true bundled: true description: "Player 2 light gun crosshair texture" note: "Read in the same call as the player 1 bitmap and equally fatal when it fails to load." - source_ref: "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2379-2385" + source_ref: "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2379-2385, Src/OSD/libretro/libretroCrosshair.cpp:39, 55-58" - name: Music.xml - path: "Config/Music.xml" + path: "supermodel/Music.xml" + standalone_path: "Config/Music.xml" required: false bundled: true + size: 9224 + sha1: "b44ed959fe2948a03d81b98e67ca32f2b4c37e78" + md5: "ddb4e23db15dda67539eee24de23de4b" description: "Custom MPEG music track map" - note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies." - source_ref: "Src/OSD/SDL/Main.cpp:118, Src/OSD/SDL/Main.cpp:943, Src/Sound/MPEG/MpegAudio.cpp:88-108" + note: "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies. The shipped file is a commented example. The libretro core resolves it beside Games.xml and has no embedded copy." + source_ref: "Src/OSD/SDL/Main.cpp:118, Src/OSD/SDL/Main.cpp:943, Src/Sound/MPEG/MpegAudio.cpp:88-108, Src/OSD/libretro/LibretroWrapper.cpp:223, Src/OSD/libretro/LibretroWrapper.cpp:494" exclusion_note: > The Sega Model 3 arcade hardware has no shared system BIOS. Each game board diff --git a/emulators/xemu.yml b/emulators/xemu.yml index f26d34aa..a39bbe6d 100644 --- a/emulators/xemu.yml +++ b/emulators/xemu.yml @@ -1,83 +1,162 @@ -emulator: Xemu -type: standalone -source: "https://github.com/xemu-project/xemu" +emulator: xemu +type: standalone + libretro +core_classification: community_fork +source: + standalone: "https://github.com/xemu-project/xemu" + libretro: "https://github.com/LibretroAdmin/xemu-libretro" +upstream: "https://github.com/xemu-project/xemu" logo: "https://raw.githubusercontent.com/xemu-project/xemu/master/data/xemu_64x64.png" -profiled_date: "2026-03-18" -source_commit: "d73326b62199c6dd952ef512947710e1333a49d3" -core_version: "0.8.x" -display_name: "xemu (Xbox)" +profiled_date: "2026-09-17" +source_commit: + standalone: "f9b14039e5bb56ae2d8f028e31e7cc19f13f7e12" + libretro: "d9804db79f87f6a6a5548b14ca4a8d5164390338" +core_version: + standalone: "0.8.136-49-gf9b14039e5" + libretro: "libretro-experimental" +display_name: "Microsoft - Xbox (xemu)" cores: - xemu -systems: [microsoft-xbox] +systems: + - microsoft-xbox notes: | - Xemu is a free, open-source Xbox emulator based on QEMU. - Three firmware files are required for operation: MCPX boot ROM, - flash ROM (BIOS), and EEPROM image. A pre-built HDD image is - also needed. The EEPROM can be auto-generated by xemu if not - provided. Config stored in xemu.toml under sys.files section. + Full-system Xbox emulator built on QEMU. One tree builds the standalone + application and, with the libretro build option, a core in which a shim + replaces ui/xemu.c: the QEMU machine runs on its own thread, retro_run pumps + the RetroPads into the Duke controllers and blits the NV2A surface into the + frontend's framebuffer through an OpenGL 4.0 core context, and content is a + .iso or .xiso image that QEMU opens from its full path. Save states are not + implemented; game saves live inside the hard disk image. + ref: meson_options.txt:52-53, ui/xemu-libretro.c:1-27, + ui/xemu-libretro.c:609-617, ui/xemu-libretro.c:680-697, + ui/xemu-libretro.c:874-876 + + Four files feed the machine through the sys.files block of the + configuration: the MCPX boot ROM, the flash ROM, the EEPROM and the hard disk + image. qemu_init turns them into machine arguments: bootrom= on the xbox + machine, -bios, a smbus-storage device and an IDE drive at index 0 with + locked=on. The standalone keeps them in xemu.toml, read from the SDL + preference directory or from the directory of the executable when a + xemu.toml already sits there, and the file pickers of the settings menu fill + the four paths; nothing is searched by name and only the EEPROM has a + default location. + ref: config_spec.yml:353-367, system/vl.c:2983-3006, system/vl.c:3030-3074, + ui/xemu-settings.cc:70-133, ui/xemu.c:1382-1402, + ui/xui/main-menu.cc:1553-1575 + + The core reads the same four files from the frontend system directory, each + under a name picked by a core option that offers a default and a few + alternatives, and keeps its configuration as xemu-libretro.toml in that + directory. The boot ROM, the flash ROM and the disk image are opened before + the machine starts, and a missing one fails the load with a message naming + the file. The EEPROM is left to the machine, which generates one. + ref: ui/xemu-libretro.c:112-127, ui/xemu-libretro.c:139-145, + ui/xemu-libretro.c:178-236 + + The standalone boots whatever it can. An unreadable flash file or a + rejected EEPROM clears autostart and queues an error for the HUD, an + unreadable disk image only queues the error, and an empty boot ROM path + starts the flash without the overlay. + ref: system/vl.c:2983-3006, system/vl.c:3030-3039, system/vl.c:3041-3053, + system/vl.c:3060-3074, hw/xbox/xbox.c:143-165 files: - - name: "mcpx_1.0.bin" - description: "MCPX HLE boot ROM (v1.0)" + - name: mcpx_1.0.bin + path: mcpx_1.0.bin required: true size: 512 - source_ref: "hw/xbox/xbox.c:151 (bootrom_size != 512 -> error)" - config_key: "sys.files.bootrom_path" - note: | - Overlaid on the last 512 bytes of the flash ROM region at boot. - Mapped to 0xFFFFFE00-0xFFFFFFFF. Disabled after early init - via LPC config register write (hw/xbox/xbox_pci.c:362). - Machine property: -machine xbox,bootrom=<path> + validation: [size] + config_key: sys.files.bootrom_path + description: "MCPX boot ROM" + note: >- + Passed as the bootrom machine property and read over the last 512 bytes + of the flash image, which the machine maps as a writable overlay at the + top of the address space. qemu_init drops the path with an error when + the file cannot be opened or is not 512 bytes, and the machine then runs + the flash alone. The core option xemu_bootrom names the file, default + mcpx_1.0.bin, with mcpx.bin, MCPX_1.0.bin and boot_rom.bin offered as + alternatives; the core refuses to load when the chosen file is absent. + source_ref: + standalone: "system/vl.c:2983-3006, hw/xbox/xbox.c:143-171, hw/xbox/xbox.c:468-470" + libretro: "ui/xemu-libretro.c:113-114, ui/xemu-libretro.c:192-193, ui/xemu-libretro.c:210-236" - - name: "Complex_4627.bin" - description: "Xbox flash ROM / BIOS (256 KB, kernel 4627)" + - name: Complex_4627.bin + path: Complex_4627.bin required: true - size_options: [262144, 524288, 1048576] - size_note: "Must be a multiple of 64 KB. Default 256 KB." - source_ref: "hw/xbox/xbox.c:70-81 (bios_name, bios_size validation)" - config_key: "sys.files.flashrom_path" - note: | - Loaded as -bios argument (system/vl.c:3052-3053). - Mapped to 0xFF000000-0xFFFFFFFF with mirroring. - Common variants: Complex_4627 (1.0), Complex_4034 (debug), - Complex_4817 (1.1). Any valid Xbox BIOS dump works. + size: [262144, 524288, 1048576] + validation: [size] + size_note: "Any size that is a positive multiple of 64 KiB is mapped; the image is mirrored across the 16 MB flash window" + config_key: sys.files.flashrom_path + description: "Xbox flash ROM image" + note: >- + Passed as -bios and opened through qemu_find_file. An image whose size + is not a multiple of 65536 bytes counts as a failed load, like a missing + file: the 256 KB region is filled with 0xFF and the machine starts + anyway. An unreadable path clears autostart in the standalone. The core + option xemu_flashrom names the file, default Complex_4627.bin, with + Complex_4627_v1.03.bin, complex_4627.bin, cerbios.bin, Cerbios.bin, + bios.bin, xbox_bios.bin and Complex.bin offered as alternatives; the + core refuses to load when the chosen file is absent. + source_ref: + standalone: "system/vl.c:3041-3053, hw/xbox/xbox.c:63-123" + libretro: "ui/xemu-libretro.c:115-118, ui/xemu-libretro.c:195-196, ui/xemu-libretro.c:210-236" - - name: "eeprom.bin" - description: "Xbox EEPROM dump (256 bytes)" + - name: xbox_eeprom.bin + path: xbox_eeprom.bin + standalone_path: eeprom.bin + aliases: [eeprom.bin] required: false - hle_fallback: true + has_builtin: true size: 256 - source_ref: "system/vl.c:2939 (size != 256 -> error)" - config_key: "sys.files.eeprom_path" - note: | - Loaded via smbus-storage device (hw/xbox/smbus_storage.c:157). - Auto-generated as XBOX_EEPROM_VERSION_R1 if missing - (system/vl.c:2918-2919). Default path: <config_dir>/eeprom.bin. - Contains serial, MAC, HDD key, region, video standard. - Structure defined in hw/xbox/eeprom_generation.h. + validation: [size] + config_key: sys.files.eeprom_path + description: "Xbox EEPROM image" + note: >- + Attached as the smbus-storage device at address 0x54, which reads the + whole file at realize and writes it back on every guest write. A missing + file is generated as a retail 1.0 image with a random serial, MAC, hard + disk key and online key, the North American region and the NTSC-M video + standard; a file of any size other than 256 bytes is rejected and + autostart is cleared. The standalone defaults to eeprom.bin next to + xemu.toml. The core option xemu_eeprom names the file, default + xbox_eeprom.bin, with eeprom.bin and EEPROM.bin offered as alternatives, + and does not check for it before the machine starts. + source_ref: + standalone: "system/vl.c:2909-2949, system/vl.c:3030-3039, ui/xemu-settings.cc:135-146, hw/xbox/smbus_storage.c:56-87, hw/xbox/smbus_storage.c:90-128, hw/xbox/smbus_storage.c:155-160, hw/xbox/eeprom_generation.c:93-140" + libretro: "ui/xemu-libretro.c:119-120, ui/xemu-libretro.c:198-199, ui/xemu-libretro.c:204-209" - - name: "xbox_hdd.qcow2" - description: "Xbox HDD image (8 GB, qcow2 format)" + - name: xbox_hdd.qcow2 + path: xbox_hdd.qcow2 required: true - source_ref: "system/vl.c:3060-3073 (hdd_path loading)" - config_key: "sys.files.hdd_path" - note: | - Attached as IDE drive index=0 with locked=on. - Must contain Xbox partitions (C, E, X, Y, Z). - Pre-built images available from xemu project. - Not a BIOS file - excluded from retrobios packs. + config_key: sys.files.hdd_path + description: "Xbox hard disk image, 8 GB with the retail partition layout" + note: >- + Attached as the IDE drive at index 0 with locked=on when the path is set + and the file opens; an unreadable file only queues an error and an empty + path attaches no drive. Snapshots are stored inside the image. The + project publishes a formatted image carrying its own unsigned dashboard + and empty TDATA and UDATA folders. The core option xemu_hdd names the + file, default xbox_hdd.qcow2, with xbox_hdd_8gb.qcow2, hdd.qcow2 and + xbox_hdd.img offered as alternatives; the core refuses to load when the + chosen file is absent. + source_ref: + standalone: "system/vl.c:3060-3074, ui/xemu-snapshots.c:156" + libretro: "ui/xemu-libretro.c:121-123, ui/xemu-libretro.c:200-202, ui/xemu-libretro.c:210-236" + + - name: wpcap.dll + required: false + description: "Npcap packet capture library" + note: >- + Loaded by name on Windows, with every entry point resolved individually, + when networking is enabled with the pcap backend; the netdev is not + created when the library or one of its symbols is missing. Networking is + off by default and the backend defaults to NAT. + source_ref: "winpcap-loader/loader.c:79-113, ui/xemu-net.c:68-78, system/vl.c:2870-2875, config_spec.yml:327-335" machine_properties: - bootrom: "MCPX boot ROM path (string)" - avpack: "Video connector type: composite, scart, svideo, vga, rfu, hdtv, none" - short-animation: "Skip Xbox boot animation (bool)" - smc-version: "SMC version string, 3 chars, default P01" - video-encoder: "Video encoder chip: conexant (default), focus, xcalibur" + bootrom: "MCPX boot ROM path" + avpack: "Video connector: scart, hdtv, vga, rfu, svideo, composite, none" + short-animation: "Skip the boot animation" + smc-version: "SMC version string, default P01" + video-encoder: "Encoder presented to the OS: conexant, focus, xcalibur" source_ref: "hw/xbox/xbox.c:446-497" - -memory_layout: - ram: "64 MB or 128 MB (configurable via sys.mem_limit)" - flash_rom: "0xFF000000-0xFFFFFFFF (mirrored per bios_size)" - mcpx_overlay: "Last bios_size bytes, overlays flash ROM at reset" - source_ref: "hw/xbox/xbox.c:64-173" diff --git a/emulators/xendroid.yml b/emulators/xendroid.yml index 21ce308e..cb16a3f2 100644 --- a/emulators/xendroid.yml +++ b/emulators/xendroid.yml @@ -4,10 +4,10 @@ core_classification: community_fork source: "https://github.com/rfandango/XenDroid" upstream: "https://github.com/has207/xenia-edge" author: "rfandango" -profiled_date: "2026-08-12" +profiled_date: "2026-09-17" source_commit: "779680ade075d2d2a4c589c6a8d57a8e26c116c0" upstream_commit: "84cf209221160590768f615a0369a9c4a1456bbf" -core_version: "b70d643" +core_version: "0b11201" display_name: "Microsoft - Xbox 360 (XenDroid)" cores: - "xendroid" @@ -23,19 +23,26 @@ notes: | app, AAudio and OpenSLES audio systems, an Android input driver, and Android providers for the guest keyboard, the message box and disc swap. The library recognises ISO, ZAR, GOD, extracted XEX folders and STFS containers, and the - boot path reads the file signature before mounting. + boot path reads the file signature before mounting. A disc that carries a + content tree has its packages staged out through the app cache and installed + under content: the library offers it when the game is launched and the + install screen accepts the disc directly. ref: emulator-core/src/main/cpp/CMakeLists.txt:30-56, 112-152, - emulator-core/src/main/cpp/xendroid_emu.cpp:333-346, 671-676, - app/src/main/java/xendroid/compose/data/GameFormat.kt:6, 26-32 + emulator-core/src/main/cpp/xendroid_emu.cpp:337-350, 675-680, + app/src/main/java/xendroid/compose/data/GameFormat.kt:6, 26-32, + emulator-core/src/main/cpp/xenia/src/xenia/vfs/content_install_standalone.cc:138-183, 185-267, + app/src/main/java/xendroid/compose/ui/library/GameLibraryViewModel.kt:142-152, + app/src/main/java/xendroid/compose/ui/content/InstallContentViewModel.kt:127-172 Releases are tagged XenDroid-<short commit> and the version name is the git - hash handed to the build, so b70d643 is both the head of main and the current - release. version.h names canary_experimental dc561e4df, carried over from the - ax360e tree the project started as, and it does not describe the vendored - code. The Edge revision is named by the periodic merge pull request instead, - and Edge rebases its branch, so that commit is no longer reachable there. - ref: app/build.gradle:34, emulator-core/src/main/cpp/version.h:4-5, - .github/workflows/XenDroid.yml:185-187 + hash handed to the build, so 0b11201 is the current release; the two commits + main carries past it touch the README only. version.h names + canary_experimental dc561e4df, carried over from the ax360e tree the project + started as, and it does not describe the vendored code. The Edge revision is + named by the periodic merge pull request instead, and Edge rebases its + branch, so that commit is no longer reachable there. + ref: app/build.gradle:34, .github/workflows/XenDroid.yml:178, 188, 274-275, + emulator-core/src/main/cpp/version.h:4-5 No Xbox 360 system file is read. xboxkrnl, xam and xbdm are HLE modules registered at startup, the XEX1 retail, XEX2 retail and XEX2 devkit keys are @@ -52,12 +59,15 @@ notes: | passed as a launch argument beside the config path and the log path. content, cache, cache0, cache1, patches and plugins hang off it, the global configuration is xenia-canary.config.toml and per title overrides live in - config/<TITLE_ID>.config.toml. The custom driver directory sits in internal - storage instead, because the external filesystem cannot carry an executable - mapping. - ref: emulator-core/src/main/java/xendroid/compose/Application.java:14-33, 84-88, - app/src/main/java/xendroid/compose/EmulatorHostActivity.kt:231-236, - emulator-core/src/main/cpp/xendroid_emu.cpp:312-317, 355-381 + config/<TITLE_ID>.config.toml. The bundled default_config.toml is written + under the storage root at every start, rewritten whenever the asset differs + from the copy on disk, and seeds the global configuration when that file is + missing. The custom driver directory sits in internal storage instead, + because the external filesystem cannot carry an executable mapping. + ref: emulator-core/src/main/java/xendroid/compose/Application.java:14-33, 80-91, + app/src/main/java/xendroid/compose/settings/ConfigStore.kt:82-89, + app/src/main/java/xendroid/compose/EmulatorHostActivity.kt:237-242, + emulator-core/src/main/cpp/xendroid_emu.cpp:316-321, 359-385 479 game patches ship inside the APK, synced at build time from the xenia-canary game-patches submodule pinned at 3553a5ae. The patch database @@ -86,7 +96,7 @@ files: The configured path is read before the instance is created and opened through adrenotools when the file exists, otherwise the system libvulkan.so is used. The row is hidden on devices without /dev/kgsl-3d0. - source_ref: "app/src/main/java/xendroid/compose/ui/settings/SettingRows.kt:175-200, app/src/main/java/xendroid/compose/settings/SettingsRepository.kt:34-35, 140, emulator-core/src/main/java/xendroid/compose/Utils.java:164-236, emulator-core/src/main/java/xendroid/compose/Application.java:21-24, emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:49, 168-192, 203" + source_ref: "app/src/main/java/xendroid/compose/ui/settings/SettingRows.kt:175-200, app/src/main/java/xendroid/compose/settings/SettingsRepository.kt:34-35, 140, emulator-core/src/main/java/xendroid/compose/Utils.java:164-236, emulator-core/src/main/java/xendroid/compose/Application.java:21-24, emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:106, 236-260, 271" - name: "<font>.ttf" required: false @@ -146,7 +156,7 @@ files: The title directory is mounted as the plugins device and each enabled entry whose hash matches the running module is loaded as a user module on its own thread. - source_ref: "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:175-233, 235-252, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:2625-2630" + source_ref: "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:175-233, 235-252, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:2622-2627" - name: Account required: false diff --git a/emulators/xenia-edge.yml b/emulators/xenia-edge.yml index 492a9112..4b431a36 100644 --- a/emulators/xenia-edge.yml +++ b/emulators/xenia-edge.yml @@ -3,8 +3,8 @@ type: standalone core_classification: community_fork source: "https://github.com/has207/xenia-edge" upstream: "https://github.com/has207/xenia-edge" -source_commit: "62225fd74061634b17f036b87e20558bbadf05f9" -profiled_date: "2026-08-10" +source_commit: "d059e1771888ce5f3ae2da34521dc5ca416f1c6b" +profiled_date: "2026-09-17" core_version: "edge" display_name: "Xenia Edge (Xbox 360)" cores: @@ -22,13 +22,13 @@ notes: | into a xenia-edge component and executes bin/xenia_edge. No Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules - registered at startup (src/xenia/emulator.cc:382-391), the XEX2 retail and devkit AES - keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:61-66), and every + registered at startup (src/xenia/emulator.cc:392-401), the XEX2 retail and devkit AES + keys are constant arrays in the binary (src/xenia/cpu/xex_module.cc:67-72), and every XConfig setting is synthesised from cvars and constants by BuildSetting rather than read from a flash image (src/xenia/kernel/xconfig.cc:87-246, 259-272). When the launched title is itself a system title the kernel resolves xam.xex, then $flash_xam.xex, through the guest filesystem under the \SystemRoot symlink - pointing at that title's own directory (src/xenia/emulator.cc:737-752); that is a + pointing at that title's own directory (src/xenia/emulator.cc:773-788); that is a companion module inside the dump the user launched, not a host-side lookup. The fork's data ships inside the executable. assets/font/Inter-VariableFont @@ -36,26 +36,28 @@ notes: | assets/locale catalogues are compiled to .mo at configure time and bundled, with no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:48-76). The UI font is read from that buffer with AddFontFromMemoryTTF - (src/xenia/ui/imgui_drawer.cc:378-388), and xe::EmbeddedBundle decodes the SDL controller - mappings (src/xenia/hid/sdl/sdl_input_driver.cc:148-165), the canary game patches - (src/xenia/patcher/patch_db.cc:304-310), the game-compatibility master.json + (src/xenia/ui/imgui_drawer.cc:374-384), and xe::EmbeddedBundle decodes the SDL controller + mappings (src/xenia/hid/sdl/sdl_input_driver.cc:147-164), the canary game patches + (src/xenia/patcher/patch_db.cc:318-324), the game-compatibility master.json (src/xenia/app/game_compat_db.cc:47-58) and the x360db games.json (src/xenia/app/game_title_db.cc:50-60). Three cvars accept a file and name none by default, so nothing is expected at a fixed path: custom_font_path falls back to the embedded Inter - (src/xenia/ui/imgui_drawer.cc:39-44, 364-397), mappings_file to the embedded controller DB - (src/xenia/hid/sdl/sdl_input_driver.cc:35-38, 148-152), achievement_sound_path leaves the + (src/xenia/ui/imgui_drawer.cc:39-44, 360-393), mappings_file to the embedded controller DB + (src/xenia/hid/sdl/sdl_input_driver.cc:34-37, 147-151), achievement_sound_path leaves the achievement sound silent (src/xenia/ui/audio_helper.cc:21-24, 38-52). For glyphs the embedded font lacks, the host font comes from the OS: tahoma.ttf and msgothic.ttc out of the Windows fonts folder, or the fontconfig sans-serif and - CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:399-481, 483-567). + CJK matches on Linux (src/xenia/ui/imgui_drawer.cc:395-477, 479-563). Everything under the storage root is written by the emulator or dropped in by the user: xenia-edge.config.toml and per-game .config.toml (src/xenia/config.cc:43-46), - patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:377, - src/xenia/patcher/patch_db.cc:34-58), plugins/<title id>/plugins.toml behind allow_plugins, + patches/*.patch.toml read on top of the embedded set (src/xenia/emulator.cc:387, + src/xenia/patcher/patch_db.cc:34-52, 60-75) and listed by the patches panel + beside the bundled ones (src/xenia/patcher/patch_db.cc:373-397), + plugins/<title id>/plugins.toml behind allow_plugins, which defaults false (src/xenia/patcher/plugin_loader.cc:16-38, 58-72), content, cache0, cache1, - scratch and mu (src/xenia/emulator.cc:1442-1501). portable.txt next to the executable + scratch and mu (src/xenia/emulator.cc:1478-1537). portable.txt next to the executable keeps the storage root there instead of the user folder (src/xenia/app/xenia_main.cc:524-538). @@ -79,7 +81,7 @@ files: system: microsoft-xbox-360 required: true description: "DXIL signer and validator from DirectX Shader Compiler 1.9.2602.24" - source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:227-236, src/xenia/gpu/d3d12/pipeline_cache.cc:105-113, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614" + source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:267-291, src/xenia/gpu/d3d12/pipeline_cache.cc:112-120, src/xenia/ui/redist_installer_wx.cc:79-87, 120-122, src/xenia/ui/redist_installer_wx.cc:174-182, src/xenia/ui/redist_installer_wx.cc:582-614" note: >- The only shader library the backend still needs. Loaded by full path from the D3D12 folder next to the executable, then by plain name from the @@ -87,9 +89,8 @@ files: D3D12/. D3D12 rejects an unsigned shader, so PipelineCache::Initialize stops when IsSignerAvailable() is false and asks for a recent dxil.dll in the D3D12 folder; that failure propagates to "Failed to setup - graphics_system!" (src/xenia/emulator.cc:421-428). Windows defaults to - gpu = "d3d12" (src/xenia/emulator.cc:109, the cvar having moved - there beside the code that reads it) and the backend factory + graphics_system!" (src/xenia/emulator.cc:432-443). Windows defaults to + gpu = "d3d12" (src/xenia/emulator.cc:119) and the backend factory only falls back when D3D12GraphicsSystem::IsAvailable() is false, which tests the D3D12 API itself, not the redistributable. Taken from bin/x64/dxil.dll in dxc_2026_05_27.zip of DirectXShaderCompiler release @@ -103,7 +104,7 @@ files: system: microsoft-xbox-360 required: true description: "DirectX 12 Agility SDK 1.619.3 runtime" - source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:263-274, src/xenia/ui/windowed_app_main_win.cc:25-28, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:623-668" + source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:293-305, src/xenia/ui/windowed_app_main_win.cc:25-28, src/xenia/ui/redist_installer_wx.cc:88-94, 123-126, src/xenia/ui/redist_installer_wx.cc:623-668" note: >- The binary exports D3D12SDKVersion 619 and D3D12SDKPath ".\D3D12\", so d3d12.dll loads it at the first device creation. The provider checks for @@ -119,7 +120,7 @@ files: system: microsoft-xbox-360 required: false description: "Direct3D 12 debug layer from Agility SDK 1.619.3" - source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:295-323, src/xenia/ui/redist_installer_wx.cc:127-134, src/xenia/ui/redist_installer_wx.cc:670-715" + source_ref: "src/xenia/ui/d3d12/d3d12_provider.cc:326-363, src/xenia/ui/redist_installer_wx.cc:127-134, src/xenia/ui/redist_installer_wx.cc:670-715" note: >- Reached only when d3d12_debug is set, which defaults false (src/xenia/ui/d3d12/d3d12_provider.cc:23). Fetching it re-extracts D3D12Core.dll alongside, diff --git a/emulators/zesarux.yml b/emulators/zesarux.yml index 37da694c..86e39a00 100644 --- a/emulators/zesarux.yml +++ b/emulators/zesarux.yml @@ -3,8 +3,8 @@ type: standalone core_classification: other source: "https://github.com/chernandezba/zesarux" upstream: "https://github.com/chernandezba/zesarux" -source_commit: "91cce79eb7eea9cc4f5e56b6cc0949d2164a0977" -profiled_date: "2026-08-10" +source_commit: "331ba12286c008230643ce98a2963bbfe60f3b35" +profiled_date: "2026-09-17" core_version: "13.1-SN" display_name: "Sinclair - ZX Spectrum and clones (ZEsarUX)" verification: existence @@ -34,33 +34,33 @@ systems: notes: | Multi-machine Sinclair emulator. Every ROM is read from disk at run time; - none is compiled into the binary. `rom_load` (src/cpu.c:3158-3751) maps + none is compiled into the binary. `rom_load` (src/cpu.c:3203-3803) maps `current_machine_type` to a filename through a switch, then resolves it with - `find_sharedfile` (src/utils.c:1310-1348), which searches the current directory, + `find_sharedfile` (src/utils.c:1314-1352), which searches the current directory, `../Resources/`, `INSTALL_PREFIX/share/zesarux/` and the directory holding the binary, in that order. - ZEsarUX ships these files and installs them next to the binary: `src/configure:1909` + ZEsarUX ships these files and installs them next to the binary: `src/configure:1921` lists `*.rom`, `zxuno.flash`, `zxmmcplus.flash`, `tbblue.mmc`, `pcw_8x_boot*dsk`, `mantransfev3.bin` and `alternate_roms` in COMMONFILES. A normal install therefore already carries every entry below, which is why they are marked `bundled: true`. A missing machine ROM is not fatal: `rom_load` logs an error and returns - (src/cpu.c:3420-3428), the panic having been removed deliberately. The machine then + (src/cpu.c:3465-3473), the panic having been removed deliberately. The machine then runs on uninitialised memory, so the ROMs the switch names are marked required for the machine they serve. The one hard failure is `prism_failsafe.rom`, which `prism_load_failsafe_rom` loads through its own path and which calls `cpu_panic` when missing or short (src/machines/prism.c:581-590). The emulator verifies no hash on any of these files. It does check size: the - machine ROMs are compared against `get_rom_size` (src/utils.c:3514-3588) and the + machine ROMs are compared against `get_rom_size` (src/utils.c:4084-4158) and the interface ROMs against their own `*_ROM_SIZE` constants, with a mismatch logged as an error. `validation: [size]` is set only where the code makes that comparison. - `--romfile` (src/start.c:998) overrides the machine ROM with any file the user - picks (src/cpu.c:3410-3413); the ROMs under `alternate_roms/` and the extra + `--romfile` (src/start.c:4870-4874) overrides the machine ROM with any file the user + picks (src/cpu.c:3455-3458); the ROMs under `alternate_roms/` and the extra variants in the install root exist for that path and are documented in the shipped src/ALTERNATEROMS file. Interface ROMs are equally overridable (`--divide-rom`, `--divmmc-rom`, `--dandanator-rom`, `--ifrom-rom`, @@ -68,23 +68,25 @@ notes: | ES-DE drives ZEsarUX for its `zxnext` system with `--machine tbblue --tbblue-fast-boot-mode --enable-esxdos-handler`. Fast boot swaps - `tbblue_loader.rom` for `48.rom` (src/cpu.c:3263-3264), and the esxdos handler needs + `tbblue_loader.rom` for `48.rom` (src/cpu.c:3308-3309), and the esxdos handler needs the divMMC firmware `esxmmc085.rom`, so that path loads `48.rom`, `esxmmc085.rom` and the `tbblue.mmc` card image rather than a dedicated Next ROM. ZEsarUX also loads UI and bundled-software resources through the same `find_sharedfile` path: `keyboards/*.bmp` on-screen keyboard art - (src/menu/menu_items.c:19210, 21731, 21752), `z88_shortcuts.bmp` - (src/video/screen.c:11078) and the `my_soft/` homebrew collection - (src/menu/menu_items.c:32146, 32205; src/menu/menu_items_storage.c:582). They are - application resources rather than system firmware and carry no entry below. + (src/menu/menu_items.c:19258, 21784, 21805), `z88_shortcuts.bmp` + (src/video/screen.c:11210), the `my_soft/` homebrew collection + (src/menu/menu_items.c:32199, 32258; src/menu/menu_items_storage.c:582), the + `copiers/*.zsf` tape copier snapshots (src/menu/menu_items_storage.c:651, 742) and + `editionnamegame.tzx` (src/cpu.h:73, src/utils.c:17879). They are application + resources rather than system firmware and carry no entry below. `PrismChime.bin` sits in the source tree but no code reads it and COMMONFILES does not install it. files: # ============================================================ # ZX Spectrum and clones - machine ROMs - # rom_load switch, src/cpu.c:3166-3406 + # rom_load switch, src/cpu.c:3212-3451 # ============================================================ - name: "48.rom" @@ -94,8 +96,8 @@ files: bundled: true system: sinclair-zx-spectrum fast_boot: "tbblue" - source_ref: "src/cpu.c:3168-3177 (16K/48K, CZ 2000, CZ Spectrum), src/cpu.c:3263 (tbblue fast boot), src/utils.c:3528 (size)" - note: "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3543-3551)." + source_ref: "src/cpu.c:3213-3222 (16K/48K, CZ 2000, CZ Spectrum), src/cpu.c:3308 (tbblue fast boot), src/utils.c:4098 (size)" + note: "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3588-3597)." - name: "48es.rom" size: 16384 @@ -103,7 +105,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3267-3268, src/utils.c:3528" + source_ref: "src/cpu.c:3312-3314, src/utils.c:4098" note: "Spanish 48K+ ROM, selected for MACHINE_ID_SPECTRUM_48_PLUS_SPA." - name: "inves.rom" @@ -112,8 +114,8 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3179-3181, src/utils.c:3528" - note: "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3441-3447)." + source_ref: "src/cpu.c:3224-3227, src/utils.c:4098" + note: "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3486-3492)." - name: "128.rom" size: 32768 @@ -121,7 +123,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3202-3203, src/utils.c:3530" + source_ref: "src/cpu.c:3247-3249, src/utils.c:4100" - name: "128s.rom" size: 32768 @@ -129,7 +131,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3206-3207, src/utils.c:3530" + source_ref: "src/cpu.c:3251-3253, src/utils.c:4100" - name: "p2.rom" size: 32768 @@ -137,7 +139,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3213-3214, src/utils.c:3530" + source_ref: "src/cpu.c:3258-3260, src/utils.c:4100" note: "ZX Spectrum +2." - name: "p2f.rom" @@ -146,7 +148,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3217-3218, src/utils.c:3530" + source_ref: "src/cpu.c:3262-3264, src/utils.c:4100" - name: "p2s.rom" size: 32768 @@ -154,7 +156,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3221-3222, src/utils.c:3530" + source_ref: "src/cpu.c:3266-3268, src/utils.c:4100" - name: "p2a40.rom" size: 65536 @@ -162,7 +164,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3227-3229, src/utils.c:3532" + source_ref: "src/cpu.c:3272-3275, src/utils.c:4102" note: "+2A/+3 ROM v4.0." - name: "p2a41.rom" @@ -171,7 +173,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3232-3234, src/utils.c:3532" + source_ref: "src/cpu.c:3277-3280, src/utils.c:4102" note: "+2A/+3 ROM v4.1." - name: "p2as.rom" @@ -180,7 +182,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3237-3239, src/utils.c:3532" + source_ref: "src/cpu.c:3282-3285, src/utils.c:4102" - name: "pentagon.rom" size: 32768 @@ -188,7 +190,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3271-3272, src/utils.c:3530 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)" + source_ref: "src/cpu.c:3316-3318, src/utils.c:4100 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)" - name: "se.rom" size: 32768 @@ -196,7 +198,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3247-3249, src/utils.c:3536" + source_ref: "src/cpu.c:3292-3295, src/utils.c:4106" note: "Chloe 140SE/280SE, SE Basic IV." - name: "chrome.rom" @@ -205,7 +207,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3296-3297, src/utils.c:3542" + source_ref: "src/cpu.c:3341-3343, src/utils.c:4112" - name: "prism.rom" size: 327680 @@ -213,8 +215,8 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3258-3259, src/utils.c:3538" - note: "20 pages of 16K. Page map documented at src/cpu.c:3512-3528." + source_ref: "src/cpu.c:3303-3305, src/utils.c:4108" + note: "20 pages of 16K. Page map documented at src/cpu.c:3557-3573." - name: "prism_failsafe.rom" size: 16384 @@ -222,7 +224,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/machines/prism.h:61, src/machines/prism.c:581-590, src/cpu.c:3536" + source_ref: "src/machines/prism.h:61, src/machines/prism.c:581-590, src/cpu.c:3581" note: "Loaded straight after prism.rom by prism_load_failsafe_rom(). The only ROM whose absence is fatal: the loader calls cpu_panic both when the file is missing and when the read is not 16384 bytes." - name: "zxuno_bootloader.rom" @@ -230,8 +232,8 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3243-3244, src/cpu.c:3486-3490" - size_note: "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:3534) but that value is unused on this path." + source_ref: "src/cpu.c:3288-3290, src/cpu.c:3531-3535" + size_note: "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:4104) but that value is unused on this path." - name: "zxevo_tsconf.rom" size: 524288 @@ -239,7 +241,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3300-3301, src/utils.c:3544" + source_ref: "src/cpu.c:3345-3347, src/utils.c:4114" - name: "zxevo_baseconf.rom" size: 524288 @@ -247,7 +249,8 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3304-3305, src/utils.c:3546" + source_ref: "src/cpu.c:3349-3351, src/utils.c:4116" + note: "ZX Evolution BaseConf ROM set. The 13.1 tree ships the Turbo 2+/PentEvo build with New ROM boot v1.06; the 13.0 release shipped the PentEvo edition 2013 image of the same size." # ============================================================ # ZX Spectrum Next (TBBlue) @@ -259,15 +262,15 @@ files: required: true bundled: true system: sinclair-zx-spectrum-next - source_ref: "src/cpu.c:3262-3264, src/cpu.c:3553-3559, src/utils.c:3540" - note: "FPGA loader, mirrored to 16K at src/cpu.c:3555. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead." + source_ref: "src/cpu.c:3307-3310, src/cpu.c:3598-3604, src/utils.c:4110" + note: "FPGA loader, mirrored to 16K at src/cpu.c:3600. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead." - name: "tbblue.mmc" size: 67108864 required: false bundled: true system: sinclair-zx-spectrum-next - source_ref: "src/menu/menu_items_storage.c:12144-12155, src/configure:1909" + source_ref: "src/menu/menu_items_storage.c:12129-12147, src/configure:1921" note: "SD card image carrying the Next system software. Assigned as MMC card 0 by the local-tbblue menu action; the emulator reports 'tbblue.mmc image not found' when absent." size_note: "64 MB, so it needs storage: large_file once the image is acquired and uploaded as a release asset." @@ -281,7 +284,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3184-3185, src/utils.c:3528" + source_ref: "src/cpu.c:3229-3231, src/utils.c:4098" - name: "tk90xs.rom" size: 16384 @@ -289,7 +292,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3188-3189, src/utils.c:3528" + source_ref: "src/cpu.c:3233-3235, src/utils.c:4098" - name: "tk95.rom" size: 16384 @@ -297,7 +300,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3192-3193, src/utils.c:3528" + source_ref: "src/cpu.c:3237-3239, src/utils.c:4098" - name: "tk95es.rom" size: 16384 @@ -305,7 +308,7 @@ files: required: true bundled: true system: sinclair-zx-spectrum - source_ref: "src/cpu.c:3196-3197, src/utils.c:3528" + source_ref: "src/cpu.c:3241-3243, src/utils.c:4098" # ============================================================ # Timex @@ -317,7 +320,7 @@ files: required: true bundled: true system: timex-tc2048 - source_ref: "src/cpu.c:3308-3309, src/utils.c:3528 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)" + source_ref: "src/cpu.c:3353-3355, src/utils.c:4098 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)" - name: "ts2068.rom" size: 24576 @@ -325,7 +328,7 @@ files: required: true bundled: true system: timex-ts2068 - source_ref: "src/cpu.c:3253-3255, src/cpu.c:3589-3600, src/utils.c:3548" + source_ref: "src/cpu.c:3298-3301, src/cpu.c:3634-3648, src/utils.c:4118" note: "Read as two blocks: 16384 into the main ROM table, then 8192 into the EX ROM table. Serves TS2068 and TC2068." - name: "ts1500.rom" @@ -334,7 +337,7 @@ files: required: true bundled: true system: timex-ts1500 - source_ref: "src/cpu.c:3332-3334, src/utils.c:3564" + source_ref: "src/cpu.c:3377-3381, src/utils.c:4134" # ============================================================ # ZX80 / ZX81 family @@ -347,8 +350,8 @@ files: required: true bundled: true system: sinclair-zx80 - source_ref: "src/cpu.c:3312-3317, src/cpu.c:3644-3654, src/utils.c:3560" - note: "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3648)." + source_ref: "src/cpu.c:3357-3362, src/cpu.c:3689-3699, src/utils.c:4130" + note: "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3693)." - name: "zx81.rom" size: 8192 @@ -356,7 +359,7 @@ files: required: true bundled: true system: sinclair-zx81 - source_ref: "src/cpu.c:3319-3330, src/utils.c:3564" + source_ref: "src/cpu.c:3364-3375, src/utils.c:4134" note: "Serves ZX81, Timex TS1000, TK82C, TK83 and the Czerweny CZ 1000/1500 models." - name: "tk85.rom" @@ -365,7 +368,7 @@ files: required: true bundled: true system: microdigital-tk85 - source_ref: "src/cpu.c:3338-3340, src/utils.c:3562" + source_ref: "src/cpu.c:3383-3387, src/utils.c:4132" note: "The TK85 test precedes the generic ZX81 test in get_rom_size, so 10240 wins over 8192." - name: "zxpand_zx81.rom" @@ -391,7 +394,7 @@ files: required: true bundled: true system: jupiter-ace - source_ref: "src/cpu.c:3344-3346, src/utils.c:3566" + source_ref: "src/cpu.c:3389-3393, src/utils.c:4136" # ============================================================ # Sinclair QL, Cambridge Z88, MK14 @@ -404,7 +407,7 @@ files: required: true bundled: true system: sinclair-ql - source_ref: "src/cpu.c:3379-3380, src/cpu.c:3719-3728" + source_ref: "src/cpu.c:3424-3429, src/cpu.c:3764-3773" size_note: "Reads up to 131072 bytes and errors only below 16384, so the check is a minimum rather than an exact size." - name: "ql_jm.rom" @@ -412,15 +415,32 @@ files: required: false bundled: true system: sinclair-ql - source_ref: "src/cpu.c:3383 (commented alternative), src/start.c:998" + source_ref: "src/cpu.c:3428 (commented alternative), src/start.c:4870-4874" note: "JM release. Reachable through --romfile; the switch selects ql_js.rom." + - name: "tkii220.rom" + size: 16384 + required: false + bundled: true + system: sinclair-ql + source_ref: "src/machines/ql.c:1348-1375, src/start.c:5621-5646, src/cpu.c:3797-3801" + note: "QJUMP Toolkit II 2.20, the ROM ql.c names as the example for --ql-rom-c000-file. ql_load_extra_roms() runs after the system ROM and reads 16K into memoria_ql at 0xC000 from the path the option gives; the read count is not checked." + + - name: "qsound_V1.94.rom" + aliases: ["Qsound_V1.94.rom"] + size: 8192 + required: false + bundled: true + system: sinclair-ql + source_ref: "src/soundchips/qsound.h:50, src/soundchips/qsound.c:329-369, src/start.c:6772-6779, src/cpu.c:3798-3801" + note: "QL Qsound firmware, read into memoria_ql at 0xC0000 once --ql-qsound-enabled is set; the read count is not checked and --ql-qsound-rom points the loader at another file. QSOUND_ROM_FILE is spelled qsound_V1.94.rom while the shipped file is Qsound_V1.94.rom, so the default only resolves on a case-insensitive filesystem." + - name: "Z88OZ47.rom" size: 524288 required: true bundled: true system: cambridge-z88 - source_ref: "src/cpu.c:3350-3352, src/cpu.c:3675-3685" + source_ref: "src/cpu.c:3395-3400, src/cpu.c:3720-3730" size_note: "Reads up to 512K and errors only when nothing is read; z88_internal_rom_size is derived from the byte count, so any size is accepted." - name: "mk14.rom" @@ -429,7 +449,7 @@ files: required: true bundled: true system: science-of-cambridge-mk14 - source_ref: "src/cpu.c:3386-3387, src/utils.c:3578" + source_ref: "src/cpu.c:3431-3433, src/utils.c:4148" # ============================================================ # Amstrad CPC and PCW @@ -441,7 +461,7 @@ files: required: true bundled: true system: amstrad-cpc - source_ref: "src/cpu.c:3358-3363, src/utils.c:3570" + source_ref: "src/cpu.c:3403-3409, src/utils.c:4140" note: "Serves CPC 464 and CPC 4128." - name: "cpc664.rom" @@ -450,7 +470,7 @@ files: required: true bundled: true system: amstrad-cpc - source_ref: "src/cpu.c:3366-3367, src/utils.c:3572" + source_ref: "src/cpu.c:3411-3413, src/utils.c:4142" - name: "cpc6128.rom" size: 49152 @@ -458,7 +478,7 @@ files: required: true bundled: true system: amstrad-cpc - source_ref: "src/cpu.c:3370-3371, src/utils.c:3572" + source_ref: "src/cpu.c:3415-3417, src/utils.c:4142" - name: "pcw_boot.rom" size: 275 @@ -466,15 +486,15 @@ files: required: true bundled: true system: pcw - source_ref: "src/cpu.c:3390-3396, src/cpu.c:3740-3746, src/utils.c:3580" - note: "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3739). Serves PCW 8256 and 8512." + source_ref: "src/cpu.c:3435-3441, src/cpu.c:3785-3791, src/utils.c:4150" + note: "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3784). Serves PCW 8256 and 8512." - name: "pcw_8x_boot1.dsk" size: 194864 required: false bundled: true system: pcw - source_ref: "src/machines/pcw.c:1431-1469" + source_ref: "src/machines/pcw.c:1432-1470" note: "LocoScript boot disc, inserted by pcw_boot_locoscript()." - name: "pcw_8x_boot2.dsk" @@ -482,7 +502,7 @@ files: required: false bundled: true system: pcw - source_ref: "src/machines/pcw.c:1431-1474" + source_ref: "src/machines/pcw.c:1432-1475" note: "CP/M boot disc, inserted by pcw_boot_cpm() with boot end address 0x607." # ============================================================ @@ -495,7 +515,7 @@ files: required: true bundled: true system: sam-coupe - source_ref: "src/cpu.c:3374-3376, src/utils.c:3574" + source_ref: "src/cpu.c:3419-3422, src/utils.c:4144" - name: "atomlite.rom" size: 32768 @@ -503,7 +523,7 @@ files: required: false bundled: true system: sam-coupe - source_ref: "src/cpu.c:3375, src/utils.c:3574" + source_ref: "src/cpu.c:3420, src/utils.c:4144" note: "Replaces samcoupe.rom when Atom Lite emulation is on." - name: "samram.rom" @@ -534,14 +554,14 @@ files: required: true bundled: true system: colecovision - source_ref: "src/cpu.c:3275-3276, src/utils.c:3550" + source_ref: "src/cpu.c:3320-3322, src/utils.c:4120" - name: "sg1000.rom" size: 155 required: true bundled: true system: sg-1000 - source_ref: "src/cpu.c:3279-3280, src/cpu.c:3613-3617" + source_ref: "src/cpu.c:3324-3326, src/cpu.c:3658-3662" size_note: "Nothing is read from this file. The SG-1000 branch is empty and the source comment states the file only has to exist for the open to succeed." - name: "sms.rom" @@ -550,7 +570,7 @@ files: required: true bundled: true system: sega-mastersystem - source_ref: "src/cpu.c:3283-3284, src/utils.c:3554" + source_ref: "src/cpu.c:3328-3330, src/utils.c:4124" - name: "msx.rom" size: 32768 @@ -558,7 +578,7 @@ files: required: true bundled: true system: msx - source_ref: "src/cpu.c:3287-3288, src/utils.c:3556" + source_ref: "src/cpu.c:3332-3334, src/utils.c:4126" - name: "svi.rom" size: 32768 @@ -566,7 +586,7 @@ files: required: true bundled: true system: spectravideo - source_ref: "src/cpu.c:3291-3293, src/utils.c:3558" + source_ref: "src/cpu.c:3336-3339, src/utils.c:4128" note: "Serves SVI-318 and SVI-328." # ============================================================ @@ -579,7 +599,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/storage/divmmc.c:45, src/storage/divmmc.c:95-103, src/storage/diviface.h:27, src/storage/diviface.c:758-765" + source_ref: "src/storage/divmmc.c:45, src/storage/divmmc.c:95-103, src/storage/diviface.h:27, src/storage/diviface.c:778-800" note: "divMMC esxdos firmware, the default when --divmmc-rom is unset. Needed by --enable-esxdos-handler, which the ES-DE zxnext command line sets." - name: "esxide085.rom" @@ -588,7 +608,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/storage/divide.c:40, src/storage/divide.c:93, src/storage/diviface.h:27, src/storage/diviface.c:758-765" + source_ref: "src/storage/divide.c:40, src/storage/divide.c:93, src/storage/diviface.h:27, src/storage/diviface.c:778-800" note: "divIDE esxdos firmware, the default when --divide-rom is unset." - name: "unodos3.rom" @@ -597,7 +617,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/storage/divmmc.c:96-99, src/storage/diviface.h:27, src/storage/diviface.c:758-765" + source_ref: "src/storage/divmmc.c:96-99, src/storage/diviface.h:27, src/storage/diviface.c:778-800" note: "divMMC firmware substituted for esxmmc085.rom on Chloe machines." - name: "trdos.rom" @@ -606,7 +626,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/storage/betadisk.c:67, src/storage/betadisk.c:400, src/storage/betadisk.h:27, src/storage/betadisk.c:409-416" + source_ref: "src/storage/betadisk.c:67, src/storage/betadisk.c:401, src/storage/betadisk.h:27, src/storage/betadisk.c:408-420" note: "Beta Disk / TR-DOS firmware." - name: "if1-v1.rom" @@ -644,7 +664,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/storage/zxmmcplus.h:30, src/start.c:1690, src/storage/zxmmcplus.c:756, src/storage/zxmmcplus.c:768-775" + source_ref: "src/storage/zxmmcplus.h:30, src/start.c:5950-5953, src/storage/zxmmcplus.c:756-778" note: "ZXMMC+ flash ROM image, the default for --zxmmcplus-flash-file." size_note: "The image holds ROM and RAM together, so the check is ZXMMCPLUS_FLASHROM_SIZE + ZXMMCPLUS_RAM_SIZE, not the 512K ROM constant alone." @@ -654,7 +674,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/machines/zxuno.h:29, src/machines/zxuno.h:80, src/start.c:1712, src/cpu.c:3494, src/machines/zxuno.c:1198-1205" + source_ref: "src/machines/zxuno.h:29, src/machines/zxuno.h:80, src/start.c:4910-4913, src/cpu.c:3539, src/machines/zxuno.c:1186-1208" note: "ZX-Uno SPI flash image, loaded by zxuno_load_spi_flash() right after the bootloader. Default for --zxunospifile. ZXUNO_SPI_SIZE is 4096 KB." # ============================================================ @@ -667,7 +687,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988" + source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282" note: "Multiface One. The file selector rejects anything that is not exactly 8 KB." - name: "mf128.rom" @@ -676,7 +696,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988" + source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282" note: "Multiface 128." - name: "mf3.rom" @@ -685,7 +705,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988" + source_ref: "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:42277-42282" note: "Multiface 3." - name: "specmate.rom" @@ -817,7 +837,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/menu/menu_items.c:41529-41545" + source_ref: "src/menu/menu_items.c:41821-41847" note: "Spectrum program the emulator injects to dump RAM to tape." # ============================================================ @@ -838,12 +858,12 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/configure:1909" + source_ref: "src/configure:1921" note: "General Sound firmware v1.04. Shipped alongside gs105a.rom, but GS_ROM_NAME is fixed and there is no option to point the loader elsewhere, so it is usable only in place of gs105a.rom." # ============================================================ - # Alternate machine ROMs, selectable with --romfile (src/start.c:998, - # loaded at src/cpu.c:3410-3413). Documented in the shipped src/ALTERNATEROMS. + # Alternate machine ROMs, selectable with --romfile (src/start.c:4870-4874, + # loaded at src/cpu.c:3455-3458). Documented in the shipped src/ALTERNATEROMS. # ============================================================ - name: "80-lec.rom" @@ -851,21 +871,21 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/start.c:998, src/cpu.c:3410-3413" + source_ref: "src/start.c:4870-4874, src/cpu.c:3455-3458" - name: "tk90x_v1br.rom" size: 16384 required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:97, src/start.c:998, src/cpu.c:3410-3413" + source_ref: "src/ALTERNATEROMS:97, src/start.c:4870-4874, src/cpu.c:3455-3458" - name: "tk90x_v2es.rom" size: 16384 required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:98, src/start.c:998, src/cpu.c:3410-3413" + source_ref: "src/ALTERNATEROMS:98, src/start.c:4870-4874, src/cpu.c:3455-3458" note: "Corrected TK90X ROM." - name: "tk95es_modif.rom" @@ -873,7 +893,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:101-106, src/start.c:998, src/cpu.c:3410-3413" + source_ref: "src/ALTERNATEROMS:101-106, src/start.c:4870-4874, src/cpu.c:3455-3458" note: "TK95 Spanish ROM with message and symbol fixes by Rodolfo Edison Guerra." - name: "Z88OZ431.rom" @@ -881,49 +901,49 @@ files: required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88OZ441.rom" size: 524288 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88OZ45.rom" size: 524288 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88OZ46.rom" size: 524288 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88UK220.rom" size: 131072 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88UK300.rom" size: 131072 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "Z88UK400.rom" size: 131072 required: false bundled: true system: cambridge-z88 - source_ref: "src/ALTERNATEROMS:83-92, src/start.c:998" + source_ref: "src/ALTERNATEROMS:83-92, src/start.c:4870-4874" - name: "aszmice07.rom" path: "alternate_roms/aszmice07.rom" @@ -931,7 +951,7 @@ files: required: false bundled: true system: sinclair-zx81 - source_ref: "src/ALTERNATEROMS:4-5, src/start.c:998" + source_ref: "src/ALTERNATEROMS:4-5, src/start.c:4870-4874" note: "ASZMIC E07 replacement ROM with assembler and debugger. The 4K image is stored twice to reach 8K." - name: "sp-rom.rom" @@ -940,7 +960,7 @@ files: required: false bundled: true system: sinclair-zx81 - source_ref: "src/ALTERNATEROMS:7-9, src/start.c:998" + source_ref: "src/ALTERNATEROMS:7-9, src/start.c:4870-4874" note: "Comprocsys SP ROM add-on card, loaded at address 2000H." - name: "ace.rom" @@ -950,7 +970,7 @@ files: bundled: true system: jupiter-ace variant_group: "jupiter-ace-rom" - source_ref: "src/ALTERNATEROMS:11-12, src/start.c:998" + source_ref: "src/ALTERNATEROMS:11-12, src/start.c:4870-4874" note: "Jupiter Ace ROM patched by Dutra Lacerda, distinct from the root ace.rom." - name: "opense.rom" @@ -959,7 +979,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:14-15, src/start.c:998" + source_ref: "src/ALTERNATEROMS:14-15, src/start.c:4870-4874" note: "OpenSE BASIC 3.1.2 for the 48K." - name: "sebasic4_rom1.rom" @@ -968,7 +988,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:18-19, src/start.c:998" + source_ref: "src/ALTERNATEROMS:18-19, src/start.c:4870-4874" note: "SE BASIC 4.1.0 standalone ROM 1 for the 48K." - name: "derby_p_32K.rom" @@ -977,7 +997,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:21-23, src/start.c:998" + source_ref: "src/ALTERNATEROMS:21-23, src/start.c:4870-4874" note: "Derby+ for 128K machines with 32K of ROM." - name: "derby_pp_64K.rom" @@ -986,7 +1006,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:21-23, src/start.c:998" + source_ref: "src/ALTERNATEROMS:21-23, src/start.c:4870-4874" note: "Derby++ for 128K machines with 64K of ROM." - name: "plus2c.rom" @@ -995,7 +1015,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:40-41, src/start.c:998" + source_ref: "src/ALTERNATEROMS:40-41, src/start.c:4870-4874" note: "Unofficial +2C ROM by Andrew Owen, for 128K/+2." - name: "plus2b.rom" @@ -1004,7 +1024,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:46-76, src/start.c:998" + source_ref: "src/ALTERNATEROMS:46-76, src/start.c:4870-4874" note: "+2B ROM set for +2A/+3: 128 editor, 48K BASIC, BBC BASIC, OpenSE BASIC 3.1.1." - name: "plus3e_mmcen3eE.rom" @@ -1013,7 +1033,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/menu/menu_items.c:30627-30630, src/ALTERNATEROMS:26-30" + source_ref: "src/cpu.h:365, src/menu/menu_items.c:30678-30688, src/ALTERNATEROMS:26-30" note: "+3e v1.38 English for MMC. Resolved by name through find_sharedfile for the +2e/+3e MMC machine preset." - name: "plus3e_mmces3eE.rom" @@ -1022,7 +1042,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:26-30, src/start.c:998" + source_ref: "src/ALTERNATEROMS:26-30, src/start.c:4870-4874" note: "+3e v1.38 Spanish for MMC." - name: "plus3e_sm8en3eE.rom" @@ -1031,7 +1051,7 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:32-36, src/start.c:998" + source_ref: "src/ALTERNATEROMS:32-36, src/start.c:4870-4874" note: "+3e v1.38 English for simple 8-bit IDE." - name: "plus3e_sm8es3eE.rom" @@ -1040,5 +1060,5 @@ files: required: false bundled: true system: sinclair-zx-spectrum - source_ref: "src/ALTERNATEROMS:32-36, src/start.c:998" + source_ref: "src/ALTERNATEROMS:32-36, src/start.c:4870-4874" note: "+3e v1.38 Spanish for simple 8-bit IDE."