# emulators

id: mamemess
name: MAME MESS
type: libretro
classification: official_port
source: https://github.com/libretro/mame
upstream: https://github.com/mamedev/mame
source_commit: c4127c164af8fcf0aea781cc039aaf9b8044696d
profile_json:
{"core_classification": "official_port", "core_version": "0.287", "cores": ["mamemess"], "display_name": "Multi (MAME/MESS)", "emulator": "MAME MESS", "files": [{"category": "bios_zip", "contents": [{"crc32": "2ff7ec96", "name": "otp.dat", "sha1": "633365fd19a3d0f2ce56cb499b2577a5fb53e466", "size": 16384}], "name": "miuchiz.zip", "required": true, "source_ref": "src/mame/misc/miuchiz.cpp:227"}, {"category": "bios_zip", "contents": [{"crc32": "9b27c4a2", "name": "ekara.bin", "sha1": "d75dda7434933135d2f7e353840a9384e9a0d586", "size": 1048576}], "name": "ekara.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2930"}, {"category": "bios_zip", "contents": [{"crc32": "3c92d48d", "name": "ekara2.bin", "sha1": "450fbe53826cdb87ec797f84b9757987afcc1ec5", "size": 1048576}], "name": "ekaraa.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2905"}, {"category": "bios_zip", "contents": [{"crc32": "e459e43b", "name": "ekarajapan.bin", "sha1": "58b7f36a81571a2df5e812c118fdf68812a05abc", "size": 1048576}], "name": "ekaraj.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2932"}, {"category": "bios_zip", "contents": [{"crc32": "644f06b0", "name": "ekaragermany.bin", "sha1": "433e65a6ea029b67ee62b4b3de52ff3504cfdf16", "size": 2097152}], "name": "ekarag.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2933"}, {"category": "bios_zip", "contents": [{"crc32": "77925ab0", "name": "ekaraspanish.bin", "sha1": "402053e22e371c5f5e8069a4bf3b33841e742375", "size": 2097152}], "name": "ekaras.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2908"}, {"category": "bios_zip", "contents": [{"crc32": "6ad588fe", "name": "kr_isinger.bin", "sha1": "879da069ca8c126232a1b2dfcce25c8615540e48", "size": 1048576}], "name": "isinger.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2936"}, {"category": "bios_zip", "contents": [{"crc32": "dd9b3cd7", "name": "ekaraheadset.bin", "sha1": "baaf35d56fa45b6f995b8466331bb30f0035f734", "size": 2097152}], "name": "ekaraphs.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2939"}, {"category": "bios_zip", "contents": [{"crc32": "e459e43b", "name": "ekarajapan.bin", "sha1": "58b7f36a81571a2df5e812c118fdf68812a05abc", "size": 1048576}], "name": "epitch.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:3027"}, {"category": "bios_zip", "contents": [{"crc32": "ee71576e", "name": "ekaramix.bin", "sha1": "26f8c9edcbbed77e86a1cb5a0b91c92a16fef433", "size": 2097152}], "name": "ekaramix.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2919"}, {"category": "bios_zip", "contents": [{"crc32": "737d5d1a", "name": "ekara_ddr_ha010_81947.bin", "sha1": "a1043047056dd27bca69767ee2044461ec549465", "size": 2097152}], "name": "ddrfammt.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2948"}, {"category": "bios_zip", "contents": [{"crc32": "71d20afc", "name": "popira.bin", "sha1": "fb2ae023fc8a188c79b2d6550f737e06c05e12da", "size": 1048576}], "name": "popira.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2951"}, {"category": "bios_zip", "contents": [{"crc32": "785d8e21", "name": "kr_main.u2", "sha1": "7877ac33b57bdd8ceac6bda3b0006a3274ad4dce", "size": 1048576}], "name": "popirak.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2953"}, {"category": "bios_zip", "contents": [{"crc32": "6acd8be0", "name": "popira2.bin", "sha1": "8b6c812d37e2dc2f2531b0e47d84ad8485729dc5", "size": 2097152}], "name": "popira2.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2956"}, {"category": "bios_zip", "contents": [{"crc32": "037a8472", "name": "taikodepopira.bin", "sha1": "03cae465965935fc084fb906f8f5de7679f42dd1", "size": 2097152}], "name": "taikodp.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2959"}, {"category": "bios_zip", "contents": [{"crc32": "a7bedbd2", "name": "jumpingpopira.bin", "sha1": "d62d4ca660c8df14891217fb7b7a2b4a931ff35f", "size": 2097152}, {"crc32": "70a05af1", "name": "i2cmem.bin", "sha1": "e8f4ab51445777fe459f9ff09333f548c4e3507c", "size": 256}], "name": "jpopira.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2962"}, {"category": "bios_zip", "contents": [{"crc32": "ee22c764", "name": "evio.bin", "sha1": "f2b7e213eb78065a63ef484a619bcfc61299e30e", "size": 2097152}], "name": "evio.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2965"}, {"category": "bios_zip", "contents": [{"crc32": "02deddaa", "name": "robottransformer_unit.bin", "sha1": "7d7b54684f8b0b92daf02738560779c7df627b91", "size": 2097152}], "name": "tak_daig.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2944"}, {"category": "bios_zip", "contents": [{"crc32": "2ba6f3ab", "name": "sammyslotunit.bin", "sha1": "1c7fc0c85d817db1550d40c0258f424770e0bd81", "size": 2097152}], "name": "gcslottv.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2972"}, {"category": "bios_zip", "contents": [{"crc32": "6b91102a", "name": "hikara.u3", "sha1": "684dcfeaa8ac2888da2055617603494ce5fed93c", "size": 1048576}], "name": "hikara.zip", "required": true, "source_ref": "src/mame/tvgames/xavix.cpp:2951"}, {"category": "bios_zip", "contents": [{"crc32": "ebc77f3a", "description": "On-board BIOS ROM (Bally Professional Arcade)", "name": "astro.bin", "size": 8192}], "name": "astrocde.zip", "required": true, "source_ref": "src/mame/bally/astrohome.cpp:244-247", "system": "astrocde"}, {"category": "bios_zip", "contents": [{"crc32": "d7c517ba", "description": "Bally Home Library Computer BIOS", "name": "ballyhlc.bin", "size": 8192}], "name": "astrocdl.zip", "required": false, "source_ref": "src/mame/bally/astrohome.cpp:249-251", "system": "astrocde"}, {"category": "bios_zip", "contents": [{"crc32": "6eb53e79", "description": "Bally Computer System BIOS", "name": "bioswhit.bin", "size": 8192}], "name": "astrocdw.zip", "required": false, "source_ref": "src/mame/bally/astrohome.cpp:254-257", "system": "astrocde"}, {"category": "bios_zip", "contents": [{"crc32": "64f415c6", "description": "Character generator ROM", "name": "a2.chr", "size": 2048}, {"crc32": "c0a4ad3b", "description": "Integer BASIC ROM E0", "name": "341-0001-00.e0", "size": 2048}, {"crc32": "a99c2cf6", "description": "Integer BASIC ROM E8", "name": "341-0002-00.e8", "size": 2048}, {"crc32": "62230d38", "description": "Integer BASIC ROM F0", "name": "341-0003-00.f0", "size": 2048}, {"crc32": "020a86d0", "description": "Monitor ROM (original)", "name": "341-0004-00.f8", "size": 2048}, {"crc32": "079589c4", "description": "Autostart Monitor ROM", "name": "341-0020-00.f8", "size": 2048}], "name": "apple2.zip", "required": true, "source_ref": "src/mame/apple/apple2.cpp:774", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "64f415c6", "description": "Character generator ROM", "name": "341-0036.chr", "size": 2048}, {"crc32": "6f05f949", "description": "Applesoft BASIC ROM D0", "name": "341-0011.d0", "size": 2048}, {"crc32": "1f08087c", "description": "Applesoft BASIC ROM D8", "name": "341-0012.d8", "size": 2048}, {"crc32": "2b8d9a89", "description": "Applesoft BASIC ROM E0", "name": "341-0013.e0", "size": 2048}, {"crc32": "5719871a", "description": "Applesoft BASIC ROM E8", "name": "341-0014.e8", "size": 2048}, {"crc32": "9a04eecf", "description": "Applesoft BASIC ROM F0", "name": "341-0015.f0", "size": 2048}, {"crc32": "079589c4", "description": "Autostart Monitor ROM", "name": "341-0020-00.f8", "size": 2048}], "name": "apple2p.zip", "required": true, "source_ref": "src/mame/apple/apple2.cpp:900", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "b081df66", "description": "Character generator ROM", "name": "342-0133-a.chr", "size": 4096}, {"crc32": "e248835e", "description": "CPU ROM CD bank", "name": "342-0135-b.64", "size": 8192}, {"crc32": "fc3d59d8", "description": "CPU ROM EF bank", "name": "342-0134-a.64", "size": 8192}, {"crc32": "e47045f4", "description": "Keyboard ROM (US-Dvorak)", "name": "342-0132-c.e12", "size": 2048}], "name": "apple2e.zip", "required": true, "source_ref": "src/mame/apple/apple2e.cpp:5563", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "2651014d", "description": "Enhanced character generator ROM", "name": "342-0265-a.chr", "size": 4096}, {"crc32": "443aa7c4", "description": "Enhanced CPU ROM CD bank", "name": "342-0304-a.e10", "size": 8192}, {"crc32": "95e10034", "description": "Enhanced CPU ROM EF bank", "name": "342-0303-a.e8", "size": 8192}, {"crc32": "c506efb9", "description": "Enhanced keyboard ROM", "name": "341-0132-d.e12", "size": 2048}], "name": "apple2ee.zip", "required": true, "source_ref": "src/mame/apple/apple2e.cpp:5669", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "ce7144f6", "description": "Disk II 16-sector controller PROM", "name": "341-0027-a.p5", "size": 256}], "name": "a2diskiing.zip", "note": "Disk II NG 16-sector controller, default floppy device", "required": true, "source_ref": "src/devices/bus/a2bus/a2diskiing.cpp:40", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "b72a2c70", "description": "Disk II FDC PROM P6", "name": "341-0028-a.rom", "size": 256}], "name": "d2fdc.zip", "note": "Disk II FDC (Woz machine), alternative floppy controller", "required": true, "source_ref": "src/devices/machine/wozfdc.cpp:31", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "3ecafce5", "description": "CFFA 2.0 firmware (6502)", "name": "cffa20ee02.bin", "size": 4096}], "name": "a2cffa02.zip", "note": "CFFA 2.0 CompactFlash adapter (6502 firmware)", "required": false, "source_ref": "src/devices/bus/a2bus/a2cffa.cpp:33", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "528d1c57", "description": "SC-01 internal ROM", "name": "sc01.bin", "size": 512}], "name": "votrsc01.zip", "note": "Votrax SC-01 speech synthesis chip, shared device", "required": false, "source_ref": "src/devices/sound/votrax.cpp:46", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "fc416227", "description": "SC-01A internal ROM", "name": "sc01a.bin", "size": 512}], "name": "votrsc01a.zip", "note": "Votrax SC-01A speech synthesis chip, shared device", "required": false, "source_ref": "src/devices/sound/votrax.cpp:51", "system": "apple2"}, {"category": "bios_zip", "contents": [{"crc32": "e1c11fb0", "description": "ADB microcontroller ROM (M50740/50741)", "name": "341s0632-2.bin", "size": 4096}, {"crc32": "2d541944", "description": "Mega II character ROM", "name": "344s0047.bin", "size": 16384}, {"crc32": "8d410067", "description": "IIgs ROM03 FC-FD main CPU", "name": "341-0728", "size": 131072}, {"crc32": "18190283", "description": "IIgs ROM03 FE-FF main CPU", "name": "341-0748", "size": 131072}], "name": "apple2gs.zip", "required": true, "source_ref": "src/mame/apple/apple2gs.cpp:3868-3882", "system": "apple2gs"}, {"category": "bios_zip", "contents": [{"crc32": "8c57ff9f", "description": "SH-1 CPU internal mask ROM", "name": "hd6437021.lsi302", "size": 32768}, {"crc32": "8f51fa17", "description": "HN62434 sound/wave data mask ROM", "name": "hn62434fa.lsi352", "size": 524288}], "name": "casloopy.zip", "required": true, "source_ref": "src/mame/casio/casloopy.cpp:2105-2462", "system": "casio-loopy"}, {"category": "bios_zip", "contents": [{"crc32": "8f31f297", "description": "Z80 BASIC ROM", "name": "hn613128pc64.bin", "size": 16384}], "name": "pv2000.zip", "required": true, "source_ref": "src/mame/casio/pv2000.cpp:416-419", "system": "casio-pv2000"}, {"category": "bios_zip", "contents": [{"crc32": "3aa93ef3", "description": "OS7 operating system ROM", "name": "os7.u2", "size": 8192}, {"crc32": "565b364a", "description": "SmartWriter ROM bank 1", "name": "alf @1 rev 57 e3d5.u8", "size": 8192}, {"crc32": "44a1cff4", "description": "SmartWriter ROM bank 2", "name": "alf @2 rev 57 ae6a.u20", "size": 8192}, {"crc32": "77657b90", "description": "SmartWriter ROM bank 3", "name": "alf @3 rev 57 8534.u21", "size": 8192}, {"crc32": "ef6403c5", "description": "EOS (Elementary Operating System)", "name": "eos 6 rev 57 08dd.u22", "size": 8192}, {"crc32": "58d86a2a", "description": "SmartWriter word processor", "name": "wp_r80.rom", "size": 32768}, {"crc32": "035a7a3d", "description": "Master 6801 ADAMnet controller", "name": "master rev a 174b.u6", "size": 2048}], "name": "adam.zip", "required": true, "source_ref": "src/mame/coleco/adam.cpp:1114-1128", "system": "coleco-adam"}, {"category": "bios_zip", "contents": [{"crc32": "ef204746", "description": "Keyboard 6801 MCU ROM", "name": "keyboard.u2", "size": 2048}], "name": "adam_kb.zip", "required": true, "source_ref": "src/devices/bus/adamnet/kb.cpp:33-36", "system": "coleco-adam"}, {"category": "bios_zip", "contents": [{"crc32": "e8db783b", "description": "Printer 6801 MCU ROM", "name": "printer.u2", "size": 2048}], "name": "adam_prn.zip", "required": true, "source_ref": "src/devices/bus/adamnet/printer.cpp:33-36", "system": "coleco-adam"}, {"category": "bios_zip", "contents": [{"crc32": "6b9ea1cf", "description": "Digital Data Pack 6801 MCU ROM", "name": "tape rev a 8865.u24", "size": 2048}], "name": "adam_ddp.zip", "required": true, "source_ref": "src/devices/bus/adamnet/ddp.cpp:35-38", "system": "coleco-adam"}, {"category": "bios_zip", "contents": [{"crc32": "4b0b7143", "description": "FDC 160KB SSDD 6801 MCU ROM", "name": "adam disk u10 ad 31 rev a 09-27-84.u10", "size": 4096}], "name": "adam_fdc.zip", "required": true, "source_ref": "src/devices/bus/adamnet/fdc.cpp:65-69", "system": "coleco-adam"}, {"category": "bios_zip", "name": "adam_fdc_320kb.zip", "required": false, "source_ref": "src/devices/bus/adamnet/fdc.cpp:76-85", "system": "coleco-adam"}, {"category": "bios_zip", "name": "adam_fdc_a720dipi.zip", "required": false, "source_ref": "src/devices/bus/adamnet/fdc.cpp:92-96", "system": "coleco-adam"}, {"category": "bios_zip", "name": "adam_fdc_fp720at.zip", "required": false, "source_ref": "src/devices/bus/adamnet/fdc.cpp:103-107", "system": "coleco-adam"}, {"category": "bios_zip", "name": "adam_fdc_mihddd.zip", "required": false, "source_ref": "src/devices/bus/adamnet/fdc.cpp:114-117", "system": "coleco-adam"}, {"category": "bios_zip", "name": "adam_spi.zip", "required": false, "source_ref": "src/devices/bus/adamnet/spi.cpp:25-28", "system": "coleco-adam"}, {"category": "bios_zip", "contents": [{"crc32": "279e33d1", "description": "Intel 8048 main CPU ROM", "name": "ins8048-11kdp_n.u5", "size": 1024}, {"crc32": "81e95975", "description": "National COP411L sound CPU ROM", "name": "cop411l-kcn_n.u8", "size": 512}], "name": "advision.zip", "required": true, "source_ref": "src/mame/entex/advision.cpp:357", "system": "entex-advision"}, {"category": "bios_zip", "contents": [{"crc32": "a194ea53", "description": "IPL boot ROM", "name": "ipl.rom", "size": 8192}], "name": "rx78.zip", "note": "MACHINE_NOT_WORKING.", "required": true, "source_ref": "src/mame/bandai/rx78.cpp:559", "system": "bandai-rx78"}, {"category": "bios_zip", "contents": [{"crc32": "c3c590c6", "description": "Microsoft BASIC ROM", "name": "crvision.u20", "size": 2048}], "name": "crvision.zip", "required": true, "source_ref": "src/mame/vtech/crvision.cpp:934-937", "system": "crvision"}, {"category": "bios_zip", "contents": [{"crc32": "05602697", "description": "FunVision alternate BIOS ROM", "name": "funboot.rom", "size": 2048}], "name": "fnvision.zip", "note": "FunVision clone with alternate BIOS", "required": false, "source_ref": "src/mame/vtech/crvision.cpp:939-942", "system": "crvision"}, {"category": "bios_zip", "contents": [{"crc32": "4dc35c39", "description": "Laser 2001 BASIC + OS ROM", "name": "laser2001.rom", "size": 16384}], "name": "lasr2001.zip", "note": "VTech Laser 2001 home computer (CreatiVision successor)", "required": false, "source_ref": "src/mame/vtech/crvision.cpp:950-953", "system": "crvision"}, {"category": "bios_zip", "contents": [{"crc32": "702f4cf5", "description": "ROM bank 0-1", "name": "01", "size": 8192}, {"crc32": "46489d88", "description": "ROM bank 2-3", "name": "23", "size": 8192}], "name": "manager.zip", "note": "Salora Manager (Finnish variant)", "required": false, "source_ref": "src/mame/vtech/crvision.cpp:955-959", "system": "crvision"}, {"category": "bios_zip", "contents": [{"crc32": "613de12c", "description": "BASIC V2.0 ROM (default)", "name": "vtechv20.u12", "size": 16384}, {"crc32": "f7df980f", "description": "BASIC V2.1 ROM (hack)", "name": "vtechv21.u12", "size": 16384}], "name": "laser310.zip", "note": "Z80-based home computer (1984). Clones: VZ-300, Laser 310 SHRG.", "required": true, "source_ref": "src/mame/vtech/vtech1.cpp:602-608", "system": "laser310"}, {"category": "bios_zip", "contents": [{"crc32": "80f5aa20", "description": "Main CPU ROM (256KB)", "name": "27-00817-000-000.u1", "size": 262144}, {"crc32": "edc1fb3f", "description": "TC8802AF speech chip internal data (optional, English)", "name": "speech_eng_internal.bin", "size": 8192}, {"crc32": "888e3ddd", "description": "T6684F VSM serial ROM 1 (optional, English)", "name": "speech_eng_vsm1.bin", "size": 16384}, {"crc32": "de4ac89d", "description": "T6684F VSM serial ROM 2 (optional, English)", "name": "speech_eng_vsm2.bin", "size": 16384}, {"crc32": "972384aa", "description": "T6684F VSM serial ROM 3 (optional, English)", "name": "speech_eng_vsm3.bin", "size": 16384}], "name": "socrates.zip", "note": "MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND. Clones: socratfc (French Canadian), profweis (German PAL).", "required": true, "source_ref": "src/mame/vtech/socrates.cpp:1546-1596", "system": "vtech-socrates"}, {"category": "bios_zip", "contents": [{"crc32": "5cfa5b42", "description": "S2 BASIC ROM", "name": "aq_s2.u2", "size": 8192}, {"crc32": "28d0fdbd", "description": "S1 BASIC ROM", "name": "aq.u2", "size": 8192}, {"crc32": "e117f57c", "description": "Character ROM", "name": "aq2.u5", "size": 2048}], "name": "aquarius.zip", "required": true, "source_ref": "src/mame/mattel/aquarius.cpp:487-500", "system": "mattel-aquarius"}, {"category": "bios_zip", "contents": [{"crc32": "5cfa5b42", "description": "BASIC ROM", "name": "aq2_1.rom", "size": 8192}, {"crc32": "c95117c6", "description": "Extended BASIC ROM", "name": "aq2_2.rom", "size": 4096}, {"crc32": "e117f57c", "description": "Character ROM", "name": "aq2.u5", "size": 2048}], "name": "aquarius2.zip", "required": true, "source_ref": "src/mame/mattel/aquarius.cpp:504-514", "system": "mattel-aquarius"}, {"category": "bios_zip", "contents": [{"crc32": "5cfa5b42", "description": "BASIC ROM", "name": "aq_s2.u2", "size": 8192}, {"crc32": "09102213", "description": "Arabic character ROM", "name": "xz-2120-1_v1.2.u5", "size": 4096}], "name": "aquarius_ar.zip", "required": true, "source_ref": "src/mame/mattel/aquarius.cpp:516-525", "system": "mattel-aquarius"}, {"category": "bios_zip", "contents": [{"crc32": "56feec44", "description": "BASIC ROM bank 1 (Set1)", "name": "lynx48-1.ic46", "size": 8192}, {"crc32": "d894562e", "description": "BASIC ROM bank 2 (Set1)", "name": "lynx48-2.ic45", "size": 8192}, {"crc32": "a933e577", "description": "BASIC ROM bank 1 (Set2)", "name": "lynx4811.ic46", "size": 8192}, {"crc32": "3d3fdd0e", "description": "BASIC ROM bank 2 (Set2)", "name": "lynx4812.ic45", "size": 8192}], "name": "lynx48k.zip", "required": true, "source_ref": "src/mame/camputers/camplynx.cpp:995-1004", "system": "camplynx"}, {"category": "bios_zip", "contents": [{"crc32": "f86c5514", "description": "BASIC ROM bank 1", "name": "lynx9646.ic46", "size": 8192}, {"crc32": "f596b9a3", "description": "BASIC ROM bank 2", "name": "lynx9645.ic45", "size": 8192}, {"crc32": "4b96b0de", "description": "Extension ROM (original)", "name": "lynx9644.ic44", "size": 4096}, {"crc32": "698d3de9", "description": "Scorpion ROM v2.1 (RLUG)", "name": "skorprom.ic44", "size": 8192}, {"crc32": "795c22ea", "description": "Danish extension ROM", "name": "danish96k3.ic44", "size": 8192}, {"crc32": "011e106a", "description": "Floppy DOS ROM", "name": "dosrom.rom", "size": 8192}], "name": "lynx96k.zip", "required": true, "source_ref": "src/mame/camputers/camplynx.cpp:1006-1018", "system": "camplynx"}, {"category": "bios_zip", "contents": [{"crc32": "65d292ce", "description": "BASIC ROM bank 1", "name": "lynx128-1.ic1", "size": 8192}, {"crc32": "23288773", "description": "BASIC ROM bank 2", "name": "lynx128-2.ic2", "size": 8192}, {"crc32": "9827b9e9", "description": "BASIC ROM bank 3", "name": "lynx128-3.ic3", "size": 8192}, {"crc32": "011e106a", "description": "Floppy DOS ROM", "name": "dosrom.rom", "size": 8192}], "name": "lynx128k.zip", "required": true, "source_ref": "src/mame/camputers/camplynx.cpp:1020-1026", "system": "camplynx"}, {"category": "bios_zip", "contents": [{"crc32": "d3369420", "description": "BASIC/system ROM bank 1", "name": "cg_rom1.z1", "size": 4096}, {"crc32": "73d2c9ea", "description": "BASIC/system ROM bank 2", "name": "cg_rom2.z2", "size": 4096}, {"crc32": "3f358811", "description": "BASIC/system ROM bank 3", "name": "cg_rom3.z3", "size": 4096}, {"crc32": "be235782", "description": "BASIC/system ROM bank 4", "name": "cg_rom4.z4", "size": 4096}, {"crc32": "c3e60d57", "description": "German character set", "name": "cgenieg.fnt", "size": 2048}, {"crc32": "4fed774a", "description": "Default character set", "name": "cgenie1.fnt", "size": 2048}], "name": "cgenie.zip", "required": true, "source_ref": "src/mame/eaca/cgenie.cpp:498-510", "system": "cgenie"}, {"category": "bios_zip", "contents": [{"crc32": "844aaedd", "description": "BASIC ROM (old)", "name": "cg-basic-rom-v1-pal-en.rom", "size": 16384}, {"crc32": "cfb84e09", "description": "BASIC ROM (new)", "name": "cgromv2.rom", "size": 16384}, {"crc32": "4fed774a", "description": "Default character set", "name": "cgenie1.fnt", "size": 2048}], "name": "cgenienz.zip", "required": false, "source_ref": "src/mame/eaca/cgenie.cpp:512-521", "system": "cgenie"}, {"category": "bios_zip", "contents": [{"crc32": "2a96cf74", "description": "DOS ROM (default)", "name": "cgdos.rom", "size": 8192}, {"crc32": "6164e9d1", "description": "DOS ROM variant part 1", "name": "cgdos_a.c", "size": 4096}, {"crc32": "b09eb5d1", "description": "DOS ROM variant part 2", "name": "cgdos_a.d", "size": 4096}, {"crc32": "9dace9c1", "description": "DOS ROM v2 (BAD_DUMP)", "name": "cgdos-v2.rom", "size": 8192}], "name": "cgenie_fdc.zip", "note": "Optional expansion slot device, not default", "required": false, "source_ref": "src/devices/bus/cgenie/expansion/floppy.cpp:61-77", "system": "cgenie"}, {"category": "bios_zip", "contents": [{"crc32": "289b7791", "description": "Atom BASIC + kernel ROM (split-loaded)", "name": "abasic.ic20", "size": 8192}, {"crc32": "81d86af7", "description": "Floating point ROM", "name": "afloat.ic21", "size": 4096}], "name": "atom.zip", "required": true, "source_ref": "src/mame/acorn/atom.cpp:1271-1276", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "20158bd8", "description": "BBC mode MOS ROM", "name": "mos3.rom", "size": 4096}, {"crc32": "79434781", "description": "BBC BASIC ROM", "name": "bbcbasic.rom", "size": 16384}], "name": "atombbc.zip", "required": false, "source_ref": "src/mame/acorn/atom.cpp:1278-1289", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "8be45181", "description": "Prophet 2 floating point ROM", "name": "p2fp.ic21", "size": 4096}, {"crc32": "006010b7", "description": "AtomCalc ROM bank 1", "name": "a_69ed.rom", "size": 4096}, {"crc32": "ecd2d08b", "description": "AtomCalc ROM bank 2", "name": "e_61e5.rom", "size": 4096}], "name": "prophet2.zip", "required": false, "source_ref": "src/mame/acorn/atom.cpp:1291-1300", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "c431a9b7", "description": "8271 FDC DOS ROM", "name": "dosrom.ic15", "size": 4096}], "name": "atom_discpack.zip", "note": "Default slot device on pl6, loaded automatically", "required": false, "source_ref": "src/devices/bus/acorn/atom/discpack.cpp:77-80", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "935407cb", "description": "GDOS 1.66 DOS ROM", "name": "gdos166.rom", "size": 4096}], "name": "atom_gdos.zip", "required": false, "source_ref": "src/devices/bus/acorn/atom/gdos.cpp:85-89", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "fc790657", "description": "GDOS-2015 flash ROM", "name": "gdos2015_15.ic8", "size": 65536}], "name": "atom_gdos2015.zip", "required": false, "source_ref": "src/devices/bus/acorn/atom/gdos2015.cpp:130-133", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "b504ac15", "description": "SP0256A-AL2 speech synthesis ROM", "name": "sp0256a-al2.bin", "size": 2048}], "name": "atom_speech.zip", "required": false, "source_ref": "src/devices/bus/acorn/atom/speech.cpp:61-63", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "b2f49eb3", "description": "EF9345 character ROM (BAD_DUMP)", "name": "charset.rom", "size": 8192}], "name": "atom_vdu80.zip", "required": false, "source_ref": "src/devices/bus/acorn/atom/vdu80.cpp:76-78", "system": "atom"}, {"category": "bios_zip", "contents": [{"crc32": "a0cec361", "description": "SM8521 CPU internal ROM", "name": "internal.bin", "size": 4096}, {"crc32": "e235a589", "description": "External flash ROM (PDA software)", "name": "external.bin", "size": 262144}], "name": "gamecom.zip", "required": true, "source_ref": "src/mame/tiger/gamecom.cpp:293-299", "system": "tiger-game-com"}, {"category": "bios_zip", "contents": [{"crc32": "07090415", "description": "UMC/NCR ICASC00002 BIOS (default)", "name": "gamate_bios_umc.bin", "size": 4096}, {"crc32": "03a5f3a7", "description": "BIT ICASC00001 BIOS (1994)", "name": "gamate_bios_bit.bin", "size": 4096}], "name": "gamate.zip", "required": true, "source_ref": "src/mame/bitcorp/gamate.cpp:228-234", "system": "gamate"}, {"category": "bios_zip", "contents": [{"crc32": "ee1ea65d", "description": "NEC uPD78C06AG internal ROM", "name": "egpcboot.bin", "size": 4096}], "name": "gamepock.zip", "required": true, "source_ref": "src/mame/epoch/gamepock.cpp:248-251", "system": "gamepock"}, {"category": "bios_zip", "contents": [{"crc32": "05cc45e5", "description": "NEC D78C11AGF internal ROM", "name": "d78c11agf_e19.u1", "size": 4096}], "name": "gmaster.zip", "required": true, "source_ref": "src/mame/handheld/gmaster.cpp:261-263", "system": "hartung-game-master"}, {"category": "bios_zip", "contents": [{"crc32": "87c98494", "description": "F-BASIC 3.00 ROM", "name": "fbasic300.rom", "size": 31744}, {"crc32": "24cec93f", "description": "Sub-CPU system ROM", "name": "subsys_c.rom", "size": 10240}, {"crc32": "c70f0c74", "description": "Boot BASIC ROM", "name": "boot_bas.rom", "size": 512}, {"crc32": "bf441864", "description": "Boot DOS-A ROM", "name": "boot_dos_a.rom", "size": 512}, {"crc32": "62402ac9", "description": "Kanji ROM (optional, JIS level 1)", "name": "kanji.rom", "size": 131072}], "name": "fm7.zip", "required": true, "source_ref": "src/mame/fujitsu/fm7.cpp:2188-2209", "system": "fm7"}, {"category": "bios_zip", "contents": [{"crc32": "785cb06c", "description": "Initiate ROM (boot sequencer)", "name": "initiate.rom", "size": 8192}, {"crc32": "a96d19b6", "description": "F-BASIC 3.0 ROM", "name": "fbasic30.rom", "size": 31744}, {"crc32": "e8014fbb", "description": "Sub system A ROM", "name": "subsys_a.rom", "size": 8192}, {"crc32": "9be69fac", "description": "Sub system B ROM", "name": "subsys_b.rom", "size": 8192}, {"crc32": "e9f16c42", "description": "Sub system CG ROM (character generator)", "name": "subsyscg.rom", "size": 8192}], "name": "fm77av.zip", "required": true, "source_ref": "src/mame/fujitsu/fm7.cpp:2207-2228", "system": "fm7"}, {"category": "bios_zip", "contents": [{"crc32": "a96d19b6", "description": "F-BASIC 3.02 ROM", "name": "fbasic302.rom", "size": 31744}, {"crc32": "198614ff", "description": "Boot DOS ROM", "name": "boot_dos.rom", "size": 512}], "name": "fmnew7.zip", "note": "FM-NEW7 clone, inherits shared ROMs from fm7.zip parent", "required": false, "source_ref": "src/mame/fujitsu/fm7.cpp:2170-2186", "system": "fm7"}, {"category": "bios_zip", "contents": [{"crc32": "2223e677", "description": "Monitor ROM SP-1002", "name": "sp1002.rom", "size": 4096}, {"crc32": "d36505e0", "description": "Floppy disk interface ROM", "name": "mz80kfdif.rom", "size": 1024}, {"crc32": "bffe3312", "description": "Japanese character generator ROM", "name": "mz80k.jpn", "size": 2048}, {"crc32": "7767f11e", "description": "Japanese character set variant", "name": "80kcgj.rom", "size": 2048}], "name": "mz80kj.zip", "required": true, "source_ref": "src/mame/sharp/mz80.cpp:359-369", "system": "mz80k"}, {"category": "bios_zip", "contents": [{"crc32": "2223e677", "description": "Monitor ROM SP-1002 (default BIOS)", "name": "sp1002.rom", "size": 4096}, {"crc32": "19ed6546", "description": "Monitor ROM TC (alt BIOS)", "name": "80ktc.rom", "size": 4096}, {"crc32": "d66af028", "description": "Monitor ROM V44 (alt BIOS)", "name": "80kv44.rom", "size": 4096}, {"crc32": "d36505e0", "description": "Floppy disk interface ROM", "name": "mz80kfdif.rom", "size": 1024}, {"crc32": "9b2fb88b", "description": "Character generator ROM", "name": "80kcg.rom", "size": 2048}, {"crc32": "be952852", "description": "Character generator ROM (English fixed)", "name": "80kcgf.rom", "size": 2048}], "name": "mz80k.zip", "required": true, "source_ref": "src/mame/sharp/mz80.cpp:343-357", "system": "mz80k"}, {"category": "bios_zip", "contents": [{"crc32": "d7ccf37f", "description": "IPL ROM", "name": "mz20ipl.bin", "size": 2048}, {"crc32": "6ae6ce8e", "description": "Character generator ROM", "name": "font.bin", "size": 2048}], "name": "mz2000.zip", "required": true, "source_ref": "src/mame/sharp/mz2000.cpp:1465-1474", "system": "mz2000"}, {"category": "bios_zip", "contents": [{"crc32": "7a659f20", "description": "IPL ROM", "name": "ipl.rom", "size": 32768}, {"crc32": "a082326f", "description": "Character generator ROM", "name": "cg.rom", "size": 2048}, {"crc32": "dd426767", "description": "Kanji level 1 ROM", "name": "kanji.rom", "size": 262144}, {"crc32": "eaaf20c9", "description": "Kanji level 2 ROM", "name": "kanji2.rom", "size": 131072}, {"crc32": "aa957c2b", "description": "Dictionary ROM", "name": "dict.rom", "size": 262144}, {"crc32": "8e49e4dc", "description": "Phone ROM", "name": "phone.rom", "size": 16384}], "name": "mz2500.zip", "required": true, "source_ref": "src/mame/sharp/mz2500.cpp:1881-1900", "system": "mz2500"}, {"category": "bios_zip", "contents": [{"crc32": "4c6c6b7b", "description": "Monitor ROM 1Z-013A", "name": "1z-013a.rom", "size": 4096}, {"crc32": "42b9e8fb", "description": "Character generator ROM (international)", "name": "mz700fon.int", "size": 4096}], "name": "mz700.zip", "required": true, "source_ref": "src/mame/sharp/mz700.cpp:463-469", "system": "mz700"}, {"category": "bios_zip", "contents": [{"crc32": "600d17e1", "description": "Monitor 9Z-504M (default BIOS)", "name": "mz800.rom", "size": 16384}, {"crc32": "f98b4bea", "description": "Willy's Monitor (English, alt BIOS)", "name": "800willy_en.rom", "size": 16384}, {"crc32": "2471034f", "description": "Willy's Monitor (German, alt BIOS)", "name": "800willy_ge.rom", "size": 16384}, {"crc32": "92bbf0a3", "description": "Willy's Monitor (Japanese, alt BIOS)", "name": "800willy_jap.rom", "size": 16384}], "name": "mz800.zip", "required": true, "source_ref": "src/mame/sharp/mz700.cpp:480-490", "system": "mz800"}, {"category": "bios_zip", "contents": [{"crc32": "54c03109", "description": "BASIC ROM", "name": "basicrom.60", "size": 16384}, {"crc32": "6682ec41", "description": "Keyboard MCU ROM (BAD_DUMP)", "name": "upd8049.ic17", "size": 2048}, {"crc32": "b0142d32", "description": "Character generator ROM", "name": "cgrom60.60", "size": 4096}], "name": "pc6001.zip", "required": true, "source_ref": "src/mame/nec/pc6001.cpp:1714-1726", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "fa8e88d9", "description": "BASIC ROM (US)", "name": "basicrom.60a", "size": 16384}, {"crc32": "6682ec41", "description": "Keyboard MCU ROM (BAD_DUMP, shared with parent)", "name": "upd8049.ic17", "size": 2048}, {"crc32": "49c21d08", "description": "Character generator ROM (US)", "name": "cgrom60.60a", "size": 4096}], "name": "pc6001a.zip", "required": false, "source_ref": "src/mame/nec/pc6001.cpp:1883-1894", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "950ac401", "description": "BASIC ROM", "name": "basicrom.62", "size": 32768}, {"crc32": "49b4f917", "description": "Voice synthesis ROM", "name": "voicerom.62", "size": 16384}, {"crc32": "81eb5d95", "description": "Character generator ROM", "name": "cgrom60.62", "size": 8192}, {"crc32": "3ce48c33", "description": "Character generator ROM (mode 2)", "name": "cgrom60m.62", "size": 8192}, {"crc32": "20c8f3eb", "description": "Kanji ROM", "name": "kanjirom.62", "size": 32768}], "name": "pc6001mk2.zip", "required": true, "source_ref": "src/mame/nec/pc6001.cpp:1896-1916", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "c0b01772", "description": "BASIC ROM", "name": "basicrom.66", "size": 32768}, {"crc32": "91d078c1", "description": "Voice synthesis ROM", "name": "voicerom.66", "size": 16384}, {"crc32": "d2434f29", "description": "Character generator ROM", "name": "cgrom60.66", "size": 8192}, {"crc32": "3ce48c33", "description": "Character generator ROM (mode 2)", "name": "cgrom66.66", "size": 8192}, {"crc32": "20c8f3eb", "description": "Kanji ROM", "name": "kanjirom.66", "size": 32768}], "name": "pc6601.zip", "required": false, "source_ref": "src/mame/nec/pc6001.cpp:1919-1936", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "b6fc2db2", "description": "System ROM 1", "name": "systemrom1.64", "size": 65536}, {"crc32": "55a62a1d", "description": "System ROM 2", "name": "systemrom2.64", "size": 65536}, {"crc32": "73bc3256", "description": "Character generator ROM", "name": "cgrom68.64", "size": 16384}], "name": "pc6001mk2sr.zip", "required": true, "source_ref": "src/mame/nec/pc6001.cpp:1938-1954", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "b6fc2db2", "description": "System ROM 1", "name": "systemrom1.68", "size": 65536}, {"crc32": "55a62a1d", "description": "System ROM 2", "name": "systemrom2.68", "size": 65536}, {"crc32": "516b1be3", "description": "BASIC ROM", "name": "basicrom.68", "size": 32768}, {"crc32": "37ff3829", "description": "Voice synthesis ROM", "name": "voicerom.68", "size": 16384}, {"crc32": "331473a9", "description": "Character generator ROM", "name": "cgrom60.68", "size": 8192}, {"crc32": "03ba2cf1", "description": "Character generator ROM (mode 2)", "name": "cgrom66.68", "size": 8192}, {"crc32": "07318218", "description": "System ROM 2 (mk2 compat)", "name": "sysrom2.68", "size": 8192}, {"crc32": "65394e8d", "description": "Keyboard MCU ROM", "name": "d8049hc-016.bin", "size": 2048}, {"crc32": "73bc3256", "description": "Character generator ROM (SR)", "name": "cgrom68.68", "size": 16384}], "name": "pc6601sr.zip", "required": false, "source_ref": "src/mame/nec/pc6001.cpp:1956-1987", "system": "pc60"}, {"category": "bios_zip", "contents": [{"crc32": "1640ff7e", "description": "Monitor 1.1 r2674 (default)", "name": "mon11_2674.bin", "size": 4096}, {"crc32": "910fc930", "description": "Monitor 1.0 r2569", "name": "mon10_2569.bin", "size": 4096}, {"crc32": "07b92002", "description": "Monitor 1.1 r2569", "name": "mon11_2569.bin", "size": 4096}, {"crc32": "f3ee23c8", "description": "Monitor 1.1 r2669", "name": "mon11_2669.bin", "size": 4096}, {"crc32": "5f5f688a", "description": "Monitor 2.2 r2856", "name": "mon22_2856.bin", "size": 4096}, {"crc32": "a47b0308", "description": "Monitor 2.2B r2856", "name": "mon22b_2856.bin", "size": 4096}, {"crc32": "0e024222", "description": "Monitor 2.3 r2601", "name": "mon23_2601.bin", "size": 4096}, {"crc32": "248e62c9", "description": "Monitor 2.3A r2569", "name": "mon23a_2569.bin", "size": 4096}, {"crc32": "5a25144b", "description": "MCM6571A character generator", "name": "6571.bin", "size": 2048}], "name": "pegasus.zip", "note": "6809-based home computer (1981, New Zealand). 8 monitor BIOS variants, 5 cartridge expansion slots.", "required": true, "source_ref": "src/mame/ausnz/pegasus.cpp:ROM_START", "system": "pegasus"}, {"category": "bios_zip", "contents": [{"crc32": "8d575662", "description": "68000 internal security ROM", "name": "internal_68k.bin", "size": 4096}, {"crc32": "fc9fb05f", "description": "6502 co-processor ROM block 1", "name": "internal_6502_1.bin", "size": 8192}, {"crc32": "bf950ab7", "description": "6502 co-processor ROM block 2", "name": "internal_6502_2.bin", "size": 8192}], "name": "supracan.zip", "required": true, "source_ref": "src/mame/umc/supracan.cpp:2458-2467", "system": "supracan"}, {"category": "bios_zip", "contents": [{"crc32": "0ba78597", "description": "Lockout chip ROM key", "name": "umc6650.bin", "size": 16}], "name": "umc6650.zip", "note": "UMC 6650 cartridge lockout chip device ROM.", "required": true, "source_ref": "src/mame/umc/umc6650.cpp:32-36", "system": "supracan"}, {"category": "bios_zip", "contents": [{"crc32": "364e3f74", "description": "BIOS bank 0", "name": "p513bk0b.bin", "size": 524288}, {"crc32": "e18239c4", "description": "BIOS bank 1", "name": "p513bk1b.bin", "size": 524288}], "name": "vis.zip", "required": true, "source_ref": "src/mame/trs/vis.cpp:1062-1066", "system": "tandy-vis"}, {"category": "bios_zip", "contents": [{"crc32": "70d06dff", "description": "Level I BASIC ROM (4KB)", "name": "level1.rom", "size": 4096}, {"crc32": "0033f2b9", "description": "MCM6670P character generator ROM", "name": "mcm6670p.z29", "size": 1024}], "name": "trs80.zip", "note": "TRS-80 Model I Level I Basic (1977). Only fully working TRS-80 machine in MAME.", "required": true, "source_ref": "src/mame/trs/trs80.cpp:567-584", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "37c59db2", "description": "Level II ROM A (default)", "name": "rom-a.z1", "size": 4096}, {"crc32": "05818718", "description": "Level II ROM B (default)", "name": "rom-b.z2", "size": 4096}, {"crc32": "306e5d66", "description": "Level II ROM C (default)", "name": "rom-c.z3", "size": 4096}, {"crc32": "be46faf5", "description": "Level II ROM A (alternate dump)", "name": "rom-a_alt.z1", "size": 4096}, {"crc32": "6c791c2d", "description": "Level II ROM B (alternate dump)", "name": "rom-b_alt.z2", "size": 4096}, {"crc32": "55b3ad13", "description": "Level II ROM C (alternate dump)", "name": "rom-c_alt.z3", "size": 4096}, {"crc32": "0033f2b9", "description": "MCM6670P character generator ROM", "name": "mcm6670p.z29", "size": 1024}], "name": "trs80l2.zip", "note": "TRS-80 Model I Level II Basic (1978). Separate parent machine from trs80 (Level I).\n2 BIOS variants: Radio Shack Level II and R/S L2 (alternate dumps).\nMACHINE_NOT_WORKING.\n", "required": true, "source_ref": "src/mame/trs/trs80.cpp:587-603", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "8f5214de", "description": "ROM A (BASIC part 1)", "name": "3001.z10", "size": 4096}, {"crc32": "46e88fbf", "description": "ROM B (BASIC part 2)", "name": "3002.z11", "size": 4096}, {"crc32": "306e5d66", "description": "ROM C (BASIC part 3)", "name": "3003.z12", "size": 4096}, {"crc32": "8f2ac112", "description": "TCS extension ROM", "name": "tcs-ext.z13", "size": 2048}, {"crc32": "150c5f1f", "description": "TCS character generator ROM", "name": "tcs-ext.z25", "size": 2048}], "name": "eg3003.zip", "note": "EACA Video Genie EG3003 (1980). TRS-80 Level II compatible clone.\nParent for sys80/sys80p/ht1080z/ht1080z2/ht108064 clones.\nMACHINE_NOT_WORKING.\n", "required": false, "source_ref": "src/mame/trs/trs80.cpp:608-617", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "2a851e33", "description": "System-80 extension ROM", "name": "sys80.z13", "size": 2048}, {"crc32": "0033f2b9", "description": "Character generator ROM", "name": "2513.z25", "size": 1024}], "name": "sys80.zip", "note": "EACA System-80 (1980). Clone of eg3003 with different extension ROM. sys80p (50 Hz) shares ROMs.", "required": false, "source_ref": "src/mame/trs/trs80.cpp:620-632", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "e8c59d4f", "description": "HT-1080Z character generator ROM", "name": "ht1080z.z25", "size": 2048}], "name": "ht1080z.zip", "note": "Hiradastechnika HT-1080Z Series I (1983). Hungarian clone of eg3003.", "required": false, "source_ref": "src/mame/trs/trs80.cpp:637-646", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "07415ac6", "description": "HT-1080Z II extension ROM", "name": "ht1080z2.z13", "size": 2048}, {"crc32": "6728f0ab", "description": "HT-1080Z II character generator ROM", "name": "ht1080z2.z25", "size": 2048}], "name": "ht1080z2.zip", "note": "Hiradastechnika HT-1080Z Series II (1984). Clone of eg3003.", "required": false, "source_ref": "src/mame/trs/trs80.cpp:649-658", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "59ec132e", "description": "ROM A (64-col BASIC part 1)", "name": "3001_64.z10", "size": 4096}, {"crc32": "a7a73e8c", "description": "ROM B (64-col BASIC part 2)", "name": "3002_64.z11", "size": 4096}, {"crc32": "fc12bd28", "description": "HT-1080Z/64 extension ROM", "name": "ht108064.z13", "size": 2048}, {"crc32": "e76b73a4", "description": "HT-1080Z/64 character generator ROM", "name": "ht108064.z25", "size": 2048}], "name": "ht108064.zip", "note": "Hiradastechnika HT-1080Z/64 (1985). 64-column clone of eg3003.", "required": false, "source_ref": "src/mame/trs/trs80.cpp:661-670", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "ec0c6daa", "description": "Level 2 ROM A", "name": "8041364.u104", "size": 8192}, {"crc32": "ed4ee921", "description": "Level 2 ROM B", "name": "8040332.u105", "size": 4096}, {"crc32": "c8f79433", "description": "Level 2 ROM C Rev C (default)", "name": "8040316c.u106", "size": 2048}, {"crc32": "84a5702d", "description": "Level 2 ROM C Rev B", "name": "8040316b.u106", "size": 2048}, {"crc32": "7d38720a", "description": "Network III v2 ROM C", "name": "276a.u106", "size": 2048}, {"crc32": "6418d641", "description": "Level 1 BIOS", "name": "8040032.u104", "size": 4096}, {"crc32": "444c8b60", "description": "Character generator ROM (rev A)", "name": "8044316a.u36", "size": 2048}], "name": "trs80m3.zip", "note": "TRS-80 Model III (1980). Parent for trs80m4/trs80m4p/cp500 clones.\n4 BIOS variants: Level 2 ROM C Rev C (default), Rev B, Network III v2 (student),\nLevel 1. MACHINE_NOT_WORKING.\n", "required": true, "source_ref": "src/mame/trs/trs80m3.cpp:483-519", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "1a92d54d", "description": "Combined system ROM (BAD_DUMP)", "name": "trs80m4.rom", "size": 14336}, {"crc32": "444c8b60", "description": "Character generator ROM", "name": "8044316a.u36", "size": 2048}], "name": "trs80m4.zip", "note": "TRS-80 Model 4 (1980). Clone of trs80m3. BAD_DUMP combined ROM\n(should be split into 3 like trs80m3). MACHINE_NOT_WORKING.\n", "required": false, "source_ref": "src/mame/trs/trs80m3.cpp:522-528", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "3a738aa9", "description": "Bootloader ROM", "name": "8075332.u69", "size": 4096}, {"crc32": "7ff336f4", "description": "Disk loader hack ROM", "name": "trs80m4p_loader_hack.rom", "size": 504}, {"crc32": "1ac44bea", "description": "Character generator ROM", "name": "8049007.u103", "size": 2048}], "name": "trs80m4p.zip", "note": "TRS-80 Model 4P (1983). Clone of trs80m3. Completely different memory map;\nModel III ROMs loaded from boot disk, only a bootloader ROM on board.\n2 BIOS variants: gate array (default) and disk loader hack.\nMACHINE_NOT_WORKING.\n", "required": false, "source_ref": "src/mame/trs/trs80m3.cpp:530-539", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "c2fc1b92", "description": "Combined system + boot ROM", "name": "s_8407_cn62516n_cp500a_prologica_83.ci111", "size": 16384}, {"crc32": "1765931e", "description": "Character generator ROM", "name": "100.105.ci36", "size": 2048}], "name": "cp500.zip", "note": "Prologica CP-500 (1982). Brazilian TRS-80 Model III clone. MACHINE_NOT_WORKING.", "required": false, "source_ref": "src/mame/trs/trs80m3.cpp:541-550", "system": "trs80"}, {"category": "bios_zip", "contents": [{"crc32": "2445a5e8", "description": "Console GROM 0", "name": "994a_grom0.u500", "size": 6144}, {"crc32": "b8f367ab", "description": "Console GROM 1", "name": "994a_grom1.u501", "size": 6144}, {"crc32": "e0bb5341", "description": "Console GROM 2", "name": "994a_grom2.u502", "size": 6144}, {"crc32": "ee859c5f", "description": "CPU ROM high byte", "name": "994a_rom_hb.u610", "size": 4096}, {"crc32": "37859301", "description": "CPU ROM low byte", "name": "994a_rom_lb.u611", "size": 4096}], "name": "ti99_4a.zip", "note": "TI-99/4A Home Computer (1981). Parent machine ROM set.", "required": true, "source_ref": "src/mame/ti/ti99_4x.cpp:1153-1166", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "aa757e13", "description": "Console GROM 0", "name": "994_grom0.u500", "size": 6144}, {"crc32": "c863e460", "description": "Console GROM 1", "name": "994_grom1.u501", "size": 6144}, {"crc32": "b0eda548", "description": "Console GROM 2", "name": "994_grom2.u502", "size": 6144}, {"crc32": "6fcf4b15", "description": "CPU ROM high byte", "name": "994_rom_hb.u610", "size": 4096}, {"crc32": "491c21d1", "description": "CPU ROM low byte", "name": "994_rom_lb.u611", "size": 4096}], "name": "ti99_4.zip", "note": "TI-99/4 Home Computer (1979). Earlier model with smaller keyboard.", "required": false, "source_ref": "src/mame/ti/ti99_4x.cpp:1138-1151", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "1f58b571", "description": "TMS6100 vocabulary ROM (bottom)", "name": "cd2325a.u2a", "size": 16384}, {"crc32": "65d00401", "description": "TMS6100 vocabulary ROM (top)", "name": "cd2326a.u2b", "size": 16384}], "name": "ti99_speech.zip", "note": "TI-99 Speech Synthesizer sidecar. 2 TMS6100 vocabulary ROMs.", "required": false, "source_ref": "src/devices/bus/ti99/sidecar/speechsyn.cpp:242-246", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "693c6b6e", "description": "FDC DSR ROM (low)", "name": "fdc_dsr.u26", "size": 4096}, {"crc32": "2c921087", "description": "FDC DSR ROM (high)", "name": "fdc_dsr.u27", "size": 4096}], "name": "ti99_fdc.zip", "note": "TI Standard DSSD Floppy Controller.", "required": false, "source_ref": "src/devices/bus/ti99/peb/ti_fdc.cpp:389", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "06f1ec89", "description": "BwG DSR ROM", "name": "bwg_dsr.u15", "size": 32768}], "name": "ti99_bwg.zip", "note": "SNUG BwG Floppy Controller.", "required": false, "source_ref": "src/devices/bus/ti99/peb/bwg.cpp:597", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "de3f9476", "description": "DCC DSR ROM (low)", "name": "ccdcc_v89.u3", "size": 8192}, {"crc32": "9c4e5c08", "description": "DCC DSR ROM (high)", "name": "ccdcc_v89.u4", "size": 8192}], "name": "ti99_ccdcc.zip", "note": "CorComp Disk Controller Card.", "required": false, "source_ref": "src/devices/bus/ti99/peb/cc_fdc.cpp:567", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "f010e273", "description": "FDC DSR ROM (low)", "name": "ccfdc_v89mg.u1", "size": 8192}, {"crc32": "0cad8f5b", "description": "FDC DSR ROM (high)", "name": "ccfdc_v89mg.u2", "size": 8192}], "name": "ti99_ccfdc.zip", "note": "CorComp Floppy Disk Controller Card Rev A.", "required": false, "source_ref": "src/devices/bus/ti99/peb/cc_fdc.cpp:730", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "eab382fb", "description": "RS232 DSR ROM", "name": "rs232pio_dsr.u1", "size": 4096}], "name": "ti99_rs232.zip", "note": "TI RS232/PIO Interface.", "required": false, "source_ref": "src/devices/bus/ti99/peb/ti_rs232.cpp:1071", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "a062b75d", "description": "EVPC DSR ROM", "name": "evpc_dsr.u21", "size": 65536}], "name": "ti99_evpc.zip", "note": "SNUG Enhanced Video Processor Card.", "required": false, "source_ref": "src/devices/bus/ti99/peb/evpc.cpp:453", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "66fbe0ed", "description": "HFDC DSR ROM", "name": "hfdc_dsr.u34", "size": 16384}], "name": "ti99_hfdc.zip", "note": "Myarc Hard and Floppy Disk Controller.", "required": false, "source_ref": "src/devices/bus/ti99/peb/hfdc.cpp:1047", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "505e5df0", "description": "P-Code GROM 0", "name": "pcode_grom0.u11", "size": 6144}, {"crc32": "63b546d5", "description": "P-Code GROM 1", "name": "pcode_grom1.u13", "size": 6144}, {"crc32": "28821e5c", "description": "P-Code GROM 2", "name": "pcode_grom2.u14", "size": 6144}, {"crc32": "1db4a4a5", "description": "P-Code GROM 3", "name": "pcode_grom3.u16", "size": 6144}, {"crc32": "9618eb9b", "description": "P-Code GROM 4", "name": "pcode_grom4.u19", "size": 6144}, {"crc32": "c47efe6d", "description": "P-Code GROM 5", "name": "pcode_grom5.u20", "size": 6144}, {"crc32": "06a34c93", "description": "P-Code GROM 6", "name": "pcode_grom6.u21", "size": 6144}, {"crc32": "a09ca8d9", "description": "P-Code GROM 7", "name": "pcode_grom7.u22", "size": 6144}, {"crc32": "3881d5b0", "description": "P-Code ROM 0", "name": "pcode_rom0.u1", "size": 4096}, {"crc32": "46a06b8b", "description": "P-Code ROM 1", "name": "pcode_rom1.u18", "size": 8192}], "name": "ti99_pcode.zip", "note": "TI P-Code Card. 8 GROMs + 2 ROMs for UCSD Pascal support.", "required": false, "source_ref": "src/devices/bus/ti99/peb/pcode.cpp:322", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "042968a9", "description": "DDCC-1 DSR ROM", "name": "ddcc1.u3", "size": 8192}], "name": "ti99_ddcc1.zip", "note": "Myarc Disk Controller Card (DDCC-1).", "required": false, "source_ref": "src/devices/bus/ti99/peb/myarcfdc.cpp:426", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "41fbb96d", "description": "Memory expansion DSR ROM", "name": "myarc512k_xb2_dsr.bin", "size": 8192}], "name": "ti99_myarcmem.zip", "note": "Myarc Memory Expansion Card (MEXP-1, 512KB with XB2 DSR).", "required": false, "source_ref": "src/devices/bus/ti99/peb/myarcmem.cpp:193", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "a54e65af", "description": "TIPI DSR 2021", "name": "tipidsr.u2", "size": 32768}, {"crc32": "666f0b63", "description": "TIPI DSR 2023", "name": "tipidsr_2023.u2", "size": 32768}, {"crc32": "3b9cb922", "description": "TIPI DSR 2025 (default)", "name": "tipidsr_2025.u2", "size": 32768}], "name": "ti99_tipi.zip", "note": "TIPI card (Raspberry Pi interface). 3 BIOS variants (2021/2023/2025).", "required": false, "source_ref": "src/devices/bus/ti99/peb/tipi.cpp:697", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "6e067c22", "description": "SCSI DSR ROM v1.50", "name": "scsidsr150.u6", "size": 65536}], "name": "ti99_whtscsi.zip", "note": "Western Horizon Technologies SCSI host adapter.", "required": false, "source_ref": "src/devices/bus/ti99/peb/scsicard.cpp:473", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "28ba65ec", "description": "Cartridge ROM bank 4000", "name": "arcturus.u1", "size": 8192}, {"crc32": "91e6910a", "description": "Cartridge ROM bank A000", "name": "arcturus.u2", "size": 8192}, {"crc32": "e9ce9f4e", "description": "Cartridge ROM bank C000", "name": "arcturus.u3", "size": 8192}], "name": "ti99_arcturus.zip", "note": "Arcturus sidecar cartridge.", "required": false, "source_ref": "src/devices/bus/ti99/sidecar/arcturus.cpp:74-80", "system": "ti99"}, {"category": "bios_zip", "contents": [{"crc32": "86eaaf9f", "description": "Loader ROM", "name": "gkracker.bin", "size": 8192}], "name": "ti99_gkracker.zip", "note": "Miller's Graphics GRAM Kracker.", "required": false, "source_ref": "src/devices/bus/ti99/gromport/gkracker.cpp:409-413", "system": "ti99"}], "notes": "SUBTARGET=mess build from libretro/mame. Same source, same CORE_NAME (\"mame\"),\nsame paths (system_dir/mame/) as the mame core. Excludes arcade drivers, includes\nonly console/computer/non-arcade drivers (~1290 driver files via mess.flt).\nromload.cpp unmodified. No hiscore support.\n\nPaths under system_dir/mame/ (artwork, cheat, hash, ini, plugins, samples,\ncrosshair). ROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms.\nHash directory contains software list XMLs needed for MESS software loading.\n\nmess.flt exceptions: adds AES (+aes), CD-i consoles (+cdimono1, +cdimono2,\n+cdi910, +cdi490a), Atari Jaguar (+jaguar, +jaguarcd), CPS Changer\n(+wofch, +sfzch, +sfach, +sfzbch). Removes arcade 3DO machines (-3dobios,\n-alg3do, -orbatak, -md23do, -sht3do).\n\n1 active IS_BIOS_ROOT (miuchiz). XaviX TV game parent machines serve as\nconsole BIOS for cartridge-based software (IS_BIOS_ROOT commented out in\nsource but functionally required). Apple II family, Apple IIgs, Bally\nAstrocade, Casio Loopy, Casio PV-2000, Coleco Adam, VTech CreatiVision, Entex\nAdventure Vision, EACA Colour Genie, Acorn Atom, Tiger game.com,\nBit Corporation Gamate, Epoch Game Pocket Computer, Hartung Game\nMaster, Funtech Super A'Can, Technosys Aamber Pegasus, VTech\nLaser 310, VTech Socrates, TI-99/4A family and TRS-80 family system ROMs required for software loading\n(not IS_BIOS_ROOT but functionally BIOS).\n\nApple II: 4 machine ROM sets (apple2, apple2p, apple2e, apple2ee) plus\n5 peripheral device ROM sets (disk controllers, CompactFlash, speech).\nDrivers in apple2.cpp and apple2e.cpp, both in mess.flt. Peripheral\ndevices loaded via A2Bus slot system when configured.\n\nApple IIgs parent set (ROM03) has 4 ROMs: ADB microcontroller, Mega II\ncharacter ROM, and two main CPU ROMs. Adam uses ADAMnet bus with\nper-device MCU ROMs.\n\nBally Astrocade: 3 machines (astrocde parent, astrocdl Home Library\nComputer, astrocdw Computer System). Single 8K BIOS ROM per machine.\nDriver in midway/astrohome.cpp (mess.flt). Cartridge-based console\nwith software list \"astrocde\". No bus device ROMs.\n\nVTech CreatiVision: 7 machines (crvision parent PAL, fnvision FunVision,\ncrvisioj Japan NTSC, wizzard Dick Smith Wizzard, rameses Hanimex,\nvz2000 VZ 2000, crvisio2 MK-II). Single 2K BIOS ROM (crvision.u20).\nClones wizzard/crvisioj/crvisio2 share parent ROM. fnvision/rameses/vz2000\nuse alternate BIOS (funboot.rom). Related separate systems: lasr2001\n(Laser 2001, 16K ROM) and manager (Salora Manager, 2x8K ROM).\nDriver in vtech/crvision.cpp (mess.flt). Cartridge-based console\nwith centronics printer port. Software list \"crvision\".\n\nMattel Aquarius: 4 machines (aquarius NTSC, aquariusp PAL, aquarius2,\naquarius_ar Arabic). aquariusp uses identical ROMs as parent\n(#define rom_aquariusp rom_aquarius). aquarius2 adds extended BASIC.\naquarius_ar has Arabic character ROM. Expansion slot supports C1541\nDOS interface (Commodore 1541 device ROM loaded separately).\n\nAcorn Atom: 5 machines (atom parent, atombbc BBC BASIC, prophet2\nBusicomputers Prophet 2, atomes ES5700 NOT_WORKING, atomrr RAMROM\nNOT_WORKING). Parent set has Atom BASIC (abasic.ic20, 8KB split-loaded)\nand floating point ROM (afloat.ic21). atombbc adds MOS3 and BBC BASIC\nROMs. prophet2 has alternative FP ROM and AtomCalc ROMs. Expansion bus\n(pl6/pl7/pl8) with discpack default on pl6. Bus device ROMs: discpack\n(8271 FDC DOS ROM), gdos (GDOS 1.66), gdos2015 (GDOS-2015 flash),\nspeech (SP0256A-AL2), vdu80 (80-column charset, BAD_DUMP). Software\nlists: atom_cass (cassette), atom_flop (floppy), atom_rom (cartridge).\nDriver in acorn/atom.cpp, in mess.flt.\n\nCamputers Lynx: 3 machines (lynx48k parent, lynx96k, lynx128k).\nZ80A-based British home computer (1983). lynx48k has 2 BIOS sets\n(Set1 default, Set2 alternate). lynx96k adds floppy DOS ROM and 3\nBIOS variants for IC44 (original, Scorpion v2.1, Danish). lynx128k\nhas 3 main ROMs plus same DOS ROM. Software lists: camplynx_cass\n(cassette) for all models, camplynx_flop (floppy) for 96K/128K.\nDriver in camputers/camplynx.cpp, in mess.flt.\n\nEACA Colour Genie: 2 machines (cgenie parent EU, cgenienz NZ clone).\nZ80-based home computer (1982). Parent set has 4x4KB BASIC/system ROMs\nand character ROM (German + default). NZ clone has 16KB BASIC ROM\n(2 BIOS variants: old/new) with different palette init. Expansion slot\nwith optional FDC (WD2793, 4x 5.25\" floppies, DOS ROM maps to\n0xC000-0xDFFF). Parallel slot with joystick/printer options (no ROMs).\nSoftware lists: cgenie_cass (cassette), cgenie_flop_rom (FDC ROM\nsocket). Driver in eaca/cgenie.cpp, in mess.flt.\n\nTiger game.com: 1 machine (gamecom). SM8521-based handheld (1997).\nInternal ROM (4KB, SM8521 CPU boot code) and external flash ROM\n(256KB, PDA software). Cartridge-based with software list \"gamecom\".\nMACHINE_IMPERFECT_SOUND. Driver in tiger/gamecom.cpp, in mess.flt.\n\nBit Corporation Gamate: 1 machine (gamate). M6502-based handheld (1990).\nSingle 4KB BIOS ROM mapped at 0xE000-0xEFFF (mirrored to 0xF000).\nTwo BIOS variants: UMC/NCR ICASC00002 (default, common) and BIT\nICASC00001 (newer, 1994). Cartridge-based with software list \"gamate\".\nDriver in bitcorp/gamate.cpp, in mess.flt.\n\nEpoch Game Pocket Computer: 1 machine (gamepock). NEC uPD78C06AG-based\nhandheld (1984). Single 4KB internal CPU ROM (egpcboot.bin). Cartridge-based\nwith software list \"gamepock\" (5 official games). MACHINE_SUPPORTS_SAVE.\nDriver in epoch/gamepock.cpp, in mess.flt.\n\nHartung Game Master: 1 machine (gmaster). NEC D78C11AGF-based handheld\n(1990). Single 4KB internal MCU ROM. Cartridge-based with software list\n\"gmaster\" (18 games). Driver in handheld/gmaster.cpp, in mess.flt.\n\nFujitsu FM-7: 5 machines (fm7 parent, fmnew7 FM-NEW7, fm77av FM-77AV\nIMPERFECT_GRAPHICS, fm7740sx FM-77AV40SX NOT_WORKING; fm8 FM-8\nseparate parent). M6809-based home computer family (1982-1988). fm7\nparent set has F-BASIC 3.00, sub-CPU ROM, boot ROMs and optional Kanji\nROM. fm77av adds initiate ROM, subsys A/B/CG ROMs and requires Kanji.\nRelated machines fm11 (FM-11 EX) and fm16beta (FM-16beta) are separate\nparents, both NOT_WORKING. Software lists: fm7_cass, fm7_disk, fm77av.\nDriver in fujitsu/fm7.cpp, in mess.flt.\n\nCasio PV-2000: 1 machine (pv2000). Z80-based home computer (1983).\nSingle 16KB BASIC ROM (hn613128pc64.bin) mapped at 0x0000-0x3FFF.\nTMS9928A VDP, SN76489A sound. Cartridge-based (8K or 16K) with software\nlist \"pv2000\". MACHINE_NOT_WORKING. Driver in casio/pv2000.cpp, in mess.flt.\n\nSharp MZ-80K/A: 3 machines (mz80kj parent MZ-80K Japanese, mz80k clone of\nmz80kj MZ-80K, mz80a separate parent MZ-80A). Z80-based home computer (1979).\nmz80kj parent set has monitor ROM (sp1002), floppy disk interface ROM\n(mz80kfdif), and Japanese character generator (mz80k.jpn + 80kcgj). mz80k\nclone has 3 BIOS alternatives (sp1002/tc/v44), shared FDI ROM, and English\ncharacter generator (80kcg + 80kcgf). mz80a separate parent has its own\nmonitor (sa1510), FDI (mz80afi), and chargen (mz80acg). Software list:\nmz80k_cass (mz80k/mz80kj). Driver in sharp/mz80.cpp, in mess.flt.\n\nSharp MZ-2000 B-series: 3 machines (mz80b parent MZ-80B NOT_WORKING,\nmz2000 separate parent MZ-2000, mz2200 MZ-2200 clone of mz2000).\nZ80-based home computer family (1981-1983). mz2000 parent set has IPL ROM\nand character generator ROM (BAD_DUMP). mz2200 clone adds its own IPL ROM,\nshares chargen from parent. mz80b has separate IPL and font ROMs.\nSoftware lists: mz2000_flop, mz2000_cass, mz2000_snap (mz2000/mz2200),\nmz80b_flop, mz80b_cass (mz80b). Driver in sharp/mz2000.cpp, in mess.flt.\n\nSharp MZ-2500: 2 machines (mz2500 parent MZ-2500, mz2520 MZ-2520 clone of\nmz2500). Z80-based home computer (1985), marketed as \"SuperMZ\".\nMACHINE_IMPERFECT_GRAPHICS. mz2500 parent set has 6 ROMs: IPL, character\ngenerator (\"hand made?\" comment), kanji level 1, kanji level 2, dictionary,\nphone. mz2520 clone shares all ROMs except IPL (ipl2520.rom). cgrom region\ndeclared but not dereferenced in driver code; loaded by MAME ROM system.\nSoftware lists: mz2500_flop, compatible with mz2000_flop.\nDriver in sharp/mz2500.cpp, in mess.flt.\n\nSharp MZ-700/800: 4 machines (mz700 parent MZ-700, mz700j MZ-700 Japan clone\nof mz700, mz800 separate parent MZ-800 MACHINE_NOT_WORKING, mz1500 separate\nparent MZ-1500 MACHINE_NOT_WORKING). Z80-based home computer family (1982-1984).\nmz700 parent set has monitor ROM and character generator ROM. mz800 parent set\nhas monitor ROM with 4 BIOS alternatives (official 9Z-504M + 3 Willy's variants);\nno cgrom (uses CGRAM). mz1500 is the Japanese MZ-800 with its own monitor ROM\nand shares cgrom format from mz700. Software lists: mz700_cass (mz700),\nmz800_cass (mz800/mz1500). Driver in sharp/mz700.cpp, in mess.flt.\n\nNEC PC-6001 family: 6 machines across 3 parents. pc6001 parent (PC-6001 Japan\n1981), pc6001a clone (PC-6001A \"NEC Trek\" US). pc6001mk2 parent (PC-6001mkII\nJapan 1983), pc6601 clone of pc6001 (PC-6601 Japan 1983, adds FDD).\npc6001mk2sr parent (PC-6001mkIISR Japan 1984), pc6601sr clone of pc6001\n(PC-6601SR \"Mr. PC\" Japan 1984, adds FDD + more ROMs). All MACHINE_NOT_WORKING.\nZ80-based home computer with µPD8049 keyboard MCU (BAD_DUMP in pc6001/pc6001a,\nNO_DUMP in mk2/6601/mk2sr, actual dump d8049hc-016.bin only in pc6601sr).\nSoftware lists: pc6001_cart, pc6001_cass, pc6001mk2_cass.\nDriver in nec/pc6001.cpp, in mess.flt.\n\nFuntech Super A'Can: 1 machine (supracan). 68000+6502 cartridge-based\nconsole (1995, Taiwan). 3 internal ROMs: 68k security ROM (4KB) and\ntwo 6502 co-processor ROMs (8KB each, identified from die shot by\nFurrtek). UMC 6650 lockout chip device ROM (16 bytes) in every\ncartridge, loaded as separate umc6650 ROM set. MACHINE_IMPERFECT_SOUND |\nMACHINE_IMPERFECT_GRAPHICS. Software list \"supracan\".\nDriver in umc/supracan.cpp, in mess.flt.\n\nTI-99/4A family: 6 machines in ti99_4x.cpp — ti99_4 parent (TI-99/4\n1979), ti99_4e clone (Europe 50Hz), ti99_4a parent (TI-99/4A 1981),\nti99_4ae clone (Europe), ti99_4qi clone (QI version 1983), ti99_4ev\nclone (with EVPC 1994). Related separate drivers: ti99_4p (SGCPU, in\nti99_4p.cpp), ti99_8 (TI-99/8 prototype, in ti99_8.cpp), geneve/genmod\n(Myarc Geneve 9640, in geneve.cpp). All share the same PEB peripheral\nbus. 5 ROMs per parent set: 3 GROMs (6KB each, u500-u502) and 2 CPU\nROMs (4KB each, u610-u611, 16-bit interleaved high/low byte). ti99_4qi\nhas alternate GROM 0 (u29). ti99_4ev has alternate GROM 1. Speech\nSynthesizer is a sidecar device (speechsyn.cpp) with 2 TMS6100\nvocabulary ROMs (16KB each). Peripheral Expansion Box (peribox.cpp)\nwith slotted device cards, each with its own device ROM set: TI FDC,\nSNUG BwG FDC, CorComp DCC/FDC, RS232/PIO, EVPC, Myarc HFDC, P-Code\nCard, Myarc DDCC-1, Myarc Memory Expansion, TIPI, WHT SCSI, GRAM\nKracker (gromport), Arcturus (sidecar). No PEB devices loaded by\ndefault — all require user configuration. Software list \"ti99_cart\".\nMACHINE_SUPPORTS_SAVE on all machines.\nDrivers in ti/ti99_4x.cpp, in mess.flt.\n", "profiled_date": "2026-03-29", "source": "https://github.com/libretro/mame", "source_commit": "c4127c164af8fcf0aea781cc039aaf9b8044696d", "systems": ["apple2", "apple2gs", "astrocde", "astrocade", "coleco-adam", "crvision", "entex-advision", "bandai-rx78", "mattel-aquarius", "camplynx", "cgenie", "atom", "tiger-game-com", "gamepark-gp32", "gamate", "gamepock", "hartung-game-master", "fm7", "laser310", "vtech-socrates", "casio-loopy", "casio-pv2000", "mz700", "mz2000", "mz2500", "mz800", "pc60", "mz80k", "pegasus", "supracan", "ti99", "interton-vc4000", "tandy-vis", "trs80"], "type": "libretro", "upstream": "https://github.com/mamedev/mame", "upstream_commit": "728d957663041fbc943806bf151584acd03e2160"}


id: mandarine
name: Mandarine
type: standalone
classification: community_fork
source: https://github.com/ptyfyre/mandarine-neo
upstream: https://github.com/ptyfyre/mandarine-neo
source_commit: 7f8ec960b6183be4350bca099d23ddd9fc7bcaa3
profile_json:
{"core_classification": "community_fork", "core_version": "1.3.0", "cores": ["mandarine", "mandarine-qt"], "display_name": "Nintendo - 3DS (Mandarine)", "emulator": "Mandarine", "files": [{"name": "boot9.bin", "note": "AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0", "path": "sysdata/boot9.bin", "required": false, "size": 65536, "source_ref": "src/core/hw/aes/key.cpp:137-206, src/core/hw/rsa/rsa.cpp:49-80, src/common/common_paths.h:69", "system": "nintendo-3ds", "validation": ["size"]}, {"name": "aes_keys.txt", "note": "key slots, common keys, DLP and NFC key Ys and NFC secrets, one per line", "path": "sysdata/aes_keys.txt", "required": false, "source_ref": "src/core/hw/aes/key.cpp:208-311, src/common/common_paths.h:68", "system": "nintendo-3ds"}, {"name": "seeddb.bin", "note": "game seed database for 9.6+ titles; an empty database is written when the file is absent", "path": "sysdata/seeddb.bin", "required": false, "source_ref": "src/core/file_sys/seed_db.cpp:12-58", "system": "nintendo-3ds"}, {"hle_fallback": true, "name": "shared_font.bin", "note": "legacy path, tried after the shared font system archive; decompressed BCFNT with the 0x80 byte APT header", "path": "sysdata/shared_font.bin", "required": false, "source_ref": "src/core/hle/service/apt/apt.cpp:254-270, src/common/common_paths.h:67", "system": "nintendo-3ds"}, {"name": "CTCert.bin", "note": "console client certificate; signature type must be 0x010005 and the issuer one of the two Nintendo CA G3 strings. The certificate here is assembled from a console OTP: signature and expiry read at 0x44 and 0x20, public key derived from the private key at 0x24 over sect233r1, and the whole body checked against Nintendo's root public key", "path": "sysdata/CTCert.bin", "required": false, "size": 384, "source_ref": "src/core/hle/service/am/am.cpp:2427-2454, src/core/hle/service/am/am.cpp:83-93, src/core/hle/service/am/am.h:95", "system": "nintendo-3ds", "validation": ["size"]}, {"name": "SecureInfo_A", "note": "console region and serial number; loaded on a size check alone, and paired with LocalFriendCodeSeed_B", "path": "nand/rw/sys/SecureInfo_A", "required": false, "size": 273, "source_ref": "src/core/hle/service/cfg/cfg.cpp:608-610, 689-709, src/core/hle/service/cfg/cfg.h:180-186", "system": "nintendo-3ds", "validation": ["size"]}, {"name": "LocalFriendCodeSeed_B", "note": "friend code generation seed; loaded on a size check alone, and paired with SecureInfo_A", "path": "nand/rw/sys/LocalFriendCodeSeed_B", "required": false, "size": 272, "source_ref": "src/core/hle/service/cfg/cfg.cpp:604-606, 711-732, src/core/hle/service/cfg/cfg.h:188-193", "system": "nintendo-3ds", "validation": ["size"]}], "mode": "standalone", "notes": "Citra fork, renamed Mandarine-Neo at release 1.3.0. External files live in\nsysdata/ and nand/ under the user directory: user/ next to the executable when\nthat directory exists, otherwise Mandarine on Windows and macOS and\nmandarine-emu on Linux, with Citra and citra-emu kept as legacy locations.\nref: src/common/common_paths.h:16-70, src/common/file_util.cpp:770-839\n\nInitKeys reads boot9.bin then aes_keys.txt. Encrypted content needs one of the\ntwo; a ROM without crypto reads neither.\nref: src/core/hw/aes/key.cpp:315-324, src/core/file_sys/ncch_container.cpp:200-210\n\nFailure to derive a key or to find a seed marks the content undecryptable and\nloading stops with ErrorEncrypted.\nref: src/core/file_sys/ncch_container.cpp:219-223, src/core/file_sys/ncch_container.cpp:236-280, src/core/file_sys/ncch_container.cpp:347-349\n\nSystem archives resolve to the NAND title tree. Shared font, Mii data, country\nlist and bad word list fall back to open-source replacements built into the\nbinary when the title is absent.\nref: src/core/file_sys/archive_ncch.cpp:126-179, externals/open_source_archives/Readme.md\n\nThe embedded shared font only answers title low ID 0x00014002. CHN, KOR and TWN\nresolve to 0x00014102, 0x00014202 and 0x00014302, which fall through to\nshared_font.bin and then to ErrorSystemFiles, reported as recoverable.\nref: src/core/hle/service/apt/apt.cpp:195-213, src/core/hle/service/apt/apt.cpp:276-291, src/mandarine_qt/main.cpp:3209-3215\n\nClCertA is read from NAND title 0x0004001B00010002 and its ctr-common-1-cert.bin\nand ctr-common-1-key.bin members are decrypted with the KeySlot 0x0D normal key.\nBoth the title and the key slot are needed for authenticated HTTPS.\nref: src/core/hle/service/http/http_c.cpp:1963-2036\n\nSystem titles are downloaded and installed in-app from the Nintendo CDN, so the\nNAND title tree is not user-supplied.\nref: src/mandarine_qt/configuration/configure_system.cpp:672-678, src/core/hle/service/am/am.cpp:536, src/core/nus_download.cpp:12-13\n\nDumpKeys.gm9, a GodMode9 script producing aes_keys.txt and seeddb.bin, ships in\nthe tree and documents sysdata/ as their destination.\nref: dist/dumpkeys/README.md, dist/dumpkeys/DumpKeys.gm9\n\nThe plugin loader scans sdmc/luma/plugins/<title id>/ for any .3gx file and\nfalls back to sdmc/luma/plugins/default.3gx. Plugins carry no fixed identity.\nref: src/core/hle/service/plgldr/plgldr.cpp:112-146\n\nmcu.dat holds per-installation MCU state that the emulator writes itself when\nthe file is absent or carries the wrong magic.\nref: src/core/hle/service/cfg/cfg.cpp:734-756, src/core/hle/service/cfg/cfg.h:425-439\n\nsector0x96.bin is defined but read by no code path.\nref: src/common/common_paths.h:70\n", "profiled_date": "2026-08-08", "source": "https://github.com/ptyfyre/mandarine-neo", "source_commit": "7f8ec960b6183be4350bca099d23ddd9fc7bcaa3", "systems": ["nintendo-3ds"], "type": "standalone", "upstream": "https://github.com/ptyfyre/mandarine-neo"}


id: mariani
name: Mariani
type: standalone
classification: community_fork
source: https://github.com/sh95014/AppleWin
upstream: https://github.com/AppleWin/AppleWin
source_commit: 492b017709fd67d3aff6b1d88d9971254e7214fa
profile_json:
{"analysis": {"bundle_layout": {"lookup": "NSBundle pathForResource, no fallback directory", "missing_file": "modal alert titled Resource not found, then a null pointer", "reader": "open() and read(), cached per resource id in MarianiFrame::roms", "resource_folder": "Mariani.app/Contents/Resources", "size_check": "LinuxFrame::GetResource throws when the size differs from the one the call site expects", "source_ref": "source/frontends/mariani/MarianiFrame.cpp:156-232, source/frontends/mariani/AppDelegate.mm:1465-1469, source/linux/linuxframe.cpp:133-145"}, "debugger_scripts": [{"filename": "DebuggerAutoRun.txt", "note": "Run once at the first DebugInitialize, from the current directory and then from the support directory. Holds debugger commands written by the user; the copy in the source tree is empty.\n", "source_ref": "source/Debugger/Debug.cpp:365, source/Debugger/Debug.cpp:9440-9473"}], "generated_files": {"note": "applewin.yaml is the configuration registry, created under the settings root and overridable with --conf and --registry. All of these are produced by the emulator, none is user-supplied.\n", "written_and_read_back": ["applewin.yaml", "AppleWinDebugger.cfg"], "written_only": ["AppleWin.log", "Trace.txt", "save states", "screen recordings and screenshots", "printer spool file"]}, "help_book": {"filename": "Mariani.help", "reason": "Help bundle opened by AppKit through CFBundleHelpBookName, not by emulator code", "source_ref": "source/frontends/mariani/Mariani-Info.plist:42-45, source/frontends/mariani/Base.lproj/MainMenu.xib:264"}, "support_directory": {"holds": "debugger symbol tables, debugger scripts, printer output, g_sProgramDir", "path": "~/Library/Application Support/<bundle id>/", "source_ref": "source/frontends/mariani/AppDelegate.mm:1471-1485, source/frontends/mariani/MarianiFrame.cpp:36"}, "symbol_tables": {"loaded_on_command": ["A2_ASM.SYM", "A2_USER2.SYM", "A2_SRC1.SYM", "A2_SRC2.SYM", "A2_PRODOS.SYM"], "lookup": "g_sProgramDir then g_sBuiltinSymbolsDir, which is the folder holding the bundled .SYM files", "note": "DebugInitialize runs from InitialiseEmulator, so the preload happens even when the debugger window is never opened. Only APPLE2E.SYM and A2_BASIC.SYM are in the bundle. The user slots and the source and assembler tables have no distributed content and are written by whoever needs them; a missing table leaves the debugger running without those names.\n", "preloaded_at_init": ["APPLE2E.SYM", "A2_BASIC.SYM", "A2_DOS33.SYM2", "A2_USER1.SYM"], "source_ref": "source/Debugger/Debugger_Symbols.cpp:45-55, 774, 814-817, source/frontends/mariani/AppDelegate.mm:1487-1491"}, "unreachable_resources": [{"filename": "Mockingboard-D.rom", "reason": "IDR_MOCKINGBOARD_D_FW appears only in the resource header and in the frontend's name table; nothing requests it", "source_ref": "resource/resource.h:38, source/frontends/mariani/MarianiFrame.cpp:172"}, {"filename": "TKClock.rom", "reason": "IDR_TKCLOCK_FW appears only in the resource header and in the frontend's name table; nothing requests it", "source_ref": "resource/resource.h:51, source/frontends/mariani/MarianiFrame.cpp:175"}, {"filename": "ThunderClockPlus.rom", "reason": "Its only consumer, LoadRom_Clock_ThunderClockPlus, has no caller in the tree, reads through the Win32 FindResource API and lives in a file the Xcode project never compiles\n", "source_ref": "source/Peripheral_Clock_ThunderClockPlus.cpp:200-215, resource/resource.h:40"}, {"filename": "Debug_Font.bmp", "reason": "IDB_DEBUG_FONT_7_by_8 is fetched with Win32 LoadBitmap against the Windows frame, and MarianiFrame::GetBitmap answers only the three CHARSET ids. Mariani draws its debugger with AppKit\n", "source_ref": "source/Debugger/Debugger_Display.cpp:595, source/frontends/mariani/MarianiFrame.cpp:52-65"}], "user_supplied_roms": {"note": "Both are installed over the ROM already loaded from the bundle and neither has a fixed name. AppleWin's -videorom has no equivalent: ParseCmdLine is never called in this tree.\n", "options": [{"accepts": "12 KB image at $D000 or 16 KB image at $C000, any path", "option": "--rom", "source_ref": "source/frontends/common2/argparser.cpp:197, source/frontends/common2/programoptions.cpp:81-91, source/Memory.cpp:2173-2213"}, {"accepts": "2 KB image at $F800, any path", "option": "--f8rom", "source_ref": "source/frontends/common2/argparser.cpp:198, source/frontends/common2/programoptions.cpp:92-101, source/Memory.cpp:2139-2161"}]}}, "core_classification": "community_fork", "core_version": "1.7", "cores": ["mariani"], "display_name": "Apple - Apple II (Mariani)", "emulator": "Mariani", "files": [{"bundled": true, "description": "Apple II system ROM, $D000 to $FFFF", "md5": "3c406514b9806a7c57ee65fb0b0c39b4", "name": "Apple2.rom", "note": "Loaded when the machine type is Apple II (original).", "required": true, "sha1": "09288be705464b608ff190519ab008d3dfcd1b05", "size": 12288, "source_ref": "source/Memory.cpp:2054, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:177", "validation": ["size"]}, {"bundled": true, "description": "Apple II Plus system ROM, $D000 to $FFFF", "md5": "572b3005a4fa49bc54917b069b82c1ab", "name": "Apple2_Plus.rom", "note": "Also read on an original Apple II with a language card in slot 0, where MemInitializeCustomF8ROM copies its last 2 KB over the autostart F8 area.\n", "required": true, "sha1": "33a24f5489ba9195b44be77d9afb2252594cb5c7", "size": 12288, "source_ref": "source/Memory.cpp:2055, 2065-2069, 2126-2137, source/frontends/mariani/MarianiFrame.cpp:178", "validation": ["size"]}, {"bundled": true, "description": "Apple II J-Plus system ROM, $D000 to $FFFF", "md5": "f3e8237eca3809bec2a42b984a1332a8", "name": "Apple2_JPlus.rom", "note": "Loaded when the machine type is Apple II J-Plus.", "required": true, "sha1": "ad200b3263d08e7235d0871c8595963a07adc905", "size": 12288, "source_ref": "source/Memory.cpp:2056, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:179", "validation": ["size"]}, {"bundled": true, "description": "Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF", "md5": "346bc782c6a08a531c460e33bc03daf4", "name": "Apple2e.rom", "note": "Loaded when the machine type is Apple //e (original).", "required": true, "sha1": "61fa9254628e5bb7236fb474006116d67684d747", "size": 16384, "source_ref": "source/Memory.cpp:2057, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:180", "validation": ["size"]}, {"bundled": true, "description": "Enhanced Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF", "md5": "38063e08c778503fc03ecebb979769e9", "name": "Apple2e_Enhanced.rom", "note": "Default machine type.", "required": true, "sha1": "b8ea90abe135a0031065e01697c4a3a20d51198b", "size": 16384, "source_ref": "source/Memory.cpp:2058, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:181", "validation": ["size"]}, {"bundled": true, "description": "Pravets 82 system ROM, $D000 to $FFFF", "md5": "c619b7edfcf021f3b8fd20d9386676ba", "name": "PRAVETS82.ROM", "note": "Loaded when the machine type is Pravets 82.", "required": true, "sha1": "8bd7ced83e209a15e9b19a05a5ef4b8e996dc1a5", "size": 12288, "source_ref": "source/Memory.cpp:2059, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:182", "validation": ["size"]}, {"bundled": true, "description": "Pravets 8M system ROM, $D000 to $FFFF", "md5": "76c79535f7cf77973e2c711aa977a124", "name": "PRAVETS8M.ROM", "note": "Loaded when the machine type is Pravets 8M.", "required": true, "sha1": "f1b4ff018acf95f3355f0d575b66a188d728b687", "size": 12288, "source_ref": "source/Memory.cpp:2060, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:183", "validation": ["size"]}, {"bundled": true, "description": "Pravets 8A system ROM, 4 KB internal Cx ROM then $D000 to $FFFF", "md5": "1896d7b98dd940c89f7c8ea899b71006", "name": "PRAVETS8C.ROM", "note": "Loaded when the machine type is Pravets 8A.", "required": true, "sha1": "c976fe56e57706c161f513a82ba3e0d8cda83904", "size": 16384, "source_ref": "source/Memory.cpp:2061, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:184", "validation": ["size"]}, {"bundled": true, "description": "TK3000 //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF", "md5": "8d84b614b545d4eec8799d3f325332cb", "name": "TK3000e.rom", "note": "Loaded when the machine type is TK3000 //e.", "required": true, "sha1": "f163e5753c18ff0e812a448e8da406f102600edf", "size": 16384, "source_ref": "source/Memory.cpp:2062, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:185", "validation": ["size"]}, {"bundled": true, "description": "Base64A system ROM, four 12 KB pages", "md5": "352fdbcae14c6a8c0398822c7a273309", "name": "Base64A.rom", "note": "Loaded when the machine type is Base64A. Copied into memrom as MaxRomPages pages of 12 KB.", "required": true, "sha1": "f1c779af480b5bda2bdd03950c1201a5c5143bea", "size": 49152, "source_ref": "source/Memory.cpp:2063, source/Memory.cpp:2065-2069, source/Memory.cpp:2114-2117, source/frontends/mariani/MarianiFrame.cpp:186", "validation": ["size"]}, {"description": "Non-autostart F8 monitor ROM", "md5": "d0a61e95ed1e1dc37c8e4801326aa79e", "name": "Freezes_Non-autostart_F8_Rom.rom", "note": "MemInitializeCustomF8ROM copies it over $F800 to $FFFF when the configuration value \"The Freeze's F8 Rom\" is set and the machine is an Apple II. The application bundle does not ship it, so it has to be placed in Contents/Resources, the only directory PathToResourceNamed searches.\n", "required": false, "sha1": "3180be6b555ee9ef1f59c4fc3f25c5aab8c39c81", "size": 2048, "source_ref": "source/Memory.cpp:2163-2168, source/Utilities.cpp:188-189, source/Common.h:94, source/frontends/mariani/MarianiFrame.cpp:187", "validation": ["size"]}, {"bundled": true, "description": "Apple II and II Plus character generator", "md5": "9ac0dc8c4d0002eb45b0b84be0bde5ec", "name": "Apple2_Video.rom", "note": "make_csbits reads it on every start, whatever the machine type.", "required": true, "sha1": "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659", "size": 2048, "source_ref": "source/NTSC_CharSet.cpp:249-256, 296, source/frontends/mariani/MarianiFrame.cpp:189", "validation": ["size"]}, {"bundled": true, "description": "Apple II J-Plus character generator", "md5": "271e2c9bf928b95e7baeff391db45495", "name": "Apple2_JPlus_Video.rom", "note": "Read on every start. Fills the two J-Plus character sets selected by AN2.", "required": true, "sha1": "0a382be58db5215c4a3de53b19a72fab660d5da2", "size": 2048, "source_ref": "source/NTSC_CharSet.cpp:258-266, 303, source/frontends/mariani/MarianiFrame.cpp:190", "validation": ["size"]}, {"bundled": true, "description": "Apple //e character generator, US", "md5": "9123fff3442c0e688cc6816be88dd4ab", "name": "Apple2e_Enhanced_Video.rom", "note": "Read on every start. The original //e set is derived from it by putting the non-alt characters back over the 32 mousetext slots.\n", "required": true, "sha1": "b2b5d87f52693817fc747df087a4aa1ddcdb1f10", "size": 4096, "source_ref": "source/NTSC_CharSet.cpp:278-285, 297, 299-301, source/frontends/mariani/MarianiFrame.cpp:191", "validation": ["size"]}, {"bundled": true, "description": "Base64A character generator", "md5": "4b45852b369e2afd864a02d0d91f70dc", "name": "Base64A_German_Video.rom", "note": "Read on every start. Split in two 2 KB halves for the two character sets.", "required": true, "sha1": "87ca8135f7526ddf829f9c2c4f7dbe4d568818fc", "size": 4096, "source_ref": "source/NTSC_CharSet.cpp:268-276, 304, source/frontends/mariani/MarianiFrame.cpp:192", "validation": ["size"]}, {"bundled": true, "description": "Pravets 82 character generator bitmap", "md5": "5b4866713477fdb08bb2a78d2d86ceb0", "name": "CHARSET82.bmp", "note": "Read through GetBitmap on every start, decoded with ImageIO and packed eight pixels to the octet. No size check: the copy stops at the shorter of the image and the requested buffer.\n", "required": true, "sha1": "34718c242ccc539c54b456eca84286421ad24166", "size": 8254, "source_ref": "source/NTSC_CharSet.cpp:291, source/frontends/mariani/MarianiFrame.cpp:52-61"}, {"bundled": true, "description": "Pravets 8M character generator bitmap", "md5": "f2720f70859026c76e07fc598fbe435f", "name": "CHARSET8M.bmp", "note": "Read through GetBitmap on every start.", "required": true, "sha1": "cfbdbc1d76542f2a60dbbbdf9deb218ee197351e", "size": 8254, "source_ref": "source/NTSC_CharSet.cpp:292, source/frontends/mariani/MarianiFrame.cpp:52-61"}, {"bundled": true, "description": "Pravets 8A character generator bitmap, both character sets", "md5": "9248c1f19f3d3277a031f46a19b2e350", "name": "CHARSET8C.bmp", "note": "Read twice, at row 0 for the alt character set off and at row 16 for on.", "required": true, "sha1": "0ec9ebe6542ca8f89ed4a7c417716b287a75b48e", "size": 16446, "source_ref": "source/NTSC_CharSet.cpp:293-294, source/frontends/mariani/MarianiFrame.cpp:52-61"}, {"bundled": true, "description": "Disk II controller firmware, 16 sector", "md5": "2020aa1413ff77fe29353f3ee72dc295", "name": "DISK2.rom", "note": "Read when the Disk II card initialises, which is slot 6 by default. Both firmware images are read up front and the one installed at $C600 follows the boot sector format of the inserted image.\n", "required": true, "sha1": "d4181c9f046aafc3fb326b381baac809d9e38d16", "size": 256, "source_ref": "source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2108, source/frontends/mariani/MarianiFrame.cpp:166", "validation": ["size"]}, {"bundled": true, "description": "Disk II controller firmware, 13 sector", "md5": "4f80448507cf43ab40c17ac08d89e278", "name": "DISK2-13sector.rom", "note": "Read alongside the 16 sector image when the Disk II card initialises.", "required": true, "sha1": "afd060e6f35faf3bb0146fa889fc787adf56330a", "size": 256, "source_ref": "source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2106, source/frontends/mariani/MarianiFrame.cpp:165", "validation": ["size"]}, {"bundled": true, "description": "Super Serial Card firmware", "md5": "67c0d61ab0911183faf05270f881a97e", "name": "SSC.rom", "note": "Read when the card initialises, slot 2 by default. The 256 bytes at offset 0x700 go to the slot ROM and the whole 2 KB stays as expansion ROM.\n", "required": true, "sha1": "6dab633470c6bc4cb3e81d09fda46597caf8ee57", "size": 2048, "source_ref": "source/SerialComms.cpp:957-970, source/frontends/mariani/MarianiFrame.cpp:167", "validation": ["size"]}, {"bundled": true, "description": "Parallel printer card firmware", "md5": "5902996f16dc78fc013f6e1db14805b3", "name": "Parallel.rom", "note": "Read when the printer card initialises, slot 1 by default.", "required": true, "sha1": "c75c751589cbcc1ad4ab4f63676af7abadd86f5b", "size": 256, "source_ref": "source/ParallelPrinter.cpp:43-52, source/frontends/mariani/MarianiFrame.cpp:171", "validation": ["size"]}, {"bundled": true, "description": "Mouse interface card firmware", "md5": "22563ab338024dac7b03510371d49c57", "name": "MouseInterface.rom", "note": "Read only when the user puts the mouse card in a slot. No default slot holds it.", "required": false, "sha1": "3a9d881a8a8d30f55b9719aceebbcf717f829d6f", "size": 2048, "source_ref": "source/MouseInterface.cpp:163-176, source/frontends/mariani/MarianiFrame.cpp:173", "validation": ["size"]}, {"bundled": true, "description": "Hard disk controller firmware, SmartPort", "md5": "2592efa1d34ade55d490a1b39911c9b2", "name": "HDC-SmartPort.bin", "note": "Default firmware of the hard disk card, which no slot holds until the user adds it. Block mode and drive count are patched into the copy afterwards.\n", "required": false, "sha1": "fd557998fd5823ad69a42ad1282e4fe47db02dca", "size": 256, "source_ref": "source/Harddisk.cpp:222-241, source/frontends/mariani/MarianiFrame.cpp:170", "validation": ["size"]}, {"bundled": true, "description": "Hard disk controller firmware, version 1", "md5": "e0a40e9166af27b16f60beb83c9233f0", "name": "Hddrvr.bin", "note": "Selected over the SmartPort firmware when a save state carries a hard disk card older than version 4.", "required": false, "sha1": "69667800c54da1d4466e7b2168c0e418a4cf586c", "size": 256, "source_ref": "source/Harddisk.cpp:227, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1441, source/frontends/mariani/MarianiFrame.cpp:168", "validation": ["size"]}, {"description": "Hard disk controller firmware, version 2", "md5": "a49e45e7a6d4de23e0845a59c7e31e0c", "name": "Hddrvr-v2.bin", "note": "Selected when a save state carries hard disk card version 4. The application bundle does not ship it, so it has to be placed in Contents/Resources for that state to restore.\n", "required": false, "sha1": "06115eebb4d58221b5c062a42bf3e41e137447ed", "size": 256, "source_ref": "source/Harddisk.cpp:228, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1443, source/frontends/mariani/MarianiFrame.cpp:169", "validation": ["size"]}, {"bundled": true, "description": "Boot sector written to a new DOS 3.3 disk image", "md5": "6ab4d0a20071dad38154a7c0278beee6", "name": "bootsector.bin", "note": "Read by the Disk Maker window when it formats an image without copying DOS 3.3.", "required": false, "sha1": "3b0d57ff9abb3302cc949f7e0cc71d38ea5a89ce", "size": 256, "source_ref": "source/ProDOS_Utils.cpp:832-836, source/frontends/mariani/MarianiFrame.cpp:194", "validation": ["size"]}, {"bundled": true, "description": "Two boot sectors written to a new ProDOS disk image", "md5": "2695dc5458076eb747b9f245dd1a7ed9", "name": "bootsector_prodos243.bin", "note": "Read by the Disk Maker window when it creates a ProDOS image.", "required": false, "sha1": "e2f1b6342efff3a39fafd239f200707bc7494592", "size": 1024, "source_ref": "source/ProDOS_Utils.cpp:792-796, source/frontends/mariani/MarianiFrame.cpp:195", "validation": ["size"]}, {"bundled": true, "description": "DOS 3.3 image copied to the first three tracks of a new disk", "md5": "46a02fc4775b3d959f3f949a70eaa616", "name": "dos33c.bin", "note": "Read by the Disk Maker window when DOS 3.3 is copied onto the new image.", "required": false, "sha1": "52d1bbeed17f2a2240cb38249dba3663ad0b8a1f", "size": 12288, "source_ref": "source/ProDOS_Utils.cpp:774-778, source/frontends/mariani/MarianiFrame.cpp:196", "validation": ["size"]}, {"bundled": true, "description": "ProDOS 2.4.3 kernel written as PRODOS on a new ProDOS disk", "md5": "90644bd658fd0922d28eccb7cfb7cb76", "name": "prodos243.bin", "note": "Read by the Disk Maker window when the ProDOS system file is copied.", "required": false, "sha1": "17c354249ddbfaf20b570d3c5e33b693e36646aa", "size": 17128, "source_ref": "source/ProDOS_Utils.cpp:595-599, source/frontends/mariani/MarianiFrame.cpp:197", "validation": ["size"]}, {"bundled": true, "description": "Bitsy Boot system file for a new ProDOS disk", "md5": "e6e8f7edc3ae48f827a97090cdca741c", "name": "bitsy.boot.bin", "note": "Read by the Disk Maker window when Bitsy Boot is copied.", "required": false, "sha1": "474c2b0c666239c76fce07e1c96471650431a2d6", "size": 365, "source_ref": "source/ProDOS_Utils.cpp:509-513, source/frontends/mariani/MarianiFrame.cpp:198", "validation": ["size"]}, {"bundled": true, "description": "Bitsy Bye quit system file for a new ProDOS disk", "md5": "6a32c39d8ac24bd56a03d79299b0a8f1", "name": "quit.system.bin", "note": "Read by the Disk Maker window when Bitsy Bye is copied.", "required": false, "sha1": "dbda9a9fd882af929b17cd2de1a975e7f1b93361", "size": 56, "source_ref": "source/ProDOS_Utils.cpp:552-556, source/frontends/mariani/MarianiFrame.cpp:199", "validation": ["size"]}, {"bundled": true, "description": "BASIC.SYSTEM 1.7 written to a new ProDOS disk", "md5": "a8d8c08f5cb4a9480389477c6c2f2834", "name": "basic17.system.bin", "note": "Read by the Disk Maker window when BASIC.SYSTEM is copied.", "required": false, "sha1": "6ba0571dee8da75f5c1736854e206eb9d2601fac", "size": 10240, "source_ref": "source/ProDOS_Utils.cpp:467-471, source/frontends/mariani/MarianiFrame.cpp:200", "validation": ["size"]}, {"bundled": true, "description": "Debugger symbol table for the main ROM", "md5": "034527d42a96d0f39977cb85c6a8f2d8", "name": "APPLE2E.SYM", "note": "Preloaded into the Main table when the emulator starts. Read from the support directory first, then from the bundle. Parsed as lines of address and name, with no size or hash check.\n", "required": false, "sha1": "fcfbbb25e06f58d13e762b02bfd468c834d98fc8", "size": 13444, "source_ref": "source/Debugger/Debugger_Symbols.cpp:46, 774, 814-817, source/Debugger/Debug.cpp:9499-9500"}, {"bundled": true, "description": "Debugger symbol table for Applesoft BASIC", "md5": "7253a9ba7d7ca807016f5adc0207dd7b", "name": "A2_BASIC.SYM", "note": "Preloaded into the Basic table when the emulator starts.", "required": false, "sha1": "496a0bd1af463fce81b362da9e4757a993e355d5", "size": 15378, "source_ref": "source/Debugger/Debugger_Symbols.cpp:47, 774, 814-817, source/Debugger/Debug.cpp:9502-9503"}, {"description": "Debugger symbol script for DOS 3.3", "md5": "88bd69906b4b3109b3f31472fb4b47f4", "name": "A2_DOS33.SYM2", "note": "Preloaded into the DOS33 table when the emulator starts. The .SYM2 extension routes it through the debugger script reader instead of the symbol parser, so it is only read from the support directory. The application bundle does not ship it.\n", "required": false, "sha1": "51cc84e2cbd9bd61d50a0931cdae0a2ef0a57d6c", "size": 2380, "source_ref": "source/Debugger/Debugger_Symbols.cpp:53, 774-806, source/Debugger/Debug.cpp:9506-9507"}, {"bundled": true, "description": "Print Char 21 font used by the debugger console and inspector", "md5": "972ce55fa7b905a494de16a7e8ec1949", "name": "PrintChar21.ttf", "note": "Registered from the resource folder by ATSApplicationFontsPath and asked for by family name. CharacterMappings maps Apple II character values to its codepoints.\n", "required": false, "sha1": "c66c1955dac84a253a661720a7947150c109f315", "size": 501992, "source_ref": "source/frontends/mariani/debugger/ConsoleViewController.mm:74, source/frontends/mariani/debugger/InspectorOutlineViewController.mm:356, source/frontends/mariani/debugger/CharacterMappings.mm:13-142, source/frontends/mariani/Mariani-Info.plist:5-6"}], "mode": "standalone", "notes": "Cocoa frontend for AppleWin, macOS only, shipped as Mariani.app and carrying\nAppleWin 1.31.0.5 (resource/version.h). ES-DE launches it with --d1 for the\nfloppy in slot 6 drive 1.\n\nResources are files inside the application bundle instead of Win32 resources\nlinked into the binary. MarianiFrame::GetResourceData maps each AppleWin\nresource id to a file name, NSBundle resolves it against Contents/Resources,\nand the file is read with open() then kept in a map for later requests\n(MarianiFrame.cpp:156-232, AppDelegate.mm:1465-1469). LinuxFrame::GetResource\nthrows when the file it gets back does not have the size the call site asked\nfor (linuxframe.cpp:133-145), so each entry below carries the size the code\ndemands. A name that resolves to nothing raises a \"Resource not found\" alert\nand returns a null pointer.\n\nMachine types offered in preferences: Apple II, II Plus, II J-Plus, //e,\nenhanced //e, Pravets 82, Pravets 8M, Pravets 8A, TK3000 //e and Base64A\n(PreferencesViewController.mm:191-193, 741-751). MemInitializeROM picks the\nsystem ROM from that setting (Memory.cpp:2052-2069). Default slots are the\nprinter card in 1, Super Serial Card in 2, Mockingboard in 4 and Disk II in 6\n(CardManager.cpp:325-334); the hard disk and mouse cards are chosen by the\nuser.\n\nTwo names in the resource map have no file in the bundle: the Resources build\nphase lists 49 items and neither appears (Mariani.xcodeproj/project.pbxproj).\nHddrvr-v2.bin is requested when a save state written with hard disk card\nversion 4 is loaded (Harddisk.cpp:228, 1439-1443), and\nFreezes_Non-autostart_F8_Rom.rom when the configuration value \"The Freeze's\nF8 Rom\" is set on an Apple II (Memory.cpp:2163-2168, Utilities.cpp:188-189,\nCommon.h:94). Contents/Resources is the only directory searched, so that is\nwhere the two belong.\n\nThe debugger comes up with the emulator, not with its window\n(context.cpp:116). CmdDebugStartup preloads four symbol tables\n(Debug.cpp:9492-9520), each read first from\n~/Library/Application Support/<bundle id>/ and then from the bundle\n(Debugger_Symbols.cpp:774, 814-817, MarianiFrame.cpp:36-37,\nAppDelegate.mm:1471-1491).\n\n--rom and --f8rom install a 12k/16k and a 2k image from any path over the ROM\nalready loaded (argparser.cpp:197-198, programoptions.cpp:81-101,\nMemory.cpp:2120-2213). AppleWin's -videorom and its hard disk firmware\nswitches are unreachable here: ParseCmdLine has no caller in this tree, and\nUseHdcFirmwareV1/V2 are called only from Windows/AppleWin.cpp:783-785, which\nthe Xcode project does not compile.\n", "profiled_date": "2026-08-12", "source": "https://github.com/sh95014/AppleWin", "source_commit": "492b017709fd67d3aff6b1d88d9971254e7214fa", "systems": ["apple-ii"], "type": "standalone", "upstream": "https://github.com/AppleWin/AppleWin", "upstream_commit": "75bd90d16a2e4eb16026bf615685ee2a02dfc0d6"}


id: mastergear
name: MasterGear
type: standalone
classification: other
source: https://fms.komkon.org/MG/
upstream: closed-source
profile_json:
{"author": "Marat Fayzullin (Garage Research)", "core_classification": "other", "core_version": "4.9", "cores": ["mastergear", "MASTERGEAR", "com.fms.mg"], "display_name": "Sega - Master System / Game Gear (MasterGear)", "emulator": "MasterGear", "exclusion_note": "Left out are the files MG writes and reads back itself, which are emulator state rather than anything a user obtains: <game>.sav holding cartridge SRAM, which LoadROM writes out before loading the next cartridge and reads back after it, <game>.sta and the desktop DEFAULT.STA fallback holding saved emulation state, the replay files of the instant replay recorder, LOG.MID holding the recorded MIDI soundtrack, the printer stream appended to by the Z80 output port, and the <game>.png screenshots the Android build saves for State Exchange. Cartridges and disk images are the user's own game content: .sms, .gg, .sg, .sc and .sf images reach LoadROM, .dsk, .SF and .FDI images reach LoadDSK and LoadFDI, and CART.SMS on Android and CART.ROM on the desktop are only the names used when the emulator is started with no game at all. SF7000.DSK is left out as a compiled-in default disk name that no code path in either shipped build opens. assets/memfs.mp3 is left out as well: the in-memory filesystem jniStart mounts carries one entry, dummy.txt, holding the text \"This is a dummy file.\", and no name in the binary reaches it. The Android audio and graphics libraries the loader opens by name are provided by the system. ref: libmain.so LoadROM 0x43cec, 0x44417, MIDILogging 0x2e4f0 (0x2e7f5),\n     OutZ80 0x44eb0 (0x450a8), LoadRPL 0x58b40-0x58d57,\n     SaveRPL 0x58920-0x58b3b, Application 0x41b70 (0x41da7), DSKName,\n     MG49-Ubuntu-x86-bin mg 0x4046f, 0x40497, MainActivity.java:1585\n", "files": [{"description": "SF7000 IPL, read into the cartridge window before the machine starts", "name": "SF7000.ROM", "note": "Loaded whenever the hardware becomes SF7000, and the only fixed ROM name in the binary. A failed open drops the emulator back to the previous hardware, which makes every disk image refuse to mount. The loader checks neither length nor contents, so the documented 8kB image is padded to 16kB with FFh and no hash is compared. Opened by bare name, so it resolves against the working directory and, on Android, against the home directory as well, and a gzipped copy answers too.", "required": true, "size": 8192, "source_ref": "libmain.so ResetSMS 0x435a0-0x43b0d (LoadROM 0x43604), LoadROM 0x43c80-0x4451a, LoadDSK 0x46db0-0x46ecb, MG49-Ubuntu-x86-bin mg 0x3d0fd-0x3d124, MG.html \"How do I use SF7000 disk images?\"", "system": "sega-sf7000"}, {"category": "game_data", "description": "cheat database read by the Cheatopedia browser", "name": "MasterGear-Cheats.zip", "note": "The Android build ships no cheat set. Cheatopedia looks for ROOT.chts in the package assets, then in the home directory and its subdirectories, and takes it from this archive in the Downloads directory, unpacking it into <HomeDir>/Cheats when it is newer. The author publishes it at fms.komkon.org/EmuAndroid/ and the copy read here carries ROOT.chts plus crystal-warriors-gg, dragon-crystal, gamegear, phantasy-star and ultima. No hash is recorded because the archive is refreshed in place at that address.", "required": false, "source_ref": "Cheatopedia.java:340-391, 414, 565-584"}, {"category": "game_data", "description": "user cheat sets added to the Cheatopedia menu", "name": "custom.chts", "note": "Pulled in by the File= directive that ROOT.chts carries, written out as /sdcard/MasterGear/custom.chts, and reached through the same lookup as any other set: package assets, then an absolute path, then the cheat directory.", "required": false, "source_ref": "Cheatopedia.java:504-508, 565-584, MasterGear-Cheats.zip ROOT.chts, EmuAndroid \"I want to add my own cheats to the Cheatopedia\"", "unsourceable": "cheat codes the user writes, in the format the documentation prints"}, {"bundled": true, "category": "game_data", "description": "title database keyed by system and CRC32", "name": "names.dat", "note": "Parsed from the package assets as lines of key colon title, keys reading SMS-0274179A. The copy at <HomeDir>/names.dat is read straight afterwards into the same map, so user entries extend and override the packaged ones.", "required": false, "size": 21161, "source_ref": "FileInfo.java:260-308", "unsourceable": "ships inside the paid application package"}, {"bundled": true, "category": "game_data", "description": "release history shown from the Android menu", "name": "changelog.html", "note": "Read whole from the package assets, and shown again through file:///android_asset/. No copy outside the package is consulted.", "required": false, "size": 68201, "source_ref": "EMULib.java:1075, 1104", "unsourceable": "ships inside the paid application package"}, {"category": "game_data", "description": "virtual joystick skin", "name": "Controls.png", "note": "Read as <HomeDir>/Controls.png when the joystick shape is set to Custom Skin, and by the layout editor. The author publishes a 320x276 template at fms.komkon.org/EmuAndroid/Controls.png to draw over.", "required": false, "source_ref": "MainActivity.java:1809, LayoutEditor.java:99, EmuAndroid \"Can I set my own virtual joystick images?\""}, {"category": "game_data", "description": "backdrop drawn around the emulated screen", "name": "Backdrop.png", "note": "Read as <HomeDir>/Backdrop.png while the decorum option is on. A built-in drawable stands in when the file is absent.", "required": false, "source_ref": "MainActivity.java:1047-1051", "unsourceable": "any picture the user places behind the emulated screen"}, {"category": "game_data", "description": "backdrop for one title", "name": "<game>.back.png", "note": "Named from the loaded ROM path and preferred over the shared backdrop for that game.", "required": false, "source_ref": "MainActivity.java:1047-1049", "unsourceable": "any picture the user places behind one title"}, {"category": "game_data", "description": "IPS patch applied to the loaded cartridge", "name": "<game>.ips", "note": "Named from the ROM path by MakeFileName and applied by LoadIPS when present. A patch opened by hand reaches the same loader through LoadFile.", "required": false, "source_ref": "libmain.so LoadROM 0x444bf-0x444e1, LoadFile 0x43b10-0x43b9f, LoadIPS 0x467e0, ApplyIPS 0x5b1e0", "unsourceable": "a patch the user supplies for one title"}, {"category": "game_data", "description": "cheat codes loaded from the file selector", "name": "<name>.cht", "note": "LoadFile compares the tail of the name against .CHT through a case folding compare and sends a match to LoadCHT, so the name is the one the user picked rather than one derived from the ROM path. The built-in menu writes edited cheats back under the same extension.", "required": false, "source_ref": "libmain.so LoadFile 0x43b10-0x43b2f, suffix compare 0x46a40-0x46b8f, LoadCHT 0x46b90-0x46c9b, MenuSMS 0x48bf1", "unsourceable": "cheat codes the user writes or collects"}], "mode": "standalone", "notes": "Sega 8bit emulator by Marat Fayzullin, covering Mark3, MasterSystem,\nMasterSystem 2, GameGear, SG1000, the keyboard-equipped SC3000 and the\ndisk-based SF7000. Two builds of version 4.9 were read. The Android package\ncom.fms.mg is sold on Google Play and not carried on the author's site, so it\ncame from a mirror; that copy has versionName 4.9, versionCode 4900, sha256\n11c3f3331d6774739c11dfd604f74f545a17ceba3feb7fb294f02bd80943af35, md5\n2cb4df11254f8525e0a2253677450555, and is accepted because its v1 certificate\nis the author's own key, CN=Marat Fayzullin O=Garage Research issued 2011,\nfingerprint d09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848,\nbeside a Play distribution source stamp in the signing block. The free MG 4.9\nbuilds for Windows and Ubuntu, published by the author, were read next to it\nand open the same files. The native libraries keep their symbol tables, so\nthe Android readings below cite libmain.so offsets in the x86_64 slice; the\narm64-v8a, armeabi-v7a, armeabi and x86 slices carry the same filename set.\nNo source has ever been published: the site states the code is not available\nto the general public and the documentation repeats it, while ColEm and fMSX\non the same site ship source archives.\nref: MG-Android-4900.apk META-INF/CERT.RSA, https://fms.komkon.org/MG/,\n     MG.html \"There is no version of MG for my Unix!\",\n     MG49-Windows-bin.zip, MG49-Ubuntu-x86-bin.tgz\n\nSF7000.ROM is the only system ROM either binary names, and it is read through\nthe cartridge loader. ResetSMS loads it whenever the requested hardware\nbecomes SF7000; LoadROM returning zero makes ResetSMS clear the SF7000 bits\nand restore the previous hardware, so LoadDSK finds the machine still is not\nan SF7000, ejects the image and fails, logging \"Failed switching into SF7000\nmode.\" when verbose output is on. Nothing about the file is checked: the size\ncomes from a seek to the end, is rounded up to the first power of two of at\nleast 16kB, and the buffer is filled with FFh before the read, so a short\nimage is padded rather than refused. When bit 15 of the mode word is set, a\nsuccessful load is followed by patching the image at eight fixed addresses,\n0008h, 0010h, 0018h, 0020h, 0028h, 0030h, 107Ch and 10F8h, with an EDh FEh\nC9h trap and a checksum byte.\nref: libmain.so ResetSMS 0x435a0-0x43b0d (LoadROM 0x43604, revert 0x4367d,\n     patch loop 0x43619-0x4367b), LoadROM 0x43c80-0x4451a (open 0x43db3,\n     size 0x43dfa-0x43f1a, read 0x43f4f), LoadDSK 0x46db0-0x46ecb,\n     MG49-Ubuntu-x86-bin mg 0x3d0fd-0x3d124, 0x3c330 (0x3ca58)\n\nThe other machines need no file. SEGA consoles boot from a small ROM that\nswitches itself off and hands the hardware to the cartridge, which MG does\nnot emulate, so MasterSystem, GameGear, SG1000 and SC3000 start straight into\nthe cartridge. SC3000 mode adds the keyboard and 32kB of RAM, and its BASIC\narrives as a cartridge like any other program: the packaged title database\nkeys Basic 2.10 and Basic 3.10 by cartridge CRC32 under the SC3000 heading.\nref: MG.html \"What are MasterSystem and GameGear?\", \"How do I use SC3000\n     keyboard?\", assets/names.dat\n\nOn Android one directory holds everything. MainActivity hands EMULib.k() to\njniStart, which copies it into the buffer GetHomeDir returns and passes that\nsame buffer to SetPrivateDir. Every open goes through mopen, then\nOpenRealFile, which tries the name as given and again as\n<PrivateDir>/<basename>, keeping the larger of the two when both open. That\ndirectory is external storage joined with the application label up to its\nfirst space, so /sdcard/MasterGear, falling back to getExternalFilesDirs(null)\nwhen it is not a writable directory; the author's own cheat file writes the\nsame path out in full. The desktop builds have no such directory and open\nevery name where they stand, which the documentation states as the current\ndirectory. Every one of these opens ends in zlib, mopen handing the\ndescriptor OpenRealFile returned to gzdopen while the disk loader and the\ndesktop builds call gzopen straight, so each file also opens gzipped, and on\nAndroid a content:// name is routed to the Android storage framework instead.\nref: MainActivity.java:2265-2276, EMULib.java:456, 494-553, 688-698,\n     libmain.so jniStart 0x18bb0-0x193e1 (0x1921c, 0x1926c),\n     SetPrivateDir 0x38f80, OpenRealFile 0x39190-0x393c3,\n     mopen 0x393d0-0x3959d, LoadFDI 0x558f7,\n     MG.html \"How do I use SF7000 disk images?\",\n     EmuAndroid \"System ROMs\", MasterGear-Cheats.zip ROOT.chts\n", "profiled_date": "2026-08-12", "source": "https://fms.komkon.org/MG/", "systems": ["sega-mastersystem", "sega-gamegear", "sega-sg1000", "sega-sc3000", "sega-sf7000"], "type": "standalone", "upstream": "closed-source"}


id: mcsoftserve
name: MCSoftserve
type: libretro
classification: pure_libretro
source: https://github.com/JesseTG/McSoftServe
source_commit: 438febb656140544bdf3bf6a3c1ad4edf0886709
profile_json:
{"core_classification": "pure_libretro", "core_version": "1.0.0", "cores": ["mcsoftserve"], "display_name": "McSoftServe", "emulator": "MCSoftserve", "files": [], "notes": "April Fools' 2024 novelty core simulating a Taylor C713 soft-serve machine\ncontrol panel. All assets (images, sounds, font) are embedded at compile time\nvia embed_binaries. No external files loaded.\n", "profiled_date": "2026-03-24", "source": "https://github.com/JesseTG/McSoftServe", "source_commit": "438febb656140544bdf3bf6a3c1ad4edf0886709", "systems": [], "type": "libretro"}


id: md-emu
name: MD.emu
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: https://github.com/ekeeke/Genesis-Plus-GX
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"core_classification": "community_fork", "core_version": "1.5.85", "cores": ["md-emu", "MD.emu", "MD-EMU"], "display_name": "Sega - MS/MD/CD (MD.emu)", "emulator": "MD.emu", "files": [{"agnostic": true, "config_key": "CFGKEY_MD_CD_BIOS_USA_PATH", "description": "Sega CD boot ROM read for the USA region", "name": "bios_CD_U.bin", "note": "Picked by the user from any path, under any name ending in .bin, .smd, .md, .gen or .sms, or inside a .zip, .7z or .rar holding one. The tests are the length and the \"BOOT\" text at 0x124 or 0x128; a file failing either aborts the load rather than falling back.", "region": ["north-america"], "required": true, "size": 131072, "source_ref": "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)", "system": "sega-megacd", "validation": ["size", "signature"]}, {"agnostic": true, "config_key": "CFGKEY_MD_CD_BIOS_JPN_PATH", "description": "Mega CD boot ROM read for the Japan region", "name": "bios_CD_J.bin", "note": "Taken by the default branch: USA and Europe go to the other two paths and every other region code lands here, both Japanese ones included.", "region": ["japan"], "required": true, "size": 131072, "source_ref": "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)", "system": "sega-megacd", "validation": ["size", "signature"]}, {"agnostic": true, "config_key": "CFGKEY_MD_CD_BIOS_EUR_PATH", "description": "Mega CD boot ROM read for the Europe region", "name": "bios_CD_E.bin", "note": "Reached when the boot sector byte at 0x20b is 0x64 or the Game Region setting is Europe.", "region": ["europe"], "required": true, "size": 131072, "source_ref": "MD.emu/src/main/Main.cc:311-344 (region choice, read, checks), MD.emu/src/genplus-gx/loadrom.cc:426-432 (size and signature), MD.emu/src/main/EmuMenuViews.cc:290-295,317-345 (picker and filter)", "system": "sega-megacd", "validation": ["size", "signature"]}], "mode": "standalone", "notes": "Android and Linux member of the EX Emulator series by Robert Broglia, published\nas com.explusalpha.MdEmu (MD.emu/metadata/conf.mk:2,4,6,7, README.md:3-4) and\nreached by ES-DE through its MD-EMU find rule. Genesis Plus GX is vendored under\nMD.emu/src/genplus-gx and driven by the app's own system, input and audio layers\n(MD.emu/src/CMakeLists.txt:6-55), while the Sega CD hardware comes from the Gens\ncode PicoDrive carried (MD.emu/src/scd/LC89510.cc:1-7) and disc images are read\nthrough Mednafen's CD layer (MD.emu/CMakeLists.txt:12). The build defines\nLSB_FIRST, NO_SYSTEM_PICO and MDFN_CD_NO_CCD (MD.emu/CMakeLists.txt:25), leaving\nPico out and CD support in. Content is read from .bin, .smd, .md, .gen and .sms\ncartridge images and from .cue, .iso and .chd discs (MD.emu/metadata/conf.mk:5,\nMD.emu/src/main/system.ccm:91-101). A .sms name switches the machine to Power\nBase Converter mode (MD.emu/src/genplus-gx/loadrom.cc:383-387); Game Gear and\nSG-1000 sit inside #if 0 blocks in the renderer with no SYSTEM_GG or SYSTEM_SG\ndefined anywhere in the tree (MD.emu/src/genplus-gx/vdp_render.cc:934-962,974-989,\nMD.emu/src/genplus-gx/system.h:35-40).\n\nThe CD boot ROM is the one file the user supplies and it carries no name of its\nown. Three pickers store arbitrary URIs under USA CD BIOS, Japan CD BIOS and\nEurope CD BIOS, filtered on the cartridge extensions\n(MD.emu/src/main/EmuMenuViews.cc:289-346, MD.emu/src/main/system.ccm:84-86,136,\nMD.emu/src/main/options.cc:57-61,86-90). Loading a disc picks one of the three by\nregion: the Game Region setting when it is not Auto, otherwise byte 0x20b of the\nboot sector, 0x7a for USA, 0x64 for Europe, anything else Japan\n(MD.emu/src/main/Main.cc:254-264,311-332,\nMD.emu/src/main/EmuMenuViews.cc:132-144,167-170, MD.emu/src/main/options.cc:31).\nAn empty path ends the load with \"Set a {} BIOS in the Options\" and a failed read\nwith \"Error loading BIOS\" (MD.emu/src/main/Main.cc:333-339). The file goes into\nthe cartridge buffer, and a path ending in .zip, .7z or .rar is scanned instead,\nthe first entry with a cartridge extension being taken\n(MD.emu/src/main/Main.cc:337,\nimagine/src/base/common/ApplicationContext.cc:542-562,\nimagine/src/fs/ArchiveFS.cc:75-78). init_rom accepts the image only at exactly\n131072 bytes with \"BOOT\" at 0x124 or 0x128 of the raw bytes, which is what raises\nsCD.isActive; anything else ends the load with \"Invalid BIOS\"\n(MD.emu/src/genplus-gx/loadrom.cc:426-432, MD.emu/src/main/Main.cc:340-344).\nCartridge content never reads it.\n\nNo other boot ROM exists here. t_config has no bios field\n(MD.emu/src/genplus-config.h:46-54), the Master System mapper table names BIOS\nonly in two game titles (MD.emu/src/genplus-gx/cart_hw/sms_cart.cc:119,126), and\nthe TMSS OS ROM is copied out of the loaded image rather than read\nfrom a file, behind a config.tmss bit nothing turns on\n(MD.emu/src/genplus-gx/genesis.cc:313-320,\nMD.emu/src/genplus-gx/mem68k.cc:471-476). Upstream's load_bios and the\nbios_CD_U.bin, bios_CD_E.bin and bios_CD_J.bin names it opens have no counterpart\nin this tree (upstream core/loadrom.c:394-415,\nupstream libretro/libretro.c:3416-3418).\n\nThe lock-on ROMs read nothing. osd.h keeps upstream's ggenie.bin, areplay.bin,\nsk.bin and sk2chip.bin paths and all three loaders are compiled\n(MD.emu/src/osd.h:13-16, MD.emu/src/genplus-gx/cart_hw/ggenie.cc:43-49,\nMD.emu/src/genplus-gx/cart_hw/areplay.cc:43-49,\nMD.emu/src/genplus-gx/cart_hw/md_cart.cc:499-531), but every one of them hangs off\nconfig.lock_on, which the value initialised config object leaves at zero and no\ncode in the tree ever writes (MD.emu/src/main/AppMeta.cc:26,\nMD.emu/src/genplus-gx/cart_hw/md_cart.cc:499,702,850). There is no menu item and\nno config key for it (MD.emu/src/main/system.ccm:81-89), where the libretro port\ndrives the same switch from a core option\n(upstream libretro/libretro.c:1715-1721).\n\nPer content the app writes and reads files named after the ROM: .srm cartridge\nbackup memory, .brm CD backup memory it formats itself when absent\n(MD.emu/src/main/Main.cc:93-101,124-233), .gp states\n(MD.emu/src/main/system.ccm:162) and a .pat cheat list under the cheats path\n(MD.emu/src/main/Cheats.cc:388-391,438-441). Settings live in MdEmu.config\n(MD.emu/src/main/AppMeta.cc:34). Mednafen's image reader picks up an .sbi beside a\ncue sheet when one is present\n(EmuFramework/src/shared/mednafen/cdrom/CDAccess_Image.cpp:928-943), and\ngpOverlay.png and the shader sources are drawn by the framework from the\napplication bundle (EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:58-73, MD.emu/src/main/AppMeta.cc:188-199).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["sega-megadrive", "sega-megacd", "sega-mastersystem"], "type": "standalone", "upstream": "https://github.com/ekeeke/Genesis-Plus-GX", "upstream_commit": "27426f00aa68f9f358c86919e8a40985326fa05b"}


id: mednafen
name: Mednafen
type: standalone
classification: other
source: https://mednafen.github.io/
upstream: https://mednafen.github.io/
profile_json:
{"core_classification": "other", "core_version": "1.32.1", "cores": ["mednafen"], "display_name": "Mednafen", "emulator": "Mednafen", "files": [{"description": "Apple II+ AppleSoft BASIC and Autostart system ROMs, concatenated (341-0011, 341-0012, 341-0013, 341-0014, 341-0015, 341-0020)", "min_size": 12288, "name": "apple2-asoft-auto.rom", "note": "System firmware for model ii+, ROM card for model ii. Read as 0x3000 bytes at $D000. The hash is in the ROMDB table and only labels the dump in the startup log; nothing rejects a mismatch.", "required": true, "sha256": "fc3e9d41e9428534a883df5aa10eb55b73ea53d2fcbb3ee4f39bed1b07a82905", "source_ref": "apple2/apple2.cpp:1342-1350, 1869, 2282, 1473-1476", "system": "apple-ii", "validation": ["size"]}, {"description": "Apple II Integer BASIC and Autostart system ROMs, concatenated (341-0001, 341-0002, 341-0003, 341-0020)", "min_size": 8192, "name": "apple2-int-auto.rom", "note": "System firmware for model ii, ROM card for model ii+. Read as 0x2000 bytes at $E000, the $D000-$DFFF window stays unmapped. Reached under the default model when a DOS 3.2 disk drops RAM to 48 KiB.", "required": true, "sha256": "cb52b212a62f808c2f59600b2823491ee12bd91cab8e0260fe34b5f14c47552f", "source_ref": "apple2/apple2.cpp:1352-1363, 1860, 2284, 2392, 1468-1471", "system": "apple-ii", "validation": ["size"]}, {"description": "Apple IIe BASIC and system ROMs, concatenated (342-0135-A, 342-0134-A)", "min_size": 16384, "name": "apple2e.rom", "note": "Loaded unconditionally when apple2.model is iie. Read as 0x4000 bytes at $C000.", "required": true, "sha256": "1fb812584c6633fa16b77b20915986ed1178d1e6fc07a647f7ee8d4e6ab9d40b", "source_ref": "apple2/apple2.cpp:1320-1325, 2266, 1478-1481", "system": "apple-iie", "validation": ["size"]}, {"description": "Apple IIe video (character generator) ROM, 342-0133-A", "min_size": 4096, "name": "apple2e-video.rom", "note": "Loading aborts on sha256 0d54ff735c060c55d54b8a22d0112af78a6465ce9c9aae4a865d207e5c8ff1e7, a known bad dump (apple2.cpp:2319-2320). No positive hash check.", "required": true, "sha256": "ed5bdd4afa509134e85f1d020685af7ff50e279226eb869a17825b471cc1634c", "source_ref": "apple2/apple2.cpp:2299-2324, 1488-1491", "system": "apple-iie", "validation": ["size"]}, {"description": "Apple IIe keyboard ASCII mapping ROM, 342-0132-B", "min_size": 2048, "name": "apple2e-kb.rom", "note": "The revised IIe dump 342-0132-C, sha256 fbb9620e01f4f728e5a8ba86544900978d7803f6a7d577d384e288dfed9a4907, is equally recognised at this filename. Read as 0x800 bytes.", "required": true, "sha256": "68198ae95923926b0307893d03ec286f00822c93a0b6dabfca565f6718dd5a56", "source_ref": "apple2/apple2.cpp:2331-2351, 1498-1506", "system": "apple-iie", "validation": ["size"]}, {"description": "Enhanced Apple IIe BASIC and system ROMs, concatenated (342-0304-A, 342-0303-A, 342-0349-B)", "min_size": 16384, "name": "apple2e-enh.rom", "note": "Loaded unconditionally when apple2.model is iie_enh. Read as 0x4000 bytes at $C000.", "required": true, "sha256": "aab38a03ca8deabbb2f868733148c2efd6f655a59cd9c5d058ef3e0b7aa86a1a", "source_ref": "apple2/apple2.cpp:1327-1332, 2264, 1483-1486", "system": "apple-iie", "validation": ["size"]}, {"description": "Enhanced Apple IIe video (character generator) ROM, 342-0265-A", "min_size": 4096, "name": "apple2e-enh-video.rom", "note": "Same bad-dump rejection as apple2e-video.rom.", "required": true, "sha256": "52c3b87900ac939f6525402cab1ccfd8f8259290fc6df54da48fb4c98ae3ed0f", "source_ref": "apple2/apple2.cpp:2299-2324, 1493-1496", "system": "apple-iie", "validation": ["size"]}, {"description": "Enhanced Apple IIe keyboard ASCII mapping ROM, 341-0132-D", "min_size": 2048, "name": "apple2e-enh-kb.rom", "required": true, "sha256": "a1989da84ea4381d309e7e08783771f884e913236b9bcc71c3d649aacf76537a", "source_ref": "apple2/apple2.cpp:2331-2351, 1508-1511", "system": "apple-iie", "validation": ["size"]}, {"description": "Disk II interface 16-sector P5 boot ROM, 341-0027", "name": "disk2-16boot.rom", "note": "Default Disk II firmware. The sha256 is enforced: a mismatch throws \"Firmware data ... is corrupt or otherwise wrong\".", "required": true, "sha256": "de1e3e035878bab43d0af8fe38f5839c527e9548647036598ee6fe7ec74d2a7d", "size": 256, "source_ref": "apple2/apple2.cpp:2119, 2127-2137, 1620", "system": "apple-ii", "validation": ["size", "sha256"]}, {"description": "Disk II interface 16-sector P6 sequencer ROM, 341-0028", "name": "disk2-16seq.rom", "note": "P6 sequencer dumps taken linearly through the P5 socket must have A7 swapped with A5, D4 with D7 and D5 with D6 before Mednafen accepts them. P5 boot ROMs need no such rearranging.", "required": true, "sha256": "e5e30615040567c1e7a2d21599681f8dac820edbdcda177b816a64d74b3a12f2", "size": 256, "source_ref": "apple2/apple2.cpp:2120, 2127-2137, 1620", "system": "apple-ii", "validation": ["size", "sha256"]}, {"description": "Disk II interface 13-sector P5 boot ROM, 341-0009", "name": "disk2-13boot.rom", "note": "Selected automatically for DOS 3.2 disks, or by disk2.firmware 13sec in a MAI file.", "required": true, "sha256": "2d2599521fc5763d4e8c308c2ee7c5c4d5c93785b8fb9a4f7d0381dfd5eb60b6", "size": 256, "source_ref": "apple2/apple2.cpp:2113, 2127-2137, 2000-2006", "system": "apple-ii", "validation": ["size", "sha256"]}, {"description": "Disk II interface 13-sector P6 sequencer ROM, 341-0010", "name": "disk2-13seq.rom", "note": "Same P6 rearranging as disk2-16seq.rom. A linear P5-socket dump hashes to 383c55f5333cbfde39dd41528186631e5aca2eddfec30716344f03b6a4d44655 and is rejected.", "required": true, "sha256": "4234aed053c622b266014c4e06ab1ce9e0e085d94a28512aa4030462be0a3cb9", "size": 256, "source_ref": "apple2/apple2.cpp:2114, 2127-2137, 2000-2006", "system": "apple-ii", "validation": ["size", "sha256"]}, {"description": "Atari Lynx boot ROM", "min_size": 512, "name": "lynxboot.img", "note": "Loaded for every cartridge, before the cart itself. Throws if the file is under 512 bytes; the first 512 bytes are used. No hash check and no HLE fallback.", "required": true, "source_ref": "lynx/system.cpp:101, lynx/rom.cpp:55-74", "system": "atari-lynx", "validation": ["size"]}, {"description": "Famicom Disk System BIOS", "min_size": 8192, "name": "disksys.rom", "note": "8192 bytes are read. If they begin with an iNES signature the stream is advanced another 16 bytes, plus 16384 more when byte 4 of the header reads 2, and a second 8192 bytes are read from there.", "required": true, "source_ref": "nes/fds.cpp:603-617", "system": "nintendo-fds", "validation": ["size"]}, {"description": "Game Genie ROM image", "min_size": 4352, "name": "gg.rom", "note": "Loaded only when nes.gg is enabled; that setting defaults to 0. Path comes from nes.ggrom. A raw image is read as 4352 contiguous bytes. An iNES image takes 4096 bytes of PRG after the 16-byte header, then 256 bytes of CHR at offset 16400, so it needs at least 16656 bytes. The image here is the raw form: the 4096 byte Game Genie PRG, crc 1a3a22a1, followed by the first 256 bytes of its CHR, both from the MAME ggenie set.", "required": false, "source_ref": "nes/cart.cpp:570-597, nes/nes.cpp:298-299, nes/nes.cpp:454-455", "system": "nintendo-nes"}, {"description": "CD-ROM System Card 3.0", "name": "syscard3.pce", "note": "Default of both pce.cdbios and pce_fast.cdbios. The pce module imposes no size constraint, the file length drives the bank mapping (pce/huc.cpp:308-372). The pce_fast module reads exactly 262144 bytes and skips a 512-byte copier header when the file size has bit 9 set (pce_fast/huc.cpp:296-301). Arcade Card mode extends the same image, it does not need another file.", "required": true, "size": 262144, "source_ref": "pce/pce.cpp:647-656, 1103, pce_fast/pce.cpp:480-487, 647", "system": "nec-pc-engine-cd"}, {"description": "Games Express CD Card BIOS", "name": "gecard.pce", "note": "Default of pce.gecdbios, used instead of pce.cdbios when DetectGECD recognises the disc. The pce_fast module has no equivalent setting.", "required": false, "size": 262144, "source_ref": "pce/pce.cpp:514-550, 647-648, 1104", "system": "nec-pc-engine-cd"}, {"description": "PC-FX BIOS", "name": "pcfx.rom", "note": "Default of pcfx.bios. Must be exactly 1048576 bytes or loading throws. No hash check.", "required": true, "size": 1048576, "source_ref": "pcfx/pcfx.cpp:605-618, 1115", "system": "nec-pcfx", "validation": ["size"]}, {"description": "PC-FX FX-SCSI expansion ROM", "min_size": 524288, "name": "FX-SCSI ROM", "note": "Path comes from pcfx.fxscsi, which defaults to \"0\" and is skipped for the values 0, none and the empty string. Mednafen names no default file and opens the path with a bare FileStream, so it is not resolved under the firmware directory. Marked developer-only upstream. 524288 bytes are read and mapped at 0x80780000.", "required": false, "source_ref": "pcfx/pcfx.cpp:620-632, 1116", "system": "nec-pcfx"}, {"description": "SCPH-5500 / v3.0J BIOS", "name": "scph5500.bin", "note": "Default of psx.bios_jp. Size must be exactly 524288. With psx.bios_sanity on, which is the default, a hash listed as a bad dump or as belonging to another region throws; an unknown hash only logs a warning.", "region": ["japan"], "required": true, "sha256": "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb", "size": 524288, "source_ref": "psx/psx.cpp:1764-1769, 1773-1781, 2373, 251", "system": "sony-playstation", "validation": ["size", "sha256"]}, {"description": "SCPH-5501 / v3.0A BIOS", "name": "scph5501.bin", "note": "Default of psx.bios_na. The BIOS table carries 24 recognised dumps in total, two of them flagged bad (psx.cpp:228-268).", "region": ["north-america"], "required": true, "sha256": "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef", "size": 524288, "source_ref": "psx/psx.cpp:1764-1769, 1773-1781, 2374, 252", "system": "sony-playstation", "validation": ["size", "sha256"]}, {"description": "SCPH-5502 / v3.0E BIOS", "name": "scph5502.bin", "note": "Default of psx.bios_eu.", "region": ["europe"], "required": true, "sha256": "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09", "size": 524288, "source_ref": "psx/psx.cpp:1764-1769, 1773-1781, 2375, 253", "system": "sony-playstation", "validation": ["size", "sha256"]}, {"description": "Saturn BIOS v1.01 (Japan)", "name": "sega_101.bin", "note": "Default of ss.bios_jp.", "region": ["japan", "asia-ntsc"], "required": true, "sha256": "dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac", "size": 524288, "source_ref": "ss/ss.cpp:1431-1434, 1437-1445, 2441, 1459", "system": "sega-saturn", "validation": ["size", "sha256"]}, {"description": "Saturn BIOS (North America and Europe)", "name": "mpr-17933.bin", "note": "Default of ss.bios_na_eu.", "region": ["north-america", "europe", "south-korea", "asia-pal", "brazil", "latin-america"], "required": true, "sha256": "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f", "size": 524288, "source_ref": "ss/ss.cpp:1431-1434, 1437-1445, 2442, 1461", "system": "sega-saturn", "validation": ["size", "sha256"]}, {"description": "Saturn BIOS v1.003 (Japan)", "name": "sega1003.bin", "note": "Recognised alternative for ss.bios_jp.", "region": ["japan", "asia-ntsc"], "required": false, "sha256": "cc1e1b7f88f1c6e6fc35994bae2c2292e06fdae258c79eb26a1f1391e72914a8", "size": 524288, "source_ref": "ss/ss.cpp:1457, 1447-1492", "system": "sega-saturn", "validation": ["size", "sha256"]}, {"description": "Saturn BIOS v1.00 (Japan)", "name": "sega_100.bin", "note": "Recognised alternative for ss.bios_jp.", "region": ["japan", "asia-ntsc"], "required": false, "sha256": "ae4058627bb5db9be6d8d83c6be95a4aa981acc8a89042e517e73317886c8bc2", "size": 524288, "source_ref": "ss/ss.cpp:1458, 1447-1492", "system": "sega-saturn", "validation": ["size", "sha256"]}, {"description": "Saturn BIOS v1.00a (North America and Europe)", "name": "sega_100a.bin", "note": "Recognised alternative for ss.bios_na_eu.", "region": ["north-america", "europe", "south-korea", "asia-pal", "brazil", "latin-america"], "required": false, "sha256": "87293093fad802fcff31fcab427a16caff1acbc5184899b8383b360fd58efb73", "size": 524288, "source_ref": "ss/ss.cpp:1460, 1447-1492", "system": "sega-saturn", "validation": ["size", "sha256"]}, {"description": "ST-V BIOS (Japan)", "name": "epr-20091.ic8", "note": "Default of ss.bios_stv_jp. ST-V dumps are absent from the sanity table, so only the 524288-byte size is enforced. Loaded byte-swapped the other way round from a Saturn BIOS (ss.cpp:1495-1499).", "region": ["japan", "asia-ntsc"], "required": true, "size": 524288, "source_ref": "ss/ss.cpp:1420-1428, 1437-1445, 2444", "system": "sega-stv", "validation": ["size"]}, {"description": "ST-V BIOS (North America)", "name": "epr-17952a.ic8", "note": "Default of ss.bios_stv_na, used for every area that is not Japan, Asia NTSC or PAL Europe.", "region": ["north-america"], "required": true, "size": 524288, "source_ref": "ss/ss.cpp:1420-1428, 1437-1445, 2445", "system": "sega-stv", "validation": ["size"]}, {"description": "ST-V BIOS (Europe)", "name": "epr-17954a.ic8", "note": "Default of ss.bios_stv_eu.", "region": ["europe"], "required": true, "size": 524288, "source_ref": "ss/ss.cpp:1420-1428, 1437-1445, 2446", "system": "sega-stv", "validation": ["size"]}, {"description": "King of Fighters '95 ROM cart", "min_size": 2097152, "name": "mpr-18811-mx.ic1", "note": "Default of ss.cart.kof95_path. Loaded when the cart type resolves to KOF95, which ss.cart auto does from the internal game database. 0x200000 bytes are read and byte-swapped.", "required": false, "source_ref": "ss/ss.cpp:1332, 1389-1397, 2477, ss/cart/rom.cpp:37-48", "system": "sega-saturn"}, {"description": "Ultraman: Hikari no Kyojin Densetsu ROM cart", "min_size": 2097152, "name": "mpr-19367-mx.ic1", "note": "Default of ss.cart.ultraman_path. Same loading path as the KoF 95 cart.", "required": false, "source_ref": "ss/ss.cpp:1333, 1389-1397, 2478, ss/cart/rom.cpp:37-48", "system": "sega-saturn"}, {"description": "Action Replay 4M Plus firmware", "min_size": 262144, "name": "satar4mp.bin", "note": "Default of ss.cart.satar4mp_path. 0x40000 bytes are read into the flash array and byte-swapped. The setting is hidden from the documentation and the cart is marked unfinished upstream, pending CPU UBC emulation (ar4mp.cpp:22-24).", "required": false, "source_ref": "ss/ss.cpp:1334, 1389-1397, 2479, ss/cart/ar4mp.cpp:125-140", "system": "sega-saturn"}, {"description": "Sega CD BIOS", "name": "us_scd1_9210.bin", "note": "Default of md.cdbios. LoadCD is wired into the module and reaches MDCD_Init, which throws unless the file is exactly 131072 bytes. The setting's own help text states that Sega CD emulation is currently nonfunctional.", "required": true, "size": 131072, "source_ref": "md/cd/cd.cpp:894-915, 971-989, md/system.cpp:630-641, 801, 755", "system": "sega-megacd", "validation": ["size"]}, {"description": "Game Boy Advance BIOS", "hle_fallback": true, "name": "GBA BIOS ROM image", "note": "Path comes from gba.bios, which defaults to the empty string and is skipped for the values 0, none and the empty string, so Mednafen names no default file. When set, the file must be exactly 16384 bytes. Otherwise the built-in HLE BIOS myROM is used, and the setting is ignored outright for GSF playback.", "required": false, "size": 16384, "source_ref": "gba/GBA.cpp:2470-2494, 3278, 772", "system": "nintendo-gba", "validation": ["size"]}], "mode": "standalone", "notes": "Multi-system emulator by the Mednafen Team, the upstream of the beetle_* and\nmednafen_* libretro cores, which are forks of individual modules. A module is\npicked automatically from the file, or forced with -force_module <name>.\n\nEvery firmware file resolves to <base>/<filesys.path_firmware>/<name>, with\nfilesys.path_firmware defaulting to \"firmware\" and the base directory being\n~/.mednafen on Unix. An absolute path in either the setting or the per-file\npath setting bypasses that. A file placed directly in the base directory is\nstill found, as a pre-0.9.0 compatibility fallback.\nref: general.cpp:277-300, mednafen.cpp:124\n\nModules compiled by default that load no external file: gb, snes, snes_faust,\nvb, wswan, ngp, sms, gg. The snes module (bsnes 0.059) has every coprocessor\nROM compiled in; snes_faust synthesises the DSP-1 and CX4 data ROMs\n(cart/dsp1-datarom-synth.h, cart/cx4.cpp:58); ngp installs a reverse\nengineered HLE BIOS (ngp/bios.cpp:182-239).\n\nThe nes_new module is declared but never built: configure.ac:392-393 keeps\nboth the AC_DEFINE and the AM_CONDITIONAL commented out.\n\ncdplay (audio CD), ssfplay (Saturn SSF) and sasplay (Sega Model 2/3 SCSP\nsound) are player modules, not system emulation. sasplay reads the board's\nsound ROM set from the directory of the loaded file, never from the firmware\ndirectory (sasplay.cpp:869-886), so those ROMs are game content.\n\nTwo settings name an external file that is not firmware data. wswan.excomm.path\n(\"wonderfence\") is an executable forked and execlp'd for link comms\n(comm.cpp:56-65). Custom palettes resolve to <gamebase>.pal,\n<gamebase>.<md5>.pal or <shortname>.pal (general.cpp:303-322) and are\nuser-authored.\n\nES-DE invokes the binary as %EMULATOR_MEDNAFEN% -force_module <module> %ROM%\nand declares no BIOS of its own.\n", "profiled_date": "2026-08-08", "source": "https://mednafen.github.io/", "systems": ["apple-ii", "apple-iie", "atari-lynx", "bandai-wswan", "bandai-wswanc", "nec-pc-engine", "nec-pc-engine-cd", "nec-pcfx", "nec-supergrafx", "nintendo-fds", "nintendo-gb", "nintendo-gbc", "nintendo-gba", "nintendo-nes", "nintendo-snes", "nintendo-virtualboy", "sega-gamegear", "sega-mastersystem", "sega-megacd", "sega-megadrive", "sega-saturn", "sega-stv", "snk-ngp", "snk-ngpc", "sony-playstation"], "type": "standalone", "upstream": "https://mednafen.github.io/"}


id: mednafen_gba
name: mednafen_gba
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/beetle-gba-libretro
upstream: https://mednafen.github.io/
source_commit: 145d4884ad246e3c16765f6d69decb2a4359b6ae
profile_json:
{"core_classification": "frozen_snapshot", "core_version": "v0.9.36", "cores": ["mednafen_gba"], "display_name": "Nintendo - Game Boy Advance (Beetle GBA)", "emulator": "mednafen_gba", "files": [{"description": "Game Boy Advance BIOS", "hle_fallback": true, "name": "gba_bios.bin", "required": false, "size": 16384, "source_ref": "mednafen/gba/GBA.cpp:2647-2672", "validation": ["size"]}], "notes": "Frozen at Mednafen v0.9.36 GBA module. GBA code derived from VisualBoyAdvance.\nBuilt-in HLE BIOS used by default. Real BIOS improves compatibility.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-gba-libretro", "source_commit": "145d4884ad246e3c16765f6d69decb2a4359b6ae", "systems": ["gba"], "type": "libretro", "upstream": "https://mednafen.github.io/"}


id: mednafen_lynx
name: mednafen_lynx
type: alias
profile_json:
{"alias_of": "beetle_lynx", "core_version": "v1.24.0", "cores": ["mednafen_lynx"], "display_name": "Atari - Lynx (Beetle Lynx)", "emulator": "mednafen_lynx", "files": [], "note": "This core uses the same BIOS/firmware as beetle_lynx. See emulators/beetle_lynx.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_ngp
name: mednafen_ngp
type: alias
profile_json:
{"alias_of": "beetle_ngp", "core_version": "v1.29.0.0", "cores": ["mednafen_ngp"], "display_name": "SNK - Neo Geo Pocket / Color (Beetle NeoPop)", "emulator": "mednafen_ngp", "files": [], "note": "This core uses the same BIOS/firmware as beetle_ngp. See emulators/beetle_ngp.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_pce
name: mednafen_pce
type: libretro
classification: community_fork
source: https://github.com/libretro/beetle-pce-libretro
upstream: https://mednafen.github.io/
source_commit: ae99235c2139c176c1a8d0fde2957bf701d3cab0
profile_json:
{"core_classification": "community_fork", "core_version": "v0.9.38.7", "cores": ["mednafen_pce", "pce"], "display_name": "NEC - PC Engine / SuperGrafx / CD (Beetle PCE)", "emulator": "mednafen_pce", "files": [{"description": "CD-ROM System Card 3.0 (Japan)", "name": "syscard3.pce", "note": "Default value for pce_cdbios option.", "region": ["japan"], "required": true, "source_ref": "libretro.cpp:1051-1052, mednafen/settings.cpp:40"}, {"description": "CD-ROM System Card 2.0 (Japan)", "name": "syscard2.pce", "note": "pce_cdbios = 'System Card 2'.", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:1053-1054"}, {"description": "CD-ROM System Card 1.0 (Japan)", "name": "syscard1.pce", "note": "pce_cdbios = 'System Card 1'.", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:1055-1056"}, {"aliases": ["gecard.pce"], "description": "Games Express CD Card", "name": "gexpress.pce", "note": "pce_cdbios = 'Games Express' or auto-detected via DetectGECD().", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:1057-1058, mednafen/settings.cpp:41, mednafen/pce/pce.cpp:373-411"}, {"description": "CD-ROM System Card 3.0 (US / TurboGrafx-CD)", "name": "syscard3u.pce", "note": "pce_cdbios = 'System Card 3 US'. Not in .info.", "region": ["north-america"], "required": false, "source_ref": "libretro.cpp:1059-1060"}, {"description": "CD-ROM System Card 2.0 (US / TurboGrafx-CD)", "name": "syscard2u.pce", "note": "pce_cdbios = 'System Card 2 US'. Not in .info.", "region": ["north-america"], "required": false, "source_ref": "libretro.cpp:1061-1062"}], "notes": "Fork of Mednafen's pce module (accurate, with SuperGrafx and CD support). Separate codebase from mednafen_pce_fast (mednafen/pce/ vs mednafen/pce_fast/). BIOS loaded via PCE_LoadCD() at CD-ROM load time. Core option \"pce_cdbios\" selects which card image to use (default: System Card 3). DetectGECD() auto-detects Games Express discs and overrides to gexpress.pce. Arcade Card mode (pce_arcadecard option, enabled by default) extends System Card 3 with extra RAM mapping. No hash or size validation on BIOS load. Upstream pce module has configurable pce.cdbios/pce.gecdbios string settings; the 6-option dropdown is a libretro addition.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-pce-libretro", "source_commit": "ae99235c2139c176c1a8d0fde2957bf701d3cab0", "systems": ["nec-pc-engine"], "type": "libretro", "upstream": "https://mednafen.github.io/", "verification": "existence"}


id: mednafen_pce_fast
name: mednafen_pce_fast
type: libretro
classification: community_fork
source: https://github.com/libretro/beetle-pce-fast-libretro
upstream: https://mednafen.github.io/
source_commit: b211204c7026dff6e86e79b00185512e2421fff8
profile_json:
{"core_classification": "community_fork", "core_version": "v1.31.0.0", "cores": ["mednafen_pce_fast", "pce_fast", "beetle_pce_fast"], "display_name": "NEC - PC Engine / CD (Beetle PCE FAST)", "emulator": "mednafen_pce_fast", "files": [{"description": "CD-ROM System Card 3.0 (Japan)", "name": "syscard3.pce", "note": "Default value for pce_fast_cdbios option.", "region": ["japan"], "required": true, "source_ref": "libretro.c:65, libretro.c:1896-1901"}, {"description": "CD-ROM System Card 2.0 (Japan)", "name": "syscard2.pce", "note": "pce_fast_cdbios = 'System Card 2'.", "region": ["japan"], "required": false, "source_ref": "libretro.c:1903"}, {"description": "CD-ROM System Card 1.0 (Japan)", "name": "syscard1.pce", "note": "pce_fast_cdbios = 'System Card 1'.", "region": ["japan"], "required": false, "source_ref": "libretro.c:1905"}, {"aliases": ["gecard.pce"], "description": "Games Express CD Card", "name": "gexpress.pce", "note": "pce_fast_cdbios = 'Games Express'. For unlicensed Games Express titles.", "region": ["japan"], "required": false, "source_ref": "libretro.c:1906-1907"}, {"description": "CD-ROM System Card 3.0 (US / TurboGrafx-CD)", "name": "syscard3u.pce", "note": "pce_fast_cdbios = 'System Card 3 US'. Not in .info.", "region": ["north-america"], "required": false, "source_ref": "libretro.c:1908-1909"}, {"description": "CD-ROM System Card 2.0 (US / TurboGrafx-CD)", "name": "syscard2u.pce", "note": "pce_fast_cdbios = 'System Card 2 US'. Not in .info.", "region": ["north-america"], "required": false, "source_ref": "libretro.c:1910-1911"}], "notes": "Fork of Mednafen's pce_fast module (speed-optimized, no SuperGrafx support). Separate codebase from beetle_pce (mednafen/pce_fast/ vs mednafen/pce/). BIOS loaded via HuCLoadCD() at CD-ROM load time. Core option \"pce_fast_cdbios\" selects which card image to use (default: System Card 3). No Games Express auto-detection (unlike beetle_pce); user must select manually. No hash or size validation on BIOS load. Upstream pce_fast module only has a single pce_fast.cdbios string setting; the 6-option dropdown is a libretro addition.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-pce-fast-libretro", "source_commit": "b211204c7026dff6e86e79b00185512e2421fff8", "systems": ["nec-pc-engine"], "type": "libretro", "upstream": "https://mednafen.github.io/", "verification": "existence"}


id: mednafen_pcfx
name: mednafen_pcfx
type: alias
profile_json:
{"alias_of": "beetle_pcfx", "core_version": "v0.9.36.5", "cores": ["mednafen_pcfx"], "display_name": "NEC - PC-FX (Beetle PC-FX)", "emulator": "mednafen_pcfx", "files": [], "note": "This core uses the same BIOS/firmware as beetle_pcfx. See emulators/beetle_pcfx.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_psx
name: mednafen_psx
type: alias
profile_json:
{"alias_of": "beetle_psx", "core_version": "v0.9.44.1", "cores": ["mednafen_psx"], "display_name": "Sony - PlayStation (Beetle PSX)", "emulator": "mednafen_psx", "files": [], "note": "This core uses the same BIOS/firmware as beetle_psx. See emulators/beetle_psx.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_psx_hw
name: mednafen_psx_hw
type: alias
profile_json:
{"alias_of": "beetle_psx", "core_version": "v0.9.44.1", "cores": ["mednafen_psx_hw"], "display_name": "Sony - PlayStation (Beetle PSX HW)", "emulator": "mednafen_psx_hw", "files": [], "note": "Same codebase as beetle_psx, compiled with HAVE_HW for OpenGL/Vulkan GPU rendering. Same BIOS files.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_saturn
name: mednafen_saturn
type: alias
profile_json:
{"alias_of": "beetle_saturn", "core_version": "v0.9.45.1", "cores": ["mednafen_saturn"], "display_name": "Sega - Saturn (Beetle Saturn)", "emulator": "mednafen_saturn", "files": [], "note": "This core uses the same BIOS/firmware as beetle_saturn. See emulators/beetle_saturn.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_snes
name: mednafen_snes
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/beetle-bsnes-libretro
upstream: https://mednafen.github.io/
source_commit: f7bfa217cf7150779902c3a998f7624d92a5f17d
profile_json:
{"core_classification": "frozen_snapshot", "core_version": "v0.9.26", "cores": ["mednafen_snes", "beetle_bsnes", "beetle-bsnes"], "display_name": "Nintendo - SNES / SFC (Beetle bsnes)", "emulator": "mednafen_snes", "files": [], "notes": "Frozen snapshot of Mednafen's SNES module based on bsnes v059. IPL ROM embedded in source. No external firmware required.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-bsnes-libretro", "source_commit": "f7bfa217cf7150779902c3a998f7624d92a5f17d", "systems": ["nintendo-snes"], "type": "libretro", "upstream": "https://mednafen.github.io/"}


id: mednafen_supafaust
name: mednafen_supafaust
type: libretro
classification: community_fork
source: https://github.com/libretro/supafaust
upstream: https://mednafen.github.io/
source_commit: e25f66765938d33f9ad5850e8d6cd597e55b7299
profile_json:
{"core_classification": "community_fork", "core_version": "1.29.0", "cores": ["mednafen_supafaust", "supafaust"], "display_name": "Nintendo - SNES / SFC (Beetle Supafaust)", "emulator": "mednafen_supafaust", "files": [], "notes": "Port of Mednafen's snes_faust module. All special chip firmware emulated via HLE with synthesized data ROMs. No external firmware loading. source_ref: dsp1.cpp:120-177, dsp2.cpp:118-140, cx4.cpp:1548-1656, cart.cpp:129-584, libretro.cpp:496-742\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/supafaust", "source_commit": "e25f66765938d33f9ad5850e8d6cd597e55b7299", "systems": ["nintendo-snes"], "type": "libretro", "upstream": "https://mednafen.github.io/"}


id: mednafen_supergrafx
name: mednafen_supergrafx
type: libretro
classification: community_fork
source: https://github.com/libretro/beetle-supergrafx-libretro
upstream: https://mednafen.github.io/
source_commit: 3c6fcd3deded54ebecd69408f108407ac03d11b5
profile_json:
{"core_classification": "community_fork", "core_version": "v1.23.0", "cores": ["mednafen_supergrafx", "beetle_supergrafx"], "display_name": "NEC - PC Engine SuperGrafx (Beetle SuperGrafx)", "emulator": "mednafen_supergrafx", "files": [{"description": "CD-ROM System Card 3.0 (Japan)", "name": "syscard3.pce", "note": "Default value for sgx_cdbios option.", "region": ["japan"], "required": true, "source_ref": "libretro.cpp:972-973, mednafen/settings.cpp:37"}, {"description": "CD-ROM System Card 2.0 (Japan)", "name": "syscard2.pce", "note": "sgx_cdbios = 'System Card 2'.", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:974-975"}, {"description": "CD-ROM System Card 1.0 (Japan)", "name": "syscard1.pce", "note": "sgx_cdbios = 'System Card 1'.", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:976-977"}, {"description": "Games Express CD Card", "name": "gexpress.pce", "note": "sgx_cdbios = 'Games Express' or auto-detected via DetectGECD().", "region": ["japan"], "required": false, "source_ref": "libretro.cpp:978-979, mednafen/pce_fast/pce.cpp:330-367,453-454"}], "notes": "Fork of Mednafen's pce_fast module with SuperGrafx and CD support. Separate codebase from beetle_pce (mednafen/pce_fast/ vs mednafen/pce/). BIOS loaded via HuC_LoadCD() at CD-ROM load time. Core option \"sgx_cdbios\" selects which card image to use (default: System Card 3). DetectGECD() auto-detects Games Express discs and overrides to gexpress.pce. DetectSGXCD() detects SuperGrafx CD titles via magic bytes. Arcade Card mode (sgx_arcadecard option, not exposed) extends System Card 3 with extra RAM mapping. No hash or size validation on BIOS load. Upstream pce_fast module has a single pce_fast.cdbios string setting; the 4-option dropdown is a libretro addition. Upstream has no separate gecdbios setting (unlike the accurate pce module).\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-supergrafx-libretro", "source_commit": "3c6fcd3deded54ebecd69408f108407ac03d11b5", "systems": ["nec-pc-engine"], "type": "libretro", "upstream": "https://mednafen.github.io/", "verification": "existence"}


id: mednafen_vb
name: mednafen_vb
type: alias
profile_json:
{"alias_of": "beetle_vb", "core_version": "v0.9.36.1", "cores": ["mednafen_vb"], "display_name": "Nintendo - Virtual Boy (Beetle VB)", "emulator": "mednafen_vb", "files": [], "note": "This core uses the same BIOS/firmware as beetle_vb. See emulators/beetle_vb.yml for details.", "profiled_date": "2026-03-24", "type": "alias"}


id: mednafen_wswan
name: mednafen_wswan
type: alias
source: https://github.com/libretro/beetle-wswan-libretro
profile_json:
{"alias_of": "beetle_wswan", "core_version": "v0.9.35.1", "cores": ["mednafen_wswan"], "display_name": "Bandai - WonderSwan/Color (Beetle Wonderswan)", "emulator": "mednafen_wswan", "files": [], "note": "Binary name for beetle_wswan. Same codebase, single .so/.dll.", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/beetle-wswan-libretro", "type": "alias"}


id: melonds
name: melonDS
type: standalone + libretro
classification: community_fork
source: https://github.com/libretro/melonDS
upstream: https://github.com/melonDS-emu/melonDS
source_commit: 66b5d2634cd0a79030562811e6e05f5532f800ba
profile_json:
{"core_classification": "community_fork", "core_version": "Git", "cores": ["melonds"], "display_name": "Nintendo - DS (melonDS)", "emulator": "melonDS", "files": [{"crc32": "2ab23573", "description": "ARM9 BIOS", "hle_fallback": true, "name": "bios9.bin", "note": "FreeBIOS fallback (src/FreeBIOS.h); native needed for Key1 cartridge crypto", "required": false, "size": 4096, "source_ref": "src/NDS.h:196, src/NDS.cpp:467-477, src/frontend/Util_ROM.cpp:99-111", "system": "nintendo-ds", "validation": {"core": ["size"], "upstream": ["size", "crc32"]}}, {"crc32": "1280f0d5", "description": "ARM7 BIOS", "hle_fallback": true, "name": "bios7.bin", "note": "FreeBIOS fallback (src/FreeBIOS.h); native needed for Key1 init at offset 0x0030", "required": false, "size": 16384, "source_ref": "src/NDS.h:197, src/NDS.cpp:482-492, src/frontend/Util_ROM.cpp:117-131", "system": "nintendo-ds", "validation": {"core": ["size"], "upstream": ["size", "crc32"]}}, {"description": "NDS firmware image", "hle_fallback": true, "max_size": 524288, "min_size": 262144, "name": "firmware.bin", "note": "Generated 128KB firmware as fallback; native must be 256KB or 512KB for boot", "required": false, "source_ref": "src/SPI.cpp:192-211, src/frontend/Util_ROM.cpp:174-195", "system": "nintendo-ds", "validation": ["size"]}, {"crc32": "bae84f6c", "description": "DSi ARM9 BIOS", "name": "dsi_bios9.bin", "required": true, "size": 65536, "source_ref": "src/DSi.h:33, src/DSi.cpp:587-599, src/frontend/Util_ROM.cpp:145-156", "system": "nintendo-dsi", "validation": {"core": ["size"], "upstream": ["size", "crc32"]}}, {"crc32": "4316cc42", "description": "DSi ARM7 BIOS", "name": "dsi_bios7.bin", "note": "Contains eMMC key-Y at offset 0x8308 for NAND init", "required": true, "size": 65536, "source_ref": "src/DSi.h:34, src/DSi.cpp:604-620, src/frontend/Util_ROM.cpp:158-170", "system": "nintendo-dsi", "validation": {"core": ["size"], "upstream": ["size", "crc32"]}}, {"description": "DSi firmware image", "name": "dsi_firmware.bin", "required": true, "size": 131072, "source_ref": "src/SPI.cpp:197-211, src/frontend/Util_ROM.cpp:201-217", "system": "nintendo-dsi", "validation": ["size"]}, {"agnostic": true, "description": "DSi NAND dump", "name": "dsi_nand.bin", "note": "Any regional dump works. Nocash footer required (DSi eMMC CID/CPU at EOF-0x40 or 0xFF800). AES keys derived from ARM7i BIOS offset 0x8308.", "required": true, "size": 251658304, "source_ref": "src/frontend/Util_ROM.cpp:224-235, src/DSi_NAND.cpp:58-97", "storage": "large_file", "system": "nintendo-dsi"}, {"description": "DSi SD card image", "name": "dsi_sd_card.bin", "note": "Created if missing; requires melonds_dsi_sdcard core option enabled", "required": false, "source_ref": "src/frontend/Util_ROM.cpp:237-243, src/libretro/libretro.cpp:837,553", "system": "nintendo-dsi"}], "notes": "FreeBIOS fallback for DS mode (NTR); DSi mode requires all native files.\nLibretro fork based on melonDS ~0.9.x era, validates size only.\nUpstream adds CRC32 validation on BIOS files (MemConstants.h).\nDSi SD card emulation controlled by melonds_dsi_sdcard core option.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/melonDS", "source_commit": "66b5d2634cd0a79030562811e6e05f5532f800ba", "systems": ["nintendo-ds", "nintendo-dsi"], "type": "standalone + libretro", "upstream": "https://github.com/melonDS-emu/melonDS"}


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


id: melonds_ds
name: melonDS DS
type: libretro
classification: community_fork
source: https://github.com/JesseTG/melonds-ds
upstream: https://github.com/melonDS-emu/melonDS
source_commit: 2748dfb9409c94e6828d937d04e334f35127ba7c
profile_json:
{"core_classification": "community_fork", "core_version": "1.2.0", "cores": ["melonds_ds", "melondsds"], "display_name": "Nintendo - DS (melonDS DS)", "emulator": "melonDS DS", "files": [{"crc32": "1280f0d5", "description": "ARM7 BIOS", "hle_fallback": true, "name": "bios7.bin", "required": false, "size": 16384, "source_ref": "src/libretro/config/console.cpp:219, src/MemConstants.h:31, src/MemConstants.h:36", "system": "nintendo-ds", "validation": ["size"]}, {"crc32": "2ab23573", "description": "ARM9 BIOS", "hle_fallback": true, "name": "bios9.bin", "required": false, "size": 4096, "source_ref": "src/libretro/config/console.cpp:220, src/MemConstants.h:30, src/MemConstants.h:37", "system": "nintendo-ds", "validation": ["size"]}, {"description": "NDS firmware image", "hle_fallback": true, "name": "firmware.bin", "note": "Filename configurable via core options; generated firmware used as fallback", "required": false, "source_ref": "src/libretro/config/console.cpp:184", "system": "nintendo-ds"}, {"crc32": "4316cc42", "description": "DSi ARM7 BIOS", "name": "dsi_bios7.bin", "note": "Contains eMMC key-Y at offset 0x8308 for NAND init", "required": true, "size": 65536, "source_ref": "src/libretro/config/console.cpp:333, src/MemConstants.h:32, src/MemConstants.h:44", "system": "nintendo-dsi", "validation": ["size"]}, {"crc32": "bae84f6c", "description": "DSi ARM9 BIOS", "name": "dsi_bios9.bin", "required": true, "size": 65536, "source_ref": "src/libretro/config/console.cpp:338, src/MemConstants.h:32, src/MemConstants.h:45", "system": "nintendo-dsi", "validation": ["size"]}, {"description": "DSi firmware image", "name": "dsi_firmware.bin", "note": "Filename configurable via core options; must have DSi firmware header", "required": true, "source_ref": "src/libretro/config/console.cpp:352-358", "system": "nintendo-dsi"}, {"description": "DSi NAND dump", "name": "dsi_nand.bin", "note": "Filename configurable via core options; 240MB or 245.5MB with optional no$cash footer", "required": true, "source_ref": "src/libretro/config/console.cpp:378, src/libretro/config/console.cpp:1172-1179", "system": "nintendo-dsi"}], "notes": "Libretro-specific remake using melonDS as a statically-linked library.\nDS mode has FreeBIOS/generated firmware fallback; DSi mode requires all\nnative files. Core searches \"melonDS DS/\" subfolder first, then system root.\nIn DSi mode, NDS BIOS (bios7/bios9) are also required alongside DSi BIOS.\nFirmware and NAND filenames are user-selectable via core options.\n", "profiled_date": "2026-03-24", "source": "https://github.com/JesseTG/melonds-ds", "source_commit": "2748dfb9409c94e6828d937d04e334f35127ba7c", "systems": ["nintendo-ds", "nintendo-dsi"], "type": "libretro", "upstream": "https://github.com/melonDS-emu/melonDS"}


id: mesen
name: Mesen
type: libretro
classification: official_port
source: https://github.com/libretro/Mesen
upstream: https://github.com/SourMesen/Mesen
source_commit: 0102910c39ad1a62bc3f784466f3f67ca9eae335
profile_json:
{"core_classification": "official_port", "core_version": "0.9.9", "cores": ["mesen", "mesens"], "display_name": "Nintendo - NES / Famicom (Mesen)", "emulator": "Mesen", "files": [{"aliases": ["FdsBios.bin"], "description": "FDS BIOS ROM", "name": "disksys.rom", "note": "Mapped at 0xE000-0xFFFF as PRG ROM bank 0. Core checks FdsBios.bin first, falls back to disksys.rom. Size must be exactly 8192 bytes or BiosMissing is set.", "required": true, "size": 8192, "source_ref": "Core/FdsLoader.cpp:45-59 (LoadBios tries FdsBios.bin then disksys.rom), Core/FdsLoader.cpp:143-146 (LoadRom validates size == 0x2000)", "system": "nintendo-fds", "validation": ["size"]}, {"description": "Famicom Study Box BIOS ROM", "name": "StudyBox.bin", "note": "256 KB BIOS for the Study Box tape peripheral (mapper 186). Only needed for .stbx tape dumps. Size must be exactly 262144 bytes.", "required": false, "size": 262144, "source_ref": "Core/StudyBoxLoader.cpp:125-133 (LoadBios), Core/StudyBoxLoader.cpp:149-152 (LoadRom validates size == 0x40000)", "system": "nintendo-nes", "validation": ["size"]}, {"description": "External NES color palette", "max_size": 1536, "min_size": 192, "name": "MesenPalette.pal", "note": "Accepts 192 bytes (64 RGB triplets) or 1536 bytes (512 emphasis combos). Falls back to built-in default if size doesn't match.", "required": false, "source_ref": "Libretro/libretro.cpp:301-323 (load_custom_palette), Libretro/libretro.cpp:405-406 (called when mesen_palette == Custom)", "system": "nintendo-nes", "validation": ["size"]}], "logo": "https://raw.githubusercontent.com/SourMesen/Mesen2/master/UI/Assets/Mesen.svg", "notes": "Mesen is a cycle-accurate NES/Famicom emulator by Sour (the original\nNES-only version, archived in 2020 in favor of Mesen2). NES cartridge\ngames need no BIOS. Famicom Disk System games require the FDS BIOS ROM.\n\nThe core tries FdsBios.bin first, then disksys.rom as fallback. Both are\nloaded from the system directory root. If neither is found or the file is\nnot exactly 8192 bytes, FDS games fail to load (BiosMissing).\n\nThe Study Box is a Famicom tape-based learning peripheral (mapper 186).\nIts BIOS (StudyBox.bin, 256 KB) is loaded the same way. Only needed for\nStudy Box tape dumps (.stbx format).\n\nMesenDB.txt (game database) is baked into the libretro binary as\nMesenDB.inc and loaded in retro_init(). The external file path in\nInitDatabase() is never reached in the libretro context.\n\nMesenPalette.pal is an optional custom palette file, loaded only when\nthe mesen_palette core option is set to Custom. Accepts 192 bytes\n(64 colors) or 1536 bytes (512 colors with emphasis combos).\n\nHdPacks go in system/HdPacks/<rom_name>/ -- per-game content, not\nsystem BIOS.\n\nFile path construction: retro_load_game() sets\nFolderUtilities::SetHomeFolder(systemFolder). All BIOS lookups use\nCombinePath(GetHomeFolder(), filename) -- flat, no subdirectories.\n\nNo functional divergence between upstream and libretro for BIOS loading.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/Mesen", "source_commit": "0102910c39ad1a62bc3f784466f3f67ca9eae335", "systems": ["nintendo-nes", "nintendo-fds"], "type": "libretro", "upstream": "https://github.com/SourMesen/Mesen"}


id: mesen-s
name: mesen-s
type: libretro
classification: official_port
source: https://github.com/libretro/Mesen-S
upstream: https://github.com/SourMesen/Mesen-S
source_commit: d4fca31a6004041d99b02199688f84c009c55967
profile_json:
{"core_classification": "official_port", "core_version": "0.4.0", "cores": ["mesen-s", "mesen_s"], "display_name": "Mesen-S", "emulator": "mesen-s", "files": [{"hle_fallback": true, "name": "dsp1.program.rom", "note": "DSP-1 program ROM. HLE fallback in libretro port only", "required": false, "size": 6144, "source_ref": "Core/NecDsp.cpp:95, Core/FirmwareHelper.h:17-35", "validation": ["size"]}, {"hle_fallback": true, "name": "dsp1.data.rom", "note": "DSP-1 data ROM", "required": false, "size": 2048, "source_ref": "Core/NecDsp.cpp:95, Core/FirmwareHelper.h:17-35", "validation": ["size"]}, {"hle_fallback": true, "name": "dsp1b.program.rom", "note": "DSP-1B program ROM. HLE fallback in libretro port only", "required": false, "size": 6144, "source_ref": "Core/NecDsp.cpp:96", "validation": ["size"]}, {"hle_fallback": true, "name": "dsp1b.data.rom", "note": "DSP-1B data ROM", "required": false, "size": 2048, "source_ref": "Core/NecDsp.cpp:96", "validation": ["size"]}, {"name": "dsp2.program.rom", "note": "DSP-2 program ROM", "required": false, "size": 6144, "source_ref": "Core/NecDsp.cpp:97", "validation": ["size"]}, {"name": "dsp2.data.rom", "note": "DSP-2 data ROM", "required": false, "size": 2048, "source_ref": "Core/NecDsp.cpp:97", "validation": ["size"]}, {"name": "dsp3.program.rom", "note": "DSP-3 program ROM", "required": false, "size": 6144, "source_ref": "Core/NecDsp.cpp:98", "validation": ["size"]}, {"name": "dsp3.data.rom", "note": "DSP-3 data ROM", "required": false, "size": 2048, "source_ref": "Core/NecDsp.cpp:98", "validation": ["size"]}, {"name": "dsp4.program.rom", "note": "DSP-4 program ROM", "required": false, "size": 6144, "source_ref": "Core/NecDsp.cpp:99", "validation": ["size"]}, {"name": "dsp4.data.rom", "note": "DSP-4 data ROM", "required": false, "size": 2048, "source_ref": "Core/NecDsp.cpp:99", "validation": ["size"]}, {"name": "st010.program.rom", "note": "ST-010 program ROM", "required": false, "size": 49152, "source_ref": "Core/NecDsp.cpp:100", "validation": ["size"]}, {"name": "st010.data.rom", "note": "ST-010 data ROM", "required": false, "size": 4096, "source_ref": "Core/NecDsp.cpp:100", "validation": ["size"]}, {"name": "st011.program.rom", "note": "ST-011 program ROM", "required": false, "size": 49152, "source_ref": "Core/NecDsp.cpp:101", "validation": ["size"]}, {"name": "st011.data.rom", "note": "ST-011 data ROM", "required": false, "size": 4096, "source_ref": "Core/NecDsp.cpp:101", "validation": ["size"]}, {"aliases": ["gb_bios.bin"], "hle_fallback": true, "name": "dmg_boot.bin", "note": "Game Boy (DMG) boot ROM. Falls back to embedded SameBoy open-source boot ROM", "required": false, "size": 256, "source_ref": "Core/FirmwareHelper.h:148, Core/Gameboy.cpp:108-114, Core/GbBootRom.h:7", "validation": ["size"]}, {"aliases": ["gbc_bios.bin"], "hle_fallback": true, "name": "cgb_boot.bin", "note": "Game Boy Color boot ROM. Falls back to embedded SameBoy open-source boot ROM", "required": false, "size": 2304, "source_ref": "Core/FirmwareHelper.h:149, Core/Gameboy.cpp:108-119, Core/GbBootRom.h:83", "validation": ["size"]}, {"aliases": ["sgb_bios.bin"], "hle_fallback": true, "name": "sgb_boot.bin", "note": "Super Game Boy boot ROM for GB CPU. Falls back to embedded SameBoy open-source boot ROM", "required": false, "size": 256, "source_ref": "Core/FirmwareHelper.h:150, Core/Gameboy.cpp:108-127, Core/GbBootRom.h:32", "validation": ["size"]}, {"aliases": ["sgb_bios.bin"], "hle_fallback": true, "name": "sgb2_boot.bin", "note": "Super Game Boy 2 boot ROM for GB CPU. Falls back to embedded SameBoy open-source boot ROM", "required": false, "size": 256, "source_ref": "Core/FirmwareHelper.h:151, Core/Gameboy.cpp:108-127, Core/GbBootRom.h:57", "validation": ["size"]}, {"name": "SGB1.sfc", "note": "Super Game Boy SNES cartridge ROM. Without it, SGB mode falls back to regular GB", "required": false, "size": 262144, "source_ref": "Core/FirmwareHelper.h:118-133, Core/BaseCartridge.cpp:630-638", "validation": ["size"]}, {"name": "SGB2.sfc", "note": "Super Game Boy 2 SNES cartridge ROM. Core option mesen-s_sgb2 selects SGB version", "required": false, "size": 524288, "source_ref": "Core/FirmwareHelper.h:118-133, Core/BaseCartridge.cpp:630-638", "validation": ["size"]}, {"name": "BS-X.bin", "note": "Satellaview BS-X BIOS ROM. Minimum accepted size is 32768 bytes", "required": false, "size": 1048576, "source_ref": "Core/FirmwareHelper.h:39-47,96-113, Core/BaseCartridge.cpp:65", "validation": ["size"]}], "notes": "High-accuracy SNES/SFC emulator with Game Boy/Color and Super Game Boy support. Upstream archived at 0.4.0, superseded by Mesen2. DSP firmware can be loaded as combined files (dsp1.rom, dsp1b.rom, dsp2.rom, dsp3.rom, dsp4.rom, st010.rom, st011.rom) or split program/data ROMs. Combined files are tried first, size validated. HLE coprocessor option available for DSP-1/DSP-1B only (libretro core option mesen-s_hle_coprocessor). CX4 is fully HLE, no firmware needed. ST018 detected but not emulated. GB/GBC/SGB boot ROMs fall back to embedded open-source SameBoy boot ROMs when external files are not found.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/Mesen-S", "source_commit": "d4fca31a6004041d99b02199688f84c009c55967", "systems": ["nintendo-snes", "nintendo-gb", "nintendo-gbc", "nintendo-super-game-boy", "nintendo-satellaview"], "type": "libretro", "upstream": "https://github.com/SourMesen/Mesen-S"}


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


id: mess2015
name: MESS 2015
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/mame2015-libretro
upstream: https://github.com/mamedev/mame/tree/mame0160
source_commit: 283e04b03c121db9be12632d6bad2fc3e8707248
profile_json:
{"core_classification": "frozen_snapshot", "core_version": "0.160", "cores": ["mess2015", "mess"], "display_name": "Multi (MESS 2015)", "emulator": "MESS 2015", "files": [{"category": "game_data", "name": "hiscore.dat", "note": "high score definitions, loaded via f.open without explicit search path", "path": "mess2015/hiscore.dat", "required": false, "source_ref": "src/emu/hiscore.c:335-337"}], "mame_version": "0.159", "notes": "Frozen snapshot of MAME/MESS 0.159 (version.c says 0.159, core reports 0.160).\nBuilt from same repo as mame2015/ume2015/cdi2015 with TARGET=mess.\n619 machine drivers (home computers, consoles, handhelds, calculators).\nNo BIOS root sets (no GAME_IS_BIOS_ROOT in src/mess/). Machine ROMs loaded\nper-machine via MAME ROM system from content directory.\n\nSoftware list support via 375 XML hash files in system_dir/mess2015/hash/.\nHash files are bundled in the source repo at /hash/. Not on libretro buildbot.\n.info incorrectly says SYSTEMDIR\\ume\\hash — actual path is mess2015/hash.\n\nhiscore.c integrated (libretro addition, not in upstream MAME 0.159).\nSAMPLES sound driver disabled in mess.mak.\nPer-game cheat XMLs via system_dir/mess2015/cheat/.\nArtwork layouts via system_dir/mess2015/artwork/.\n\nUpstream comparison (tag mame0160): romload.c and softlist.c unmodified.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/mame2015-libretro", "source_commit": "283e04b03c121db9be12632d6bad2fc3e8707248", "systems": [], "type": "libretro", "upstream": "https://github.com/mamedev/mame/tree/mame0160"}


id: meteor
name: Meteor GBA
type: libretro
classification: community_fork
source: https://github.com/libretro/meteor-libretro
upstream: https://github.com/blastrock/meteor
source_commit: e533d300d0561564451bde55a2b73119c768453c
profile_json:
{"core_classification": "community_fork", "core_version": "v1.4", "cores": ["meteor"], "display_name": "Nintendo - Game Boy Advance (Meteor)", "emulator": "Meteor GBA", "files": [], "notes": "GBA emulator by Philippe Daouadi (2009-2011), libretro port by\nHans-Kristian Arntzen. HLE BIOS in ameteor/source/bios.cpp handles\nSWI calls via Cpu::SoftwareInterrupt() when HasBios() is false\n(ameteor/source/cpu.cpp:245-311). The libretro port never calls\nLoadBios() and never queries RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.\nStandalone frontends (GTK, text) support optional real BIOS loading.\n", "platform_details": {"gba": {"bios_size": 16384, "hle_bios": true, "note": "Full HLE BIOS. The libretro port never loads an external BIOS file.\nCpu::SoftwareInterrupt() checks HasBios() — if false (always in\nlibretro), SWI calls are routed to C++ reimplementations.\n", "source_ref": "ameteor/source/bios.cpp, ameteor/source/cpu.cpp:245-311"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/meteor-libretro", "source_commit": "e533d300d0561564451bde55a2b73119c768453c", "systems": ["nintendo-gba"], "type": "libretro", "upstream": "https://github.com/blastrock/meteor"}


id: mfme
name: MFME
type: standalone
classification: embedded_hle
source: https://www.desertislandfruits.com/
upstream: closed-source
profile_json:
{"core_classification": "embedded_hle", "core_version": "20.1", "cores": ["mfme", "mfme-windows"], "display_name": "MFME (Fruit Machines)", "emulator": "MFME", "files": [{"bundled": true, "description": "Ultimarc PacDrive, PacLed64 and UltimateIO output library", "name": "PacDrive32.dll", "note": "Listed in the MFME.exe import descriptors, so the Windows loader resolves it at process start and MFME does not launch when it is absent from the application directory. Drives real cabinet lamps, hoppers and meters through Ultimarc boards; v20.0 updated the library and added PacLed64 and UltimateIO support.", "required": true, "source_ref": "MFME.exe import directory, history.txt:278-279", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Lithograph Bold, the font layouts name for machine text", "name": "LITHOGRB.TTF", "note": "v19.0 moved font loading from installed system fonts to the Fonts folder where MFME is located. Layouts store a font family name, not a file: the decoded layout stream names Lithograph. A layout whose font is missing shows the name in red in the properties screen and renders with a substitute.", "path": "Fonts/LITHOGRB.TTF", "required": false, "source_ref": "history.txt:38, 309", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Lithograph Light, the font layouts name for machine text", "name": "LITHOGRL.TTF", "note": "Same mechanism as LITHOGRB.TTF, the light weight of the same family.", "path": "Fonts/LITHOGRL.TTF", "required": false, "source_ref": "history.txt:38, 309", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "MFME segment and display font", "name": "MFME.ttf", "note": "Shipped font used by MFME's own displays, updated in v19.5.", "path": "Fonts/MFME.ttf", "required": false, "source_ref": "history.txt:38, 168", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel gradient mask applied to reel bands", "name": "ReelGradientMask.bmp", "note": "Used when the Default option is chosen for the mask in the reel properties window. A custom mask stored in the layout replaces it.", "path": "DefaultMasks/ReelGradientMask.bmp", "required": false, "source_ref": "DefaultMasks/Readme.txt:1", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel lamp mask applied to reel bands", "name": "ReelLampMask.bmp", "note": "Same mechanism as ReelGradientMask.bmp, for the reel lamp overlay.", "path": "DefaultMasks/ReelLampMask.bmp", "required": false, "source_ref": "DefaultMasks/Readme.txt:1", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "2p payout solenoid", "name": "2pSlide.wav", "path": "DefaultSounds/2pSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:9, history.txt:44", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "10p payout solenoid", "name": "10pSlide.wav", "path": "DefaultSounds/10pSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:10", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "20p payout solenoid", "name": "20pSlide.wav", "path": "DefaultSounds/20pSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:11", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "50p payout solenoid", "name": "50pSlide.wav", "path": "DefaultSounds/50pSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:12", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "One pound payout solenoid", "name": "PoundSlide.wav", "path": "DefaultSounds/PoundSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:13", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "10p and 20p token payout solenoid", "name": "TokenSlide.wav", "path": "DefaultSounds/TokenSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:14", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Five by 50p slide", "name": "MiscSlide.wav", "path": "DefaultSounds/MiscSlide.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:15", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Electromechanical meter step", "name": "meter.wav", "note": "Listed as Meter.wav in the readme, shipped as meter.wav.", "path": "DefaultSounds/meter.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:17", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Layout button pressed", "name": "ButtonDown.wav", "note": "PROCONN ships its own copy under DefaultSounds/Custom/PROCONN/.", "path": "DefaultSounds/ButtonDown.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:19", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Layout button released", "name": "ButtonUp.wav", "note": "PROCONN ships its own copy under DefaultSounds/Custom/PROCONN/.", "path": "DefaultSounds/ButtonUp.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:20", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Hopper 1 motor running", "name": "HopperMotor1.wav", "note": "Cabinet specific copies ship under DefaultSounds/Custom/ for ADDER5/Eclipse, EPOCH/Elegance, MPU4/Genesis, MPU5/Genesis, SCORPION4/Eclipse and SCORPION5/Eclipse.", "path": "DefaultSounds/HopperMotor1.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:22", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin paid out from hopper 1", "name": "HopperCoin1.wav", "note": "Same cabinet specific copies as HopperMotor1.wav.", "path": "DefaultSounds/HopperCoin1.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:23", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Hopper 2 motor running", "name": "HopperMotor2.wav", "note": "Same cabinet specific copies as HopperMotor1.wav.", "path": "DefaultSounds/HopperMotor2.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:24", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin paid out from hopper 2", "name": "HopperCoin2.wav", "note": "Same cabinet specific copies as HopperMotor1.wav, plus an alternate in DefaultSounds/MiscSounds/.", "path": "DefaultSounds/HopperCoin2.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:25", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Note inserted into the note acceptor", "name": "NoteIn.wav", "path": "DefaultSounds/NoteIn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:27", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Note rejected by the note acceptor", "name": "NoteInReject.wav", "path": "DefaultSounds/NoteInReject.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:28", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Note accepted and sent to the stacker", "name": "NoteInStack.wav", "path": "DefaultSounds/NoteInStack.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:29", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin inserted into a roll down electronic mech", "name": "CoinIn.wav", "path": "DefaultSounds/CoinIn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:31", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin accepted by the mech", "name": "CoinInSwitch.wav", "path": "DefaultSounds/CoinInSwitch.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:32", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin rejected by the mech into the payout tray", "name": "CoinInRejected.wav", "path": "DefaultSounds/CoinInRejected.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:33", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token inserted into an electronic token mech", "name": "TokenIn.wav", "path": "DefaultSounds/TokenIn.wav", "required": false, "source_ref": "history.txt:80, DefaultSounds/Readme.txt:35", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token accepted by an electronic token mech", "name": "TokenInSwitch.wav", "path": "DefaultSounds/TokenInSwitch.wav", "required": false, "source_ref": "history.txt:80, DefaultSounds/Readme.txt:36", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token rejected by an electronic token mech", "name": "TokenInRejected.wav", "path": "DefaultSounds/TokenInRejected.wav", "required": false, "source_ref": "history.txt:80, DefaultSounds/Readme.txt:37", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin inserted in an S1 type mech", "name": "CoinInS1.wav", "path": "DefaultSounds/CoinInS1.wav", "required": false, "source_ref": "history.txt:148", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin accepted by an S1 type mech", "name": "CoinInS1Switch.wav", "path": "DefaultSounds/CoinInS1Switch.wav", "required": false, "source_ref": "history.txt:148", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token inserted in an S1 token type mech", "name": "CoinInS1Token.wav", "path": "DefaultSounds/CoinInS1Token.wav", "required": false, "source_ref": "history.txt:148", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token accepted by an S1 token type mech", "name": "CoinInS1TokenSwitch.wav", "path": "DefaultSounds/CoinInS1TokenSwitch.wav", "required": false, "source_ref": "history.txt:148", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin inserted in an S1 or S10 type mech", "name": "CoinInS10.wav", "path": "DefaultSounds/CoinInS10.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:39", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin rejected from an S10 type mech", "name": "CoinInS10Rejected.wav", "path": "DefaultSounds/CoinInS10Rejected.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:40, history.txt:47, 153", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin accepted by an S1 or S10 type mech", "name": "CoinInS10Switch.wav", "path": "DefaultSounds/CoinInS10Switch.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:41, history.txt:47", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token inserted in an S10 token type mech", "name": "CoinInS10Token.wav", "path": "DefaultSounds/CoinInS10Token.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:43", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token rejected from an S10 token type mech", "name": "CoinInS10TokenRejected.wav", "path": "DefaultSounds/CoinInS10TokenRejected.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:44, history.txt:47, 153", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Token accepted by an S10 token type mech", "name": "CoinInS10TokenSwitch.wav", "path": "DefaultSounds/CoinInS10TokenSwitch.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:45, history.txt:47", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin refused by a locked out S1 mech", "name": "S1Locked.wav", "path": "DefaultSounds/S1Locked.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:50", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin inserted in a comparator style mech", "name": "CoinInDrop.wav", "path": "DefaultSounds/CoinInDrop.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:47", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Coin rejected from a comparator style mech", "name": "CoinDropReject.wav", "path": "DefaultSounds/CoinDropReject.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:48", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Lockout solenoid activated", "name": "LockoutOn.wav", "path": "DefaultSounds/LockoutOn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:52", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Lockout solenoid deactivated", "name": "LockoutOff.wav", "path": "DefaultSounds/LockoutOff.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:53", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "SRU, SYS80 and MPS2 200 step reel motor", "name": "Stepper.wav", "note": "Shipped only as tech copies under DefaultSounds/Custom/ for ELECTROCOIN, MPS2, SRU and SYSTEM80, and as stepper.wav for M1AB. Reel effects were extended to Maygay M1a and made available to other techs in v20.0.", "path": "DefaultSounds/Stepper.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:55, history.txt:74", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Prize vend motor started", "name": "PrizeMotor.wav", "path": "DefaultSounds/PrizeMotor.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:57", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Prize dispensed", "name": "PrizeVend.wav", "note": "Listed as Prizevend.wav in the readme, shipped as PrizeVend.wav.", "path": "DefaultSounds/PrizeVend.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:58", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Pull handle drawn slowly", "name": "PullHandleSlow.wav", "path": "DefaultSounds/PullHandleSlow.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:60, history.txt:207", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Pull handle drawn at normal speed", "name": "PullHandleNormal.wav", "path": "DefaultSounds/PullHandleNormal.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:61, history.txt:207", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Pull handle drawn quickly", "name": "PullHandleFast.wav", "path": "DefaultSounds/PullHandleFast.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:62, history.txt:207", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Pull handle released", "name": "PullHandleRelease.wav", "path": "DefaultSounds/PullHandleRelease.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:63, history.txt:207", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel motor activated on an EM machine", "name": "MotorOn.wav", "path": "DefaultSounds/MotorOn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:68", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel with studs spinning on an EM machine", "name": "Wiper.wav", "path": "DefaultSounds/Wiper.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:69", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel solenoid activated on an EM machine", "name": "SolenoidOn.wav", "path": "DefaultSounds/SolenoidOn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:70", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Reel solenoid deactivated on an EM machine", "name": "SolenoidOff.wav", "path": "DefaultSounds/SolenoidOff.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:71", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Bell switched on", "name": "BellOn.wav", "path": "DefaultSounds/BellOn.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:72", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Bell switched off", "name": "BellOff.wav", "path": "DefaultSounds/BellOff.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:73", "system": "fruitmachine"}, {"bundled": true, "category": "game_data", "description": "Nudge buzzer activated", "name": "Buzzer.wav", "path": "DefaultSounds/Buzzer.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:74", "system": "fruitmachine"}, {"category": "game_data", "description": "Feature sounder activated on an EM machine", "name": "Sounder.wav", "note": "Effect name documented by MFME with no sample in the distribution.", "path": "DefaultSounds/Sounder.wav", "required": false, "source_ref": "DefaultSounds/Readme.txt:75", "system": "fruitmachine"}], "mode": "standalone", "notes": "Closed-source Delphi emulator for fruit machine and slot machine hardware,\nwritten by Chris Wren (Wizard) and distributed as a Windows installer. MFME.exe\ncarries FileVersion 20.1.0.0, FileDescription \"Multiple Fruit Machine Emulator\" and\ncopyright \"C.J.Wren 1997-2020\"; the installer targets Windows 10, defaults to\nC:\\MFME\\v20 (history.txt:323) and writes HKCU\\Software\\CJW\\MFME. The binary is\nASPack compressed, imports dinput8, xaudio2_9, d2d1 and d3d11 for input, sound\nand the hardware accelerated scaler added in v19.0 (history.txt:8-9), and holds\nits layout engine in Delphi units around an EasyCompression Library core.\nDevelopment ended with the author's death, and Update.exe, reached from File ->\nCheck For Updates (history.txt:235), no longer finds a server. ES-DE calls\nMFME.exe with a .gam path and the working directory set to the emulator\nfolder, through find rules MFME and MFME-WINDOWS, and runs\nit under Wine or Proton on Linux; .gam is in the arcade and mame extension\nlists.\n\nA machine is a folder holding a .gam file, the .fml layout it names and the ROM\nset. The .gam is plain text: a System line naming the tech, DIP switch, reel,\nstake, jackpot, percentage and meter state, a Layout line naming the .fml, a\nGame line, and one ROM line per ROM file. Layouts before v5 used .dat and are\nconverted by loading them in v5 or v6 and saving; v20 loads .fml only. The .fml\nis an AACS container whose password is derived from a four byte seed at the end\nof the file through a mixer, hashed with RIPEMD-128 into a Rijndael key, and\neach chunk is zlib compressed; it holds the Delphi layout stream with every\nbitmap embedded, carries no external file path, and text components name a font\nfamily rather than a font file. MFME.exe is started with the .gam path as its\nargument (history.txt:271).\n\nROM sets are per machine and self contained. Barcrest S4 and S5 sets are .LO and\n.HI program files with a .BIN sound ROM, MPU5 sets are .p1 to .p4, and other\ntechs use .hex or .rom members named by the .gam. Fruit machine hardware has no\nsystem BIOS, so nothing is shared between machines, and sound ROMs belong to the\nmachine as well: an S4 game whose sound ROMs are absent still runs and reports\nWrong Snd Err (history.txt:301). v20.0 added an automatic ROM download for DIF\nlegacy layouts (history.txt:293). Ctrl-K resets a game with its alternate ROM\nset (tips.txt).\n\nEffect samples are the mechanical cabinet sounds MFME plays itself, distinct\nfrom the game audio the sound ROM produces. Each effect has a fixed filename\nresolved in the game folder first, then DefaultSounds\\Custom\\<tech>\\<cabinet\nstyle>, then DefaultSounds (DefaultSounds/Readme.txt:78-84), and files are\nopened when required rather than at layout load (history.txt:210-211). A\npreference forces the defaults over the ones a layout selects\n(history.txt:219). The distribution ships Custom folders for 40 techs: ACEVIDEO,\nADDER5, ASTRASYSA1, BLACKBOX, COINMASTER, ELECTROCOIN, EPOCH, IGTS+, IGTS2000,\nIMPACT, INDER, M1AB, M1VIDEO, MACH2000A, MACH2000E, MACH2000S, MMM, MPS2, MPU2,\nMPU3, MPU4, MPU4PLASMA, MPU4VIDEO, MPU5, PCLMAXI, PHOENIX, PHOENIX2, PLUTO5,\nPROCONN, SCORPION1, SCORPION2, SCORPION4, SCORPION5, SRU, SYS1, SYS5, SYS83,\nSYS85, SYSTEM80 and spACE, with cabinet subfolders Eclipse for ADDER5,\nSCORPION4 and SCORPION5, Elegance for EPOCH, and Genesis for MPU4 and MPU5.\nDefaultSounds/Readme.txt:35-37 lists the electronic token mech effects as\nCoinInToken, CoinInTokenSwitch and CoinInTokenRejected; the files that ship and\nthe entry that introduced them name them TokenIn, TokenInSwitch and\nTokenInRejected (history.txt:80).\n\nThree shipped directories are enumerated rather than looked up by name and\ntherefore expect no particular filename. DefaultBackdrops and DefaultTiles hold\nthe images offered as a backdrop or tiled background in the full screen modes,\npicked at random when the preference is set (history.txt:48, 55-56), and ship\none wallpaper and six tiles. DefaultSounds/MiscSounds holds alternate payout,\ncoin and note recordings that a user copies over an effect name. Fonts is\nscanned for the fonts a layout names, so its contents grow with the layouts\ninstalled.\n", "profiled_date": "2026-08-08", "source": "https://www.desertislandfruits.com/", "systems": ["fruitmachine"], "type": "standalone", "upstream": "closed-source"}


id: mgba
name: mGBA
type: libretro
classification: official_port
source: https://github.com/libretro/mgba
upstream: https://github.com/mgba-emu/mgba
source_commit: 93fed7144836d20c9087ae88bc67dfdde834db9d
profile_json:
{"core_classification": "official_port", "core_version": "0.10-dev", "cores": ["mgba"], "display_name": "Nintendo - Game Boy Advance (mGBA)", "emulator": "mGBA", "files": [{"hle_fallback": true, "name": "gba_bios.bin", "note": "GBA BIOS. HLE replacement built in. Real BIOS adds boot logo and full SWI accuracy.", "required": false, "size": 16384, "source_ref": "src/platform/libretro/libretro.c:2099", "system": "nintendo-gba", "validation": ["size"]}, {"name": "gb_bios.bin", "note": "DMG/MGB boot ROM. Scrolling Nintendo logo. Skipped if absent.", "required": false, "size": 256, "source_ref": "src/platform/libretro/libretro.c:971", "system": "nintendo-gb", "validation": ["crc32"]}, {"name": "gbc_bios.bin", "note": "CGB boot ROM. Used for CGB, AGB (GBA in GB mode), and SCGB models.", "required": false, "size": 2304, "source_ref": "src/platform/libretro/libretro.c:2127", "system": "nintendo-gbc", "validation": ["crc32"]}, {"name": "sgb_bios.bin", "note": "SGB boot ROM. SGB2 maps here in standalone (src/gb/core.c:643) but falls to gb_bios.bin in libretro.", "required": false, "size": 256, "source_ref": "src/platform/libretro/libretro.c:2130", "system": "nintendo-sgb", "validation": ["crc32"]}], "logo": "https://raw.githubusercontent.com/mgba-emu/mgba/master/res/mgba-256.png", "notes": "mGBA is a Game Boy Advance emulator with Game Boy, Game Boy Color, and\nSuper Game Boy support.\n\nAll BIOS files are optional. mGBA ships a built-in HLE BIOS for GBA\n(src/gba/hle-bios.c) that covers most software. The real BIOS improves\naccuracy (startup logo, some edge-case SWI behavior). There is no HLE\nBIOS for GB/GBC/SGB -- those rely on GBSkipBIOS() if no file is found.\n\nBIOS loading is controlled by two core options:\n  mgba_use_bios (default ON)  - whether to look for BIOS files at all\n  mgba_skip_bios (default OFF) - skip the boot animation even if loaded\n\nThe libretro port resolves BIOS filenames in retro_load_game()\n(src/platform/libretro/libretro.c:2091-2148). It picks the filename\nbased on detected model:\n  GBA           -> gba_bios.bin\n  GB (DMG/MGB)  -> gb_bios.bin\n  GBC (CGB/AGB) -> gbc_bios.bin\n  SGB           -> sgb_bios.bin\n  SGB2          -> gb_bios.bin (falls to default, missing case)\n\nThe standalone core (src/gb/core.c:637-684) correctly maps SGB2 to\nsgb_bios.bin (marked TODO for a dedicated file). The libretro port\nomits GB_MODEL_SGB2 from its switch, so SGB2 falls to default.\n\nGBIsBIOS() in src/gb/gb.c validates BIOS files by CRC32 checksum.\nAccepted checksums cover DMG, DMG0, MGB, SGB, SGB2, CGB, CGB0, CGBE,\nAGB, and AGB0 revisions.\n", "platform_details": {"gb": {"bios_size": 256, "hle_bios": false, "note": "GBIsBIOS() validates by CRC32. Accepted DMG-family checksums:\n  DMG0 = 0xC2F5CC97, DMG = 0x59C8598E, MGB = 0xE6920754\nFiles not matching any known checksum are rejected.\n", "source_ref": "src/gb/gb.c:570-605"}, "gba": {"bios_size": 16384, "hle_bios": true, "note": "GBALoadBIOS() validates size (must be exactly 0x4000) then computes\nan internal checksum. Two official checksums are recognized:\n  GBA_BIOS_CHECKSUM    = 0xBAAE187F (standard GBA)\n  GBA_DS_BIOS_CHECKSUM = 0xBAAE1880 (DS GBA mode)\nOther checksums trigger a warning but the file is still loaded.\n", "source_ref": "src/gba/hle-bios.c, src/gba/gba.c:520-551"}, "gbc": {"bios_size": 2304, "hle_bios": false, "note": "Accepted CGB-family CRC32 checksums:\n  CGB = 0x41884E46, CGB0 = 0xE8EF5318, CGBE = 0xE95DC95D\n  AGB = 0xFFD6B0F1, AGB0 = 0x570337EA\n", "source_ref": "src/gb/gb.c:570-605"}, "sgb": {"bios_size": 256, "hle_bios": false, "note": "Accepted SGB CRC32 checksums:\n  SGB = 0xEC8A83B9, SGB2 = 0x53D0DD63\nSGB2 maps here in standalone (marked TODO upstream). Libretro port\nomits SGB2 case, falls to gb_bios.bin.\n", "source_ref": "src/gb/gb.c:570-605, src/gb/core.c:642-644"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/mgba", "source_commit": "93fed7144836d20c9087ae88bc67dfdde834db9d", "systems": ["nintendo-gba", "nintendo-gb", "nintendo-gbc", "nintendo-sgb"], "type": "libretro", "upstream": "https://github.com/mgba-emu/mgba"}


id: minivmac
name: Mini vMac
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-minivmac
upstream: https://www.gryphel.com/c/minivmac/
source_commit: babdf7b53d361a7225858b68a8a64efe8b06f5e5
profile_json:
{"core_classification": "community_fork", "core_version": "36.04", "cores": ["minivmac"], "display_name": "Mac II (minivmac)", "emulator": "Mini vMac", "files": [{"name": "MacII.ROM", "note": "Macintosh II ROM image (256 KB). Hardcoded as RomFileName. The core reads exactly kROM_Size (262144) bytes via filestream_read.\n", "path": "MacII.ROM", "required": true, "size": 262144, "source_ref": "minivmac/cfg/CNFGRAPI.h:32, minivmac/src/OSGLUERETRO.c:781", "validation": ["size"]}, {"name": "MacIIx.ROM", "note": "Macintosh IIx ROM image (256 KB). Tried first in the loading sequence. If present, takes priority over MacII.ROM.\n", "path": "MacIIx.ROM", "required": false, "size": 262144, "source_ref": "minivmac/src/OSGLUERETRO.c:778", "validation": ["size"]}], "notes": {"emulation_target": "Configured for Macintosh II (kEmMd_II). 68020 CPU, FPU, ADB, VIA2, ASC sound. Screen: 640x480, 8-bit color depth.\n", "info_discrepancy": ".info declares firmware_count=1 (MacII.ROM only). The code also tries MacIIx.ROM first (OSGLUERETRO.c:778).\n"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-minivmac", "source_commit": "babdf7b53d361a7225858b68a8a64efe8b06f5e5", "systems": ["macintosh-ii"], "type": "libretro", "upstream": "https://www.gryphel.com/c/minivmac/"}


id: mkxp-z
name: mkxp-z
type: alias
profile_json:
{"alias_of": "mkxp_z", "cores": ["mkxp-z"], "display_name": "RPG Maker XP/VX/VX Ace (mkxp-z)", "emulator": "mkxp-z", "files": [], "profiled_date": "2026-03-24", "type": "alias"}


id: mkxp_z
name: mkxp-z
type: libretro
classification: game_engine
source: https://github.com/white-axe/mkxp-z
upstream: https://github.com/mkxp-z/mkxp-z
source_commit: f4bc5aacee7875526ac7053cb61c0dc2357cac17
profile_json:
{"core_classification": "game_engine", "core_version": "f4bc5aa", "cores": ["mkxp-z"], "display_name": "RPG Maker XP/VX/VX Ace (mkxp-z)", "emulator": "mkxp-z", "files": [{"category": "game_data", "description": "RPG Maker XP Run-Time Package", "name": "Standard", "path": "mkxp-z/RTP/Standard/", "required": false, "source_ref": "src/core.cpp:1042-1085, src/core.cpp:1087-1158"}, {"category": "game_data", "description": "RPG Maker VX Run-Time Package", "name": "RPGVX", "path": "mkxp-z/RTP/RPGVX/", "required": false, "source_ref": "src/core.cpp:1042-1085, src/core.cpp:1087-1158"}, {"category": "game_data", "description": "RPG Maker VX Ace Run-Time Package", "name": "RPGVXAce", "path": "mkxp-z/RTP/RPGVXAce/", "required": false, "source_ref": "src/core.cpp:1042-1085, src/core.cpp:1087-1158"}, {"category": "game_data", "description": "Fallback font directory (.otf/.ttf)", "name": "Fonts", "path": "mkxp-z/Fonts/", "required": false, "source_ref": "src/core.cpp:1160-1172"}, {"category": "game_data", "description": "Ruby scripts loaded before game scripts", "name": "Preload", "path": "mkxp-z/Scripts/Preload/", "required": false, "source_ref": "src/core.cpp:876-907"}, {"category": "game_data", "description": "Ruby scripts loaded after game scripts (RGSS3 only)", "name": "Postload", "path": "mkxp-z/Scripts/Postload/", "required": false, "source_ref": "src/core.cpp:886-917"}], "notes": "Game engine implementing RGSS 1/2/3 (Ruby Game Scripting System) for\nRPG Maker XP, VX and VX Ace. Fork of Ancurio/mkxp. Libretro port by\nwhite-axe, not yet merged upstream.\n\nAll entries are directories, not individual files. No hashable BIOS.\nRTPs are shared asset packages needed only when a game references stock\nassets instead of bundling its own. MIDI soundfont (GMGSx.sf2) is\nembedded in the binary.\n", "profiled_date": "2026-03-24", "source": "https://github.com/white-axe/mkxp-z", "source_branch": "libretro", "source_commit": "f4bc5aacee7875526ac7053cb61c0dc2357cac17", "source_ref": "PR #255 to mkxp-z/mkxp-z", "systems": ["rpgmaker"], "type": "libretro", "upstream": "https://github.com/mkxp-z/mkxp-z"}


id: model2
name: Model 2 Emulator
type: standalone
source: closed-source
upstream: closed-source
profile_json:
{"core_version": "1.1a", "cores": ["model2", "model2emu", "m2emulator"], "display_name": "Model 2 Emulator (Sega Model 2)", "emulator": "Model 2 Emulator", "exclusion_note": "Uses MAME-format merged ROM sets where all required ROMs are contained within each game's ZIP file. No standalone BIOS or firmware files are loaded by the emulator. The Sega Model 2 hardware has no shared system BIOS; each game board has its own set of program, geometry, texture, and sound ROMs.\n", "files": [], "mode": "standalone", "notes": "Closed-source Sega Model 2 arcade emulator by ElSemi, formerly Nebula Model 2.\nEmulates Model 2, 2A, 2B, and 2C hardware. Windows-only, runs via Proton on\nLinux (EmuDeck setup). Last official release 1.1a (2014-01-02).\n\nUses MAME-format merged ROM sets. Each game ZIP contains all required ROMs\n(program, geometry, texture, sound, protection chips). No shared parent BIOS\nset exists for Sega Model 2 hardware; each game board has its own ROM chips.\n\nEmuDeck packages version 1.1c from SeongGino/edc-repo0004. Installs to\nromsPath/model2/ with emulator_multicpu.exe as main binary. Ships with\nLua scripts for game-specific patches (widescreen, fixes). No checkBIOS\nentry in EmuDeck; EMULATOR.INI references only a roms/ subdirectory.\n\nSource code never published. Original distribution via nebula.emulatronia.com\n(archived). PhilrocWP/Model2 GitHub repo no longer exists.\n", "profiled_date": "2026-03-26", "source": "closed-source", "systems": ["sega-model2"], "type": "standalone", "upstream": "closed-source"}


id: mojozork
name: MojoZork
type: libretro
classification: pure_libretro
source: https://github.com/icculus/mojozork
upstream: https://github.com/icculus/mojozork
source_commit: 517ccff5ad6a811f948fadc0489b45c32f177c42
profile_json:
{"core_classification": "pure_libretro", "core_version": "0.1", "cores": ["mojozork"], "display_name": "Infocom Z-Machine (MojoZork)", "emulator": "MojoZork", "files": [], "notes": "Z-Machine interpreter for Infocom text adventures (v1-v3).\nFonts embedded in binary. No system directory access. Story files\nloaded as content.\n", "profiled_date": "2026-03-24", "source": "https://github.com/icculus/mojozork", "source_commit": "517ccff5ad6a811f948fadc0489b45c32f177c42", "systems": ["zmachine"], "type": "libretro", "upstream": "https://github.com/icculus/mojozork"}


id: moonlight
name: Moonlight
type: libretro
classification: community_fork
source: https://github.com/rock88/moonlight-libretro
upstream: https://github.com/moonlight-stream/moonlight-embedded
source_commit: 20d2d77d219613a2809fa9afe9606f6cf3be2aa0
profile_json:
{"core_classification": "community_fork", "core_version": "1.0.3", "cores": ["moonlight"], "display_name": "Moonlight", "emulator": "Moonlight", "files": [], "notes": "Game streaming client for NVIDIA GameStream / Sunshine.\nPort of moonlight-embedded for RetroArch, primarily targeting\nLakka on Nintendo Switch.\n\nThe core auto-generates all needed files on first run\n(crypto keypair for pairing, unique ID, settings) in the\nsystem directory under a key/ subdirectory. No user-supplied\nfiles required.\n", "profiled_date": "2026-03-24", "source": "https://github.com/rock88/moonlight-libretro", "source_commit": "20d2d77d219613a2809fa9afe9606f6cf3be2aa0", "systems": [], "type": "libretro", "upstream": "https://github.com/moonlight-stream/moonlight-embedded"}


id: mpv
name: mpv
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-mpv
upstream: https://github.com/mpv-player/mpv
source_commit: 99f7fe4fd43d68da45006301829eaf37c7edbcc2
profile_json:
{"core_classification": "community_fork", "core_version": "0.2.alpha", "cores": ["mpv"], "display_name": "MPV", "emulator": "mpv", "files": [], "notes": "Libretro wrapper around libmpv. Links against the mpv shared library\nfor video/audio decoding and OpenGL rendering. Experimental, proof of\nconcept. No system directory access — the core only loads the content\nfile passed by RetroArch.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-mpv", "source_commit": "99f7fe4fd43d68da45006301829eaf37c7edbcc2", "systems": [], "type": "libretro", "upstream": "https://github.com/mpv-player/mpv"}


id: mrboom
name: Mr.Boom
type: libretro
classification: official_port
source: https://github.com/libretro/mrboom-libretro
upstream: https://github.com/libretro/mrboom-libretro
source_commit: d011acfbdb2d93ed38bd684ccfa0db79bda1c932
profile_json:
{"core_classification": "official_port", "core_version": "3.1", "cores": ["mrboom"], "display_name": "Mr.Boom (Bomberman)", "emulator": "Mr.Boom", "files": [], "notes": "Bomberman clone supporting up to 8 players. Converted from DOS x86 assembly by the original author (Remdy Software) using asm2c. All game assets (graphics, sounds, music) are compiled into the core binary.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/mrboom-libretro", "source_commit": "d011acfbdb2d93ed38bd684ccfa0db79bda1c932", "systems": [], "type": "libretro", "upstream": "https://github.com/libretro/mrboom-libretro"}


id: msx-emu
name: MSX.emu
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: http://bluemsx.msxblue.com/
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"core_classification": "community_fork", "core_version": "1.5.85", "cores": ["msx-emu", "MSX.emu", "MSX-EMU"], "display_name": "MSX/ColecoVision (MSX.emu)", "emulator": "MSX.emu", "files": [{"bundled": true, "category": "game_data", "description": "C-BIOS MSX1 machine definition", "name": "config.ini", "path": "Machines/MSX - C-BIOS/config.ini", "required": true, "sha1": "5e36ed1fb6f148378de9f13e28013bd2d5d07ef4", "size": 395, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144", "system": "msx"}, {"bundled": true, "description": "C-BIOS MSX1 main ROM, slot 0-0 from page 0", "name": "cbios_main_msx1.rom", "path": "Machines/MSX - C-BIOS/cbios_main_msx1.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/res/firmware/Machines/MSX - C-BIOS/config.ini:27, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65", "system": "msx"}, {"bundled": true, "description": "C-BIOS MSX1 boot logo, slot 0-0 from page 4", "name": "cbios_logo_msx1.rom", "path": "Machines/MSX - C-BIOS/cbios_logo_msx1.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65", "system": "msx"}, {"bundled": true, "category": "game_data", "description": "C-BIOS MSX2 machine definition", "name": "config.ini", "path": "Machines/MSX2 - C-BIOS/config.ini", "required": true, "sha1": "3968cca6fb977936af849d611bc4ebd4910dd81a", "size": 472, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144", "system": "msx2"}, {"bundled": true, "description": "C-BIOS MSX2 main ROM, slot 0-0 from page 0", "name": "cbios_main_msx2.rom", "path": "Machines/MSX2 - C-BIOS/cbios_main_msx2.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2"}, {"bundled": true, "description": "C-BIOS MSX2 boot logo, slot 0-0 from page 4", "name": "cbios_logo_msx2.rom", "path": "Machines/MSX2 - C-BIOS/cbios_logo_msx2.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:29, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2"}, {"bundled": true, "description": "C-BIOS MSX2 sub ROM, slot 3-0", "name": "cbios_sub.rom", "path": "Machines/MSX2 - C-BIOS/cbios_sub.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX2 - C-BIOS/config.ini:30, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2"}, {"bundled": true, "category": "game_data", "description": "C-BIOS MSX2+ machine definition", "name": "config.ini", "path": "Machines/MSX2+ - C-BIOS/config.ini", "required": true, "sha1": "ac86b9962ac28326dbfcb1af71f3e9f9b2cc3649", "size": 534, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:450-468, MSX.emu/src/main/RomLoader.cc:135-144", "system": "msx2plus"}, {"bundled": true, "description": "C-BIOS MSX2+ main ROM, slot 0-0 from page 0", "name": "cbios_main_msx2+.rom", "path": "Machines/MSX2+ - C-BIOS/cbios_main_msx2+.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:28, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2plus"}, {"bundled": true, "description": "C-BIOS MSX2+ boot logo, slot 0-0 from page 4", "name": "cbios_logo_msx2+.rom", "path": "Machines/MSX2+ - C-BIOS/cbios_logo_msx2+.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:29, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2plus"}, {"bundled": true, "description": "C-BIOS MSX2+ sub ROM, slot 3-0, same bytes as the MSX2 C-BIOS sub ROM", "name": "cbios_sub.rom", "path": "Machines/MSX2+ - C-BIOS/cbios_sub.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:30, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181", "system": "msx2plus"}, {"bundled": true, "description": "C-BIOS MSX-MUSIC ROM, slot 3-1 from page 2", "name": "cbios_music.rom", "path": "Machines/MSX2+ - C-BIOS/cbios_music.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/res/firmware/Machines/MSX2+ - C-BIOS/config.ini:31, MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68", "system": "msx2plus"}, {"bundled": true, "category": "game_data", "description": "C-BIOS 0.29 release notes and licence, bundled beside the machine folders", "name": "cbios.txt", "note": "Shipped in the application bundle. No code reads it.", "path": "cbios.txt", "required": false, "size": 10469, "source_ref": "MSX.emu/res/firmware/cbios.txt", "system": "msx"}, {"category": "game_data", "description": "MSX1 machine definition", "name": "config.ini", "path": "Machines/MSX/config.ini", "required": true, "sha1": "483b2c34fcb3ddcf650314e45104f358ef74c98b", "size": 408, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97", "system": "msx"}, {"category": "game_data", "description": "MSX2 machine definition, the default MSX machine", "name": "config.ini", "path": "Machines/MSX2/config.ini", "required": true, "sha1": "460ded0dbfc0285490da87a446b0321b6496aa5b", "size": 649, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97", "system": "msx2"}, {"category": "game_data", "description": "MSX2+ machine definition", "name": "config.ini", "path": "Machines/MSX2+/config.ini", "required": true, "sha1": "cb7d14a17c4f4632f17ba5a64160cdd876dd6010", "size": 773, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97", "system": "msx2plus"}, {"category": "game_data", "description": "MSX turbo R machine definition", "name": "config.ini", "path": "Machines/MSXturboR/config.ini", "required": true, "sha1": "9836d109ec7879374dcd044da149f1b5aafd4664", "size": 941, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97", "system": "msxturbor"}, {"category": "game_data", "description": "ColecoVision machine definition, the default Coleco machine", "name": "config.ini", "path": "Machines/COL - ColecoVision/config.ini", "required": true, "sha1": "0f0b7b73ba6f8677dfc5c824bb3edf6df2ff653e", "size": 347, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468, MSX.emu/src/main/RomLoader.cc:135-144, MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/EmuMenuViews.cc:32-97", "system": "colecovision"}, {"description": "MSX1 main BIOS of the MSX machine, mapped through the cassette patch mapper", "name": "MSX.rom", "path": "Machines/Shared Roms/MSX.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68", "system": "msx"}, {"description": "Philips floppy disk ROM, named by the MSX and MSX2 machine definitions", "name": "PHILIPSDISK.rom", "path": "Machines/Shared Roms/PHILIPSDISK.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperPhilipsFdc.c:139-146", "system": "msx"}, {"description": "MSX2 main BIOS of the MSX2 machine", "name": "MSX2.rom", "path": "Machines/Shared Roms/MSX2.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68", "system": "msx2"}, {"description": "MSX2 sub ROM of the MSX2 machine", "name": "MSX2EXT.rom", "path": "Machines/Shared Roms/MSX2EXT.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX-MUSIC ROM, named by the MSX2 and MSX2+ machine definitions", "name": "MSX2PMUS.rom", "path": "Machines/Shared Roms/MSX2PMUS.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68", "system": "msx2"}, {"description": "MoonSound wave ROM, named by the MSX2, MSX2+ and turbo R machine definitions", "name": "MOONSOUND.rom", "path": "Machines/Shared Roms/MOONSOUND.rom", "required": true, "size": 2097152, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperMoonsound.c:129-158", "system": "msx2"}, {"description": "X-BASIC II ROM, named by the MSX2, MSX2+ and turbo R machine definitions", "name": "XBASIC2.rom", "path": "Machines/Shared Roms/XBASIC2.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2+ main BIOS of the MSX2+ machine", "name": "MSX2P.rom", "path": "Machines/Shared Roms/MSX2P.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68", "system": "msx2plus"}, {"description": "MSX2+ sub ROM of the MSX2+ machine", "name": "MSX2PEXT.rom", "path": "Machines/Shared Roms/MSX2PEXT.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2plus"}, {"description": "Kanji character ROM, named by the MSX2+ and turbo R machine definitions", "name": "KANJI.rom", "note": "The one length test in the tree: the mapper returns 0 for any other size, which fails the machine.", "path": "Machines/Shared Roms/KANJI.rom", "required": true, "size_options": [131072, 262144], "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperKanji.c:141-149", "system": "msx2plus", "validation": ["size"]}, {"description": "Kanji BASIC ROM, named by the MSX2+ and turbo R machine definitions", "name": "MSXKANJI.rom", "path": "Machines/Shared Roms/MSXKANJI.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2plus"}, {"description": "Panasonic floppy disk ROM of the MSX2+ machine", "name": "PANASONICDISK.rom", "path": "Machines/Shared Roms/PANASONICDISK.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262", "system": "msx2plus"}, {"description": "turbo R main BIOS, mapped through the Panasonic DRAM mapper", "name": "MSXTR.rom", "path": "Machines/Shared Roms/MSXTR.rom", "required": true, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99", "system": "msxturbor"}, {"description": "turbo R sub ROM, mapped through the Panasonic DRAM mapper", "name": "MSXTREXT.rom", "path": "Machines/Shared Roms/MSXTREXT.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99", "system": "msxturbor"}, {"description": "turbo R MSX-MUSIC ROM", "name": "MSXTRMUS.rom", "path": "Machines/Shared Roms/MSXTRMUS.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msxturbor"}, {"description": "turbo R firmware ROM", "name": "MSXTROPT.rom", "path": "Machines/Shared Roms/MSXTROPT.rom", "required": true, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msxturbor"}, {"description": "MSX-DOS 2.3 disk ROM of the turbo R machine", "name": "MSXDOS23.rom", "path": "Machines/Shared Roms/MSXDOS23.rom", "required": true, "size": 65536, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133, MSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262", "system": "msxturbor"}, {"description": "ColecoVision BIOS, slot 0-0 page 0", "name": "coleco.rom", "path": "Machines/COL - ColecoVision/coleco.rom", "required": true, "size": 8192, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "colecovision"}, {"description": "Sunrise IDE controller ROM", "name": "SUNRISEIDE.rom", "note": "The one ROM path written in the code instead of a machine definition. Read when the Sunrise IDE device is inserted from the ROM/Disk Control menu and when a disk image of 1 MB or more is mounted as a hard drive. Without it the mapper maps a blank 512 KB ROM and the device still answers.", "path": "Machines/Shared Roms/SUNRISEIDE.rom", "required": false, "size": 65536, "source_ref": "MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:302-311, MSX.emu/src/main/EmuMenuViews.cc:403-413, MSX.emu/src/main/Main.cc:588-603, MSX.emu/src/blueMSX/Memory/romMapperSunriseIDE.c:194-211", "system": "msx"}, {"description": "MSX1 Arabic BIOS", "name": "MSXAR.ROM", "path": "Machines/Shared Roms/MSXAR.ROM", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Arabic character ROM", "name": "ARAB1.ROM", "path": "Machines/Shared Roms/ARAB1.ROM", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Brazilian BIOS", "name": "MSXBR.rom", "path": "Machines/Shared Roms/MSXBR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Microsol floppy disk ROM of the Brazilian machines", "name": "MICROSOLDISK.ROM", "path": "Machines/Shared Roms/MICROSOLDISK.ROM", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 French BIOS", "name": "MSXFR.rom", "path": "Machines/Shared Roms/MSXFR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 German BIOS", "name": "MSXG.rom", "path": "Machines/Shared Roms/MSXG.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Japanese BIOS", "name": "MSXJ.rom", "path": "Machines/Shared Roms/MSXJ.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Korean BIOS", "name": "MSXKR.rom", "path": "Machines/Shared Roms/MSXKR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Korean Hangul ROM", "name": "MSXHAN.rom", "path": "Machines/Shared Roms/MSXHAN.rom", "required": false, "size": 8192, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Russian BIOS", "name": "MSXR.rom", "path": "Machines/Shared Roms/MSXR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Estonian BIOS", "name": "MSXR2.rom", "path": "Machines/Shared Roms/MSXR2.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Swedish BIOS", "name": "MSXSE.ROM", "path": "Machines/Shared Roms/MSXSE.ROM", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX1 Spanish BIOS", "name": "MSXSP.rom", "path": "Machines/Shared Roms/MSXSP.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "National floppy disk ROM, shared by eight MSX1 definitions", "name": "NATIONALDISK.rom", "path": "Machines/Shared Roms/NATIONALDISK.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Microsol VMX-80 character ROM", "name": "GCVMX80.ROM", "path": "Machines/Shared Roms/GCVMX80.ROM", "required": false, "size": 8192, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "RS-232 interface ROM", "name": "RS232.ROM", "path": "Machines/Shared Roms/RS232.ROM", "required": false, "size": 8192, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "FM-PAC cartridge ROM", "name": "FMPAC.rom", "path": "Machines/Shared Roms/FMPAC.rom", "required": false, "size": 65536, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Beer IDE controller ROM", "name": "BEERIDE.ROM", "path": "Machines/Shared Roms/BEERIDE.ROM", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Gouda SCSI controller ROM", "name": "NOVAXIS.rom", "path": "Machines/Shared Roms/NOVAXIS.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Nowind MSX-DOS 1 image", "name": "nowindDos1.rom", "path": "Machines/Shared Roms/nowindDos1.rom", "required": false, "size": 524288, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "Nowind MSX-DOS 2 image", "name": "nowindDos2.rom", "path": "Machines/Shared Roms/nowindDos2.rom", "required": false, "size": 524288, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx"}, {"description": "MSX2 Arabic BIOS", "name": "MSX2AR.ROM", "path": "Machines/Shared Roms/MSX2AR.ROM", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Arabic sub ROM", "name": "MSX2AREXT.ROM", "path": "Machines/Shared Roms/MSX2AREXT.ROM", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Arabic character ROM", "name": "ARABIC.rom", "path": "Machines/Shared Roms/ARABIC.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "Arabic Painter ROM of the MSX2 Arabic definition", "name": "PAINT.rom", "path": "Machines/Shared Roms/PAINT.rom", "required": false, "size": 65536, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "Arabic word processor ROM of the MSX2 Arabic definition", "name": "SWP.rom", "path": "Machines/Shared Roms/SWP.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Brazilian BIOS", "name": "MSX2BR.rom", "path": "Machines/Shared Roms/MSX2BR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Brazilian sub ROM", "name": "MSX2BREXT.rom", "path": "Machines/Shared Roms/MSX2BREXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 French BIOS", "name": "MSX2FR.rom", "path": "Machines/Shared Roms/MSX2FR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 French sub ROM", "name": "MSX2FREXT.rom", "path": "Machines/Shared Roms/MSX2FREXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 German BIOS", "name": "MSX2G.rom", "path": "Machines/Shared Roms/MSX2G.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 German sub ROM", "name": "MSX2GEXT.rom", "path": "Machines/Shared Roms/MSX2GEXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Japanese BIOS", "name": "MSX2J.rom", "path": "Machines/Shared Roms/MSX2J.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Japanese sub ROM", "name": "MSX2JEXT.rom", "path": "Machines/Shared Roms/MSX2JEXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Korean BIOS", "name": "MSX2KR.rom", "path": "Machines/Shared Roms/MSX2KR.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Korean sub ROM", "name": "MSX2KREXT.rom", "path": "Machines/Shared Roms/MSX2KREXT.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Korean Hangul ROM", "name": "MSX2HAN.rom", "path": "Machines/Shared Roms/MSX2HAN.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "Korean Hangul character ROM", "name": "HANGUL.rom", "path": "Machines/Shared Roms/HANGUL.rom", "required": false, "size": 131072, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Russian BIOS", "name": "MSX2R.rom", "path": "Machines/Shared Roms/MSX2R.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Estonian BIOS", "name": "MSX2R2.ROM", "path": "Machines/Shared Roms/MSX2R2.ROM", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 sub ROM of the Russian and Estonian definitions", "name": "MSX2REXT.rom", "path": "Machines/Shared Roms/MSX2REXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Swedish BIOS", "name": "MSX2SE.rom", "path": "Machines/Shared Roms/MSX2SE.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Spanish BIOS", "name": "MSX2SP.rom", "path": "Machines/Shared Roms/MSX2SP.rom", "required": false, "size": 32768, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}, {"description": "MSX2 Spanish sub ROM", "name": "MSX2SPEXT.rom", "path": "Machines/Shared Roms/MSX2SPEXT.rom", "required": false, "size": 16384, "source_ref": "MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468,1168-1181, MSX.emu/src/main/RomLoader.cc:57-92,94-133", "system": "msx2"}], "mode": "standalone", "notes": "Android and Linux member of the EX Emulator series by Robert Broglia, published as\ncom.explusalpha.MsxEmu (MSX.emu/metadata/conf.mk:2,4,6,7, README.md:3-4) and reached\nby ES-DE through its MSX-EMU find rule. blueMSX is vendored under\nMSX.emu/src/blueMSX and driven by the app's own board, ROM loader and archive\nlayers (MSX.emu/src/CMakeLists.txt:6-16). Content is read from .rom, .mx1, .mx2\nand .col cartridge images and from .dsk disk images, directly or as the first\nmatching entry of a .zip, .7z or .rar (MSX.emu/src/main/system.ccm:83-87,\nMSX.emu/src/main/Main.cc:521-618). A disk image of 1 MB or more is mounted on a\nSunrise IDE controller instead of a floppy drive\n(MSX.emu/src/main/Main.cc:549,556-561,588-603).\n\nTwo of blueMSX's board types are built, every MSX variant and ColecoVision.\ncreateBoard returns 0 for anything else, and SVI, ColecoAdam, SG-1000, SF-7000 and\nSC-3000 have neither a board file in the build nor their mappers\n(MSX.emu/src/main/Main.cc:171-200, MSX.emu/src/CMakeLists.txt:80-83,\nMSX.emu/src/blueMSX/Common/MsxTypes.h:145,150).\n\nEverything the emulator loads comes from a machine definition. machineCreate opens\nMachines/<name>/config.ini and reads its [Slots] section, where each line carries a\nslot, a subslot, a start page, a page count, a numeric ROM type and the ROM's path\n(MSX.emu/src/blueMSX/Board/Machine.c:300-339,450-468). machineInitialize then loads\neach named path, and a file it cannot read sets success to 0 for every ROM type but\none, which fails msxCreate or colecoCreate and ends the load with \"Error loading\nmachine files for\" (MSX.emu/src/blueMSX/Board/Machine.c:1168-1181,\nMSX.emu/src/blueMSX/Board/MSX.c:247,277-281,\nMSX.emu/src/blueMSX/Board/Coleco.c:403,416-420,\nMSX.emu/src/main/Main.cc:215-219,262-269). Every ROM a definition names is therefore\nrequired for that machine, and only for it.\n\nPaths are resolved against the user's BIOS folder first and the application bundle\nsecond (MSX.emu/src/main/RomLoader.cc:57-92,94-133,135-144). That folder may be a\ndirectory or an archive and is refused unless it carries a Machines entry\n(MSX.emu/src/main/options.cc:212-228); with none set the app falls back to the asset\npath on Linux and to the storage path elsewhere\n(MSX.emu/src/main/options.cc:230-243). The machine picker lists every subdirectory\nholding a config.ini and appends the three bundled C-BIOS names on Android, where\nthe asset directory enumeration skips directories\n(MSX.emu/src/main/EmuMenuViews.cc:32-97,548-608).\n\nThe default machine is MSX2 and the default Coleco machine is COL - ColecoVision; a\n.col name picks the second and a session setting overrides both\n(MSX.emu/src/main/system.ccm:75-76, MSX.emu/src/main/Main.cc:534,563-577). Neither\ndefault is bundled. The application ships only the three C-BIOS machines in its\nassets (MSX.emu/res/firmware/Machines, symlinked into MSX.emu/res/android/assets),\nwhich run cartridge images; the definitions and ROMs behind every other name come\nfrom MSX.emu.zip, the firmware set on the author's site, whose Machines folder holds\nMSX, MSX2, MSX2+, MSXturboR, COL - ColecoVision and Shared Roms. Its MSXturboR\ndefinition spells MSXTR, MSXTREXT, MSXTRMUS, MSXTROPT and MSXDOS23 with a lowercase\n.rom extension where blueMSX's own set spells them .ROM, and the loader opens the\nstring verbatim.\n\nOne ROM path is written in the code rather than in a definition,\nMachines/Shared Roms/SUNRISEIDE.rom\n(MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:302-311). The four others cannot be\nreached. Beer IDE, Gouda SCSI and the two Nowind images hang off cart names the app\nnever passes and off mappers EXCLUDE_IDE_DEVICES and EXCLUDE_NOWIND compile out, and\nthe FMPAC branch needs ROM_FMPAC as the incoming type where boardChangeCartridge\nonly ever passes ROM_UNKNOWN, ROM_SCC, ROM_SCCPLUS and ROM_SUNRISEIDE\n(MSX.emu/src/blueMSX/Memory/MegaromCartridge.c:283-335,\nMSX.emu/src/blueMSX/Common/MsxTypes.h:145-151, MSX.emu/src/main/Main.cc:56-70,\nMSX.emu/src/main/EmuMenuViews.cc:385-413). Two of them are also spelled in lower\ncase there against the upper case of the set.\n\nNo hash is checked anywhere, and the sizes below are the ones the shipped set\ncarries. The machine definitions still carry one, because config.ini is the name of\nevery definition there is and nothing else tells two of them apart; the values are\nthose of the emulator's own assets and of the author's firmware set. A single length\ntest exists, the Kanji mapper taking 131072 or 262144 bytes\nand nothing else (MSX.emu/src/blueMSX/Memory/romMapperKanji.c:141-149). The other\nmappers refuse only a ROM that does not fit the pages left in its slot, which is a\nproperty of the definition rather than of the dump\n(MSX.emu/src/blueMSX/Memory/romMapperNormal.c:60-65,\nMSX.emu/src/blueMSX/Memory/romMapperCasette.c:58-68,\nMSX.emu/src/blueMSX/Memory/romMapperMsxMusic.c:55-68,\nMSX.emu/src/blueMSX/Memory/romMapperDRAM.c:88-99), and the Philips FDC, Panasonic\nFDC and MoonSound mappers test nothing at all\n(MSX.emu/src/blueMSX/Memory/romMapperPhilipsFdc.c:139-146,\nMSX.emu/src/blueMSX/Memory/romMapperTC8566AF.c:236-262,\nMSX.emu/src/blueMSX/Memory/romMapperMoonsound.c:129-158).\n\nThe ROM database is compiled in. mediaDbGuessRom matches a cartridge's SHA-1 against\nthe table of EmbeddedRomDBData.h to pick its mapper, the TinyXML and MediaDb.cpp\nsources that would read msxromdb.xml and msxsysromdb.xml are built only under\nuseXMLDB, and the two calls that loaded them are commented out\n(MSX.emu/src/main/MediaDb.cc:50-59, MSX.emu/src/CMakeLists.txt:174-188,\nMSX.emu/src/main/system.ccm:165-167). The floppy drive sounds read nothing either:\nNO_EMBEDDED_SAMPLES turns fdcAudioCreate into a stub and takes the FdcRead.wav and\nFdcMotor.wav reads with it (MSX.emu/CMakeLists.txt:33,\nMSX.emu/src/blueMSX/IoDevice/FdcAudio.c:35-42,3456-3486).\n\nPer content the app writes and reads files under its save path, <machine>.cmos for a\nbattery backed clock, an SRAM image named after the cartridge, and .sta save states\nin blueMSX's own zip format (MSX.emu/src/blueMSX/Board/MSX.c:232-233,\nMSX.emu/src/blueMSX/Memory/sramLoader.c:36-74,81-99,\nMSX.emu/src/main/Main.cc:45,380-383,385-429). Settings live in MsxEmu.config\n(MSX.emu/src/main/AppMeta.cc:32). gpOverlay.png, kbOverlay.png, ui.png and the\nshader sources are drawn by the framework from the application bundle.\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["msx", "msx1", "msx2", "msx2plus", "msxturbor", "colecovision"], "type": "standalone", "upstream": "http://bluemsx.msxblue.com/"}


id: mu
name: Mu
type: libretro
classification: pure_libretro
source: https://github.com/libretro/Mu
upstream: https://github.com/meepingsnesroms/Mu
source_commit: de05588fcb1adca6738dc4cf6a2e6e6c447bf2f2
profile_json:
{"core_classification": "pure_libretro", "core_version": "v1.3.3", "cores": ["mu"], "display_name": "Palm OS (Mu)", "emulator": "Mu", "files": [{"description": "Palm m515 ROM, Palm OS 4.1 English", "name": "palmos41-en-m515.rom", "note": "Default ROM. Selected when core option is 'Palm m515/Palm OS 4.1'.", "required": true, "source_ref": "libretroBuildSystem/libretro.c:173-176 (check_variables), 744-763 (retro_load_game ROM loading)", "system": "palm-os"}, {"description": "Palm m500 ROM, Palm OS 4.0 English", "name": "palmos40-en-m500.rom", "note": "Selected when core option is 'Palm m500/Palm OS 4.0'.", "required": false, "source_ref": "libretroBuildSystem/libretro.c:169-172", "system": "palm-os"}, {"description": "Tungsten T3 ROM, Palm OS 5.2.1 English", "name": "palmos52-en-t3.rom", "note": "Selected when core option is 'Tungsten T3/Palm OS 5.2.1'. Requires EMU_SUPPORT_PALM_OS5 compile flag.", "required": false, "source_ref": "libretroBuildSystem/libretro.c:178-181", "system": "palm-os"}, {"description": "Tungsten T3 ROM, Palm OS 6.0 English", "name": "palmos60-en-t3.rom", "note": "Selected when core option is 'Tungsten T3/Palm OS 6.0'. Requires EMU_SUPPORT_PALM_OS5 compile flag.", "required": false, "source_ref": "libretroBuildSystem/libretro.c:182-185", "system": "palm-os"}, {"description": "MC68VZ328 UART bootloader", "name": "bootloader-dbvz.rom", "note": "Optional for m500/m515. Ignored for Tungsten T3.", "required": false, "source_ref": "libretroBuildSystem/libretro.c:766-782, src/dbvz.c:1408-1423 (dbvzLoadBootloader)", "system": "palm-os"}], "notes": "Mu emulates Palm m500, Palm m515, and (with EMU_SUPPORT_PALM_OS5)\nTungsten T3. A Palm OS ROM dump is required. The core selects the\nROM filename based on the \"OS Version\" core option:\n  Palm m500 / Palm OS 4.0   -> palmos40-en-m500.rom\n  Palm m515 / Palm OS 4.1   -> palmos41-en-m515.rom  (default)\n  Tungsten T3 / Palm OS 5.2 -> palmos52-en-t3.rom\n  Tungsten T3 / Palm OS 6.0 -> palmos60-en-t3.rom\n\nROM path: RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY + \"/\" + osVersion + \".rom\".\nNo hash or size validation; the code reads whatever file is present.\nThe bootloader is optional and ignored for Tungsten T3.\nSupports no-game mode (boots Palm OS desktop from ROM without content).\n", "platform_details": {"palm_m5xx": {"bootloader_size": 512, "cpu": "MC68VZ328", "rom_size": 4194304, "source_ref": "include/m5XXBus.h:23,28, src/emulator.c:191-212"}, "tungsten_t3": {"cpu": "PXA260 (ARM)", "rom_size": 16777216, "source_ref": "include/tungstenT3Bus.h:17, src/emulator.c:145-162"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/Mu", "source_commit": "de05588fcb1adca6738dc4cf6a2e6e6c447bf2f2", "systems": ["palm-os"], "type": "libretro", "upstream": "https://github.com/meepingsnesroms/Mu"}


id: mupen64plus-ae
name: Mupen64Plus AE
type: standalone
classification: community_fork
source: https://github.com/mupen64plus-ae/mupen64plus-ae
upstream: https://github.com/mupen64plus-ae/mupen64plus-ae
source_commit: 25cfb7a0cf27517f796fb2baf92606f3ae9417f3
profile_json:
{"core_classification": "community_fork", "core_version": "3.0.249 (beta)", "cores": ["mupen64plus-ae", "MUPEN64PLUS-AE", "org.mupen64plusae.v3.alpha"], "display_name": "Nintendo - Nintendo 64 (Mupen64Plus AE)", "emulator": "Mupen64Plus AE", "files": [{"aliases": ["64DD_IPL_v12_JPN.bin", "64DD_IPL.bin"], "description": "64DD IPL ROM (Japanese retail)", "name": "64DD_IPL_JP.n64", "note": "The image every commercially released disk needs, and the one the global setting is named for. No name is fixed by the code: the path comes from a document picker and the file is copied to dd_rom.n64 before the core sees it. The core reads it whole, then byteswaps after identifying the first word as one of 0x80270740 (z64), 0x40072780 (n64) or 0x27804007 (v64); any other value logs an invalid IPL and disables 64DD. Size is not checked and no hash is computed.\n", "required": true, "source_ref": "app/src/main/java/paulscode/android/mupen64plusae/jni/CoreService.java:606-620,638-639, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:459-488, app/src/main/java/paulscode/android/mupen64plusae/persistent/GlobalPrefs.java:421,727, mupen64plus-core/upstream/src/main/main.c:1080-1145", "system": "nintendo-64dd", "validation": ["signature"]}, {"aliases": ["64DD_IPL_USA.bin", "IPL_USA.n64"], "description": "64DD IPL ROM (American retail)", "name": "64DD_IPL_US.n64", "note": "Needed for a disk whose system data carries the US region word 0x2263ee56, which the header reader accepts alongside the Japanese and development words. The front end holds one IPL path at a time and never branches on that region, so this image is loaded by putting it in the same setting. Same load path, format check and absence of size or hash validation as the Japanese image.\n", "required": true, "source_ref": "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-220, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:223,459-488, mupen64plus-core/upstream/src/main/main.c:1080-1145", "system": "nintendo-64dd", "validation": ["signature"]}, {"aliases": ["64DD_IPL_DEV.bin", "IPL_DEV.n64"], "description": "64DD IPL ROM (development)", "name": "64DD_IPL_DEV.n64", "note": "Needed for a disk whose system data carries the development region word 0x00000000, the third value the header reader accepts before giving up on a file as a disk. Shares the single IPL setting with the other two images. Same load path, format check and absence of size or hash validation.\n", "required": true, "source_ref": "app/src/main/java/paulscode/android/mupen64plusae/util/RomHeader.java:180-220, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:223,459-488, mupen64plus-core/upstream/src/main/main.c:1080-1145", "system": "nintendo-64dd", "validation": ["signature"]}], "mode": "standalone", "notes": "Android front end under the paulscode.android.mupen64plusae namespace,\npublished as org.mupen64plusae.v3.alpha (app/build.gradle:24). Everything it\nruns is vendored in tree rather than pulled as a submodule:\nmupen64plus-core, the hle, cxd4 and parallel RSP plugins, the GLideN64,\nglide64mk2, gln64, rice, angrylion-plus and parallel video plugins, its own\naudio, touchscreen and raphnet input plugins, and a miniupnp bridge for\nnetplay (settings.gradle:1). ES-DE launches it for both n64 and n64dd with an\nACTION_VIEW intent carrying a storage access uri, which the splash screen\nforwards to the gallery (AndroidManifest.xml:80-101, SplashActivity.java:134).\n\nCartridge boot needs no boot ROM. The PIF boot sequence is simulated\n(device/pif/bootrom_hle.c:48, entered from device/r4300/interrupt.c:445,496\nand main/main.c:1875) and the CIC-NUS-6105 challenge is answered by an\nalgorithm rather than a stored table (device/pif/n64_cic_nus_6105.c:93).\nNothing fills the PIF ROM window from a file.\n\nWhich 64DD IPL is used is not decided by the code. Two settings hold a path\nand both end up as the same working file dd_rom.n64: the global one, titled\n64DD IPL (J), read when the launched file is itself a disk, and a per game\none, titled 64DD IPL, read when a cartridge is launched with a disk attached\nand only while the support64dd toggle is on (CoreService.java:606-620,\nGlobalPrefs.java:421,727, GamePrefs.java:579-599,\nCoreInterface.java:144,231,459-488). The core offers a callback that would\nname the image per disk region and the front end leaves it null\n(CoreInterface.java:223, main/main.c:1082-1086), so whichever image sits in\nthe slot is the one loaded. A disk is recognised only when its system data\nheader matches and carries one of three region words, 0xe848d316 for Japan,\n0x2263ee56 for the United States and 0x00000000 for development\n(RomHeader.java:180-220); the word sets a country code used for the ROM\ndatabase and cheat lookup, never for picking the IPL. Launching a bare disk\nwith the global slot empty stops before the core starts\n(CoreService.java:638-639), and since disk only games still need a cartridge\nimage the application feeds the m64p_test_rom.v64 asset in its place\n(CoreService.java:643-644). Disk content inside a .zip or .7z is unpacked to\nthe working directory first (CoreInterface.java:490-522).\n\nTransfer Pak carts come from four per player path settings copied into the\nworking directory as playerN_gb_rom.gb and playerN_gb_ram.gb\n(CoreService.java:566-575, GamePrefs.java:933-960,\nCoreInterface.java:142-143,175-189,235-236,420-457). The core rejects a cart\nunder 32 KiB and an unknown type byte at 0x147 (device/gb/gb_cart.c:996-1009)\nand fixes no name, size or hash, so neither the cart nor its save carries an\nentry here.\n\nSeven data files ship inside the package, each keyed to a version number and\nunpacked on first start into the private files directory, which is also what\nthe core is told is SharedDataPath (ExtractAssetsOrCleanupTask.java:63-73,\nSplashActivity.java:90,399-402, AppData.java:391-403,\nNativeConfigFiles.java:111). mupen64plus.ini is the ROM database, read by the\ncore (main/rom.c:473-490 from api/frontend.c:106) and by the gallery\n(SplashActivity.java:447). mupencheat.default is copied over\nProfiles/customCheats.txt into mupencheat.txt and parsed in Java\n(SplashActivity.java:443, CheatUtils.java:88-96, GamePrefsActivity.java:548);\nthe core's own cheat.c opens no file. font.ttf is reached by GLideN64 only\nafter /system/fonts/DroidSans.ttf fails, that name being what the front end\nwrites as the configured font (TextDrawer.cpp:209-210,222-228,\nNativeConfigFiles.java:291); the core's OSD, the other upstream reader of\nthat name (osd/osd.c:40), is absent from the Android source list\n(mupen64plus-core.mk:24-101). RiceVideoLinux.ini holds rice's per ROM\nsettings (rice Config.cpp:38,933-953), Glide64mk2.ini glide64mk2's\n(glide64mk2 Main.cpp:1581-1586), and gln64.conf with gln64rom.conf gln64's\nglobal and per ROM settings (gln64 Config.cpp:245-252,296-302).\n\nTwo more assets are read straight out of the package and never unpacked:\nm64p_test_rom.v64, and GLideN64.custom.ini, whose per ROM overrides the front\nend reads itself and writes into mupen64plus.cfg (AppData.java:396-397,\nConfigFile.java:225-229, NativeConfigFiles.java:223,227). GLideN64 also asks\nthe core for GLideN64.custom.ini in SharedDataPath, where it was never\nplaced, so that native lookup finds nothing\n(mupenplus/Config_mupenplus.cpp:332-344). The touchscreen skins, the shader\nsources and the controller, touchscreen and emulation profile templates are\nused from the package the same way (AppData.java:392,401-403,\nGlobalPrefs.java:530, ShaderLoader.java:85).\n\nOptional content with no canonical artifact: hi-res texture packs under the\nuser data directory, imported from a user archive (GlobalPrefs.java:469,\nExtractTexturesFragment.java), the <ROM>_HIRESTEXTURES.htc and .hts caches\nthe plugin builds from them, read back for their storage flag\n(NativeConfigFiles.java:365-376), customCheats.txt, custom touchscreen skins\nand cover art (GlobalPrefs.java:481,486-487), and alp_screen.vert with\nalp_screen.frag, which angrylion-plus opens as working directory relative\npaths before falling back to its embedded shaders\n(angrylion-plus output/vdac.c:119-127,167-174,246-247).\n\nWritten rather than obtained: mupen64plus.cfg and the plugin sections in it,\nthe mempak, eeprom, flashram and sram saves given default content when absent\n(main/main.c:1015-1078,1619-1622) and the 64DD disk save in whichever of the\ntwo formats SaveDiskFormat selects (main/main.c:365,1176-1235), savestates\nwith the rcheevos progress file written beside them\n(CoreService.java:335,407-413), screenshots, the texture dump and cache\ndirectories, the GLideN64 shader cache and romInfoCache.cfg\n(GlobalPrefs.java:466-487, NativeConfigFiles.java:108-111).\n\nTwo files in the tree this build never reads. cxd4's rsp_conf.bin: its reader\nis the zilmar variant of update_conf behind #if !defined(M64P_PLUGIN_API),\nand the build defines that macro (mupen64plus-rsp-cxd4.mk:8), so the variant\ncompiled takes its settings from the core config API and ignores the filename\nit is handed (mupen64plus-rsp-cxd4 module.c:83-93,239,637-659). And\nparallel-rdp's shader directory, registered as a filesystem protocol only\nunder PARALLEL_RDP_SHADER_DIR, which the Android build leaves undefined, so\nthe SPIR-V compiled into the plugin is what runs\n(parallel-rdp rdp_renderer.cpp:74-78).\n", "profiled_date": "2026-08-12", "source": "https://github.com/mupen64plus-ae/mupen64plus-ae", "source_commit": "25cfb7a0cf27517f796fb2baf92606f3ae9417f3", "systems": ["nintendo-64", "nintendo-64dd"], "type": "standalone", "upstream": "https://github.com/mupen64plus-ae/mupen64plus-ae"}


id: mupen64plus_next
name: Mupen64Plus-Next
type: libretro
classification: enhanced_fork
source: https://github.com/libretro/mupen64plus-libretro-nx
upstream: https://github.com/mupen64plus/mupen64plus-core
source_commit: f275caf4b2bfa1e6d1c51636746ea793f3d80320
profile_json:
{"core_classification": "enhanced_fork", "core_version": "2.6.0", "cores": ["mupen64plus_next", "mupen64plus_next_develop", "mupen64plus_next_gles3", "mupen64plus_next_gles2", "mupen64plus", "mupen64plus-next"], "display_name": "Nintendo - Nintendo 64 (Mupen64Plus-Next)", "emulator": "Mupen64Plus-Next", "files": [{"aliases": ["64DD_IPL.bin"], "description": "64DD IPL ROM", "name": "IPL.n64", "path": "Mupen64plus/IPL.n64", "required": false, "size": 4194304, "source_ref": "mupen64plus-core/src/main/main.c:940-1024", "standalone_path": "64DD_IPL.bin"}, {"description": "TrueType font for on-screen display text", "name": "font.ttf", "note": "Fallback font for OSD text rendering (FPS counter, messages). System fonts tried first. No impact on emulation.", "path": "Mupen64plus/font.ttf", "required": false, "source_ref": "GLideN64/src/TextDrawer.cpp:165-170"}], "notes": {"dd_note": "64DD IPL ROM loaded from system/Mupen64plus/IPL.n64 when a .ndd disk is present. Accepts Z64, N64, and V64 byte-swap formats.\n", "embedded_data": "mupen64plus.ini (ROM database) and GLideN64.custom.ini (per-game GPU settings) are embedded as compiled headers and auto-generated at init.\n", "hle_available": true, "hle_note": "PIF boot ROM is fully HLE'd (bootrom_hle.c). CIC challenge/response handled in software (n64_cic_nus_6105.c). No BIOS files needed for standard cartridge games.\n", "transferpak_note": "Transfer Pak support (GB/GBC games on N64) handled via subsystem API. No additional firmware files needed.\n"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/mupen64plus-libretro-nx", "source_commit": "f275caf4b2bfa1e6d1c51636746ea793f3d80320", "systems": ["nintendo-64", "nintendo-64dd"], "type": "libretro", "upstream": "https://github.com/mupen64plus/mupen64plus-core"}


id: mupen64plus_next_develop
name: Mupen64Plus-Next Develop
type: alias
profile_json:
{"alias_of": "mupen64plus_next", "core_version": "2.8", "cores": ["mupen64plus_next_develop"], "display_name": "Nintendo - Nintendo 64 (Mupen64Plus-Next Develop)", "emulator": "Mupen64Plus-Next Develop", "files": [], "note": "Same codebase as mupen64plus_next, built from develop branch. Experimental/testing variant.", "profiled_date": "2026-03-24", "type": "alias"}


id: mupen64plus_next_gles2
name: Mupen64Plus-Next GLES2
type: alias
profile_json:
{"alias_of": "mupen64plus_next", "core_version": "2.8", "cores": ["mupen64plus_next_gles2"], "display_name": "Nintendo - Nintendo 64 (Mupen64Plus-Next GLES2)", "emulator": "Mupen64Plus-Next GLES2", "files": [], "note": "Same codebase as mupen64plus_next, compiled with GLES=1 (-DHAVE_OPENGLES2) for OpenGL ES 2.0 devices. Same BIOS files.", "profiled_date": "2026-03-24", "type": "alias"}


id: mupen64plus_next_gles3
name: Mupen64Plus-Next GLES3
type: alias
profile_json:
{"alias_of": "mupen64plus_next", "core_version": "2.8", "cores": ["mupen64plus_next_gles3"], "display_name": "Nintendo - Nintendo 64 (Mupen64Plus-Next GLES3)", "emulator": "Mupen64Plus-Next GLES3", "files": [], "note": "Same codebase as mupen64plus_next, compiled with -DHAVE_OPENGLES3 for OpenGL ES 3.0 devices. Same BIOS files.", "profiled_date": "2026-03-24", "type": "alias"}


id: my-boy
name: My Boy!
type: standalone
classification: embedded_hle
source: https://play.google.com/store/apps/details?id=com.fastemulator.gba
upstream: closed-source
profile_json:
{"author": "Pixel Respawn LLC", "core_classification": "embedded_hle", "core_version": "2.0.3", "cores": ["my-boy", "My Boy!", "MY-BOY"], "display_name": "Nintendo - Game Boy Advance (My Boy!)", "emulator": "My Boy!", "files": [{"agnostic": true, "config_key": "useBios", "description": "Game Boy Advance BIOS", "has_builtin": true, "hle_fallback": true, "name": "gba_bios.bin", "note": "Chosen from any location under any name through the document picker, or taken from the first entry of that size in a zip document. A file of another size is refused when picked and again when the game starts, and the emulator runs on the replacement compiled into its library.", "required": false, "size": 16384, "source_ref": "My Boy! 2.0.3 g.java:66-68 (size test), g.java:80-100 (zip walk and direct open), settings/EmulatorSettings.java:65-73,121-135 (picker and validation), EmulatorActivity.java:1564-1599 (read and loadBios), libgba.so 0x165fbc-0x166070 (bridge), 0x15faf0-0x15fb5c (install), 0x15ec0c-0x15ec60 (replacement); 1.8.0 settings/EmulatorSettings.java:478-486, libgba.so 0x10b680-0x10b76f, 0x10b770-0x10b783, 0x10a1e0-0x10a38d", "system": "nintendo-gba", "validation": ["size"]}, {"bundled": true, "description": "Per game settings database", "name": "rom_config.ini", "note": "Opened from the application assets when a game starts and read as the section named by its four character code. Save type, flash size, mirroring, sprite limit, cpu core and the timing hacks become console options, and the addon key arms the solar, tilt, gyroscope and rumble sensors. Byte identical in 1.8.0 and 2.0.3.", "required": false, "source_ref": "My Boy! 2.0.3 Console.java:108-130, EmulatorActivity.java:642,1132; 1.8.0 Console.java:130-151", "system": "nintendo-gba"}], "mode": "standalone", "notes": "Android package com.fastemulator.gba, closed source, sold on Google Play, reached by\nES-DE through its MY-BOY find rule and started with android.intent.action.VIEW on the\ncontent URI of the game. Two Play distribution builds carrying the developer\ncertificate sha256 942e532dc3a3608a1d04760b8e1b09a2f11c0c8f64ae8bb441f0c8ab1122a7ab\nare read here: 2.0.3 (versionCode 90053, minSdk 21, targetSdk 33, arm64-v8a and\narmeabi-v7a, bundletool v1 signer and the Play source stamp) and 1.8.0 (versionCode\n90048, armeabi and x86). Line numbers below are those of 2.0.3 and native addresses\nare arm64-v8a of the same build; 1.8.0 addresses are its x86 library. Four rebuilt\ncopies were rejected on their certificate: 2.0.9 (CN=APKVISION.ORG), 2.0.8 (C=RU,\nO=A1), 2.0.6 (C=IN) and a second 1.8.0 (O=jojoy.mod).\n\nOne system is emulated, Game Boy Advance, in libgba.so behind a JNI bridge\n(Link.java:21-23,83). Content is a .gba or .bin document, or the first entry with one\nof those extensions in a zip document (g.java:71-78,80-100,113-122,\nEmulatorActivity.java:2001).\n\nThe BIOS is the one file the user supplies. The document picker takes any name from\nany location, and the choice is stored as the persisted URI biosUri\n(settings/EmulatorSettings.java:65-73,121-135). A document is\naccepted only when its reported size is exactly 16384 bytes, or, for an\napplication/zip document, when an entry declares that size; the name is never\nexamined (g.java:66-68,80-100,102-111). One that fails leaves the preference reading\n\"Unrecognized BIOS file.\" at pick time and on every later visit to the screen\n(settings/EmulatorSettings.java:101-108,131-133). At game start the stream is read\nuntil 16384 bytes are in hand and anything shorter raises, which reports \"Load BIOS\nfailed.\" and passes null (EmulatorActivity.java:1564-1599).\n\nThe read happens only while Use BIOS is on, off until the user turns it on; both Boot\nBIOS and the file picker depend on that switch, and the advanced reset returns all\nthree to their defaults (res/xml/settings_advanced.xml,\nsettings/EmulatorSettings.java:79-80).\n\nThe bytes are copied to the head of the emulator's 32 KB BIOS area, offsets 0x2c and\n0x39 are cleared, the remainder is zero filled and a flag byte at the end of the area\nrecords that an image is installed (libgba.so 0x165fbc-0x166070, 0x15faf0-0x15fb5c).\nWith no image that flag is false and the area is filled instead with a 692 byte\nreplacement inflated from a 488 byte deflate stream in .rodata, byte identical between\n1.8.0 and 2.0.3 (0x15ec0c-0x15ec60). Nothing else about the file is examined: no hash\nand no content test exists on either side of the bridge.\n\nTwo features refuse to mix the two modes. A save state made under the other setting\nreturns -5 and reports \"The save file requires using the BIOS file.\"\n(EmulatorActivity.java:909), and a link connection whose peer disagrees returns 3 and\nreports \"BIOS settings do not match!\" (EmulatorActivity.java:768).\n\n1.8.0 reached the same file through a filesystem path. Its own browser filtered on\n.bin, .bios and .zip and wrote the path to biosFile\n(settings/EmulatorSettings.java:478-486, FileBrowserActivity.java:196-211), and the\nnative loader opened it with fopen \"rb\", or walked it as a zip and took the first\nentry, keeping either only when the size callback returned true for exactly 16384\nbytes (0x10b680-0x10b76f, 0x10b770-0x10b783, 0x10a1e0-0x10a38d). That build also\nlooked beside the ROM for a .ips then a .ups image and applied it on load, and wrote\n\"<name> (patched).gba\" from the manual patch entry (Link.java:18,\nMainActivity.java:181-208, 0x10b910). Neither the code nor the strings survive in\n2.0.3.\n\nPer game settings come from rom_config.ini, an asset of the application keyed on the\nfour character game code (Console.java:108-130). Shaders are read from the assets of the\nseparate package com.fastemulator.shaderpack, whose own shaders array names them\n(EmulatorActivity.java:1491, settings/EmulatorSettings.java:420,434-438). Battery\nsaves, states, cheats, screen layouts and key maps are written by the application\nunder its external files directory (w0/d.java:13-43, Console.java:61-68).\n", "profiled_date": "2026-08-12", "source": "https://play.google.com/store/apps/details?id=com.fastemulator.gba", "systems": ["nintendo-gba"], "type": "standalone", "upstream": "closed-source"}


id: my-oldboy
name: My OldBoy!
type: standalone
classification: embedded_hle
source: https://play.google.com/store/apps/details?id=com.fastemulator.gbc
upstream: closed-source
profile_json:
{"author": "Pixel Respawn LLC", "core_classification": "embedded_hle", "core_version": "2.0.0", "cores": ["my-oldboy", "My OldBoy!", "MY-OLDBOY"], "display_name": "Nintendo - Game Boy / Game Boy Color (My OldBoy!)", "emulator": "My OldBoy!", "files": [{"agnostic": true, "config_key": "bootBios", "description": "Game Boy boot ROM", "hle_fallback": true, "name": "gb_bios.bin", "note": "Chosen from any location under any name through the document picker and kept as the persisted URI gbBiosUri, or taken from the first entry of that size in a zip document. A document of another size is refused at pick time with \"Invalid GB/GBC BIOS file.\" and, if it later reports short, the game starts without it. Installed only while the resolved machine is Game Boy.", "required": false, "size": 256, "source_ref": "My OldBoy! 2.0.0 EmulatorActivity.java:1170-1175 (gate and 256 byte read), EmulatorActivity.java:1132-1161 (exact length or null), g.java:105-118 (size test), g.java:83-103 (zip walk and direct open), settings/EmulatorSettings.java:84-98,101-120 (picker and validation), libgbc.so 0x2a268-0x2a364 (bridge), 0x2446c-0x2450c (install under type 1), 0x24550-0x245a8 (reset with or without); 1.5.1 settings/EmulatorSettings.java:142-155,229-238, EmulatorActivity.java:683-684, libgbc.so 0x1f7e8-0x1f8c0, 0x10cc0-0x10d3c, 0x10db8 (size 0x100), 0x13180-0x1335c (file or zip entry)", "system": "nintendo-gb", "validation": ["size"]}, {"agnostic": true, "config_key": "bootBios", "description": "Game Boy Color boot ROM", "hle_fallback": true, "name": "gbc_bios.bin", "note": "Chosen from any location under any name through the document picker and kept as the persisted URI gbcBiosUri, or taken from the first entry of that size in a zip document. A document of another size is refused at pick time with \"Invalid GB/GBC BIOS file.\" and, if it later reports short, the game starts without it. Installed only while the resolved machine is Game Boy Color.", "required": false, "size": 2304, "source_ref": "My OldBoy! 2.0.0 EmulatorActivity.java:1170-1175 (gate and 2304 byte read), EmulatorActivity.java:1132-1161 (exact length or null), g.java:105-114,120-122 (size test), g.java:83-103 (zip walk and direct open), settings/EmulatorSettings.java:84-98,101-120 (picker and validation), libgbc.so 0x2a268-0x2a364 (bridge), 0x24510-0x2453c (install under type 2), 0x24550-0x245a8 (reset with or without); 1.5.1 settings/EmulatorSettings.java:142-155,229-238, EmulatorActivity.java:683-684, libgbc.so 0x1f7e8-0x1f8c0, 0x10d40-0x10d7c, 0x10dc8 (size 0x900), 0x13180-0x1335c (file or zip entry)", "system": "nintendo-gbc", "validation": ["size"]}], "mode": "standalone", "notes": "Android package com.fastemulator.gbc, closed source, sold on Google Play, reached by\nES-DE through its MY-OLDBOY find rule and started with android.intent.action.VIEW on\nthe content URI of the game. Two builds carrying the developer certificate sha256\n942e532dc3a3608a1d04760b8e1b09a2f11c0c8f64ae8bb441f0c8ab1122a7ab are read here: 2.0.0\n(versionCode 90022, minSdk 21, targetSdk 33, arm64-v8a and armeabi-v7a, bundletool v1\nsigner and the Play source stamp) and 1.5.1 (versionCode 90020, minSdk 9, armeabi,\nv1 signature verified entry by entry). Line numbers below are those of 2.0.0 and\nnative addresses are arm64-v8a of the same build; 1.5.1 addresses are its armeabi\nlibrary. 2.0.2 (versionCode 90024) is the current Play build, offered by no mirror\nreached here.\n\nEmulation runs in libgbc.so behind a JNI bridge (Link.java:23,29-97). Content is a\n.gb, .gbc, .cgb or .dmg document, or the first entry with one of those extensions in a\nzip document (g.java:74-81,124-133). A registered .ips or .ups patch is applied to the\nloaded image when autoIPS is on (EmulatorActivity.java:2049-2057, Link.patch).\n\nThe machine is chosen by consoleType2, one of auto, gbc, gb, gba or sgb\n(res/xml/settings_advanced.xml, console_type_entryvalues, EmulatorActivity.java:1168).\nThe native setter maps those names to 0, 2, 1, 0x12 and 0x21 and then resolves them\nagainst the cartridge header: bit 0x80 of byte 0x143 keeps Game Boy Color, otherwise\nbyte 0x146 equal to 3 gives Super Game Boy under auto, and everything else falls to\nGame Boy (libgbc.so 0x29e74-0x29f30, 0x2436c-0x243bc). Super Game Boy allocates its\nown 0x2200 byte state (0x24420-0x24438).\n\nTwo boot ROMs are the files the user supplies, one per machine, and the resolved\nmachine decides which one is installed: type 1 takes the 256 byte image, type 2 takes\nthe 2304 byte image, both into the same area, and any other type clears the flag that\nrecords an image (libgbc.so 0x2446c-0x2454c). Game Boy Advance and Super Game Boy\nmodes therefore run without one. The library carries no image of its own, and on reset\nthe area is passed only when the flag and the reset argument are both set, null\notherwise (0x24550-0x245a8), which is the state the application ships in.\n\nBoth files are read only while Boot BIOS is on, off until the user turns it on, and\nboth pickers declare it as their dependency (res/xml/settings_advanced.xml). A save\nstate made under the other setting returns -5 and reports \"The save file requires\nusing the BIOS file.\" (EmulatorActivity.java:898), and a link connection whose peer\ndisagrees returns 3 and reports \"BIOS settings do not match!\"\n(EmulatorActivity.java:743).\n\nShaders are read from the assets of the separate package com.fastemulator.shaderpack,\nwhose own shaders and shader_names arrays name them, with a store link offered when it\nis absent (EmulatorActivity.java:1513, settings/EmulatorSettings.java:405,419-423).\nBattery saves, real time clock files, states, cheats, screen layouts and key maps are\nwritten by the application under its external files directory (y0/d.java:13-43,\nConsole.java:58). The only file calls left in the library are those saves, the gzipped\nstates and one stat on /data/data/com.fastemulator.gbc.\n", "profiled_date": "2026-08-12", "source": "https://play.google.com/store/apps/details?id=com.fastemulator.gbc", "systems": ["nintendo-gb", "nintendo-gbc", "nintendo-sgb"], "type": "standalone", "upstream": "closed-source"}


id: nekop2
name: nekop2
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-meowPC98
upstream: https://np2.yui.ne.jp (dead; source preserved in libretro repo)
source_commit: 0ba5965247834317fd1026dc19d302677849b9e4
profile_json:
{"core_classification": "community_fork", "core_version": "0.86", "cores": ["nekop2"], "display_name": "NEC - PC-98 (Neko Project II)", "emulator": "nekop2", "files": [{"hle_fallback": true, "name": "bios.rom", "note": "PC-9801 system BIOS ROM (96 KB). The core boots without it using the built-in BIOS simulator, but some software requires the real BIOS.\n", "path": "np2/bios.rom", "required": false, "source_ref": "bios/bios.c:232-235, common/strres.c:53"}, {"name": "bios9821.rom", "note": "PC-9821 extension BIOS ROM (8 KB). For PC-9821 mode support. Mapped at 0xd8000.\n", "path": "np2/bios9821.rom", "required": false, "source_ref": "bios/bios.c:262-266, libretro/compiler.h:169"}, {"aliases": ["FONT.ROM"], "hle_fallback": true, "name": "font.bmp", "note": "PC-98 font bitmap (288 KB). Required for correct Japanese kanji display. Without this, only basic ASCII renders using built-in 8x8 data. FONT.ROM (V98 format) is also accepted.\n", "path": "np2/font.bmp", "required": false, "source_ref": "libretro/libretro.c:862, font/font.c:113, font/fontdata.c:12"}, {"hle_fallback": true, "name": "sound.rom", "note": "FM sound board BIOS ROM (16 KB). The core tries board-specific variants first (sound26.rom, sound86.rom, sound118.rom, soundSPB.rom, sound14.rom) then falls back to sound.rom.\n", "path": "np2/sound.rom", "required": false, "source_ref": "sound/soundrom.c:15-16,21-55,65-78"}, {"name": "2608_bd.wav", "note": "YM2608 OPNA rhythm sample: bass drum", "path": "np2/2608_bd.wav", "required": false, "source_ref": "sound/rhythmc.c:11,60-71"}, {"name": "2608_sd.wav", "note": "YM2608 OPNA rhythm sample: snare drum", "path": "np2/2608_sd.wav", "required": false, "source_ref": "sound/rhythmc.c:12"}, {"name": "2608_top.wav", "note": "YM2608 OPNA rhythm sample: top cymbal", "path": "np2/2608_top.wav", "required": false, "source_ref": "sound/rhythmc.c:13"}, {"name": "2608_hh.wav", "note": "YM2608 OPNA rhythm sample: hi-hat", "path": "np2/2608_hh.wav", "required": false, "source_ref": "sound/rhythmc.c:14"}, {"name": "2608_tom.wav", "note": "YM2608 OPNA rhythm sample: tom", "path": "np2/2608_tom.wav", "required": false, "source_ref": "sound/rhythmc.c:15"}, {"name": "2608_rim.wav", "note": "YM2608 OPNA rhythm sample: rim shot", "path": "np2/2608_rim.wav", "required": false, "source_ref": "sound/rhythmc.c:16"}, {"hle_fallback": true, "name": "scsi.rom", "note": "SCSI controller BIOS ROM (16 KB). The core includes a built-in SCSI BIOS stub as fallback.\n", "path": "np2/scsi.rom", "required": false, "source_ref": "cbus/scsiio.c:208-233"}, {"hle_fallback": true, "name": "sasi.rom", "note": "SASI controller BIOS ROM (4 KB). The core includes a built-in SASI BIOS stub as fallback.\n", "path": "np2/sasi.rom", "required": false, "source_ref": "cbus/sasiio.c:442-465"}], "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-meowPC98", "source_commit": "0ba5965247834317fd1026dc19d302677849b9e4", "systems": ["pc-98"], "type": "libretro", "upstream": "https://np2.yui.ne.jp (dead; source preserved in libretro repo)"}


id: neo-emu
name: NEO.emu
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: https://github.com/pepone42/gngeo
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"core_classification": "community_fork", "core_version": "1.5.85", "cores": ["neo-emu", "NEO.emu", "NEO-EMU"], "display_name": "SNK - Neo Geo (NEO.emu)", "emulator": "NEO.emu", "files": [{"aliases": ["neogeo.7z", "neogeo.rar"], "description": "Neo Geo system ROMs", "load_from": "content_dir", "name": "neogeo.zip", "note": "Opened from the directory holding the content, as .zip then .7z then .rar. A failure to open it ends the load with \"Can't open BIOS archive (neogeo.zip)\" before any content runs. The container is never hashed.", "required": true, "source_ref": "NEO.emu/src/gngeo/roms.c:1202-1211, NEO.emu/src/main/unzip.cc:113-132, NEO.emu/src/main/Main.cc:465-471", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "5a86cff2", "description": "Zoom lookup table", "name": "000-lo.lo", "note": "Read for every game; a miss ends the load.", "required": true, "source_ref": "NEO.emu/src/gngeo/roms.c:1213-1218, NEO.emu/src/gngeo/video.c:757", "system": "snk-neogeo-mvs"}, {"aliases": ["sfix.sfix"], "archive": "neogeo.zip", "crc32": "c2ea0cfd", "description": "Board fix layer tiles", "name": "sfix.sfx", "note": "Read as sfix.sfx then retried as sfix.sfix under the same CRC. Read for every game, the guard that would skip it never being raised, and 0x20000 bytes are converted from the buffer.", "required": true, "size": 131072, "source_ref": "NEO.emu/src/gngeo/roms.c:1220-1235,1419-1423,1432-1436", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "27664eb5", "description": "Universe BIOS 2.3", "name": "uni-bios_2_3.rom", "note": "Default BIOS Type, so the 68K image an untouched install asks for.", "required": true, "source_ref": "NEO.emu/src/gngeo/roms.c:1239-1243, NEO.emu/src/main/system.ccm:74-77, NEO.emu/src/main/EmuMenuViews.cc:129", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "a97c89a9", "description": "Universe BIOS 3.0", "name": "uni-bios_3_0.rom", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1244-1248, NEO.emu/src/main/EmuMenuViews.cc:130", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "0c58093f", "description": "Universe BIOS 3.1", "name": "uni-bios_3_1.rom", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1249-1253, NEO.emu/src/main/EmuMenuViews.cc:131", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "a4e8b9b3", "description": "Universe BIOS 3.2", "name": "uni-bios_3_2.rom", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1254-1258, NEO.emu/src/main/EmuMenuViews.cc:132", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "24858466", "description": "Universe BIOS 3.3", "name": "uni-bios_3_3.rom", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1259-1263, NEO.emu/src/main/EmuMenuViews.cc:133", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "a7aab458", "description": "Universe BIOS 4.0", "name": "uni-bios_4_0.rom", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1264-1268, NEO.emu/src/main/EmuMenuViews.cc:134", "system": "snk-neogeo-mvs"}, {"aliases": ["sp-u2.sp1"], "archive": "neogeo.zip", "crc32": "e72943de", "description": "MVS 68K BIOS, USA", "name": "usa_2slt.bin", "note": "Read when BIOS Type is MVS and MVS Region is USA, the default region. The CRC branch also finds it under the name sp-u2.sp1.", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1279-1282, NEO.emu/src/main/unzip.cc:49-50, NEO.emu/src/main/EmuMenuViews.cc:107", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "f0e8f27d", "description": "MVS 68K BIOS, Japan", "name": "vs-bios.rom", "note": "Read when BIOS Type is MVS and MVS Region is Japan.", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1275-1278, NEO.emu/src/main/EmuMenuViews.cc:105", "system": "snk-neogeo-mvs"}, {"aliases": ["sp-s3.sp1"], "archive": "neogeo.zip", "crc32": "91b64be3", "description": "MVS 68K BIOS, Asia", "name": "asia-s3.rom", "note": "Read when BIOS Type is MVS and MVS Region is Asia. The CRC branch also finds it under the name sp-s3.sp1.", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1283-1286, NEO.emu/src/main/unzip.cc:49-50, NEO.emu/src/main/EmuMenuViews.cc:108", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "crc32": "9036d879", "description": "MVS 68K BIOS, Europe", "name": "sp-s2.sp1", "note": "Read when BIOS Type is MVS and MVS Region is Europe or any other value.", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1287-1291, NEO.emu/src/main/EmuMenuViews.cc:106", "system": "snk-neogeo-mvs"}, {"archive": "neogeo.zip", "description": "AES 68K BIOS", "name": "aes-bios.bin", "note": "Read on the SYS_HOME branch, which no menu entry selects but which a stored BIOS Type of 1 reaches. No CRC is passed for it, so it is found by name alone and cannot be found at all while Strict ROM Checking is on.", "required": false, "source_ref": "NEO.emu/src/gngeo/roms.c:1270-1272, NEO.emu/src/gngeo/emu.h:34-43, NEO.emu/src/main/system.ccm:58,74-77, NEO.emu/src/main/unzip.cc:49-50", "system": "snk-neogeo-aes"}, {"archive": "neogeo.zip", "crc32": "94416d67", "description": "Audio board BIOS", "name": "sm1.sm1", "note": "Named in the audio BIOS region by irrmaze, neogeo, svcboot, svcplus, svcplusa and svcsplus, and reached in this archive by the parent lookup of irrmaze. The region is exempt from the fatal path and the buffer it lands in is never read by the emulation.", "required": false, "size": 131072, "source_ref": "NEO.emu/res/romsets/irrmaze.drv, NEO.emu/src/gngeo/roms.c:1034-1039,1413-1418,1440-1461, NEO.emu/src/gngeo/roms.h:63", "system": "snk-neogeo-mvs"}, {"bundled": true, "category": "game_data", "description": "Romset definitions and CMC key tables", "name": "gngeo_data.zip", "note": "Holds rom/<set>.drv for 240 sets plus rom/cmc42.xor and rom/cmc50.xor. A definition is read before anything else and a miss ends the load with \"This game isn't recognized\". On Android the members are read as assets through the asset manager; elsewhere they are read from this archive at the executable's own directory.", "required": true, "source_ref": "NEO.emu/src/main/Main.cc:64-67,198-206,217-221,321-355, imagine/src/base/linux/ApplicationContext.cc:44-47", "system": "snk-neogeo-mvs"}, {"archive": "gngeo_data.zip", "bundled": true, "category": "game_data", "description": "CMC42 graphics decryption key tables", "name": "cmc42.xor", "note": "Read whole and cut into nine 256-byte tables for the CMC42 sprite descrambler.", "path": "rom/cmc42.xor", "required": true, "size": 2304, "source_ref": "NEO.emu/src/gngeo/neocrypt.c:617-634, NEO.emu/src/main/Main.cc:357-369", "system": "snk-neogeo-mvs"}, {"archive": "gngeo_data.zip", "bundled": true, "category": "game_data", "description": "CMC50 graphics and M1 decryption key tables", "name": "cmc50.xor", "note": "Read whole and cut into eleven 256-byte tables, the last two addressing the M1 descrambler.", "path": "rom/cmc50.xor", "required": true, "size": 2816, "source_ref": "NEO.emu/src/gngeo/neocrypt.c:635-655, NEO.emu/src/main/Main.cc:357-369", "system": "snk-neogeo-mvs"}], "mode": "standalone", "notes": "Member of the EX Emulator series by Robert Broglia, which targets Android and\nLinux (README.md:3,12-13) and keeps iOS and Pandora build shortcuts in the tree\n(NEO.emu/ios.mk, NEO.emu/pandora.mk). Published as com.explusalpha.NeoEmu\n(NEO.emu/metadata/conf.mk:2-7) and reached by ES-DE through its NEO-EMU find\nrule. Gngeo 0.8 by Mathieu Peponas is vendored under NEO.emu/src/gngeo\n(NEO.emu/src/gngeo-config.h:143, NEO.emu/src/main/AppMeta.cc:26) and driven by\nthe app's own video, audio, input and archive layers\n(NEO.emu/src/CMakeLists.txt:9-37). The 68000 is Cyclone on arm and Musashi\nelsewhere, and the Z80 comes from MD.emu's Genesis Plus GX tree\n(NEO.emu/src/CMakeLists.txt:1,22,39-52).\n\nCartridge hardware only: no path in the tree opens a disc image or a Neo Geo CD\nsystem ROM. Content is an archive named after its MAME set, tried as .zip, .7z\nthen .rar (NEO.emu/src/main/unzip.cc:113-132), the set name being the content\nfile name without its dot extension (EmuFramework/src/EmuSystem.cc:81,90). The\napp carries 240 romset definitions and the game list offers 239 of them, neogeo\nbeing the one left out (NEO.emu/src/main/EmuMenuViews.cc:204-445,516-550).\n\nThe BIOS archive is the one thing the user supplies. It is opened as neogeo.zip\nin the directory holding the content, not in a system directory\n(NEO.emu/src/gngeo/roms.c:1202-1211, NEO.emu/src/main/Main.cc:465-471,\nEmuFramework/src/EmuSystem.cc:83). Members are matched on name or on CRC32,\nso an image carrying the expected CRC is taken whatever it is called; turning\non Strict ROM Checking, off by default, drops the name test and leaves CRC32\nalone (NEO.emu/src/main/unzip.cc:49-50, NEO.emu/src/main/Main.cc:316-319,\nNEO.emu/src/main/system.ccm:87). The archive itself is never hashed.\n\nTwo members are read for every game. 000-lo.lo, the zoom table, ends the load\nwith \"000-lo.lo missing or invalid\" when absent (NEO.emu/src/gngeo/roms.c:\n1213-1218). The board fix layer is read as sfix.sfx then sfix.sfix and 0x20000\nbytes of it are converted on the spot (NEO.emu/src/gngeo/roms.c:1220-1235). The\nguard in front of it tests HAS_CUSTOM_SFIX_BIOS, which nothing sets: the only\nsite that would raise it is commented out and definition entries in that region\nare skipped at load (NEO.emu/src/gngeo/roms.c:1419-1423,1432-1436).\n\nOne 68K BIOS is read alongside them, chosen by BIOS Type and MVS Region.\nBIOS Type defaults to Unibios 2.3 and MVS Region to USA\n(NEO.emu/src/main/system.ccm:74-81, NEO.emu/src/main/options.cc:45-46). The\nmenu offers the six Universe BIOS versions and MVS\n(NEO.emu/src/main/EmuMenuViews.cc:127-136); under MVS the region picks\nvs-bios.rom for Japan, usa_2slt.bin for USA, asia-s3.rom for Asia and sp-s2.sp1\nfor Europe and any other value (NEO.emu/src/gngeo/roms.c:1269-1300,\nNEO.emu/src/main/EmuMenuViews.cc:103-116). aes-bios.bin sits on the SYS_HOME\nbranch, which the menu never selects but which a stored BIOS Type of 1 reaches,\nthe validity test accepting every value below SYS_MAX\n(NEO.emu/src/gngeo/roms.c:1271-1272, NEO.emu/src/gngeo/emu.h:34-43,\nNEO.emu/src/main/system.ccm:58,74-77). While a Universe BIOS is selected, its\nown switches are exposed and write the console/arcade bit and the region bits\ninto the memory card (NEO.emu/src/main/EmuMenuViews.cc:559-610,656-658,\nNEO.emu/src/main/Main.cc:254-256).\n\nFive sets bring their own 68K BIOS in the region the definitions call\nMAIN_CPU_BIOS and skip that read from the archive: irrmaze with 236-bios.bin,\nkf2k3pcb with 271-bios.bin, and ms5pcb, svcpcb and svcpcba with sp-4x.sp1\n(NEO.emu/res/romsets/*.drv, NEO.emu/src/gngeo/roms.c:1237,1408-1412). Six sets\nname sm1.sm1 in the audio BIOS region, which is read into a buffer the\nemulation never uses (NEO.emu/src/gngeo/roms.c:1034-1039,1413-1418,\nroms.h:63). Both regions, and the fix layer region, are exempt from the fatal\npath, so a miss there does not end the load\n(NEO.emu/src/gngeo/roms.c:1440-1461).\n\nEvery definition names a parent set whose archive is opened next to the game's\nown, and a parent that cannot be opened is fatal. Four definitions carry the\nno-parent sentinel 0 in that field, so neogeo, ms5pcb, svcpcb and kf2k3pcb end\ntheir load asking for 0.zip (NEO.emu/src/gngeo/roms.c:1364-1371,\nNEO.emu/src/main/unzip.cc:113-132). Upstream ends the same load the same way\n(src/roms.c:1372-1376).\n\nThe romset definitions and the CMC42/CMC50 key tables ship with the app. On\nAndroid they are assets read through the asset manager; elsewhere they are read\nfrom gngeo_data.zip beside the executable (NEO.emu/src/main/Main.cc:64-67,\n198-206,321-369, imagine/src/base/linux/ApplicationContext.cc:44-47). Upstream\nships the same archive with 237 definitions plus a skin/ set for its own SDL\nmenu; the app carries 240, adds bbbuster, ironclad, ironclado and totcarib,\ndrops mslug3n, changes 31 others and keeps no skin, its resource loader being\nreplaced wholesale (NEO.emu/src/main/Main.cc:321-369, src/resfile.c:71-115,\ngngeo.dat/gngeo_data.zip). The two key tables are byte identical to upstream's.\n\nDivergences from gngeo 0.8 in what is read: upstream passes 0 for every member\nCRC, so it verifies nothing and matches on name alone; it knows one Universe\nBIOS under the name uni-bios.rom and falls back to a loose uni-bios.rom beside\nthe archive when the archive lacks it; and it opens the BIOS archive only as\n.zip, under a configured rompath (src/roms.c:1217-1320,1078-1087).\n\nNothing else is read from outside. The per-game gngeo configuration path is\nbuilt and handed to cf_open_file, which is an empty stub, as is\ncf_reset_to_default (NEO.emu/src/gngeo/fileio.c:111-139,\nNEO.emu/src/gngeoTypes.h:44-45). Transparency pack support is unfinished and\nits conf item answers with an empty string (NEO.emu/src/gngeo/roms.c:1097,\nNEO.emu/src/gngeo/fileio.c:149-150, NEO.emu/src/main/Main.cc:448-451). The\n.gno decoded-ROM cache, the .nv and .memcard backup memory, save states and\nNeoEmu.config are written by the app (NEO.emu/src/main/Main.cc:163-184,224-247,\nNEO.emu/src/main/AppMeta.cc:27).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["snk-neogeo-mvs", "snk-neogeo-aes"], "type": "standalone", "upstream": "https://github.com/pepone42/gngeo", "upstream_commit": "ed06739a7202a87cd0992006628e4748aacd1ce5"}


id: neocd
name: NeoCD
type: libretro
classification: pure_libretro
source: https://github.com/libretro/neocd_libretro
upstream: https://github.com/libretro/neocd_libretro
source_commit: 331cb2c4aa3d8490ec83dacf7c3650f13d7c3bf5
profile_json:
{"core_classification": "pure_libretro", "core_version": "2022", "cores": ["neocd"], "display_name": "SNK - Neo Geo CD (NeoCD)", "emulator": "NeoCD", "files": [{"name": "neocd_f.rom", "note": "Front Loader BIOS (big-endian, NeoCD naming)", "path": "neocd/neocd_f.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:59 FRONT_LOADER_SEARCH_PATTERN at 0xC0006C", "system": "snk-neogeo-cd"}, {"name": "front-sp1.bin", "note": "Front Loader BIOS (little-endian, MAME naming)", "path": "neocd/front-sp1.bin", "required": false, "size": 524288, "source_ref": "src/bios.cpp:59 FRONT_LOADER_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap", "system": "snk-neogeo-cd"}, {"name": "neocd_sf.rom", "note": "Front Loader BIOS, SMKDan 0.07b", "path": "neocd/neocd_sf.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:62 SMKDANBETA_FRONT_SEARCH_PATTERN at 0xC00004", "system": "snk-neogeo-cd"}, {"name": "neocd_t.rom", "note": "Top Loader BIOS (big-endian, NeoCD naming)", "path": "neocd/neocd_t.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:60 TOP_LOADER_SEARCH_PATTERN at 0xC0006C", "system": "snk-neogeo-cd"}, {"name": "top-sp1.bin", "note": "Top Loader BIOS (little-endian, MAME naming)", "path": "neocd/top-sp1.bin", "required": false, "size": 524288, "source_ref": "src/bios.cpp:60 TOP_LOADER_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap", "system": "snk-neogeo-cd"}, {"name": "neocd_st.rom", "note": "Top Loader BIOS, SMKDan 0.07b", "path": "neocd/neocd_st.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:63 SMKDANBETA_TOP_SEARCH_PATTERN at 0xC00004", "system": "snk-neogeo-cd"}, {"name": "neocd_z.rom", "note": "CDZ BIOS (big-endian, NeoCD naming)", "path": "neocd/neocd_z.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:61 CDZ_SEARCH_PATTERN at 0xC0006C", "system": "snk-neogeo-cd"}, {"name": "neocd.bin", "note": "CDZ BIOS (little-endian, MAME naming)", "path": "neocd/neocd.bin", "required": false, "size": 524288, "source_ref": "src/bios.cpp:61 CDZ_SEARCH_PATTERN, src/bios.cpp:148-160 autoByteSwap", "system": "snk-neogeo-cd"}, {"name": "neocd_sz.rom", "note": "CDZ BIOS, SMKDan 0.07b", "path": "neocd/neocd_sz.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:64 SMKDANBETA_CDZ_SEARCH_PATTERN at 0xC00004", "system": "snk-neogeo-cd"}, {"name": "uni-bioscd.rom", "note": "Universe BIOS 3.3, CDZ-based third-party multi-region BIOS", "path": "neocd/uni-bioscd.rom", "required": false, "size": 524288, "source_ref": "src/bios.cpp:68 UNIVERSE33_SEARCH_PATTERN at 0xC00150", "system": "snk-neogeo-cd"}], "notes": "Complete rewrite of NeoCD in C++11. Scans {system_dir}/neocd/ for any .rom\nor .bin file, also inside .zip archives (src/libretro_bios.cpp:70-106,\nsrc/path.cpp:6 NEOCD_SYSTEM_SUBDIR = \"neocd\").\n\nBIOS identified by binary pattern matching at fixed ROM addresses, not by\nfilename (src/bios.cpp:167-206). Files are auto byte-swapped if needed\n(src/bios.cpp:148-160). Files smaller than 524288 bytes are skipped\n(src/libretro_bios.cpp:43).\n\nThree hardware families detected: Front Loader, Top Loader, CDZ. Modified\nvariants recognized: SMKDan 0.07, SMKDan 0.07b, Universe BIOS 3.2,\nUniverse BIOS 3.3 (src/bios.h:11-27). Any single valid BIOS is sufficient;\nselection via core options dropdown sorted alphabetically.\n\nY-ZOOM ROM (ng-lo.rom / 000-lo.lo) listed in .info but generated\nalgorithmically, never loaded from file (src/memory.cpp:223-253\ngenerateYZoomData, CRC32 E09E253C). These are phantom .info entries.\n\n.info firmware_count=12 but 2 are phantoms (Y-ZOOM), effective count=10.\n.info lists uni-bioscd.rom as \"Universe BIOS 3.2\" but SHA1 matches\nUniverse BIOS 3.3 (confirmed by GitHub README).\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/neocd_libretro", "source_commit": "331cb2c4aa3d8490ec83dacf7c3650f13d7c3bf5", "systems": ["snk-neogeo-cd"], "type": "libretro", "upstream": "https://github.com/libretro/neocd_libretro"}


id: nes
name: nes
type: libretro
classification: community_fork
source: https://github.com/rz5/nes
upstream: https://git.9front.org/plan9front/plan9front (sys/src/games/nes/)
source_commit: 68dfadea5889da5da7c7e171823c9b3ab24fc892
profile_json:
{"core_classification": "community_fork", "core_version": "1.0", "cores": ["nes"], "display_name": "Nintendo - NES / Famicom (nes)", "emulator": "nes", "files": [], "notes": "Port of aiju's NES emulator from 9front (Plan 9) to libretro by rz5. Minimal emulator supporting mappers 0 (NROM), 1 (MMC1), 2 (UxROM), 3 (CNROM), 4 (MMC3), 7 (AxROM). Palette hardcoded in ppu.c. No BIOS or external files required. NES hardware boots directly from cartridge ROM. No FDS support (only .nes extension).\n", "profiled_date": "2026-03-24", "source": "https://github.com/rz5/nes", "source_commit": "68dfadea5889da5da7c7e171823c9b3ab24fc892", "systems": ["nintendo-nes"], "type": "libretro", "upstream": "https://git.9front.org/plan9front/plan9front (sys/src/games/nes/)"}


id: nes-emu
name: NES.emu
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: https://github.com/TASEmulators/fceux
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"core_classification": "community_fork", "core_version": "1.5.85", "cores": ["nes-emu", "NES.emu", "NES-EMU"], "display_name": "Nintendo - NES / Famicom (NES.emu)", "emulator": "NES.emu", "files": [{"description": "Famicom Disk System BIOS", "name": "disksys.rom", "note": "Read through a path the user sets, so no name is compiled in; the selector accepts any name ending .rom or .bin caselessly, or an archive whose first entry with one of those extensions is used. The size must be exactly 8192 bytes, and a mismatch or an unset path ends the load of any .fds content. The image is never hashed.", "required": true, "size": 8192, "source_ref": "NES.emu/src/main/FceuApi.cc:221-265, NES.emu/src/fceu/fds.cpp:915-926, NES.emu/src/main/EmuMenuViews.cc:609-624, NES.emu/src/main/system.ccm:107", "system": "nintendo-fds", "validation": ["size"]}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Digital Prime (FBX).pal", "path": "palette/Digital Prime (FBX).pal", "required": false, "sha1": "e37da23fa2c644a40fb6c08dd885a96fd65bf4e5", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:311,339, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Smooth V2 (FBX).pal", "path": "palette/Smooth V2 (FBX).pal", "required": false, "sha1": "1e1993f917ec098268a0af15e79b1002bf425e47", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:312,340, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Magnum (FBX).pal", "path": "palette/Magnum (FBX).pal", "required": false, "sha1": "04d7490bb3a284ab266a555c02526f6743756661", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:313,341, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Classic (FBX).pal", "path": "palette/Classic (FBX).pal", "required": false, "sha1": "37027d92e1015b82a7dc5c43e9f1649a961577ab", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:314,342, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Wavebeam.pal", "path": "palette/Wavebeam.pal", "required": false, "sha1": "a33356beefeb0b110464e7d77b3238fc1fb90230", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:315,343, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}, {"bundled": true, "category": "game_data", "description": "Default Palette option, 64 colors", "name": "Five Reality.pal", "path": "palette/Five Reality.pal", "required": false, "sha1": "5008c37920c614e8b471b45ac23118d00162b804", "size": 192, "source_ref": "NES.emu/src/main/EmuMenuViews.cc:318,344, NES.emu/src/main/Main.cc:134-147,159-163", "system": "nintendo-nes"}], "mode": "standalone", "notes": "Member of the EX Emulator series by Robert Broglia, which targets Android and\nLinux (README.md:1,3-4,12-13) and keeps iOS and Pandora build shortcuts in the\ntree (NES.emu/ios.mk, NES.emu/pandora.mk). Published as com.explusalpha.NesEmu\n(NES.emu/metadata/conf.mk:2,4,6,7) and reached by ES-DE through its NES-EMU\nfind rule, which only the Android rule set carries. FCEUX 2.7.0 is vendored\nunder NES.emu/src/fceu (NES.emu/src/fceu/version.h:63-65,\nNES.emu/src/main/AppMeta.cc:26), synced at FCEUX git d339f1f of 2025.11.11 per\nthe app changelog, and driven by the app's own video, audio, input\nand save layers. The Qt and Windows drivers, netplay, PNG snapshots, WAV\nlogging and FCEUX's own config parser are left out of the build\n(NES.emu/src/CMakeLists.txt:8-62), and the file name types for movies,\nsnapshots and on-disk states return an empty string\n(NES.emu/src/main/FceuApi.cc:367-379). Content is read from\n.nes, .unf, .unif, .fds and .nsf files (NES.emu/metadata/conf.mk:5,\nNES.emu/src/main/system.ccm:108-118, NES.emu/src/main/AppMeta.cc:34); an\narchive is opened by the framework, which keeps the first entry passing that\nsame filter (EmuFramework/src/EmuSystem.cc:394-412).\n\nThe Disk System BIOS is the one file the user has to supply, and only for .fds\ncontent. Its location is an option rather than a fixed name\n(NES.emu/src/main/system.ccm:64,143, NES.emu/src/main/options.cc:64-65,112),\nset through a selector that accepts a name ending .rom or .bin caselessly, or\nan archive holding such an entry (NES.emu/src/main/EmuMenuViews.cc:609-624,\nNES.emu/src/main/system.ccm:107, NES.emu/src/main/FceuApi.cc:233-254). The\nimage must measure exactly 8192 bytes; a shorter or longer one is refused as\n\"Incompatible FDS BIOS\" and an unset path as \"No FDS BIOS set\"\n(NES.emu/src/main/FceuApi.cc:227-231,244-248,257-263). Either answer makes the\nloader free the disk data and return an error, so the content never runs\n(NES.emu/src/fceu/fds.cpp:915-926, NES.emu/src/main/Main.cc:317-322). The\nbytes are mapped as PRG bank 0 and are never hashed\n(NES.emu/src/fceu/fds.cpp:916-917).\n\nThe Default Palette option selects FCEUX's built-in table, one of six palettes\nread from the palette directory of the application bundle, or a .pal file the\nuser picks (NES.emu/src/main/EmuMenuViews.cc:311-315,318,336-361,\nNES.emu/src/main/Main.cc:149-175, NES.emu/src/main/options.cc:30). The loader\nreads up to 512 three byte entries, skips a file carrying fewer than 64 colors\nand generates the deemphasis rows for any count other than 512\n(NES.emu/src/main/Main.cc:134-147). Two further palette names are declared and\nnever wired to a menu item or shipped as assets\n(NES.emu/src/main/EmuMenuViews.cc:316-317). A .pal named after the content in\nthe palettes directory overrides the default at load time\n(NES.emu/src/main/FceuApi.cc:365-366, NES.emu/src/fceu/fceu.cpp:522,\nNES.emu/src/fceu/palette.cpp:318-338).\n\nFCEU_MakeFName maps the Game Genie ROM to gg.rom beside the content\n(NES.emu/src/main/FceuApi.cc:361-362), but the only site that opens it sits\nbehind FSettings.GameGenie (NES.emu/src/fceu/cart.cpp:351-368,\nNES.emu/src/fceu/fceu.cpp:509-511). FCEUI_Initialize clears that structure\n(NES.emu/src/fceu/fceu.cpp:601,613) and nothing sets the flag: the app declares\nno option for it (NES.emu/src/main/system.ccm:62-76,\nNES.emu/src/main/options.cc:58-142) and the single call site of\nFCEUI_SetGameGenie passes false (NES.emu/src/fceu/fceu.cpp:513,1218-1219). The\nfile is never read.\n\nPer content the app writes and reads back files named after the ROM: a .sav for\ncartridges wired to a battery (NES.emu/src/fceu/cart.cpp:536-586,\nNES.emu/src/main/Main.cc:98-120), a .fds.sav holding the modified disk\n(NES.emu/src/fceu/fds.cpp:1011-1040), .fcs states\n(NES.emu/src/main/Main.cc:78-96), a .cht cheat list under the cheats path\n(NES.emu/src/fceu/cheat.cpp:200-227,324-343, NES.emu/src/main/Cheats.cc:42-50)\nand NesEmu.config (NES.emu/src/main/AppMeta.cc:27). An .ips named after the\ncontent in the patches path is applied to the image as it loads\n(NES.emu/src/main/Main.cc:312-316). The app declares no bundled content, the\nframework definition defaulting to an empty span\n(EmuFramework/src/AppMeta.cc:40,\nEmuFramework/include/emuframework/AppMeta.hh:66-68).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["nintendo-nes", "nintendo-fds"], "type": "standalone", "upstream": "https://github.com/TASEmulators/fceux", "upstream_commit": "d339f1fa0cd8b69cc637a0de3fb3f04cb28748ea"}


id: nesoid
name: Nesoid
type: standalone
classification: community_fork
source: https://github.com/proninyaroslav/nesoid
upstream: https://sourceforge.net/p/nesoid/code
source_commit: b2ff53fefa56a668aad4a579af85adc672d7a791
profile_json:
{"author": "Yongzh (androidemu.com)", "core_classification": "community_fork", "core_version": "2.5", "cores": ["nesoid", "Nesoid", "NESOID"], "display_name": "Nintendo - NES / Famicom (Nesoid)", "emulator": "Nesoid", "exclusion_note": "Left out are the files the emulator writes and reads back, which are its own state rather than anything a user obtains: sav/<name>.sav for battery backed cartridge RAM, sav/<name>.fds for the modified disk, fcs/<name>.fc<n> states, snaps/ screenshots, movie/<name>.fcm recordings and cheats/<name>.cht, which is reread at load and rewritten at close. The application writes its own set through Java paths: state slots at <content>.ss<n>, an XML cheat list at <content>.cht beside the content, key profiles, PNG screenshots under screenshot/ and the netplay state in its cache directory. The IPS branch is unreachable: FCEUMKF_IPS has no call site, and the only patcher applies a .ips handed in as the content itself, which the activity refuses before the loader runs. The netplay temporary file goes with the netplay code, which the Android build does not compile. The gg.rom name FCEU_MakeFName builds is never opened, the Game Genie image arriving as a path instead. assets/about.html and assets/faq.html are the help screens of the application and carry no emulation data. ref: app/jni/neslib/general.c:196-213,222-238, app/jni/neslib/cart.c:641-700,\n     app/jni/neslib/fds.c:845-870,915-930, app/jni/neslib/cheat.c:183-208,\n     272-300, app/jni/neslib/fce.c:1080,1145-1177,1206,1213,\n     EmulatorActivity.java:949-957,1258-1293, Cheats.java:37-46,\n     StateSlotsActivity.java:39-45,135-140,\n     KeyProfilesActivity.java:47-60,92-100, app/jni/neslib/Android.mk:193-197,\n     HelpActivity.java:14-22, MainActivity.java:20,\n     EmulatorSettingsFragment.java:30-31\n", "files": [{"config_key": "fdsRom", "description": "Famicom Disk System BIOS", "min_size": 8192, "name": "disksys.rom", "note": "Read as 8192 bytes into the 8 KB array mapped over 0xE000 to 0xFFFF. A failed open or a short read frees the disk data and ends the load, so no .fds content runs; both messages are discarded and the application reports only that the ROM failed to load. Nothing else about the image is examined, so a longer file passes on its first 8192 bytes and no hash is compared. The open is a plain fopen, so neither a zipped nor a gzipped copy answers. Yongzh's builds take the path from the fdsRom setting, whose picker lists names ending .nes, .rom or .bin; the builds made from the published sources ignore that setting and resolve the compiled name under a base directory that is never set, which puts it at the root of the filesystem.", "required": true, "source_ref": "app/jni/neslib/fds.c:808-843 (open, read, failure), app/jni/neslib/fds.c:76,146,160 (array and mapping), app/jni/neslib/general.c:46,52-56,215 (name and empty base directory), app/jni/neslib/drivers/android/file.c:3-6 (plain fopen); Nesoid 2.5.0 libnes.so 0x455a4-0x45694 (setOption fdsRom), 0x8804-0x8848 (setter), 0x8094-0x80ac (FCEUMKF_FDSROM returns the set path), Nesoid 2.5.0 EmulatorActivity.java:834", "system": "nintendo-fds", "validation": ["size"]}, {"config_key": "gameGenieRom", "description": "Game Genie add-on cartridge ROM", "min_size": 4352, "name": "gg.rom", "note": "Read only while the Enable Game Genie switch is on and a path is set, through a picker listing names ending .nes, .rom or .bin. The first 16 bytes decide the format: a leading 0x4E is taken as an iNES image, from which 4096 bytes of program ROM are read, then 256 bytes of character ROM 16 KB further in, so such a file needs at least 16656 bytes; anything else is read as a raw 4352 byte image. A failed open or a short read leaves the Game Genie off and the content still runs. No hash is compared.", "required": false, "source_ref": "app/jni/neslib/cart.c:475-521 (open and format branch), app/jni/neslib/svga.c:132-140 (setter), app/jni/neslib/drivers/android/nesengine.cpp:242-243, app/jni/neslib/fce.c:1201-1203 (call site), EmulatorActivity.java:870-874, EmulatorSettingsFragment.java:179-193 (picker)", "system": "nintendo-nes", "validation": ["size"]}, {"category": "game_data", "description": "colour palette for one title", "name": "<game>.pal", "note": "Opened as pal/<name>.pal under the base directory when content loads, with the name taken from the content. 192 bytes are read as 64 RGB triples and replace the built-in table, without checking how many arrived, so a shorter file leaves the remaining entries unset; a missing file changes nothing. The base directory is never set on Android, so the name resolves at the root of the filesystem.", "required": false, "source_ref": "app/jni/neslib/palette.c:205-224, app/jni/neslib/general.c:216-221, app/jni/neslib/fce.c:1212", "system": "nintendo-nes", "unsourceable": "any 64 colour palette the user picks for one title"}], "mode": "standalone", "notes": "Android package com.androidemu.nes, launched on the path of the content with\nandroid.intent.action.VIEW; the activity declares the file scheme with the\napplication/zip and application/octet-stream types\n(app/src/main/AndroidManifest.xml:59-71). Two build families answer to that\npackage id. Yongzh's own closed builds come first, and 2.3 (versionCode 56)\nand 2.5.0 (versionCode 62) are read here, both carrying his certificate sha256\n744b1df1b3610d58e447d243521a0957cc5f4ebd50b12d2816a92396d1aa32f2 (C=CN,\nO=androidemu.com, freeman.yong@gmail.com). He later published the sources; the\nSourceForge project carried them on and Yaroslav Pronin forked that tree to\nGitHub, where release 2.5-4 (versionName 2.5, versionCode 61, armeabi-v7a,\ncertificate O=Free Software CN=Yaroslav Pronin) is the build ES-DE names. The\nSourceForge community rebuild of the same tree (com.androidemu.nes_61.apk,\ncertificate O=Alcatraz CN=Birdman) was read beside it. Line numbers are the\nfork's, native addresses are the armeabi library of Yongzh's 2.5.0, and the\nSourceForge tree carries general.c and fds.c byte identical to the fork.\n\nThe emulation core is neslib, FCE Ultra 0.98 reached through the GP2X port\nGPFCE, whose driver and blitters still sit in the tree unbuilt\n(app/jni/neslib/drivers/gp2x/, giz_blit.s). The Android build compiles the\nmapper, board and input sets with its own four file driver\n(app/jni/neslib/Android.mk:12-197), leaves netplay out of the library and\nruns it from Java instead (app/jni/neslib/fce.c:1081,1206,\napp/jni/neslib/drivers/android/netplay.c:1,28), and reduces\nFCEUD_PrintError and FCEUD_Message to empty bodies, so every message the core\nraises is discarded (app/jni/neslib/drivers/android/debug.c:4-11).\n\nThe activity accepts a name ending .nes, .fds or .zip caselessly and refuses\nanything else before the loader runs (EmulatorActivity.java:933-957,\napp/src/main/res/values/arrays.xml:4-8). An archive is opened by the core,\nwhich keeps the first entry ending .nes, .fds, .nsf, .unf, .nez or .unif, and\na plain file also opens gzipped (app/jni/neslib/file.c:192-232,250-273).\nFCEUI_LoadGame then tries the iNES, NSF, FDS and UNIF loaders in that order on\nthe bytes themselves (app/jni/neslib/fce.c:1180-1187).\n\nThe Disk System BIOS is the file the user has to supply. FDSLoad asks\nFCEU_MakeFName for it, opens it with a plain fopen and reads 8192 bytes into\nthe array mapped over 0xE000 to 0xFFFF (app/jni/neslib/fds.c:76,146,160,\n808-843, app/jni/neslib/drivers/android/file.c:3-6). Where that name resolves\nis the one place the two build families differ. Yongzh's builds carry a\nsetOption entry fdsRom that duplicates the path the settings screen holds and\nreturn it from FCEU_MakeFName when set (libnes.so setOption 0x455a4-0x45694,\nsetter 0x8804-0x8848, FCEUMKF_FDSROM case 0x8094-0x80ac,\nNesoid 2.5.0 EmulatorActivity.java:834). The published sources carry neither\nthe option nor that branch, so only the fallback remains: FCEUMKF_FDSROM\nformats disksys.rom under the base directory, and nothing on Android ever\ncalls FCEUI_SetBaseDirectory, which leaves that buffer empty\n(app/jni/neslib/general.c:46,52-56,215). The settings screen still writes the\nfdsRom preference and still shows the chosen path, but no code reads it back\n(EmulatorSettingsFragment.java:96-99,150-156,195-210,\napp/src/main/res/xml/preferences.xml:240-251). Disk switching went the same\nway: the menu asks the engine for fdsTotalSides and fdsCurrentDisk, which\nYongzh's builds answer and the fork's does not, the base class returning zero\nfor any name (EmulatorActivity.java:417,969,1244-1249,\napp/jni/common/emuengine.h:49).\n\nThe Game Genie ROM is a second path the user picks, kept across both families.\nloadGameGenie passes it to the engine only while the Enable Game Genie switch\nis on, the setter duplicates it into FSettings.GameGenie and OpenGenie reads it\nonce the content has loaded (EmulatorActivity.java:870-874,\napp/jni/neslib/drivers/android/nesengine.cpp:242-243,\napp/jni/neslib/svga.c:132-140, app/jni/neslib/fce.c:1201-1203). Both pickers\nlist names ending .nes, .rom or .bin\n(EmulatorSettingsFragment.java:179-210, FileChooser.java:157-172).\n\nA palette named after the content is read from the pal directory of the same\nunset base directory as the disk BIOS, 192 bytes taken as 64 RGB triples; a\nmissing file leaves the built-in table in place\n(app/jni/neslib/palette.c:205-224, app/jni/neslib/general.c:216-221,\napp/jni/neslib/fce.c:1212).\n\nPer content the emulator writes and reads back its own files, all under that\nsame base directory: sav/<name>.sav for battery backed cartridge RAM\n(app/jni/neslib/cart.c:641-700), sav/<name>.fds for the modified disk\n(app/jni/neslib/fds.c:845-870,915-930), fcs/<name>.fc<n> states,\nsnaps/ screenshots and movie/<name>.fcm recordings\n(app/jni/neslib/general.c:134-195,222-238), and cheats/<name>.cht, which\nFCEU_LoadGameCheats reads at load and FCEU_FlushGameCheats rewrites at close\n(app/jni/neslib/cheat.c:183-208,272-300, app/jni/neslib/fce.c:1080,1213).\nThe application writes its own files through Java paths instead: state slots\nat <content>.ss<n> beside the content (StateSlotsActivity.java:39-45,135-140),\nan XML cheat list at <content>.cht, also beside the content\n(Cheats.java:37-46,105-160), key profiles under its data directory\n(KeyProfilesActivity.java:47-60,92-100), PNG screenshots under screenshot/ on\nexternal storage (EmulatorActivity.java:1258-1281) and a netplay state\nexchanged through its cache directory (EmulatorActivity.java:1292-1293).\n", "profiled_date": "2026-08-12", "source": "https://github.com/proninyaroslav/nesoid", "source_commit": "b2ff53fefa56a668aad4a579af85adc672d7a791", "systems": ["nintendo-nes", "nintendo-fds"], "type": "standalone", "upstream": "https://sourceforge.net/p/nesoid/code"}


id: nestopia
name: Nestopia UE
type: libretro
classification: community_fork
source: https://github.com/libretro/nestopia
upstream: https://gitlab.com/jgemu/nestopia
source_commit: d0f461cee801c509748606e91c8ff0563ef62cd6
profile_json:
{"core_classification": "community_fork", "core_version": "1.53.1", "cores": ["nestopia"], "display_name": "Nintendo - NES / Famicom (Nestopia)", "emulator": "Nestopia UE", "files": [{"description": "FDS BIOS ROM", "md5": "ca30b50f880eb660a320674ed365ef7a", "name": "disksys.rom", "note": "Mapped at 0xE000-0xFFFF (8 KB). retro_load_game returns false if missing when loading .fds files. CRC32 checked: Famicom 0x5E607DCF, Twin Famicom 0x4DF24A6C.", "required": true, "sha1": "57fe1bdee955bb48d357e463ccbf129496930b62", "size": 8192, "source_ref": "libretro/libretro.cpp:1730-1758 (FDS load), source/core/NstFds.cpp:61-131 (Bios class, CRC32 validation)", "system": "nintendo-fds", "validation": ["crc32"]}, {"description": "Nestopia game database for region and mapper autodetection", "hle_fallback": true, "name": "NstDatabase.xml", "note": "XML database matching games by SHA1+CRC32. Used for region, mapper, mirroring, and 4-player adapter detection. Built-in fallback exists so this file is optional.", "required": false, "source_ref": "libretro/libretro.cpp:1682-1712 (database load), libretro/nstdatabase.hpp (baked-in fallback)", "system": "nintendo-nes"}, {"description": "External NES color palette", "hle_fallback": true, "name": "custom.pal", "note": "64 RGB triplets (64 x 3 bytes = 192 bytes). Loaded unconditionally at startup; applied only when nestopia_palette core option is set to Custom. Falls back to built-in Royaltea palette. Multiple valid palettes exist so no canonical hash.", "required": false, "size": 192, "source_ref": "libretro/libretro.cpp:1660-1681 (palette load)", "system": "nintendo-nes"}, {"category": "game_data", "description": "Moero Pro Yakyuu audio samples (16 .wav files, 00.wav-15.wav)", "name": "nestopia/samples/moepro/", "required": false, "source_ref": "libretro/libretro.cpp:196-242 (load_wav), libretro/libretro.cpp:302 (LOAD_SAMPLE_MOERO_PRO_YAKYUU callback), source/core/NstSoundPlayer.hpp:53 (16 samples)", "system": "nintendo-nes"}, {"category": "game_data", "description": "Moero Pro Yakyuu '88 audio samples (20 .wav files, 00.wav-19.wav)", "name": "nestopia/samples/moepro88/", "required": false, "source_ref": "libretro/libretro.cpp:196-242 (load_wav), libretro/libretro.cpp:304 (LOAD_SAMPLE_MOERO_PRO_YAKYUU_88 callback), source/core/NstSoundPlayer.hpp:54 (20 samples)", "system": "nintendo-nes"}, {"category": "game_data", "description": "Moero Pro Tennis audio samples (19 .wav files, 00.wav-18.wav)", "name": "nestopia/samples/mptennis/", "required": false, "source_ref": "libretro/libretro.cpp:196-242 (load_wav), libretro/libretro.cpp:306 (LOAD_SAMPLE_MOERO_PRO_TENNIS callback), source/core/NstSoundPlayer.hpp:55 (19 samples)", "system": "nintendo-nes"}, {"category": "game_data", "description": "Terao no Dosukoi Oozumou audio samples (6 .wav files, 00.wav-05.wav)", "name": "nestopia/samples/terao/", "required": false, "source_ref": "libretro/libretro.cpp:196-242 (load_wav), libretro/libretro.cpp:308 (LOAD_SAMPLE_TERAO_NO_DOSUKOI_OOZUMOU callback), source/core/NstSoundPlayer.hpp:56 (6 samples)", "system": "nintendo-nes"}, {"category": "game_data", "description": "Aerobics Studio audio samples (8 .wav files, 00.wav-07.wav)", "name": "nestopia/samples/ftaerobi/", "required": false, "source_ref": "libretro/libretro.cpp:196-242 (load_wav), libretro/libretro.cpp:310 (LOAD_SAMPLE_AEROBICS_STUDIO callback), source/core/NstSoundPlayer.hpp:57 (8 samples)", "system": "nintendo-nes"}], "logo": "https://raw.githubusercontent.com/0ldsk00l/nestopia/master/icons/svg/nestopia.svg", "notes": "Nestopia UE is a cycle-accurate NES/Famicom emulator. The libretro port\ntracks the upstream Nestopia JG project. NES cartridge games need no BIOS.\nFamicom Disk System games require disksys.rom (8 KB FDS BIOS) in the\nsystem directory. The core validates the BIOS via CRC32 against two known\ndumps: standard Famicom (0x5E607DCF) and Twin Famicom (0x4DF24A6C). An\nunknown BIOS triggers a warning but still loads.\n\nNstDatabase.xml is an optional game database for region autodetection,\nmapper selection, and 4-player adapter recognition. A copy is baked into\nthe core binary (libretro/nstdatabase.hpp) as fallback. The upstream\nNestopia JG requires this file; the libretro port makes it optional.\n\nAn optional custom palette file (custom.pal, 64 RGB triplets) overrides\nbuilt-in palettes when the nestopia_palette core option is set to Custom.\nThe libretro port embeds all named palettes (Royaltea, Smooth FBx, etc.)\nthat the upstream loads from external .pal files.\n\nFive Famicom games use external ADPCM audio samples placed in\nsystem/nestopia/samples/{game}/ as numbered .wav files. These originate\nfrom MAME sample ZIPs. Games function without them but miss some audio.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/nestopia", "source_commit": "d0f461cee801c509748606e91c8ff0563ef62cd6", "systems": ["nintendo-nes", "nintendo-fds"], "type": "libretro", "upstream": "https://gitlab.com/jgemu/nestopia"}


id: nethersx2
name: NetherSX2
type: standalone
classification: community_fork
source: https://github.com/Trixarian/NetherSX2-patch
upstream: https://github.com/Trixarian/AetherSX2
source_commit: 75fc270d50b8c1ba81daf874635471b8d07be09e
profile_json:
{"author": "Trixarian", "bios_directory": "bios/", "bios_mode": "agnostic", "core_classification": "community_fork", "core_version": "2.1-4248", "cores": ["nethersx2", "NetherSX2", "NETHERSX2"], "display_name": "Sony - PlayStation 2 (NetherSX2)", "emulator": "NetherSX2", "exclusion_note": "Left out are the assets the package carries that no code path on this platform opens. game_controller_db.txt is the largest of them: the desktop AetherSX2 hands it to SDL, the Android library links no SDL at all and takes pad input through handleControllerButtonEvent and handleControllerAxisEvent, and the name appears in neither the library nor the dex of the 3668 and 4248 packages, stock or patched. The same holds for the seven Direct3D shader sources under shaders/dx11, for icons/AppIconLarge.png and cover-placeholder.png, for fonts/Roboto-Regular-copyright and sounds/achievements/README.txt, which are licence and credit texts, and for dexopt/baseline.prof and baseline.profm, which the Android runtime consumes rather than the application. Also left out is everything the emulator produces for itself under the data directory: memory cards as Mcd<nnn>.ps2, DEV9hdd.raw for the internal disk, save states, screenshots, covers, texture dumps, logs, per-game settings, input profiles and the gamedb and pipeline caches. The two branches the patch turns into plain branches sit behind certificate comparisons and touch no file. ref: nethersx2 v2.1-4248 libemucore.so 0x7ea914-0x7eaa8c,\n     nethersx2 v2.1-4248 libemucore.so 0x838560,\n     nethersx2 v2.1-4248 libemucore.so 0x83b324,\n     decomp/Hackify.bat:25-26\n", "files": [{"description": "PS2 BIOS image", "max_size": 8388608, "min_size": 4194304, "name": "ps2-0230a-20080220.bin", "note": "Any image whose romdir holds RESET and a readable 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. The sixth ROMVER character is not examined here, the patch having replaced the test that rejected images carrying D.", "path": "bios/ps2-0230a-20080220.bin", "required": true, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, nethersx2 v2.1-4248 libemucore.so 0x828d80-0x828f10, nethersx2 v2.1-4248 libemucore.so 0x829244-0x829248", "validation": ["size"]}, {"description": "DVD player ROM", "max_size": 4194304, "name": "ps2-0230a-20080220.rom1", "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.", "path": "bios/ps2-0230a-20080220.rom1", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2 v2.1-4248 libemucore.so 0x8288b0-0x828a24"}, {"aliases": ["SCPH-90006_BIOS_VX_HK _230.ROM2"], "description": "Chinese ROM extension", "max_size": 524288, "name": "ps2-0230a-20080220.rom2", "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.", "path": "bios/ps2-0230a-20080220.rom2", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2 v2.1-4248 libemucore.so 0x828a34-0x828b90"}, {"description": "Console NVRAM", "hle_fallback": true, "min_size": 1024, "name": "ps2-0230a-20080220.nvm", "note": "Read at the BIOS path with the extension replaced by nvm, opened r+b. 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, and it is rewritten when the language block reads back blank.", "path": "bios/ps2-0230a-20080220.nvm", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:158-214, nethersx2 v2.1-4248 libemucore.so 0x79b930-0x79bb90, nethersx2 v2.1-4248 libemucore.so 0x79bce0", "validation": ["size"]}, {"description": "Mechacon version", "hle_fallback": true, "min_size": 4, "name": "ps2-0230a-20080220.mec", "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.", "path": "bios/ps2-0230a-20080220.mec", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, nethersx2 v2.1-4248 libemucore.so 0x79cbc0-0x79cdc4", "validation": ["size"]}, {"description": "DEV9 EEPROM", "hle_fallback": true, "name": "eeprom.dat", "note": "Opened O_RDWR by bare name 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.", "required": false, "size": 64, "source_ref": "aethersx2/pcsx2/DEV9/DEV9.cpp:146-161, nethersx2 v2.1-4248 libemucore.so 0x7c5c40-0x7c5ca0"}, {"description": "DEV9 SmartMedia flash image", "hle_fallback": true, "max_size": 8650752, "name": "flash.dat", "note": "Opened rb by bare name 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.", "required": false, "source_ref": "aethersx2/pcsx2/DEV9/flash.cpp:76-104, nethersx2 v2.1-4248 libemucore.so 0x7c5bec-0x7c5c40"}, {"description": "IOP module injected at boot", "name": "<module>.irx", "note": "Opened at the path the configuration holds once it is longer than three characters, and read into the ROM region at 0x3C0000, capped at 0x40000 bytes. The field is empty by default and names no file of its own.", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:220-233, aethersx2/pcsx2/ps2/BiosTools.cpp:327-328, nethersx2 v2.1-4248 libemucore.so 0x828bc0-0x828ca0", "unsourceable": "any IOP module the user points at, under no name the code expects"}, {"bundled": true, "description": "Game database", "md5": "a083d432bdcbc3282e51798f8e231a68", "name": "GameIndex.yaml", "note": "Read from the package by name, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder. The project maintains its own copy with entries specific to this build.", "path": "assets/GameIndex.yaml", "required": false, "sha1": "997fdfb1c1873c1a43972b2984ac0da61fd47b14", "size": 1839281, "source_ref": "aethersx2/pcsx2/GameDatabase.cpp:35, aethersx2/pcsx2/GameDatabase.cpp:226, nethersx2 v2.1-4248 libemucore.so 0x2e35ec"}, {"bundled": true, "description": "Widescreen patch archive", "md5": "d9460e9df9ac219b1eb946c76f80ee0f", "name": "cheats_ws.zip", "note": "Per-game pnach entries matched on the disc CRC, read from the package when widescreen patches are enabled. The cheats_ws folder under the data directory takes precedence and the archive is skipped when it holds a match.", "path": "assets/cheats_ws.zip", "required": false, "sha1": "f0d9c66e4793a014cf431ed20e87056e2a96b68e", "size": 1688377, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x80f8bc-0x80f9a8"}, {"bundled": true, "description": "No-interlacing patch archive", "md5": "70a2f8043f2c1be6c84ecac87157a57b", "name": "cheats_ni.zip", "note": "Same form as cheats_ws.zip, read when no-interlacing patches are enabled, with the cheats_ni folder taking precedence.", "path": "assets/cheats_ni.zip", "required": false, "sha1": "0b219dc8b3b98c1705b14758bb7950064b928ebb", "size": 221493, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x80fa54-0x80facc"}, {"bundled": true, "description": "Interface font", "md5": "86da78cb59576328483a11c6ef74bc2b", "name": "Roboto-Regular.ttf", "note": "Read as the standard font when the interface comes up. The load fails without it.", "path": "assets/fonts/Roboto-Regular.ttf", "required": true, "sha1": "00d62fbdc8d5dec4c659005e116d0ba2ee63b547", "size": 305608, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x7dc87c-0x7dc88c"}, {"bundled": true, "description": "Fixed-width interface font", "md5": "8ad82b1dc550319993a7d6c932b2656d", "name": "RobotoMono-Medium.ttf", "note": "Read for the fixed-width font. The load fails without it.", "path": "assets/fonts/RobotoMono-Medium.ttf", "required": true, "sha1": "9056e59b69c6f1160fdfb92a0773f17f6307f3ad", "size": 86820, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x7dc8d0-0x7dc8e0"}, {"bundled": true, "description": "Font Awesome icon font", "md5": "dffd9504fcb1894620fa41c700172994", "name": "fa-solid-900.ttf", "note": "Read for the interface icon glyphs. The load fails without it.", "path": "assets/fonts/fa-solid-900.ttf", "required": true, "sha1": "694b8a2445ff39de415bf4791845442a7b1b81e5", "size": 204528, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x7dc924-0x7dc934"}, {"bundled": true, "description": "FidelityFX common header", "md5": "2c539b603dcb15dcdcfdc420eda56ced", "name": "ffx_a.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_a.h", "required": false, "sha1": "726370c10154ad092c15c251b98c79185e980c7c", "size": 161481, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x616ba0"}, {"bundled": true, "description": "FidelityFX CAS header", "md5": "f8a3d7f48ae19fc372cd0d5d375d5a8d", "name": "ffx_cas.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_cas.h", "required": false, "sha1": "a1d1a687577f7a607fda35bc88950f57c2129ca5", "size": 63512, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x616bb0"}, {"bundled": true, "description": "FXAA shader source", "md5": "5cdeb2963c1b68c3ffb04a789cc66d6e", "name": "fxaa.fx", "note": "Read by both backends when FXAA is enabled.", "path": "assets/shaders/common/fxaa.fx", "required": false, "sha1": "3ac5f68049ed00d8ff3d2811bd09ef0c036efd0a", "size": 19420, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x6556c8, nethersx2 v2.1-4248 libemucore.so 0x65f020"}, {"bundled": true, "description": "OpenGL shader preamble", "md5": "1dcf4ca0cc95f2f8e11b66c2ffeeaffe", "name": "common_header.glsl", "note": "Prepended to every OpenGL program the renderer builds.", "path": "assets/shaders/opengl/common_header.glsl", "required": false, "sha1": "3f47597187030144498af7a92531e8f205561211", "size": 1863, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64c5d0"}, {"bundled": true, "description": "OpenGL format conversion shader", "md5": "c3db4fcdd142912c0d9a07f3fb40bbbc", "name": "convert.glsl", "path": "assets/shaders/opengl/convert.glsl", "required": false, "sha1": "b2a059787ee297654b27f633e37382e239693a36", "size": 11276, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64cf14"}, {"bundled": true, "description": "OpenGL presentation shader", "md5": "afbb9a89f17ead2d8ce7252c1b44186f", "name": "present.glsl", "path": "assets/shaders/opengl/present.glsl", "required": false, "sha1": "bf2688971a8ef2f2c262c3c2ec579d3dd39793e6", "size": 9458, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64d458"}, {"bundled": true, "description": "OpenGL frame merge shader", "md5": "2c4d70f62928eac933eec932d7bfa0b3", "name": "merge.glsl", "path": "assets/shaders/opengl/merge.glsl", "required": false, "sha1": "d1a3c11a1273e1d6c740e4eacc3159842f206683", "size": 455, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64d758"}, {"bundled": true, "description": "OpenGL deinterlacing shader", "md5": "0e537dd838a7ecd3b687f3f7cc60a7be", "name": "interlace.glsl", "path": "assets/shaders/opengl/interlace.glsl", "required": false, "sha1": "e74e58f530abb4af02c0875c2f04d507e854869e", "size": 6246, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64da84"}, {"bundled": true, "description": "OpenGL brightness and contrast shader", "md5": "3d1e2be521a66cbfc2c5ff32057e7bf4", "name": "shadeboost.glsl", "path": "assets/shaders/opengl/shadeboost.glsl", "required": false, "sha1": "8d8b8966afd2ad840151f7fcb494739041708c89", "size": 1457, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64dc8c"}, {"bundled": true, "description": "OpenGL sharpening shader", "md5": "f8a684763e24557c97e3f5d05935bb3b", "name": "cas.glsl", "path": "assets/shaders/opengl/cas.glsl", "required": false, "sha1": "1a69a0fc522caff98fc3829ebf3f12a6a006a058", "size": 2448, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64ee98"}, {"bundled": true, "description": "OpenGL texture function vertex and geometry shader", "md5": "a97e9616f298bb9041bf9e45ee2ec597", "name": "tfx_vgs.glsl", "path": "assets/shaders/opengl/tfx_vgs.glsl", "required": false, "sha1": "0e9e98f766c9250b465af776d0077f49f797fed2", "size": 5756, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64f1f0"}, {"bundled": true, "description": "OpenGL texture function fragment shader", "md5": "24e39ca8f97a1ee4cbd1e9bf8b8da2fd", "name": "tfx_fs.glsl", "path": "assets/shaders/opengl/tfx_fs.glsl", "required": false, "sha1": "00eb0418e7a25c89aaf7c526922fe45d83243ec5", "size": 26680, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x64f200"}, {"bundled": true, "description": "Vulkan texture function shader", "md5": "f80e78f88892f0b82ad154eee613f537", "name": "tfx.glsl", "path": "assets/shaders/vulkan/tfx.glsl", "required": false, "sha1": "aa06cffa086126bb4972674562a5f5c8dc6082f3", "size": 29540, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65b1b0"}, {"bundled": true, "description": "Vulkan format conversion shader", "md5": "7146002ee907b5242cf184d3d504fcec", "name": "convert.glsl", "path": "assets/shaders/vulkan/convert.glsl", "required": false, "sha1": "b18a236b62e11a85c7ffda6ae60bfb312d6524ef", "size": 9354, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65ca34, nethersx2 v2.1-4248 libemucore.so 0x65f008"}, {"bundled": true, "description": "Vulkan presentation shader", "md5": "72626d625bb963c6cd7074d4dfd0adda", "name": "present.glsl", "path": "assets/shaders/vulkan/present.glsl", "required": false, "sha1": "4871ee00b249b41d16232769e2f661bedd1c83db", "size": 8177, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65d7f0"}, {"bundled": true, "description": "Vulkan frame merge shader", "md5": "b776383d21609db24d5348c381c2c286", "name": "merge.glsl", "path": "assets/shaders/vulkan/merge.glsl", "required": false, "sha1": "b09de39d6459c70ffab28dcb3e3ef879b1648674", "size": 669, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65e84c"}, {"bundled": true, "description": "Vulkan deinterlacing shader", "md5": "bf3caa2532873593218bc4a09e924d4e", "name": "interlace.glsl", "path": "assets/shaders/vulkan/interlace.glsl", "required": false, "sha1": "f8d14d80036f11707c7e94db2a77531d582019dd", "size": 6707, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65e01c"}, {"bundled": true, "description": "Vulkan brightness and contrast shader", "md5": "366b45b6c4e9ed8e6b7454eebcb5d010", "name": "shadeboost.glsl", "path": "assets/shaders/vulkan/shadeboost.glsl", "required": false, "sha1": "26b29f57685d8108cf519c4f1d340d43aacbff6e", "size": 1741, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65f2d4"}, {"bundled": true, "description": "Vulkan sharpening shader", "md5": "56f3cf4de895dd4d32d6c79d564d0c5b", "name": "cas.glsl", "path": "assets/shaders/vulkan/cas.glsl", "required": false, "sha1": "709fd5393188f7cff0fe4230d0e3e8b69a82f5b9", "size": 2624, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x65fa0c"}, {"bundled": true, "description": "Achievement unlock sound", "md5": "4d035ee86f836bfed422a975cf65c9cc", "name": "unlock.wav", "note": "Handed to playSoundAsync, which opens it from the package and plays it through MediaPlayer.", "path": "assets/sounds/achievements/unlock.wav", "required": false, "sha1": "eb488a76217629f620e40287567d7e2b30337680", "size": 87714, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x81cd38"}, {"bundled": true, "description": "Leaderboard submission sound", "md5": "fa6a7030a9f259ee7300dd0bd49f24f3", "name": "lbsubmit.wav", "path": "assets/sounds/achievements/lbsubmit.wav", "required": false, "sha1": "5ad1e110dcf0ffd26405981398892a82e4f3bad1", "size": 82096, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x81d464"}, {"bundled": true, "description": "Achievement notification sound", "md5": "d66b0bccd743bd11eaca55bcaec925da", "name": "message.wav", "path": "assets/sounds/achievements/message.wav", "required": false, "sha1": "c54f04b63ac6f04e0a0944ef260b5497e4494dbd", "size": 15696, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x81bd44"}, {"bundled": true, "description": "Fallback interface texture", "md5": "8f846541ccbf088ee7f8c49c8dcb3a6a", "name": "placeholder.png", "note": "Requested from the texture cache when a notification or a loading screen has no image of its own. The 4248 package names it without carrying one, and the project adds it.", "path": "assets/placeholder.png", "required": false, "sha1": "c36292ab7e16bf5a6cbc4063f638e24872349c45", "size": 2762, "source_ref": "nethersx2 v2.1-4248 libemucore.so 0x7dcbf0, nethersx2 v2.1-4248 libemucore.so 0x7dd560, nethersx2 v2.1-4248 libemucore.so 0x8238dc"}, {"bundled": true, "description": "Game list region flag", "name": "<region>.png", "note": "Loaded as icons/flags/<region>.png with the region string of the entry. Thirty are carried, seven NTSC and twenty-two PAL plus Other, the Polish flag being one the project adds.", "path": "assets/icons/flags/NTSC-U.png", "required": false, "source_ref": "nethersx2 v2.1-4248 classes.dex icons/flags/%s.png"}, {"bundled": true, "description": "Game list compatibility rating icon", "name": "star-<rating>.png", "note": "Loaded as icons/star-<rating>.png for ratings 0 to 5.", "path": "assets/icons/star-0.png", "required": false, "source_ref": "nethersx2 v2.1-4248 classes.dex icons/star-%d.png"}, {"bundled": true, "description": "Help page", "md5": "c2a64e0bcc401da9b0a3c7adf3cff410", "name": "faq.html", "note": "Opened under the android_asset scheme in the built-in browser view.", "path": "assets/faq.html", "required": false, "sha1": "9163d4a3d19b87483f843e4bf3afe236a50a72d2", "size": 14048, "source_ref": "nethersx2 v2.1-4248 classes.dex android_asset faq.html"}, {"bundled": true, "description": "Third party notices page", "md5": "fb4ff036f3e4769aa6daefdc4c5dba57", "name": "3rdparty.html", "note": "Opened under the android_asset scheme in the built-in browser view.", "path": "assets/3rdparty.html", "required": false, "sha1": "7743bf1d7e6e09a02f1b2972aa63bd8a9f26050d", "size": 90296, "source_ref": "nethersx2 v2.1-4248 classes.dex android_asset 3rdparty.html"}], "mode": "standalone", "notes": "PlayStation 2 emulator for Android, package xyz.aethersx2.android, activity\nxyz.aethersx2.android.EmulationActivity. The project is a patcher rather than\na source tree: it rewrites the AetherSX2 application package, replaces its\ndata assets and signs the result with its own key. Two lines are published,\none on the AetherSX2 v1.5-4248 package and one on v1.5-3668, and both name\nthemselves NetherSX2 and keep the same package id. Every statement below was\nread from the shipped arm64 library lib/arm64-v8a/libemucore.so, which is\nstripped, and confirmed against the unpatched AetherSX2 packages the project\ndistributes for its own build step.\nref: decomp/Extract.bat:1, old/scripts/patch-apk.sh:24-33,\n     nethersx2 v2.1-4248 AndroidManifest.xml\n\nThe patch touches three instructions in the 4248 library. Two turn the\ncompare-and-branch that follows a certificate comparison into a plain branch,\nwhich is what lets the package be resigned. The third replaces the test that\ngates BIOS acceptance. Everything reached by the file loading paths is\nbyte for byte the AetherSX2 build, so the file set below is that build's,\nread from the 4248 library rather than carried over from another release.\nref: decomp/Hackify.bat:24-28,\n     nethersx2 v2.1-4248 libemucore.so 0x838560,\n     nethersx2 v2.1-4248 libemucore.so 0x83b324\n\nA BIOS image is required and boot stops without one, the application saying\nit needs a PS2 BIOS in the bios folder of the data directory. The data\ndirectory is getExternalFilesDir(null) with getDataDir() behind it, and the\nfolder names under it come from the Folders section, Bios defaulting to bios.\nA script in the repository moves that root to /storage/emulated/0/NetherSX2\nonce all-files access is granted, and patches out the library check that\nrequires the package name in the path; the published packages do not carry it.\nref: nethersx2 v2.1-4248 libemucore.so 0xf70a9,\n     nethersx2 v2.1-4248 libemucore.so 0x7ea914-0x7eaa8c,\n     xyz/aethersx2/android/NativeLibrary.smali initializeOnce,\n     patches/patch_root_storage.py:14-35, patches/patch_root_storage.py:261-351\n\nDetection is by content. The scan lists the BIOS folder with a * mask, keeps\nfiles between 4194304 and 8388608 bytes, and accepts an image whose romdir\ncarries a RESET entry followed by a readable ROMVER; the fifth ROMVER\ncharacter gives the zone, A for USA, C for China, E for Europe, H for Asia,\nJ for Japan, P for Free, T for T10K and X for Test, any other character\nstanding for itself, and an EXTINFO entry is read along the way. Stock 4248\nalso required\nthe sixth character to differ from D, which turned away development images;\nthe patch forces that result to true, and the 3668 line never carried the\ntest. An image named in the configuration is combined with the BIOS folder and\nopened at that path when it exists, without the size filter and without the\nromdir test. No name and no hash is matched anywhere. The image is read into\nthe 4 MB ROM region and truncated to it, and one shorter than 2465792 bytes\nturns off the OSDSys parameter HLE.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:27-28,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:62-175,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:235-260,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:272-332,\n     nethersx2 v2.1-4248 libemucore.so 0x828d80-0x828f10,\n     nethersx2 v2.1-4248 libemucore.so 0x829020-0x8292c0,\n     nethersx2 v2.1-4248 libemucore.so 0x829244-0x829248\n\nCompanions derive from the selected image. rom1 and rom2 are appended to the\nfull name first, then substituted for the existing extension, so an image at\nps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then\nps2-0230a-20080220.rom1. The nvm and the mec are read at the substituted\nextension only, and both are written with defaults when they are absent or\ntoo short. No erom is loaded on this code line.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:193-218,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:180-214,\n     nethersx2 v2.1-4248 libemucore.so 0x8288b0-0x828b90\n\nThe network adapter opens eeprom.dat and flash.dat by bare name, so they\nresolve against the process working directory, which the application never\nsets. A compiled-in image stands in for the first and a card filled with 0xFF\nfor the second. DEV9hdd.raw is the default name of the empty disk image its\nsettings page writes. An IRX named in the configuration is read into the ROM\nregion at 0x3C0000 at boot; the field is empty by default and names no file of\nits own.\nref: aethersx2/pcsx2/DEV9/DEV9.cpp:146-161,\n     aethersx2/pcsx2/DEV9/flash.cpp:76-104,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,\n     nethersx2 v2.1-4248 libemucore.so 0x7c5bec-0x7c5ca0,\n     nethersx2 v2.1-4248 libemucore.so 0x828bc0-0x828ca0\n\nResources are read out of the package itself. The library has no asset\nmanager of its own and calls back into readPackageFile, readPackageFileToString\nand playSoundAsync, each taking an asset-relative name, so the game database,\nthe patch archives, the interface fonts, the shader sources every backend\ncompiles at startup and the achievement sounds are versioned with the build\nand never looked for on disk. The game list draws its region flags and rating\nstars from the same assets. The project ships its own game database, patch\narchives and help pages, and adds two files the 4248 package does not carry,\nplaceholder.png, which the library names outright, and the Polish flag the\ngame list can ask for.\nref: nethersx2 v2.1-4248 libemucore.so 0x8348d0,\n     nethersx2 v2.1-4248 libemucore.so 0x834bb0,\n     xyz/aethersx2/android/NativeLibrary.smali readPackageFile,\n     xyz/aethersx2/android/NativeLibrary.smali playSoundAsync\n", "profiled_date": "2026-08-12", "source": "https://github.com/Trixarian/NetherSX2-patch", "source_commit": "75fc270d50b8c1ba81daf874635471b8d07be09e", "systems": ["sony-playstation-2"], "type": "standalone", "upstream": "https://github.com/Trixarian/AetherSX2", "upstream_commit": "1d1f795dfc70e38da67724c7298779260f513889"}


id: nethersx2-turnip
name: NetherSX2-Turnip
type: standalone
classification: community_fork
source: https://github.com/nckstwrt/NetherSX2-Turnip
upstream: https://github.com/Trixarian/AetherSX2
source_commit: 3b7cf800ccac4ab5af768aee24b04363bedeb711
profile_json:
{"author": "nckstwrt", "bios_directory": "bios/", "bios_mode": "agnostic", "core_classification": "community_fork", "core_version": "2.2n-4248-Turnip-v0.7", "cores": ["nethersx2-turnip", "NetherSX2-Turnip", "NETHERSX2-TURNIP"], "display_name": "Sony - PlayStation 2 (NetherSX2-Turnip)", "emulator": "NetherSX2-Turnip", "exclusion_note": "Left out are the libraries the package carries for the dynamic linker rather than for its own code. libc.so, libm.so, libdl.so, ld-android.so and libc++_shared.so sit beside the drivers so the namespace built over that directory can satisfy their DT_NEEDED, and no code path names any of them; android_linker_ns.o is a relocatable object nothing can open. libc++.so and libsync.so are named in the fallback and promote arrays but the package carries neither, and the promote call passes RTLD_NOLOAD, which never reads from disk. libnativewindow.so, libsync.so and libz.so, which every driver needs, come from the system through the link to the default namespace. The deps cache the shim would fill under cache/vulkan_deps is unreachable: the functions that build it have no call site and the compiler dropped their strings. Also left out are the assets no code path on this platform opens: shaders/vulkan/New and shaders/vulkan/Old, reference copies for which no path string exists in the library; game_controller_db.txt, whose name appears in neither the library nor the dex, pad input arriving through handleControllerButtonEvent and handleControllerAxisEvent; the seven Direct3D shader sources under shaders/dx11; icons/AppIconLarge.png and cover-placeholder.png; fonts/Roboto-Regular-copyright and sounds/achievements/README.txt, which are licence and credit texts; and dexopt/baseline.prof and baseline.profm, which the Android runtime consumes. Everything the emulator produces for itself under the data directory is out as well: memory cards as Mcd<nnn>.ps2, DEV9hdd.raw for the internal disk, save states, screenshots, covers, texture dumps, per-game settings, input profiles, the gamedb and pipeline caches, and vulkan_shim.log. ref: VulkanShim2/vulkan_shim.cpp:599-729, VulkanShim2/vulkan_shim.cpp:1107-1112,\n     VulkanShim2/vulkan_shim.cpp:1186-1201,\n     nethersx2-turnip v0.7 libvulkad.so\n", "files": [{"description": "PS2 BIOS image", "max_size": 8388608, "min_size": 4194304, "name": "ps2-0230a-20080220.bin", "note": "Any image whose romdir holds RESET and a readable 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.", "path": "bios/ps2-0230a-20080220.bin", "required": true, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, nethersx2-turnip v0.7 libemucore.so 0x828e20-0x828e44 (size window), nethersx2-turnip v0.7 libemucore.so 0x829244-0x829248 (device type result discarded)", "validation": ["size"]}, {"description": "DVD player ROM", "max_size": 4194304, "name": "ps2-0230a-20080220.rom1", "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.", "path": "bios/ps2-0230a-20080220.rom1", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-216, nethersx2-turnip v0.7 libemucore.so 0x8288b0-0x828a24"}, {"aliases": ["SCPH-90006_BIOS_VX_HK _230.ROM2"], "description": "Chinese ROM extension", "max_size": 524288, "name": "ps2-0230a-20080220.rom2", "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.", "path": "bios/ps2-0230a-20080220.rom2", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-216, nethersx2-turnip v0.7 libemucore.so 0x828a34-0x828ba8"}, {"description": "Console NVRAM", "hle_fallback": true, "min_size": 1024, "name": "ps2-0230a-20080220.nvm", "note": "Read at the BIOS path with the extension replaced by nvm, opened r+b. 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.", "path": "bios/ps2-0230a-20080220.nvm", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:158-214, nethersx2-turnip v0.7 libemucore.so 0x79b930-0x79ba68", "validation": ["size"]}, {"description": "Mechacon version", "hle_fallback": true, "min_size": 4, "name": "ps2-0230a-20080220.mec", "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.", "path": "bios/ps2-0230a-20080220.mec", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, nethersx2-turnip v0.7 libemucore.so 0x79cbd0-0x79cc20", "validation": ["size"]}, {"description": "DEV9 EEPROM", "hle_fallback": true, "name": "eeprom.dat", "note": "Opened O_RDWR by bare name 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.", "required": false, "size": 64, "source_ref": "aethersx2/pcsx2/DEV9/DEV9.cpp:146-161, nethersx2-turnip v0.7 libemucore.so 0x7c5c44"}, {"description": "DEV9 SmartMedia flash image", "hle_fallback": true, "max_size": 8650752, "name": "flash.dat", "note": "Opened rb by bare name 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.", "required": false, "source_ref": "aethersx2/pcsx2/DEV9/flash.cpp:76-103, nethersx2-turnip v0.7 libemucore.so 0x7c5bf0"}, {"description": "IOP module injected at boot", "name": "<module>.irx", "note": "Opened at the path the configuration holds once it is longer than three characters, and read into the ROM region at 0x3C0000, capped at 0x40000 bytes. The field is empty by default and names no file of its own.", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:220-233, aethersx2/pcsx2/ps2/BiosTools.cpp:327-328, nethersx2-turnip v0.7 libemucore.so 0x828bb8-0x828ca8", "unsourceable": "any IOP module the user points at, under no name the code expects"}, {"bundled": true, "description": "Vulkan loader shim", "md5": "07a891beadc7c3baf4b98b7358cc6e2c", "name": "libvulkad.so", "note": "Opened as libvulkad.so.1 then libvulkad.so where the stock library names libvulkan.so, and vkCreateInstance is resolved from it. Without it the Vulkan backend does not open and the message names the shim.", "path": "lib/arm64-v8a/libvulkad.so", "required": false, "sha1": "55f845c4ea0262cfdc4882a3caccc6848c4f0a6b", "size": 484528, "source_ref": "VulkanShim2/vulkan_shim.cpp:971-1279 (the constructor that runs on load), nethersx2-turnip v0.7 libemucore.so 0x8b473c-0x8b4768"}, {"bundled": true, "description": "Driver load hook", "md5": "c2a10d75f7a186f78debc79dd2204841", "name": "libhook_impl.so", "note": "Opened into the adrenotools-libvulkan namespace and asked for init_hook_param, which receives the driver directory and driver name. Its hook_android_dlopen_ext is what replaces the vendor driver with the Turnip one, and it reopens itself in each driver namespace it creates.", "path": "lib/arm64-v8a/libhook_impl.so", "required": false, "sha1": "5a86d24c83f4a0867a3526638182c8dc67e0033b", "size": 461856, "source_ref": "VulkanShim2/vulkan_shim.cpp:1145-1163, VulkanShim2/hook_impl.cpp:38-139"}, {"bundled": true, "description": "Namespace interposer", "md5": "3ded83b3f45773199b82bf81c86f8c89", "name": "libmain_hook.so", "note": "Loaded RTLD_GLOBAL into the same namespace before the system Vulkan library, so its android_dlopen_ext and android_load_sphal_library are the ones that library binds to.", "path": "lib/arm64-v8a/libmain_hook.so", "required": false, "sha1": "e2ee6c00247fc05b88afe43237fa4bfa90212c54", "size": 5648, "source_ref": "VulkanShim2/vulkan_shim.cpp:1166-1167, VulkanShim2/main_hook.c:3-8"}, {"bundled": true, "description": "Turnip driver, default branch", "md5": "315f4b037b77dea81ea099e13e94fa11", "name": "libvulkan_freedreno_T28.so", "note": "Chosen when no other branch matches. Loaded by name from the library directory through the hook; a load failure falls back to the vendor driver.", "path": "lib/arm64-v8a/libvulkan_freedreno_T28.so", "required": false, "sha1": "83406408d328d8529ffa2faf7ab878664a5c7a79", "size": 18606849, "source_ref": "VulkanShim2/vulkan_shim.cpp:1014, VulkanShim2/vulkan_shim.cpp:1086-1087, VulkanShim2/hook_impl.cpp:127-135"}, {"bundled": true, "description": "Turnip driver, Adreno 8xx branch", "md5": "7f6dbc9ec12cb53b1802c418cf532f9b", "name": "libvulkan_freedreno_a8xx-turnip-gen8-V31.so", "note": "Chosen when the Adreno model reads non-zero and is not 810. Model 825 also turns off framebuffer fetch.", "path": "lib/arm64-v8a/libvulkan_freedreno_a8xx-turnip-gen8-V31.so", "required": false, "sha1": "2dc32726b7a68ced6a40ea2c6cc60848716907ab", "size": 14509832, "source_ref": "VulkanShim2/vulkan_shim.cpp:1013, VulkanShim2/vulkan_shim.cpp:1041-1058"}, {"bundled": true, "description": "Turnip driver, Adreno 810 branch", "md5": "e90d691859e0ff8f0221f3fb497cca5d", "name": "libvulkan_freedreno_T24.so", "note": "Chosen when the Adreno model reads 810.", "path": "lib/arm64-v8a/libvulkan_freedreno_T24.so", "required": false, "sha1": "d28f7c64a8296a6d1886b348946d01433c10b493", "size": 18003849, "source_ref": "VulkanShim2/vulkan_shim.cpp:1043-1046"}, {"bundled": true, "description": "Turnip driver, Adreno 710 and 720 branch", "md5": "3f1b01295ab08d070bede8122ebd0aea", "name": "libvulkan_freedreno_25.3.0_R6_Gmem.so", "note": "Chosen when the model is unreadable and the GPU name holds 710 or 720, or the platform reads SM6475.", "path": "lib/arm64-v8a/libvulkan_freedreno_25.3.0_R6_Gmem.so", "required": false, "sha1": "2159a5172176f9ee0076370314d2d100de2fe1b1", "size": 12048553, "source_ref": "VulkanShim2/vulkan_shim.cpp:1062-1065"}, {"bundled": true, "description": "Turnip driver, SM8250 and SM7325 branch", "md5": "7af55500464d372a609084fb4698e16d", "name": "libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so", "note": "Chosen when the platform reads SM8250, kona or SM7325.", "path": "lib/arm64-v8a/libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so", "required": false, "sha1": "1abf76c578cb1330e354d5588634b87cef4bc057", "size": 9407968, "source_ref": "VulkanShim2/vulkan_shim.cpp:1030-1037"}, {"bundled": true, "description": "Turnip driver, SM6125 branch", "md5": "5f953080ba9ac858a99f3742c8302055", "name": "libvulkan_freedreno_T19.so", "note": "Chosen when the platform reads SM6125 or trinket.", "path": "lib/arm64-v8a/libvulkan_freedreno_T19.so", "required": false, "sha1": "4dc276dfd5842302c978ce9b2996f961dc6452f1", "size": 11581209, "source_ref": "VulkanShim2/vulkan_shim.cpp:1023-1026"}, {"description": "Turnip driver override", "name": "libvulkan_freedreno.so", "note": "Tested with access before any detection runs. When it exists it becomes the driver and the driver directory becomes /data/local/tmp/, so none of the six packed drivers is consulted.", "path": "data/local/tmp/libvulkan_freedreno.so", "required": false, "source_ref": "VulkanShim2/vulkan_shim.cpp:1012, VulkanShim2/vulkan_shim.cpp:1015-1020", "unsourceable": "any Turnip build the user places at that path"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "eae5ccb3f801b3333ec0e65592ce8a87", "name": "libbase.so", "note": "Opened RTLD_GLOBAL from the library directory only when the namespace approach failed and the shim falls back to patching the global offset table.", "path": "lib/arm64-v8a/libbase.so", "required": false, "sha1": "fecf95a804a7cb57e210f55d5482a56826c8684c", "size": 255352, "source_ref": "VulkanShim2/vulkan_shim.cpp:1186-1201"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "185cd93c21cce12ab4c3bc2430934684", "name": "libcutils.so", "note": "Same fallback list as libbase.so, and a dependency of every packed driver.", "path": "lib/arm64-v8a/libcutils.so", "required": false, "sha1": "63e55bcae5ee690cf6bc7db69a5077c5502e4334", "size": 91200, "source_ref": "VulkanShim2/vulkan_shim.cpp:1186-1201"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "aa5065cca6695aa4b8cfdd3c164f3d28", "name": "libvndksupport.so", "note": "Same fallback list as libbase.so. Its android_load_sphal_library is the call the shim stubs so a vendor load can be redirected.", "path": "lib/arm64-v8a/libvndksupport.so", "required": false, "sha1": "a6f2d8498a2f0a00776dd69c58f012cdbb75a308", "size": 66881, "source_ref": "VulkanShim2/vulkan_shim.cpp:1186-1201, VulkanShim2/vulkan_shim.cpp:742-750"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "71e06a0726aa60b010e066d37021d36a", "name": "libhardware.so", "note": "Same fallback list as libbase.so, and a dependency of every packed driver.", "path": "lib/arm64-v8a/libhardware.so", "required": false, "sha1": "555a6203cd7c23c2b49916d70615e5df7973aa87", "size": 66961, "source_ref": "VulkanShim2/vulkan_shim.cpp:1186-1201"}, {"bundled": true, "description": "Game database", "md5": "26ab10d8de93c9b9806fa7602faa2b62", "name": "GameIndex.yaml", "note": "Read from the package by name, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder.", "path": "assets/GameIndex.yaml", "required": false, "sha1": "fca26d4f7c1fe0abf6534b470da2ee5ad461eba5", "size": 1850565, "source_ref": "aethersx2/pcsx2/GameDatabase.cpp:35, nethersx2-turnip v0.7 libemucore.so 0x2e35e4"}, {"bundled": true, "description": "Widescreen patch archive", "md5": "cc19970629feb0a25b9b95263194f08f", "name": "cheats_ws.zip", "note": "Per-game pnach entries matched on the disc CRC, read from the package when widescreen patches are enabled. The cheats_ws folder under the data directory takes precedence and the archive is skipped when it holds a match.", "path": "assets/cheats_ws.zip", "required": false, "sha1": "1caae7ddf0cbba5f1f6d7404b2309300d913778c", "size": 1694454, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x80f8e4"}, {"bundled": true, "description": "No-interlacing patch archive", "md5": "fb2a43dcea094a19db4f4bcdc4ad32eb", "name": "cheats_ni.zip", "note": "Same form as cheats_ws.zip, read when no-interlacing patches are enabled, with the cheats_ni folder taking precedence.", "path": "assets/cheats_ni.zip", "required": false, "sha1": "31cbff66380f255d359ff9ee09b6edc06102579a", "size": 223122, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x80fa8c"}, {"bundled": true, "description": "Interface font", "md5": "86da78cb59576328483a11c6ef74bc2b", "name": "Roboto-Regular.ttf", "note": "Read as the standard font when the interface comes up. The load fails without it.", "path": "assets/fonts/Roboto-Regular.ttf", "required": true, "sha1": "00d62fbdc8d5dec4c659005e116d0ba2ee63b547", "size": 305608, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xf6f27"}, {"bundled": true, "description": "Fixed-width interface font", "md5": "8ad82b1dc550319993a7d6c932b2656d", "name": "RobotoMono-Medium.ttf", "note": "Read for the fixed-width font. The load fails without it.", "path": "assets/fonts/RobotoMono-Medium.ttf", "required": true, "sha1": "9056e59b69c6f1160fdfb92a0773f17f6307f3ad", "size": 86820, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xdb98d"}, {"bundled": true, "description": "Font Awesome icon font", "md5": "dffd9504fcb1894620fa41c700172994", "name": "fa-solid-900.ttf", "note": "Read for the interface icon glyphs. The load fails without it.", "path": "assets/fonts/fa-solid-900.ttf", "required": true, "sha1": "694b8a2445ff39de415bf4791845442a7b1b81e5", "size": 204528, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x11a567"}, {"bundled": true, "description": "FidelityFX common header", "md5": "2c539b603dcb15dcdcfdc420eda56ced", "name": "ffx_a.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_a.h", "required": false, "sha1": "726370c10154ad092c15c251b98c79185e980c7c", "size": 161481, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x10cfb5"}, {"bundled": true, "description": "FidelityFX CAS header", "md5": "f8a3d7f48ae19fc372cd0d5d375d5a8d", "name": "ffx_cas.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_cas.h", "required": false, "sha1": "a1d1a687577f7a607fda35bc88950f57c2129ca5", "size": 63512, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xce5f7"}, {"bundled": true, "description": "FXAA shader source", "md5": "5cdeb2963c1b68c3ffb04a789cc66d6e", "name": "fxaa.fx", "note": "Read by both backends when FXAA is enabled.", "path": "assets/shaders/common/fxaa.fx", "required": false, "sha1": "3ac5f68049ed00d8ff3d2811bd09ef0c036efd0a", "size": 19420, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xe4f55"}, {"bundled": true, "description": "OpenGL shader preamble", "md5": "1dcf4ca0cc95f2f8e11b66c2ffeeaffe", "name": "common_header.glsl", "note": "Prepended to every OpenGL program the renderer builds.", "path": "assets/shaders/opengl/common_header.glsl", "required": false, "sha1": "3f47597187030144498af7a92531e8f205561211", "size": 1863, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x10cfcc"}, {"bundled": true, "description": "OpenGL format conversion shader", "md5": "c3db4fcdd142912c0d9a07f3fb40bbbc", "name": "convert.glsl", "path": "assets/shaders/opengl/convert.glsl", "required": false, "sha1": "b2a059787ee297654b27f633e37382e239693a36", "size": 11276, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xb5bd7"}, {"bundled": true, "description": "OpenGL presentation shader", "md5": "afbb9a89f17ead2d8ce7252c1b44186f", "name": "present.glsl", "path": "assets/shaders/opengl/present.glsl", "required": false, "sha1": "bf2688971a8ef2f2c262c3c2ec579d3dd39793e6", "size": 9458, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x11a06b"}, {"bundled": true, "description": "OpenGL frame merge shader", "md5": "2c4d70f62928eac933eec932d7bfa0b3", "name": "merge.glsl", "path": "assets/shaders/opengl/merge.glsl", "required": false, "sha1": "d1a3c11a1273e1d6c740e4eacc3159842f206683", "size": 455, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x117b1c"}, {"bundled": true, "description": "OpenGL deinterlacing shader", "md5": "0e537dd838a7ecd3b687f3f7cc60a7be", "name": "interlace.glsl", "path": "assets/shaders/opengl/interlace.glsl", "required": false, "sha1": "e74e58f530abb4af02c0875c2f04d507e854869e", "size": 6246, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x103b11"}, {"bundled": true, "description": "OpenGL brightness and contrast shader", "md5": "3d1e2be521a66cbfc2c5ff32057e7bf4", "name": "shadeboost.glsl", "path": "assets/shaders/opengl/shadeboost.glsl", "required": false, "sha1": "8d8b8966afd2ad840151f7fcb494739041708c89", "size": 1457, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x1007b6"}, {"bundled": true, "description": "OpenGL sharpening shader", "md5": "f8a684763e24557c97e3f5d05935bb3b", "name": "cas.glsl", "path": "assets/shaders/opengl/cas.glsl", "required": false, "sha1": "1a69a0fc522caff98fc3829ebf3f12a6a006a058", "size": 2448, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x10967c"}, {"bundled": true, "description": "OpenGL texture function vertex and geometry shader", "md5": "a97e9616f298bb9041bf9e45ee2ec597", "name": "tfx_vgs.glsl", "path": "assets/shaders/opengl/tfx_vgs.glsl", "required": false, "sha1": "0e9e98f766c9250b465af776d0077f49f797fed2", "size": 5756, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xd49ab"}, {"bundled": true, "description": "OpenGL texture function fragment shader", "md5": "24e39ca8f97a1ee4cbd1e9bf8b8da2fd", "name": "tfx_fs.glsl", "path": "assets/shaders/opengl/tfx_fs.glsl", "required": false, "sha1": "00eb0418e7a25c89aaf7c526922fe45d83243ec5", "size": 26680, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x117b36"}, {"bundled": true, "description": "Vulkan texture function shader", "md5": "df60c4e6c5690dd2d3a0cc740800b284", "name": "tfx.glsl", "note": "This project's own bytes, neither the New nor the Old copy it also carries.", "path": "assets/shaders/vulkan/tfx.glsl", "required": false, "sha1": "1c3a966a42cefcb9c26ce2fa77e4cd90f2d50329", "size": 29670, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xe14fc"}, {"bundled": true, "description": "Vulkan format conversion shader", "md5": "f3aaf5697b069d1eb9be66fc1c932786", "name": "convert.glsl", "note": "This project's own bytes, neither the New nor the Old copy it also carries.", "path": "assets/shaders/vulkan/convert.glsl", "required": false, "sha1": "aedc25c370bf3fe28923dc8359111a098293a503", "size": 9379, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xc3d36"}, {"bundled": true, "description": "Vulkan deinterlacing shader", "md5": "08bc6e44a6d86ccad4b0673b445bd9d8", "name": "interlace.glsl", "note": "This project's own bytes, neither the New nor the Old copy it also carries.", "path": "assets/shaders/vulkan/interlace.glsl", "required": false, "sha1": "5a433c891e071c3885af7a5f7e47fed7e5ec30cf", "size": 7745, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xb86eb"}, {"bundled": true, "description": "Vulkan sharpening shader", "md5": "deb7394a31184990c78c9753a293ff60", "name": "cas.glsl", "note": "The New copy the project also carries, byte for byte.", "path": "assets/shaders/vulkan/cas.glsl", "required": false, "sha1": "005cecf1a5e20b05407d55d0aad22cf81ad66c31", "size": 2637, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xd4a2c"}, {"bundled": true, "description": "Vulkan presentation shader", "md5": "72626d625bb963c6cd7074d4dfd0adda", "name": "present.glsl", "path": "assets/shaders/vulkan/present.glsl", "required": false, "sha1": "4871ee00b249b41d16232769e2f661bedd1c83db", "size": 8177, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xd777a"}, {"bundled": true, "description": "Vulkan frame merge shader", "md5": "b776383d21609db24d5348c381c2c286", "name": "merge.glsl", "path": "assets/shaders/vulkan/merge.glsl", "required": false, "sha1": "b09de39d6459c70ffab28dcb3e3ef879b1648674", "size": 669, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xe8c36"}, {"bundled": true, "description": "Vulkan brightness and contrast shader", "md5": "366b45b6c4e9ed8e6b7454eebcb5d010", "name": "shadeboost.glsl", "path": "assets/shaders/vulkan/shadeboost.glsl", "required": false, "sha1": "26b29f57685d8108cf519c4f1d340d43aacbff6e", "size": 1741, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xde3c2"}, {"bundled": true, "description": "Achievement unlock sound", "md5": "4d035ee86f836bfed422a975cf65c9cc", "name": "unlock.wav", "note": "Handed to playSoundAsync, which opens it from the package and plays it through MediaPlayer.", "path": "assets/sounds/achievements/unlock.wav", "required": false, "sha1": "eb488a76217629f620e40287567d7e2b30337680", "size": 87714, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xceb85"}, {"bundled": true, "description": "Leaderboard submission sound", "md5": "fa6a7030a9f259ee7300dd0bd49f24f3", "name": "lbsubmit.wav", "path": "assets/sounds/achievements/lbsubmit.wav", "required": false, "sha1": "5ad1e110dcf0ffd26405981398892a82e4f3bad1", "size": 82096, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xe1a29"}, {"bundled": true, "description": "Achievement notification sound", "md5": "d66b0bccd743bd11eaca55bcaec925da", "name": "message.wav", "path": "assets/sounds/achievements/message.wav", "required": false, "sha1": "c54f04b63ac6f04e0a0944ef260b5497e4494dbd", "size": 15696, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0xfd47d"}, {"bundled": true, "description": "Fallback interface texture", "md5": "8f846541ccbf088ee7f8c49c8dcb3a6a", "name": "placeholder.png", "note": "Requested from the texture cache when a notification or a loading screen has no image of its own.", "path": "assets/placeholder.png", "required": false, "sha1": "c36292ab7e16bf5a6cbc4063f638e24872349c45", "size": 2762, "source_ref": "nethersx2-turnip v0.7 libemucore.so 0x7dcbf4, nethersx2-turnip v0.7 libemucore.so 0x8238e0"}, {"bundled": true, "description": "Game list region flag", "name": "<region>.png", "note": "Loaded as icons/flags/<region>.png with the region string of the entry. Thirty are carried, seven NTSC and twenty-two PAL plus Other.", "path": "assets/icons/flags/NTSC-U.png", "required": false, "source_ref": "nethersx2-turnip v0.7 classes.dex icons/flags/%s.png"}, {"bundled": true, "description": "Game list compatibility rating icon", "name": "star-<rating>.png", "note": "Loaded as icons/star-<rating>.png for ratings 0 to 5.", "path": "assets/icons/star-0.png", "required": false, "source_ref": "nethersx2-turnip v0.7 classes.dex icons/star-%d.png"}, {"bundled": true, "description": "Help page", "md5": "c2a64e0bcc401da9b0a3c7adf3cff410", "name": "faq.html", "note": "Opened under the android_asset scheme in the built-in browser view.", "path": "assets/faq.html", "required": false, "sha1": "9163d4a3d19b87483f843e4bf3afe236a50a72d2", "size": 14048, "source_ref": "nethersx2-turnip v0.7 classes.dex android_asset faq.html"}, {"bundled": true, "description": "Third party notices page", "md5": "fb4ff036f3e4769aa6daefdc4c5dba57", "name": "3rdparty.html", "note": "Opened under the android_asset scheme in the built-in browser view.", "path": "assets/3rdparty.html", "required": false, "sha1": "7743bf1d7e6e09a02f1b2972aa63bd8a9f26050d", "size": 90296, "source_ref": "nethersx2-turnip v0.7 classes.dex android_asset 3rdparty.html"}], "mode": "standalone", "notes": "PlayStation 2 emulator for Android, package xyz.aethersx2.tturnip, activity\nxyz.aethersx2.android.EmulationActivity. The application id is the only part\nof the package name that changes, which is what lets it sit beside the build\nit derives from. That build is NetherSX2 v2.2n-4248, itself a patch of the\nAetherSX2 v1.5-4248 package, and the library still reports itself as\nNetherSX2 v2.2n-4248 (Patched). The project publishes its shim sources and\nthe libraries it packs; lib/libvulkad.so, lib/libhook_impl.so and\nlib/libmain_hook.so at the pinned revision are byte for byte the ones in the\nv0.7 package, so the sources describe the shipped binaries. Everything below\nwas read from that package: lib/arm64-v8a/libemucore.so, libvulkad.so, the\ndex and the assets.\nref: VulkanShim2/compile2.bat:21-64,\n     nethersx2-turnip v0.7 AndroidManifest.xml,\n     nethersx2-turnip v0.7 libemucore.so 0xe180c\n\nThe patch rewrites twenty places in the 4248 library. Three are the strings\nlibvulkan.so, libvulkan.so.1 and the message naming them, each turned into\nlibvulkad.so, so the Vulkan loader opens the shim instead of the system\ndriver. Twelve turn comparisons into unconditional paths, among them the\nmemchr scan for the twenty-two byte pattern that precedes the certificate\ntest and two byte-wise string comparisons whose result is forced to equal,\nwhich is what lets the package be resigned under a new application id. One\nskips the notification built from the android_warning key. The last four move\nsettings defaults: the renderer enum from 12 to 14, the upscale multiplier\nfallback from 1.0 to 2.0 with the configuration read short-circuited, the\nhardware download mode default, and the warning text that went with it. None\nof them is in a file loading path, so the file set below is that of the\npackage it patches, read from this library rather than carried over.\nref: nethersx2-turnip v0.7 libemucore.so 0x10728e,\n     nethersx2-turnip v0.7 libemucore.so 0x83cebc-0x83cee4,\n     nethersx2-turnip v0.7 libemucore.so 0x83b728,\n     nethersx2-turnip v0.7 libemucore.so 0x83bb3c,\n     nethersx2-turnip v0.7 libemucore.so 0x83cfbc,\n     nethersx2-turnip v0.7 libemucore.so 0x80e910,\n     nethersx2-turnip v0.7 libemucore.so 0x840ff4,\n     nethersx2-turnip v0.7 libemucore.so 0x84130c,\n     nethersx2-turnip v0.7 libemucore.so 0x8421a0\n\nA BIOS image is required and boot stops without one, the application saying\nit needs a PS2 BIOS in the bios folder of the data directory. The data\ndirectory is getExternalFilesDir(null) with getDataDir() behind it, so it\nfollows the application id, and the folder names under it come from the\nFolders section, Bios defaulting to bios.\nref: nethersx2-turnip v0.7 libemucore.so 0xf70a9,\n     nethersx2-turnip v0.7 libemucore.so 0x7ea908-0x7ea930,\n     xyz/aethersx2/android/NativeLibrary getExternalFilesDir\n\nDetection is by content. The scan lists the BIOS folder with a * mask, keeps\nfiles between 4194304 and 8388608 bytes, and accepts an image whose romdir\ncarries a RESET entry followed by a readable ROMVER; the fifth ROMVER\ncharacter gives the zone, A for USA, C for China, E for Europe, H for Asia,\nJ for Japan, P for Free, T for T10K and X for Test, any other character\nstanding for itself. The sixth character is compared against D and the result\ndiscarded, the acceptance flag being set outright, so development images pass.\nAn image named in the configuration is combined with the BIOS folder and\nopened at that path when it exists, without the size filter and without the\nromdir test. No name and no hash is matched anywhere. The image is read into\nthe 4 MB ROM region and truncated to it.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:27-28,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:62-145,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:235-260,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:272-322,\n     nethersx2-turnip v0.7 libemucore.so 0x828d80-0x828f14,\n     nethersx2-turnip v0.7 libemucore.so 0x829140-0x8292f4\n\nCompanions derive from the selected image. rom1 and rom2 are appended to the\nfull name first, then substituted for the existing extension, so an image at\nps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then\nps2-0230a-20080220.rom1. The nvm and the mec are read at the substituted\nextension only, and both are written with defaults when they are absent or\ntoo short. No erom is loaded on this code line.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:193-216,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:158-214,\n     nethersx2-turnip v0.7 libemucore.so 0x8288b0-0x828bb8\n\nThe network adapter opens eeprom.dat and flash.dat by bare name, so they\nresolve against the process working directory, which the application never\nsets. A compiled-in image stands in for the first and a card filled with 0xFF\nfor the second. DEV9hdd.raw is the default name of the empty disk image its\nsettings page writes. An IRX named in the configuration is read into the ROM\nregion at 0x3C0000 at boot; the field is empty by default and names no file\nof its own.\nref: aethersx2/pcsx2/DEV9/DEV9.cpp:146-161,\n     aethersx2/pcsx2/DEV9/flash.cpp:76-103,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,\n     nethersx2-turnip v0.7 libemucore.so 0x7c5bec-0x7c5ca0,\n     nethersx2-turnip v0.7 libemucore.so 0x828bb8-0x828ca8\n\nThe Vulkan path is the reason this build exists. libemucore.so opens\nlibvulkad.so where the stock library opens libvulkan.so, and that shim reads\nthe Adreno model from the kgsl sysfs nodes, picks one of six Turnip drivers\npacked beside it, creates a linker namespace over its own library directory\nand loads libhook_impl.so and libmain_hook.so into it. The system\n/system/lib64/libvulkan.so is then opened inside that namespace with its\nsoname patched, so its own driver load lands in the hook, which opens the\nchosen Turnip driver instead of the vendor ICD. A driver present at\n/data/local/tmp/libvulkan_freedreno.so is tested first and wins over all six.\nWhen the namespace cannot be built the shim falls back to patching the\nsystem library's global offset table, and that path alone loads libbase.so,\nlibcutils.so, libvndksupport.so and libhardware.so from the library\ndirectory. The shim appends to vulkan_shim.log under the files folder of the\ndata directory.\nref: VulkanShim2/vulkan_shim.cpp:43-73,\n     VulkanShim2/vulkan_shim.cpp:1010-1092,\n     VulkanShim2/vulkan_shim.cpp:1099-1171,\n     VulkanShim2/vulkan_shim.cpp:1186-1204,\n     VulkanShim2/hook_impl.cpp:38-139,\n     nethersx2-turnip v0.7 libemucore.so 0x8b473c-0x8b4768\n\nResources are read out of the package itself. The library has no asset\nmanager of its own and calls back into readPackageFile, readPackageFileToString\nand playSoundAsync, each taking an asset-relative name, so the game database,\nthe patch archives, the interface fonts, the shader sources every backend\ncompiles at startup and the achievement sounds are versioned with the build\nand never looked for on disk. The game list draws its region flags and rating\nstars from the same assets. Four of the Vulkan shader sources differ from the\nones the package it patches carries.\nref: nethersx2-turnip v0.7 libemucore.so 0x8348d0,\n     xyz/aethersx2/android/NativeLibrary readPackageFile,\n     xyz/aethersx2/android/NativeLibrary playSoundAsync\n", "profiled_date": "2026-08-12", "source": "https://github.com/nckstwrt/NetherSX2-Turnip", "source_commit": "3b7cf800ccac4ab5af768aee24b04363bedeb711", "systems": ["sony-playstation-2"], "type": "standalone", "upstream": "https://github.com/Trixarian/AetherSX2", "upstream_commit": "1d1f795dfc70e38da67724c7298779260f513889"}


