diff --git a/emulators/mesence.yml b/emulators/mesence.yml new file mode 100644 index 00000000..ea67602f --- /dev/null +++ b/emulators/mesence.yml @@ -0,0 +1,451 @@ +emulator: MesenCE +type: standalone +core_classification: enhanced_fork +source: "https://github.com/nesdev-org/MesenCE" +upstream: "https://github.com/SourMesen/Mesen2" +profiled_date: "2026-08-06" +core_version: "2.2.1" +display_name: "Multi-System (MesenCE)" +cores: [mesence] +systems: + - nintendo-nes + - nintendo-fds + - nintendo-snes + - nintendo-satellaview + - nintendo-sufami-turbo + - nintendo-super-game-boy + - nintendo-gb + - nintendo-gbc + - nintendo-gba + - nec-pc-engine + - nec-pc-engine-cd + - nec-supergrafx + - sega-mastersystem + - sega-gamegear + - sega-sg1000 + - coleco-colecovision + - bandai-wswan + - bandai-wswanc + - pocket-challenge-v2 + +notes: | + MesenCE is the community edition of Mesen2, a multi-system emulator + covering NES/FDS, SNES (with Satellaview, Sufami Turbo, Super Game Boy), + GB/GBC/GBA, PC Engine (including CD-ROM and SuperGrafx), SMS/Game Gear/ + SG-1000/ColecoVision and WonderSwan (including Pocket Challenge V2). + + All firmware is loaded from a flat /Firmware/ folder + (FolderUtilities::GetFirmwareFolder, Utilities/FolderUtilities.cpp:81-91). + The core enforces exact file sizes at load time (FirmwareHelper.h + AttemptLoadFirmware). The UI additionally knows SHA256 values per file + (UI/Interop/FirmwareTypeExtensions.cs) and warns on mismatch when + importing through the firmware prompt, but a mismatched file can still + be used. The sha256 values below come from that table. + + SNES DSP-1/1B/2/3/4 and ST010/ST011 firmware is loaded from the combined + file listed below, or from a split pair .program.rom + .data.rom + (FirmwareHelper.h AttemptLoadDspFirmware). ROM dumps with the firmware + appended to the game ROM need no external file (LoadDspFirmware embedded + path, FirmwareHelper.h:131-135). + + GB/GBC/SGB boot ROM images are compiled into the core + (Core/Gameboy/GbBootRom.h:8,49,99); the external files below override them. + Super Game Boy mode falls back to the plain GB core when SGB1.sfc/SGB2.sfc + is missing (BaseCartridge.cpp:698-717). + + Satellaview data broadcasts are read from /Satellaview/ as + BSX-.bin (BsxStream.cpp:67-74). Five stream files and + MesenNesDB.txt ship inside the application binary (Dependencies.zip) and + are extracted to the home folder at startup; user-provided replacements + are preserved (UI/Utilities/DependencyHelper.cs:14-66). NES and SNES + cheat databases (CheatDb.Nes.json, CheatDb.Snes.json) are read directly + from the embedded archive and never touch the filesystem + (DependencyHelper.cs GetFileContent, CheatDatabaseViewModel.cs:33). + + HdPacks are per-game texture/audio replacements under /HdPacks/, + game content rather than system files. + +files: + # ------------------------------------------------------- + # SNES coprocessor firmware + # ------------------------------------------------------- + - name: "dsp1.rom" + path: "Firmware/dsp1.rom" + system: nintendo-snes + required: true + size: 8192 + validation: [size] + sha256: "91e87d11e1c30d172556bed2211cce2efa94ba595f58c5d264809ef4d363a97b" + note: "DSP-1 program+data (0x1800+0x800). Split pair dsp1.program.rom + dsp1.data.rom also accepted. Not needed when the game dump embeds the firmware." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:102, Core/Shared/FirmwareHelper.h:59-79,130-152" + + - name: "dsp1b.rom" + path: "Firmware/dsp1b.rom" + system: nintendo-snes + required: true + size: 8192 + validation: [size] + sha256: "d789cb3c36b05c0b23b6c6f23be7aa37c6e78b6ee9ceac8d2d2aa9d8c4d35fa9" + note: "DSP-1B revision. Split pair dsp1b.program.rom + dsp1b.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:103, Core/Shared/FirmwareHelper.h:59-79" + + - name: "dsp2.rom" + path: "Firmware/dsp2.rom" + system: nintendo-snes + required: true + size: 8192 + validation: [size] + sha256: "03ef4ef26c9f701346708cb5d07847b5203cf1b0818bf2930acd34510ffdd717" + note: "DSP-2 (Dungeon Master). Split pair dsp2.program.rom + dsp2.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:104, Core/Shared/FirmwareHelper.h:59-79" + + - name: "dsp3.rom" + path: "Firmware/dsp3.rom" + system: nintendo-snes + required: true + size: 8192 + validation: [size] + sha256: "0971b08f396c32e61989d1067dddf8e4b14649d548b2188f7c541b03d7c69e4e" + note: "DSP-3 (SD Gundam GX). Split pair dsp3.program.rom + dsp3.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:105, Core/Shared/FirmwareHelper.h:59-79" + + - name: "dsp4.rom" + path: "Firmware/dsp4.rom" + system: nintendo-snes + required: true + size: 8192 + validation: [size] + sha256: "752d03b2d74441e430b7f713001fa241f8bbcfc1a0d890ed4143f174dbe031da" + note: "DSP-4 (Top Gear 3000). Split pair dsp4.program.rom + dsp4.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:106, Core/Shared/FirmwareHelper.h:59-79" + + - name: "st010.rom" + path: "Firmware/st010.rom" + system: nintendo-snes + required: true + size: 53248 + validation: [size] + sha256: "fa9bced838fedea11c6f6ace33d1878024bdd0d02cc9485899d0bdd4015ec24c" + note: "ST010 (F1 ROC II) program+data (0xC000+0x1000). Split pair st010.program.rom + st010.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:107, Core/Shared/FirmwareHelper.h:59-79" + + - name: "st011.rom" + path: "Firmware/st011.rom" + system: nintendo-snes + required: true + size: 53248 + validation: [size] + sha256: "8b2b3f3f3e6e29f4d21d8bc736b400bc988b7d2214ebee15643f01c1fee2f364" + note: "ST011 (Hayazashi Nidan Morita Shogi) program+data. Split pair st011.program.rom + st011.data.rom also accepted." + source_ref: "Core/SNES/Coprocessors/DSP/NecDsp.cpp:108, Core/Shared/FirmwareHelper.h:59-79" + + - name: "st018.rom" + path: "Firmware/st018.rom" + system: nintendo-snes + required: true + size: 163840 + validation: [size] + sha256: "6df209ab5d2524d1839c038be400ae5eb20dafc14a3771a3239cd9e8acd53806" + note: "ST018 ARM coprocessor (Hayazashi Nidan Morita Shogi 2). Missing file leaves the coprocessor ROMs zero-filled." + source_ref: "Core/SNES/Coprocessors/ST018/St018.cpp:32-36, Core/Shared/FirmwareHelper.h:153-171" + + - name: "BS-X.bin" + path: "Firmware/BS-X.bin" + system: nintendo-satellaview + required: true + size: 1048576 + min_size: 32768 + validation: [size] + sha256: "27cfdb99f7e4252bf3740d420147b63c4c88616883bc5e7fe43f2f30bf8c8cbb,a49827b45ff9ac9cf5b4658190e1428e59251bc82d8a63d8e9e0f71e439f008f,3ce321496edc5d77038de2034eb3fb354d7724afd0bc7fd0319f3eb5d57b984d,77d94d64d745014bf8b51280a4204056cdeb9d41ea30eae80dbc006675bebef8" + note: "BS-X application cartridge ROM, mandatory for .bs Satellaview files. Core accepts any file of 32 KB or more; the known dumps are 1 MB (Japan/English, with and without DRM)." + source_ref: "Core/SNES/BaseCartridge.cpp:60-64, Core/Shared/FirmwareHelper.h:81-92,172-188" + + - name: "SufamiTurbo.sfc" + path: "Firmware/SufamiTurbo.sfc" + system: nintendo-sufami-turbo + required: true + size: 262144 + validation: [size] + sha256: "edacb453da14f825f05d1134d6035f4bf034e55f7cfb97c70c4ee107eabc7342" + note: "Sufami Turbo base cartridge BIOS, mandatory for .st files." + source_ref: "Core/SNES/Coprocessors/SufamiTurbo/SufamiTurbo.h:38-42, Core/Shared/FirmwareHelper.h:189-207" + + - name: "SGB1.sfc" + path: "Firmware/SGB1.sfc" + system: nintendo-super-game-boy + required: false + size: 262144 + validation: [size] + sha256: "bba9c269273bedb9b38bd5eb23bfaa6e509b8decc7cb80bb5513905af04f4ceb,c6c4daab5c899b69900c460787de6089edabe94b760f96d9f583d30cc0a5bb30,a75160f7b89b1f0e20fd2f6441bb86285c7378db5035ef6885485eaff6059376" + note: "Super Game Boy SNES-side ROM (Rev 0/1/2). Without it, GB games run on the plain GB core instead of SGB mode." + source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228" + + - name: "SGB2.sfc" + path: "Firmware/SGB2.sfc" + system: nintendo-super-game-boy + required: false + size: 524288 + validation: [size] + sha256: "c172498a23d1176672931bab33b629c7d28f914a43dca9e540b8af1b37ccf2c6" + note: "Super Game Boy 2 SNES-side ROM, used when the SGB2 option is enabled." + source_ref: "Core/SNES/BaseCartridge.cpp:698-714, Core/Shared/FirmwareHelper.h:208-228" + + # ------------------------------------------------------- + # Game Boy boot ROMs (embedded copies used when absent) + # ------------------------------------------------------- + - name: "dmg_boot.bin" + path: "Firmware/dmg_boot.bin" + aliases: ["gb_bios.bin"] + system: nintendo-gb + required: false + size: 256 + validation: [size] + sha256: "cf053eccb4ccafff9e67339d4e78e98dce7d1ed59be819d2a1ba2232c6fce1c7,26e71cf01e301e5dc40e987cd2ecbf6d0276245890ac829db2a25323da86818e" + note: "DMG boot ROM override. An embedded copy is used when the file is absent." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/Gameboy.cpp:102-110, Core/Gameboy/GbBootRom.h:8" + + - name: "cgb_boot.bin" + path: "Firmware/cgb_boot.bin" + aliases: ["gbc_bios.bin"] + system: nintendo-gbc + required: false + size: 2304 + validation: [size] + sha256: "b4f2e416a35eef52cba161b159c7c8523a92594facb924b3ede0d722867c50c7,3a307a41689bee99a9a32ea021bf45136906c86b2e4f06c806738398e4f92e45" + note: "GBC boot ROM override. An embedded copy is used when the file is absent." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:99" + + - name: "sgb_boot.bin" + path: "Firmware/sgb_boot.bin" + aliases: ["sgb_bios.bin"] + system: nintendo-super-game-boy + required: false + size: 256 + validation: [size] + sha256: "0e4ddff32fc9d1eeaae812a157dd246459b00c9e14f2f61751f661f32361e360" + note: "SGB1 GB-side boot ROM override. An embedded copy is used when the file is absent." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49" + + - name: "sgb2_boot.bin" + path: "Firmware/sgb2_boot.bin" + aliases: ["sgb_bios.bin"] + system: nintendo-super-game-boy + required: false + size: 256 + validation: [size] + sha256: "fd243c4fb27008986316ce3df29e9cfbcdc0cd52704970555a8bb76edbec3988" + note: "SGB2 GB-side boot ROM override. An embedded copy is used when the file is absent." + source_ref: "Core/Shared/FirmwareHelper.h:229-271, Core/Gameboy/GbBootRom.h:49" + + # ------------------------------------------------------- + # Game Boy Advance + # ------------------------------------------------------- + - name: "gba_bios.bin" + path: "Firmware/gba_bios.bin" + system: nintendo-gba + required: true + size: 16384 + validation: [size] + sha256: "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570" + note: "GBA BIOS. When missing, the boot ROM region is zero-filled and games calling BIOS routines fail; there is no HLE replacement." + source_ref: "Core/GBA/GbaConsole.cpp:76-79, Core/Shared/FirmwareHelper.h:272-291" + + # ------------------------------------------------------- + # NES / Famicom + # ------------------------------------------------------- + - name: "disksys.rom" + path: "Firmware/disksys.rom" + aliases: ["FdsBios.bin"] + system: nintendo-fds + required: true + size: 8192 + validation: [size] + sha256: "99c18490ed9002d9c6d999b9d8d15be5c051bdfa7cc7e73318053c9a994b0178,a0a9d57cbace21bf9c85c2b85e86656317f0768d7772acc90c7411ab1dbff2bf" + note: "FDS BIOS. When missing, the BIOS region is zero-filled and disk games cannot boot." + source_ref: "Core/NES/Mappers/FDS/Fds.cpp:21-28, Core/Shared/FirmwareHelper.h:292-310" + + - name: "StudyBox.bin" + path: "Firmware/StudyBox.bin" + system: nintendo-nes + required: false + size: 262144 + validation: [size] + sha256: "365f84c86f7f7c3aaa2042d78494d41448e998ec5a89ac1b5fecb452951d514c" + note: "Famicom Study Box BIOS, mandatory for .studybox tape dumps only. When missing, the BIOS region is zero-filled." + source_ref: "Core/NES/Mappers/StudyBox.h:64-70, Core/Shared/FirmwareHelper.h:311-329" + + - name: "ymf288_adpcm_rom.bin" + path: "Firmware/ymf288_adpcm_rom.bin" + system: nintendo-nes + required: false + size: 8192 + validation: [size] + sha256: "53afd0fa9c62eda3e2be939e23f3adf48a2af8ad37bb1640261726c5d5adeba8" + note: "YMF288 ADPCM rhythm ROM for EPSM expansion audio (NES 2.0 header flag). Without it, EPSM sound is incorrect." + source_ref: "Core/NES/BaseMapper.cpp:763-768, Core/Shared/FirmwareHelper.h:439-458" + + - name: "lh5323m1.bin" + path: "Firmware/lh5323m1.bin" + system: nintendo-nes + required: false + size: 262144 + note: "Famicom Network System kanji ROM. Read without size validation; a zero-filled 256 KB buffer is used when absent." + source_ref: "Core/NES/Mappers/Nintendo/FnsMmc1.h:31-36" + + - name: "MesenNesDB.txt" + path: "MesenNesDB.txt" + category: game_data + system: nintendo-nes + required: false + size: 548608 + sha256: "7eee6516f351ccc7db286587917bec415a1d8042ff5ef87c279f38200a3418dd" + note: "NES game database for mapper and input detection, read from the home folder root. Deployed automatically from the application's embedded Dependencies.zip." + source_ref: "Core/NES/GameDatabase.cpp:92-101, UI/Utilities/DependencyHelper.cs:14-66" + + # ------------------------------------------------------- + # PC Engine + # ------------------------------------------------------- + - name: "[BIOS] Super CD-ROM System (Japan) (v3.0).pce" + path: "Firmware/[BIOS] Super CD-ROM System (Japan) (v3.0).pce" + aliases: ["syscard3.pce"] + system: nec-pc-engine-cd + required: true + size: 262144 + validation: [size] + sha256: "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce" + note: "Super CD-ROM System card, mandatory for CD games. Load fails without it." + source_ref: "Core/PCE/PceConsole.cpp:61-63,151-164, Core/Shared/FirmwareHelper.h:330-349" + + - name: "[BIOS] Games Express CD Card (Japan).pce" + path: "Firmware/[BIOS] Games Express CD Card (Japan).pce" + aliases: ["gecard.pce"] + system: nec-pc-engine-cd + required: false + size: 32768 + validation: [size] + sha256: "4b86bb96a48a4ca8375fc0109631d0b1d64f255a03b01de70594d40788ba6c3d,da173b20694c2b52087b099b8c44e471d3ee08a666c90d4afd997f8e1382add8" + note: "Games Express CD card, mandatory for Games Express discs (auto-detected by sector signature). Exactly 0x8000 or 0x4000 bytes accepted." + source_ref: "Core/PCE/PceConsole.cpp:153-160, Core/Shared/FirmwareHelper.h:350-368" + + # ------------------------------------------------------- + # SMS / Game Gear / ColecoVision + # ------------------------------------------------------- + - name: "bios.sms" + path: "Firmware/bios.sms" + system: sega-mastersystem + required: false + sha256: "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50,1eb16fc06ceaf05651d7cfd69d1713e6ddccc4349a511f6fd17e037d71f9d85b,67846e26764bd862f19179294347f7353a4166b62ac4198a5ec32933b7da486e,cb01de3464797a77b52e82f5f9b05398540df8c1151d31128d49584028589062,6f4e6de10f1d07bda695c629c67457bb0248eeb8ffa0c61a2742b8529274de30,0c08e17b0ecc3967e1094f12841fdc97fdcbbf986e3bf9a06b35b69e7d95e4cd,1a73bc6e1a9973b98432774a1480b3ac1259027a97590d5e67d52745159abbbc,e9eb04ec80ded8658f765c4eca75cdbe23cbc7d8fed73f9c3db7a868dbf649ff,13c0639cc037167f53e6151dbdea013758c3d09a76b064a894bf15c39c0a3897,aaf39841be10f9cd6908a95a7451c3a0c8ac77125eb412b7a41cad260c888ab5,57abf3c00c82a8e042ebeb2bfe412adac9ba005e9009845236390de3ee645248,c51ec80b7a609c5ee3d203ceee2b602ae4dfb4479caf15dc1d030c40c0364e93" + note: "Master System boot ROM, mapped when present. Loaded without any size check; known dumps are 8/16/128/256 KB." + source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380" + + - name: "bios.gg" + path: "Firmware/bios.gg" + system: sega-gamegear + required: false + size: 1024 + sha256: "8c8a21335038285cfa03dc076100c1f0bfadf3e4ff70796f11f3dfaaab60eee2" + note: "Game Gear boot ROM, mapped when present. Loaded without any size check." + source_ref: "Core/SMS/SmsConsole.cpp:71-76, Core/Shared/FirmwareHelper.h:369-380" + + - name: "bios.col" + path: "Firmware/bios.col" + system: coleco-colecovision + required: true + size: 8192 + validation: [size] + sha256: "990bf1956f10207d8781b619eb74f89b00d921c8d45c95c334c16c8cceca09ad,fb4a898eb93b19b36773d87a6c70eb28f981b2686bebdd2d431b05dcdf9cffd4" + note: "ColecoVision BIOS. The system boots through it; games cannot start without it." + source_ref: "Core/SMS/SmsConsole.cpp:71-74, Core/Shared/FirmwareHelper.h:381-399" + + # ------------------------------------------------------- + # WonderSwan + # ------------------------------------------------------- + - name: "bootrom.ws" + path: "Firmware/bootrom.ws" + system: bandai-wswan + required: false + size: 4096 + validation: [size] + sha256: "bf4480dbea1c47c8b54ce7be9382bc1006148f431fbe4277e136351fa74f635e" + note: "WonderSwan boot ROM, also used for Pocket Challenge V2. Loaded only when the UseBootRom setting is enabled (default off); without it the boot screen is skipped." + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/SettingTypes.h:806, Core/Shared/FirmwareHelper.h:400-438" + + - name: "bootrom.wsc" + path: "Firmware/bootrom.wsc" + system: bandai-wswanc + required: false + size: 8192 + validation: [size] + sha256: "f5a5c044d84ce1681f94e9ef74287cb989784497be5bd5108df17908dfa55db2" + note: "WonderSwan Color boot ROM. Loaded only when the UseBootRom setting is enabled." + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438" + + - name: "bootrom_sc.wsc" + path: "Firmware/bootrom_sc.wsc" + system: bandai-wswanc + required: false + size: 8192 + validation: [size] + sha256: "82e96addf5ab1ce09a84b6eedaa904e4ca432756851f7e0cc0649006c183834d" + note: "SwanCrystal boot ROM. Loaded only when the UseBootRom setting is enabled and the SwanCrystal model is selected." + source_ref: "Core/WS/WsConsole.cpp:145-150, Core/Shared/FirmwareHelper.h:400-438" + + # ------------------------------------------------------- + # Satellaview broadcast data (auto-deployed) + # ------------------------------------------------------- + - name: "BSX0120-0.bin" + path: "Satellaview/BSX0120-0.bin" + category: game_data + system: nintendo-satellaview + required: false + size: 34 + sha256: "ba0c17b5786724959bc206714fc18f708c16fdcd77f8fb19aaf9768338e3ce01" + note: "Satellaview data stream for channel 0120 (time channel). Deployed automatically from the application's embedded Dependencies.zip; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + + - name: "BSX0121-0.bin" + path: "Satellaview/BSX0121-0.bin" + category: game_data + system: nintendo-satellaview + required: false + size: 34 + sha256: "fbe51a53638dd366b50ea53adf92f54447667d7767c502e508d89b008e31c53f" + note: "Satellaview data stream for channel 0121. Deployed automatically; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + + - name: "BSX0122-0.bin" + path: "Satellaview/BSX0122-0.bin" + category: game_data + system: nintendo-satellaview + required: false + size: 1031 + sha256: "a0329450e1d42cd18d30070a86e0e481a876cb5c9cfbaab4a0d8895150976ee7" + note: "Satellaview data stream for channel 0122. Deployed automatically; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + + - name: "BSX0123-0.bin" + path: "Satellaview/BSX0123-0.bin" + category: game_data + system: nintendo-satellaview + required: false + size: 16 + sha256: "dbf5ef12ce586712ee666fc5805e6dfcaa1e253fdd36644f773909514868a590" + note: "Satellaview data stream for channel 0123. Deployed automatically; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + + - name: "BSX0124-0.bin" + path: "Satellaview/BSX0124-0.bin" + category: game_data + system: nintendo-satellaview + required: false + size: 97 + sha256: "4d7d7bf5afe5c4f71b96965e58003816c70c13e8af9b581431504d5e52a0cec1" + note: "Satellaview data stream for channel 0124. Deployed automatically; user replacements are preserved." + source_ref: "Core/SNES/Coprocessors/BSX/BsxStream.cpp:67-74, UI/Utilities/DependencyHelper.cs:46-49" + +platform_details: + firmware_folder: "Firmware/" + firmware_size_check: exact + ui_hash_check: "sha256, advisory (UI/Interop/FirmwareTypeExtensions.cs)" + satellaview_streams: "Satellaview/BSX-.bin" + source_ref: "Utilities/FolderUtilities.cpp:81-91, Core/Shared/FirmwareHelper.h"