From 266567b9a0dfdf3fd8b26ca8817cdc36027da363 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 11 Aug 2026 05:34:21 +0200 Subject: [PATCH] feat: profile ten more standalone emulators PS2, PS3, Xbox 360, Atari, C64, BBC Micro and arcade front-ends read from their own source trees. --- emulators/aethersx2.yml | 173 +++++ emulators/altirra.yml | 1018 ++++++++++++++++++++++++++++++ emulators/aps3e.yml | 272 ++++++++ emulators/arcadeflashweb.yml | 168 +++++ emulators/armsx1.yml | 109 ++++ emulators/armsx2.yml | 844 +++++++++++++++++++++++++ emulators/ax360e.yml | 183 ++++++ emulators/beebem.yml | 735 ++++++++++++++++++++++ emulators/c64-emu.yml | 1151 ++++++++++++++++++++++++++++++++++ emulators/citra-mmj.yml | 202 ++++++ 10 files changed, 4855 insertions(+) create mode 100644 emulators/aethersx2.yml create mode 100644 emulators/altirra.yml create mode 100644 emulators/aps3e.yml create mode 100644 emulators/arcadeflashweb.yml create mode 100644 emulators/armsx1.yml create mode 100644 emulators/armsx2.yml create mode 100644 emulators/ax360e.yml create mode 100644 emulators/beebem.yml create mode 100644 emulators/c64-emu.yml create mode 100644 emulators/citra-mmj.yml diff --git a/emulators/aethersx2.yml b/emulators/aethersx2.yml new file mode 100644 index 00000000..0e458a91 --- /dev/null +++ b/emulators/aethersx2.yml @@ -0,0 +1,173 @@ +emulator: AetherSX2 +type: standalone +core_classification: community_fork +bios_mode: agnostic +source: "https://github.com/Trixarian/AetherSX2" +upstream: "https://github.com/PCSX2/pcsx2" +profiled_date: "2026-08-11" +source_commit: "1d1f795dfc70e38da67724c7298779260f513889" +core_version: "1.5-3939" +display_name: "Sony - PlayStation 2 (AetherSX2)" +cores: + - aethersx2 + - aethersx2-sa +systems: + - sony-playstation-2 + +bios_directory: "bios/" +resources_directory: "resources/" + +notes: | + PlayStation 2 emulator for ARM, built on PCSX2 and carrying its own AArch64 + recompilers. The application itself is closed source; the PCSX2-derived files + were released separately as an LGPL tarball in which pcsx2/libAetherSX2.a + holds the parts that stayed closed, and that drop sits on an earlier code line + than any released build, with no Vulkan renderer in its GS tree and the older + asset set. Every name, path and size below was read from + the three builds that were distributed: v1.5-3939 for Apple Silicon macOS, + v1.5-3668 for Android, and v1.5-3606 for AArch64 Linux, which ROCKNIX + repackages as aethersx2-sa. The three agree throughout. + ref: aethersx2/pcsx2/CMakeLists.txt:1585, aethersx2/pcsx2/Mdec.cpp:1 + + A BIOS image is required and boot stops without one. It belongs in the bios + folder of the data directory, Library/Application Support/AetherSX2 on macOS + and Android/data/xyz.aethersx2.android on Android, and the Folders section of + PCSX2.ini names another path when set. + ref: aethersx2 v1.5-3939 MacOS/AetherSX2, aethersx2 archive/desktop/mac/README.md + + Detection is by content. The scan lists the BIOS folder with a *.* mask, keeps + files between 4 and 8 MB, and accepts an image whose romdir carries a RESET + entry followed by a readable ROMVER; the fifth ROMVER character gives the + zone among T10K, Test, Japan, USA, Europe, HK, Free and China. An image named + in the configuration is opened at its own path, without the size filter and + without the romdir test. No name and no hash is matched anywhere. The image is + read into the 4 MB ROM region and truncated to it, and one shorter than + 2465792 bytes turns off the OSDSys parameter HLE. + ref: aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, + aethersx2/pcsx2/ps2/BiosTools.cpp:62-175, + aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, + aethersx2/pcsx2/ps2/BiosTools.cpp:272-316, + aethersx2 v1.5-3606 usr/share/aethersx2 0xa45ffc, + aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7650 + + Companions derive from the selected image. rom1 and rom2 are appended to the + full name first, then substituted for the existing extension, so an image at + ps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then + ps2-0230a-20080220.rom1. The nvm and the mec are read at the substituted + extension only, and both are written with defaults when they are absent or + too short. + ref: aethersx2/pcsx2/ps2/BiosTools.cpp:192-218, + aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, + aethersx2/pcsx2/CDVD/CDVD.cpp:158-197 + + The network adapter opens eeprom.dat and flash.dat from the working directory, + standing in a compiled-in image for the first and a blank card for the second. + DEV9hdd.raw is the default name of the empty disk image its settings page + writes. + ref: aethersx2/pcsx2/DEV9/DEV9.cpp:109-161, + aethersx2/pcsx2/DEV9/flash.cpp:76-104 + + An IRX named in the configuration is read into the ROM region at 0x3C0000 at + boot. The field is empty by default and names no file of its own. + ref: aethersx2/pcsx2/ps2/BiosTools.cpp:220-233, + aethersx2/pcsx2/ps2/BiosTools.cpp:327-328 + + Read from the build's own resources folder and versioned with it: the shader + sources each GS backend compiles at startup, the OSD and fullscreen interface + fonts, the flag and placeholder textures, and the achievement notification + sounds. The macOS build keeps the folder at AetherSX2.app/Contents/Resources + and adds its Metal libraries; the Android build carries the shaders, fonts, + icons and sounds as APK assets and draws its own interface. + ref: aethersx2 v1.5-3939 AetherSX2.app/Contents/Resources, + aethersx2 v1.5-3668 xyz.aethersx2.android assets + +files: + - name: ps2-0230a-20080220.bin + path: bios/ps2-0230a-20080220.bin + required: true + min_size: 4194304 + max_size: 8388608 + validation: [size] + description: "PS2 BIOS image" + note: "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; an image named in the configuration skips both that range and the romdir test." + source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, aethersx2/pcsx2/ps2/BiosTools.cpp:272-316, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45ffc" + + - name: ps2-0230a-20080220.rom1 + path: bios/ps2-0230a-20080220.rom1 + required: false + max_size: 4194304 + description: "DVD player ROM" + note: "Tried as {bios}.rom1 then {biosbase}.rom1. Read at 0x2404000 of the EE memory block and truncated to 4 MB. Logged and skipped when absent." + source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:192-218, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45b44, aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7184" + + - name: ps2-0230a-20080220.rom2 + path: bios/ps2-0230a-20080220.rom2 + required: false + max_size: 524288 + description: "Chinese ROM extension" + note: "Same two-step naming as rom1. Read at 0x2804000 of the EE memory block and truncated to 512 KB. Only present on Chinese region consoles." + source_ref: "aethersx2/pcsx2/ps2/BiosTools.cpp:192-218, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45d50, aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7338" + + - name: ps2-0230a-20080220.nvm + path: bios/ps2-0230a-20080220.nvm + required: false + hle_fallback: true + size: 1024 + description: "Console NVRAM" + note: "Read at the BIOS path with the extension replaced by nvm. Carries the console id, the iLink id, the language and the OSD configuration. A 1024 byte image is written when the file is missing or shorter, zeroed except for a fixed iLink id and the language defaults of the BIOS region." + source_ref: "aethersx2/pcsx2/CDVD/CDVD.cpp:158-197, aethersx2 v1.5-3606 usr/share/aethersx2 0x95d8e0" + + - name: ps2-0230a-20080220.mec + path: bios/ps2-0230a-20080220.mec + required: false + hle_fallback: true + size: 4 + description: "Mechacon version" + note: "Read at the BIOS path with the extension replaced by mec. Written as 03 06 02 00 when the file is missing or shorter than 4 bytes." + source_ref: "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, aethersx2 v1.5-3606 usr/share/aethersx2 0x95e7fc" + + - name: eeprom.dat + required: false + hle_fallback: true + size: 64 + description: "DEV9 EEPROM" + note: "Opened from the working directory when the network adapter starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing or cannot be mapped." + source_ref: "aethersx2/pcsx2/DEV9/DEV9.cpp:146-161, aethersx2 v1.5-3606 usr/share/aethersx2 0x97ac90" + + - name: flash.dat + required: false + hle_fallback: true + max_size: 8650752 + description: "DEV9 SmartMedia flash image" + note: "Opened from the working directory at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent, and a short read is logged." + source_ref: "aethersx2/pcsx2/DEV9/flash.cpp:76-104, aethersx2 v1.5-3606 usr/share/aethersx2 0x97ac40" + + - name: GameIndex.yaml + path: resources/GameIndex.yaml + required: false + bundled: true + description: "Game database" + note: "Read from the resources folder, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder and reparsed whenever the modification time moves." + source_ref: "aethersx2/pcsx2/GameDatabase.cpp:35-36, aethersx2/pcsx2/GameDatabase.cpp:348-352, aethersx2/pcsx2/GameDatabase.cpp:523-535" + + - name: cheats_ws.zip + path: resources/cheats_ws.zip + required: false + description: "Widescreen patch archive" + note: "Per-game pnach entries matched on the disc CRC, loaded when widescreen patches are enabled. The cheats_ws folder takes precedence and the archive is skipped when it holds a match. Shipped by the Linux and Android builds; the macOS build looks for it without carrying one." + source_ref: "aethersx2/pcsx2/Patch.cpp:202-231, aethersx2 v1.5-3939 MacOS/AetherSX2" + + - name: cheats_ni.zip + path: resources/cheats_ni.zip + required: false + description: "No-interlacing patch archive" + note: "Same form as cheats_ws.zip, loaded when no-interlacing patches are enabled, with the cheats_ni folder taking precedence. Shipped by the Linux and Android builds; the macOS build looks for it without carrying one." + source_ref: "aethersx2/pcsx2/Patch.cpp:202-231, aethersx2 v1.5-3939 MacOS/AetherSX2" + + - name: game_controller_db.txt + path: resources/game_controller_db.txt + required: false + bundled: true + description: "SDL controller mapping database" + note: "Read from the resources folder and fed to SDL at input init. SDL falls back to its built-in mappings when the file cannot be read." + source_ref: "aethersx2/pcsx2/PAD/Host/SDLJoystick.cpp:46, aethersx2 v1.5-3939 AetherSX2.app/Contents/Resources" diff --git a/emulators/altirra.yml b/emulators/altirra.yml new file mode 100644 index 00000000..338e5fc0 --- /dev/null +++ b/emulators/altirra.yml @@ -0,0 +1,1018 @@ +emulator: Altirra +type: standalone +core_classification: embedded_hle +source: "https://www.virtualdub.org/altirra.html" +upstream: "https://www.virtualdub.org/altirra.html" +profiled_date: "2026-08-11" +core_version: "4.40" +display_name: "Atari - 400/800/1200XL/XL/XE/XEGS/5200 (Altirra)" +cores: [altirra] +systems: [atari-400-800, xegs, atari-5200] + +# Altirra emulates the Atari 400/800, 1200XL, 600XL/800XL, 130XE, XEGS and 5200. +# Windows only; ES-DE launches Altirra64.exe or Altirra.exe. +# +# Firmware is identified by content, never by filename. ATUIScanForFirmware +# (uifirmwarescan.cpp:29-113) walks a folder the user picks, keeps every file whose +# size is one of 1024, 2048, 4096, 6144, 8192, 10240, 16384, 32768 or 65536 +# (ATFirmwareAutodetectCheckSize, firmwaredetect.cpp:130-150), then matches CRC32 +# against kATKnownFirmwares (firmwaredetect.cpp:24-121). A recognised image is +# registered by path under Firmware\Available (ATFirmwareManager::AddFirmware, +# firmwaremanager.cpp:765-781) and read back from that path afterwards. Images the +# table does not know are added by hand with an explicit type from the menu in +# uifirmware.cpp:498-585. No code path opens a firmware file by name, so no entry +# below carries aliases. +# +# Every external image is optional. Altirra links replacement ROMs into the binary +# as resources (ATLoadInternalFirmware, firmwaremanager.cpp:189-295; res/Altirra.rc:4260-4292) +# and GetCompatibleFirmware selects them when nothing is registered +# (firmwaremanager.cpp:502-549). The setup wizard states it: "Altirra has internal +# replacements for all standard ROMs" (uisetupwizard.cpp:134-138). The internal set +# covers the 400/800, XL/XE, 65C816 and 5200 kernels, BASIC, the Ultimate1MB recovery +# BIOS, the Rapidus bootstrap, the 1030 download image and the 1090 charset. NoKernel, +# No5200, NoMIO, NoBlackBox and NoGame are empty placeholders the loader reports as +# unusable (firmwaremanager.cpp:218-233), so those types have no fallback. +# +# Images the detect table does not cover carry max_size rather than size: LoadFirmware +# reads at most the buffer length and leaves the remainder at its fill value +# (firmwaremanager.cpp:674-763), so a shorter dump is accepted. +# +# The 850 relocator and handler load only from internal resources (rs232.cpp:995-996); +# kATFirmwareType_MyIDE and kATFirmwareType_5200Cartridge have no consumer anywhere in +# the tree. None of the three is a user-supplied file. + +files: + # -- Images Altirra recognises by size + CRC32 (firmwaredetect.cpp:24-121) -- + + - name: atari-5200-os-4port.rom + description: "Atari 5200 OS (4-port)" + system: atari-5200 + required: false + hle_fallback: true + size: 2048 + crc32: "4248d3e3" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:25, src/Altirra/source/simulator.cpp:4800" + + - name: atari-5200-os-2port.rom + description: "Atari 5200 OS (2-port)" + system: atari-5200 + required: false + hle_fallback: true + size: 2048 + crc32: "c2ba2613" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:26, src/Altirra/source/simulator.cpp:4800" + + - name: atari-basic-rev-a.rom + description: "Atari BASIC rev. A" + system: atari-400-800 + required: false + hle_fallback: true + size: 8192 + crc32: "4bec4de2" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:27, src/Altirra/source/simulator.cpp:4903-4912" + + - name: atari-basic-rev-b.rom + description: "Atari BASIC rev. B" + system: atari-400-800 + required: false + hle_fallback: true + size: 8192 + crc32: "f0202fb3" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:28, src/Altirra/source/simulator.cpp:4903-4912" + + - name: atari-basic-rev-c.rom + description: "Atari BASIC rev. C" + system: atari-400-800 + required: false + hle_fallback: true + size: 8192 + crc32: "7d684184" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:29, src/Altirra/source/simulator.cpp:4903-4912" + + - name: atari-800-os-a-ntsc.rom + description: "Atari 400/800 OS-A NTSC" + system: atari-400-800 + required: false + hle_fallback: true + size: 10240 + crc32: "c1b3bb02" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:30, src/Altirra/source/simulator.cpp:4796" + + - name: atari-800-os-a-pal.rom + description: "Atari 400/800 OS-A PAL" + system: atari-400-800 + required: false + hle_fallback: true + size: 10240 + crc32: "72b3fed4" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:31, src/Altirra/source/simulator.cpp:4796" + + - name: atari-800-os-b-ntsc.rom + description: "Atari 400/800 OS-B NTSC" + system: atari-400-800 + required: false + hle_fallback: true + size: 10240 + crc32: "0e86d61d" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:32, src/Altirra/source/simulator.cpp:4796" + + - name: atari-800-os-b-ntsc-xformer.rom + description: "Atari 400/800 OS-B NTSC (Xformer patched)" + system: atari-400-800 + required: false + hle_fallback: true + size: 10240 + crc32: "3e28a1fe" + validation: [size, crc32] + note: "OS-B patched by Xformer, reported as the OS-B specific firmware. Usually distributed as ATARIOSB.ROM (ATHelpFile/source/options-firmware.xml)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:33, src/Altirra/source/simulator.cpp:4796" + + - name: atari-800-os-b-pal.rom + description: "Atari 400/800 OS-B PAL" + system: atari-400-800 + required: false + hle_fallback: true + size: 10240 + crc32: "0c913dfc" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:34, src/Altirra/source/simulator.cpp:4796" + + - name: atari-1200xl-os-rev-10.rom + description: "Atari 1200XL OS rev. 10" + system: atari-400-800 + required: false + hle_fallback: true + size: 16384 + crc32: "c5c11546" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:35, src/Altirra/source/simulator.cpp:4804" + + - name: atari-1200xl-os-rev-11.rom + description: "Atari 1200XL OS rev. 11" + system: atari-400-800 + required: false + hle_fallback: true + size: 16384 + crc32: "1a1d7b1b" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:36, src/Altirra/source/simulator.cpp:4804" + + - name: atari-xl-os-ver-1.rom + description: "Atari XL/XE OS ver.1" + system: atari-400-800 + required: false + hle_fallback: true + size: 16384 + crc32: "643bcc98" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:37, src/Altirra/source/simulator.cpp:4810" + + - name: atari-xl-os-ver-2.rom + description: "Atari XL/XE OS ver.2" + system: atari-400-800 + required: false + hle_fallback: true + size: 16384 + crc32: "1f9cd270" + validation: [size, crc32] + note: "The common XL/XE OS, usually distributed as ATARIXL.ROM (ATHelpFile/source/options-firmware.xml)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:38, src/Altirra/source/simulator.cpp:4810" + + - name: atari-xl-os-ver-3.rom + description: "Atari XL/XE OS ver.3" + system: atari-400-800 + required: false + hle_fallback: true + size: 16384 + crc32: "29f133f7" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:39, src/Altirra/source/simulator.cpp:4810" + + - name: atari-xegs-os-ver-4.rom + description: "Atari XL/XE/XEGS OS ver.4" + system: xegs + required: false + hle_fallback: true + size: 16384 + crc32: "1eaf4002" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:40, src/Altirra/source/simulator.cpp:4814" + + - name: atari-xegs-missile-command.rom + description: "Atari XEGS Missile Command" + system: xegs + required: false + size: 8192 + crc32: "bdca01fb" + validation: [size, crc32] + note: "XEGS built-in game ROM." + source_ref: "src/Altirra/source/firmwaredetect.cpp:41, src/Altirra/source/simulator.cpp:4921" + + - name: blackbox-1.34.rom + description: "Black Box ver. 1.34" + system: atari-400-800 + required: false + size: 16384 + crc32: "a8953874" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:43, src/Altirra/source/blackbox.cpp:352" + + - name: blackbox-1.41.rom + description: "Black Box ver. 1.41" + system: atari-400-800 + required: false + size: 16384 + crc32: "91175314" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:44, src/Altirra/source/blackbox.cpp:352" + + - name: blackbox-2.16.rom + description: "Black Box ver. 2.16" + system: atari-400-800 + required: false + size: 65536 + crc32: "7cafd9a8" + validation: [size, crc32] + note: "64K image. 16K images are accepted and bank-rotated (blackbox.cpp:355)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:45, src/Altirra/source/blackbox.cpp:352" + + - name: blackbox-floppy-board-1.5.rom + description: "Black Box Floppy Board v1.5" + system: atari-400-800 + required: false + size: 4096 + crc32: "769cc316" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:47, src/Altirra/source/blackboxfloppy.cpp:289" + + - name: mio-1.1k-128kbit.rom + description: "MIO ver. 1.1k (128Kbit)" + system: atari-400-800 + required: false + size: 16384 + crc32: "7d68f07b" + validation: [size, crc32] + note: "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:49, src/Altirra/source/mio.cpp:275" + + - name: mio-1.1m-128kbit.rom + description: "MIO ver. 1.1m (128Kbit)" + system: atari-400-800 + required: false + size: 16384 + crc32: "00694a74" + validation: [size, crc32] + note: "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:50, src/Altirra/source/mio.cpp:275" + + - name: mio-1.41-64kbit.rom + description: "MIO ver. 1.41 (64Kbit)" + system: atari-400-800 + required: false + size: 8192 + crc32: "a6a9e3d6" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:51, src/Altirra/source/mio.cpp:275" + + - name: mio-1.41-128kbit.rom + description: "MIO ver. 1.41 (128Kbit)" + system: atari-400-800 + required: false + size: 16384 + crc32: "1d400131" + validation: [size, crc32] + note: "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:52, src/Altirra/source/mio.cpp:275" + + - name: mio-1.41-256kbit.rom + description: "MIO ver. 1.41 (256Kbit)" + system: atari-400-800 + required: false + size: 32768 + crc32: "e2f4b3a8" + validation: [size, crc32] + note: "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:53, src/Altirra/source/mio.cpp:275" + + - name: atari-810-rev-b.rom + description: "Atari 810 firmware rev. B" + system: atari-400-800 + required: false + size: 2048 + crc32: "19227d33" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:54, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-810-rev-c.rom + description: "Atari 810 firmware rev. C" + system: atari-400-800 + required: false + size: 2048 + crc32: "0896f03d" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:55, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-810-rev-e.rom + description: "Atari 810 firmware rev. E" + system: atari-400-800 + required: false + size: 2048 + crc32: "aad220f4" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:56, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-1050-rev-e.rom + description: "Atari 1050 firmware rev. E" + system: atari-400-800 + required: false + size: 4096 + crc32: "f9a7afb2" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:57, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-1050-rev-h.rom + description: "Atari 1050 firmware rev. H" + system: atari-400-800 + required: false + size: 4096 + crc32: "6d9d589b" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:58, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-1050-rev-j.rom + description: "Atari 1050 firmware rev. J" + system: atari-400-800 + required: false + size: 4096 + crc32: "91ba303d" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:59, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-1050-rev-k.rom + description: "Atari 1050 firmware rev. K" + system: atari-400-800 + required: false + size: 4096 + crc32: "3abe7ef4" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:60, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-1050-rev-l.rom + description: "Atari 1050 firmware rev. L" + system: atari-400-800 + required: false + size: 4096 + crc32: "fb4b8757" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:61, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: happy-810-v7-6k-modified.rom + description: "Happy 810 firmware (v7, 6K functional ROM, modified)" + system: atari-400-800 + required: false + size: 6144 + crc32: "371f6973" + validation: [size, crc32] + note: "Modified variant of the 6K functional dump." + source_ref: "src/Altirra/source/firmwaredetect.cpp:62, src/Altirra/source/diskdrivefull.cpp:1165-1234" + + - name: happy-810-v7-6k.rom + description: "Happy 810 firmware (v7, 6K functional ROM)" + system: atari-400-800 + required: false + size: 6144 + crc32: "9cc7a207" + validation: [size, crc32] + note: "Functional 6K region only; the loader also accepts 3K, 4K and 8K dumps." + source_ref: "src/Altirra/source/firmwaredetect.cpp:63, src/Altirra/source/diskdrivefull.cpp:1165-1234" + + - name: happy-810-v7-8k.rom + description: "Happy 810 firmware (v7, 8K full ROM)" + system: atari-400-800 + required: false + size: 8192 + crc32: "982d825d" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:64, src/Altirra/source/diskdrivefull.cpp:1165-1234" + + - name: happy-1050-rev-1.rom + description: "Happy 1050 firmware rev. 1" + system: atari-400-800 + required: false + size: 8192 + crc32: "19b6bfe5" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:65, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: happy-1050-rev-2.rom + description: "Happy 1050 firmware rev. 2" + system: atari-400-800 + required: false + size: 8192 + crc32: "f76eae16" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:66, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atr8000-3.02.rom + description: "ATR8000 firmware ver 3.02" + system: atari-400-800 + required: false + size: 4096 + crc32: "739bab74" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:67, src/Altirra/source/diskdriveatr8000.cpp:450" + + - name: indus-gt-1.1.rom + description: "Indus GT firmware ver. 1.1" + system: atari-400-800 + required: false + size: 4096 + crc32: "d125caad" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:68, src/Altirra/source/diskdriveindusgt.cpp:52" + + - name: indus-gt-1.2.rom + description: "Indus GT firmware ver. 1.2" + system: atari-400-800 + required: false + size: 4096 + crc32: "d8504b4a" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:69, src/Altirra/source/diskdriveindusgt.cpp:52" + + - name: us-doubler-rev-l.rom + description: "US Doubler firmware rev. L" + system: atari-400-800 + required: false + size: 4096 + crc32: "605b7153" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:70, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: 810-turbo-1.2.rom + description: "810 Turbo firmware V1.2" + system: atari-400-800 + required: false + size: 2048 + crc32: "0126a511" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:71, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: percom-rfd-1.00.rom + description: "Percom RFD V1.00" + system: atari-400-800 + required: false + size: 2048 + crc32: "5a396459" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:72, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-rfd-1.10.rom + description: "Percom RFD V1.10" + system: atari-400-800 + required: false + size: 2048 + crc32: "e2d4a05c" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:73, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-rfd-1.20.rom + description: "Percom RFD V1.20" + system: atari-400-800 + required: false + size: 2048 + crc32: "c6c73d23" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:74, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-rfd-2.10.rom + description: "Percom RFD V2.10" + system: atari-400-800 + required: false + size: 2048 + crc32: "ac141045" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:75, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: astra-1001-1620.rom + description: "Astra 1001/1620 (based on Percom RFD V1.10)" + system: atari-400-800 + required: false + size: 2048 + crc32: "2ab65122" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:76, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-at-88-1.2.rom + description: "Percom AT-88 V1.2 (460-0066-001)" + system: atari-400-800 + required: false + size: 2048 + crc32: "2372fae6" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:77, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-at-88-1.2-damaged.rom + description: "Percom AT-88 V1.2 (damaged) (460-0066-001)" + system: atari-400-800 + required: false + size: 2048 + crc32: "fd13a674" + validation: [size, crc32] + note: "Damaged dump of the same EPROM as percom-at-88-1.2.rom." + source_ref: "src/Altirra/source/firmwaredetect.cpp:78, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-at88-spd-1.01.rom + description: "Percom AT88-SPD V1.01 (0073)" + system: atari-400-800 + required: false + size: 4096 + crc32: "518900e6" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:79, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-at88-spd-1.11.rom + description: "Percom AT88-SPD V1.11 (1-9-84)" + system: atari-400-800 + required: false + size: 4096 + crc32: "87a0d7e7" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:80, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: percom-at88-spd-1.21.rom + description: "Percom AT88-SPD V1.21 (5-4-84)" + system: atari-400-800 + required: false + size: 4096 + crc32: "fc6675f2" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:81, src/Altirra/source/diskdrivepercom.cpp:88-92" + + - name: 1050-turbo-ii-3.4.rom + description: "1050 Turbo II V3.4" + system: atari-400-800 + required: false + size: 8192 + crc32: "55dfc9ac" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:82, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: 1050-turbo-ii-3.5.rom + description: "1050 Turbo II V3.5" + system: atari-400-800 + required: false + size: 8192 + crc32: "4a69312b" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:83, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: atari-815.rom + description: "Atari 815 firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "1527d542" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:84, src/Altirra/source/diskdrive815.cpp:352" + + - name: atari-1090-firmware-rev-9.rom + description: "Atari 1090 80-column firmware rev. 9" + system: atari-400-800 + required: false + size: 2048 + crc32: "87809326" + validation: [size, crc32] + note: "The predefined internal 1090 firmware resolves to no resource, so this image has no fallback (firmwaremanager.cpp:190-211)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:85, src/Altirra/source/1090.cpp:172" + + - name: atari-1090-charset.rom + description: "Atari 1090 80-column charset" + system: atari-400-800 + required: false + hle_fallback: true + size: 2048 + crc32: "8f07d9a0" + validation: [size, crc32] + note: "Character generator. Synthesised from the internal XL kernel charset when absent (firmwaremanager.cpp:258-268)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:86, src/Altirra/source/1090.cpp:179" + + - name: bit3-full-view-80-firmware.rom + description: "Bit 3 Full-View 80 firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "b9d576da" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:87, src/Altirra/source/bit3.cpp:173" + + - name: bit3-full-view-80-charset.rom + description: "Bit 3 Full-View 80 charset" + system: atari-400-800 + required: false + size: 2048 + crc32: "738c6ac1" + validation: [size, crc32] + note: "Character generator." + source_ref: "src/Altirra/source/firmwaredetect.cpp:88, src/Altirra/source/bit3.cpp:180" + + - name: bit3-full-view-80-charset-4k.rom + description: "Bit 3 Full-View 80 charset (4K overdump)" + system: atari-400-800 + required: false + size: 4096 + crc32: "a4534cea" + validation: [size, crc32] + note: "4K overdump carrying 2K of unique data (firmwaredetect.cpp:90)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:91, src/Altirra/source/bit3.cpp:180" + + - name: xf551-7.4.rom + description: "XF551 rev. 7.4" + system: atari-400-800 + required: false + size: 8192 + crc32: "fc02766b" + validation: [size, crc32] + note: "8K image; the loader reads the first 4K and splits it into two 2K banks." + source_ref: "src/Altirra/source/firmwaredetect.cpp:93, src/Altirra/source/diskdrivexf551.cpp:269-276" + + - name: xf551-7.7.rom + description: "XF551 rev. 7.7" + system: atari-400-800 + required: false + size: 8192 + crc32: "38b97ae3" + validation: [size, crc32] + note: "8K image; the loader reads the first 4K and splits it into two 2K banks." + source_ref: "src/Altirra/source/firmwaredetect.cpp:94, src/Altirra/source/diskdrivexf551.cpp:269-276" + + - name: xf551-7.7-density-hack.rom + description: "XF551 rev. 7.7 (w/broken density hack)" + system: atari-400-800 + required: false + size: 4096 + crc32: "37dda8b1" + validation: [size, crc32] + note: "Half-size dump with the density hack broken." + source_ref: "src/Altirra/source/firmwaredetect.cpp:95, src/Altirra/source/diskdrivexf551.cpp:269-276" + + - name: xf551-7.7-720k.rom + description: 'XF551 rev. 7.7 (modified for 720K 3.5")' + system: atari-400-800 + required: false + size: 8192 + crc32: "0e117428" + validation: [size, crc32] + note: 'Modified for 720K 3.5" drives. 8K image; the loader reads the first 4K and splits it into two 2K banks.' + source_ref: "src/Altirra/source/firmwaredetect.cpp:96, src/Altirra/source/diskdrivexf551.cpp:269-276" + + - name: 1400xl-handler-v1.rom + description: "1400XL V:/T: handler firmware (unknown v1)" + system: atari-400-800 + required: false + size: 4096 + crc32: "2ba701df" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:98, src/Altirra/source/1400xl.cpp:551-555" + + - name: 1400xl-handler-v2.rom + description: "1400XL V:/T: handler firmware (unknown v2)" + system: atari-400-800 + required: false + size: 4096 + crc32: "5ec3ec7d" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:99, src/Altirra/source/1400xl.cpp:551-555" + + - name: 1450xld-disk-controller.rom + description: "1450XLD disk controller firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "7773b7dd" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:101, src/Altirra/source/1450xld.cpp:753-758" + + - name: 1450xld-tong-disk-controller.rom + description: '1450XLD "TONG" disk controller firmware' + system: atari-400-800 + required: false + size: 4096 + crc32: "03930886" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:102, src/Altirra/source/1450xld.cpp:753-758" + + - name: 1450xld-disk-handler-rev-e.rom + description: "1450XLD disk handler firmware (rev. E)" + system: atari-400-800 + required: false + size: 4096 + crc32: "e8f9c8a7" + validation: [size, crc32] + note: "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:103, src/Altirra/source/1450xld.cpp:738-742" + + - name: 1450xld-disk-handler-rev-f.rom + description: "1450XLD disk handler firmware (rev. F)" + system: atari-400-800 + required: false + size: 4096 + crc32: "4bb7fa3a" + validation: [size, crc32] + note: "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:104, src/Altirra/source/1450xld.cpp:738-742" + + - name: 1450xld-disk-handler-post-rev-f.rom + description: "1450XLD disk handler firmware (post rev. F)" + system: atari-400-800 + required: false + size: 4096 + crc32: "29359910" + validation: [size, crc32] + note: "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:105, src/Altirra/source/1450xld.cpp:738-742" + + - name: atari-835-internal.rom + description: "Atari 835 internal 8048 firmware" + system: atari-400-800 + required: false + size: 1024 + crc32: "d6dd4f41" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:107, src/Altirra/source/1030full.cpp:282" + + - name: atari-1030-internal.rom + description: "Atari 1030 internal 8050 firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "329b1d5b" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:109, src/Altirra/source/1030full.cpp:300" + + - name: atari-1030-external.rom + description: "Atari 1030 external ROM firmware" + system: atari-400-800 + required: false + size: 8192 + crc32: "7abdb8e7" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:110, src/Altirra/source/1030full.cpp:301" + + - name: atari-820.rom + description: "Atari 820 firmware" + system: atari-400-800 + required: false + size: 2048 + crc32: "79e0fea4" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:112, src/Altirra/source/820full.cpp:206" + + - name: atari-1025.rom + description: "Atari 1025 firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "46d194b4" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:113, src/Altirra/source/1025full.cpp:227" + + - name: atari-1029-english.rom + description: "Atari 1029 firmware (English)" + system: atari-400-800 + required: false + size: 4096 + crc32: "19c4f811" + validation: [size, crc32] + note: "English character set variant." + source_ref: "src/Altirra/source/firmwaredetect.cpp:114, src/Altirra/source/1029full.cpp:233" + + - name: atari-850.rom + description: "Atari 850 firmware" + system: atari-400-800 + required: false + size: 4096 + crc32: "2cf990b9" + validation: [size, crc32] + source_ref: "src/Altirra/source/firmwaredetect.cpp:116, src/Altirra/source/850full.cpp:316" + + - name: atari-850-early.rom + description: "Atari 850 firmware (early revision)" + system: atari-400-800 + required: false + size: 4096 + crc32: "9201359a" + validation: [size, crc32] + note: "Early 850 revision." + source_ref: "src/Altirra/source/firmwaredetect.cpp:117, src/Altirra/source/850full.cpp:316" + + - name: speedy-xf-1.7.rom + description: "Speedy XF v1.7" + system: atari-400-800 + required: false + size: 32768 + crc32: "597eb2e4" + validation: [size, crc32] + note: "32K image, cloned to 64K by the loader (diskdrivespeedyxf.cpp:363-364)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:119, src/Altirra/source/diskdrivespeedyxf.cpp:353-364" + + - name: speedy-xf-1.8.rom + description: "Speedy XF v1.8" + system: atari-400-800 + required: false + size: 32768 + crc32: "554a9067" + validation: [size, crc32] + note: "32K image, cloned to 64K by the loader (diskdrivespeedyxf.cpp:363-364)." + source_ref: "src/Altirra/source/firmwaredetect.cpp:120, src/Altirra/source/diskdrivespeedyxf.cpp:353-364" + + # -- Types with no row in the detect table. Registered by hand with an explicit + # type from the menu in uifirmware.cpp:498-585; max_size is the read length + # at the load site. -- + + - name: 810-archiver.rom + description: "810 Archiver disk drive firmware" + system: atari-400-800 + required: false + max_size: 4096 + source_ref: "src/Altirra/source/uifirmware.cpp:528, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: 1050-duplicator.rom + description: "1050 Duplicator disk drive firmware" + system: atari-400-800 + required: false + max_size: 8192 + source_ref: "src/Altirra/source/uifirmware.cpp:532, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: speedy-1050.rom + description: "Speedy 1050 disk drive firmware" + system: atari-400-800 + required: false + max_size: 16384 + source_ref: "src/Altirra/source/uifirmware.cpp:534, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: super-archiver.rom + description: "Super Archiver disk drive firmware" + system: atari-400-800 + required: false + max_size: 4096 + note: "Shared by the Super Archiver and Super Archiver with BitWriter device types (diskdrivefull.cpp:1173-1174)." + source_ref: "src/Altirra/source/uifirmware.cpp:536, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: toms-1050.rom + description: "TOMS 1050 disk drive firmware" + system: atari-400-800 + required: false + max_size: 8192 + source_ref: "src/Altirra/source/uifirmware.cpp:537, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: tygrys-1050.rom + description: "Tygrys 1050 disk drive firmware" + system: atari-400-800 + required: false + max_size: 4096 + source_ref: "src/Altirra/source/uifirmware.cpp:538, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: 1050-turbo.rom + description: "1050 Turbo disk drive firmware" + system: atari-400-800 + required: false + max_size: 16384 + source_ref: "src/Altirra/source/uifirmware.cpp:540, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: is-plate.rom + description: "I.S. Plate disk drive firmware" + system: atari-400-800 + required: false + max_size: 4096 + source_ref: "src/Altirra/source/uifirmware.cpp:542, src/Altirra/source/diskdrivefull.cpp:1165-1213" + + - name: amdek-amdc.rom + description: "Amdek AMDC-I/II disk drive firmware" + system: atari-400-800 + required: false + max_size: 4096 + source_ref: "src/Altirra/source/uifirmware.cpp:548, src/Altirra/source/diskdriveamdc.cpp:88" + + - name: ultimate1mb.rom + description: "Ultimate1MB firmware" + system: atari-400-800 + required: false + hle_fallback: true + max_size: 524288 + note: "Altirra U1MB Recovery OS is used when no image is registered." + source_ref: "src/Altirra/source/uifirmware.cpp:555, src/Altirra/source/simulator.cpp:4985-4996, src/Altirra/source/ultimate1mb.cpp:237-242" + + - name: myide2.rom + description: "MyIDE-II cartridge firmware" + system: atari-400-800 + required: false + max_size: 524288 + source_ref: "src/Altirra/source/uifirmware.cpp:556, src/Altirra/source/myide.cpp:304-315" + + - name: side.rom + description: "SIDE cartridge firmware" + system: atari-400-800 + required: false + max_size: 524288 + source_ref: "src/Altirra/source/uifirmware.cpp:557, src/Altirra/source/side.cpp:283-294" + + - name: side2.rom + description: "SIDE 2 cartridge firmware" + system: atari-400-800 + required: false + max_size: 524288 + source_ref: "src/Altirra/source/uifirmware.cpp:558, src/Altirra/source/side.cpp:283-294" + + - name: side3.rom + description: "SIDE 3 cartridge firmware" + system: atari-400-800 + required: false + max_size: 8388608 + source_ref: "src/Altirra/source/uifirmware.cpp:559, src/Altirra/source/side3.cpp:448-460" + + - name: kmkjz-ide.rom + description: "KMK/JZ IDE BIOS" + system: atari-400-800 + required: false + max_size: 3072 + note: "The v1 device exposes 0xC00 of its flash, so the loader reads only that much." + source_ref: "src/Altirra/source/uifirmware.cpp:560, src/Altirra/source/kmkjzide.cpp:357-394" + + - name: kmkjz-ide2-main.rom + description: "KMK/JZ IDE 2 (IDEPlus) main firmware" + system: atari-400-800 + required: false + max_size: 131072 + source_ref: "src/Altirra/source/uifirmware.cpp:561, src/Altirra/source/kmkjzide.cpp:357-394" + + - name: kmkjz-ide2-sdx.rom + description: "KMK/JZ IDE 2 (IDEPlus) SpartaDOS X firmware" + system: atari-400-800 + required: false + max_size: 524288 + source_ref: "src/Altirra/source/uifirmware.cpp:562, src/Altirra/source/kmkjzide.cpp:357-394" + + - name: atari-1030-download.rom + description: "Atari 1030 modem download image" + system: atari-400-800 + required: false + hle_fallback: true + max_size: 10368 + note: "Altirra builds its own download image from src/Kernel/source/1030/firmware.s when none is registered." + source_ref: "src/Altirra/source/uifirmware.cpp:568, src/Altirra/source/1030.cpp:1162" + + - name: rapidus-flash.rom + description: "Rapidus accelerator flash firmware" + system: atari-400-800 + required: false + hle_fallback: true + max_size: 524288 + note: "Altirra Rapidus Bootstrap Flash is used when no image is registered." + source_ref: "src/Altirra/source/uifirmware.cpp:571, src/Altirra/source/rapidus.cpp:338" + + - name: rapidus-core-pbi.rom + description: "Rapidus 65C816 core PBI firmware" + system: atari-400-800 + required: false + hle_fallback: true + max_size: 2048 + note: "Altirra Rapidus Bootstrap 65816 PBI Firmware is used when no image is registered." + source_ref: "src/Altirra/source/uifirmware.cpp:572, src/Altirra/source/rapidus.cpp:339" + + - name: ape-warp-os.rom + description: "APE Warp+ OS 32-in-1 firmware" + system: atari-400-800 + required: false + max_size: 524288 + source_ref: "src/Altirra/source/uifirmware.cpp:573, src/Altirra/source/warpos.cpp:115" + + # -- Files shipped inside the Altirra archive -- + + - name: Altirra.chm + description: "Altirra help file" + system: atari-400-800 + required: false + bundled: true + note: "Opened from the program directory when help is requested." + source_ref: "src/Altirra/source/oshelper.cpp:509-529" + + - name: Additions.atr + description: "Altirra Additions disk" + system: atari-400-800 + required: false + bundled: true + note: > + Disk image carrying the handler software several emulated devices need: + ALTXEP80.SYS for the XEP80, BOOT850.COM for the 850 interface, BOOT1030.COM + for the 1030 modem, ATDEBUGX.SYS for the debug link. The user mounts it as an + ordinary disk image. + source_ref: "src/ATHelpFile/source/additions.xml:3-10, src/Altirra/source/uidevices.cpp:252, src/Altirra/source/uidevices.cpp:486" diff --git a/emulators/aps3e.yml b/emulators/aps3e.yml new file mode 100644 index 00000000..05f18925 --- /dev/null +++ b/emulators/aps3e.yml @@ -0,0 +1,272 @@ +emulator: aPS3e +type: standalone +core_classification: community_fork +source: "https://github.com/aenu1/aps3e" +source_branch: main4 +upstream: "https://github.com/RPCS3/rpcs3" +profiled_date: "2026-08-11" +source_commit: "65ec7583bb8c1ff8b5e516c8f8c8d006d9cae3c2" +upstream_commit: "40e9ee5af0de7ca31691c58eebe64ba205a2900b" +core_version: "2.41" +display_name: "Sony - PlayStation 3 (aPS3e)" +cores: + - aps3e +systems: + - sony-playstation-3 + +notes: | + PlayStation 3 emulator for Android, distributed on Google Play as aenu.aps3e + and aenu.aps3e.premium. RPCS3 is vendored whole under app/src/main/cpp/rpcs3 + rather than pulled as a submodule, and a JNI layer of about six thousand lines + replaces the Qt front end. The vendored tree reports itself as 0.0.41-alpha.1 + at RPCS3 commit 40e9ee5a. + ref: aps3e/app/src/main/cpp/rpcs3/rpcs3/git-version.h:3, + aps3e/app/src/main/cpp/rpcs3/rpcs3/rpcs3_version.cpp:29 + + Source drops land on successive branches, not on the default one. Release 2.41 + of 2026-07-30 is the commit titled 2.41 at the head of main4; the lightweight + tags 2.39, 2.40 and 2.41 all sit on the head of main2, an April tree that + predates every one of those releases and whose generated git-version.h was + never filled in. main4 is the tree read here. No versionName is usable either: + the only gradle file committed is app/build.gradle.bak, which carries the + placeholder 1.19a and is renamed and completed with the signing block at build + time. + ref: aps3e/README.md, aps3e/app/build.gradle.bak:16 + + Emulator paths derive from APS3E_DATA_DIR, set by the Java layer to the + external files directory of the package. The config directory holds dev_flash, + dev_hdd0, custom_cfg and the global config.yml; caches live beside it. The + custom font directory sits at the data root, and the custom GPU driver + directory sits in internal storage because the external filesystem cannot + carry an executable mapping. + ref: aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:127-133, + aps3e/app/src/main/java/aenu/aps3e/Application.java:21-64 + + The PS3 firmware is required and nothing runs without it. Three independent + gates enforce it: the game list refuses to launch an entry when the marker + config/dev_flash/.installed is absent, the quick start wizard keeps its Next + button disabled on the firmware page until that marker exists, and the boot + path itself returns firmware_missing when dev_flash/sys/external/liblv2.sprx + is not a file. The third gate covers the intent launched directly against + EmulatorActivity, which does not pass through the game list. The shipped + configuration leaves Libraries Control empty, so liblv2.sprx keeps its default + entry in the module list and the check fires. + ref: aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:143-145, + aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:187-190, + aps3e/app/src/main/java/aenu/aps3e/QuickStartActivity.java:316-318, + aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2747-2767, + aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:86, + aps3e/app/src/main/assets/config/config.yml + + Overlay text is drawn from a font list chosen by the Font File Selection + setting. From Firmware, the default, asks for Arial.ttf, arial.ttf, the + Android system face at /system/fonts/Roboto-Regular.ttf and then + SCE-PS3-VR-R-LATIN.TTF for Latin, SCE-PS3-SR-R-JPN.TTF and SCE-PS3-DH-R-CGB.TTF + for the CJK base, and SCE-PS3-YG-R-KOR.TTF for Hangul. The SCE faces are + resolved against dev_flash/data/font and dev_flash/data/font/SONY-CC, so they + come from the firmware rather than from a separate download. Custom points all + three classes at one file and reverts to From Firmware when that path no + longer exists. + ref: aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:192-222, + aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:113-118 + + Vulkan is reached through a loader chosen before the emulator starts. The + global config YAML is read directly for Use Custom Driver and Custom Driver + Library Path, and the named library is dlopened when both are set and the path + exists; otherwise the system libvulkan.so is used. Drivers are imported either + as a bare shared object or as a zip whose meta.json names the library. + ref: aps3e/app/src/main/cpp/aps3e_emu.cpp:875-899, + aps3e/app/src/main/cpp/vkapi.cpp:21, + aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1229-1324 + + Encrypted disc images are supported by a loader that has no counterpart in the + desktop code line. Launching an ISO makes the Java layer look for a sidecar key + beside it, trying the base name with .dkey and then with .key, and hand the + descriptor down beside the image. The key is accepted at exactly 32 bytes, read + as a hex string, or exactly 16 bytes, read as raw bytes, and installed as an + AES-128 decryption context. A 3k3y watermark at offset 0xF70 is recognised + separately and needs no key. + ref: aps3e/app/src/main/java/aenu/aps3e/Utils.java:170-190, + aps3e/app/src/main/java/aenu/aps3e/EmulatorActivity.java:147-153, + aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:354-399, + aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:508-554 + + One import entry point takes EDAT, RAP and PKG. A RAP is copied verbatim into + the exdata folder of user 00000001 and rejected unless it is exactly 16 bytes. + An EDAT is parsed for its NPD header, rejected below 0x90 bytes or without the + NPD magic, and written to the same folder under the content id the header + carries. A PKG goes through the package reader and lands in dev_hdd0. + ref: aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:594-605, + aps3e/app/src/main/java/aenu/aps3e/Emulator.java:820-844, + aps3e/app/src/main/cpp/aps3e_emu.cpp:801-829, + aps3e/app/src/main/cpp/aps3e_emu.cpp:783-793 + + patch.yml, compatibility_table.json and database_config.json ship inside the + APK as assets and are not user supplied. + ref: aps3e/app/src/main/assets + +files: + - name: PS3UPDAT.PUP + required: true + storage: large_file + description: "PS3 system software update package" + note: >- + Selected through the file picker and read from a descriptor. The PUP object + rejects an empty file, a wrong magic, a declared size the file does not + reach, an unreadable entry table and a failed entry hash. Segment 0x300 + carries the installation package database and segment 0x100 the version + string; the packages whose names contain dev_flash_ are decrypted with the + SCEPKG keys and their inner TARs extracted over dev_flash. The Java layer + creates dev_flash/.installed once the native call returns true. No digest + of the file itself is compared against anything. + source_ref: "aps3e/app/src/main/cpp/aps3e_emu.cpp:587-757, aps3e/app/src/main/cpp/emulator_aps3e.cpp:1045, aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:538-570, aps3e/app/src/main/res/values/strings.xml:108-110" + + - name: ".dkey" + aliases: [".key"] + required: false + size_options: [16, 32] + validation: [size] + unsourceable: "per-disc AES-128 key named after the image it decrypts, one per title, carried by disc dump catalogues rather than by the emulator" + description: "Redump disc decryption key read beside an encrypted ISO" + note: >- + Resolved as a sidecar of the image being launched, .dkey first then .key, + and passed down as a second descriptor. 32 bytes are read as a hex string + and converted, 16 bytes are taken as raw; any other length fails the key + check. An image whose odd regions are encrypted does not boot without it. + source_ref: "aps3e/app/src/main/java/aenu/aps3e/Utils.java:170-190, aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:354-399, aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:850-870" + + - name: ".rap" + required: false + size: 16 + validation: [size] + unsourceable: "per-title activation licence tied to the account that bought the content, never distributed generically" + description: "PSN content licence" + note: >- + Imported through the EDAT/RAP/PKG entry and copied byte for byte into + dev_hdd0/home/00000001/exdata under the name it was given. The import is + refused unless the source is exactly 16 bytes. SELF decryption looks the + matching file up in that folder by content id, with a lowercase extension. + source_ref: "aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:596-600, aps3e/app/src/main/java/aenu/aps3e/Emulator.java:820-844, aps3e/app/src/main/cpp/rpcs3/rpcs3/Crypto/unself.cpp:1271-1286, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:391" + + - name: ".edat" + required: false + min_size: 144 + validation: [size] + unsourceable: "per-content licensed data file, shipped with the content it belongs to" + description: "Encrypted data file for licensed content" + note: >- + Imported through the same entry. The NPD header is read and the file + refused below 0x90 bytes or when the magic is not NPD, then written whole + to dev_hdd0/home/00000001/exdata under the content id the header declares. + source_ref: "aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:601-605, aps3e/app/src/main/cpp/aps3e_emu.cpp:801-829, aps3e/app/src/main/cpp/emulator_aps3e.cpp:1052, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:413" + + - name: ".ttf" + aliases: [".ttc", ".otf"] + required: false + config_key: "Miscellaneous/Custom Font File Path" + unsourceable: "any TrueType, TrueType collection or OpenType face the user picks, with no name or version the code expects" + description: "Replacement face for the overlay text" + note: >- + Copied into the font directory at the data root by the picker, its absolute + path stored in the configuration. Used for the default, CJK base and Hangul + classes at once, and only while Font File Selection is Custom. The setting + reverts to From Firmware when the stored path no longer resolves, so the + firmware faces cover the absence. + source_ref: "aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1326-1346, aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:203-215, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:401-402" + + - name: ".so" + aliases: [".zip"] + required: false + config_key: "Video/Vulkan/Custom Driver Library Path" + unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact" + description: "Replacement Vulkan driver" + note: >- + Imported as a shared object, or as a zip whose meta.json names the library + to keep, and unpacked into the driver directory in internal storage. Read + from the global config YAML before the emulator initialises and dlopened in + place of the system loader. The system libvulkan.so is used when Use Custom + Driver is off, the path is empty, or the file is gone. + source_ref: "aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1229-1324, aps3e/app/src/main/cpp/aps3e_emu.cpp:875-899, aps3e/app/src/main/cpp/vkapi.cpp:21, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:209-211" + +# Layout produced by extracting PS3UPDAT.PUP, and the paths this tree reads from it. +dev_flash: + path: "config/dev_flash/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:15, aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:127-129" + note: >- + Mounted at /dev_flash and rooted at the config directory. Written only by the + firmware installer, which extracts the dev_flash_ packages of the PUP into it. + + sys_external: + path: "dev_flash/sys/external/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUModule.cpp:2608-2610, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:207" + note: >- + Firmware SPRX modules. liblv2.sprx gates the boot and pulls the rest in; + each module can be forced to LLE or HLE through Libraries Control, which + the shipped configuration leaves empty. flashATRAC.pic is named by + cellSysmodule for the ATRAC module path. + critical_file: "liblv2.sprx" + + sys_internal: + path: "dev_flash/sys/internal/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:33-34" + note: "Internal modules, libfs_utility_init.sprx among them." + + fonts: + path: "dev_flash/data/font/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:226-241, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:281, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:117-118" + note: >- + Faces cellFontOpenFontset maps by type, and the directory the overlay + searches for its own list. A fontset the emulator does not implement falls + back to SCE-PS3-RD-R-LATIN.TTF. + files: + - "SCE-PS3-RD-R-LATIN.TTF" + - "SCE-PS3-RD-L-LATIN.TTF" + - "SCE-PS3-RD-B-LATIN.TTF" + - "SCE-PS3-RD-R-LATIN2.TTF" + - "SCE-PS3-RD-L-LATIN2.TTF" + - "SCE-PS3-RD-B-LATIN2.TTF" + - "SCE-PS3-MT-R-LATIN.TTF" + - "SCE-PS3-NR-R-JPN.TTF" + - "SCE-PS3-NR-L-JPN.TTF" + - "SCE-PS3-NR-B-JPN.TTF" + - "SCE-PS3-YG-R-KOR.TTF" + - "SCE-PS3-SR-R-LATIN.TTF" + - "SCE-PS3-SR-R-LATIN2.TTF" + - "SCE-PS3-SR-R-JPN.TTF" + - "SCE-PS3-VR-R-LATIN.TTF" + - "SCE-PS3-VR-R-LATIN2.TTF" + - "SONY-CC/SCE-PS3-DH-R-CGB.TTF" + + certs: + path: "dev_flash/data/cert/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellSsl.cpp:110" + note: "Root certificates cellSsl enumerates." + + vsh: + path: "dev_flash/vsh/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/util/sysinfo.cpp:651-653, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUThread.cpp:4433-4441, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_user_list_dialog.cpp:207" + note: >- + vsh/etc/version.txt supplies the installed firmware version, compared + against the PS3_SYSTEM_VER a title declares. vsh/module/eseibrd.sprx is + precompiled at boot and vsh/resource/explore/user carries the avatars the + user list draws. + + ps1emu: + path: "dev_flash/ps1emu/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2171" + note: "ps1_newemu.self, the argv[0] of a PS1 Classics boot." + + pspemu: + path: "dev_flash/pspemu/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2199" + note: "psp_emulator.self, the argv[0] of a PSP minis boot." + +dev_flash2: + path: "config/dev_flash2/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:16, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:28" + note: "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH2. Mount point only, created empty." + +dev_flash3: + path: "config/dev_flash3/" + source_ref: "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:17, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:27" + note: "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH3. Mount point only, created empty." diff --git a/emulators/arcadeflashweb.yml b/emulators/arcadeflashweb.yml new file mode 100644 index 00000000..c419abef --- /dev/null +++ b/emulators/arcadeflashweb.yml @@ -0,0 +1,168 @@ +emulator: ArcadeFlashWeb +type: standalone +core_classification: launcher +source: "https://github.com/aureyoboss/ArcadeFlashWeb" +upstream: "https://github.com/aureyoboss/ArcadeFlashWeb" +profiled_date: "2026-08-11" +source_commit: "5de66e0cd69b48721a094887a28d042f71ddad08" +core_version: "1.0.2" +display_name: "Adobe Flash (ArcadeFlashWeb)" +cores: + - arcadeflashweb +systems: + - flash + +notes: | + Qt 5.13 application that plays SWF files by hosting Adobe's Pepper Flash + runtime inside a QtWebEngine view. Windows only. ES-DE runs + ArcadeFlashWeb.exe -fullscreen -source:, RetroBat adds -nodatetime, + -savedataflash: and -picturesfolder: and sets the working directory to the + program folder. The repository carries the Qt and QML sources and the + releases; arcadeflashweb.com no longer resolves and holds no archived + capture. Every string quoted below was also read back from the shipped + v1.0.2 executable, which matches the sources. + ref: src/ArcadeFlashWeb.pro:1-5, src/main.qml:34-35 + + The runtime is registered from the command line. main sets + QTWEBENGINE_CHROMIUM_FLAGS to "--enable-pepper-testing + --ppapi-flash-path=./pepflashplayer.dll" before QtWebEngine::initialize, so + Chromium takes the plugin from that path. It is the one file resolved + against the process working directory; everything else below hangs off + applicationDirPath. No --ppapi-flash-version accompanies it, and nothing + reads the manifest.json sitting beside the library: QtWebEngine builds the + plugin entry from the two switches alone and the library never names that + file. The manifest is still what identifies the build, Pepper Flash + 32.0.0.371 for win/ia32. + ref: src/main.cpp:37-44, ArcadeFlashWeb v1.0.2 manifest.json:2-7, + qtwebengine 5.13 src/core/content_client_qt.cpp AddPepperFlashFromCommandLine + + A local movie is not handed to the view. The url becomes + file:////flash/flash.html?jeu===, and that page + splits the query on the equals signs, fits the movie to the window and calls + swfobject.embedSWF with scale exactfit and wmode direct. The version it asks + for is 32.0.0, so SWFObject creates the object only when the registered + plugin reports at least that. A -source: containing "http" loads in the view + unchanged and uses none of this. + ref: src/main.qml:317-347, src/Navigateur.qml:144-155, + ArcadeFlashWeb v1.0.2 flash/flash.html:38-104 + + Natural dimensions come from swfdump. When -swfwidth: and -swfheight: are + not both given, which is the case for both ES-DE and RetroBat, the program + runs cmd /C /swfdump.exe -X -Y redirected to swf.txt in the + data directory and reads the second and fourth whitespace fields back. + ref: src/main.qml:109-128, src/main.qml:321-335, src/Navigateur.qml:147-148 + + -profilantimicro: starts AntiMicro hidden with a profile from + antimicro/profiles before the movie loads. Adding -controleurantimicro: + replaces that argument with --profile-controller, and the profile file is + then not passed at all. + ref: src/main.qml:305-314 + + Written rather than expected: swf.txt, the QML LocalStorage database holding + the last browser path with the bezel, screen mode and clock flags, the + QtWebEngine cache and persistent storage under -savedataflash:, and the JPEG + screenshots. The interface icons, the bezel, the CRT and scanline overlays + and the wallpaper are compiled in through qml.qrc, so of the images only the + copy under flash/images is read from disk, and it is byte for byte the + compiled one. Two files ship unread: flash/swfobject/expressInstall.swf, + which flash.html disables by passing false for the express install url, and + flash/swfobject/test.swf, which nothing names. + ref: src/qml.qrc:1-33, src/Sauvegarde.js:1-30, src/main.qml:132-159, + ArcadeFlashWeb v1.0.2 flash/flash.html:102 + + The remainder of the release is the Qt 5.13.2 deployment of the program + itself. VCRUNTIME140.dll and the UCRT stubs sit in the executable's import + directory, so the Visual C++ 2017 x86 redistributable has to be installed, + and the release carries its installer. + ref: README.md:59, ArcadeFlashWeb v1.0.2 ArcadeFlashWeb.exe import directory + +files: + - name: pepflashplayer.dll + required: true + bundled: true + description: "Adobe Pepper Flash Player runtime" + note: >- + Handed to Chromium as --ppapi-flash-path and resolved against the process + working directory. Without it no plugin is registered, SWFObject finds no + player and the movie is never embedded. The page asks for a reported + version of at least 32.0.0; the build that ships is the 32-bit 32.0.0.371. + source_ref: "src/main.cpp:40, ArcadeFlashWeb v1.0.2 flash/flash.html:102" + + - name: flash.html + path: flash/flash.html + required: true + bundled: true + description: "Page that embeds the movie" + note: >- + Every local SWF goes through it, carrying the path and the two dimensions + in the query string. Absent, the view is pointed at a file that does not + exist and nothing plays. + source_ref: "src/main.qml:327,334, src/Navigateur.qml:150" + + - name: swfobject.js + path: flash/swfobject/swfobject.js + required: true + bundled: true + description: "SWFObject 2.2 embed library" + note: >- + The only definition of swfobject, included by flash.html before the script + that calls embedSWF. It reads the player version from the Shockwave Flash + plugin description, refines it from a probe object's $version, and refuses + to embed below the version the page asks for. + source_ref: "ArcadeFlashWeb v1.0.2 flash/flash.html:38, ArcadeFlashWeb v1.0.2 flash/swfobject/swfobject.js:1-4" + + - name: background.jpg + path: flash/images/background.jpg + required: false + bundled: true + description: "Backdrop of the player page" + note: >- + Drawn behind the movie by the page's bg div. The same image is compiled + into the binary for the QML side, so only this copy is read from disk. + source_ref: "ArcadeFlashWeb v1.0.2 flash/flash.html:110, src/qml.qrc:23" + + - name: swfdump.exe + required: false + bundled: true + description: "SWFTools swfdump, reads the movie's natural size" + note: >- + Run through cmd /C with -X -Y and the output redirected to swf.txt, then + parsed as the second and fourth whitespace fields. Skipped when both + -swfwidth: and -swfheight: are given. Absent, the redirection still + creates an empty file, both fields parse to NaN and the page sizes the + object from that. + source_ref: "src/main.qml:324-325, src/Navigateur.qml:147-148" + + - name: antimicro.exe + path: antimicro/antimicro.exe + required: false + bundled: true + description: "AntiMicro gamepad to keyboard mapper" + note: >- + Started hidden before the movie loads, only when -profilantimicro: is + given. The copy that ships is a 2016 build carrying its own Qt 5 runtime + in the same folder. + source_ref: "src/main.qml:309,311" + + - name: arcadeflashweb.gamecontroller.amgp + path: antimicro/profiles/arcadeflashweb.gamecontroller.amgp + required: false + bundled: true + description: "AntiMicro mapping profile" + note: >- + Passed to AntiMicro as --profile under the name -profilantimicro: gives; + the name that ships is the one the built-in help quotes. With + -controleurantimicro: also set the call carries --profile-controller + instead and no profile file is read. + source_ref: "src/main.qml:309-312" + + - name: pepper.vch + required: false + bundled: true + description: "Adobe Flash Access blob shipped with the runtime" + note: >- + Named in the Flash library's own string table next to PepperFlashPlayer. + PKCS#7 over 446144 opaque bytes, signed through the Adobe Flash Access + chain under subject CN AdobeIV-202002031156. It carries DRM material and + no plain SWF needs it. + source_ref: "ArcadeFlashWeb v1.0.2 pepflashplayer.dll string table" diff --git a/emulators/armsx1.yml b/emulators/armsx1.yml new file mode 100644 index 00000000..67913562 --- /dev/null +++ b/emulators/armsx1.yml @@ -0,0 +1,109 @@ +emulator: ARMSX1 +type: standalone +core_classification: community_fork +source: "https://github.com/ARMSX2/ARMSX1" +source_branch: "android-compose" +upstream: "https://github.com/allkern/psxe" +profiled_date: "2026-08-11" +source_commit: "fadd20b6587a291e59b49378a2428358c6663b8c" +core_version: "0.1.3" +display_name: "Sony - PlayStation (ARMSX1)" +verification: existence +bios_size: 524288 +bios_directory: "bios/" +cores: + - armsx1 +systems: + - sony-playstation + +notes: | + PlayStation emulator forked from psxe, rebuilt around SDL2 frontends and a + Dear ImGui fullscreen shell. Desktop, Android, iOS, UWP, WebAssembly and + PSVita builds come out of one tree. The Android application is + com.nanodata.armsx with the activity com.armsx2.Main, and its Compose + launcher hosts the same core in process. + ref: README.md:1-2, android/app/build.gradle:71-79, + android/app/src/main/AndroidManifest.xml:78-92 + + A BIOS image is required. Boot stops before a session exists when no path + resolves, and again when the file cannot be read. Skip BIOS does not change + that: the image runs from reset and the hook only takes over at the shell + entry point, once the kernel is built. + ref: frontend/main.cpp:2529-2549, psx/psx.c:249-252, psx/fastboot.h:45, + psx/fastboot.c:225-239 + + psxe_cfg_get_bios_path answers in three steps: the override file when it + exists, then a scan of the search folder, then the override path unchanged. + The override is [bios].override_file or -b and defaults to bios.bin under the + preference path SDL_GetPrefPath("nanodata", "armsx"); the search folder is + [bios].search_path or -B and defaults to the relative path bios. + ref: frontend/config.c:1540-1559, frontend/config.c:1385-1404, + frontend/config.c:677-683, frontend/config.c:54-57 + + The scan reads that folder once, keeps .bin and .rom, and returns the entry + named bios.bin. Its other branch compares [bios].preferred_model against each + filename through a normaliser that drops every non-alphanumeric character and + lowercases the rest, applied to the name including its extension, so + scph1001.bin normalises to scph1001bin and no model value equals it. A name + carrying no extension, which would, is dropped by the extension filter first. + ref: frontend/config.c:292-357, frontend/config.c:226-247, + frontend/config.c:249-260 + + Nothing identifies the image beyond that. No name table, no size test, no + hash. The loader takes the file's own length, allocates it, and the bus maps + the device from 0x1fc00000 over that same length, which is how the 1 MB + SCPH-5903 image stays addressable in full. + ref: psx/dev/bios.c:21-54, psx/bus.c:50-54, psx/dev/bios.h:8-10 + + preferred_model carries 22 values, SCPH-1000 through SCPH-102C, printed by + --help-model and mirrored by the Android model picker. + ref: frontend/config.c:177-200, + android/app/src/main/java/com/armsx2/config/Ps1Settings.kt:416-423 + + On Android the preference path is the application files directory, so + settings.toml and the default bios.bin sit there. The BIOS picker copies the + chosen dump to user_bios.bin and writes its absolute path into + [bios].override_file. EmulatorActivity passes --bios /bios.bin when + the package carries an assets/bios.bin, and the in-process launcher repeats + that check with stat; release 0.1.3 ships no such asset. + ref: android/app/src/main/java/com/armsx2/core/Ps1Config.kt:20-41, + android/app/src/main/java/com/armsx2/ui/settings/Ps1BiosTab.kt:38-48, + android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:58-61, + android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:95-99, + frontend/android_jni.cpp:1708-1743, ARMSX1-0.1.3-release.apk assets + + The remaining paths the core opens are per game, and are written by the + emulator or picked by the user: memory cards, created blank at first use; + save states, rewind snapshots and screenshots; a GameShark .cht catalogue + named by [cheats].cheats_file; and content-addressed PNG packs under the + replacements folder of [video].texture_dir. + ref: psx/dev/mcd.c:139-154, psx/cheats.c:346-390, psx/texrep.c:846-848 + +files: + - name: scph1001.bin + agnostic: true + required: true + min_size: 524288 + max_size: 1048576 + description: "PlayStation BIOS image" + note: >- + Any image is accepted, whatever its name and length: the file is read + whole and mapped at its own size. 524288 is the region psx_bios_init + declares before the load, and 1048576 the SCPH-5903 image the loader + names as the exception. The folder scan reaches an image only under the + name bios.bin; [bios].override_file, -b and the Android picker open a + path directly. + source_ref: "psx/dev/bios.c:21-54, psx/dev/bios.h:8-10, frontend/config.c:292-357, frontend/config.c:1540-1559, frontend/main.cpp:2529-2535" + + - name: ".rom" + required: false + config_key: "paths.expansion_rom" + max_size: 524288 + unsourceable: "any expansion port ROM the user points at, under no name and no version the code expects" + description: "Expansion port ROM image" + note: >- + Read into the 512 KB region at 0x1f000000, which is filled with 0xff when + no path is set. Named by [paths].expansion_rom, -e, or the Advanced tab of + the Android settings. A path that is set and cannot be opened fails + psx_init and stops the boot. + source_ref: "psx/dev/exp1.c:12-44, psx/dev/exp1.h:8-10, psx/psx.c:260-261, frontend/config.c:681, frontend/main.cpp:1906, android/app/src/main/java/com/armsx2/ui/settings/Ps1AdvancedTab.kt:96-100" diff --git a/emulators/armsx2.yml b/emulators/armsx2.yml new file mode 100644 index 00000000..4c92a12d --- /dev/null +++ b/emulators/armsx2.yml @@ -0,0 +1,844 @@ +emulator: ARMSX2 +type: standalone + libretro +core_classification: community_fork +bios_mode: agnostic +source: "https://github.com/ARMSX2/ARMSX2" +upstream: "https://github.com/PCSX2/pcsx2" +profiled_date: "2026-08-11" +source_commit: "e509b17e7a8f741f89c1e2a36539c32122467d34" +core_version: "2.6.6.5" +display_name: "Sony - PlayStation 2 (ARMSX2)" +cores: + - armsx2 + - armsx2_libretro +systems: + - sony-playstation-2 + +bios_directory: "bios/" +resources_directory: "resources/" + +notes: | + PlayStation 2 emulator, a GPL-3.0 fork of PCSX2 that replaces the x86-64 only + EE, IOP, VU and vtlb fast memory recompilers with native AArch64 ones. One tree + builds the Android application com.armsx2, an iOS package, macOS, Windows and + Linux on arm64, an SDL handheld frontend, and a libretro core. + ref: README.md:1-24, platforms/android/app/build.gradle.kts:17-74, + .github/workflows/build-all.yml:79-85 + + A BIOS image is required and boot stops without one: LoadBIOS returning false + makes VMManager report that a PlayStation 2 BIOS is needed and return a startup + failure. Only a GS dump replay skips the load. The folder is Bios under the data + directory, bios by default, and on Android the setup wizard keeps it in + app-private storage because the native file APIs cannot reliably open a dump off + a SAF volume. + ref: pcsx2/ps2/BiosTools.cpp:332-348, pcsx2/VMManager.cpp:1592-1607, + pcsx2/Pcsx2Config.cpp:2498, + platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/NativeApp.java:82-93 + + Detection is by content. The scan lists the BIOS folder, keeps files between 4 + and 8 MB, and accepts an image whose romdir carries a RESET entry followed by a + readable ROMVER; the fifth ROMVER character gives the zone among Japan, USA, + Europe, Asia, China, T10K, COH-H, Test and Free, and an EXTINFO entry supplies + the serial. An image named in the configuration is opened at its own path, + without the size filter. No name and no hash is matched anywhere. The image is + read into the 4 MB ROM region and truncated to it, and one shorter than 2465792 + bytes turns off the OSDSys parameter HLE. IsBIOSFromFd runs the same romdir test + on a file descriptor, which is how the Android picker identifies a dump handed + over by the storage framework. + ref: pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-197, + pcsx2/ps2/BiosTools.cpp:258-309, pcsx2/ps2/BiosTools.cpp:350-373 + + Companions derive from the selected image. rom1 and rom2 are appended to the + full name first, then substituted for the existing extension, so an image at + ps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then + ps2-0230a-20080220.rom1, and the open retries case-insensitively. Both regions + are 4 MB here. The nvm and the mec are read at the substituted extension only; + the nvm is rebuilt in memory with region and language defaults when it is + missing or its config block is blank, and the mec is written back to disk as + 0x00020603 when it cannot be read. + ref: pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:381-397, + pcsx2/MemoryTypes.h:12-14, pcsx2/CDVD/CDVD.cpp:46-60, + pcsx2/CDVD/CDVD.cpp:147-214 + + The network adapter opens eeprom.dat and flash.dat from the working directory, + standing in a compiled-in image for the first and a card filled with 0xFF for + the second. DEV9hdd.raw is the default name of the empty disk image the settings + page writes, and memory cards, save states and screenshots are likewise produced + by the emulator rather than read from a distribution. + ref: pcsx2/DEV9/DEV9.cpp:109-160, pcsx2/DEV9/flash.cpp:8-16, + pcsx2/DEV9/flash.cpp:62-86, pcsx2/DEV9/DEV9.h:31-33 + + An IRX named in the configuration is read into the ROM region at 0x3C0000 once + the IOP reaches 0x1630. The field is empty by default and names no file of its + own. + ref: pcsx2/ps2/BiosTools.cpp:243-256, pcsx2/ps2/BiosTools.cpp:399-400, + pcsx2/R3000AInterpreter.cpp:220 + + Everything under the resources folder is read at its own name from + EmuFolders::Resources, and GetOverridableResourcePath lets a copy in + UserResources take precedence. The standalone builds carry the folder with them, + the Android application unpacks it from its assets and force-refreshes the + shaders and the two game databases on update because a stale copy no longer + matches the binary. The libretro core ships as a bare shared object and reads + the same tree from /pcsx2/resources, with the BIOS folder at + /pcsx2/bios, so a libretro user supplies both. + ref: pcsx2/Pcsx2Config.cpp:2348-2357, pcsx2/Pcsx2Config.cpp:2507, + pcsx2/Pcsx2Config.cpp:2584-2598, pcsx2-libretro/Main.cpp:157-158, + pcsx2-libretro/Main.cpp:1000, + platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:60-61, + platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:355-372 + + Missing resources are not uniformly survivable. A font that cannot be read fails + LoadFontData, which fails ImGuiManager::Initialize and tears the GS device down, + whichever renderer is running. A shader source that cannot be read fails the + pipeline compile and the device with it, but only for the backend that reads it, + and the renderer setting picks among OpenGL, Vulkan and, on Windows, Direct3D 11 + and 12. Vulkan is the only backend the Android, iOS and libretro builds have, so + its sources are the ones no session can do without. The single caught failure is + the Vulkan sharpening pipeline, which turns itself off. The databases, the patch + archive, the controller mappings, the sounds and the interface artwork degrade + instead. + ref: pcsx2/ImGui/ImGuiManager.cpp:155-160, pcsx2/ImGui/ImGuiManager.cpp:501-575, + pcsx2/GS/GS.cpp:88-110, pcsx2/GS/GS.cpp:160-179, + pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2593-2612 + + The Qt builds resolve a per-script interface font by filename, first under + UserResources then under the resources folder, and download the first entry of + the script table into UserResources/fonts when neither holds it. Only the Latin + and emoji entries are shipped. + ref: pcsx2-qt/Translations.cpp:312-370, pcsx2-qt/Translations.cpp:407-424, + pcsx2-qt/Translations.cpp:541-549 + +files: + - name: ps2-0230a-20080220.bin + path: pcsx2/bios/ps2-0230a-20080220.bin + standalone_path: bios/ps2-0230a-20080220.bin + agnostic: true + required: true + min_size: 4194304 + max_size: 8388608 + validation: [size] + description: "PS2 BIOS image" + note: >- + Any image whose romdir holds RESET and ROMVER is accepted, whatever its + name. The 4 to 8 MB range gates the folder scan; an image named in the + configuration skips that range. Read into the 4 MB ROM region and truncated + to it. Shorter than 2465792 bytes disables the OSDSys parameter HLE. + source_ref: "pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-197, pcsx2/ps2/BiosTools.cpp:258-294, pcsx2/ps2/BiosTools.cpp:332-373" + + - name: ps2-0230a-20080220.rom1 + path: pcsx2/bios/ps2-0230a-20080220.rom1 + standalone_path: bios/ps2-0230a-20080220.rom1 + required: false + max_size: 4194304 + description: "DVD player ROM" + note: >- + Tried as {bios}.rom1 then {biosbase}.rom1, with a case-insensitive retry on + the open. Copied to the ROM1 region and truncated to 4 MB. Logged and + skipped when absent. + source_ref: "pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:381, pcsx2/ps2/BiosTools.cpp:386-397, pcsx2/MemoryTypes.h:13" + + - name: ps2-0230a-20080220.rom2 + path: pcsx2/bios/ps2-0230a-20080220.rom2 + standalone_path: bios/ps2-0230a-20080220.rom2 + required: false + max_size: 4194304 + description: "Chinese ROM extension" + note: >- + Same two-step naming as rom1. Copied to the ROM2 region, which is 4 MB in + this tree. Only present on Chinese region consoles. + source_ref: "pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:382, pcsx2/ps2/BiosTools.cpp:386-397, pcsx2/MemoryTypes.h:14" + + - name: ps2-0230a-20080220.nvm + path: pcsx2/bios/ps2-0230a-20080220.nvm + standalone_path: bios/ps2-0230a-20080220.nvm + required: false + hle_fallback: true + size: 1024 + description: "Console NVRAM" + note: >- + Read at the BIOS path with the extension replaced by nvm. Carries the + console id, the iLink id, the MAC, the model number and the OSD + configuration. A 1024 byte image is built in memory when the file is absent, + short, or carries a blank config block, zeroed except for a fixed iLink id + and the language and region defaults of the BIOS region. + source_ref: "pcsx2/CDVD/CDVD.cpp:46-47, pcsx2/CDVD/CDVD.cpp:147-200" + + - name: ps2-0230a-20080220.mec + path: pcsx2/bios/ps2-0230a-20080220.mec + standalone_path: bios/ps2-0230a-20080220.mec + required: false + hle_fallback: true + size: 4 + description: "Mechacon version" + note: >- + Read at the BIOS path with the extension replaced by mec. Defaults to + 0x00020603 and is written back at that path when it cannot be read. + source_ref: "pcsx2/CDVD/CDVD.cpp:60, pcsx2/CDVD/CDVD.cpp:201-214" + + - name: eeprom.dat + required: false + hle_fallback: true + size: 64 + description: "DEV9 EEPROM" + note: >- + Opened from the working directory when the network adapter starts and mapped + over 64 bytes. A compiled-in image stands in when the file is missing or + cannot be mapped. + source_ref: "pcsx2/DEV9/DEV9.cpp:60, pcsx2/DEV9/DEV9.cpp:109-160" + + - name: flash.dat + required: false + hle_fallback: true + max_size: 8650752 + description: "DEV9 SmartMedia flash image" + note: >- + Opened from the working directory at network adapter init and read as 1024 + blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with + 0xFF when the file is absent, and a short read is logged. + source_ref: "pcsx2/DEV9/flash.cpp:8-16, pcsx2/DEV9/flash.cpp:62-86" + + - name: ".irx" + required: false + config_key: "EmuCore/CurrentIRX" + unsourceable: "any IOP module the user points at, under no name and no version the code expects" + description: "IOP module injected at boot" + note: >- + Read into the ROM region at 0x3C0000 when the IOP program counter reaches + 0x1630 and the setting is longer than three characters. Empty by default. + source_ref: "pcsx2/ps2/BiosTools.cpp:243-256, pcsx2/ps2/BiosTools.cpp:399-400, pcsx2/R3000AInterpreter.cpp:220, pcsx2/Config.h:1601" + + - name: GameIndex.yaml + path: pcsx2/resources/GameIndex.yaml + standalone_path: resources/GameIndex.yaml + required: false + bundled: true + description: "Game database" + note: >- + Read from the resources folder, keyed by serial, carrying the per-game + fixes, patches and settings overrides. Parsed once on first lookup. + source_ref: "pcsx2/GameDatabase.cpp:43, pcsx2/GameDatabase.cpp:1205-1210" + + - name: armsx2_overrides.yaml + path: pcsx2/resources/armsx2_overrides.yaml + standalone_path: resources/armsx2_overrides.yaml + required: false + bundled: true + description: "Mobile GPU game database overlay" + note: >- + Second pass over the game database, merged onto the entries GameIndex.yaml + declares. Carries GS and JIT tuning correct on tiler GPUs. Kept outside the + shipped resources folder and copied in only for arm64 Linux, Android and + iOS; the loader no-ops where it is absent. + source_ref: "pcsx2/GameDatabase.cpp:50, pcsx2/GameDatabase.cpp:1211-1214, cmake/BuildParameters.cmake:186-200, pcsx2/CMakeLists.txt:1441-1451, platforms/android/app/build.gradle.kts:40-48" + + - name: RedumpDatabase.yaml + path: pcsx2/resources/RedumpDatabase.yaml + standalone_path: resources/RedumpDatabase.yaml + required: false + bundled: true + description: "Disc track hash database" + note: >- + Loaded on the first hash lookup and used to tell the user whether a dump + matches a known good one. Read by the Qt game summary page. + source_ref: "pcsx2/GameDatabase.cpp:1278, pcsx2/GameDatabase.cpp:1328-1345, pcsx2-qt/Settings/GameSummaryWidget.cpp:322" + + - name: patches.zip + path: pcsx2/resources/patches.zip + standalone_path: resources/patches.zip + required: false + bundled: true + description: "Game patch archive" + note: >- + Per-game pnach entries matched on serial and disc CRC. The patches and + cheats folders take precedence over the archive. Fetched from the + pcsx2_patches releases at build time for the desktop builds and committed + for Android and iOS. + source_ref: "pcsx2/Patch.cpp:118, pcsx2/Patch.cpp:290-318, pcsx2/Patch.cpp:425-435, .github/workflows/linux_build_qt.yml:33" + + - name: game_controller_db.txt + path: pcsx2/resources/game_controller_db.txt + standalone_path: resources/game_controller_db.txt + required: false + bundled: true + description: "SDL controller mapping database" + note: >- + A copy in the data root wins, then the resources folder, and the path is + handed to SDL as a hint. SDL falls back to its built-in mappings when + neither exists. + source_ref: "pcsx2/Input/SDLInputSource.cpp:24, pcsx2/Input/SDLInputSource.cpp:614-627" + + - name: Roboto-Regular.ttf + path: pcsx2/resources/fonts/Roboto-Regular.ttf + standalone_path: resources/fonts/Roboto-Regular.ttf + required: true + bundled: true + description: "Interface font" + note: >- + Seeded as the standard font when no language layer supplied one, which is + always the case on Android. LoadFontData fails without it and the GS device + is torn down. + source_ref: "pcsx2/ImGui/ImGuiManager.cpp:501-523, pcsx2/ImGui/ImGuiManager.cpp:155-160, pcsx2/GS/GS.cpp:160-179" + + - name: RobotoMono-Medium.ttf + path: pcsx2/resources/fonts/RobotoMono-Medium.ttf + standalone_path: resources/fonts/RobotoMono-Medium.ttf + required: true + bundled: true + description: "Fixed-width interface font" + note: >- + Read for the fixed-width font. LoadFontData fails without it. Also the + initial path the fullscreen interface offers when picking a custom OSD font. + source_ref: "pcsx2/ImGui/ImGuiManager.cpp:544-552, pcsx2/ImGui/FullscreenUI_Settings.cpp:3417" + + - name: fa-solid-900.ttf + path: pcsx2/resources/fonts/fa-solid-900.ttf + standalone_path: resources/fonts/fa-solid-900.ttf + required: true + bundled: true + description: "Font Awesome icon font" + note: "Read for the interface icon glyphs. LoadFontData fails without it." + source_ref: "pcsx2/ImGui/ImGuiManager.cpp:554-562" + + - name: promptfont.otf + path: pcsx2/resources/fonts/promptfont.otf + standalone_path: resources/fonts/promptfont.otf + required: true + bundled: true + description: "Controller prompt font" + note: "Read for the controller button glyphs. LoadFontData fails without it." + source_ref: "pcsx2/ImGui/ImGuiManager.cpp:564-572" + + - name: Twemoji.Mozilla.ttf + path: pcsx2/resources/fonts/Twemoji.Mozilla.ttf + standalone_path: resources/fonts/Twemoji.Mozilla.ttf + required: false + bundled: true + description: "Emoji font" + note: >- + First entry of the emoji script table, resolved under UserResources then the + resources folder and downloaded into UserResources/fonts when neither holds + it. + source_ref: "pcsx2-qt/Translations.cpp:340-347, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoColorEmoji-Regular.ttf + path: pcsx2/resources/fonts/NotoColorEmoji-Regular.ttf + standalone_path: resources/fonts/NotoColorEmoji-Regular.ttf + required: false + bundled: true + description: "Android emoji font" + note: >- + Committed under the Android asset tree and unpacked with the rest of the + resources folder. Rendered by the Compose interface. + source_ref: "platforms/android/app/src/main/assets/resources/fonts/NotoColorEmoji-Regular.ttf, platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt:507" + + - name: NotoSansJP-Regular.ttf + path: pcsx2/resources/fonts/NotoSansJP-Regular.ttf + standalone_path: resources/fonts/NotoSansJP-Regular.ttf + required: false + description: "Japanese interface font" + note: >- + First entry of the Japanese script table. Resolved under UserResources then + the resources folder, and downloaded into UserResources/fonts when the + interface language needs it and neither holds it. Not shipped. + source_ref: "pcsx2-qt/Translations.cpp:354-360, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansKR-Regular.ttf + path: pcsx2/resources/fonts/NotoSansKR-Regular.ttf + standalone_path: resources/fonts/NotoSansKR-Regular.ttf + required: false + description: "Korean interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:361-367, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansSC-Regular.ttf + path: pcsx2/resources/fonts/NotoSansSC-Regular.ttf + standalone_path: resources/fonts/NotoSansSC-Regular.ttf + required: false + description: "Simplified Chinese interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:320-326, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansTC-Regular.ttf + path: pcsx2/resources/fonts/NotoSansTC-Regular.ttf + standalone_path: resources/fonts/NotoSansTC-Regular.ttf + required: false + description: "Traditional Chinese interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:327-333, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansArabic-Regular.ttf + path: pcsx2/resources/fonts/NotoSansArabic-Regular.ttf + standalone_path: resources/fonts/NotoSansArabic-Regular.ttf + required: false + description: "Arabic interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:314-319, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansHebrew-Regular.ttf + path: pcsx2/resources/fonts/NotoSansHebrew-Regular.ttf + standalone_path: resources/fonts/NotoSansHebrew-Regular.ttf + required: false + description: "Hebrew interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:348-353, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: NotoSansDevanagari-Regular.ttf + path: pcsx2/resources/fonts/NotoSansDevanagari-Regular.ttf + standalone_path: resources/fonts/NotoSansDevanagari-Regular.ttf + required: false + description: "Devanagari interface font" + note: "Same resolution and download path as the Japanese font. Not shipped." + source_ref: "pcsx2-qt/Translations.cpp:334-339, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549" + + - name: tfx.glsl + path: pcsx2/resources/shaders/vulkan/tfx.glsl + standalone_path: resources/shaders/vulkan/tfx.glsl + required: true + bundled: true + description: "Vulkan texture function shader" + note: >- + Compiled at device creation. The Vulkan backend is the only one the Android, + iOS and libretro builds use, and a source that cannot be read fails the + pipeline compile and the device with it. + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2568, pcsx2/GS/Renderers/Common/GSDevice.cpp:422-425" + + - name: convert.glsl + path: pcsx2/resources/shaders/vulkan/convert.glsl + standalone_path: resources/shaders/vulkan/convert.glsl + required: true + bundled: true + description: "Vulkan conversion shader" + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5521-5527, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5877" + + - name: present.glsl + path: pcsx2/resources/shaders/vulkan/present.glsl + standalone_path: resources/shaders/vulkan/present.glsl + required: true + bundled: true + description: "Vulkan presentation shader" + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5706" + + - name: merge.glsl + path: pcsx2/resources/shaders/vulkan/merge.glsl + standalone_path: resources/shaders/vulkan/merge.glsl + required: true + bundled: true + description: "Vulkan merge shader" + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5807" + + - name: interlace.glsl + path: pcsx2/resources/shaders/vulkan/interlace.glsl + standalone_path: resources/shaders/vulkan/interlace.glsl + required: true + bundled: true + description: "Vulkan interlace shader" + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5756" + + - name: shadeboost.glsl + path: pcsx2/resources/shaders/vulkan/shadeboost.glsl + standalone_path: resources/shaders/vulkan/shadeboost.glsl + required: true + bundled: true + description: "Vulkan shade boost shader" + note: >- + Compiled by the post-processing pass, which runs unconditionally in the + device creation chain, so a source that cannot be read fails the device. + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5857, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5911-5917, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2593-2598" + + - name: cas.glsl + path: pcsx2/resources/shaders/vulkan/cas.glsl + standalone_path: resources/shaders/vulkan/cas.glsl + required: false + bundled: true + description: "Vulkan contrast adaptive sharpening shader" + note: >- + Includes ffx_a.h and ffx_cas.h. The only shader whose compile failure is + caught: sharpening is turned off and device creation carries on, because + older Adreno compilers reject the compute pipeline. + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5963, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2606-2612" + + - name: imgui.glsl + path: pcsx2/resources/shaders/vulkan/imgui.glsl + standalone_path: resources/shaders/vulkan/imgui.glsl + required: true + bundled: true + description: "Vulkan interface shader" + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5989" + + - name: fxaa.fx + path: pcsx2/resources/shaders/common/fxaa.fx + standalone_path: resources/shaders/common/fxaa.fx + required: true + bundled: true + description: "FXAA shader, shared by every backend" + note: >- + Compiled by the Vulkan and OpenGL post-processing passes as part of device + creation, so the device fails without it. The Direct3D backends compile it + lazily on first use and only lose the effect. + source_ref: "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5884, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:607, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2805-2813, pcsx2/GS/Renderers/DX11/GSDevice11.cpp:1933-1940" + + - name: ffx_a.h + path: pcsx2/resources/shaders/common/ffx_a.h + standalone_path: resources/shaders/common/ffx_a.h + required: false + bundled: true + description: "FidelityFX helper header" + note: >- + Read as a source file and substituted for the include line of the sharpening + shader before compilation. + source_ref: "pcsx2/GS/Renderers/Common/GSDevice.cpp:1481-1488" + + - name: ffx_cas.h + path: pcsx2/resources/shaders/common/ffx_cas.h + standalone_path: resources/shaders/common/ffx_cas.h + required: false + bundled: true + description: "FidelityFX CAS header" + note: "Substituted the same way as ffx_a.h." + source_ref: "pcsx2/GS/Renderers/Common/GSDevice.cpp:1481-1488" + + - name: tfx_vgs.glsl + path: pcsx2/resources/shaders/opengl/tfx_vgs.glsl + standalone_path: resources/shaders/opengl/tfx_vgs.glsl + required: false + bundled: true + description: "OpenGL texture function vertex and geometry shader" + note: >- + The OpenGL backend is one of three the renderer setting selects, and it is + what an Android device falls back to when Vulkan is not chosen. Its device + creation fails without this source; a Vulkan session is unaffected. + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:749-753, pcsx2/GS/GS.cpp:88-110" + + - name: tfx_fs.glsl + path: pcsx2/resources/shaders/opengl/tfx_fs.glsl + standalone_path: resources/shaders/opengl/tfx_fs.glsl + required: false + bundled: true + description: "OpenGL texture function fragment shader" + note: "Read with tfx_vgs.glsl; the OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:749-753" + + - name: convert.glsl + path: pcsx2/resources/shaders/opengl/convert.glsl + standalone_path: resources/shaders/opengl/convert.glsl + required: false + bundled: true + description: "OpenGL conversion shader" + note: "The OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:441-447" + + - name: present.glsl + path: pcsx2/resources/shaders/opengl/present.glsl + standalone_path: resources/shaders/opengl/present.glsl + required: false + bundled: true + description: "OpenGL presentation shader" + note: "The OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:527-532" + + - name: merge.glsl + path: pcsx2/resources/shaders/opengl/merge.glsl + standalone_path: resources/shaders/opengl/merge.glsl + required: false + bundled: true + description: "OpenGL merge shader" + note: "The OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:563-568" + + - name: interlace.glsl + path: pcsx2/resources/shaders/opengl/interlace.glsl + standalone_path: resources/shaders/opengl/interlace.glsl + required: false + bundled: true + description: "OpenGL interlace shader" + note: "The OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:586-591" + + - name: shadeboost.glsl + path: pcsx2/resources/shaders/opengl/shadeboost.glsl + standalone_path: resources/shaders/opengl/shadeboost.glsl + required: false + bundled: true + description: "OpenGL shade boost shader" + note: >- + Compiled with the FXAA program in the OpenGL device creation chain, so that + device fails without it. + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:607-608, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3060-3066" + + - name: cas.glsl + path: pcsx2/resources/shaders/opengl/cas.glsl + standalone_path: resources/shaders/opengl/cas.glsl + required: false + bundled: true + description: "OpenGL contrast adaptive sharpening shader" + note: >- + A desktop GL compute shader, gated away from GL ES contexts because feeding + it to an ES compiler crashes some drivers. + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3251, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:610-615" + + - name: imgui.glsl + path: pcsx2/resources/shaders/opengl/imgui.glsl + standalone_path: resources/shaders/opengl/imgui.glsl + required: false + bundled: true + description: "OpenGL interface shader" + note: "The OpenGL device fails without it." + source_ref: "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:709-710, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3309-3316" + + - name: tfx.fx + path: pcsx2/resources/shaders/dx11/tfx.fx + standalone_path: resources/shaders/dx11/tfx.fx + required: false + bundled: true + description: "Direct3D texture function shader" + note: >- + Read by the Direct3D 11 and Direct3D 12 backends of the Windows on arm64 + build, whose devices fail without it. The Android asset step drops the dx11 + folder because the mobile backends never compile it. + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:215-218, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:967, platforms/android/app/build.gradle.kts:40-47" + + - name: convert.fx + path: pcsx2/resources/shaders/dx11/convert.fx + standalone_path: resources/shaders/dx11/convert.fx + required: false + bundled: true + description: "Direct3D conversion shader" + note: "The Direct3D devices fail without it." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:229-231, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2827" + + - name: present.fx + path: pcsx2/resources/shaders/dx11/present.fx + standalone_path: resources/shaders/dx11/present.fx + required: false + bundled: true + description: "Direct3D presentation shader" + note: "The Direct3D devices fail without it." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:265, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2971" + + - name: merge.fx + path: pcsx2/resources/shaders/dx11/merge.fx + standalone_path: resources/shaders/dx11/merge.fx + required: false + bundled: true + description: "Direct3D merge shader" + note: "The Direct3D devices fail without it." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:317, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3050" + + - name: interlace.fx + path: pcsx2/resources/shaders/dx11/interlace.fx + standalone_path: resources/shaders/dx11/interlace.fx + required: false + bundled: true + description: "Direct3D interlace shader" + note: "The Direct3D devices fail without it." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:352, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3014" + + - name: shadeboost.fx + path: pcsx2/resources/shaders/dx11/shadeboost.fx + standalone_path: resources/shaders/dx11/shadeboost.fx + required: false + bundled: true + description: "Direct3D shade boost shader" + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:372, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3120" + + - name: cas.hlsl + path: pcsx2/resources/shaders/dx11/cas.hlsl + standalone_path: resources/shaders/dx11/cas.hlsl + required: false + bundled: true + description: "Direct3D contrast adaptive sharpening shader" + note: "Includes ffx_a.h and ffx_cas.h." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:2259, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2299" + + - name: imgui.fx + path: pcsx2/resources/shaders/dx11/imgui.fx + standalone_path: resources/shaders/dx11/imgui.fx + required: false + bundled: true + description: "Direct3D interface shader" + note: "The Direct3D devices fail without it." + source_ref: "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:2309-2313, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2327" + + - name: message.wav + path: pcsx2/resources/sounds/achievements/message.wav + standalone_path: resources/sounds/achievements/message.wav + required: false + bundled: true + description: "Achievement notification sound" + note: >- + Played from the resources folder when the achievement information sound is + enabled and no custom sound is set. + source_ref: "pcsx2/Achievements.cpp:68, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1525" + + - name: unlock.wav + path: pcsx2/resources/sounds/achievements/unlock.wav + standalone_path: resources/sounds/achievements/unlock.wav + required: false + bundled: true + description: "Achievement unlock sound" + source_ref: "pcsx2/Achievements.cpp:69, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1578" + + - name: lbsubmit.wav + path: pcsx2/resources/sounds/achievements/lbsubmit.wav + standalone_path: resources/sounds/achievements/lbsubmit.wav + required: false + bundled: true + description: "Leaderboard submission sound" + source_ref: "pcsx2/Achievements.cpp:70, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1672" + + - name: placeholder.png + path: pcsx2/resources/fullscreenui/placeholder.png + standalone_path: resources/fullscreenui/placeholder.png + required: false + bundled: true + description: "Fullscreen interface placeholder texture" + note: >- + Named as the placeholder texture when the fullscreen interface initialises. + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:335" + + - name: no-save.png + path: pcsx2/resources/fullscreenui/no-save.png + standalone_path: resources/fullscreenui/no-save.png + required: false + bundled: true + description: "Empty save slot texture" + source_ref: "pcsx2/ImGui/ImGuiOverlays.cpp:1664" + + - name: media-cdrom.svg + path: pcsx2/resources/fullscreenui/media-cdrom.svg + standalone_path: resources/fullscreenui/media-cdrom.svg + required: false + bundled: true + description: "Game list menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1367, pcsx2/ImGui/FullscreenUI.cpp:3483" + + - name: start-game.svg + path: pcsx2/resources/fullscreenui/start-game.svg + standalone_path: resources/fullscreenui/start-game.svg + required: false + bundled: true + description: "Start game menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1373" + + - name: applications-system.svg + path: pcsx2/resources/fullscreenui/applications-system.svg + standalone_path: resources/fullscreenui/applications-system.svg + required: false + bundled: true + description: "Settings menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1380, pcsx2/ImGui/FullscreenUI.cpp:3478" + + - name: exit.svg + path: pcsx2/resources/fullscreenui/exit.svg + standalone_path: resources/fullscreenui/exit.svg + required: false + bundled: true + description: "Exit menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1386, pcsx2/ImGui/FullscreenUI.cpp:1519" + + - name: start-file.svg + path: pcsx2/resources/fullscreenui/start-file.svg + standalone_path: resources/fullscreenui/start-file.svg + required: false + bundled: true + description: "Start file menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1443" + + - name: drive-cdrom.svg + path: pcsx2/resources/fullscreenui/drive-cdrom.svg + standalone_path: resources/fullscreenui/drive-cdrom.svg + required: false + bundled: true + description: "Start disc menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1449" + + - name: start-bios.svg + path: pcsx2/resources/fullscreenui/start-bios.svg + standalone_path: resources/fullscreenui/start-bios.svg + required: false + bundled: true + description: "Start BIOS menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1455" + + - name: back-icon.svg + path: pcsx2/resources/fullscreenui/back-icon.svg + standalone_path: resources/fullscreenui/back-icon.svg + required: false + bundled: true + description: "Back menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1461, pcsx2/ImGui/FullscreenUI.cpp:1511" + + - name: desktop-mode.svg + path: pcsx2/resources/fullscreenui/desktop-mode.svg + standalone_path: resources/fullscreenui/desktop-mode.svg + required: false + bundled: true + description: "Desktop mode menu icon" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1527" + + - name: AppBanner.svg + path: pcsx2/resources/icons/AppBanner.svg + standalone_path: resources/icons/AppBanner.svg + required: false + bundled: true + description: "Application banner" + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:762" + + - name: AppIconLarge.png + path: pcsx2/resources/icons/AppIconLarge.png + standalone_path: resources/icons/AppIconLarge.png + required: false + bundled: true + description: "Application icon" + note: >- + Drawn by the fullscreen interface, shown by the Qt setup wizard, and copied + out when a desktop entry is written. + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:1291, pcsx2-qt/SetupWizardDialog.cpp:165, pcsx2-qt/QtUtils.cpp:843" + + - name: AppIconLarge.ico + path: pcsx2/resources/icons/AppIconLarge.ico + standalone_path: resources/icons/AppIconLarge.ico + required: false + bundled: true + description: "Windows application icon" + note: "Read next to the program when a shortcut is written." + source_ref: "pcsx2-qt/QtUtils.cpp:755" + + - name: ra-icon.svg + path: pcsx2/resources/icons/ra-icon.svg + standalone_path: resources/icons/ra-icon.svg + required: false + bundled: true + description: "RetroAchievements icon" + source_ref: "pcsx2/ImGui/FullscreenUI_Settings.cpp:4388, pcsx2-qt/SetupWizardDialog.cpp:428, pcsx2-qt/Settings/AchievementLoginDialog.cpp:21" + + - name: "star-.svg" + path: pcsx2/resources/icons/ + standalone_path: resources/icons/ + required: false + bundled: true + description: "Compatibility rating icons" + note: >- + Six files, star-0.svg through star-5.svg, named from the compatibility + rating of the entry. + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:767, pcsx2-qt/GameList/GameListModel.cpp:529" + + - name: ".svg" + path: pcsx2/resources/icons/flags/ + standalone_path: resources/icons/flags/ + required: false + bundled: true + description: "Region flag icons" + note: >- + Forty-eight files, named from the region of the entry through + RegionToFlagFilename. + source_ref: "pcsx2/ImGui/FullscreenUI.cpp:2842" + + - name: cover-placeholder.png + path: pcsx2/resources/cover-placeholder.png + standalone_path: resources/cover-placeholder.png + required: false + bundled: true + description: "Game list cover placeholder" + source_ref: "pcsx2-qt/GameList/GameListModel.cpp:531" diff --git a/emulators/ax360e.yml b/emulators/ax360e.yml new file mode 100644 index 00000000..d48a22ee --- /dev/null +++ b/emulators/ax360e.yml @@ -0,0 +1,183 @@ +emulator: aX360e +type: standalone +core_classification: community_fork +source: "https://github.com/aenu1/ax360e" +source_branch: main +upstream: "https://github.com/xenia-canary/xenia-canary" +profiled_date: "2026-08-11" +source_commit: "a451abd20ae0660bc53bcf90473ac0e6c6c0d86d" +upstream_commit: "dc561e4df578c903087f9bdf56ff61d9ef9f2a93" +core_version: "1.18" +display_name: "Microsoft - Xbox 360 (aX360e)" +cores: + - ax360e +systems: + - microsoft-xbox-360 +mode: standalone + +notes: | + Xbox 360 emulator for Android, distributed on Google Play as aenu.ax360e and + aenu.ax360e.free. Xenia Canary is vendored whole under + app/src/main/cpp/xenia-canary at canary_experimental dc561e4d, and a JNI layer + replaces the desktop front end: its own windowed app and window, AAudio and + OpenSLES audio systems, an Android input driver, and disc image, disc archive, + STFS and XEX devices backed by the Storage Access Framework. + ref: ax360e/app/src/main/cpp/version.h:4-5, + ax360e/app/src/main/cpp/CMakeLists.txt:39-74, + ax360e/app/src/main/cpp/ax360e_emu.cpp:615 + + The version is read from the commit subjects, which carry it: 1.18 is the head + of main, 1.17 the drop before it. The repository has no tags, and the only + gradle file committed is app/build.gradle.bak, which still declares versionName + 0.14 and is renamed and completed with the signing block at build time. + ref: ax360e/README.md, ax360e/app/build.gradle.bak:13-14 + + No Xbox 360 system file is loaded. The kernel, XAM and XBDM are HLE modules + registered at startup, and every key the emulator needs is a constant in the + source: the XEX1 retail, XEX2 retail and XEX2 devkit keys tried in turn when an + image is read, the 0x19 key pair the profile blob is encrypted with, and the + key vault map XeKeysGetKey answers from. There is no NAND, flash or keyvault + path. + ref: ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:316-318, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:54-62, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:953-963, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/util/crypto_utils.cc:20-31, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xboxkrnl/xboxkrnl_crypt.cc:164-168 + + The storage root is the external files directory of the package and is passed + as a launch argument beside the config path and the log path. Content, cache, + patches and plugins hang off it, the global configuration is + xenia-canary.config.toml, and per title overrides live in + custom_config/.config.toml. The custom driver directory sits in + internal storage instead, because the external filesystem cannot carry an + executable mapping. + ref: ax360e/app/src/main/java/aenu/ax360e/Application.java:14-53, + ax360e/app/src/main/java/aenu/ax360e/EmulatorActivity.java:67-73, + ax360e/app/src/main/cpp/ax360e_emu.cpp:273-316 + + ES-DE starts the emulator with the aenu.intent.action.AX360E action and a + game_uri extra. The native side dispatches on the name the descriptor resolves + to: .xex, .iso and .zar each go to their own loader, and anything else is taken + for an STFS container and launched beside a sibling directory named after the + file with .data appended. + ref: ax360e/app/src/main/AndroidManifest.xml:57-59, + ax360e/app/src/main/cpp/ax360e_emu.cpp:554-575 + + A default profile ships with the application. Its Account blob is extracted + from the assets on first run under XUID E0300000A360E000, and the shipped + configuration logs that XUID into slot 0. Further profiles are created by the + emulator itself, which writes the blob it encrypts. + ref: ax360e/app/src/main/java/aenu/ax360e/Application.java:30-34, + ax360e/app/src/main/java/aenu/ax360e/Application.java:92-96, + ax360e/app/src/main/assets/config/default_config.toml:314, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:502-558 + + 477 game patches ship inside the APK. The patch database reads the patches + directory only, so a bundled patch reaches the emulator once the user opens the + patch dialog for that title and presses Apply, which writes the asset out under + the same name. + ref: ax360e/app/src/main/assets/game-patches, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-56, + ax360e/app/src/main/java/aenu/ax360e/Emulator.java:121-151, + ax360e/app/src/main/java/aenu/ax360e/MainActivity.java:503-512 + +files: + - name: ".zip" + required: false + config_key: "Vulkan|vulkan_lib_path" + unsourceable: "third-party Vulkan driver built for one GPU family, not an emulator artefact" + description: "Replacement Vulkan driver package" + note: >- + Imported through a picker that keeps only names ending in .zip. The archive + is read whole, meta.json names the library to keep, and a single .so is + taken instead when no meta.json is present; the .so files and meta.json are + unpacked into a directory named after the archive, in internal storage. The + configured path is read before the instance is created and opened through + adrenotools when it exists, otherwise the system libvulkan.so is used. The + setting is greyed out on devices without /dev/kgsl-3d0. + source_ref: "ax360e/app/src/main/java/aenu/ax360e/EmulatorSettings.java:709-713, ax360e/app/src/main/java/aenu/ax360e/Utils.java:150-215, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:34, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:71-91, ax360e/app/src/main/java/aenu/emulator/Emulator.java:116-122" + + - name: ".ttf" + required: false + config_key: "UI|custom_font_path" + unsourceable: "any TrueType face the user picks, with no name or version the code expects" + description: "Replacement face for the overlay text" + note: >- + Loaded first when the configured path exists, over the Basic Latin, Latin + Supplement, Extended Latin, Greek, Cyrillic, punctuation, superscript, + letterlike and number form ranges. A face that fails to build is cleared and + the embedded ProggyTiny is used instead, so the absence is covered. + source_ref: "ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:42-44, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:340-374, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:507-514" + + - name: " - .patch.toml" + required: false + bundled: true + description: "Memory patch set for one title" + note: >- + Read from the patches directory under the storage root, keeping names that + open with eight hexadecimal digits and close with .patch.toml. The title id + and title name fields and a hash node are mandatory, the file is dropped + without them, and each entry of the patch array is applied only when its + is_enabled flag is set and the module hash matches. Patching is on by + default. + source_ref: "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:17-18, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-98, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.h:121-122, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patcher.cc:22-35, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:308" + + - name: plugins.toml + required: false + config_key: "General|allow_plugins" + unsourceable: "per-title manifest written by whoever authors the mod, with no distributed form" + description: "Plugin manifest for one title" + note: >- + Read from plugins/<TITLE_ID>/ under the storage root, where the directory + name is eight hexadecimal digits. Each entry of the plugin array needs a + hash node, and an entry without one is skipped. Plugin loading is off by + default, so nothing under plugins is scanned until it is turned on. + source_ref: "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:16-21, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:40-127, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:320-321" + + - name: "<plugin>.xex" + required: false + unsourceable: "homebrew module built for one title, distributed with the mod it belongs to" + description: "Plugin module named by a plugin manifest" + note: >- + 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. A directory that cannot be mounted is a fatal error. + source_ref: "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:175-257, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:1996-1999" + + - name: Account + required: false + bundled: true + load_from: content_dir + path: "content/<XUID>/FFFE07D1/00010000/<XUID>/Account" + description: "Encrypted profile account blob" + note: >- + Opened from the mounted profile when a XUID is logged in, and decrypted with + the 0x19 key, retail first then devkit, against the HMAC the first sixteen + bytes carry. The application extracts the one it ships for XUID + E0300000A360E000 on first run, and the emulator writes its own when a + profile is created. + source_ref: "ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:188-230, ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:40-68, ax360e/app/src/main/java/aenu/ax360e/Application.java:30-34, ax360e/app/src/main/java/aenu/ax360e/Application.java:92-96" + +exclusion_note: > + Six file loads present in the vendored tree are not reached by this build and + are not listed. The notification sound named by notification_sound_path is + played inside a XE_PLATFORM_WIN32 block, and the setting is dropped from the + generated preference screen. tahoma.ttf and msgothic.ttc are read by the + Windows font paths only. The fontconfig CJK match is compiled out by + XE_PLATFORM_LINUX && !(XE_PLATFORM_ANDROID || XE_PLATFORM_AX360E), and + platform.h defines XE_PLATFORM_AX360E for this target. gamecontrollerdb.txt + belongs to the SDL input driver, and xenia-hid-sdl is absent from the link + list. portable.txt is read by xenia_main.cc, which is not compiled, the + application supplying its own windowed app. libSPIRV-Tools-shared.so is loaded + by the standalone shader compiler and needs VULKAN_SDK in the environment. + librenderdoc.so is opened with RTLD_NOLOAD, which returns a handle only when + the library is already mapped and never reads the file. + ref: ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_guest_notification.cc:49-60, + ax360e/app/src/main/cpp/emulator_ax360e.cpp:356, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:376-407, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:409-493, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/base/platform.h:34-37, + ax360e/app/src/main/cpp/CMakeLists.txt:91-131, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/app/xenia_main.cc:480, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/spirv_tools_context.cc:28-37, + ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/renderdoc_api.cc:35-41 diff --git a/emulators/beebem.yml b/emulators/beebem.yml new file mode 100644 index 00000000..8d975478 --- /dev/null +++ b/emulators/beebem.yml @@ -0,0 +1,735 @@ +emulator: beebem +type: standalone +core_classification: other +source: "https://github.com/stardot/beebem-windows" +upstream: "https://github.com/stardot/beebem-windows" +profiled_date: "2026-08-11" +source_commit: "a982ba6a74af09e801c296b29d514dbd4da09b94" +core_version: "4.19" +display_name: "Acorn - BBC Micro (BeebEm)" +cores: [beebem] +systems: + - bbc-micro-b + - bbc-micro-bplus + - bbc-master-128 + - bbc-master-et + +notes: | + BBC Micro and Master Series emulator for Windows. Started by Dave Gilbert on + Unix in 1994, ported to Windows. Five machine models: Model B, Model B with + Integra-B board, Model B Plus, Master 128, Master ET. + ref: Src/Model.h:24-32 + + Two file roots. GetUserDataPath() defaults to <Documents>\BeebEm and falls back + to <app>\UserData; it holds BeebFile/ and the .cfg and .kmap files. GetAppPath() + is the program directory and holds Teletext.fnt and the sound samples. + ref: Src/BeebWin.cpp:5813-5851 + + ROM slots are read from Roms.cfg: one OS ROM plus 16 paged banks per model, + each line naming a file under BeebFile/, or EMPTY, or RAM. Paths in the profile + are the shipped default configuration, which matches the DefaultRoms table + compiled into the binary. + ref: Src/RomConfigFile.cpp:39-141 + ref: Src/BeebMem.cpp:1277-1356 + + A missing Roms.cfg is not covered by DefaultRoms: Load() returns at the open + failure, before the backfill loop, and RomConfigFile has no constructor and no + Reset() caller, so every slot stays an empty string and no ROM loads. + ref: Src/RomConfigFile.cpp:158-219 + + Roms_Torch.cfg is the alternate configuration for the Torch Z80 co-processor, + selected with `BeebEm.exe -Roms Roms_Torch.cfg` by the shipped BeebEmTorch.vbs. + It adds the MCP host-tube ROMs and swaps the Integra-B slots. + ref: UserData/Roms_Torch.cfg, BeebEmTorch.vbs:3 + + ReadRom derives a .map path from every ROM file name and hands it to the + debugger symbol loader. Only BBC/OS12.map ships. + ref: Src/BeebMem.cpp:1252-1254, 1311-1313 + + No hash is verified anywhere. The code checks sizes only, per entry below. + Hashes here identify the dumps the emulator ships. + + BeebFile/ also carries an application ROM library (word processors, drawing + packages, language ROMs) and DiscIms/ carries the disc images supplied with the + Master 512, ARM and Z80 co-processors. No code path names them; they load only + through the file browser in Edit ROM Configuration, the same way a disc image + does. + ref: Src/RomConfigDialog.cpp:179-215 + + Alternate dumps ship under their own names for slots already listed here: + BeebFile/M128-MOS3.5/ holds the MOS 3.50 set for the M128 slots, and + BeebFile/Z80-1.20.rom is the Acorn v1.20 Z80 ROM. Both are used by renaming + them onto the listed paths, so they are variants of those entries. + ref: Help/roms.html, Help/z80copro.html + +exclusion_note: > + The TMS5220 speech generator is compiled out. Speech.cpp:57-1621 wraps the whole + implementation, including the SpeechInit() that reads Phroms.cfg and the PHROM + files, in #if ENABLE_SPEECH, and all four build configurations in + Src/BeebEm.vcxproj define ENABLE_SPEECH=0. Every call site is guarded the same + way. UserData/Phroms.cfg and the seven files in UserData/Phroms/ (PHROMA, + PHROMUS, VM61002-5.bin, VM71003A.bin) ship but no released binary opens them. + ref: Src/BeebEm.vcxproj:98,117,134,157 - Src/Speech.cpp:57,1621 - Help/speech.html + +files: + + # -- BBC Model B -- + + - name: OS12.rom + path: BeebFile/BBC/OS12.rom + description: "BBC Micro OS 1.20" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 0a59a5ba15fe8557b5f7fee32bbd393a + sha1: 0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d + validation: [size] + note: "OS ROM slot. Read into 0xc000; an error is reported unless 16384 bytes are read." + source_ref: "Src/BeebMem.cpp:1291-1308, Src/RomConfigFile.cpp:43" + + - name: BASIC2.rom + path: BeebFile/BBC/BASIC2.rom + description: "BBC BASIC II" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 2cc67be4624df4dc66617742571a8e3d + sha1: 4a7393f3a45ea309f744441c16723e2ef447a281 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:44, Src/BeebMem.cpp:1322-1356" + + - name: DNFS.rom + path: BeebFile/BBC/DNFS.rom + description: "Acorn DFS 1.20 and NFS 3.34 combined" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 5daed103918277e2065dd7e8d23e57a5 + sha1: 7e3c536baeae84d6498a14e8405319e01ee78232 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:45, Src/BeebMem.cpp:1322-1356" + + - name: OS12.map + path: BeebFile/BBC/OS12.map + description: "Debugger symbol map for OS 1.20" + system: bbc-micro-b + required: false + bundled: true + size: 19711 + md5: c335bb52e811d79fd3cc9b4807f98cfd + sha1: 3fb4f63479a7bedec968ec47627b17752d5889e1 + note: "Path derived from the ROM file name by ReplaceFileExt. Absence is silent." + source_ref: "Src/BeebMem.cpp:1311-1313" + + # -- BBC Model B with Integra-B board -- + + - name: OS12.rom + path: BeebFile/BBCINT/OS12.rom + description: "BBC Micro OS 1.20, Integra-B configuration" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 0a59a5ba15fe8557b5f7fee32bbd393a + sha1: 0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d + validation: [size] + note: "OS ROM slot for Model::IntegraB. Same dump as BeebFile/BBC/OS12.rom." + source_ref: "Src/RomConfigFile.cpp:63, Src/BeebMem.cpp:1291-1308" + + - name: IBOS126.rom + path: BeebFile/BBCINT/IBOS126.rom + description: "Integra-B IBOS 1.26" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 1b57c2ba920a00d5b4ef89be68aedc43 + sha1: d0153203802c8ec3e3270443be809e23d574280b + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:64" + + - name: BASIC2.rom + path: BeebFile/BBCINT/BASIC2.rom + description: "BBC BASIC II" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 2cc67be4624df4dc66617742571a8e3d + sha1: 4a7393f3a45ea309f744441c16723e2ef447a281 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:65" + + - name: DNFS.rom + path: BeebFile/BBCINT/DNFS.rom + description: "Acorn DFS 1.20 and NFS 3.34 combined" + system: bbc-micro-b + required: true + bundled: true + size: 16384 + md5: 5daed103918277e2065dd7e8d23e57a5 + sha1: 7e3c536baeae84d6498a14e8405319e01ee78232 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:66" + + - name: IBOS.rom + path: BeebFile/BBCINT/IBOS.rom + description: "Integra-B IBOS 1.20" + system: bbc-micro-b + required: false + bundled: true + size: 16384 + md5: 8882e50d5d98851a04f541c71bd25f31 + sha1: 0f5b2a5bee23808b34eab2f027f7c1e77395c782 + max_size: 131072 + note: "Integra-B slot under the Torch configuration." + source_ref: "UserData/Roms_Torch.cfg:24" + + - name: WDFS.rom + path: BeebFile/BBCINT/WDFS.rom + description: "Watford DFS 1.44" + system: bbc-micro-b + required: false + bundled: true + size: 16384 + md5: 1d250b0242e447e9106e8bfd1f27ea84 + sha1: 387d2468c6e1360f5b531784ce95d5f71a50c2b5 + max_size: 131072 + note: "Filing system slot under the Torch configuration." + source_ref: "UserData/Roms_Torch.cfg:26" + + - name: MCP120-CBL.rom + path: BeebFile/BBC/MCP120-CBL.rom + description: "Torch MCP 1.20 host tube ROM, 8271 FDC" + system: bbc-micro-b + required: false + bundled: true + size: 16384 + md5: 42f92cb02602e903d7bdabb33bf30966 + sha1: 0edb0db70c9571540793e321f527e68188b6e4cd + max_size: 131072 + note: "Host tube support for the Torch Z80 co-processor on a Model B." + source_ref: "UserData/Roms_Torch.cfg:5, Help/z80torch.html" + + # -- BBC Model B Plus -- + + - name: B+MOS.rom + path: BeebFile/BPLUS/B+MOS.rom + description: "BBC Model B Plus MOS 2.00" + system: bbc-micro-bplus + required: true + bundled: true + size: 16384 + md5: 978370cc7ab8589a137ada34388a6e32 + sha1: d9426dd7454ca199cdef9435daa332cdf405c965 + validation: [size] + note: "OS ROM slot for Model::BPlus." + source_ref: "Src/RomConfigFile.cpp:83, Src/BeebMem.cpp:1291-1308" + + - name: BASIC2.rom + path: BeebFile/BPLUS/BASIC2.rom + description: "BBC BASIC II" + system: bbc-micro-bplus + required: true + bundled: true + size: 16384 + md5: 2cc67be4624df4dc66617742571a8e3d + sha1: 4a7393f3a45ea309f744441c16723e2ef447a281 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:84" + + - name: DFS-2.26.rom + path: BeebFile/BPLUS/DFS-2.26.rom + description: "Acorn 1770 DFS 2.26" + system: bbc-micro-bplus + required: true + bundled: true + size: 16384 + md5: f083f49d6fe66344c650d7e74249cb96 + sha1: cf2ebc422a8d24ec6f1a0320520c38a0e704109a + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:85" + + - name: ADFS-1.30.rom + path: BeebFile/BPLUS/ADFS-1.30.rom + description: "Acorn ADFS 1.30" + system: bbc-micro-bplus + required: false + bundled: true + size: 16384 + md5: 831ee90ac5d49ba5507252faf0c12536 + sha1: 301fd05c475a629c4bec70510d4507256a5b00d8 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:86" + + - name: WDFS.rom + path: BeebFile/BPLUS/WDFS.rom + description: "Watford DFS 1.44" + system: bbc-micro-bplus + required: false + bundled: true + size: 16384 + md5: 1d250b0242e447e9106e8bfd1f27ea84 + sha1: 387d2468c6e1360f5b531784ce95d5f71a50c2b5 + max_size: 131072 + note: > + Named as a Model B Plus essential ROM by the emulator help, which predates + the current default configuration: the DefaultRoms table and the shipped + Roms.cfg fill the filing system slots with DFS-2.26.rom and ADFS-1.30.rom. + source_ref: "Help/roms.html, Src/RomConfigFile.cpp:83-99" + + # -- BBC Master 128 -- + + - name: MOS.rom + path: BeebFile/M128/MOS.rom + description: "BBC Master 128 MOS 3.20" + system: bbc-master-128 + required: true + bundled: true + size: 16384 + md5: 9087f772447038a00178488b3591347b + sha1: 04d5876999f93fc61a18f172b1fbb3b75db733ac + validation: [size] + note: "OS ROM slot for Model::Master128." + source_ref: "Src/RomConfigFile.cpp:103, Src/BeebMem.cpp:1291-1308" + + - name: Terminal.rom + path: BeebFile/M128/Terminal.rom + description: "Master 128 Terminal emulator ROM" + system: bbc-master-128 + required: true + bundled: true + size: 16384 + md5: 7e053353b78b4631c274280931d96f02 + sha1: d990f41a3a0605127083a3cf7a3a676dd30423ef + max_size: 131072 + note: "A different dump from the Master ET Terminal.rom of the same name." + source_ref: "Src/RomConfigFile.cpp:104" + + - name: BASIC4.rom + path: BeebFile/M128/BASIC4.rom + description: "BBC BASIC IV" + system: bbc-master-128 + required: true + bundled: true + size: 16384 + md5: 63a6f43cbf491533cb03ceca2d2728d4 + sha1: c45fd3c0abdcd32b78d2288addd2a777b19e9a1d + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:107" + + - name: DFS.rom + path: BeebFile/M128/DFS.rom + description: "Master 128 DFS 2.24" + system: bbc-master-128 + required: true + bundled: true + size: 16384 + md5: 865a0f7a5d6f10f48798801bf514d761 + sha1: cff80460954b3b9f75c83bd6a301c45d24d118a6 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:110" + + - name: ADFS.rom + path: BeebFile/M128/ADFS.rom + description: "Master 128 ADFS 2.03" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: 10f08b255d6a6e3e888631946b628f1a + sha1: 7557e99be10d81c0395df2dc6c2f8e2f95896c29 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:106" + + - name: View.rom + path: BeebFile/M128/View.rom + description: "Acorn View word processor" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: 178d09285727d596f8863f94a2fc8dad + sha1: 14820174e8ea802f1ae95186285a4592fd519699 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:105" + + - name: Edit.rom + path: BeebFile/M128/Edit.rom + description: "Acorn Edit text editor" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: cb3d762eaab6130d1360e1ac575589de + sha1: 96d209441f4cabacf3d4e8e9da68cce918ea923e + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:108" + + - name: ViewSheet.rom + path: BeebFile/M128/ViewSheet.rom + description: "Acorn ViewSheet spreadsheet" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: 7d5a80a8ce929d0a0f6ca8626cb9f436 + sha1: b7e85a55f517959912422b02248a03a4d32f6998 + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:109" + + - name: ANFS-4.25-2201351.rom + path: BeebFile/M128/ANFS-4.25-2201351.rom + description: "Acorn Advanced NFS 4.25" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: 306cb8ff6622dbfc79dc487ac4e407e1 + sha1: 14f75d36ffe9af14aaac42df55b4fe3729ba75cf + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:111" + + - name: MCP122-ABM.rom + path: BeebFile/M128/MCP122-ABM.rom + description: "Torch MCP 1.22 host tube ROM, Master" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: bf3d2b0a61ba36bd08d02f30e632e5ce + sha1: 35843ace281494ab40463a69a263244d0cb0ecd6 + max_size: 131072 + note: "Host tube support for the Torch Z80 co-processor on a Master." + source_ref: "UserData/Roms_Torch.cfg:79, Help/z80torch.html" + + # -- BBC Master ET -- + + - name: MOS400.rom + path: BeebFile/Master ET/MOS400.rom + description: "BBC Master ET MOS 4.00" + system: bbc-master-et + required: true + bundled: true + size: 16384 + md5: 4d4afbf220abaa702026f42f98eb5807 + sha1: c9483ef3ebd66930e635674a3776d171785ae959 + validation: [size] + note: "OS ROM slot for Model::MasterET." + source_ref: "Src/RomConfigFile.cpp:123, Src/BeebMem.cpp:1291-1308" + + - name: Terminal.rom + path: BeebFile/Master ET/Terminal.rom + description: "Master ET Terminal emulator ROM" + system: bbc-master-et + required: true + bundled: true + size: 16384 + md5: 456cb9035fd3d6c9d4d98adcd65882d8 + sha1: 0b4425149ca93dddf8d03da3767635dc3f1eecb8 + max_size: 131072 + note: "A different dump from the Master 128 Terminal.rom of the same name." + source_ref: "Src/RomConfigFile.cpp:124" + + - name: ANFS425.rom + path: BeebFile/Master ET/ANFS425.rom + description: "Acorn Advanced NFS 4.25" + system: bbc-master-et + required: true + bundled: true + size: 16384 + md5: 306cb8ff6622dbfc79dc487ac4e407e1 + sha1: 14f75d36ffe9af14aaac42df55b4fe3729ba75cf + max_size: 131072 + note: "Filing system of the Econet terminal, which has no disc filing system." + source_ref: "Src/RomConfigFile.cpp:125" + + - name: BASIC4.rom + path: BeebFile/Master ET/BASIC4.rom + description: "BBC BASIC IV" + system: bbc-master-et + required: true + bundled: true + size: 16384 + md5: 63a6f43cbf491533cb03ceca2d2728d4 + sha1: c45fd3c0abdcd32b78d2288addd2a777b19e9a1d + max_size: 131072 + source_ref: "Src/RomConfigFile.cpp:126" + + # -- Second processor ROMs -- + + - name: 6502Tube.rom + path: BeebFile/6502Tube.rom + description: "Acorn 6502 second processor Tube OS 1.10" + system: bbc-micro-b + required: false + bundled: true + size: 2048 + md5: cd6ba85e22adec70b6d863de4c053db7 + sha1: 05980c296e1a7800c4aa21d6bed16323b6d859d5 + validation: [size] + note: > + Copied into tube RAM at 0xf800 on every 65C02 reset. An error is reported + unless 2048 bytes are read. + source_ref: "Src/Tube.cpp:1534-1559" + + - name: Z80.rom + path: BeebFile/Z80.rom + description: "Acorn Z80 second processor ROM 1.21" + system: bbc-micro-b + required: false + bundled: true + size: 4096 + md5: c4c72ceb73300253dc69c865af32f5ac + sha1: d05de861922fed73041cc8ac2666886d95bae15b + validation: [size] + note: > + Loaded for TubeDevice::AcornZ80. An error is reported unless 4096 bytes are + read. Jonathan Harston's v1.21; the Acorn v1.20 ships as Z80-1.20.rom and is + used by renaming it onto this path. + source_ref: "Src/Z80Support.cpp:243-267, Help/z80copro.html" + + - name: CCPN102.rom + path: BeebFile/CCPN102.rom + description: "Torch Z80 CCPN 1.02 second processor ROM" + system: bbc-micro-b + required: false + bundled: true + size: 8192 + md5: f786d0647f9732fa065695d569d261ab + sha1: e6ee738e5f2f8556002b79d18caa8ef21f14e08d + size_options: [2048, 4096, 8192] + note: > + Loaded for TubeDevice::TorchZ80. Up to 8192 bytes are read and a short image + is mirrored to fill the 8 KB window: a 2 KB image is repeated four times, a + 4 KB image twice. No size is rejected. + source_ref: "Src/Z80Support.cpp:268-299" + + - name: BIOS.rom + path: BeebFile/BIOS.rom + description: "Master 512 80186 co-processor BIOS" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: de72efe184f74f1cb98f92b1fbf532bb + sha1: eb2a043d139ae0f3d512b4f1afa32286510c886c + validation: [size] + note: > + Loaded at 0xf0000 and mirrored three times to fill the top of the 1 MB space. + An error is reported unless 0x4000 bytes are read. + source_ref: "Src/Master512CoPro.cpp:3768-3797" + + - name: ARMeval_100.rom + path: BeebFile/ARMeval_100.rom + description: "Acorn ARM Evaluation System ROM 1.00" + system: bbc-master-128 + required: false + bundled: true + size: 16384 + md5: 751f615ccbefa312915d1be8aa5617f5 + sha1: ba33eaf1a23cfef6fc1b88aa516ca2b3693e69d9 + validation: [size] + note: > + Rejected as InvalidROM unless the file is exactly ROM_SIZE, which Arm.h + defines as 0x4000. The dialog text at BeebWin.cpp:1043 says 4096 bytes and + does not match the constant it reports on. + source_ref: "Src/Arm.cpp:100-129, Src/Arm.h:254, Src/BeebWin.cpp:1017-1047" + + - name: Sprow.rom + path: BeebFile/Sprow.rom + description: "Sprow ARM7TDMI co-processor system software 0.40" + system: bbc-master-128 + required: false + bundled: true + size: 524288 + md5: 4da45778c15098755294b8b78e32839b + sha1: babfb5bdb8265cf3ac7feff254146cb2d2773da1 + validation: [size] + note: > + 512 KB on-board flash carrying the system software and BASIC. Rejected as + InvalidROM unless the file is exactly 0x80000 bytes. + source_ref: "Src/SprowCoPro.cpp:51-90, Src/SprowCoPro.h:49, Src/BeebWin.cpp:1058-1088" + + # -- Program directory files -- + + - name: Teletext.fnt + description: "Mode 7 SAA5050 teletext character set" + system: bbc-micro-b + required: true + bundled: true + size: 3456 + md5: 007ba0c023740666e56f879f5d0d4461 + sha1: 7d1d2a7321b21a237ad2c52afb21a432ce674967 + note: > + Read from the program directory. The only file whose absence stops the + emulator: BuildMode7Font failure makes Initialise return false and Main.cpp + then exits with status 1. + source_ref: "Src/BeebWin.cpp:491-502, Src/Main.cpp:62-66" + + - name: RelayOn.snd + description: "Cassette relay engage sample" + system: bbc-micro-b + required: false + bundled: true + size: 297 + md5: 6e7137fbd3545f8303b6d1594c3b2ccb + sha1: b6e7c8a33117f4f8a49c5fd4326f948d1763f1e1 + note: "Read from the program directory. Missing samples are reported and playback is skipped." + source_ref: "Src/Sound.cpp:65, 538-570, 805" + + - name: RelayOff.snd + description: "Cassette relay release sample" + system: bbc-micro-b + required: false + bundled: true + size: 400 + md5: 0699cec768a8f84827fef594f4f73c22 + sha1: 9c9a3d5ebf0e4b4c183e74b9c2ec79f280cc1556 + source_ref: "Src/Sound.cpp:66, 538-570" + + - name: DriveMotor.snd + description: "Disc drive motor sample" + system: bbc-micro-b + required: false + bundled: true + size: 44127 + md5: a681147ce93e1b5a9e22bb00b701e1cf + sha1: cf496c677d345bb65feccf8cf2269a4cd7053645 + source_ref: "Src/Sound.cpp:67, 538-570" + + - name: HeadLoad.snd + description: "Disc drive head load sample" + system: bbc-micro-b + required: false + bundled: true + size: 8837 + md5: cf30cf2585f9edff7a3d166e6a07b40a + sha1: 2f7204df95363ce56c486696a878ed113bedb23b + source_ref: "Src/Sound.cpp:68, 538-570" + + - name: HeadUnload.snd + description: "Disc drive head unload sample" + system: bbc-micro-b + required: false + bundled: true + size: 4446 + md5: d9b352abee95ee2873c1753fb0d6ad11 + sha1: 781692c24e737d60045b10eb0b8434eccdd1ea82 + source_ref: "Src/Sound.cpp:69, 538-570" + + - name: HeadSeek.snd + description: "Disc drive head seek sample" + system: bbc-micro-b + required: false + bundled: true + size: 31969 + md5: 2672a78593558045736c62cf9e0252bc + sha1: 759d62a94e1571810fe2edc10e14b07b5dd4b2b5 + source_ref: "Src/Sound.cpp:70, 538-570" + + - name: HeadStep.snd + description: "Disc drive head step sample" + system: bbc-micro-b + required: false + bundled: true + size: 2251 + md5: 46c4fdb65f67ac2cdc97fb42455d3b11 + sha1: 5e07a972059751d094fc96610734bb6d659348fe + source_ref: "Src/Sound.cpp:71, 538-570" + + # -- User data directory files -- + + - name: Roms.cfg + description: "ROM slot table, one OS ROM plus 16 paged banks per model" + system: bbc-micro-b + required: true + bundled: true + size: 840 + md5: 33c5208252f32334618a3fd9294acdf4 + sha1: a538968ecb96e520546a99008cdfc2af98a92a81 + note: > + Without it Load returns before the DefaultRoms backfill, every slot stays an + empty string and no ROM is loaded. Overridable with -Roms. + source_ref: "Src/BeebWin.cpp:334, 473, Src/RomConfigFile.cpp:158-219" + + - name: Roms_Torch.cfg + description: "ROM slot table for the Torch Z80 co-processor" + system: bbc-micro-b + required: false + bundled: true + size: 817 + md5: 4a3789eb3c7949871cdbfd856d21625d + sha1: 7b0827bd0fd9425c2e1b4f59313701b78f6d83e0 + note: "Selected by the shipped BeebEmTorch.vbs as `BeebEm.exe -Roms Roms_Torch.cfg`." + source_ref: "BeebEmTorch.vbs:3, Help/z80torch.html" + + - name: Preferences.cfg + description: "Emulator preferences" + system: bbc-micro-b + required: false + bundled: true + size: 2047 + md5: 0108b1eb683308408ad109ce6e4d2839 + sha1: 31291e6f9e2f0b20ccb80bf3ef5e2fe8a5dc712c + note: "Absence is reported and built-in defaults are used. Rewritten on save." + source_ref: "Src/BeebWin.cpp:296, Src/BeebWinPrefs.cpp:282-298, Src/Preferences.cpp:59-66" + + - name: Logical.kmap + description: "Logical keyboard mapping" + system: bbc-micro-b + required: false + bundled: true + size: 6716 + md5: 07b0e1d4cb329185a8a52c48db00bcf9 + sha1: 5817277bcb110b747432b8716a0ffbe0c1e13de2 + note: "Read at ApplyPreferences. The return value is ignored, leaving the built-in map." + source_ref: "Src/BeebWin.cpp:560-563, Src/KeyMap.cpp:65-78" + + - name: Default.kmap + description: "Default keyboard mapping" + system: bbc-micro-b + required: false + bundled: true + size: 6716 + md5: 199de64bdb59a176d102f03cca4eadf9 + sha1: 63c72e11f6ce8cd9dc5ebb96b4938010f4b2e4f0 + source_ref: "Src/BeebWin.cpp:565-567, Src/KeyMap.cpp:65-78" + + - name: DefaultUser.kmap + description: "Fallback user keyboard mapping" + system: bbc-micro-b + required: false + bundled: true + size: 6716 + md5: 199de64bdb59a176d102f03cca4eadf9 + sha1: 63c72e11f6ce8cd9dc5ebb96b4938010f4b2e4f0 + note: "Read only when the user key map preference is unset or fails to load." + source_ref: "Src/BeebWinPrefs.cpp:934-957" + + - name: Econet.cfg + description: "Econet station to address map" + system: bbc-micro-b + required: false + bundled: true + size: 5704 + md5: 7cb22b998d2de0f85a638485b9f8db6e + sha1: faf55cd1eafaa3499695fe8179e43ffe6f86daaa + note: > + Read when Econet is enabled, which is off by default. A read failure makes + EconetReset return false and Econet stays off. Overridable with -EconetCfg. + source_ref: "Src/BeebWin.cpp:526-537, Src/Econet.cpp:784-792, 1039-1042" + + - name: AUNMap + description: "Econet network to IP subnet map" + system: bbc-micro-b + required: false + bundled: true + size: 1812 + md5: d2e4b22f9433cf16a3dcb320dc2cf1a2 + sha1: efd505f459448c5741a8ca249089f068b72cb751 + note: "Read only when AUN mode is on. Overridable with -AUNMap." + source_ref: "Src/BeebWin.cpp:539-550, Src/Econet.cpp:931-938, 1059-1061" diff --git a/emulators/c64-emu.yml b/emulators/c64-emu.yml new file mode 100644 index 00000000..16b40b75 --- /dev/null +++ b/emulators/c64-emu.yml @@ -0,0 +1,1151 @@ +emulator: "C64.emu" +type: standalone +core_classification: community_fork +source: "https://github.com/Rakashazi/emu-ex-plus-alpha" +upstream: "https://github.com/VICE-Team/svn-mirror" +profiled_date: "2026-08-11" +source_commit: "1c12fac5ce49badaadff2e2f210dcc30b89f4943" +core_version: "1.5.85" +display_name: "Commodore - C64 (C64.emu)" +mode: standalone +cores: + - "c64-emu" + - "C64.emu" + - "C64-EMU" +systems: + - commodore-c64 + - commodore-c64-supercpu + - commodore-c64dtv + - commodore-c128 + - commodore-vic20 + - commodore-plus4 + - commodore-pet + - commodore-cbm-ii + +notes: | + Android and Linux member of the EX Emulator series by Robert Broglia, + published as com.explusalpha.C64Emu (C64.emu/metadata/conf.mk:2,6,7) and + reached by ES-DE through its C64-EMU find rule. VICE 3.10 is vendored under + C64.emu/src/vice (C64.emu/src/config/vice-config.h:699,795) and driven by the + app's own sysfile, video, sound and zfile layers. + + Ten machines are built as separate shared libraries + (C64.emu/src/CMakeLists.txt:535-683): c64, c64sc, scpu64, c64dtv, c128, vic, + pet, plus4, cbm2, cbm5x0. Each opens its files under the VICE machine + directory named by its own machine_name (c64/c64.c:179, c128/c128.c:240, + vic20/vic20.c:144, plus4/plus4.c:131, pet/pet.c:128, cbm2/cbm2.c:131, + cbm2/cbm5x0.c:122, scpu64/scpu64.c:157, c64dtv/c64dtv.c:129), so c64 and c64sc + share C64/ and cbm2 and cbm5x0 share CBM-II/. Drive ROMs live in DRIVES/ + (drive/driverom.c:104,174). + + Nothing is embedded. The app implements sysfile_open, sysfile_locate and + sysfile_load itself (C64.emu/src/main/sysfile.cc:218-355) over a user-set + path that may be a directory or a ZIP archive, and that path is rejected + unless it carries a DRIVES folder (C64.emu/src/main/sysfile.cc:140-151). On + Linux two fallbacks follow it, ~/.local/share/C64.emu and + /usr/share/games/vice (C64.emu/src/main/Main.cc:91-95). A last fallback reads + the application bundle (C64.emu/src/main/sysfile.cc:107-119,252-259), which + supplies only the eight keymaps below (C64.emu/res/android/assets symlinks + C64.emu/res/vice, and each machine directory there holds one file). + + Missing ROMs stop the app rather than degrading it: initC64 throws when the + path is unset, and again with the name of the first file that failed once + plugin.init_main() returns -1 (C64.emu/src/main/Main.cc:301-311), which is + what machine_init does when mem_load cannot find a ROM. + + All fourteen C64 models are offered (C64.emu/src/main/VicePlugin.cc:66-79), so + every kernal revision and both chargens are reachable. The MAX Machine model + loads nothing: c64rom.c:222-224 matches the kernal-none.bin name and zeroes + the ROM area instead of calling sysfile_load. + + C128 is the one machine that needs its whole language set present. mem_load + runs c128rom_check_res_file over both BASIC halves, all eight kernal + resources, all eight chargen resources, Kernal64 and Basic64, and returns -1 + if any one of them cannot be located (c128/c128rom.c:762-806). Only the + selected variant is then read. MachineType stays at C128_MACHINE_INT + (c128/c128-resources.c:684) because no reachable code writes it, so the + Danish, Norwegian and Swedish kernal64 variants of c128rom.h:111-113 are never + named. + + Drive ROMs are optional in the strict sense: iec_drive_rom_load, + ieee_drive_rom_load, tcbm_drive_rom_load and iec128dcr_drive_rom_load return + void, and driverom_load logs the miss and disables the units of that type + (drive/driverom.c:186-196,131-144). Default unit 8 is a 1541-II on C64, SCPU64 + and DTV (c64/c64drive.c:43), a 1571CR on C128 (c128/c128drive.c:56), a 1540 on + VIC-20 (vic20/vic20drive.c:44), a 1551 on Plus/4 (plus4/plus4drive.c:46) and a + 2031 on PET and CBM-II (pet/petdrive.c:42, cbm2/cbm2drive.c:42). + + Sizes come from the min and max arguments of each sysfile_load call. The + loader accepts a file two bytes over its maximum by dropping the leading load + address, pads a short file to the top of the buffer, and truncates anything + longer with a warning (C64.emu/src/main/sysfile.cc:30-71). + + SHA-1s are those hardcoded in c64/c64rom.h:88-96. c64rom.c:120-131 hashes the + loaded kernal and matches that table to identify the revision; an unmatched + image is reported and accepted. VICE distributes C128/kernal64-901227-03.bin + and C128/basic64-901226-01.bin with the same bytes as the C64 Rev 3 kernal and + BASIC, so those two entries carry the same hashes. + + Palettes are read only after the user enables an external palette: the + ${CHIP}ExternalPalette resource is registered with factory value 0 and + ${CHIP}PaletteFile with the chip's default name + (video/video-resources.c:393-398,916-923). The app lists every .vpl in the + machine directory and sets both resources + (C64.emu/src/main/EmuMenuViews.cc:186,1058,1074-1083, + C64.emu/src/main/options.cc:38-51). Only the code-named default of each chip + is listed here; palette_load appends the .vpl extension itself + (palette.c:228-248). + + Keymaps are named from KBD_PORT_PREFIX, which the app sets to gtk3 + (C64.emu/src/config/kbd.h:7). keymap_init runs inside init_main and the lookup + falls back to <prefix>_sym.vkm (keymap.c:1249-1270,1386-1392), the file the + app bundles for each machine directory. Host-layout and keyboard-type variants + extend the name and are not enumerated here. + + Four subsystems are compiled but cannot reach their files. Printer ROMs and + the PRINTER/ palettes load from drv_mps803_open and drv_nl10_open, which + require Printer4, Printer5 or Printer6 to leave PRINTER_DEVICE_NONE + (printerdrv/interface-serial.c:145-149); the app writes no printer resource, + and neither main.c nor initcmdline.c is compiled, so the resource file and the + command line that would set one do not exist. Romset .vrs files, the monitor + command file and joystick .vjm maps have no default name at all + (joyport/joystick.c:2212) and no menu that supplies one. vice/arch is outside + the build, so the CBM font, icon and hotkey lookups of archdep_cbmfont.c, + archdep_icon_path.c and hotkeys/parser.c are never linked. + +files: + # ---------------------------------------------------------------- C64/ + - name: "kernal-901227-03.bin" + path: "C64/kernal-901227-03.bin" + system: commodore-c64 + required: true + size: 8192 + sha1: "1d503e56df85a62fee696e7618dc5b4e781df1bb" + validation: [size, sha1] + description: "C64 kernal Rev 3, default kernal and default model" + source_ref: "C64.emu/src/vice/c64/c64rom.h:52,93 (name, hash), C64.emu/src/vice/c64/c64-resources.c:378,245, C64.emu/src/vice/c64/c64rom.c:226" + + - name: "kernal-901227-02.bin" + path: "C64/kernal-901227-02.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "0e2e4ee3f2d41f00bed72f9ab588b83e306fdb13" + validation: [size, sha1] + description: "C64 kernal Rev 2, C64 old PAL model" + source_ref: "C64.emu/src/vice/c64/c64rom.h:51,92, C64.emu/src/vice/c64/c64model.c:113-116, C64.emu/src/vice/c64/c64-resources.c:244" + + - name: "kernal-901227-01.bin" + path: "C64/kernal-901227-01.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "87cc04d61fc748b82df09856847bb5c2754a2033" + validation: [size, sha1] + description: "C64 kernal Rev 1, C64 old NTSC model" + source_ref: "C64.emu/src/vice/c64/c64rom.h:50,91, C64.emu/src/vice/c64/c64model.c:128-131, C64.emu/src/vice/c64/c64-resources.c:243" + + - name: "kernal-251104-04.bin" + path: "C64/kernal-251104-04.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "aa136e91ecf3c5ac64f696b3dbcbfc5ba0871c98" + validation: [size, sha1] + description: "SX-64 kernal, C64 SX PAL and NTSC models" + source_ref: "C64.emu/src/vice/c64/c64rom.h:54,95, C64.emu/src/vice/c64/c64model.c:138-146, C64.emu/src/vice/c64/c64-resources.c:247" + + - name: "kernal-906145-02.bin" + path: "C64/kernal-906145-02.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "4ff0f11e80f4b57430d8f0c3799ed0f0e0f4565d" + validation: [size, sha1] + region: [japan] + description: "Japanese C64 kernal" + source_ref: "C64.emu/src/vice/c64/c64rom.h:49,90, C64.emu/src/vice/c64/c64model.c:148-151, C64.emu/src/vice/c64/c64-resources.c:246" + + - name: "kernal-390852-01.bin" + path: "C64/kernal-390852-01.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "3ad6cc1837c679a11f551ad1cf1a32dd84ace719" + validation: [size, sha1] + description: "C64 GS kernal" + source_ref: "C64.emu/src/vice/c64/c64rom.h:53,94, C64.emu/src/vice/c64/c64model.c:153-156, C64.emu/src/vice/c64/c64-resources.c:248" + + - name: "kernal-901246-01.bin" + path: "C64/kernal-901246-01.bin" + system: commodore-c64 + required: false + size: 8192 + sha1: "6c4fa9465f6091b174df27dfe679499df447503c" + validation: [size, sha1] + description: "Educator 64 kernal, PET64 PAL and NTSC models" + source_ref: "C64.emu/src/vice/c64/c64rom.h:55,96, C64.emu/src/vice/c64/c64model.c:158-166, C64.emu/src/vice/c64/c64-resources.c:249" + + - name: "basic-901226-01.bin" + path: "C64/basic-901226-01.bin" + system: commodore-c64 + required: true + size: 8192 + sha1: "79015323128650c742a3694c9429aa91f355905e" + validation: [size] + description: "C64 BASIC" + source_ref: "C64.emu/src/vice/c64/c64rom.h:31,88, C64.emu/src/vice/c64/c64-resources.c:381, C64.emu/src/vice/c64/c64rom.c:279" + + - name: "chargen-901225-01.bin" + path: "C64/chargen-901225-01.bin" + system: commodore-c64 + required: true + size: 4096 + validation: [size] + description: "C64 character generator" + source_ref: "C64.emu/src/vice/c64/c64rom.h:60, C64.emu/src/vice/c64/c64-resources.c:375, C64.emu/src/vice/c64/c64rom.c:295" + + - name: "chargen-906143-02.bin" + path: "C64/chargen-906143-02.bin" + system: commodore-c64 + required: false + size: 4096 + validation: [size] + region: [japan] + description: "Japanese C64 character generator" + source_ref: "C64.emu/src/vice/c64/c64rom.h:61, C64.emu/src/vice/c64/c64model.c:148-151,323" + + - name: "gtk3_sym.vkm" + path: "C64/gtk3_sym.vkm" + system: commodore-c64 + required: false + bundled: true + category: game_data + description: "C64 symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704,1386-1392" + + - name: "pepto-pal.vpl" + path: "C64/pepto-pal.vpl" + system: commodore-c64 + required: false + category: game_data + description: "VIC-II default external palette" + source_ref: "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/viciisc/vicii-resources.c:186, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- SCPU64/ + - name: "scpu64" + path: "SCPU64/scpu64" + system: commodore-c64-supercpu + required: true + min_size: 65536 + max_size: 524288 + validation: [size] + description: "SuperCPU64 firmware" + source_ref: "C64.emu/src/vice/scpu64/scpu64-resources.c:234, C64.emu/src/vice/scpu64/scpu64rom.c:80, C64.emu/src/vice/scpu64/scpu64mem.h:39-40" + + - name: "chargen-901225-01.bin" + path: "SCPU64/chargen-901225-01.bin" + system: commodore-c64-supercpu + required: true + size: 4096 + validation: [size] + description: "Character generator for the SuperCPU machine" + source_ref: "C64.emu/src/vice/scpu64/scpu64-resources.c:231, C64.emu/src/vice/scpu64/scpu64rom.c:63, C64.emu/src/vice/scpu64/scpu64mem.h:38" + + - name: "chargen-906143-02.bin" + path: "SCPU64/chargen-906143-02.bin" + system: commodore-c64-supercpu + required: false + size: 4096 + validation: [size] + region: [japan] + description: "Japanese character generator, Japanese SuperCPU model" + source_ref: "C64.emu/src/vice/scpu64/scpu64model.c:303, C64.emu/src/vice/c64/c64rom.h:61" + + - name: "gtk3_sym.vkm" + path: "SCPU64/gtk3_sym.vkm" + system: commodore-c64-supercpu + required: false + bundled: true + category: game_data + description: "SuperCPU symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "pepto-pal.vpl" + path: "SCPU64/pepto-pal.vpl" + system: commodore-c64-supercpu + required: false + category: game_data + description: "VIC-II default external palette" + source_ref: "C64.emu/src/vice/viciisc/vicii-resources.c:186, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- C64DTV/ + - name: "kernal-901227-03.bin" + path: "C64DTV/kernal-901227-03.bin" + system: commodore-c64dtv + required: true + size: 8192 + sha1: "1d503e56df85a62fee696e7618dc5b4e781df1bb" + validation: [size, sha1] + description: "C64 kernal Rev 3 for the DTV machine" + source_ref: "C64.emu/src/vice/c64dtv/c64dtv-resources.c:154, C64.emu/src/vice/c64/c64rom.h:52,93, C64.emu/src/vice/c64/c64rom.c:226" + + - name: "basic-901226-01.bin" + path: "C64DTV/basic-901226-01.bin" + system: commodore-c64dtv + required: true + size: 8192 + sha1: "79015323128650c742a3694c9429aa91f355905e" + validation: [size] + description: "C64 BASIC for the DTV machine" + source_ref: "C64.emu/src/vice/c64dtv/c64dtv-resources.c:157, C64.emu/src/vice/c64/c64rom.h:31,88, C64.emu/src/vice/c64/c64rom.c:279" + + - name: "chargen-901225-01.bin" + path: "C64DTV/chargen-901225-01.bin" + system: commodore-c64dtv + required: true + size: 4096 + validation: [size] + description: "Character generator for the DTV machine" + source_ref: "C64.emu/src/vice/c64dtv/c64dtv-resources.c:151, C64.emu/src/vice/c64/c64rom.c:295" + + - name: "dtvrom.bin" + path: "C64DTV/dtvrom.bin" + system: commodore-c64dtv + required: false + max_size: 2097152 + validation: [size] + description: "DTV flash image, all six DTV model resources default to this name" + note: >- + Read into the 2 MB flash. When the file is absent the emulator builds the + flash from the loaded kernal, BASIC and chargen instead. + source_ref: "C64.emu/src/vice/c64dtv/c64dtvflash.c:59-64,643-656,471,486-500" + + - name: "gtk3_sym.vkm" + path: "C64DTV/gtk3_sym.vkm" + system: commodore-c64dtv + required: false + bundled: true + category: game_data + description: "DTV symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "spiff.vpl" + path: "C64DTV/spiff.vpl" + system: commodore-c64dtv + required: false + category: game_data + description: "VIC-II default external palette on the DTV machine" + source_ref: "C64.emu/src/vice/vicii/vicii-resources.c:167-168, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- C128/ + - name: "kernal-318020-05.bin" + path: "C128/kernal-318020-05.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 international kernal, editor and Z80 BIOS" + source_ref: "C64.emu/src/vice/c128/c128rom.h:93, C64.emu/src/vice/c128/c128-resources.c:658, C64.emu/src/vice/c128/c128rom.c:343,770" + + - name: "kernal-315078-03.bin" + path: "C128/kernal-315078-03.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 German kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:95, C64.emu/src/vice/c128/c128-resources.c:662, C64.emu/src/vice/c128/c128rom.c:771" + + - name: "kernal-325172-01.bin" + path: "C128/kernal-325172-01.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 Swiss kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:94, C64.emu/src/vice/c128/c128-resources.c:660, C64.emu/src/vice/c128/c128rom.c:777" + + - name: "kernal-318034-01.bin" + path: "C128/kernal-318034-01.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 Swedish kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:100, C64.emu/src/vice/c128/c128-resources.c:672, C64.emu/src/vice/c128/c128rom.c:776" + + - name: "kernalfi" + path: "C128/kernalfi" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 Finnish kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:96, C64.emu/src/vice/c128/c128-resources.c:664, C64.emu/src/vice/c128/c128rom.c:772" + + - name: "kernalfr" + path: "C128/kernalfr" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 French kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:97, C64.emu/src/vice/c128/c128-resources.c:666, C64.emu/src/vice/c128/c128rom.c:773" + + - name: "kernalit" + path: "C128/kernalit" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 Italian kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:98, C64.emu/src/vice/c128/c128-resources.c:668, C64.emu/src/vice/c128/c128rom.c:774" + + - name: "kernalno" + path: "C128/kernalno" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 Norwegian kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:99, C64.emu/src/vice/c128/c128-resources.c:670, C64.emu/src/vice/c128/c128rom.c:775" + + - name: "basiclo-318018-04.bin" + path: "C128/basiclo-318018-04.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 BASIC low half" + source_ref: "C64.emu/src/vice/c128/c128rom.h:103, C64.emu/src/vice/c128/c128-resources.c:650, C64.emu/src/vice/c128/c128rom.c:434,763" + + - name: "basichi-318019-04.bin" + path: "C128/basichi-318019-04.bin" + system: commodore-c128 + required: true + size: 16384 + validation: [size] + description: "C128 BASIC high half, holds the editor" + source_ref: "C64.emu/src/vice/c128/c128rom.h:104, C64.emu/src/vice/c128/c128-resources.c:652, C64.emu/src/vice/c128/c128rom.c:443,764" + + - name: "chargen-390059-01.bin" + path: "C128/chargen-390059-01.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 international character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:82, C64.emu/src/vice/c128/c128-resources.c:634, C64.emu/src/vice/c128/c128rom.c:529,783" + + - name: "chargen-315079-01.bin" + path: "C128/chargen-315079-01.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 German character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:85, C64.emu/src/vice/c128/c128-resources.c:638, C64.emu/src/vice/c128/c128rom.c:784" + + - name: "chargen-325167-02.bin" + path: "C128/chargen-325167-02.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 Italian, French and Belgian character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:87-88, C64.emu/src/vice/c128/c128-resources.c:642,644, C64.emu/src/vice/c128/c128rom.c:785,790" + + - name: "chargen-325181-01.bin" + path: "C128/chargen-325181-01.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 Swedish and Finnish character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:86,90, C64.emu/src/vice/c128/c128-resources.c:640,648, C64.emu/src/vice/c128/c128rom.c:786,789" + + - name: "chargen-325173-01D.bin" + path: "C128/chargen-325173-01D.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 Swiss character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:84, C64.emu/src/vice/c128/c128-resources.c:636, C64.emu/src/vice/c128/c128rom.c:787" + + - name: "chargen-325078-02.bin" + path: "C128/chargen-325078-02.bin" + system: commodore-c128 + required: true + size: 8192 + validation: [size] + description: "C128 Norwegian character generator" + source_ref: "C64.emu/src/vice/c128/c128rom.h:89, C64.emu/src/vice/c128/c128-resources.c:646, C64.emu/src/vice/c128/c128rom.c:788" + + - name: "kernal64-901227-03.bin" + path: "C128/kernal64-901227-03.bin" + system: commodore-c128 + required: true + size: 8192 + sha1: "1d503e56df85a62fee696e7618dc5b4e781df1bb" + validation: [size] + description: "C64 mode kernal" + source_ref: "C64.emu/src/vice/c128/c128rom.h:110, C64.emu/src/vice/c128/c128-resources.c:654, C64.emu/src/vice/c128/c128rom.c:672,796, C64.emu/src/vice/c64/c64rom.h:93" + + - name: "basic64-901226-01.bin" + path: "C128/basic64-901226-01.bin" + system: commodore-c128 + required: true + size: 8192 + sha1: "79015323128650c742a3694c9429aa91f355905e" + validation: [size] + description: "C64 mode BASIC" + source_ref: "C64.emu/src/vice/c128/c128rom.h:107, C64.emu/src/vice/c128/c128-resources.c:656, C64.emu/src/vice/c128/c128rom.c:710,801, C64.emu/src/vice/c64/c64rom.h:88" + + - name: "gtk3_sym.vkm" + path: "C128/gtk3_sym.vkm" + system: commodore-c128 + required: false + bundled: true + category: game_data + description: "C128 symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "pepto-pal.vpl" + path: "C128/pepto-pal.vpl" + system: commodore-c128 + required: false + category: game_data + description: "VIC-II default external palette" + source_ref: "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/video/video-resources.c:916-923" + + - name: "vdc_deft.vpl" + path: "C128/vdc_deft.vpl" + system: commodore-c128 + required: false + category: game_data + description: "VDC default external palette" + source_ref: "C64.emu/src/vice/vdc/vdc-resources.c:127, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- VIC20/ + - name: "kernal.901486-07.bin" + path: "VIC20/kernal.901486-07.bin" + system: commodore-vic20 + required: true + size: 8192 + validation: [size] + description: "VIC-20 PAL kernal, default kernal resource" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:53, C64.emu/src/vice/vic20/vic20-resources.c:183, C64.emu/src/vice/vic20/vic20rom.c:112" + + - name: "kernal.901486-06.bin" + path: "VIC20/kernal.901486-06.bin" + system: commodore-vic20 + required: true + size: 8192 + validation: [size] + description: "VIC-20 NTSC kernal, default model and VIC-21" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:52, C64.emu/src/vice/vic20/vic20model.c:58-59,140" + + - name: "kernal.901486-02.bin" + path: "VIC20/kernal.901486-02.bin" + system: commodore-vic20 + required: false + size: 8192 + validation: [size] + region: [japan] + description: "VIC-1001 kernal" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:51, C64.emu/src/vice/vic20/vic20model.c:60,140" + + - name: "basic-901486-01.bin" + path: "VIC20/basic-901486-01.bin" + system: commodore-vic20 + required: true + size: 8192 + validation: [size] + description: "VIC-20 BASIC" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:43, C64.emu/src/vice/vic20/vic20-resources.c:185, C64.emu/src/vice/vic20/vic20rom.c:156" + + - name: "chargen-901460-03.bin" + path: "VIC20/chargen-901460-03.bin" + system: commodore-vic20 + required: true + size: 4096 + validation: [size] + description: "VIC-20 character generator" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:56, C64.emu/src/vice/vic20/vic20-resources.c:181, C64.emu/src/vice/vic20/vic20rom.c:175" + + - name: "chargen-901460-02.bin" + path: "VIC20/chargen-901460-02.bin" + system: commodore-vic20 + required: false + size: 4096 + validation: [size] + region: [japan] + description: "VIC-1001 character generator" + source_ref: "C64.emu/src/vice/vic20/vic20rom.h:57, C64.emu/src/vice/vic20/vic20model.c:60,139" + + - name: "gtk3_sym.vkm" + path: "VIC20/gtk3_sym.vkm" + system: commodore-vic20 + required: false + bundled: true + category: game_data + description: "VIC-20 symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "mike-pal.vpl" + path: "VIC20/mike-pal.vpl" + system: commodore-vic20 + required: false + category: game_data + description: "VIC default external palette" + source_ref: "C64.emu/src/vice/vic20/vic-resources.c:90, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- PLUS4/ + - name: "kernal-318005-05.bin" + path: "PLUS4/kernal-318005-05.bin" + system: commodore-plus4 + required: true + size: 16384 + validation: [size] + description: "Plus/4 NTSC kernal, default model" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:37, C64.emu/src/vice/plus4/plus4model.c:67,69,153, C64.emu/src/vice/plus4/plus4rom.c:89" + + - name: "kernal-318004-05.bin" + path: "PLUS4/kernal-318004-05.bin" + system: commodore-plus4 + required: true + size: 16384 + validation: [size] + description: "Plus/4 PAL kernal, default kernal resource" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:36, C64.emu/src/vice/plus4/plus4-resources.c:186, C64.emu/src/vice/plus4/plus4model.c:66,68" + + - name: "kernal-318004-01.bin" + path: "PLUS4/kernal-318004-01.bin" + system: commodore-plus4 + required: false + size: 16384 + validation: [size] + description: "C232 prototype kernal" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:35, C64.emu/src/vice/plus4/plus4model.c:71,153" + + - name: "kernal-364.bin" + path: "PLUS4/kernal-364.bin" + system: commodore-plus4 + required: false + size: 16384 + validation: [size] + description: "V364 prototype kernal" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:38, C64.emu/src/vice/plus4/plus4model.c:70,153" + + - name: "basic-318006-01.bin" + path: "PLUS4/basic-318006-01.bin" + system: commodore-plus4 + required: true + size: 16384 + validation: [size] + description: "Plus/4 BASIC" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:33, C64.emu/src/vice/plus4/plus4-resources.c:188, C64.emu/src/vice/plus4/plus4rom.c:111" + + - name: "3plus1-317053-01.bin" + path: "PLUS4/3plus1-317053-01.bin" + system: commodore-plus4 + required: true + size: 16384 + validation: [size] + description: "3-plus-1 low function ROM, Plus/4 and V364 models" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:40, C64.emu/src/vice/plus4/plus4-resources.c:190, C64.emu/src/vice/plus4/plus4memrom.c:146" + + - name: "3plus1-317054-01.bin" + path: "PLUS4/3plus1-317054-01.bin" + system: commodore-plus4 + required: true + size: 16384 + validation: [size] + description: "3-plus-1 high function ROM, Plus/4 and V364 models" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:41, C64.emu/src/vice/plus4/plus4-resources.c:192, C64.emu/src/vice/plus4/plus4memrom.c:166" + + - name: "c2lo-364.bin" + path: "PLUS4/c2lo-364.bin" + system: commodore-plus4 + required: false + size: 16384 + validation: [size] + description: "V364 speech ROM" + source_ref: "C64.emu/src/vice/plus4/plus4rom.h:43, C64.emu/src/vice/plus4/plus4model.c:70,161, C64.emu/src/vice/plus4/plus4memrom.c:187" + + - name: "gtk3_sym.vkm" + path: "PLUS4/gtk3_sym.vkm" + system: commodore-plus4 + required: false + bundled: true + category: game_data + description: "Plus/4 symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "yape-pal.vpl" + path: "PLUS4/yape-pal.vpl" + system: commodore-plus4 + required: false + category: game_data + description: "TED default external palette" + source_ref: "C64.emu/src/vice/plus4/ted-resources.c:90, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- PET/ + - name: "kernal-4.901465-22.bin" + path: "PET/kernal-4.901465-22.bin" + system: commodore-pet + required: true + size: 4096 + validation: [size] + description: "BASIC 4 kernal, default model PET 8032" + source_ref: "C64.emu/src/vice/pet/petrom.h:53, C64.emu/src/vice/pet/pet-resources.c:406, C64.emu/src/vice/pet/petrom.c:581" + + - name: "kernal-2.901465-03.bin" + path: "PET/kernal-2.901465-03.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "BASIC 2 kernal, PET 3008 to 3032B models" + source_ref: "C64.emu/src/vice/pet/petrom.h:52, C64.emu/src/vice/pet/petmodel.c:108,371" + + - name: "kernal-1.901439-04-07.bin" + path: "PET/kernal-1.901439-04-07.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "BASIC 1 kernal, PET 2001-8N model" + source_ref: "C64.emu/src/vice/pet/petrom.h:51, C64.emu/src/vice/pet/petmodel.c:89,371" + + - name: "basic-4.901465-23-20-21.bin" + path: "PET/basic-4.901465-23-20-21.bin" + system: commodore-pet + required: true + min_size: 8192 + max_size: 12288 + validation: [size] + description: "BASIC 4, default model PET 8032" + source_ref: "C64.emu/src/vice/pet/petrom.h:57, C64.emu/src/vice/pet/pet-resources.c:410, C64.emu/src/vice/pet/petrom.c:534" + + - name: "basic-2.901465-01-02.bin" + path: "PET/basic-2.901465-01-02.bin" + system: commodore-pet + required: false + min_size: 8192 + max_size: 12288 + validation: [size] + description: "BASIC 2, PET 3008 to 3032B models" + source_ref: "C64.emu/src/vice/pet/petrom.h:56, C64.emu/src/vice/pet/petmodel.c:110,372" + + - name: "basic-1.901439-09-05-02-06.bin" + path: "PET/basic-1.901439-09-05-02-06.bin" + system: commodore-pet + required: false + min_size: 8192 + max_size: 12288 + validation: [size] + description: "BASIC 1, PET 2001-8N model" + source_ref: "C64.emu/src/vice/pet/petrom.h:55, C64.emu/src/vice/pet/petmodel.c:91,372" + + - name: "edit-4-80-b-50Hz.901474-04_.bin" + path: "PET/edit-4-80-b-50Hz.901474-04_.bin" + system: commodore-pet + required: true + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 4 business 80 column editor, default model PET 8032" + source_ref: "C64.emu/src/vice/pet/petrom.h:63, C64.emu/src/vice/pet/pet-resources.c:408, C64.emu/src/vice/pet/petrom.c:612" + + - name: "edit-4-40-n-50Hz.901498-01.bin" + path: "PET/edit-4-40-n-50Hz.901498-01.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 4 graphics 40 column editor, PET 4016 and 4032 models" + source_ref: "C64.emu/src/vice/pet/petrom.h:62, C64.emu/src/vice/pet/petmodel.c:373" + + - name: "edit-4-40-b-50Hz.ts.bin" + path: "PET/edit-4-40-b-50Hz.ts.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 4 business 40 column editor, PET 4032B model" + source_ref: "C64.emu/src/vice/pet/petrom.h:65, C64.emu/src/vice/pet/petmodel.c:373" + + - name: "edit-2-n.901447-24.bin" + path: "PET/edit-2-n.901447-24.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 2 graphics 40 column editor, PET 3008 to 3032 models" + source_ref: "C64.emu/src/vice/pet/petrom.h:60, C64.emu/src/vice/pet/petmodel.c:109,373" + + - name: "edit-2-b.901474-01.bin" + path: "PET/edit-2-b.901474-01.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 2 business editor, PET 3032B model" + source_ref: "C64.emu/src/vice/pet/petrom.h:61, C64.emu/src/vice/pet/petmodel.c:373" + + - name: "edit-1-n.901439-03.bin" + path: "PET/edit-1-n.901439-03.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "BASIC 1 graphics 40 column editor, PET 2001-8N model" + source_ref: "C64.emu/src/vice/pet/petrom.h:59, C64.emu/src/vice/pet/petmodel.c:90,373" + + - name: "characters-2.901447-10.bin" + path: "PET/characters-2.901447-10.bin" + system: commodore-pet + required: true + min_size: 2048 + max_size: 4096 + validation: [size] + description: "Second generation character generator, default model PET 8032" + source_ref: "C64.emu/src/vice/pet/petrom.h:47, C64.emu/src/vice/pet/pet-resources.c:404, C64.emu/src/vice/pet/petrom.c:506" + + - name: "characters-1.901447-08.bin" + path: "PET/characters-1.901447-08.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "First generation character generator, PET 2001-8N model" + source_ref: "C64.emu/src/vice/pet/petrom.h:46, C64.emu/src/vice/pet/petmodel.c:88,370" + + - name: "characters.901640-01.bin" + path: "PET/characters.901640-01.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 4096 + validation: [size] + description: "SuperPET character generator" + source_ref: "C64.emu/src/vice/pet/petrom.h:48, C64.emu/src/vice/pet/petmodel.c:370" + + - name: "waterloo-a000.901898-01.bin" + path: "PET/waterloo-a000.901898-01.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "SuperPET 6809 ROM at a000" + source_ref: "C64.emu/src/vice/pet/petrom.h:75, C64.emu/src/vice/pet/petmodel.c:305, C64.emu/src/vice/pet/petrom.c:747" + + - name: "waterloo-b000.901898-02.bin" + path: "PET/waterloo-b000.901898-02.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "SuperPET 6809 ROM at b000" + source_ref: "C64.emu/src/vice/pet/petrom.h:76, C64.emu/src/vice/pet/petmodel.c:306, C64.emu/src/vice/pet/petrom.c:747" + + - name: "waterloo-c000.901898-03.bin" + path: "PET/waterloo-c000.901898-03.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "SuperPET 6809 ROM at c000" + source_ref: "C64.emu/src/vice/pet/petrom.h:77, C64.emu/src/vice/pet/petmodel.c:307, C64.emu/src/vice/pet/petrom.c:747" + + - name: "waterloo-d000.901898-04.bin" + path: "PET/waterloo-d000.901898-04.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "SuperPET 6809 ROM at d000" + source_ref: "C64.emu/src/vice/pet/petrom.h:78, C64.emu/src/vice/pet/petmodel.c:308, C64.emu/src/vice/pet/petrom.c:747" + + - name: "waterloo-e000.901897-01.bin" + path: "PET/waterloo-e000.901897-01.bin" + system: commodore-pet + required: false + min_size: 2048 + max_size: 8192 + validation: [size] + description: "SuperPET 6809 ROM at e000, the one slot the loader accepts at 2 KB" + source_ref: "C64.emu/src/vice/pet/petrom.h:79, C64.emu/src/vice/pet/petmodel.c:309, C64.emu/src/vice/pet/petrom.c:745,747" + + - name: "waterloo-f000.901898-05.bin" + path: "PET/waterloo-f000.901898-05.bin" + system: commodore-pet + required: false + size: 4096 + validation: [size] + description: "SuperPET 6809 ROM at f000" + source_ref: "C64.emu/src/vice/pet/petrom.h:80, C64.emu/src/vice/pet/petmodel.c:310, C64.emu/src/vice/pet/petrom.c:747" + + - name: "gtk3_sym.vkm" + path: "PET/gtk3_sym.vkm" + system: commodore-pet + required: false + bundled: true + category: game_data + description: "PET symbolic keymap, US layout and the fallback for every keyboard type" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263-1269,1386-1392, C64.emu/src/vice/pet/pet.c:169-176" + + - name: "green.vpl" + path: "PET/green.vpl" + system: commodore-pet + required: false + category: game_data + description: "CRTC default external palette" + source_ref: "C64.emu/src/vice/crtc/crtc-resources.c:102, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- CBM-II/ + - name: "kernal-901244-04a.bin" + path: "CBM-II/kernal-901244-04a.bin" + system: commodore-cbm-ii + required: true + size: 8192 + validation: [size] + description: "CBM-II 6x0 and 7x0 kernal, default model CBM 610" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:45, C64.emu/src/vice/cbm2/cbm2model.c:66-74,160, C64.emu/src/vice/cbm2/cbm2rom.c:155" + + - name: "kernal-901234-02.bin" + path: "CBM-II/kernal-901234-02.bin" + system: commodore-cbm-ii + required: true + size: 8192 + validation: [size] + description: "CBM 510 kernal, default model of the cbm5x0 plugin" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:46, C64.emu/src/vice/cbm2/cbm2model.c:64-65,160, C64.emu/src/vice/cbm2/cbm5x0rom.c:125" + + - name: "basic-901242+3-04a.bin" + path: "CBM-II/basic-901242+3-04a.bin" + system: commodore-cbm-ii + required: true + size: 16384 + validation: [size] + description: "CBM-II 128 KB BASIC, CBM 610 and 710 models" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:41, C64.emu/src/vice/cbm2/cbm2model.c:66-67,72,161, C64.emu/src/vice/cbm2/cbm2rom.c:171" + + - name: "basic-901240+1-03.bin" + path: "CBM-II/basic-901240+1-03.bin" + system: commodore-cbm-ii + required: false + size: 16384 + validation: [size] + description: "CBM-II 256 KB BASIC, CBM 620, 620+, 720 and 720+ models" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:42, C64.emu/src/vice/cbm2/cbm2model.c:68-71,73-74,161" + + - name: "basic-901235+6-02.bin" + path: "CBM-II/basic-901235+6-02.bin" + system: commodore-cbm-ii + required: true + size: 16384 + validation: [size] + description: "CBM 510 BASIC" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:43, C64.emu/src/vice/cbm2/cbm2model.c:64-65,161, C64.emu/src/vice/cbm2/cbm5x0rom.c:141" + + - name: "chargen-901237-01.bin" + path: "CBM-II/chargen-901237-01.bin" + system: commodore-cbm-ii + required: true + size: 4096 + validation: [size] + description: "CBM-II 600 series character generator, default model CBM 610" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:38, C64.emu/src/vice/cbm2/cbm2model.c:66-71,162, C64.emu/src/vice/cbm2/cbm2rom.c:100-101" + + - name: "chargen-901232-01.bin" + path: "CBM-II/chargen-901232-01.bin" + system: commodore-cbm-ii + required: false + size: 4096 + validation: [size] + description: "CBM-II 700 series character generator" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:39, C64.emu/src/vice/cbm2/cbm2model.c:72-74,162" + + - name: "chargen-901225-01.bin" + path: "CBM-II/chargen-901225-01.bin" + system: commodore-cbm-ii + required: true + size: 4096 + validation: [size] + description: "CBM 510 character generator" + source_ref: "C64.emu/src/vice/cbm2/cbm2rom.h:37, C64.emu/src/vice/cbm2/cbm2model.c:64-65,162, C64.emu/src/vice/cbm2/cbm5x0rom.c:83" + + - name: "gtk3_sym.vkm" + path: "CBM-II/gtk3_sym.vkm" + system: commodore-cbm-ii + required: false + bundled: true + category: game_data + description: "CBM-II symbolic keymap, US layout" + source_ref: "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704" + + - name: "green.vpl" + path: "CBM-II/green.vpl" + system: commodore-cbm-ii + required: false + category: game_data + description: "CRTC default external palette, 6x0 and 7x0 models" + source_ref: "C64.emu/src/vice/crtc/crtc-resources.c:102, C64.emu/src/vice/video/video-resources.c:916-923" + + - name: "pepto-pal.vpl" + path: "CBM-II/pepto-pal.vpl" + system: commodore-cbm-ii + required: false + category: game_data + description: "VIC-II default external palette, 5x0 models" + source_ref: "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/video/video-resources.c:916-923" + + # ---------------------------------------------------------------- DRIVES/ + - name: "dos1541ii-251968-03.bin" + path: "DRIVES/dos1541ii-251968-03.bin" + required: false + min_size: 16384 + max_size: 32768 + validation: [size] + description: "1541-II DOS, default unit 8 on C64, SuperCPU and DTV" + source_ref: "C64.emu/src/vice/drive/driverom.h:40-41,90, C64.emu/src/vice/drive/iec/iecrom.c:107,182, C64.emu/src/vice/c64/c64drive.c:43" + + - name: "dos1541-325302-01+901229-05.bin" + path: "DRIVES/dos1541-325302-01+901229-05.bin" + required: false + min_size: 16384 + max_size: 32768 + validation: [size] + description: "1541 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:38-39,89, C64.emu/src/vice/drive/iec/iecrom.c:100,172" + + - name: "dos1540-325302+3-01.bin" + path: "DRIVES/dos1540-325302+3-01.bin" + required: false + min_size: 16384 + max_size: 32768 + validation: [size] + description: "1540 DOS, default unit 8 on VIC-20" + source_ref: "C64.emu/src/vice/drive/driverom.h:36-37,88, C64.emu/src/vice/drive/iec/iecrom.c:93,162, C64.emu/src/vice/vic20/vic20drive.c:44" + + - name: "dos1570-315090-01.bin" + path: "DRIVES/dos1570-315090-01.bin" + required: false + size: 32768 + validation: [size] + description: "1570 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:43,93, C64.emu/src/vice/drive/iec/iecrom.c:115,193" + + - name: "dos1571-310654-05.bin" + path: "DRIVES/dos1571-310654-05.bin" + required: false + size: 32768 + validation: [size] + description: "1571 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:44,94, C64.emu/src/vice/drive/iec/iecrom.c:121,198" + + - name: "dos1571cr-318047-01.bin" + path: "DRIVES/dos1571cr-318047-01.bin" + required: false + size: 32768 + validation: [size] + description: "1571CR DOS, default unit 8 on C128" + source_ref: "C64.emu/src/vice/drive/driverom.h:45,95, C64.emu/src/vice/drive/iec128dcr/iec128dcrrom.c:51,68, C64.emu/src/vice/c128/c128drive.c:56" + + - name: "dos1581-318045-02.bin" + path: "DRIVES/dos1581-318045-02.bin" + required: false + size: 32768 + validation: [size] + description: "1581 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:46,96, C64.emu/src/vice/drive/iec/iecrom.c:127,203" + + - name: "dos1551-318008-01.bin" + path: "DRIVES/dos1551-318008-01.bin" + required: false + size: 16384 + validation: [size] + description: "1551 DOS, default unit 8 on Plus/4" + source_ref: "C64.emu/src/vice/drive/driverom.h:42,92, C64.emu/src/vice/drive/tcbm/tcbmrom.c:50,66, C64.emu/src/vice/plus4/plus4drive.c:46" + + - name: "dos2000-cs-33cc6f.bin" + path: "DRIVES/dos2000-cs-33cc6f.bin" + required: false + size: 32768 + validation: [size] + description: "CMD FD-2000 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:47,98, C64.emu/src/vice/drive/iec/iecrom.c:133,208" + + - name: "dos4000-fd-350022.bin" + path: "DRIVES/dos4000-fd-350022.bin" + required: false + size: 32768 + validation: [size] + description: "CMD FD-4000 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:48,99, C64.emu/src/vice/drive/iec/iecrom.c:139,213" + + - name: "bootromCMDHD-v2-80.bin" + path: "DRIVES/bootromCMDHD-v2-80.bin" + required: false + size: 16384 + validation: [size] + description: "CMD HD boot ROM" + source_ref: "C64.emu/src/vice/drive/driverom.h:49,100, C64.emu/src/vice/drive/iec/iecrom.c:145,218" + + - name: "dos2031-901484-03+05.bin" + path: "DRIVES/dos2031-901484-03+05.bin" + required: false + size: 16384 + validation: [size] + description: "2031 DOS, default unit 8 on PET and CBM-II" + source_ref: "C64.emu/src/vice/drive/driverom.h:50,73, C64.emu/src/vice/drive/ieee/ieeerom.c:56,107, C64.emu/src/vice/pet/petdrive.c:42" + + - name: "dos2040-901468-06+07.bin" + path: "DRIVES/dos2040-901468-06+07.bin" + required: false + size: 8192 + validation: [size] + description: "2040 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:53,76, C64.emu/src/vice/drive/ieee/ieeerom.c:63,115" + + - name: "dos3040-901468-11-13.bin" + path: "DRIVES/dos3040-901468-11-13.bin" + required: false + size: 12288 + validation: [size] + description: "3040 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:54,79, C64.emu/src/vice/drive/ieee/ieeerom.c:70,123" + + - name: "dos4040-901468-14-16.bin" + path: "DRIVES/dos4040-901468-14-16.bin" + required: false + size: 12288 + validation: [size] + description: "4040 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:55,82, C64.emu/src/vice/drive/ieee/ieeerom.c:77,131" + + - name: "dos1001-901887+8-01.bin" + path: "DRIVES/dos1001-901887+8-01.bin" + required: false + size: 16384 + validation: [size] + description: "1001, 8050 and 8250 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:51,70, C64.emu/src/vice/drive/ieee/ieeerom.c:84,141" + + - name: "dos9000-300516+7-revC.bin" + path: "DRIVES/dos9000-300516+7-revC.bin" + required: false + size: 16384 + validation: [size] + description: "D9090 and D9060 DOS" + source_ref: "C64.emu/src/vice/drive/driverom.h:52,85, C64.emu/src/vice/drive/ieee/ieeerom.c:91,149" diff --git a/emulators/citra-mmj.yml b/emulators/citra-mmj.yml new file mode 100644 index 00000000..a200a475 --- /dev/null +++ b/emulators/citra-mmj.yml @@ -0,0 +1,202 @@ +emulator: Citra MMJ +type: standalone +core_classification: community_fork +source: "https://github.com/weihuoya/citra" +upstream: "https://github.com/weihuoya/citra" +profiled_date: "2026-08-11" +source_commit: "302b0c3bc4312bc96489c11584a97664894b343f" +core_version: "20251112" +display_name: "Nintendo - 3DS (Citra MMJ)" +cores: + - citra-mmj +systems: + - nintendo-3ds +mode: standalone + +notes: | + Citra fork for Android, shipped as four APKs of the same build per release: + the org.citra.emu package, a com.antutu.ABenchMark package, and a + StorageAccess variant of each. The user directory is citra-emu at the root of + external storage, and Android/data/org.citra.emu/files/citra-emu for the + StorageAccess builds. External files live in sysdata/ and nand/ below it. + ref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:61-94, + src/common/common_paths.h:23-29, src/common/file_util.cpp:398-430 + + InitKeys reads boot9.bin, then the native firm titles in the NAND tree, then + sector0x96.bin for the New 3DS firm, then aes_keys.txt. Content left + encrypted stops loading with ErrorEncrypted, shown as "ROM Encrypted". + ref: src/core/hw/aes/key.cpp:497-508, src/core/file_sys/ncch_container.cpp:348-351, + src/android/jni/main_android.cpp:88-90 + + GetSharedFont tries the shared font system archive, then shared_font.bin, + then the regional BCFNT for the CFG region, and ends the session with + ErrorSystemFiles when the three fail. The embedded open-source font answers + title low ID 0x00014002 only, so CHN, KOR and TWN, which resolve to + 0x00014102, 0x00014202 and 0x00014302, depend on a file. Region defaults to + the code the ROM declares. + ref: src/core/hle/service/apt/apt.cpp:143, src/core/hle/service/apt/apt.cpp:256-272, + src/core/file_sys/archive_ncch.cpp:143-148, src/core/hle/service/cfg/cfg.cpp:176-181 + + Loading the four regional fonts from sysdata is specific to this fork. + ref: src/core/hle/service/apt/apt.cpp:184-228 + + The APK assets carry those fonts, three system archives, the DLP module and a + seeded CFG savegame, and the first run copies them into the user directory + without overwriting what is already there. System archives ship as split-off + RomFS, picked up beside the .app path the title tree resolves to. + ref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:192-207, + src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:368-399, + src/core/file_sys/ncch_container.cpp:726-741 + + LLE is opt-in per service module and reads the module from the NAND title + tree, falling back to HLE when it is absent. There is no title downloader: + system titles come from CIA files the user installs. + ref: src/core/hle/service/service.cpp:60-107, src/core/hle/service/service.cpp:197-213, + src/android/jni/main_android.cpp:278-289 + + ClCertA is read from NAND title 0x0004001b00010002 and decrypted with the + keyslot 0x0D normal key. HTTPS client authentication stays off without both. + ref: src/core/hle/service/http_c.cpp:810-884 + + Amiibo dumps are read as .bin files from amiibo/, cheat codes from + cheats/<title id>.txt, texture packs and mods from load/. + ref: src/android/app/src/main/java/org/citra/emu/ui/AmiiboDialog.java:57-64, + src/core/cheats/cheats.cpp:93-110, src/core/custom_tex_cache.cpp:67, + src/core/file_sys/ncch_container.cpp:359-365 + +files: + - name: boot9.bin + path: sysdata/boot9.bin + system: nintendo-3ds + required: false + size: 65536 + validation: [size] + description: "ARM9 bootrom" + note: "AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0. Both readers bail on any other size." + source_ref: "src/core/hw/aes/key.cpp:135-205, src/core/hw/rsa/rsa.cpp:49-80" + + - name: aes_keys.txt + path: sysdata/aes_keys.txt + system: nintendo-3ds + required: false + description: "AES key slots" + note: "One name=hex pair per line, slot0x<NN>Key<X|Y|N> and common<N>. Read last, so it overrides what boot9.bin and the native firm titles set." + source_ref: "src/core/hw/aes/key.cpp:428-493, src/core/hw/aes/key.cpp:497-508" + + - name: sector0x96.bin + path: sysdata/sector0x96.bin + system: nintendo-3ds + required: false + min_size: 17 + validation: [size] + description: "New 3DS NAND secret sector" + note: "First 16 bytes decrypt the slot 0x15 KeyX of the New 3DS safe mode native firm, title 0x0004013820000003. A file of 16 bytes or less trips a live assert: Android compiles out ASSERT_MSG, not ASSERT." + source_ref: "src/core/hw/aes/key.cpp:309-345, src/core/hw/aes/key.cpp:380-386, src/common/assert.h:30-35, src/common/assert.h:59-62" + + - name: seeddb.bin + path: sysdata/seeddb.bin + system: nintendo-3ds + required: false + description: "game seed database" + note: "Seed-encrypted titles from firmware 9.6 onwards. An empty database is written when the file is absent." + source_ref: "src/core/file_sys/seed_db.cpp:12-57" + + - name: shared_font.bin + path: sysdata/shared_font.bin + system: nintendo-3ds + required: false + hle_fallback: true + description: "system shared font, legacy dump" + note: "Copied whole into the shared memory block, so the file carries the 0x80 byte APT header. Tried after the system archive and before the regional BCFNT files." + source_ref: "src/core/hle/service/apt/apt.cpp:230-246, src/core/hle/service/apt/apt.cpp:256-272" + + - name: cbf_std.bcfnt + path: sysdata/cbf_std.bcfnt + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + region: [japan, north-america, europe, australia] + description: "shared font for JPN, USA, EUR and AUS" + note: "Read to offset 0x80 of the shared memory block, so the file is a bare uncompressed BCFNT. Selected for every CFG region other than CHN, KOR and TWN, where the embedded open-source font already answers the archive request." + source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/file_sys/archive_ncch.cpp:143-148" + + - name: cbf_zh-Hans-CN.bcfnt + path: sysdata/cbf_zh-Hans-CN.bcfnt + system: nintendo-3ds + required: false + bundled: true + region: [china] + description: "shared font for CHN" + note: "Selected when the CFG region is CHN. The embedded font does not cover archive 0x00014102, so the session ends with ErrorSystemFiles without this file or shared_font.bin." + source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272" + + - name: cbf_ko-Hang-KR.bcfnt + path: sysdata/cbf_ko-Hang-KR.bcfnt + system: nintendo-3ds + required: false + bundled: true + region: [south-korea] + description: "shared font for KOR" + note: "Selected when the CFG region is KOR. The embedded font does not cover archive 0x00014202, so the session ends with ErrorSystemFiles without this file or shared_font.bin." + source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272" + + - name: cbf_zh-Hant-TW.bcfnt + path: sysdata/cbf_zh-Hant-TW.bcfnt + system: nintendo-3ds + required: false + bundled: true + region: [taiwan] + description: "shared font for TWN" + note: "Selected when the CFG region is TWN. The embedded font does not cover archive 0x00014302, so the session ends with ErrorSystemFiles without this file or shared_font.bin." + source_ref: "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272" + + - name: "00000000.app.romfs" + path: nand/00000000000000000000000000000000/title/0004009b/00010202/content/00000000.app.romfs + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + description: "Mii data system archive, title 0x0004009b00010202" + note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary." + source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:132-136" + + - name: "00000000.app.romfs" + path: nand/00000000000000000000000000000000/title/0004009b/00010402/content/00000000.app.romfs + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + description: "country list system archive, title 0x0004009b00010402" + note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary." + source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:137-142" + + - name: "00000000.app.romfs" + path: nand/00000000000000000000000000000000/title/000400db/00010302/content/00000000.app.romfs + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + description: "bad word list system archive, title 0x000400db00010302" + note: "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary." + source_ref: "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:150-157" + + - name: "00000000.tmd" + path: nand/00000000000000000000000000000000/title/00040130/00002802/content/00000000.tmd + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + description: "title metadata of the DLP module, title 0x0004013000002802" + note: "Read to resolve the content ID of index 0, which the shipped metadata gives as 0x1f. Without it the path falls back to content ID 0 and the module is not found." + source_ref: "src/core/hle/service/am/am.cpp:466-501" + + - name: "0000001f.app" + path: nand/00000000000000000000000000000000/title/00040130/00002802/content/0000001f.app + system: nintendo-3ds + required: false + bundled: true + hle_fallback: true + description: "DLP system module, title 0x0004013000002802" + note: "Loaded as a process when LLE is enabled for DLP, otherwise the HLE service is installed." + source_ref: "src/core/hle/service/service.cpp:78, src/core/hle/service/service.cpp:197-213"