{
  "count": 459,
  "generated_at": "2026-08-23T11:41:38Z",
  "items": [
    {
      "id": "00_example",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": null,
        "cores": [
          "00_example"
        ],
        "display_name": "Example Core (.info template)",
        "emulator": "00_example",
        "files": [],
        "notes": "Format specification template from libretro-core-info. Documents the .info\nfile format for core authors. No loadable binary, no emulated system.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/libretro-core-info",
        "source_commit": "bd81a0b73b50449c0862b65bd755d87860925f65",
        "systems": [],
        "type": "libretro"
      }
    },
    {
      "id": "2048",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1.0",
        "cores": [
          "2048"
        ],
        "display_name": "2048",
        "emulator": "2048",
        "files": [],
        "notes": "Ground-up C reimplementation of the 2048 puzzle game for libretro. All assets compiled into the binary. No system directory files required.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/libretro-2048",
        "source_commit": "e70c3f82d2b861c64943aaff7fcc29a63013997d",
        "systems": [],
        "type": "game",
        "upstream": "https://github.com/gabrielecirulli/2048"
      }
    },
    {
      "id": "2600-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "2600-emu",
          "2600.emu",
          "2600-EMU"
        ],
        "display_name": "Atari - 2600 (2600.emu)",
        "emulator": "2600.emu",
        "files": [
          {
            "category": "game_data",
            "description": "KidVid Voice Module shared samples, tested for both games",
            "name": "KVSHARED.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:273,299",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Smurfs Save the Day, Harmony Smurf",
            "name": "KVS1.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:244,247-249,272",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Smurfs Save the Day, Handy Smurf",
            "name": "KVS2.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:244,247-249,272",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Smurfs Save the Day, Greedy Smurf",
            "name": "KVS3.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:244,247-249,272",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Berenstain Bears, Big Number Hunt",
            "name": "KVB1.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:245,247-249,272",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Berenstain Bears, Great Letter Roundup",
            "name": "KVB2.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:245,247-249,272",
            "system": "atari-2600"
          },
          {
            "category": "game_data",
            "description": "KidVid tape for Berenstain Bears, Spooky Spelling Bee",
            "name": "KVB3.WAV",
            "required": false,
            "source_ref": "2600.emu/src/stella/emucore/KidVid.cxx:245,247-249,272",
            "system": "atari-2600"
          }
        ],
        "mode": "standalone",
        "notes": "Android and Linux member of the EX Emulator series by Robert Broglia,\npublished as com.explusalpha.A2600Emu (2600.emu/metadata/conf.mk:2,6,7) and\nreached by ES-DE through its 2600-EMU find rule. Stella 7.0 is vendored under\n2600.emu/src/stella (2600.emu/src/stella/common/Version.hxx:21, identical to\nthe upstream 7.0 tag) and driven by the app's own OSystem, FrameBuffer,\nEventHandler and Sound.\n\nThe console needs no ROM of its own. The Supercharger BIOS is the built-in\nourDummyROMCode array, patched at load and copied into the ROM area\n(2600.emu/src/stella/emucore/CartAR.cxx:263-278).\n\nThe build defines EMU_EX_PLATFORM, SOUND_SUPPORT and THUMB_SUPPORT\n(2600.emu/CMakeLists.txt:22); DEBUGGER_SUPPORT and CHEATCODE_SUPPORT are\nabsent, so the cheat database and the debugger are not compiled. PropertiesSet\nis constructed on CompositeKeyValueRepositoryNoop\n(2600.emu/src/stella/emucore/PropsSet.cxx:29-32), so cartridge properties come\nfrom the built-in DefProps table and no properties file is read.\ncheckUserPalette returns false and paletteFile returns an empty node\n(2600.emu/src/OSystemEmuEx.hxx:69-70), which stops PaletteHandler before it\nopens anything (2600.emu/src/stella/common/PaletteHandler.cxx:405-409).\nBezel.cxx and VideoModeHandler are not part of the build.\n\nKidVid needs no menu entry to engage. Both tapes leave the controller columns\nempty in the properties table\n(2600.emu/src/stella/emucore/DefProps.hxx:2339,3420), the default AUTO\nresolves to Type::Unknown (2600.emu/src/stella/emucore/Control.cxx:137-148),\nand that is the condition ControllerDetector requires before running its\nright-port signature test\n(2600.emu/src/stella/emucore/ControllerDetector.cxx:29,90-92,771-780). The\ncontroller is then built for either of the two matching cartridge MD5s\n(2600.emu/src/stella/emucore/Console.cxx:1096-1105,\n2600.emu/src/stella/emucore/KidVid.cxx:37-42). The app's own controller list\nbounds the port 1 option only (2600.emu/src/main/system.ccm:80-93).\n\nOSystem::baseDir hands the file name to EmuSystem::contentFilePath\n(2600.emu/src/main/OSystem.cc:73-76), which appends it to the content name\ninstead of joining it as a directory entry (EmuFramework/src/EmuSystem.cc:\n448-452, EmuFramework/include/emuframework/EmuSystem.hh:213-218), the content\nname being the ROM file name without its dot extension\n(EmuFramework/src/EmuSystem.cc:82,91). The tapes are read beside the ROM under\nthat name followed by the file name, as in\n\"Smurfs Save the Day (1983) (Coleco)KVSHARED.WAV\". The upstream 7.0 tag builds\nthe same paths as baseDir().getPath() + fileName.\n\nSoundEmuEx leaves playWav, stopWav and wavSize on their base class bodies,\nwhich answer false, nothing and zero\n(2600.emu/src/stella/emucore/Sound.hxx:121-134). The tapes are tested with\nFSNode::exists and never read, and both games run without them through the\ntiming path in KidVid::setNextSong.\n\nNVRAM is produced by the app. MT24LC256 fills a fresh EEPROM image with\nINITIAL_VALUE when the file is missing or not 32768 bytes\n(2600.emu/src/stella/emucore/MT24LC256.cxx:44-68), and the CTY and FA2\ncartridge saves take the same route through nvramDir.\nelf_executable_image.bin is a dump written under the elf.dump setting\n(2600.emu/src/stella/emucore/CartELF.cxx:155). ui.png, gpOverlay.png and\nkbOverlay.png are read from the application bundle through openAsset.\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "atari-2600"
        ],
        "type": "standalone",
        "upstream": "https://github.com/stella-emu/stella",
        "upstream_commit": "d55b1aec0d067a4c901a6dcdf81cb8f579685659"
      }
    },
    {
      "id": "3dengine",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "3dengine"
        ],
        "display_name": "Test Core - 3D Engine",
        "emulator": "3DEngine",
        "files": [],
        "notes": "Tech demo for libretro hardware-accelerated rendering (OpenGL/ES). Loads .obj 3D models as content. No system directory files required.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/libretro-3dengine",
        "source_commit": "7772bd5965ab244ecc53580c8969a22455aa91d5",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-3dengine"
      }
    },
    {
      "id": "3dsen",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "1.1",
        "cores": [
          "3dsen",
          "3dsen-windows"
        ],
        "display_name": "3dSen (3D NES)",
        "emulator": "3dSen",
        "files": [],
        "mode": "standalone",
        "notes": "Closed-source Unity/C# NES emulator by Geod Studio, sold on Steam and\nitch.io for Windows, macOS and Linux. Rebuilds NES cartridge games as\nvoxel scenes at runtime. Emulation is compiled into the binary and the\nNES has no boot ROM, so no external BIOS or firmware is loaded. Cartridge\ngames only, no Famicom Disk System and therefore no disksys.rom: ES-DE\nlists it under nes and famicom but not fds, and RetroBat maps it to nes3d\nalone and documents \"No specific BIOS is required to play NES games\".\n\nGames are registered through the emulator UI, which writes rom.json in\nthe Unity persistent data path (Windows AppData\\LocalLow\\Geod Studio\\3dSen\\,\nLinux ~/.config/unity3d/Geod Studio/3dSen/, macOS ~/Library/Logs/Geod\nStudio/3dSen/) binding a fixed numeric ID to the user ROM. Launching\npasses that ID rather than a path: 3dSen.exe -id=N.\n\nPer-game 3D profiles are .3dn files, protobuf-serialized behind a \"3dn\"\ntitle header and a version field (3DNesManager Classes/3DNTools.cs:14-31,\n51-58), loaded when a game starts (3DNes_Engine Engine3D.cs:37, Load3DN).\nThe 100 official profiles ship inside the application. Profiles built\nwith 3dSenMaker are optional per-game additions installed from the UI\nsince v0.9, and cover art packs are optional files placed in CoverArt/\nunder the same data path. ROMs are user-supplied, the emulator ships\nwith no game content.\n",
        "profiled_date": "2026-08-07",
        "source": "https://geodstudio.net",
        "systems": [
          "nintendo-nes"
        ],
        "type": "standalone",
        "upstream": "https://geodstudio.net"
      }
    },
    {
      "id": "81",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.0a",
        "cores": [
          "81"
        ],
        "display_name": "Sinclair - ZX 81 (EightyOne)",
        "emulator": "EightyOne",
        "files": [
          {
            "aliases": [
              "zx81.rom"
            ],
            "md5": "db398d4e4e93a6d4dee3bfe146918219",
            "mode": "standalone",
            "name": "zx81.edition3.rom",
            "note": "ZX81 8K BASIC ROM (edition 3, default). Embedded in libretro core as zx81.rom.",
            "required": true,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:260, 81/zx81/snap.c:489",
            "system": "sinclair-zx81",
            "validation": [
              "crc32"
            ]
          },
          {
            "md5": "56efa70bbaf311915c56cfdc70584e96",
            "mode": "standalone",
            "name": "zx81.edition1.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Source/HW_.cpp:2747",
            "system": "sinclair-zx81"
          },
          {
            "md5": "b9fd58d324b6297f2a696d40722f95dc",
            "mode": "standalone",
            "name": "zx81.edition2.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Source/HW_.cpp:2748",
            "system": "sinclair-zx81"
          },
          {
            "md5": "e03bd725f98be45aac39c85f7fd41ce4",
            "mode": "standalone",
            "name": "zx80.rom",
            "required": true,
            "size": 4096,
            "source_ref": "Source/zx81config.cpp:259, Source/HW_.cpp:2741",
            "system": "sinclair-zx80",
            "validation": [
              "crc32"
            ]
          },
          {
            "md5": "cc69fdd6195acdfd1e533b2eb4c2a632",
            "mode": "standalone",
            "name": "zx97.rom",
            "required": false,
            "size": 32768,
            "source_ref": "Source/zx81config.cpp:281, Source/HW_.cpp:2792",
            "system": "sinclair-zx81"
          },
          {
            "md5": "db6efdfd82cebdfbb493d85b1a5efc3c",
            "mode": "standalone",
            "name": "jupiterace.rom",
            "required": true,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:279, Source/HW_.cpp:2787",
            "system": "jupiter-ace",
            "validation": [
              "crc32"
            ]
          },
          {
            "md5": "dea07eb23c5768ddf3ed90740eab85cb",
            "mode": "standalone",
            "name": "ts1500.rom",
            "required": true,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:271, Source/HW_.cpp:2764",
            "system": "timex-ts1500"
          },
          {
            "md5": "9194283503a105f3f3dfba13e61e993f",
            "mode": "standalone",
            "name": "ts2068.rom",
            "required": true,
            "size": 24576,
            "source_ref": "Source/zx81config.cpp:274-275, Source/HW_.cpp:2884-2886",
            "system": "timex-ts2068"
          },
          {
            "md5": "03aeea3abc7b1ca5f241935477ce71be",
            "mode": "standalone",
            "name": "lambda8300colour.rom",
            "note": "Lambda 8300 colour version (default ROM for Lambda machine).",
            "required": true,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:276, Source/HW_.cpp:2771",
            "system": "lambda-8300"
          },
          {
            "md5": "e232dfce1dcae65953583f66af146232",
            "mode": "standalone",
            "name": "lambda8300.rom",
            "note": "Lambda 8300 non-colour version (alternative).",
            "required": false,
            "size": 8192,
            "source_ref": "Source/HW_.cpp:2770",
            "system": "lambda-8300"
          },
          {
            "md5": "be906890c4bf42dd99f1a3bcb6003647",
            "mode": "standalone",
            "name": "lambda8300characterset.bin",
            "note": "Lambda 8300 external font. Loaded when extfont is enabled.",
            "required": false,
            "size": 512,
            "source_ref": "Source/zx81/zx81.cpp:312",
            "system": "lambda-8300"
          },
          {
            "md5": "a70bbb0dfe4bb8556e74258062766f5d",
            "mode": "standalone",
            "name": "ringo470.rom",
            "required": true,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:277, Source/HW_.cpp:2777",
            "system": "ringo-r470"
          },
          {
            "md5": "b301cdad72448d92598197b45bead8fe",
            "mode": "standalone",
            "name": "tk85.rom",
            "required": true,
            "size": 10240,
            "source_ref": "Source/zx81config.cpp:278, Source/HW_.cpp:2782",
            "system": "microdigital-tk85"
          },
          {
            "md5": "9dd7ecf784a6c04265c073c236f5fadb",
            "mode": "standalone",
            "name": "tc2048.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:272, Source/HW_.cpp:2874-2876",
            "system": "timex-tc2048"
          },
          {
            "aliases": [
              "dkchr.rom"
            ],
            "md5": "5cba3a306fbb94454811ba262b27c958",
            "mode": "standalone",
            "name": "dktronicsgraphics.rom",
            "note": "dK'tronics character ROM. Embedded in libretro core as dkchr.rom.",
            "required": false,
            "size": 4096,
            "source_ref": "Source/zx81/zx81.cpp:316, Source/zx81config.cpp:195-196",
            "system": "sinclair-zx81"
          },
          {
            "md5": "4944facea84bea43f4495eaca19006d0",
            "mode": "standalone",
            "name": "kaydegraphics.rom",
            "note": "Kayde character ROM.",
            "required": false,
            "size": 4096,
            "source_ref": "Source/zx81/zx81.cpp:320, Source/zx81config.cpp:197-198",
            "system": "sinclair-zx81"
          },
          {
            "md5": "70320cad0ab528e62dcc2ca847870995",
            "mode": "standalone",
            "name": "memotechhrg.rom",
            "note": "Memotech HRG ROM.",
            "required": false,
            "size": 2048,
            "source_ref": "Source/zx81/zx81.cpp:334, Source/zx81config.cpp:201-202",
            "system": "sinclair-zx81"
          },
          {
            "md5": "1e7408a9a6d329751acc9d0810fd633d",
            "mode": "standalone",
            "name": "quicksilvahires.rom",
            "note": "Quicksilva Hi-Res ROM.",
            "required": false,
            "size": 2048,
            "source_ref": "Source/zx81/zx81.cpp:338, Source/zx81config.cpp:203-204",
            "system": "sinclair-zx81"
          },
          {
            "md5": "7f59a979b1332a168d2efbc971ce1df0",
            "mode": "standalone",
            "name": "g007hrg.rom",
            "note": "G007 HRG ROM.",
            "required": false,
            "size": 2048,
            "source_ref": "Source/zx81/zx81.cpp:343, Source/zx81config.cpp:199-200",
            "system": "sinclair-zx81"
          },
          {
            "md5": "b1581a2fcf4e5083d5fd92a1da373efa",
            "mode": "standalone",
            "name": "z80assembler.rom",
            "required": false,
            "size": 4096,
            "source_ref": "Source/zx81/zx81.cpp:348, Source/zx81config.cpp:206",
            "system": "sinclair-zx81"
          },
          {
            "md5": "fae8c8cd2cef2ca6b72be5b1cd8509d8",
            "mode": "standalone",
            "name": "memocalc.rom",
            "required": false,
            "size": 4096,
            "source_ref": "Source/zx81/zx81.cpp:352, Source/zx81config.cpp:207-208",
            "system": "sinclair-zx81"
          },
          {
            "md5": "dec8c7f864c209db4defcfbe0774e220",
            "mode": "standalone",
            "name": "larken81.rom",
            "note": "Larken 81 floppy controller ROM.",
            "required": false,
            "size": 2048,
            "source_ref": "Source/zx81/zx81.cpp:361, Source/zx81config.cpp:171-172",
            "system": "sinclair-zx81"
          },
          {
            "md5": "31b704ae925305e74f50699271fddd9a",
            "mode": "standalone",
            "name": "interface1.edition2.rom",
            "note": "ZX Interface 1 ROM (default edition 2).",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:174-175",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "5c11c61a2dd2ca4bf39328d9ff42d289",
            "mode": "standalone",
            "name": "interface1.edition1.rom",
            "required": false,
            "size": 8192,
            "source_ref": "EightyOne/Source/ROMs/FDCs/interface1.edition1.rom",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "42e5de16fb5e50082bb954ec7ce45851",
            "mode": "standalone",
            "name": "+d.g+dos.v1-a.rom",
            "note": "Plus D G+DOS ROM (default v1-a).",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:163-164",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "2b0c5e2fa87e0b641bdb26634faea234",
            "mode": "standalone",
            "name": "disciple.gdos.v3.rom",
            "note": "DISCiPLE GDOS ROM v3.",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:165-166",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "3beeddbf0aa716b7aba7deec2bfb3028",
            "mode": "standalone",
            "name": "discovery.v2-22.rom",
            "note": "Opus Discovery DOS ROM (default v2-22).",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:167-168",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "0da70a5d2a0e733398e005b96b7e4ba6",
            "mode": "standalone",
            "name": "beta128.trdos.v5-03.rom",
            "note": "Beta 128 TR-DOS ROM (default v5-03).",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:169-170",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "d02ed1b39669c9b163f1fa2b1ffb41ee",
            "mode": "standalone",
            "name": "mwcfide.rom",
            "note": "MWCF IDE ROM.",
            "required": false,
            "size": 14648,
            "source_ref": "Source/zx81/zx81.cpp:381, Source/zx81config.cpp:183-184",
            "system": "sinclair-zx81"
          },
          {
            "md5": "e518c0736cb4ce0484ac8091f5ea3e01",
            "mode": "standalone",
            "name": "zxcflba.rom",
            "note": "ZXCF CompactFlash IDE ROM.",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:181-182",
            "system": "sinclair-zx81"
          },
          {
            "md5": "d8f203d2bebfe57d725b0d1067f3b92d",
            "mode": "standalone",
            "name": "zx8blbs.rom",
            "note": "Simple 8-bit IDE ROM.",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:177-178",
            "system": "sinclair-zx81"
          },
          {
            "md5": "6cfbf044b8f435b7f70eae37d9ee5c28",
            "mode": "standalone",
            "name": "zxidelbs.rom",
            "note": "Simple 16-bit IDE ROM.",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:179-180",
            "system": "sinclair-zx81"
          },
          {
            "md5": "052f6af718337e35e76693723e1d73e3",
            "mode": "standalone",
            "name": "uspeech.rom",
            "note": "Currah uSpeech ROM.",
            "required": false,
            "size": 2048,
            "source_ref": "Source/Spectrum/spec48.cpp:344, Source/zx81config.cpp:186-187",
            "system": "sinclair-zx81"
          },
          {
            "md5": "ebe1490920cbb62bde7282ae24928d95",
            "mode": "standalone",
            "name": "usource.rom",
            "note": "Currah uSource ROM.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Spectrum/spec48.cpp:350, Source/zx81config.cpp:188-189",
            "system": "sinclair-zx81"
          },
          {
            "md5": "c420ef03f6e0c477d9474efe3441a556",
            "mode": "standalone",
            "name": "multiface128.rom",
            "note": "Multiface 128 ROM.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:190-191",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "afe2218c3a6a43f1854fe824424d4167",
            "mode": "standalone",
            "name": "multiface3.rom",
            "note": "Multiface 3 ROM.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81config.cpp:192-193",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "864beefecf0021fa6b0f5a5aff55c167",
            "mode": "standalone",
            "name": "SSR1.bin",
            "note": "Digitalker speech ROM bank 1a.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Digitalker/Digitalkdrv.cpp:40-45",
            "system": "sinclair-zx81"
          },
          {
            "md5": "d3924ecc0efda0a58c4bda43044061e4",
            "mode": "standalone",
            "name": "SSR2.bin",
            "note": "Digitalker speech ROM bank 1b.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Digitalker/Digitalkdrv.cpp:49-54",
            "system": "sinclair-zx81"
          },
          {
            "md5": "dd2793938c50217c0e5e8aef75b98856",
            "mode": "standalone",
            "name": "SSR5.bin",
            "note": "Digitalker speech ROM bank 2a.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Digitalker/Digitalkdrv.cpp:58-63",
            "system": "sinclair-zx81"
          },
          {
            "md5": "5d6ee8cdf1b12816c4f152b5a1e13977",
            "mode": "standalone",
            "name": "SSR6.bin",
            "note": "Digitalker speech ROM bank 2b.",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Digitalker/Digitalkdrv.cpp:67-72",
            "system": "sinclair-zx81"
          },
          {
            "md5": "49b1bd3485d080bb242e94fd698f028d",
            "mode": "standalone",
            "name": "zx81.zxpand.ovl",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81/zx81.cpp:298-303",
            "system": "sinclair-zx81"
          },
          {
            "md5": "37cea5c1e7144de898a7dc4b102fb7fd",
            "mode": "standalone",
            "name": "zx80.zxpand.ovl",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81/zx81.cpp:304-305",
            "system": "sinclair-zx80"
          },
          {
            "md5": "49b1bd3485d080bb242e94fd698f028d",
            "mode": "standalone",
            "name": "ts1500.zxpand.ovl",
            "required": false,
            "size": 8192,
            "source_ref": "Source/zx81/zx81.cpp:298-303",
            "system": "timex-ts1500"
          },
          {
            "md5": "4c42a2f075212361c3117015b107ff68",
            "mode": "standalone",
            "name": "spectrum48.rom",
            "note": "Spectrum 48K.",
            "required": false,
            "size": 16384,
            "source_ref": "Source/zx81config.cpp:261-263, Source/HW_.cpp:2800-2807",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "60e1bd8b4d59b55e5b2175126239517f",
            "mode": "standalone",
            "name": "spectrum48.spanish.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 16384,
            "source_ref": "Source/HW_.cpp:2812",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "9f6f56003307b9d55be96f406fdbf2b1",
            "mode": "standalone",
            "name": "spectrum48.arabic.rom",
            "required": false,
            "size": 16384,
            "source_ref": "EightyOne/Source/ROMs/spectrum48.arabic.rom",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "a6a1e3a68bb5523997103c3925a46fe4",
            "mode": "standalone",
            "name": "spectrum48.arabic.version1.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Source/HW_.cpp:2813, Source/HW_.cpp:2820",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "fac3d08455328c34f0d06344d89cec0e",
            "mode": "standalone",
            "name": "spectrum48.arabic.version2.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Source/HW_.cpp:2828, Source/HW_.cpp:2837",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "f058f27ae61af225fe5baacc1d89adfc",
            "mode": "standalone",
            "name": "spectrum48.nordic.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Source/HW_.cpp:2806",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "85fede415f4294cc777517d7eada482e",
            "mode": "standalone",
            "name": "spectrum128.rom",
            "note": "Spectrum 128K.",
            "required": false,
            "size": 32768,
            "source_ref": "Source/zx81config.cpp:264, Source/HW_.cpp:2817-2821",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "84aef735da122d55e41a33455c7c3506",
            "mode": "standalone",
            "name": "spectrum128.spanish.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Source/HW_.cpp:2819",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "238f77692156a5c49d20c0aa2862e8bb",
            "mode": "standalone",
            "name": "spectrum+2.rom",
            "note": "Spectrum +2.",
            "required": false,
            "size": 32768,
            "source_ref": "Source/zx81config.cpp:266, Source/HW_.cpp:2824-2829",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "1fff14aeca8e1dd3670142982cc6bb36",
            "mode": "standalone",
            "name": "spectrum+2.french.rom",
            "region": [
              "france"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Source/HW_.cpp:2826",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "43cf648e27efc9be8186bb7049505d79",
            "mode": "standalone",
            "name": "spectrum+2.spanish.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Source/HW_.cpp:2827",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "05de80a055b5e7866f55769db0584d6e",
            "mode": "standalone",
            "name": "spectrum+3.version4-0.rom",
            "note": "Spectrum +3.",
            "required": false,
            "size": 65536,
            "source_ref": "Source/HW_.cpp:2833, Source/HW_.cpp:2854",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "990dfe9d37b48595f5befe0e4ff4b7c6",
            "mode": "standalone",
            "name": "spectrum+3.version4-0.spanish.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 65536,
            "source_ref": "Source/HW_.cpp:2835, Source/HW_.cpp:2856",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "7e00ed3562abfd188d0d4da03e80bc0a",
            "mode": "standalone",
            "name": "spectrum+3.version4-1.rom",
            "note": "Spectrum +3 (default for +2A and +3).",
            "required": false,
            "size": 65536,
            "source_ref": "Source/zx81config.cpp:267-268, Source/HW_.cpp:2834, Source/HW_.cpp:2855",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "52d130178c1106fef765b5f119fb43bc",
            "mode": "standalone",
            "name": "spectrum+3.version4-1.spanish.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 65536,
            "source_ref": "Source/HW_.cpp:2836, Source/HW_.cpp:2857",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "30316fa0ed7ee6682933960e11b48d60",
            "mode": "standalone",
            "name": "spectrum+3.arabic3-a.english4-0.rom",
            "required": false,
            "size": 131072,
            "source_ref": "Source/HW_.cpp:2858",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "b7893ad25728fbf6410f08eddd4a1cad",
            "mode": "standalone",
            "name": "tk90.rom",
            "note": "Microdigital TK90X (Spectrum clone).",
            "required": false,
            "size": 16384,
            "source_ref": "EightyOne/Source/ROMs/tk90.rom",
            "system": "sinclair-zx-spectrum"
          },
          {
            "md5": "b7893ad25728fbf6410f08eddd4a1cad",
            "mode": "standalone",
            "name": "tk95.rom",
            "note": "Microdigital TK95 (Spectrum clone).",
            "required": false,
            "size": 16384,
            "source_ref": "EightyOne/Source/ROMs/tk95.rom",
            "system": "sinclair-zx-spectrum"
          }
        ],
        "notes": "Libretro port embeds zx81.rom and dkchr.rom as C arrays (xxd -i).\nCore never accesses filesystem for ROMs. Hardcodes MACHINEZX81.\nref: 81-libretro/81/zx81/snap.c:487-508, src/libretro.cpp:393\n\nOriginal EightyOne supports 15+ machines, loads ROMs from ROM/ directory.\nref: EightyOne/Source/zx81/zx81.cpp:309, EightyOne/Source/HW_.cpp:2734\n\n.info has no firmware declarations (firmware_count absent).\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/81-libretro",
        "source_commit": "fa7094910d040baa5fd8b11dbf6a1a618330ecd9",
        "systems": [
          "sinclair-zx81",
          "sinclair-zx80",
          "sinclair-zx-spectrum",
          "jupiter-ace",
          "timex-ts1500",
          "timex-tc2048",
          "timex-ts2068",
          "lambda-8300",
          "ringo-r470",
          "microdigital-tk85"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/charlierobson/EightyOne"
      }
    },
    {
      "id": "a5200",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.0.2",
        "cores": [
          "a5200"
        ],
        "display_name": "Atari - 5200 (a5200)",
        "emulator": "a5200",
        "files": [
          {
            "hle_fallback": true,
            "name": "5200.rom",
            "note": "Atari 5200 OS ROM. Core option \"a5200_bios\" controls official vs internal. Altirra replacement has lower compatibility with some titles.\n",
            "path": "5200.rom",
            "required": false,
            "size": 2048,
            "source_ref": "libretro/libretro.c:58-59, libretro/libretro.c:416-507, emu/memory.c:46",
            "validation": [
              "size"
            ]
          }
        ],
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/a5200",
        "source_commit": "40c6f2f1ad4a3145b328d5baaf010fae6c7e752b",
        "systems": [
          "atari-5200"
        ],
        "type": "libretro",
        "upstream": "https://github.com/alekmaul/a5200"
      }
    },
    {
      "id": "a7800",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "5.2",
        "cores": [
          "a7800"
        ],
        "display_name": "Atari - 7800 (A7800)",
        "emulator": "A7800",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5d13730c",
                "description": "NTSC BIOS, default system BIOS \"a7800\", mapped at 0x3000",
                "name": "7800.u7",
                "sha1": "d9d134bb6b36907c615a594cc7688f7bfcef5b43",
                "size": 4096
              },
              {
                "crc32": "a0e10edf",
                "description": "NTSC prototype BIOS with Asteroids, system BIOS \"a7800pr\"",
                "name": "c300558-001a.u7",
                "sha1": "14584b1eafe9721804782d4b1ac3a4a7313e455f",
                "size": 16384
              },
              {
                "crc32": "d5b61170",
                "description": "PAL BIOS with Asteroids, named c300558-001b.u7 in mainline MAME",
                "name": "7800pal.rom",
                "sha1": "5a140136a16d1d83e4ff32a19409ca376a8df874",
                "size": 16384
              }
            ],
            "name": "a7800.zip",
            "note": "Merged console BIOS archive documented by the manual at bios/a7800.zip. Serves all eight machines through the parent chain, since the PAL machines are clones of a7800 rather than of a7800p.",
            "required": false,
            "source_ref": "src/mame/drivers/a7800.cpp:1698-1748",
            "system": "atari-7800",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9be408d3",
                "description": "High Score Cartridge ROM, read through the pass-through cart",
                "name": "highscre.bin",
                "sha1": "a3af676991391a6dd716c79022d4947206b78164",
                "size": 4096
              }
            ],
            "name": "hiscore.zip",
            "note": "Software list set for the High Score Cartridge configuration (CX78HSC, slot a78_hsc). Fatal when that configuration is selected and the set is absent.",
            "required": false,
            "source_ref": "hash/a7800.xml:8-21",
            "system": "atari-7800",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9be408d3",
                "description": "High Score Cartridge ROM, gated by XM control register bit 3",
                "name": "highscre.bin",
                "sha1": "a3af676991391a6dd716c79022d4947206b78164",
                "size": 4096
              }
            ],
            "name": "xm.zip",
            "note": "Software list set for the XM Expansion Module configuration (slot a78_xm), which reuses the High Score Cartridge ROM alongside 128KB RAM, POKEY and YM2151. Fatal when that configuration is selected and the set is absent.",
            "required": false,
            "source_ref": "hash/a7800.xml:24-38",
            "system": "atari-7800",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "MAME fork by 7800.8bitdev.org built with the Atari 7800 driver alone. The\nreleased binary carries eight machines, all declaring a7800 as parent: NTSC\nand PAL at three palette temperatures, plus a developer mode showing DMA\nusage per scanline (a7800.cpp:1837-1844). The temperature variants were\nrenamed after 5.2, from a7800u1/a7800u2/a7800pu1/a7800pu2 to\na7800a1/a7800a2/a7800pa1/a7800pa2. ROM definitions are identical in both.\n\nConsole BIOS is optional. Every entry carries ROM_OPTIONAL, so absence\nyields a warning rather than the fatal \"Required files are missing\" exit\n(romload.cpp:373-379, 488-493). The region is ERASEFF, and machine_reset\nreads the reset vector: when 0xfffe and 0xffff both hold 0xff, m_ctrl_reg is\nset to 4 and the console starts the cartridge (a7800.cpp:1529-1532). No code\nsubstitutes for the BIOS when it is absent.\n\nLookup runs under rompath, which the shipped a7800.ini sets to \"bios;roms\".\nopen_rom_file walks the parent chain (romload.cpp:567-572), so all eight\nmachines fall back to the a7800 set, and the manual documents one merged\narchive at bios/a7800.zip. Inside an archive the search tries name with CRC,\nthen CRC alone, then name (fileio.cpp:692-701), so a ROM whose filename\ndiffers from the driver still resolves; loose files under rompath/a7800/\nmatch by name only. Loaded ROMs are checked for exact length and against the\ndeclared CRC32 and SHA1, and a mismatch is a warning (romload.cpp:417-455).\n\nThe PAL BIOS keeps the filename 7800pal.rom, which mainline MAME has since\nrenamed to c300558-001b.u7 for the same dump. Mainline also marks the 7800\nROMs mandatory.\n\nSoftware list a7800 (hash/a7800.xml), attached by every machine\n(a7800.cpp:1577, 1608, 1654, 1684), holds add-on hardware rather than games:\nthe High Score Cartridge and the XM Expansion Module, both backed by the\nsame 4KB highscre.bin served as the pass-through cart ROM\n(hiscore.cpp:49-52, xm.cpp:177-183). Software list ROMs resolve as\na7800/<setname> then <setname> under rompath (romload.cpp:628-650) and carry\nno optional flag, so selecting either configuration without the image exits\nwith EMU_ERR_MISSING_FILES.\n\nThe release ships the binary, a7800.ini, the manual, hash/a7800.xml, cfg\ndefaults, bgfx shaders and artwork masks, and no roms, samples, plugins or\nlanguage directory. The driver adds no samples device and no external\nlayout. Crosshair bitmaps fall back to a compiled-in shape\n(crsshair.cpp:180-214) and the UI font to compiled-in data\n(rendfont.cpp:587-600).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/7800-devtools/a7800",
        "source_commit": "7a2afdc1ea08fc331b16b750d8c1f02d4ef62fc8",
        "systems": [
          "atari-7800"
        ],
        "type": "standalone",
        "upstream": "https://github.com/mamedev/mame"
      }
    },
    {
      "id": "ace-dl",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2026-06-03",
        "cores": [
          "ace-dl",
          "acedl"
        ],
        "display_name": "Amstrad - CPC/Plus (ACE-DL)",
        "emulator": "ACE-DL",
        "files": [
          {
            "md5": "b96280dc6c95a48857b4b8eb931533ae",
            "min_size": 32768,
            "name": "OS6128_UK.rom",
            "note": "CPC 6128 English. Firmware v3 followed by BASIC 1.20. Absence stops startup with \"Error initializing ROMs!\".",
            "path": "private/firmware/OS6128_UK.rom",
            "region": [
              "uk"
            ],
            "required": true,
            "sha1": "5977adbad3f7c1e0e082cd02fe76a700d9860c30",
            "source_ref": "AceDL 2026-06-03: private/firmware/OS6128_UK.rom, default machine, opened at every startup",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "5ee871d5600eb9b5a22989c295f902a5",
            "min_size": 32768,
            "name": "OS6128_FR.rom",
            "note": "CPC 6128 French. Firmware f3 followed by BASIC 1.23.",
            "path": "private/firmware/OS6128_FR.rom",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "200d59076dfef36db061d6d7d21d80021cab1237",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS6128_FR.rom, command line -ffr",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "0246740371010333385665dfeb7cd0ec",
            "min_size": 32768,
            "name": "OS6128_S.rom",
            "note": "CPC 6128 Spanish. Firmware s3 followed by BASIC 1.21.",
            "path": "private/firmware/OS6128_S.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "sha1": "1acd01c2c03424a78b32c9440f4d890fb1104815",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS6128_S.rom, command line -fsp",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "ca1635fd992e2aa7a776b30da13467e5",
            "min_size": 32768,
            "name": "OS6128_DK.rom",
            "note": "CPC 6128 Danish. Firmware d3 followed by BASIC 1.20.",
            "path": "private/firmware/OS6128_DK.rom",
            "region": [
              "denmark"
            ],
            "required": false,
            "sha1": "a9e7ee6355730f319a37c95ca0a714212b88c3b1",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS6128_DK.rom, command line -fdk",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "a993f85b88ac4350cf4d41554e87fe4f",
            "min_size": 32768,
            "name": "OS464_UK.rom",
            "note": "CPC 464 English. Firmware v1 followed by BASIC 1.00.",
            "path": "private/firmware/OS464_UK.rom",
            "region": [
              "uk"
            ],
            "required": false,
            "sha1": "56d39c463da60968d93e58b4ba0e675829412a20",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS464_UK.rom",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "a588b7c9e1c142b5d8ebec65ac7713d8",
            "min_size": 32768,
            "name": "OS464_FR.rom",
            "note": "CPC 464 French. Firmware f1 followed by a French BASIC 1.0 that the upstream MorphOS release does not carry.",
            "path": "private/firmware/OS464_FR.rom",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "c68d84f37ab9defbb19200598c24948c97c9a644",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS464_FR.rom",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "5a384a2310f472c7857888371c00ed66",
            "min_size": 32768,
            "name": "OS664_UK.rom",
            "note": "CPC 664 English. Firmware v2 followed by BASIC 1.10.",
            "path": "private/firmware/OS664_UK.rom",
            "region": [
              "uk"
            ],
            "required": false,
            "sha1": "073a7665527b5bd8a148747a3947dbd3328682c8",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry OS664_UK.rom",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "85accc17e98c79dbbdde826cbfaf4692",
            "min_size": 32768,
            "name": "XMEM_FW_3_15_UK.rom",
            "note": "X-MEM firmware 3.15 English, followed by BASIC 1.20.",
            "path": "private/firmware/XMEM_FW_3_15_UK.rom",
            "region": [
              "uk"
            ],
            "required": false,
            "sha1": "c7d7e5116665e4f21ae3b9bcdca2ce3685f00293",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry XMEM_FW_3_15_UK.rom",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "046fa182f7574bde3ab97ee873f6e736",
            "min_size": 32768,
            "name": "XMEM_FW_3_15_FR.rom",
            "note": "X-MEM firmware 3.15 French, followed by BASIC 1.23.",
            "path": "private/firmware/XMEM_FW_3_15_FR.rom",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "faa49a3aeb1d7e972437f6b77515455d14e2d680",
            "source_ref": "AceDL 2026-06-03: Machine configuration entry XMEM_FW_3_15_FR.rom",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "25629dfe870d097469c217b95fdc1c95",
            "name": "Amsdos.rom",
            "note": "AMSDOS disc ROM. Absence prints \"Error loading AMSDOS ROM\" then \"Error initializing ROMs!\" and stops startup. Length is not checked.",
            "path": "private/amsdos/Amsdos.rom",
            "required": true,
            "sha1": "39102c8e9cb55fcc0b9b62098780ed4a3cb6a4bb",
            "size": 16384,
            "source_ref": "AceDL 2026-06-03: private/amsdos/Amsdos.rom, opened at every startup",
            "system": "amstrad-cpc"
          },
          {
            "md5": "39b565e648172980aa552293e667070f",
            "name": "Amstrad_v4.cpr",
            "note": "464plus/6128plus/GX-4000 system cartridge, English, firmware version 4.",
            "path": "private/firmware/Amstrad_v4.cpr",
            "required": false,
            "sha1": "405e341437fab8db477606238af0c20eca2e39ee",
            "size": 131156,
            "source_ref": "AceDL 2026-06-03: private/firmware, cartridge requester root, CPR loader",
            "system": "amstrad-cpc"
          },
          {
            "md5": "e7159fd674022ba05f9b347ae3cdafc6",
            "name": "Amstrad_f4.cpr",
            "note": "464plus/6128plus/GX-4000 system cartridge, French, firmware version 4.",
            "path": "private/firmware/Amstrad_f4.cpr",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "e5aa80c501cfb435e2cba35ad92e427240394164",
            "size": 131156,
            "source_ref": "AceDL 2026-06-03: private/firmware, cartridge requester root, CPR loader",
            "system": "amstrad-cpc"
          },
          {
            "md5": "6eeed3fdd4abc98a2a932da810410128",
            "name": "Amstrad_s4.cpr",
            "note": "464plus/6128plus/GX-4000 system cartridge, Spanish, firmware version 4.",
            "path": "private/firmware/Amstrad_s4.cpr",
            "region": [
              "spain"
            ],
            "required": false,
            "sha1": "05fb14df24b2b504a3ae463a086f02f0adcc07b9",
            "size": 131156,
            "source_ref": "AceDL 2026-06-03: private/firmware, cartridge requester root, CPR loader",
            "system": "amstrad-cpc"
          },
          {
            "md5": "4c9f014e91d407cc6509fad0095ab909",
            "name": "multiface2.rom",
            "note": "Romantic Robot Multiface Two ROM. The plugin loads without it.",
            "path": "private/multiface2/multiface2.rom",
            "required": false,
            "sha1": "1431ec628d38f000715545dd2186b684c5fe5a6f",
            "size": 8192,
            "source_ref": "AceDL 2026-06-03: private/multiface2/multiface2.rom, read when PLUGIN_MULTIFACE2=1",
            "system": "amstrad-cpc"
          },
          {
            "md5": "9a293eaaebca601f671070ad56cb81b6",
            "name": "hackit400uk.rom",
            "note": "HackIt 4.00 by Siren Software, English, UK flavour of the Hacker plugin.",
            "path": "private/hacker/hackit400uk.rom",
            "region": [
              "uk"
            ],
            "required": false,
            "sha1": "56306e7234bcffd14b4f977d42d237c4ad9c12d5",
            "size": 16384,
            "source_ref": "AceDL 2026-06-03: private/hacker/hackit400uk.rom, read when PLUGIN_HACKER=1",
            "system": "amstrad-cpc"
          },
          {
            "md5": "dfdd9924295f491d54f30569874287f8",
            "name": "hacker481fr.rom",
            "note": "Le Hackeur 4.81, the French edition of the same Siren Software ROM, French flavour of the Hacker plugin.",
            "path": "private/hacker/hacker481fr.rom",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "0c15d6753cf0ae2a1737b6e857e8e82ee135a697",
            "size": 16384,
            "source_ref": "AceDL 2026-06-03: private/hacker/hacker481fr.rom, read when PLUGIN_HACKER=1 and PLUGIN_HACKERFR=1",
            "system": "amstrad-cpc"
          },
          {
            "md5": "8740932cda05e518a9955f1d08d6786f",
            "name": "ym2608_adpcm_rom.bin",
            "note": "YM2608 internal ADPCM rhythm ROM used by the Play2CPC cartridge sound. Missing file prints \"Warning: ym2608_adpcm_rom.bin not found!\" and the plugin keeps running. Shipped in the Linux and Raspberry Pi packages, absent from the Windows package.",
            "path": "private/sounds/ym2608_adpcm_rom.bin",
            "required": false,
            "sha1": "50b6c3e288eaa12ad275d4f323267bb72b0445df",
            "size": 8192,
            "source_ref": "AceDL 2026-06-03: private/sounds/ym2608_adpcm_rom.bin, read when PLUGIN_PLAY2CPC=1",
            "system": "amstrad-cpc"
          }
        ],
        "mode": "standalone",
        "notes": "SDL port of ACE, the Amstrad CPC/Plus emulator written by Philippe Rimauro\n(OffseT) for MorphOS. ACE-DL is built by Edouard Bergé (Roudoudou) from the\nMorphOS sources and released for Windows, macOS, Linux and Raspberry Pi;\na third port targets Haiku. All three are closed source, the original author\nkeeps the sources private, so the entries below were established on the\nofficial 2026-06-03 Linux x86-64 build: path constants read from the binary,\nfile opens traced with strace, and required/optional decided by removing each\nfile and observing the result.\n\nMachines are CPC 464, 664 and 6128 plus the Plus range, which boots from a\ncartridge and covers the GX-4000. An operating system is one 32 KB file\nholding the 16 KB firmware ROM followed by the 16 KB BASIC ROM; the AMSDOS\ndisc ROM is a separate 16 KB file mapped in slot 7. The upstream MorphOS\nrelease keeps the three ROMs apart under System/ and composes them at\nstartup, ACE-DL ships them pre-joined under private/firmware/ with one file\nper machine and language. The pairs are exact:\n\n  OS464_UK.rom        Firmware v1 + BASIC 1.00\n  OS464_FR.rom        Firmware f1 + French BASIC 1.0 (md5 824f5213…)\n  OS664_UK.rom        Firmware v2 + BASIC 1.10\n  OS6128_UK.rom       Firmware v3 + BASIC 1.20\n  OS6128_FR.rom       Firmware f3 + BASIC 1.23\n  OS6128_S.rom        Firmware s3 + BASIC 1.21\n  OS6128_DK.rom       Firmware d3 + BASIC 1.20\n  XMEM_FW_3_15_UK.rom XMEM 3.15 firmware + BASIC 1.20\n  XMEM_FW_3_15_FR.rom XMEM 3.15 firmware + BASIC 1.23\n\nFirmware versions run 1 to 4 for the 464, 664, 6128 and Plus, and the letter\nis the country: v English, f French, s Spanish, d Danish. The BASIC revision\nattached to a version 3 firmware follows the country, 1.23 for France, 1.21\nfor Spain, 1.20 elsewhere, which is what the pairs above show. The XMEM files\nreplace the firmware half with the X-MEM expansion firmware and keep the\nstock BASIC.\n\nThe nine operating systems are the entries of the Machine configuration\nselector. OS6128_UK.rom is the built-in default and is opened at every\nstartup even when the config OS= key names another file. Command line -fuk,\n-ffr, -fsp and -fdk switch to the UK, French, Spanish and Danish 6128 files.\nA machine needs at least 32 KB in the file: truncated to 16384 bytes the\nemulator prints \"Error initializing ROMs!\" and dies, padded to 40000 bytes it\nboots, so the check is a lower bound rather than an exact length. The AMSDOS\nROM is checked for presence only, an 8 KB stub boots.\n\nPlus machines boot from a cartridge and no cartridge filename is compiled\ninto the binary, the three Amstrad_?4.cpr files are the system cartridges the\nauthor ships in the same directory, which is also the default browse root of\nthe cartridge requester. The loader walks the RIFF chunk list and reports\n\"Cartridge Load Error (Header)\" on a bad header and \"truncated file!\" when a\ncb00..cb07 bank is short, each bank being 16 KB for 128 KB total.\n\nPlugins pull three more ROMs. Multiface II reads multiface2.rom, the Hacker\nplugin reads hackit400uk.rom in its UK flavour and hacker481fr.rom in its\nFrench one, and Play2CPC reads the YM2608 ADPCM rhythm ROM, warning with\n\"ym2608_adpcm_rom.bin not found!\" and running without it. The Windows package\nomits that ROM, the Linux and Raspberry Pi packages carry it.\n\nExpansion ROMs are user business: config keys ROM0 to ROM255 hold whatever\nthe user picks through the requester rooted at media/rom/, and the release\nseeds that directory with third-party ROMs (ParaDOS, Protext, Maxam, Utopia,\nuniDOS, SymbOS, FutureOS, Orgams, Discology and others). Disc, tape,\nsnapshot, Dandanator and X-MASS images are user content the same way, and the\nNova plugin regenerates its 32 KB private/Nova/nova.nvram when the file is\nabsent. Outside emulation the binary loads its own payload: seventeen QOI\nimages, fatal with \"Error loading QOI file please reinstall\"; seventeen WAV\ndrive and monitor samples, each merely reported as not found; and the\nprivate/messages catalog holding the French, English and Spanish\ntranslations. private/sounds/hitachi_long_seek.wav ships with every package\nbut appears in no path constant and is never opened.\n",
        "profiled_date": "2026-08-08",
        "source": "https://roudoudou.com/ACE-DL/",
        "systems": [
          "amstrad-cpc"
        ],
        "type": "standalone",
        "upstream": "http://ace.cpcscene.net"
      }
    },
    {
      "id": "advanced_tests",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "advanced_tests"
        ],
        "display_name": "Test Core - Advanced Test",
        "emulator": "advanced_tests",
        "files": [],
        "notes": "Test core for frontend developers. Exercises video output, audio sync,\ninput polling, and serialization. All data (font, CRC32 table) is embedded\nin the binary. No external files needed.\nsource_ref: tests/test_advanced/libretro-test.c\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "advancemame",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "5.0",
        "cores": [
          "advancemame",
          "advmame"
        ],
        "display_name": "Arcade (AdvanceMAME)",
        "emulator": "AdvanceMAME",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "High score definitions, selected by misc_hiscorefile (advance/osd/glue.c:800,3293). Absent, hiscore_open matches no entry and no high score is restored or saved.",
            "required": false,
            "source_ref": "src/hiscore.c:28,313"
          },
          {
            "category": "game_data",
            "name": "cheat.dat",
            "note": "Cheat definitions, selected by misc_cheatfile (advance/osd/glue.c:799,3291) and read only when misc_cheat is on, which it is not by default. Absent, the cheat menu reads \"cheat database not found\" (src/cheat.c:2536).",
            "required": false,
            "source_ref": "src/cheat.c:8682,8751"
          },
          {
            "category": "game_data",
            "name": "event.dat",
            "note": "Event and safequit definitions, selected by misc_eventfile and read straight from $home then $data rather than through the file type table. Absent, the exit menu always prompts instead of checking coin and play state.",
            "required": false,
            "source_ref": "advance/osd/safequit.c:165-180,260"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "description": "Europe MVS (Ver. 2)",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "description": "Europe MVS (Ver. 1)",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "description": "US MVS (Ver. 2)",
                "name": "usa_2slt.bin",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "description": "US MVS (Ver. 1)",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "91b64be3",
                "description": "Asia MVS (Ver. 3)",
                "name": "asia-s3.rom",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "description": "Japan MVS (Ver. 3)",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "description": "Japan MVS (Ver. 2)",
                "name": "sp-j2.rom",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "description": "Japan MVS (Ver. 1)",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "97cf998b",
                "description": "Z80 sound BIOS",
                "name": "sm1.sm1",
                "sha1": "977387a7c76ef9b21d0b01fa69830e949a9a9626",
                "size": 131072
              },
              {
                "crc32": "e09e253c",
                "description": "Y zoom control",
                "name": "000-lo.lo",
                "sha1": "2b1c719531dac9bb503f22644e6e4236b91e7cfc",
                "size": 65536
              },
              {
                "crc32": "354029fc",
                "description": "fix layer tiles",
                "name": "sfix.sfx",
                "sha1": "4ae4bf23b4c2acff875775d4cbff5583893ce2a1",
                "size": 131072
              }
            ],
            "name": "neogeo.zip",
            "note": "Eight MVS BIOS variants selected with misc_bios (euro, euro-s1, us, us-e, asia, japan, japan-s2, japan-s1), euro by default. sm1.sm1, 000-lo.lo and sfix.sfx are loaded whichever variant is selected.",
            "required": true,
            "source_ref": "src/drivers/neogeo.c:7939-7953,8553",
            "system": "snk-neogeo-mvs",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e42b166e",
                "description": "68000 BIOS",
                "name": "pgm_p01s.rom",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "description": "text layer tiles",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "description": "samples",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/drivers/pgm.c:3708-3719,5487",
            "system": "igs-pgm",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d0e0889d",
                "description": "Japan (bios epr19730)",
                "name": "epr19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "description": "Japan (bios mp17951a)",
                "name": "mp17951a.s",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "description": "USA (bios mp17952a)",
                "name": "mp17952a.s",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "59ed40f4",
                "description": "Japan (bios 20091)",
                "name": "20091.bin",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "description": "Taiwan (bios mp17953a)",
                "name": "mp17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "description": "Europe (bios mp17954a)",
                "name": "mp17954a.s",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "description": "Unknown (debug?)",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "description": "Development (bios 1.061)",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "description": "Japan (bios epr17740)",
                "name": "epr-17740.bin",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              }
            ],
            "name": "stvbios.zip",
            "note": "Nine BIOS variants selected with misc_bios (japan, japana, us, japanb, taiwan, europe, unknown, dev1061, japanc), japan by default.",
            "required": true,
            "source_ref": "src/drivers/stv.c:3092-3094,4026",
            "system": "sega-stv",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "description": "Mega Play BIOS (Ver. 1)",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "description": "Mega Play BIOS (Ver. 2)",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              }
            ],
            "name": "megaplay.zip",
            "note": "Two BIOS variants selected with misc_bios (ver1, ver2), ver1 by default.",
            "required": true,
            "source_ref": "src/drivers/megaplay.c:735-738,933",
            "system": "sega-megaplay",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "name": "epr12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              }
            ],
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/drivers/megatech.c:454-457,866",
            "system": "sega-megatech",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "23d929b7",
                "description": "main CPU BIOS (bios0)",
                "name": "rms8.cpu",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "b67a91d9",
                "description": "main CPU BIOS (bios1)",
                "name": "dsp3.p0b",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "description": "main CPU BIOS (bios1)",
                "name": "dsp3.p1b",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "description": "audio CPU",
                "name": "rms8.snd",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "a6df18fd",
                "description": "MCU",
                "name": "cass8041.bin",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              },
              {
                "crc32": "238fdb40",
                "description": "PROM",
                "name": "dsp8.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "description": "PROM",
                "name": "dsp8.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "description": "DRAM banking and timing PROM",
                "name": "rms8.j3",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              }
            ],
            "name": "decocass.zip",
            "note": "Two main CPU BIOS variants selected with misc_bios (bios0, bios1), bios0 by default. The audio CPU, MCU and PROMs are loaded whichever variant is selected.",
            "required": true,
            "source_ref": "src/drivers/decocass.c:727-730,1213",
            "system": "deco-cassette",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "description": "Dual Monitor Version",
                "name": "pch1-c.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "description": "Single Monitor Version",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "30c15e23",
                "description": "BIOS tiles",
                "name": "pch1-c.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "description": "BIOS tiles",
                "name": "pch1-c.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "description": "BIOS tiles",
                "name": "pch1-c.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "description": "PROM",
                "name": "pch1-c.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "description": "PROM",
                "name": "pch1-c.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "description": "PROM",
                "name": "pch1-c.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              }
            ],
            "name": "playch10.zip",
            "note": "Two BIOS variants selected with misc_bios (dual, single), dual by default. Tiles and PROMs are loaded whichever variant is selected.",
            "required": true,
            "source_ref": "src/drivers/playch10.c:1648-1651,1659",
            "system": "nintendo-playch10",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "44bb3a40",
                "description": "SPC700 IPL ROM",
                "name": "spc700.rom",
                "sha1": "97e352553e94242ae823547cd853eecda55c20f0",
                "size": 64
              },
              {
                "crc32": "4b02d66d",
                "description": "DSP1 data ROM",
                "name": "dsp1data.bin",
                "sha1": "1534f4403d2a0f68ba6e35186fe7595d33de34b1",
                "size": 2048
              },
              {
                "crc32": "a8e202b3",
                "description": "BIOS CPU",
                "name": "nss-c.dat",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "e06cb58f",
                "description": "BIOS CPU",
                "name": "nss-ic14.02",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              }
            ],
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/drivers/nss.c:524-526,657",
            "system": "nintendo-nss",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "description": "Japan",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "description": "Europe",
                "name": "sknse1.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "description": "Asia",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "description": "USA",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "description": "Korea",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              }
            ],
            "name": "skns.zip",
            "note": "Five region BIOS ROMs, all loaded into the same region.",
            "required": true,
            "source_ref": "src/drivers/suprnova.c:1269-1276,1744",
            "system": "super-kaneko-nova",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/drivers/konamigx.c:2138-2141,3485",
            "system": "konami-gx",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/drivers/konamigv.c:972-976,1058",
            "system": "konami-gv",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f055a624",
                "description": "sound CPU",
                "name": "5b.bin",
                "sha1": "5dfe89d7271092e665cdd5cd59d15a2b70f92f43",
                "size": 2048
              },
              {
                "crc32": "c205bca6",
                "description": "PROM",
                "name": "82s185.10h",
                "sha1": "ec9bd220e75f7b067ede6139763ef8aca0fb7a29",
                "size": 2048
              },
              {
                "crc32": "b5221cec",
                "description": "PROM",
                "name": "82s123.10k",
                "sha1": "71d9830b33b1a8140b0fe1a2ba8024ba8e6e48e0",
                "size": 32
              }
            ],
            "name": "cvs.zip",
            "required": true,
            "source_ref": "src/drivers/cvs.c:420-430,1401",
            "system": "century-cvs",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "name": "coh-1000c.353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              }
            ],
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:3127-3129,4513",
            "system": "capcom-zn1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "coh-3002c.353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              }
            ],
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:3362-3364,4531",
            "system": "capcom-zn2",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "coh-1002m.353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              }
            ],
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:3805-3807,4578",
            "system": "tecmo-tps",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "coh-1000t.353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              }
            ],
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:4040-4042,4603",
            "system": "taito-fx1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "coh-1002e.353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              }
            ],
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:4312-4314,4630",
            "system": "eighting-zn1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "coh-1001l.353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              }
            ],
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:4483-4485,4642",
            "system": "atlus-zn1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "coh-1000w.353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              }
            ],
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:4398-4400,4558",
            "system": "atari-zn1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "coh-1000a.353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              }
            ],
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/drivers/zn.c:4421-4423,4567",
            "system": "acclaim-zn1",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "description": "R4300 BIOS",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "description": "unused BIOS ROM",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "description": "unused BIOS ROM",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              }
            ],
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/drivers/hng64.c:1425-1431,1718",
            "system": "hyper-neogeo64",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "description": "Amiga Kickstart 1.2",
                "name": "kick12.rom",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "description": "OnePlay 3.00",
                "name": "scpav3_0.1h",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "description": "OnePlay 3.00",
                "name": "scpav3_0.1l",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "description": "OnePlay 2.11",
                "name": "scpa211h",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "description": "OnePlay 2.11",
                "name": "scpa211l",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "description": "TenPlay 2.11",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "description": "TenPlay 2.11",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "description": "TenPlay 2.11",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "description": "TenPlay 2.11",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "description": "TenPlay 2.11",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "description": "TenPlay 2.11",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              }
            ],
            "name": "ar_bios.zip",
            "note": "Three BIOS variants selected with misc_bios (onep300, onep211, tenp211), onep300 by default. kick12.rom is loaded whichever variant is selected.",
            "required": true,
            "source_ref": "src/drivers/arcadia.c:352-354,717",
            "system": "arcadia-systems",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "description": "main CPU ROM",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "description": "microcontroller",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "description": "PROM",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/drivers/maxaflex.c:518-527,583",
            "system": "exidy-maxaflex",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              }
            ],
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/drivers/crystal.c:854-857,923",
            "system": "brezzasoft-crystal",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "description": "BIOS low byte",
                "name": "macsos_l.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "description": "BIOS high byte",
                "name": "macsos_h.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              }
            ],
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/drivers/macs.c:394-402,612",
            "system": "imax-macs",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e996bc18",
                "name": "vid.p1",
                "sha1": "49798165640627eb31024319353da04380787b10",
                "size": 65536
              }
            ],
            "name": "bctvidbs.zip",
            "required": true,
            "source_ref": "src/drivers/mpu4.c:2014-2017,2175",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          }
        ],
        "mame_version": "0.106",
        "mode": "standalone",
        "notes": "MAME 0.106 core (src/version.c:12) carrying its own video layer and driver\nbackports from later MAME releases. Twenty-six BIOS root sets, each a\nNOT_A_DRIVER entry (src/driver.h:180) registered in src/mamedriv.c.\nsrc/drivers/macs.c:613 declares a twenty-seventh, macs2bios, that\nsrc/mamedriv.c never registers, so no build reaches it and the five MACS\ngames all parent to macsbios. The set is unchanged between release 5.0 and\nthe profiled commit.\n\nROM archives are searched under dir_rom, defaulting to $home/rom:$data/rom\non Linux and Mac OS X and to rom on DOS and Windows, in the forms\nDIR/GAME/ROM.EXT, DIR/GAME.zip/ROM.EXT and DIR/GAME/ROM.zip/ROM\n(advance/osd/fileio.c:74, doc/advmame.d:680,699-701). $home is $ADVANCE, or\n$HOME/.advance when that variable is unset (doc/advmame.d:503-509). Each ROM\nis looked up along the parent chain (src/romload.c:481-483), so a child game\nreads its BIOS from the root set's own archive, which has to sit beside the\ngame archive. Inside an archive a member is matched by name, then by its\nprintable CRC32 (src/fileio.c:1213-1223).\n\nNo BIOS ROM carries ROM_OPTIONAL or a no-good-dump marker, so a missing one\ncounts as an error rather than a warning and aborts with \"required files are\nmissing, the game cannot be run\" (src/romload.c:248-268,385-388). Loaded\nROMs are checked for exact length and against the declared CRC32 and SHA1,\nboth mismatches being warnings (src/romload.c:327-363).\n\nWhere a system offers several BIOS revisions, SYSTEM_BIOS_ADD names them and\nmisc_bios selects one, entry 0 being the default (doc/advmame.d:2086-2094).\nOnly the selected revision is read; the others share the archive as\nalternatives. Neo Geo lists MVS revisions alone, the AES, Universe and debug\nentries being commented out (src/drivers/neogeo.c:1420-1423,1439-1442).\n\nThe support files sit directly in $home or $data\n(advance/osd/fileio.c:81,88-90, advance/linux/file.c:249-256). A language\nfile is read too, under whatever name misc_languagefile carries\n(advance/osd/glue.c:715-716); the project ships none, English being built\ninto the binary (src/ui_text.c:263-265). Samples and\nartwork are per-game archives under dir_sample and dir_artwork, ZIP only,\nnamed after the driver: WAV members for samples\n(src/sound/samples.c:198-200), a <driver>.art layout and its PNGs for\nartwork (src/artwork.c:2119,2224).\n\nmisc_historyfile and misc_infofile were retired and are discarded when found\nin a configuration file (advance/osd/emu.c:517-518), leaving history.dat and\nmameinfo.dat unread. options.controller is pinned to zero\n(advance/osd/glue.c:708), so no controller file is read either. blitmax.dat,\nstartup.dat and help.dat are compiled into the binary\n(advance/osd/video.c:1787,1795, advance/osd/ui.c:1575).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/amadvance/advancemame",
        "source_commit": "0f6a7677ad42b4dfdfa36b046f74bef5238d5837",
        "systems": [
          "snk-neogeo-mvs",
          "igs-pgm",
          "sega-stv",
          "sega-megaplay",
          "sega-megatech",
          "deco-cassette",
          "nintendo-playch10",
          "nintendo-nss",
          "super-kaneko-nova",
          "konami-gx",
          "konami-gv",
          "century-cvs",
          "capcom-zn1",
          "capcom-zn2",
          "tecmo-tps",
          "taito-fx1",
          "eighting-zn1",
          "atlus-zn1",
          "atari-zn1",
          "acclaim-zn1",
          "hyper-neogeo64",
          "arcadia-systems",
          "exidy-maxaflex",
          "brezzasoft-crystal",
          "imax-macs"
        ],
        "type": "standalone",
        "upstream": "https://www.mamedev.org"
      }
    },
    {
      "id": "aethersx2",
      "profile": {
        "bios_directory": "bios/",
        "bios_mode": "agnostic",
        "core_classification": "community_fork",
        "core_version": "1.5-3939",
        "cores": [
          "aethersx2",
          "aethersx2-sa"
        ],
        "display_name": "Sony - PlayStation 2 (AetherSX2)",
        "emulator": "AetherSX2",
        "files": [
          {
            "description": "PS2 BIOS image",
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "ps2-0230a-20080220.bin",
            "note": "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; an image named in the configuration skips both that range and the romdir test.",
            "path": "bios/ps2-0230a-20080220.bin",
            "required": true,
            "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, aethersx2/pcsx2/ps2/BiosTools.cpp:272-316, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45ffc",
            "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:192-218, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45b44, aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7184"
          },
          {
            "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:192-218, aethersx2 v1.5-3606 usr/share/aethersx2 0xa45d50, aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7338"
          },
          {
            "description": "Console NVRAM",
            "hle_fallback": true,
            "name": "ps2-0230a-20080220.nvm",
            "note": "Read at the BIOS path with the extension replaced by nvm. Carries the console id, the iLink id, the language and the OSD configuration. A 1024 byte image is written when the file is missing or shorter, zeroed except for a fixed iLink id and the language defaults of the BIOS region.",
            "path": "bios/ps2-0230a-20080220.nvm",
            "required": false,
            "size": 1024,
            "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:158-197, aethersx2 v1.5-3606 usr/share/aethersx2 0x95d8e0"
          },
          {
            "description": "Mechacon version",
            "hle_fallback": true,
            "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,
            "size": 4,
            "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, aethersx2 v1.5-3606 usr/share/aethersx2 0x95e7fc"
          },
          {
            "description": "DEV9 EEPROM",
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "Opened from the working directory when the network adapter starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing or cannot be mapped.",
            "required": false,
            "size": 64,
            "source_ref": "aethersx2/pcsx2/DEV9/DEV9.cpp:146-161, aethersx2 v1.5-3606 usr/share/aethersx2 0x97ac90"
          },
          {
            "description": "DEV9 SmartMedia flash image",
            "hle_fallback": true,
            "max_size": 8650752,
            "name": "flash.dat",
            "note": "Opened from the working directory at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent, and a short read is logged.",
            "required": false,
            "source_ref": "aethersx2/pcsx2/DEV9/flash.cpp:76-104, aethersx2 v1.5-3606 usr/share/aethersx2 0x97ac40"
          },
          {
            "bundled": true,
            "description": "Game database",
            "name": "GameIndex.yaml",
            "note": "Read from the resources folder, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder and reparsed whenever the modification time moves.",
            "path": "resources/GameIndex.yaml",
            "required": false,
            "source_ref": "aethersx2/pcsx2/GameDatabase.cpp:35-36, aethersx2/pcsx2/GameDatabase.cpp:348-352, aethersx2/pcsx2/GameDatabase.cpp:523-535"
          },
          {
            "description": "Widescreen patch archive",
            "name": "cheats_ws.zip",
            "note": "Per-game pnach entries matched on the disc CRC, loaded when widescreen patches are enabled. The cheats_ws folder takes precedence and the archive is skipped when it holds a match. Shipped by the Linux and Android builds; the macOS build looks for it without carrying one.",
            "path": "resources/cheats_ws.zip",
            "required": false,
            "source_ref": "aethersx2/pcsx2/Patch.cpp:202-231, aethersx2 v1.5-3939 MacOS/AetherSX2"
          },
          {
            "description": "No-interlacing patch archive",
            "name": "cheats_ni.zip",
            "note": "Same form as cheats_ws.zip, loaded when no-interlacing patches are enabled, with the cheats_ni folder taking precedence. Shipped by the Linux and Android builds; the macOS build looks for it without carrying one.",
            "path": "resources/cheats_ni.zip",
            "required": false,
            "source_ref": "aethersx2/pcsx2/Patch.cpp:202-231, aethersx2 v1.5-3939 MacOS/AetherSX2"
          },
          {
            "bundled": true,
            "description": "SDL controller mapping database",
            "name": "game_controller_db.txt",
            "note": "Read from the resources folder and fed to SDL at input init. SDL falls back to its built-in mappings when the file cannot be read.",
            "path": "resources/game_controller_db.txt",
            "required": false,
            "source_ref": "aethersx2/pcsx2/PAD/Host/SDLJoystick.cpp:46, aethersx2 v1.5-3939 AetherSX2.app/Contents/Resources"
          }
        ],
        "notes": "PlayStation 2 emulator for ARM, built on PCSX2 and carrying its own AArch64\nrecompilers. The application itself is closed source; the PCSX2-derived files\nwere released separately as an LGPL tarball in which pcsx2/libAetherSX2.a\nholds the parts that stayed closed, and that drop sits on an earlier code line\nthan any released build, with no Vulkan renderer in its GS tree and the older\nasset set. Every name, path and size below was read from\nthe three builds that were distributed: v1.5-3939 for Apple Silicon macOS,\nv1.5-3668 for Android, and v1.5-3606 for AArch64 Linux, which ROCKNIX\nrepackages as aethersx2-sa. The three agree throughout.\nref: aethersx2/pcsx2/CMakeLists.txt:1585, aethersx2/pcsx2/Mdec.cpp:1\n\nA BIOS image is required and boot stops without one. It belongs in the bios\nfolder of the data directory, Library/Application Support/AetherSX2 on macOS\nand Android/data/xyz.aethersx2.android on Android, and the Folders section of\nPCSX2.ini names another path when set.\nref: aethersx2 v1.5-3939 MacOS/AetherSX2, aethersx2 archive/desktop/mac/README.md\n\nDetection is by content. The scan lists the BIOS folder with a *.* mask, keeps\nfiles between 4 and 8 MB, and accepts an image whose romdir carries a RESET\nentry followed by a readable ROMVER; the fifth ROMVER character gives the\nzone among T10K, Test, Japan, USA, Europe, HK, Free and China. An image named\nin the configuration is opened at its own path, without the size filter and\nwithout the romdir test. No name and no hash is matched anywhere. The image is\nread into the 4 MB ROM region and truncated to it, and one shorter than\n2465792 bytes turns 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-316,\n     aethersx2 v1.5-3606 usr/share/aethersx2 0xa45ffc,\n     aethersx2 v1.5-3939 MacOS/AetherSX2 0x1006e7650\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.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:192-218,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:158-197\n\nThe network adapter opens eeprom.dat and flash.dat from the working directory,\nstanding in a compiled-in image for the first and a blank card for the second.\nDEV9hdd.raw is the default name of the empty disk image its settings page\nwrites.\nref: aethersx2/pcsx2/DEV9/DEV9.cpp:109-161,\n     aethersx2/pcsx2/DEV9/flash.cpp:76-104\n\nAn IRX named in the configuration is read into the ROM region at 0x3C0000 at\nboot. The field is empty by default and names no file of its own.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:327-328\n\nRead from the build's own resources folder and versioned with it: the shader\nsources each GS backend compiles at startup, the OSD and fullscreen interface\nfonts, the flag and placeholder textures, and the achievement notification\nsounds. The macOS build keeps the folder at AetherSX2.app/Contents/Resources\nand adds its Metal libraries; the Android build carries the shaders, fonts,\nicons and sounds as APK assets and draws its own interface.\nref: aethersx2 v1.5-3939 AetherSX2.app/Contents/Resources,\n     aethersx2 v1.5-3668 xyz.aethersx2.android assets\n",
        "profiled_date": "2026-08-11",
        "resources_directory": "resources/",
        "source": "https://github.com/Trixarian/AetherSX2",
        "source_commit": "1d1f795dfc70e38da67724c7298779260f513889",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/PCSX2/pcsx2"
      }
    },
    {
      "id": "altirra",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "4.40",
        "cores": [
          "altirra"
        ],
        "display_name": "Atari - 400/800/1200XL/XL/XE/XEGS/5200 (Altirra)",
        "emulator": "Altirra",
        "files": [
          {
            "crc32": "4248d3e3",
            "description": "Atari 5200 OS (4-port)",
            "hle_fallback": true,
            "name": "atari-5200-os-4port.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:25, src/Altirra/source/simulator.cpp:4800",
            "system": "atari-5200",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "c2ba2613",
            "description": "Atari 5200 OS (2-port)",
            "hle_fallback": true,
            "name": "atari-5200-os-2port.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:26, src/Altirra/source/simulator.cpp:4800",
            "system": "atari-5200",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "4bec4de2",
            "description": "Atari BASIC rev. A",
            "hle_fallback": true,
            "name": "atari-basic-rev-a.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:27, src/Altirra/source/simulator.cpp:4903-4912",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "f0202fb3",
            "description": "Atari BASIC rev. B",
            "hle_fallback": true,
            "name": "atari-basic-rev-b.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:28, src/Altirra/source/simulator.cpp:4903-4912",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "7d684184",
            "description": "Atari BASIC rev. C",
            "hle_fallback": true,
            "name": "atari-basic-rev-c.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:29, src/Altirra/source/simulator.cpp:4903-4912",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "c1b3bb02",
            "description": "Atari 400/800 OS-A NTSC",
            "hle_fallback": true,
            "name": "atari-800-os-a-ntsc.rom",
            "required": false,
            "size": 10240,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:30, src/Altirra/source/simulator.cpp:4796",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "72b3fed4",
            "description": "Atari 400/800 OS-A PAL",
            "hle_fallback": true,
            "name": "atari-800-os-a-pal.rom",
            "required": false,
            "size": 10240,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:31, src/Altirra/source/simulator.cpp:4796",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0e86d61d",
            "description": "Atari 400/800 OS-B NTSC",
            "hle_fallback": true,
            "name": "atari-800-os-b-ntsc.rom",
            "required": false,
            "size": 10240,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:32, src/Altirra/source/simulator.cpp:4796",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "3e28a1fe",
            "description": "Atari 400/800 OS-B NTSC (Xformer patched)",
            "hle_fallback": true,
            "name": "atari-800-os-b-ntsc-xformer.rom",
            "note": "OS-B patched by Xformer, reported as the OS-B specific firmware. Usually distributed as ATARIOSB.ROM (ATHelpFile/source/options-firmware.xml).",
            "required": false,
            "size": 10240,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:33, src/Altirra/source/simulator.cpp:4796",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0c913dfc",
            "description": "Atari 400/800 OS-B PAL",
            "hle_fallback": true,
            "name": "atari-800-os-b-pal.rom",
            "required": false,
            "size": 10240,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:34, src/Altirra/source/simulator.cpp:4796",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "c5c11546",
            "description": "Atari 1200XL OS rev. 10",
            "hle_fallback": true,
            "name": "atari-1200xl-os-rev-10.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:35, src/Altirra/source/simulator.cpp:4804",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1a1d7b1b",
            "description": "Atari 1200XL OS rev. 11",
            "hle_fallback": true,
            "name": "atari-1200xl-os-rev-11.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:36, src/Altirra/source/simulator.cpp:4804",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "643bcc98",
            "description": "Atari XL/XE OS ver.1",
            "hle_fallback": true,
            "name": "atari-xl-os-ver-1.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:37, src/Altirra/source/simulator.cpp:4810",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1f9cd270",
            "description": "Atari XL/XE OS ver.2",
            "hle_fallback": true,
            "name": "atari-xl-os-ver-2.rom",
            "note": "The common XL/XE OS, usually distributed as ATARIXL.ROM (ATHelpFile/source/options-firmware.xml).",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:38, src/Altirra/source/simulator.cpp:4810",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "29f133f7",
            "description": "Atari XL/XE OS ver.3",
            "hle_fallback": true,
            "name": "atari-xl-os-ver-3.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:39, src/Altirra/source/simulator.cpp:4810",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1eaf4002",
            "description": "Atari XL/XE/XEGS OS ver.4",
            "hle_fallback": true,
            "name": "atari-xegs-os-ver-4.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:40, src/Altirra/source/simulator.cpp:4814",
            "system": "xegs",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "bdca01fb",
            "description": "Atari XEGS Missile Command",
            "name": "atari-xegs-missile-command.rom",
            "note": "XEGS built-in game ROM.",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:41, src/Altirra/source/simulator.cpp:4921",
            "system": "xegs",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "a8953874",
            "description": "Black Box ver. 1.34",
            "name": "blackbox-1.34.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:43, src/Altirra/source/blackbox.cpp:352",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "91175314",
            "description": "Black Box ver. 1.41",
            "name": "blackbox-1.41.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:44, src/Altirra/source/blackbox.cpp:352",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "7cafd9a8",
            "description": "Black Box ver. 2.16",
            "name": "blackbox-2.16.rom",
            "note": "64K image. 16K images are accepted and bank-rotated (blackbox.cpp:355).",
            "required": false,
            "size": 65536,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:45, src/Altirra/source/blackbox.cpp:352",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "769cc316",
            "description": "Black Box Floppy Board v1.5",
            "name": "blackbox-floppy-board-1.5.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:47, src/Altirra/source/blackboxfloppy.cpp:289",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "7d68f07b",
            "description": "MIO ver. 1.1k (128Kbit)",
            "name": "mio-1.1k-128kbit.rom",
            "note": "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292).",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:49, src/Altirra/source/mio.cpp:275",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "00694a74",
            "description": "MIO ver. 1.1m (128Kbit)",
            "name": "mio-1.1m-128kbit.rom",
            "note": "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292).",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:50, src/Altirra/source/mio.cpp:275",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "a6a9e3d6",
            "description": "MIO ver. 1.41 (64Kbit)",
            "name": "mio-1.41-64kbit.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:51, src/Altirra/source/mio.cpp:275",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1d400131",
            "description": "MIO ver. 1.41 (128Kbit)",
            "name": "mio-1.41-128kbit.rom",
            "note": "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292).",
            "required": false,
            "size": 16384,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:52, src/Altirra/source/mio.cpp:275",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e2f4b3a8",
            "description": "MIO ver. 1.41 (256Kbit)",
            "name": "mio-1.41-256kbit.rom",
            "note": "Oversized EPROM dump: the loader takes the second 8K when the first 8K is blank (mio.cpp:277-292).",
            "required": false,
            "size": 32768,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:53, src/Altirra/source/mio.cpp:275",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "19227d33",
            "description": "Atari 810 firmware rev. B",
            "name": "atari-810-rev-b.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:54, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0896f03d",
            "description": "Atari 810 firmware rev. C",
            "name": "atari-810-rev-c.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:55, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "aad220f4",
            "description": "Atari 810 firmware rev. E",
            "name": "atari-810-rev-e.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:56, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "f9a7afb2",
            "description": "Atari 1050 firmware rev. E",
            "name": "atari-1050-rev-e.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:57, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "6d9d589b",
            "description": "Atari 1050 firmware rev. H",
            "name": "atari-1050-rev-h.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:58, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "91ba303d",
            "description": "Atari 1050 firmware rev. J",
            "name": "atari-1050-rev-j.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:59, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "3abe7ef4",
            "description": "Atari 1050 firmware rev. K",
            "name": "atari-1050-rev-k.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:60, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "fb4b8757",
            "description": "Atari 1050 firmware rev. L",
            "name": "atari-1050-rev-l.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:61, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "942ec3d5",
            "description": "Happy 810 pre-v7 firmware, 4K original (serial $4490)",
            "name": "happy-810-prev7-4k.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/uifirmware.cpp:528",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "143b8538",
            "description": "Happy 810 pre-v7 firmware, 4K non-original (serial $1704)",
            "name": "happy-810-prev7-4k-nonoriginal.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/uifirmware.cpp:528",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "f81b69cb",
            "description": "Happy 810 pre-v7 firmware, functional 3K inside a 6K image (serial $4B9B)",
            "name": "happy-810-prev7-3k.rom",
            "note": "The image is 6144 bytes; Altirra identifies it by a checksum taken over the functional 3K, which its firmware list reports as the size.\n",
            "required": false,
            "size": 6144,
            "source_ref": "src/Altirra/source/uifirmware.cpp:528",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "371f6973",
            "description": "Happy 810 firmware (v7, 6K functional ROM, modified)",
            "name": "happy-810-v7-6k-modified.rom",
            "note": "Modified variant of the 6K functional dump.",
            "required": false,
            "size": 6144,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:62, src/Altirra/source/diskdrivefull.cpp:1165-1234",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "9cc7a207",
            "description": "Happy 810 firmware (v7, 6K functional ROM)",
            "name": "happy-810-v7-6k.rom",
            "note": "Functional 6K region only; the loader also accepts 3K, 4K and 8K dumps.",
            "required": false,
            "size": 6144,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:63, src/Altirra/source/diskdrivefull.cpp:1165-1234",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "982d825d",
            "description": "Happy 810 firmware (v7, 8K full ROM)",
            "name": "happy-810-v7-8k.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:64, src/Altirra/source/diskdrivefull.cpp:1165-1234",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "19b6bfe5",
            "description": "Happy 1050 firmware rev. 1",
            "name": "happy-1050-rev-1.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:65, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "f76eae16",
            "description": "Happy 1050 firmware rev. 2",
            "name": "happy-1050-rev-2.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:66, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "739bab74",
            "description": "ATR8000 firmware ver 3.02",
            "name": "atr8000-3.02.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:67, src/Altirra/source/diskdriveatr8000.cpp:450",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "d125caad",
            "description": "Indus GT firmware ver. 1.1",
            "name": "indus-gt-1.1.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:68, src/Altirra/source/diskdriveindusgt.cpp:52",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "d8504b4a",
            "description": "Indus GT firmware ver. 1.2",
            "name": "indus-gt-1.2.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:69, src/Altirra/source/diskdriveindusgt.cpp:52",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "605b7153",
            "description": "US Doubler firmware rev. L",
            "name": "us-doubler-rev-l.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:70, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0126a511",
            "description": "810 Turbo firmware V1.2",
            "name": "810-turbo-1.2.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:71, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "5a396459",
            "description": "Percom RFD V1.00",
            "name": "percom-rfd-1.00.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:72, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e2d4a05c",
            "description": "Percom RFD V1.10",
            "name": "percom-rfd-1.10.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:73, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "c6c73d23",
            "description": "Percom RFD V1.20",
            "name": "percom-rfd-1.20.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:74, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "ac141045",
            "description": "Percom RFD V2.10",
            "name": "percom-rfd-2.10.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:75, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "2ab65122",
            "description": "Astra 1001/1620 (based on Percom RFD V1.10)",
            "name": "astra-1001-1620.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:76, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "2372fae6",
            "description": "Percom AT-88 V1.2 (460-0066-001)",
            "name": "percom-at-88-1.2.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:77, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "fd13a674",
            "description": "Percom AT-88 V1.2 (damaged) (460-0066-001)",
            "name": "percom-at-88-1.2-damaged.rom",
            "note": "Damaged dump of the same EPROM as percom-at-88-1.2.rom.",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:78, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "518900e6",
            "description": "Percom AT88-SPD V1.01 (0073)",
            "name": "percom-at88-spd-1.01.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:79, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "87a0d7e7",
            "description": "Percom AT88-SPD V1.11 (1-9-84)",
            "name": "percom-at88-spd-1.11.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:80, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "fc6675f2",
            "description": "Percom AT88-SPD V1.21 (5-4-84)",
            "name": "percom-at88-spd-1.21.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:81, src/Altirra/source/diskdrivepercom.cpp:88-92",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "55dfc9ac",
            "description": "1050 Turbo II V3.4",
            "name": "1050-turbo-ii-3.4.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:82, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "4a69312b",
            "description": "1050 Turbo II V3.5",
            "name": "1050-turbo-ii-3.5.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:83, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1527d542",
            "description": "Atari 815 firmware",
            "name": "atari-815.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:84, src/Altirra/source/diskdrive815.cpp:352",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "87809326",
            "description": "Atari 1090 80-column firmware rev. 9",
            "name": "atari-1090-firmware-rev-9.rom",
            "note": "The predefined internal 1090 firmware resolves to no resource, so this image has no fallback (firmwaremanager.cpp:190-211).",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:85, src/Altirra/source/1090.cpp:172",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "8f07d9a0",
            "description": "Atari 1090 80-column charset",
            "hle_fallback": true,
            "name": "atari-1090-charset.rom",
            "note": "Character generator. Synthesised from the internal XL kernel charset when absent (firmwaremanager.cpp:258-268).",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:86, src/Altirra/source/1090.cpp:179",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "b9d576da",
            "description": "Bit 3 Full-View 80 firmware",
            "name": "bit3-full-view-80-firmware.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:87, src/Altirra/source/bit3.cpp:173",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "738c6ac1",
            "description": "Bit 3 Full-View 80 charset",
            "name": "bit3-full-view-80-charset.rom",
            "note": "Character generator.",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:88, src/Altirra/source/bit3.cpp:180",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "a4534cea",
            "description": "Bit 3 Full-View 80 charset (4K overdump)",
            "name": "bit3-full-view-80-charset-4k.rom",
            "note": "4K overdump carrying 2K of unique data (firmwaredetect.cpp:90).",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:91, src/Altirra/source/bit3.cpp:180",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "fc02766b",
            "description": "XF551 rev. 7.4",
            "name": "xf551-7.4.rom",
            "note": "8K image; the loader reads the first 4K and splits it into two 2K banks.",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:93, src/Altirra/source/diskdrivexf551.cpp:269-276",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "38b97ae3",
            "description": "XF551 rev. 7.7",
            "name": "xf551-7.7.rom",
            "note": "8K image; the loader reads the first 4K and splits it into two 2K banks.",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:94, src/Altirra/source/diskdrivexf551.cpp:269-276",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "37dda8b1",
            "description": "XF551 rev. 7.7 (w/broken density hack)",
            "name": "xf551-7.7-density-hack.rom",
            "note": "Half-size dump with the density hack broken.",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:95, src/Altirra/source/diskdrivexf551.cpp:269-276",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0e117428",
            "description": "XF551 rev. 7.7 (modified for 720K 3.5\")",
            "name": "xf551-7.7-720k.rom",
            "note": "Modified for 720K 3.5\" drives. 8K image; the loader reads the first 4K and splits it into two 2K banks.",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:96, src/Altirra/source/diskdrivexf551.cpp:269-276",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "2ba701df",
            "description": "1400XL V:/T: handler firmware (unknown v1)",
            "name": "1400xl-handler-v1.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:98, src/Altirra/source/1400xl.cpp:551-555",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "5ec3ec7d",
            "description": "1400XL V:/T: handler firmware (unknown v2)",
            "name": "1400xl-handler-v2.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:99, src/Altirra/source/1400xl.cpp:551-555",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "7773b7dd",
            "description": "1450XLD disk controller firmware",
            "name": "1450xld-disk-controller.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:101, src/Altirra/source/1450xld.cpp:753-758",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "03930886",
            "description": "1450XLD \"TONG\" disk controller firmware",
            "name": "1450xld-tong-disk-controller.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:102, src/Altirra/source/1450xld.cpp:753-758",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e8f9c8a7",
            "description": "1450XLD disk handler firmware (rev. E)",
            "name": "1450xld-disk-handler-rev-e.rom",
            "note": "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179).",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:103, src/Altirra/source/1450xld.cpp:738-742",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "4bb7fa3a",
            "description": "1450XLD disk handler firmware (rev. F)",
            "name": "1450xld-disk-handler-rev-f.rom",
            "note": "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179).",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:104, src/Altirra/source/1450xld.cpp:738-742",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "29359910",
            "description": "1450XLD disk handler firmware (post rev. F)",
            "name": "1450xld-disk-handler-post-rev-f.rom",
            "note": "The image is 4K; the loader reads its first 2K into mFirmware (1450xld.h:179).",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:105, src/Altirra/source/1450xld.cpp:738-742",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "d6dd4f41",
            "description": "Atari 835 internal 8048 firmware",
            "name": "atari-835-internal.rom",
            "required": false,
            "size": 1024,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:107, src/Altirra/source/1030full.cpp:282",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "329b1d5b",
            "description": "Atari 1030 internal 8050 firmware",
            "name": "atari-1030-internal.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:109, src/Altirra/source/1030full.cpp:300",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "7abdb8e7",
            "description": "Atari 1030 external ROM firmware",
            "name": "atari-1030-external.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:110, src/Altirra/source/1030full.cpp:301",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "79e0fea4",
            "description": "Atari 820 firmware",
            "name": "atari-820.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:112, src/Altirra/source/820full.cpp:206",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "46d194b4",
            "description": "Atari 1025 firmware",
            "name": "atari-1025.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:113, src/Altirra/source/1025full.cpp:227",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "19c4f811",
            "description": "Atari 1029 firmware (English)",
            "name": "atari-1029-english.rom",
            "note": "English character set variant.",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:114, src/Altirra/source/1029full.cpp:233",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "2cf990b9",
            "description": "Atari 850 firmware",
            "name": "atari-850.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:116, src/Altirra/source/850full.cpp:316",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "9201359a",
            "description": "Atari 850 firmware (early revision)",
            "name": "atari-850-early.rom",
            "note": "Early 850 revision.",
            "required": false,
            "size": 4096,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:117, src/Altirra/source/850full.cpp:316",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "597eb2e4",
            "description": "Speedy XF v1.7",
            "name": "speedy-xf-1.7.rom",
            "note": "32K image, cloned to 64K by the loader (diskdrivespeedyxf.cpp:363-364).",
            "required": false,
            "size": 32768,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:119, src/Altirra/source/diskdrivespeedyxf.cpp:353-364",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "554a9067",
            "description": "Speedy XF v1.8",
            "name": "speedy-xf-1.8.rom",
            "note": "32K image, cloned to 64K by the loader (diskdrivespeedyxf.cpp:363-364).",
            "required": false,
            "size": 32768,
            "source_ref": "src/Altirra/source/firmwaredetect.cpp:120, src/Altirra/source/diskdrivespeedyxf.cpp:353-364",
            "system": "atari-400-800",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "810 Archiver disk drive firmware",
            "max_size": 4096,
            "name": "810-archiver.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:528, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "1050 Duplicator disk drive firmware",
            "max_size": 8192,
            "name": "1050-duplicator.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:532, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "Speedy 1050 disk drive firmware",
            "max_size": 16384,
            "name": "speedy-1050.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:534, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "Super Archiver disk drive firmware",
            "max_size": 4096,
            "name": "super-archiver.rom",
            "note": "Shared by the Super Archiver and Super Archiver with BitWriter device types (diskdrivefull.cpp:1173-1174).",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:536, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "TOMS 1050 disk drive firmware",
            "max_size": 8192,
            "name": "toms-1050.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:537, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "Tygrys 1050 disk drive firmware",
            "max_size": 4096,
            "name": "tygrys-1050.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:538, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "1050 Turbo disk drive firmware",
            "max_size": 16384,
            "name": "1050-turbo.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:540, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "I.S. Plate disk drive firmware",
            "max_size": 4096,
            "name": "is-plate.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:542, src/Altirra/source/diskdrivefull.cpp:1165-1213",
            "system": "atari-400-800"
          },
          {
            "description": "Amdek AMDC-I/II disk drive firmware",
            "max_size": 4096,
            "name": "amdek-amdc.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:548, src/Altirra/source/diskdriveamdc.cpp:88",
            "system": "atari-400-800"
          },
          {
            "description": "Ultimate1MB firmware",
            "hle_fallback": true,
            "max_size": 524288,
            "name": "ultimate1mb.rom",
            "note": "Altirra U1MB Recovery OS is used when no image is registered.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:555, src/Altirra/source/simulator.cpp:4985-4996, src/Altirra/source/ultimate1mb.cpp:237-242",
            "system": "atari-400-800"
          },
          {
            "description": "MyIDE-II cartridge firmware",
            "max_size": 524288,
            "name": "myide2.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:556, src/Altirra/source/myide.cpp:304-315",
            "system": "atari-400-800"
          },
          {
            "description": "SIDE cartridge firmware",
            "max_size": 524288,
            "name": "side.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:557, src/Altirra/source/side.cpp:283-294",
            "system": "atari-400-800"
          },
          {
            "description": "SIDE 2 cartridge firmware",
            "max_size": 524288,
            "name": "side2.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:558, src/Altirra/source/side.cpp:283-294",
            "system": "atari-400-800"
          },
          {
            "description": "SIDE 3 cartridge firmware",
            "max_size": 8388608,
            "name": "side3.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:559, src/Altirra/source/side3.cpp:448-460",
            "system": "atari-400-800"
          },
          {
            "description": "KMK/JZ IDE BIOS",
            "max_size": 3072,
            "name": "kmkjz-ide.rom",
            "note": "The v1 device exposes 0xC00 of its flash, so the loader reads only that much.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:560, src/Altirra/source/kmkjzide.cpp:357-394",
            "system": "atari-400-800"
          },
          {
            "description": "KMK/JZ IDE 2 (IDEPlus) main firmware",
            "max_size": 131072,
            "name": "kmkjz-ide2-main.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:561, src/Altirra/source/kmkjzide.cpp:357-394",
            "system": "atari-400-800"
          },
          {
            "description": "KMK/JZ IDE 2 (IDEPlus) SpartaDOS X firmware",
            "max_size": 524288,
            "name": "kmkjz-ide2-sdx.rom",
            "note": "Two revisions circulate, SDX 4.45 and 4.47; the collection carries 4.47.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:562, src/Altirra/source/kmkjzide.cpp:357-394",
            "system": "atari-400-800"
          },
          {
            "description": "Atari 1030 modem download image",
            "hle_fallback": true,
            "max_size": 10368,
            "name": "atari-1030-download.rom",
            "note": "Altirra builds its own download image from src/Kernel/source/1030/firmware.s when none is registered.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:568, src/Altirra/source/1030.cpp:1162",
            "system": "atari-400-800"
          },
          {
            "description": "Rapidus accelerator flash firmware",
            "hle_fallback": true,
            "max_size": 524288,
            "name": "rapidus-flash.rom",
            "note": "Altirra Rapidus Bootstrap Flash is used when no image is registered.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:571, src/Altirra/source/rapidus.cpp:338",
            "system": "atari-400-800"
          },
          {
            "description": "Rapidus 65C816 core PBI firmware",
            "hle_fallback": true,
            "max_size": 2048,
            "name": "rapidus-core-pbi.rom",
            "note": "Altirra Rapidus Bootstrap 65816 PBI Firmware is used when no image is registered.",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:572, src/Altirra/source/rapidus.cpp:339",
            "system": "atari-400-800"
          },
          {
            "description": "APE Warp+ OS 32-in-1 firmware",
            "max_size": 524288,
            "name": "ape-warp-os.rom",
            "required": false,
            "source_ref": "src/Altirra/source/uifirmware.cpp:573, src/Altirra/source/warpos.cpp:115",
            "system": "atari-400-800"
          },
          {
            "bundled": true,
            "description": "Altirra help file",
            "name": "Altirra.chm",
            "note": "Opened from the program directory when help is requested.",
            "required": false,
            "source_ref": "src/Altirra/source/oshelper.cpp:509-529",
            "system": "atari-400-800"
          },
          {
            "bundled": true,
            "description": "Altirra Additions disk",
            "name": "Additions.atr",
            "note": "Disk image carrying the handler software several emulated devices need: ALTXEP80.SYS for the XEP80, BOOT850.COM for the 850 interface, BOOT1030.COM for the 1030 modem, ATDEBUGX.SYS for the debug link. The user mounts it as an ordinary disk image.\n",
            "required": false,
            "source_ref": "src/ATHelpFile/source/additions.xml:3-10, src/Altirra/source/uidevices.cpp:252, src/Altirra/source/uidevices.cpp:486",
            "system": "atari-400-800"
          }
        ],
        "profiled_date": "2026-08-11",
        "source": "https://www.virtualdub.org/altirra.html",
        "systems": [
          "atari-400-800",
          "xegs",
          "atari-5200"
        ],
        "type": "standalone",
        "upstream": "https://www.virtualdub.org/altirra.html"
      }
    },
    {
      "id": "amiarcadia",
      "profile": {
        "core_classification": "official_port",
        "core_version": "4.42",
        "cores": [
          "amiarcadia",
          "winarcadia"
        ],
        "display_name": "Arcadia 2001 / Interton VC 4000 (AmiArcadia)",
        "emulator": "amiarcadia",
        "files": [],
        "notes": "No BIOS or firmware files required. firmware_count=0 confirmed by source.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/warmenhoven/amiarcadia",
        "source_commit": "4b84422985457b53dcc22ab46f525d7c34d3e51f",
        "systems": [
          "emerson-arcadia-2001",
          "interton-vc4000",
          "elektor-tv-games-computer"
        ],
        "type": "libretro",
        "upstream": "https://amigan.1emu.net/releases/"
      }
    },
    {
      "id": "amiberry",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v8.1.2",
        "cores": [
          "amiberry"
        ],
        "display_name": "Commodore - Amiga (Amiberry)",
        "emulator": "Amiberry",
        "files": [
          {
            "name": "kick13.rom",
            "note": "A500 Kickstart v1.3 rev 34.005, default for A500 model",
            "required": true,
            "size": 262144,
            "source_ref": "libretro/libretro.cpp:1776 (candidates_a500)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick12.rom",
            "note": "A500 Kickstart v1.2 rev 33.180, for A500OG model",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro.cpp:1775 (candidates_a500og)",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "kick204.rom"
            ],
            "name": "kick20.rom",
            "note": "A500+ Kickstart v2.04 rev 37.175",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:1777 (candidates_a500p)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick205.rom",
            "note": "A600 Kickstart v2.05 rev 37.350, also used for WHDLoad",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:1778 (candidates_a600)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick31.rom",
            "note": "Kickstart v3.1 (generic), first candidate for A1200 and A4000",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:1779-1780 (candidate arrays)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick40068.A1200",
            "note": "A1200 Kickstart v3.1 rev 40.68, fallback after kick31.rom",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:758 (option label), libretro/libretro.cpp:1779 (candidates_a1200)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick40068.A4000",
            "note": "A4000 Kickstart v3.1 rev 40.68, fallback after kick31.rom",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:759 (option label), libretro/libretro.cpp:1780 (candidates_a4000)",
            "system": "commodore-amiga"
          },
          {
            "name": "kick.rom",
            "note": "Generic name, any Kickstart ROM. Last resort fallback for all models.",
            "required": false,
            "source_ref": "libretro/libretro.cpp:1769-1774 (candidates_generic)",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-cd32.rom",
              "kick40060.CD32"
            ],
            "name": "cd32.rom",
            "note": "CD32 Kickstart v3.1 rev 40.60",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:1781 (candidates_cd32)",
            "system": "commodore-cd32"
          },
          {
            "aliases": [
              "amiga-ext-310-cd32.rom",
              "CD32 Extended.ROM"
            ],
            "name": "cd32ext.rom",
            "note": "CD32 extended ROM rev 40.60. Not needed if using a combined 1MB ROM.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro.cpp:1839 (candidates_cd32 in find_ext_rom_in_system_dir)",
            "system": "commodore-cd32"
          },
          {
            "aliases": [
              "kick34005.CDTV"
            ],
            "name": "cdtv.rom",
            "note": "CDTV extended ROM v1.00, used as kickstart candidate",
            "required": false,
            "source_ref": "libretro/libretro.cpp:1782 (candidates_cdtv)",
            "system": "commodore-cdtv"
          },
          {
            "aliases": [
              "CDTV Extended.ROM"
            ],
            "name": "cdtvext.rom",
            "note": "CDTV extended ROM file",
            "required": false,
            "source_ref": "libretro/libretro.cpp:1841 (candidates_cdtv in find_ext_rom_in_system_dir)",
            "system": "commodore-cdtv"
          },
          {
            "hle_fallback": true,
            "name": "aros-ext.bin",
            "note": "AROS extended ROM replacement, used when no Kickstart ROM is found. Looked up in the configured ROM directories, and only in a directory that also holds aros-rom.bin.\n",
            "required": false,
            "source_ref": "src/memory.cpp:1933 (paired existence check), src/memory.cpp:1958-1959 (load)",
            "system": "commodore-amiga"
          },
          {
            "hle_fallback": true,
            "name": "aros-rom.bin",
            "note": "AROS main ROM replacement, used with aros-ext.bin as Kickstart fallback. Looked up in the configured ROM directories, and only in a directory that also holds aros-ext.bin.\n",
            "required": false,
            "source_ref": "src/memory.cpp:1934 (paired existence check), src/memory.cpp:1987-1988 (load)",
            "system": "commodore-amiga"
          },
          {
            "name": "rom.key",
            "note": "Decryption key for Cloanto Amiga Forever encrypted ROMs",
            "required": false,
            "source_ref": "src/rommgr.cpp:1444-1525",
            "system": "commodore-amiga"
          },
          {
            "name": "6570-036.rom",
            "note": "6500-1/6570-036 keyboard MCU ROM for A500/A600/A1000 models",
            "required": false,
            "size": 2048,
            "source_ref": "src/kbmcu/keyboard_mcu_6500_1.cpp:385-408, src/rommgr.cpp:126",
            "system": "commodore-amiga"
          },
          {
            "name": "68HC05.rom",
            "note": "68HC05 keyboard MCU ROM for A1200",
            "required": false,
            "size": 8192,
            "source_ref": "src/kbmcu/keyboard_mcu_6805.cpp:544-567, src/rommgr.cpp:128",
            "system": "commodore-amiga"
          },
          {
            "name": "D8039HLC.rom",
            "note": "D8039HLC keyboard MCU ROM for A2000",
            "required": false,
            "size": 2048,
            "source_ref": "src/kbmcu/keyboard_mcu_d8039hlc.cpp:235-258, src/rommgr.cpp:130",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "mt32-roms/ctrl_mt32.rom",
              "mt32-roms/ctrl_mt32_1_07.rom",
              "mt32-roms/ctrl_mt32_1_06.rom",
              "mt32-roms/ctrl_mt32_1_05.rom",
              "mt32-roms/ctrl_mt32_1_04.rom",
              "mt32-roms/ctrl_mt32_bluer.rom",
              "mt32-roms/ctrl_mt32_2_04.rom",
              "mt32-roms/ctrl_mt32_2_07.rom",
              "mt32-roms/ctrl_mt32_2_06.rom",
              "mt32-roms/ctrl_mt32_2_03.rom"
            ],
            "name": "mt32-roms/mt32_control.rom",
            "note": "Roland MT-32 control ROM for Munt MIDI emulation",
            "required": false,
            "source_ref": "src/midiemu.cpp:38-62, src/midiemu.cpp:151-156",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "mt32-roms/mt32_pcm.rom"
            ],
            "name": "mt32-roms/pcm_mt32.rom",
            "note": "Roland MT-32 PCM ROM for Munt MIDI emulation",
            "required": false,
            "source_ref": "src/midiemu.cpp:133-140",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "mt32-roms/ctrl_cm32l.rom",
              "mt32-roms/ctrl_cm32ln_1_00.rom",
              "mt32-roms/ctrl_cm32l_1_02.rom",
              "mt32-roms/ctrl_cm32l_1_00.rom"
            ],
            "name": "mt32-roms/cm32l_control.rom",
            "note": "Roland CM-32L control ROM for Munt MIDI emulation",
            "required": false,
            "source_ref": "src/midiemu.cpp:25-37, src/midiemu.cpp:151-156",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "mt32-roms/cm32l_pcm.rom"
            ],
            "name": "mt32-roms/pcm_cm32l.rom",
            "note": "Roland CM-32L PCM ROM for Munt MIDI emulation",
            "required": false,
            "source_ref": "src/midiemu.cpp:142-149",
            "system": "commodore-amiga"
          }
        ],
        "notes": "Amiberry is an Amiga emulator based on WinUAE, available as both standalone\nand libretro core. No built-in kickstart — requires a real Kickstart ROM or\nexternal AROS replacement files (aros-ext.bin + aros-rom.bin).\n\nLibretro core option \"amiberry_kickstart\" overrides ROM selection: auto,\nkick.rom, kick13.rom, kick20.rom, kick31.rom, kick205.rom, kick40068.A1200,\nkick40068.A4000, cd32.rom, cdtv.rom. \"auto\" selects per model.\nref: libretro/libretro.cpp:679,745-764\n\nLibretro Kickstart directory detection (in order): save_dir/Kickstarts,\nsave_dir/whdboot/save-data/Kickstarts, system_dir/Kickstarts,\nsystem_dir/whdboot/save-data/Kickstarts,\nsystem_dir/amiberry/whdboot/save-data/Kickstarts,\nsystem_dir/save-data/Kickstarts, else system_dir. system_dir stays first\nin the ROM multipath, the detected directory follows it.\nref: libretro/libretro.cpp:4088-4126\n\nStandalone ROM path: configurable via amiberry.conf \"rom_path\" setting.\nBatocera sets this to /userdata/bios/amiga/. Fallback search order:\n{home_dir}/roms/kick.rom, {home_dir}/kick.rom, ../shared/rom/kick.rom,\n../System/rom/kick.rom, then ROM database guess.\nref: src/memory.cpp:2104-2146\n\nROM identification uses SHA1 against the WinUAE ROM database but does\nnot reject unknown ROMs. Cloanto encrypted ROMs supported with rom.key.\nref: src/rommgr.cpp:121-1109,1745-1801\n\nMunt MT-32/CM-32L emulation compiled in (WITH_MIDIEMU). ROMs loaded from\nmt32-roms/ subdirectory of the ROM path. Split ROM pairs supported\n(e.g. pcm_mt32_l.rom + pcm_mt32_h.rom).\nref: src/midiemu.cpp:82-165\n\nKeyboard MCU emulation (keyboard_mode setting) loads MCU ROMs via ROM\ndatabase scanning. Three MCU types supported: 6570-036 (A500/A600/A1000),\n68HC05 (A1200), D8039HLC (A2000).\nref: src/kbmcu/keyboard_mcu_6500_1.cpp:385, keyboard_mcu_6805.cpp:544,\nkeyboard_mcu_d8039hlc.cpp:235\n\nWHDLoad autoboot requires whdboot/ directory with boot-data.zip, WHDLoad,\nAmiQuit, JST, whdload_db.xml. These ship with the standalone build but must\nbe obtained separately for the libretro core.\nref: src/osdep/amiberry_whdbooter.cpp:1601-1873\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/BlitterStudio/amiberry",
        "source_commit": "b98e9afc1d55d5e53bdb9abcbcf96535d280e9a3",
        "systems": [
          "commodore-amiga",
          "commodore-cd32",
          "commodore-cdtv"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/tonioni/WinUAE"
      }
    },
    {
      "id": "anarch",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.1d",
        "cores": [
          "anarch"
        ],
        "display_name": "Anarch",
        "emulator": "Anarch",
        "files": [],
        "notes": "Public domain suckless FPS game by Miloslav Ciz (drummyfish). Libretro port by iyzsong. All game data (levels, textures, sounds) compiled into the binary via header files. No external files required.\n",
        "profiled_date": "2026-03-22",
        "source": "https://codeberg.org/iyzsong/anarch-libretro",
        "source_commit": "c0c0b78e5c30644019f7d4fcdddfed4f22db24d7",
        "systems": [],
        "type": "libretro",
        "upstream": "https://gitlab.com/drummyfish/anarch"
      }
    },
    {
      "id": "applewin",
      "profile": {
        "analysis": {
          "embedded_roms": {
            "accessor": "GNUFrame::GetResourceData() -> apple2roms::data map",
            "build_system": "CMake add_resources() in resource/CMakeLists.txt",
            "peripheral_firmware": [
              {
                "filename": "DISK2-13sector.rom",
                "id": "IDR_DISK2_13SECTOR_FW",
                "md5": "4f80448507cf43ab40c17ac08d89e278",
                "note": "Disk II 13-sector controller ROM (256 B)",
                "sha1": "afd060e6f35faf3bb0146fa889fc787adf56330a",
                "size": 256
              },
              {
                "filename": "DISK2.rom",
                "id": "IDR_DISK2_16SECTOR_FW",
                "md5": "2020aa1413ff77fe29353f3ee72dc295",
                "note": "Disk II 16-sector controller ROM (256 B)",
                "sha1": "d4181c9f046aafc3fb326b381baac809d9e38d16",
                "size": 256
              },
              {
                "filename": "SSC.rom",
                "id": "IDR_SSC_FW",
                "md5": "67c0d61ab0911183faf05270f881a97e",
                "note": "Super Serial Card firmware (2 KB)",
                "sha1": "6dab633470c6bc4cb3e81d09fda46597caf8ee57",
                "size": 2048
              },
              {
                "filename": "Hddrvr.bin",
                "id": "IDR_HDDRVR_FW",
                "md5": "e0a40e9166af27b16f60beb83c9233f0",
                "note": "Hard disk controller firmware v1 (256 B)",
                "sha1": "69667800c54da1d4466e7b2168c0e418a4cf586c",
                "size": 256
              },
              {
                "filename": "Hddrvr-v2.bin",
                "id": "IDR_HDDRVR_V2_FW",
                "md5": "a49e45e7a6d4de23e0845a59c7e31e0c",
                "note": "Hard disk controller firmware v2 (256 B)",
                "sha1": "06115eebb4d58221b5c062a42bf3e41e137447ed",
                "size": 256
              },
              {
                "filename": "HDC-SmartPort.bin",
                "id": "IDR_HDC_SMARTPORT_FW",
                "md5": "2592efa1d34ade55d490a1b39911c9b2",
                "note": "SmartPort hard disk controller firmware (256 B)",
                "sha1": "fd557998fd5823ad69a42ad1282e4fe47db02dca",
                "size": 256
              },
              {
                "filename": "Parallel.rom",
                "id": "IDR_PRINTDRVR_FW",
                "md5": "5902996f16dc78fc013f6e1db14805b3",
                "note": "Parallel printer card firmware (256 B)",
                "sha1": "c75c751589cbcc1ad4ab4f63676af7abadd86f5b",
                "size": 256
              },
              {
                "filename": "Mockingboard-D.rom",
                "id": "IDR_MOCKINGBOARD_D_FW",
                "md5": "ab53170c5ec66b63e6356f637f4388ed",
                "note": "Mockingboard-D sound card firmware (2 KB)",
                "sha1": "e8d20f4b59fe867ff76434d35a14d2cbdc8533e3",
                "size": 2048
              },
              {
                "filename": "MouseInterface.rom",
                "id": "IDR_MOUSEINTERFACE_FW",
                "md5": "22563ab338024dac7b03510371d49c57",
                "note": "Mouse interface card firmware (2 KB)",
                "sha1": "3a9d881a8a8d30f55b9719aceebbcf717f829d6f",
                "size": 2048
              },
              {
                "filename": "ThunderClockPlus.rom",
                "id": "IDR_THUNDERCLOCKPLUS_FW",
                "md5": "138b1f7e30953fcaa58fcbf562c15001",
                "note": "ThunderClock Plus firmware (2 KB)",
                "sha1": "60f434f5325899d7ea257a6e56e6f53eae65146a",
                "size": 2048
              },
              {
                "filename": "TKClock.rom",
                "id": "IDR_TKCLOCK_FW",
                "md5": "7076083b9d748b7637b020636543971b",
                "note": "TK Clock firmware (2.25 KB)",
                "sha1": "3740516cc9050465f8b884dbeb0ecdd2c1354620",
                "size": 2304
              }
            ],
            "source_ref": "source/frontends/common2/gnuframe.cpp:83",
            "storage": "apple2roms static library linked into core binary",
            "system_roms": [
              {
                "filename": "Apple2.rom",
                "id": "IDR_APPLE2_ROM",
                "md5": "3c406514b9806a7c57ee65fb0b0c39b4",
                "note": "Apple ][ original ROM (12 KB)",
                "sha1": "09288be705464b608ff190519ab008d3dfcd1b05",
                "size": 12288
              },
              {
                "filename": "Apple2_Plus.rom",
                "id": "IDR_APPLE2_PLUS_ROM",
                "md5": "572b3005a4fa49bc54917b069b82c1ab",
                "note": "Apple ][+ ROM (12 KB)",
                "sha1": "33a24f5489ba9195b44be77d9afb2252594cb5c7",
                "size": 12288
              },
              {
                "filename": "Apple2_JPlus.rom",
                "id": "IDR_APPLE2_JPLUS_ROM",
                "md5": "f3e8237eca3809bec2a42b984a1332a8",
                "note": "Apple ][ J-Plus ROM (12 KB)",
                "sha1": "ad200b3263d08e7235d0871c8595963a07adc905",
                "size": 12288
              },
              {
                "filename": "Apple2e.rom",
                "id": "IDR_APPLE2E_ROM",
                "md5": "346bc782c6a08a531c460e33bc03daf4",
                "note": "Apple //e ROM (16 KB)",
                "sha1": "61fa9254628e5bb7236fb474006116d67684d747",
                "size": 16384
              },
              {
                "filename": "Apple2e_Enhanced.rom",
                "id": "IDR_APPLE2E_ENHANCED_ROM",
                "md5": "38063e08c778503fc03ecebb979769e9",
                "note": "Enhanced Apple //e ROM (16 KB, default machine type)",
                "sha1": "b8ea90abe135a0031065e01697c4a3a20d51198b",
                "size": 16384
              },
              {
                "filename": "PRAVETS82.ROM",
                "id": "IDR_PRAVETS_82_ROM",
                "md5": "c619b7edfcf021f3b8fd20d9386676ba",
                "note": "Pravets 82 ROM (12 KB)",
                "sha1": "8bd7ced83e209a15e9b19a05a5ef4b8e996dc1a5",
                "size": 12288
              },
              {
                "filename": "PRAVETS8M.ROM",
                "id": "IDR_PRAVETS_8M_ROM",
                "md5": "76c79535f7cf77973e2c711aa977a124",
                "note": "Pravets 8M ROM (12 KB)",
                "sha1": "f1b4ff018acf95f3355f0d575b66a188d728b687",
                "size": 12288
              },
              {
                "filename": "PRAVETS8C.ROM",
                "id": "IDR_PRAVETS_8C_ROM",
                "md5": "1896d7b98dd940c89f7c8ea899b71006",
                "note": "Pravets 8A/8C ROM (16 KB)",
                "sha1": "c976fe56e57706c161f513a82ba3e0d8cda83904",
                "size": 16384
              },
              {
                "filename": "TK3000e.rom",
                "id": "IDR_TK3000_2E_ROM",
                "md5": "8d84b614b545d4eec8799d3f325332cb",
                "note": "TK3000 //e ROM (16 KB)",
                "sha1": "f163e5753c18ff0e812a448e8da406f102600edf",
                "size": 16384
              },
              {
                "filename": "Base64A.rom",
                "id": "IDR_BASE_64A_ROM",
                "md5": "352fdbcae14c6a8c0398822c7a273309",
                "note": "Base64A ROM (48 KB)",
                "sha1": "f1c779af480b5bda2bdd03950c1201a5c5143bea",
                "size": 49152
              },
              {
                "filename": "Freezes_Non-autostart_F8_Rom.rom",
                "id": "IDR_FREEZES_F8_ROM",
                "md5": "d0a61e95ed1e1dc37c8e4801326aa79e",
                "note": "Freezes non-autostart F8 ROM (2 KB)",
                "sha1": "3180be6b555ee9ef1f59c4fc3f25c5aab8c39c81",
                "size": 2048
              }
            ],
            "video_roms": [
              {
                "filename": "Apple2_Video.rom",
                "id": "IDR_APPLE2_VIDEO_ROM",
                "md5": "9ac0dc8c4d0002eb45b0b84be0bde5ec",
                "note": "Apple II character generator ROM (2 KB)",
                "sha1": "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659",
                "size": 2048
              },
              {
                "filename": "Apple2_JPlus_Video.rom",
                "id": "IDR_APPLE2_JPLUS_VIDEO_ROM",
                "md5": "271e2c9bf928b95e7baeff391db45495",
                "note": "Apple ][ J-Plus character generator ROM (2 KB)",
                "sha1": "0a382be58db5215c4a3de53b19a72fab660d5da2",
                "size": 2048
              },
              {
                "filename": "Apple2e_Enhanced_Video.rom",
                "id": "IDR_APPLE2E_ENHANCED_VIDEO_ROM",
                "md5": "9123fff3442c0e688cc6816be88dd4ab",
                "note": "Enhanced Apple //e character generator ROM (4 KB)",
                "sha1": "b2b5d87f52693817fc747df087a4aa1ddcdb1f10",
                "size": 4096
              },
              {
                "filename": "Base64A_German_Video.rom",
                "id": "IDR_BASE64A_VIDEO_ROM",
                "md5": "4b45852b369e2afd864a02d0d91f70dc",
                "note": "Base64A German character generator ROM (4 KB)",
                "sha1": "87ca8135f7526ddf829f9c2c4f7dbe4d568818fc",
                "size": 4096
              }
            ]
          }
        },
        "core_classification": "community_fork",
        "core_version": "1.31.0.1",
        "cores": [
          "applewin"
        ],
        "display_name": "Apple II (AppleWin)",
        "emulator": "AppleWin",
        "files": [],
        "notes": "AppleWin is an Apple II/IIe/II+ emulator. The libretro port embeds all\nROM images directly into the compiled binary via a CMake resource system\n(resource/CMakeLists.txt -> apple2roms static library -> apple2roms_data.h).\nThe GNUFrame::GetResourceData() function serves ROMs from this compiled-in\nmap. No external BIOS/firmware files are needed.\n\nThe core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and the official\napplewin_libretro.info has zero firmware entries.\n\nSupported machine types (via core option applewin_machine):\n  Enhanced Apple //e, Apple ][ (Original), Apple ][+, Apple ][ J-Plus,\n  Apple //e, Pravets 82, Pravets 8M, Pravets 8A, Base64A, TK3000 //e\n\nSupported extensions: bin, do, dsk, nib, po, gz, woz, zip, 2mg, 2img,\niie, apl, hdv, yaml, m3u\n\nsupports_no_game: true (can boot without content)\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/audetto/AppleWin",
        "source_commit": "599e81d07f4aeceec17c899213584d719c395718",
        "systems": [
          "apple-ii"
        ],
        "type": "libretro",
        "upstream": "https://github.com/AppleWin/AppleWin"
      }
    },
    {
      "id": "aps3e",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.41",
        "cores": [
          "aps3e"
        ],
        "dev_flash": {
          "certs": {
            "note": "Root certificates cellSsl enumerates.",
            "path": "dev_flash/data/cert/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellSsl.cpp:110"
          },
          "fonts": {
            "files": [
              "SCE-PS3-RD-R-LATIN.TTF",
              "SCE-PS3-RD-L-LATIN.TTF",
              "SCE-PS3-RD-B-LATIN.TTF",
              "SCE-PS3-RD-R-LATIN2.TTF",
              "SCE-PS3-RD-L-LATIN2.TTF",
              "SCE-PS3-RD-B-LATIN2.TTF",
              "SCE-PS3-MT-R-LATIN.TTF",
              "SCE-PS3-NR-R-JPN.TTF",
              "SCE-PS3-NR-L-JPN.TTF",
              "SCE-PS3-NR-B-JPN.TTF",
              "SCE-PS3-YG-R-KOR.TTF",
              "SCE-PS3-SR-R-LATIN.TTF",
              "SCE-PS3-SR-R-LATIN2.TTF",
              "SCE-PS3-SR-R-JPN.TTF",
              "SCE-PS3-VR-R-LATIN.TTF",
              "SCE-PS3-VR-R-LATIN2.TTF",
              "SONY-CC/SCE-PS3-DH-R-CGB.TTF"
            ],
            "note": "Faces cellFontOpenFontset maps by type, and the directory the overlay searches for its own list. A fontset the emulator does not implement falls back to SCE-PS3-RD-R-LATIN.TTF.",
            "path": "dev_flash/data/font/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:226-241, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/Modules/cellFont.cpp:281, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:117-118"
          },
          "note": "Mounted at /dev_flash and rooted at the config directory. Written only by the firmware installer, which extracts the dev_flash_ packages of the PUP into it.",
          "path": "config/dev_flash/",
          "ps1emu": {
            "note": "ps1_newemu.self, the argv[0] of a PS1 Classics boot.",
            "path": "dev_flash/ps1emu/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2171"
          },
          "pspemu": {
            "note": "psp_emulator.self, the argv[0] of a PSP minis boot.",
            "path": "dev_flash/pspemu/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2199"
          },
          "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:15, aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:127-129",
          "sys_external": {
            "critical_file": "liblv2.sprx",
            "note": "Firmware SPRX modules. liblv2.sprx gates the boot and pulls the rest in; each module can be forced to LLE or HLE through Libraries Control, which the shipped configuration leaves empty. flashATRAC.pic is named by cellSysmodule for the ATRAC module path.",
            "path": "dev_flash/sys/external/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUModule.cpp:2608-2610, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:207"
          },
          "sys_internal": {
            "note": "Internal modules, libfs_utility_init.sprx among them.",
            "path": "dev_flash/sys/internal/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:33-34"
          },
          "vsh": {
            "note": "vsh/etc/version.txt supplies the installed firmware version, compared against the PS3_SYSTEM_VER a title declares. vsh/module/eseibrd.sprx is precompiled at boot and vsh/resource/explore/user carries the avatars the user list draws.",
            "path": "dev_flash/vsh/",
            "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/util/sysinfo.cpp:651-653, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/PPUThread.cpp:4433-4441, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_user_list_dialog.cpp:207"
          }
        },
        "dev_flash2": {
          "note": "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH2. Mount point only, created empty.",
          "path": "config/dev_flash2/",
          "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:16, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:28"
        },
        "dev_flash3": {
          "note": "CELL_FS_FAT on CELL_FS_IOS:BUILTIN_FLSH3. Mount point only, created empty.",
          "path": "config/dev_flash3/",
          "source_ref": "aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/vfs_config.h:17, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_fs.cpp:27"
        },
        "display_name": "Sony - PlayStation 3 (aPS3e)",
        "emulator": "aPS3e",
        "files": [
          {
            "description": "PS3 system software update package",
            "name": "PS3UPDAT.PUP",
            "note": "Selected through the file picker and read from a descriptor. The PUP object rejects an empty file, a wrong magic, a declared size the file does not reach, an unreadable entry table and a failed entry hash. Segment 0x300 carries the installation package database and segment 0x100 the version string; the packages whose names contain dev_flash_ are decrypted with the SCEPKG keys and their inner TARs extracted over dev_flash. The Java layer creates dev_flash/.installed once the native call returns true. No digest of the file itself is compared against anything.",
            "required": true,
            "source_ref": "aps3e/app/src/main/cpp/aps3e_emu.cpp:587-757, aps3e/app/src/main/cpp/emulator_aps3e.cpp:1045, aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:538-570, aps3e/app/src/main/res/values/strings.xml:108-110",
            "storage": "large_file"
          },
          {
            "aliases": [
              "<game>.key"
            ],
            "description": "Redump disc decryption key read beside an encrypted ISO",
            "name": "<game>.dkey",
            "note": "Resolved as a sidecar of the image being launched, .dkey first then .key, and passed down as a second descriptor. 32 bytes are read as a hex string and converted, 16 bytes are taken as raw; any other length fails the key check. An image whose odd regions are encrypted does not boot without it.",
            "required": false,
            "size_options": [
              16,
              32
            ],
            "source_ref": "aps3e/app/src/main/java/aenu/aps3e/Utils.java:170-190, aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:354-399, aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:850-870",
            "unsourceable": "per-disc AES-128 key named after the image it decrypts, one per title, carried by disc dump catalogues rather than by the emulator",
            "validation": [
              "size"
            ]
          },
          {
            "description": "PSN content licence",
            "name": "<content_id>.rap",
            "note": "Imported through the EDAT/RAP/PKG entry and copied byte for byte into dev_hdd0/home/00000001/exdata under the name it was given. The import is refused unless the source is exactly 16 bytes. SELF decryption looks the matching file up in that folder by content id, with a lowercase extension.",
            "required": false,
            "size": 16,
            "source_ref": "aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:596-600, aps3e/app/src/main/java/aenu/aps3e/Emulator.java:820-844, aps3e/app/src/main/cpp/rpcs3/rpcs3/Crypto/unself.cpp:1271-1286, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:391",
            "unsourceable": "per-title activation licence tied to the account that bought the content, never distributed generically",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Encrypted data file for licensed content",
            "min_size": 144,
            "name": "<content_id>.edat",
            "note": "Imported through the same entry. The NPD header is read and the file refused below 0x90 bytes or when the magic is not NPD, then written whole to dev_hdd0/home/00000001/exdata under the content id the header declares.",
            "required": false,
            "source_ref": "aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:601-605, aps3e/app/src/main/cpp/aps3e_emu.cpp:801-829, aps3e/app/src/main/cpp/emulator_aps3e.cpp:1052, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_utils.cpp:413",
            "unsourceable": "per-content licensed data file, shipped with the content it belongs to",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "<font>.ttc",
              "<font>.otf"
            ],
            "config_key": "Miscellaneous/Custom Font File Path",
            "description": "Replacement face for the overlay text",
            "name": "<font>.ttf",
            "note": "Copied into the font directory at the data root by the picker, its absolute path stored in the configuration. Used for the default, CJK base and Hangul classes at once, and only while Font File Selection is Custom. The setting reverts to From Firmware when the stored path no longer resolves, so the firmware faces cover the absence.",
            "required": false,
            "source_ref": "aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1326-1346, aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:203-215, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:401-402",
            "unsourceable": "any TrueType, TrueType collection or OpenType face the user picks, with no name or version the code expects"
          },
          {
            "aliases": [
              "<driver>.zip"
            ],
            "config_key": "Video/Vulkan/Custom Driver Library Path",
            "description": "Replacement Vulkan driver",
            "name": "<driver>.so",
            "note": "Imported as a shared object, or as a zip whose meta.json names the library to keep, and unpacked into the driver directory in internal storage. Read from the global config YAML before the emulator initialises and dlopened in place of the system loader. The system libvulkan.so is used when Use Custom Driver is off, the path is empty, or the file is gone.",
            "required": false,
            "source_ref": "aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1229-1324, aps3e/app/src/main/cpp/aps3e_emu.cpp:875-899, aps3e/app/src/main/cpp/vkapi.cpp:21, aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/system_config.h:209-211",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          }
        ],
        "notes": "PlayStation 3 emulator for Android, distributed on Google Play as aenu.aps3e\nand aenu.aps3e.premium. RPCS3 is vendored whole under app/src/main/cpp/rpcs3\nrather than pulled as a submodule, and a JNI layer of about six thousand lines\nreplaces the Qt front end. The vendored tree reports itself as 0.0.41-alpha.1\nat RPCS3 commit 40e9ee5a.\nref: aps3e/app/src/main/cpp/rpcs3/rpcs3/git-version.h:3,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/rpcs3_version.cpp:29\n\nSource drops land on successive branches, not on the default one. Release 2.41\nof 2026-07-30 is the commit titled 2.41 at the head of main4; the lightweight\ntags 2.39, 2.40 and 2.41 all sit on the head of main2, an April tree that\npredates every one of those releases and whose generated git-version.h was\nnever filled in. main4 is the tree read here. No versionName is usable either:\nthe only gradle file committed is app/build.gradle.bak, which carries the\nplaceholder 1.19a and is renamed and completed with the signing block at build\ntime.\nref: aps3e/README.md, aps3e/app/build.gradle.bak:16\n\nEmulator paths derive from APS3E_DATA_DIR, set by the Java layer to the\nexternal files directory of the package. The config directory holds dev_flash,\ndev_hdd0, custom_cfg and the global config.yml; caches live beside it. The\ncustom font directory sits at the data root, and the custom GPU driver\ndirectory sits in internal storage because the external filesystem cannot\ncarry an executable mapping.\nref: aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:127-133,\n     aps3e/app/src/main/java/aenu/aps3e/Application.java:21-64\n\nThe PS3 firmware is required and nothing runs without it. Three independent\ngates enforce it: the game list refuses to launch an entry when the marker\nconfig/dev_flash/.installed is absent, the quick start wizard keeps its Next\nbutton disabled on the firmware page until that marker exists, and the boot\npath itself returns firmware_missing when dev_flash/sys/external/liblv2.sprx\nis not a file. The third gate covers the intent launched directly against\nEmulatorActivity, which does not pass through the game list. The shipped\nconfiguration leaves Libraries Control empty, so liblv2.sprx keeps its default\nentry in the module list and the check fires.\nref: aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:143-145,\n     aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:187-190,\n     aps3e/app/src/main/java/aenu/aps3e/QuickStartActivity.java:316-318,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/System.cpp:2747-2767,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/Cell/lv2/sys_prx.cpp:86,\n     aps3e/app/src/main/assets/config/config.yml\n\nOverlay text is drawn from a font list chosen by the Font File Selection\nsetting. From Firmware, the default, asks for Arial.ttf, arial.ttf, the\nAndroid system face at /system/fonts/Roboto-Regular.ttf and then\nSCE-PS3-VR-R-LATIN.TTF for Latin, SCE-PS3-SR-R-JPN.TTF and SCE-PS3-DH-R-CGB.TTF\nfor the CJK base, and SCE-PS3-YG-R-KOR.TTF for Hangul. The SCE faces are\nresolved against dev_flash/data/font and dev_flash/data/font/SONY-CC, so they\ncome from the firmware rather than from a separate download. Custom points all\nthree classes at one file and reverts to From Firmware when that path no\nlonger exists.\nref: aps3e/app/src/main/cpp/aps3e_rp3_impl.cpp:192-222,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp:113-118\n\nVulkan is reached through a loader chosen before the emulator starts. The\nglobal config YAML is read directly for Use Custom Driver and Custom Driver\nLibrary Path, and the named library is dlopened when both are set and the path\nexists; otherwise the system libvulkan.so is used. Drivers are imported either\nas a bare shared object or as a zip whose meta.json names the library.\nref: aps3e/app/src/main/cpp/aps3e_emu.cpp:875-899,\n     aps3e/app/src/main/cpp/vkapi.cpp:21,\n     aps3e/app/src/main/java/aenu/aps3e/EmulatorSettings.java:1229-1324\n\nEncrypted disc images are supported by a loader that has no counterpart in the\ndesktop code line. Launching an ISO makes the Java layer look for a sidecar key\nbeside it, trying the base name with .dkey and then with .key, and hand the\ndescriptor down beside the image. The key is accepted at exactly 32 bytes, read\nas a hex string, or exactly 16 bytes, read as raw bytes, and installed as an\nAES-128 decryption context. A 3k3y watermark at offset 0xF70 is recognised\nseparately and needs no key.\nref: aps3e/app/src/main/java/aenu/aps3e/Utils.java:170-190,\n     aps3e/app/src/main/java/aenu/aps3e/EmulatorActivity.java:147-153,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:354-399,\n     aps3e/app/src/main/cpp/rpcs3/rpcs3/Loader/iso.cpp:508-554\n\nOne import entry point takes EDAT, RAP and PKG. A RAP is copied verbatim into\nthe exdata folder of user 00000001 and rejected unless it is exactly 16 bytes.\nAn EDAT is parsed for its NPD header, rejected below 0x90 bytes or without the\nNPD magic, and written to the same folder under the content id the header\ncarries. A PKG goes through the package reader and lands in dev_hdd0.\nref: aps3e/app/src/main/java/aenu/aps3e/MainActivity.java:594-605,\n     aps3e/app/src/main/java/aenu/aps3e/Emulator.java:820-844,\n     aps3e/app/src/main/cpp/aps3e_emu.cpp:801-829,\n     aps3e/app/src/main/cpp/aps3e_emu.cpp:783-793\n\npatch.yml, compatibility_table.json and database_config.json ship inside the\nAPK as assets and are not user supplied.\nref: aps3e/app/src/main/assets\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/aenu1/aps3e",
        "source_branch": "main4",
        "source_commit": "65ec7583bb8c1ff8b5e516c8f8c8d006d9cae3c2",
        "systems": [
          "sony-playstation-3"
        ],
        "type": "standalone",
        "upstream": "https://github.com/RPCS3/rpcs3",
        "upstream_commit": "40e9ee5af0de7ca31691c58eebe64ba205a2900b"
      }
    },
    {
      "id": "arcadeflashweb",
      "profile": {
        "core_classification": "launcher",
        "core_version": "1.0.2",
        "cores": [
          "arcadeflashweb"
        ],
        "display_name": "Adobe Flash (ArcadeFlashWeb)",
        "emulator": "ArcadeFlashWeb",
        "files": [
          {
            "bundled": true,
            "description": "Adobe Pepper Flash Player runtime",
            "name": "pepflashplayer.dll",
            "note": "Handed to Chromium as --ppapi-flash-path and resolved against the process working directory. Without it no plugin is registered, SWFObject finds no player and the movie is never embedded. The page asks for a reported version of at least 32.0.0; the build that ships is the 32-bit 32.0.0.371.",
            "required": true,
            "source_ref": "src/main.cpp:40, ArcadeFlashWeb v1.0.2 flash/flash.html:102"
          },
          {
            "bundled": true,
            "description": "Page that embeds the movie",
            "name": "flash.html",
            "note": "Every local SWF goes through it, carrying the path and the two dimensions in the query string. Absent, the view is pointed at a file that does not exist and nothing plays.",
            "path": "flash/flash.html",
            "required": true,
            "source_ref": "src/main.qml:327,334, src/Navigateur.qml:150"
          },
          {
            "bundled": true,
            "description": "SWFObject 2.2 embed library",
            "name": "swfobject.js",
            "note": "The only definition of swfobject, included by flash.html before the script that calls embedSWF. It reads the player version from the Shockwave Flash plugin description, refines it from a probe object's $version, and refuses to embed below the version the page asks for.",
            "path": "flash/swfobject/swfobject.js",
            "required": true,
            "source_ref": "ArcadeFlashWeb v1.0.2 flash/flash.html:38, ArcadeFlashWeb v1.0.2 flash/swfobject/swfobject.js:1-4"
          },
          {
            "bundled": true,
            "description": "Backdrop of the player page",
            "name": "background.jpg",
            "note": "Drawn behind the movie by the page's bg div. The same image is compiled into the binary for the QML side, so only this copy is read from disk.",
            "path": "flash/images/background.jpg",
            "required": false,
            "source_ref": "ArcadeFlashWeb v1.0.2 flash/flash.html:110, src/qml.qrc:23"
          },
          {
            "bundled": true,
            "description": "SWFTools swfdump, reads the movie's natural size",
            "name": "swfdump.exe",
            "note": "Run through cmd /C with -X -Y and the output redirected to swf.txt, then parsed as the second and fourth whitespace fields. Skipped when both -swfwidth: and -swfheight: are given. Absent, the redirection still creates an empty file, both fields parse to NaN and the page sizes the object from that.",
            "required": false,
            "source_ref": "src/main.qml:324-325, src/Navigateur.qml:147-148"
          },
          {
            "bundled": true,
            "description": "AntiMicro gamepad to keyboard mapper",
            "name": "antimicro.exe",
            "note": "Started hidden before the movie loads, only when -profilantimicro: is given. The copy that ships is a 2016 build carrying its own Qt 5 runtime in the same folder.",
            "path": "antimicro/antimicro.exe",
            "required": false,
            "source_ref": "src/main.qml:309,311"
          },
          {
            "bundled": true,
            "description": "AntiMicro mapping profile",
            "name": "arcadeflashweb.gamecontroller.amgp",
            "note": "Passed to AntiMicro as --profile under the name -profilantimicro: gives; the name that ships is the one the built-in help quotes. With -controleurantimicro: also set the call carries --profile-controller instead and no profile file is read.",
            "path": "antimicro/profiles/arcadeflashweb.gamecontroller.amgp",
            "required": false,
            "source_ref": "src/main.qml:309-312"
          },
          {
            "bundled": true,
            "description": "Adobe Flash Access blob shipped with the runtime",
            "name": "pepper.vch",
            "note": "Named in the Flash library's own string table next to PepperFlashPlayer. PKCS#7 over 446144 opaque bytes, signed through the Adobe Flash Access chain under subject CN AdobeIV-202002031156. It carries DRM material and no plain SWF needs it.",
            "required": false,
            "source_ref": "ArcadeFlashWeb v1.0.2 pepflashplayer.dll string table"
          }
        ],
        "notes": "Qt 5.13 application that plays SWF files by hosting Adobe's Pepper Flash\nruntime inside a QtWebEngine view. Windows only. ES-DE runs\nArcadeFlashWeb.exe -fullscreen -source:<rom>, RetroBat adds -nodatetime,\n-savedataflash: and -picturesfolder: and sets the working directory to the\nprogram folder. The repository carries the Qt and QML sources and the\nreleases; arcadeflashweb.com no longer resolves and holds no archived\ncapture. Every string quoted below was also read back from the shipped\nv1.0.2 executable, which matches the sources.\nref: src/ArcadeFlashWeb.pro:1-5, src/main.qml:34-35\n\nThe runtime is registered from the command line. main sets\nQTWEBENGINE_CHROMIUM_FLAGS to \"--enable-pepper-testing\n--ppapi-flash-path=./pepflashplayer.dll\" before QtWebEngine::initialize, so\nChromium takes the plugin from that path. It is the one file resolved\nagainst the process working directory; everything else below hangs off\napplicationDirPath. No --ppapi-flash-version accompanies it, and nothing\nreads the manifest.json sitting beside the library: QtWebEngine builds the\nplugin entry from the two switches alone and the library never names that\nfile. The manifest is still what identifies the build, Pepper Flash\n32.0.0.371 for win/ia32.\nref: src/main.cpp:37-44, ArcadeFlashWeb v1.0.2 manifest.json:2-7,\n     qtwebengine 5.13 src/core/content_client_qt.cpp AddPepperFlashFromCommandLine\n\nA local movie is not handed to the view. The url becomes\nfile:///<appdir>/flash/flash.html?jeu=<rom>=<width>=<height>, and that page\nsplits the query on the equals signs, fits the movie to the window and calls\nswfobject.embedSWF with scale exactfit and wmode direct. The version it asks\nfor is 32.0.0, so SWFObject creates the object only when the registered\nplugin reports at least that. A -source: containing \"http\" loads in the view\nunchanged and uses none of this.\nref: src/main.qml:317-347, src/Navigateur.qml:144-155,\n     ArcadeFlashWeb v1.0.2 flash/flash.html:38-104\n\nNatural dimensions come from swfdump. When -swfwidth: and -swfheight: are\nnot both given, which is the case for both ES-DE and RetroBat, the program\nruns cmd /C <appdir>/swfdump.exe -X -Y <rom> redirected to swf.txt in the\ndata directory and reads the second and fourth whitespace fields back.\nref: src/main.qml:109-128, src/main.qml:321-335, src/Navigateur.qml:147-148\n\n-profilantimicro: starts AntiMicro hidden with a profile from\nantimicro/profiles before the movie loads. Adding -controleurantimicro:\nreplaces that argument with --profile-controller, and the profile file is\nthen not passed at all.\nref: src/main.qml:305-314\n\nWritten rather than expected: swf.txt, the QML LocalStorage database holding\nthe last browser path with the bezel, screen mode and clock flags, the\nQtWebEngine cache and persistent storage under -savedataflash:, and the JPEG\nscreenshots. The interface icons, the bezel, the CRT and scanline overlays\nand the wallpaper are compiled in through qml.qrc, so of the images only the\ncopy under flash/images is read from disk, and it is byte for byte the\ncompiled one. Two files ship unread: flash/swfobject/expressInstall.swf,\nwhich flash.html disables by passing false for the express install url, and\nflash/swfobject/test.swf, which nothing names.\nref: src/qml.qrc:1-33, src/Sauvegarde.js:1-30, src/main.qml:132-159,\n     ArcadeFlashWeb v1.0.2 flash/flash.html:102\n\nThe remainder of the release is the Qt 5.13.2 deployment of the program\nitself. VCRUNTIME140.dll and the UCRT stubs sit in the executable's import\ndirectory, so the Visual C++ 2017 x86 redistributable has to be installed,\nand the release carries its installer.\nref: README.md:59, ArcadeFlashWeb v1.0.2 ArcadeFlashWeb.exe import directory\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/aureyoboss/ArcadeFlashWeb",
        "source_commit": "5de66e0cd69b48721a094887a28d042f71ddad08",
        "systems": [
          "flash"
        ],
        "type": "standalone",
        "upstream": "https://github.com/aureyoboss/ArcadeFlashWeb"
      }
    },
    {
      "id": "ardens",
      "profile": {
        "core_classification": "official_port",
        "core_version": "Git",
        "cores": [
          "ardens"
        ],
        "display_name": "Arduboy (Ardens)",
        "emulator": "Ardens",
        "files": [],
        "notes": "Arduboy FX simulator (ATmega32U4 + SSD1306 + W25Q128). All boot code\nembedded as C arrays: Caterina/Arduboy3K bootloaders for D1/D2/E2\nhardware revisions and flashcart header. EEPROM and flash state handled\nvia RETRO_MEMORY_SAVE_RAM. The libretro port never accesses the system\ndirectory. firmware_count = 0.\n",
        "platform_details": {
          "embedded_bootloaders": {
            "note": "All bootloaders are compiled from Intel HEX into C arrays at build\ntime. The core selects the game or menu variant at reset depending\non whether a flashcart image was loaded and the boot_to_menu config\nflag (absim_arduboy.cpp:142-158). The bootloader is written to the\ntop of the ATmega32U4 program memory at the address defined by the\nBOOTSZ fuse bits (absim.hpp:811).\n",
            "source_ref": "src/boot/_make.bat, src/absim_arduboy.cpp:115-161",
            "variants": [
              {
                "array": "ARDENS_BOOT_GAME_D1",
                "device": "Arduboy FX (SDA)",
                "name": "arduboy3k-bootloader-game-sda",
                "size": 8422
              },
              {
                "array": "ARDENS_BOOT_MENU_D1",
                "device": "Arduboy FX (SDA)",
                "name": "arduboy3k-bootloader-menu-sda",
                "size": 8422
              },
              {
                "array": "ARDENS_BOOT_GAME_D2",
                "device": "Arduboy FX DevKit",
                "name": "arduboy3k-bootloader-game-devkit",
                "size": 8446
              },
              {
                "array": "ARDENS_BOOT_MENU_D2",
                "device": "Arduboy FX DevKit",
                "name": "arduboy3k-bootloader-menu-devkit",
                "size": 8446
              },
              {
                "array": "ARDENS_BOOT_GAME_E2",
                "device": "Arduboy Mini",
                "name": "arduboymini-bootloader-game",
                "size": 8548
              },
              {
                "array": "ARDENS_BOOT_MENU_E2",
                "device": "Arduboy Mini",
                "name": "arduboymini-bootloader-menu",
                "size": 8548
              }
            ]
          },
          "embedded_flashcart_header": {
            "array": "ARDENS_BOOT_FLASHCART",
            "note": "Empty flashcart header written to the first 1536 bytes of the\nW25Q128 flash image during initialization. This is not a BIOS\nfile -- it is the default flash content the Arduboy FX expects\nat the start of external storage.\n",
            "size": 1536,
            "source_ref": "src/boot/boot_flashcart.c, src/absim_w25q128.hpp:14"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/tiberiusbrown/ardens",
        "source_commit": "8237fb9ecfe413abcdb2cc865ada80755486dfa9",
        "systems": [
          "arduboy"
        ],
        "type": "libretro",
        "upstream": "https://github.com/tiberiusbrown/ardens"
      }
    },
    {
      "id": "arduous",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "0.1.0",
        "cores": [
          "arduous"
        ],
        "display_name": "Arduboy (Arduous)",
        "emulator": "Arduous",
        "files": [],
        "notes": "ATmega32U4 AVR simulator built on simavr with SSD1306 OLED display\nemulation. MCU hardcoded at 16 MHz (arduous.h:70-71). Game content\n(.hex) parsed via in-tree ihex reader and written directly into\nsimavr flash (arduous.cpp:169-179). No system directory access.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/arduous",
        "source_commit": "882ea139758fef5e5d711324d138d812abd5c10c",
        "systems": [
          "arduboy"
        ],
        "type": "libretro",
        "upstream": "https://github.com/jmaroeder/arduous"
      }
    },
    {
      "id": "ares",
      "profile": {
        "core_version": "v147",
        "cores": [
          "ares"
        ],
        "display_name": "ares",
        "emulator": "ares",
        "files": [
          {
            "description": "ColecoVision BIOS",
            "mode": "standalone",
            "name": "colecovision.rom",
            "required": true,
            "sha256": "990bf1956f10207d8781b619eb74f89b00d921c8d45c95c334c16c8cceca09ad",
            "source_ref": "desktop-ui/emulator/colecovision.cpp:12",
            "system": "colecovision",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Famicom Disk System BIOS",
            "mode": "standalone",
            "name": "disksys.rom",
            "required": true,
            "sha256": "fdc1a76e654feea993fcb38366e05ee5f4eb641f86fe6bebaeefd412e112dd72",
            "source_ref": "desktop-ui/emulator/famicom-disk-system.cpp:19",
            "system": "famicom-disk-system",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "GBA BIOS",
            "mode": "standalone",
            "name": "gba_bios.bin",
            "required": true,
            "sha256": "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570",
            "source_ref": "desktop-ui/emulator/game-boy-advance.cpp:14",
            "system": "game-boy-advance",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Game Gear BIOS",
            "mode": "standalone",
            "name": "bios.gg",
            "required": false,
            "sha256": "8c8a21335038285cfa03dc076100c1f0bfadf3e4ff70796f11f3dfaaab60eee2",
            "source_ref": "desktop-ui/emulator/game-gear.cpp:12, mia/system/game-gear.cpp:8 (//optional)",
            "system": "game-gear",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Master System BIOS (US)",
            "mode": "standalone",
            "name": "bios_U.sms",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50",
            "source_ref": "desktop-ui/emulator/master-system.cpp:14, mia/system/master-system.cpp:8 (//optional)",
            "system": "master-system",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Master System BIOS (Japan)",
            "mode": "standalone",
            "name": "bios_J.sms",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "67846e26764bd862f19179294347f7353a4166b62ac4198a5ec32933b7da486e",
            "source_ref": "desktop-ui/emulator/master-system.cpp:15",
            "system": "master-system",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Master System BIOS (Europe), same binary as US",
            "mode": "standalone",
            "name": "bios_E.sms",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "477617917a12a30f9f43844909dc2de6e6a617430f5c9a36306c86414a670d50",
            "source_ref": "desktop-ui/emulator/master-system.cpp:16",
            "system": "master-system",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Mega CD / Sega CD BIOS (US)",
            "mode": "standalone",
            "name": "bios_CD_U.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha256": "fb477cdbf94c84424c2feca4fe40656d85393fe7b7b401911b45ad2eb991258c",
            "source_ref": "desktop-ui/emulator/mega-cd.cpp:17",
            "system": "mega-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Mega CD BIOS (Japan)",
            "mode": "standalone",
            "name": "bios_CD_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "sha256": "7133fc2dd2fe5b7d0acd53a5f10f3d00b5d31270239ad20d74ef32393e24af88",
            "source_ref": "desktop-ui/emulator/mega-cd.cpp:18",
            "system": "mega-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Mega CD BIOS (Europe)",
            "mode": "standalone",
            "name": "bios_CD_E.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "sha256": "fe608a2a07676a23ab5fd5eee2f53c9e2526d69a28aa16ccd85c0ec42e6933cb",
            "source_ref": "desktop-ui/emulator/mega-cd.cpp:19",
            "system": "mega-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "LaserActive SEGA PAC BIOS (US), v1.04",
            "mode": "standalone",
            "name": "mega_ld_bios_U.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha256": "e89b5a319f66406611ec82fe5c4aa6827c175a05135bd7bd177366cba0465021",
            "source_ref": "desktop-ui/emulator/mega-ld.cpp:16",
            "system": "mega-ld",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "LaserActive SEGA PAC BIOS (Japan), v1.02",
            "mode": "standalone",
            "name": "mega_ld_bios_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "sha256": "dca942d977217f703d8d1c6eb1aeb6b32c78ecc421486bbb46c459d385161c94",
            "source_ref": "desktop-ui/emulator/mega-ld.cpp:17",
            "system": "mega-ld",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "MSX BIOS ROM (Japan)",
            "mode": "standalone",
            "name": "MSX.ROM",
            "required": true,
            "sha256": "413a2b601a94b3792e054be2439cc77a1819cceadbfa9542f88d51c7480f2ef0",
            "source_ref": "desktop-ui/emulator/msx.cpp:19",
            "system": "msx",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "MSX2 main BIOS ROM (Japan)",
            "mode": "standalone",
            "name": "MSX2.ROM",
            "required": true,
            "sha256": "0c672d86ead61a97f49a583b88b7c1905da120645cd44f0c9f2baf4f4631e0b1",
            "source_ref": "desktop-ui/emulator/msx2.cpp:15",
            "system": "msx2",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "MSX2 sub ROM (Japan)",
            "mode": "standalone",
            "name": "MSX2EXT.ROM",
            "required": true,
            "sha256": "6c6f421a10c428d960b7ecc990f99af1c638147f747bddca7b0bf0e2ab738300",
            "source_ref": "desktop-ui/emulator/msx2.cpp:16",
            "system": "msx2",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Neo Geo AES BIOS. Accepts neogeo.zip (extracts neo-epo.bin) or direct file. Byte-swapped on load.",
            "mode": "standalone",
            "name": "neo-epo.bin",
            "required": true,
            "source_ref": "desktop-ui/emulator/neo-geo-aes.cpp:14, mia/system/neo-geo-aes.cpp:16",
            "system": "neo-geo"
          },
          {
            "description": "Neo Geo MVS BIOS. Accepts neogeo.zip (extracts sp-45.sp1) or direct file. Byte-swapped on load.",
            "mode": "standalone",
            "name": "sp-45.sp1",
            "required": true,
            "source_ref": "desktop-ui/emulator/neo-geo-mvs.cpp:15, mia/system/neo-geo-mvs.cpp:16",
            "system": "neo-geo"
          },
          {
            "description": "Neo Geo Pocket BIOS",
            "mode": "standalone",
            "name": "ngp_bios.rom",
            "required": true,
            "sha256": "0293555b21c4fac516d25199df7809b26beeae150e1d4504a050db32264a6ad7",
            "source_ref": "desktop-ui/emulator/neo-geo-pocket.cpp:12",
            "system": "neo-geo-pocket",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Neo Geo Pocket Color BIOS",
            "mode": "standalone",
            "name": "ngpc_bios.rom",
            "required": true,
            "sha256": "8fb845a2f71514cec20728e2f0fecfade69444f8d50898b92c2259f1ba63e10d",
            "source_ref": "desktop-ui/emulator/neo-geo-pocket-color.cpp:12",
            "system": "neo-geo-pocket-color",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Nintendo 64DD IPL ROM (Japan retail)",
            "mode": "standalone",
            "name": "64dd_ipl_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "sha256": "806400ec0df94b0755de6c5b8249d6b6a9866124c5ddbdac198bde22499bfb8b",
            "source_ref": "desktop-ui/emulator/nintendo-64dd.cpp:17",
            "system": "nintendo-64dd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Nintendo 64DD IPL ROM (US dev kit)",
            "mode": "standalone",
            "name": "64dd_ipl_U.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha256": "e9fec87a45fba02399e88064b9e2f8cf0f2106e351c58279a87f05da5bc984ad",
            "source_ref": "desktop-ui/emulator/nintendo-64dd.cpp:18",
            "system": "nintendo-64dd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Nintendo 64DD IPL ROM (development)",
            "mode": "standalone",
            "name": "64dd_ipl_DEV.bin",
            "required": true,
            "sha256": "9c2962a8b994a29e4cd04b3a6e4ed730a751414655ab6a9799ebf5fc08b79d44",
            "source_ref": "desktop-ui/emulator/nintendo-64dd.cpp:19",
            "system": "nintendo-64dd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "PC Engine CD-ROM2 System Card v1.0 (Japan). Also used by PC Engine LD.",
            "mode": "standalone",
            "name": "syscard1.pce",
            "required": true,
            "sha256": "afe9f27f91ac918348555b86298b4f984643eafa2773196f2c5441ea84f0c3bb",
            "source_ref": "desktop-ui/emulator/pc-engine-cd.cpp:15",
            "system": "pc-engine-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Super CD-ROM2 System Card v3.0 (Japan). Also used by SuperGrafx CD as Arcade Card.",
            "mode": "standalone",
            "name": "syscard3.pce",
            "required": true,
            "sha256": "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce",
            "source_ref": "desktop-ui/emulator/pc-engine-cd.cpp:16, desktop-ui/emulator/supergrafx-cd.cpp:15",
            "system": "pc-engine-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "TurboGrafx-CD Super System Card v3.0 (US)",
            "mode": "standalone",
            "name": "syscard3u.pce",
            "required": true,
            "sha256": "cadac2725711b3c442bcf237b02f5a5210c96f17625c35fa58f009e0ed39e4db",
            "source_ref": "desktop-ui/emulator/pc-engine-cd.cpp:17",
            "system": "pc-engine-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Games Express CD Card (Japan). Also used by PC Engine LD.",
            "mode": "standalone",
            "name": "games_express.pce",
            "required": true,
            "sha256": "4b86bb96a48a4ca8375fc0109631d0b1d64f255a03b01de70594d40788ba6c3d",
            "source_ref": "desktop-ui/emulator/pc-engine-cd.cpp:18",
            "system": "pc-engine-cd",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "NEC PAC-N10 LaserActive module (US)",
            "mode": "standalone",
            "name": "pac-n10.pce",
            "required": true,
            "sha256": "0e87a3385a27b3a4cac51934819b7eefa5b3d690768d2495633838488cd0e2e4",
            "source_ref": "desktop-ui/emulator/pc-engine-ld.cpp:18",
            "system": "pc-engine-ld",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "NEC PAC-N1 LaserActive module (Japan)",
            "mode": "standalone",
            "name": "pac-n1.pce",
            "required": true,
            "sha256": "459325690a458baebd77495c91e37c4dddfdd542ba13a821ce954e5bb245627f",
            "source_ref": "desktop-ui/emulator/pc-engine-ld.cpp:19",
            "system": "pc-engine-ld",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "NEC PCE-LP1 LaserActive module (Japan)",
            "mode": "standalone",
            "name": "pce-lp1.pce",
            "required": true,
            "sha256": "3f43b3b577117d84002e99cb0baeb97b0d65b1d70b4adadc68817185c6a687f0",
            "source_ref": "desktop-ui/emulator/pc-engine-ld.cpp:20",
            "system": "pc-engine-ld",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "PlayStation BIOS (US)",
            "mode": "standalone",
            "name": "scph5501.bin",
            "required": true,
            "sha256": "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef",
            "source_ref": "desktop-ui/emulator/playstation.cpp:18",
            "system": "sony-playstation",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "PlayStation BIOS (Japan)",
            "mode": "standalone",
            "name": "scph5500.bin",
            "required": true,
            "sha256": "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb",
            "source_ref": "desktop-ui/emulator/playstation.cpp:19",
            "system": "sony-playstation",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "PlayStation BIOS (Europe)",
            "mode": "standalone",
            "name": "scph5502.bin",
            "required": true,
            "sha256": "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09",
            "source_ref": "desktop-ui/emulator/playstation.cpp:20",
            "system": "sony-playstation",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "Sega Saturn BIOS (US)",
            "mode": "standalone",
            "name": "saturn_bios_U.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "source_ref": "desktop-ui/emulator/saturn.cpp:14",
            "system": "saturn"
          },
          {
            "description": "Sega Saturn BIOS (Japan)",
            "mode": "standalone",
            "name": "saturn_bios_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "source_ref": "desktop-ui/emulator/saturn.cpp:15",
            "system": "saturn"
          },
          {
            "description": "Sega Saturn BIOS (Europe)",
            "mode": "standalone",
            "name": "saturn_bios_E.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "source_ref": "desktop-ui/emulator/saturn.cpp:16",
            "system": "saturn"
          },
          {
            "category": "game_data",
            "description": "Super Game Boy cartridge ROM. Loaded via CLI as SFC cartridge alongside GB game.",
            "mode": "standalone",
            "name": "SGB1.sfc",
            "required": false,
            "source_ref": "EmuDeck emuDeckares.sh (launcher)",
            "system": "super-famicom"
          },
          {
            "category": "game_data",
            "description": "Super Game Boy 2 cartridge ROM. Loaded via CLI as SFC cartridge alongside GB game.",
            "mode": "standalone",
            "name": "SGB2.sfc",
            "required": false,
            "source_ref": "EmuDeck emuDeckares.sh (launcher)",
            "system": "super-famicom"
          },
          {
            "category": "game_data",
            "description": "SuFami Turbo adapter BIOS. Loaded via CLI as SFC cartridge alongside SuFami games.",
            "mode": "standalone",
            "name": "STBIOS.bin",
            "required": false,
            "source_ref": "EmuDeck emuDeckares.sh (launcher)",
            "system": "super-famicom"
          },
          {
            "category": "game_data",
            "description": "Satellaview BS-X Town cartridge ROM. Loaded via CLI as SFC cartridge for BS games.",
            "mode": "standalone",
            "name": "BS-X.bin",
            "required": false,
            "source_ref": "EmuDeck emuDeckares.sh (launcher)",
            "system": "super-famicom"
          }
        ],
        "mode": "standalone",
        "notes": "Multi-system emulator by Near (byuu), successor to higan/bsnes. Focuses on\naccuracy and preservation. 38 systems emulated.\n\nFirmware identification uses SHA256 hashes. Filenames are user-defined; ares\nscans a configured directory and matches by hash. EmuDeck installs ares as\nFlatpak (dev.ares.ares), configures biosPath in settings.bml.\nref: desktop-ui/settings/firmware.cpp:116-136\n\nFirmware path resolution: settings.paths.firmware (user override) or\n{userData}/ares/Firmware/ (default). Per-system firmware assigned in\nSettings > Firmware dialog or via scan-by-hash.\nref: desktop-ui/settings/settings.hpp:85-97, desktop-ui/desktop-ui.cpp:68-75\n\nSystems with fully embedded firmware (no user files needed):\nGame Boy (boot.rom), Game Boy Color (boot.rom), Mega Drive (TMSS),\nSega 32X (TMSS + vector + SH2 boot M/S), Nintendo 64 (PIF NTSC/PAL/SM5 +\nCIC 6101/6102/6105/7101), Super Famicom (IPL + all coprocessor firmware:\nDSP1-4, CX4, ST010, ST011, ST018, SGB1/2 boot ROMs), WonderSwan (boot.rom),\nWonderSwan Color (boot.rom), Pocket Challenge V2 (boot.rom),\nZX Spectrum (BIOS), ZX Spectrum 128 (BIOS + sub ROM).\nref: mia/resource/resource.bml, mia/Firmware/\n\nSFC coprocessor firmware auto-injected if missing from ROM image.\nref: mia/medium/super-famicom.cpp:42-62\n\nNeo Geo BIOS: accepts ZIP archive (neogeo.zip) or direct binary. AES looks\nfor \"neo-epo.bin\" inside ZIP, MVS looks for \"sp-45.sp1\". Both apply byte-swap\nafter loading.\nref: mia/system/neo-geo-aes.cpp:12-30, mia/system/neo-geo-mvs.cpp:12-30\n\nSFC subsystem ROMs (SuFami Turbo, Satellaview, Super Game Boy): loaded as\ngame cartridges via CLI args, not through the firmware system. EmuDeck creates\nlauncher shortcuts that pass these alongside game ROMs.\nref: emuDeckares.sh (EmuDeck repo)\n\nSystems with no firmware: Arcade, Atari 2600, Famicom, MyVision, PC Engine,\nSuperGrafx, SG-1000, SC-3000.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/ares-emulator/ares",
        "source_commit": "b80f67d38312648d197762121c3a27b02c0887db",
        "systems": [
          "arcade",
          "atari-2600",
          "colecovision",
          "myvision",
          "famicom",
          "famicom-disk-system",
          "game-boy",
          "game-boy-color",
          "game-boy-advance",
          "master-system",
          "game-gear",
          "sg-1000",
          "sc-3000",
          "mega-drive",
          "sega-32x",
          "mega-cd",
          "mega-cd-32x",
          "mega-ld",
          "laseractive",
          "msx",
          "msx2",
          "neo-geo",
          "neo-geo-pocket",
          "neo-geo-pocket-color",
          "nintendo-64",
          "nintendo-64dd",
          "pc-engine",
          "pc-engine-cd",
          "pc-engine-ld",
          "supergrafx",
          "supergrafx-cd",
          "sony-playstation",
          "saturn",
          "super-famicom",
          "wonderswan",
          "wonderswan-color",
          "pocket-challenge-v2",
          "zx-spectrum",
          "zx-spectrum-128"
        ],
        "type": "standalone",
        "upstream": "https://github.com/ares-emulator/ares"
      }
    },
    {
      "id": "armsx1",
      "profile": {
        "bios_directory": "bios/",
        "bios_size": 524288,
        "core_classification": "community_fork",
        "core_version": "0.1.3",
        "cores": [
          "armsx1"
        ],
        "display_name": "Sony - PlayStation (ARMSX1)",
        "emulator": "ARMSX1",
        "files": [
          {
            "agnostic": true,
            "description": "PlayStation BIOS image",
            "max_size": 1048576,
            "min_size": 524288,
            "name": "scph1001.bin",
            "note": "Any image is accepted, whatever its name and length: the file is read whole and mapped at its own size. 524288 is the region psx_bios_init declares before the load, and 1048576 the SCPH-5903 image the loader names as the exception. The folder scan reaches an image only under the name bios.bin; [bios].override_file, -b and the Android picker open a path directly.",
            "required": true,
            "source_ref": "psx/dev/bios.c:21-54, psx/dev/bios.h:8-10, frontend/config.c:292-357, frontend/config.c:1540-1559, frontend/main.cpp:2529-2535"
          },
          {
            "config_key": "paths.expansion_rom",
            "description": "Expansion port ROM image",
            "max_size": 524288,
            "name": "<expansion>.rom",
            "note": "Read into the 512 KB region at 0x1f000000, which is filled with 0xff when no path is set. Named by [paths].expansion_rom, -e, or the Advanced tab of the Android settings. A path that is set and cannot be opened fails psx_init and stops the boot.",
            "required": false,
            "source_ref": "psx/dev/exp1.c:12-44, psx/dev/exp1.h:8-10, psx/psx.c:260-261, frontend/config.c:681, frontend/main.cpp:1906, android/app/src/main/java/com/armsx2/ui/settings/Ps1AdvancedTab.kt:96-100",
            "unsourceable": "any expansion port ROM the user points at, under no name and no version the code expects"
          }
        ],
        "notes": "PlayStation emulator forked from psxe, rebuilt around SDL2 frontends and a\nDear ImGui fullscreen shell. Desktop, Android, iOS, UWP, WebAssembly and\nPSVita builds come out of one tree. The Android application is\ncom.nanodata.armsx with the activity com.armsx2.Main, and its Compose\nlauncher hosts the same core in process.\nref: README.md:1-2, android/app/build.gradle:71-79,\n     android/app/src/main/AndroidManifest.xml:78-92\n\nA BIOS image is required. Boot stops before a session exists when no path\nresolves, and again when the file cannot be read. Skip BIOS does not change\nthat: the image runs from reset and the hook only takes over at the shell\nentry point, once the kernel is built.\nref: frontend/main.cpp:2529-2549, psx/psx.c:249-252, psx/fastboot.h:45,\n     psx/fastboot.c:225-239\n\npsxe_cfg_get_bios_path answers in three steps: the override file when it\nexists, then a scan of the search folder, then the override path unchanged.\nThe override is [bios].override_file or -b and defaults to bios.bin under the\npreference path SDL_GetPrefPath(\"nanodata\", \"armsx\"); the search folder is\n[bios].search_path or -B and defaults to the relative path bios.\nref: frontend/config.c:1540-1559, frontend/config.c:1385-1404,\n     frontend/config.c:677-683, frontend/config.c:54-57\n\nThe scan reads that folder once, keeps .bin and .rom, and returns the entry\nnamed bios.bin. Its other branch compares [bios].preferred_model against each\nfilename through a normaliser that drops every non-alphanumeric character and\nlowercases the rest, applied to the name including its extension, so\nscph1001.bin normalises to scph1001bin and no model value equals it. A name\ncarrying no extension, which would, is dropped by the extension filter first.\nref: frontend/config.c:292-357, frontend/config.c:226-247,\n     frontend/config.c:249-260\n\nNothing identifies the image beyond that. No name table, no size test, no\nhash. The loader takes the file's own length, allocates it, and the bus maps\nthe device from 0x1fc00000 over that same length, which is how the 1 MB\nSCPH-5903 image stays addressable in full.\nref: psx/dev/bios.c:21-54, psx/bus.c:50-54, psx/dev/bios.h:8-10\n\npreferred_model carries 22 values, SCPH-1000 through SCPH-102C, printed by\n--help-model and mirrored by the Android model picker.\nref: frontend/config.c:177-200,\n     android/app/src/main/java/com/armsx2/config/Ps1Settings.kt:416-423\n\nOn Android the preference path is the application files directory, so\nsettings.toml and the default bios.bin sit there. The BIOS picker copies the\nchosen dump to user_bios.bin and writes its absolute path into\n[bios].override_file. EmulatorActivity passes --bios <files>/bios.bin when\nthe package carries an assets/bios.bin, and the in-process launcher repeats\nthat check with stat; release 0.1.3 ships no such asset.\nref: android/app/src/main/java/com/armsx2/core/Ps1Config.kt:20-41,\n     android/app/src/main/java/com/armsx2/ui/settings/Ps1BiosTab.kt:38-48,\n     android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:58-61,\n     android/app/src/main/java/com/nanodata/armsx/EmulatorActivity.java:95-99,\n     frontend/android_jni.cpp:1708-1743, ARMSX1-0.1.3-release.apk assets\n\nThe remaining paths the core opens are per game, and are written by the\nemulator or picked by the user: memory cards, created blank at first use;\nsave states, rewind snapshots and screenshots; a GameShark .cht catalogue\nnamed by [cheats].cheats_file; and content-addressed PNG packs under the\nreplacements folder of [video].texture_dir.\nref: psx/dev/mcd.c:139-154, psx/cheats.c:346-390, psx/texrep.c:846-848\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/ARMSX2/ARMSX1",
        "source_branch": "android-compose",
        "source_commit": "fadd20b6587a291e59b49378a2428358c6663b8c",
        "systems": [
          "sony-playstation"
        ],
        "type": "standalone",
        "upstream": "https://github.com/allkern/psxe",
        "verification": "existence"
      }
    },
    {
      "id": "armsx2",
      "profile": {
        "bios_directory": "bios/",
        "bios_mode": "agnostic",
        "core_classification": "community_fork",
        "core_version": "2.6.6.5",
        "cores": [
          "armsx2",
          "armsx2_libretro"
        ],
        "display_name": "Sony - PlayStation 2 (ARMSX2)",
        "emulator": "ARMSX2",
        "files": [
          {
            "agnostic": true,
            "description": "PS2 BIOS image",
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "ps2-0230a-20080220.bin",
            "note": "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; an image named in the configuration skips that range. Read into the 4 MB ROM region and truncated to it. Shorter than 2465792 bytes disables the OSDSys parameter HLE.",
            "path": "pcsx2/bios/ps2-0230a-20080220.bin",
            "required": true,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-197, pcsx2/ps2/BiosTools.cpp:258-294, pcsx2/ps2/BiosTools.cpp:332-373",
            "standalone_path": "bios/ps2-0230a-20080220.bin",
            "validation": [
              "size"
            ]
          },
          {
            "description": "DVD player ROM",
            "max_size": 4194304,
            "name": "ps2-0230a-20080220.rom1",
            "note": "Tried as {bios}.rom1 then {biosbase}.rom1, with a case-insensitive retry on the open. Copied to the ROM1 region and truncated to 4 MB. Logged and skipped when absent.",
            "path": "pcsx2/bios/ps2-0230a-20080220.rom1",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:381, pcsx2/ps2/BiosTools.cpp:386-397, pcsx2/MemoryTypes.h:13",
            "standalone_path": "bios/ps2-0230a-20080220.rom1"
          },
          {
            "aliases": [
              "SCPH-90006_BIOS_VX_HK _230.ROM2"
            ],
            "description": "Chinese ROM extension",
            "max_size": 4194304,
            "name": "ps2-0230a-20080220.rom2",
            "note": "Same two-step naming as rom1. Copied to the ROM2 region, which is 4 MB in this tree. Only present on Chinese region consoles.",
            "path": "pcsx2/bios/ps2-0230a-20080220.rom2",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:382, pcsx2/ps2/BiosTools.cpp:386-397, pcsx2/MemoryTypes.h:14",
            "standalone_path": "bios/ps2-0230a-20080220.rom2"
          },
          {
            "description": "Console NVRAM",
            "hle_fallback": true,
            "name": "ps2-0230a-20080220.nvm",
            "note": "Read at the BIOS path with the extension replaced by nvm. Carries the console id, the iLink id, the MAC, the model number and the OSD configuration. A 1024 byte image is built in memory when the file is absent, short, or carries a blank config block, zeroed except for a fixed iLink id and the language and region defaults of the BIOS region.",
            "path": "pcsx2/bios/ps2-0230a-20080220.nvm",
            "required": false,
            "size": 1024,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:46-47, pcsx2/CDVD/CDVD.cpp:147-200",
            "standalone_path": "bios/ps2-0230a-20080220.nvm"
          },
          {
            "description": "Mechacon version",
            "hle_fallback": true,
            "name": "ps2-0230a-20080220.mec",
            "note": "Read at the BIOS path with the extension replaced by mec. Defaults to 0x00020603 and is written back at that path when it cannot be read.",
            "path": "pcsx2/bios/ps2-0230a-20080220.mec",
            "required": false,
            "size": 4,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:60, pcsx2/CDVD/CDVD.cpp:201-214",
            "standalone_path": "bios/ps2-0230a-20080220.mec"
          },
          {
            "description": "DEV9 EEPROM",
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "Opened from the working directory when the network adapter starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing or cannot be mapped.",
            "required": false,
            "size": 64,
            "source_ref": "pcsx2/DEV9/DEV9.cpp:60, pcsx2/DEV9/DEV9.cpp:109-160"
          },
          {
            "description": "DEV9 SmartMedia flash image",
            "hle_fallback": true,
            "max_size": 8650752,
            "name": "flash.dat",
            "note": "Opened from the working directory at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent, and a short read is logged.",
            "required": false,
            "source_ref": "pcsx2/DEV9/flash.cpp:8-16, pcsx2/DEV9/flash.cpp:62-86"
          },
          {
            "config_key": "EmuCore/CurrentIRX",
            "description": "IOP module injected at boot",
            "name": "<module>.irx",
            "note": "Read into the ROM region at 0x3C0000 when the IOP program counter reaches 0x1630 and the setting is longer than three characters. Empty by default.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:243-256, pcsx2/ps2/BiosTools.cpp:399-400, pcsx2/R3000AInterpreter.cpp:220, pcsx2/Config.h:1601",
            "unsourceable": "any IOP module the user points at, under no name and no version the code expects"
          },
          {
            "bundled": true,
            "description": "Game database",
            "name": "GameIndex.yaml",
            "note": "Read from the resources folder, keyed by serial, carrying the per-game fixes, patches and settings overrides. Parsed once on first lookup.",
            "path": "pcsx2/resources/GameIndex.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:43, pcsx2/GameDatabase.cpp:1205-1210",
            "standalone_path": "resources/GameIndex.yaml"
          },
          {
            "bundled": true,
            "description": "Mobile GPU game database overlay",
            "name": "armsx2_overrides.yaml",
            "note": "Second pass over the game database, merged onto the entries GameIndex.yaml declares. Carries GS and JIT tuning correct on tiler GPUs. Kept outside the shipped resources folder and copied in only for arm64 Linux, Android and iOS; the loader no-ops where it is absent.",
            "path": "pcsx2/resources/armsx2_overrides.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:50, pcsx2/GameDatabase.cpp:1211-1214, cmake/BuildParameters.cmake:186-200, pcsx2/CMakeLists.txt:1441-1451, platforms/android/app/build.gradle.kts:40-48",
            "standalone_path": "resources/armsx2_overrides.yaml"
          },
          {
            "bundled": true,
            "description": "Disc track hash database",
            "name": "RedumpDatabase.yaml",
            "note": "Loaded on the first hash lookup and used to tell the user whether a dump matches a known good one. Read by the Qt game summary page.",
            "path": "pcsx2/resources/RedumpDatabase.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:1278, pcsx2/GameDatabase.cpp:1328-1345, pcsx2-qt/Settings/GameSummaryWidget.cpp:322",
            "standalone_path": "resources/RedumpDatabase.yaml"
          },
          {
            "bundled": true,
            "description": "Game patch archive",
            "name": "patches.zip",
            "note": "Per-game pnach entries matched on serial and disc CRC. The patches and cheats folders take precedence over the archive. Fetched from the pcsx2_patches releases at build time for the desktop builds and committed for Android and iOS.",
            "path": "pcsx2/resources/patches.zip",
            "required": false,
            "source_ref": "pcsx2/Patch.cpp:118, pcsx2/Patch.cpp:290-318, pcsx2/Patch.cpp:425-435, .github/workflows/linux_build_qt.yml:33",
            "standalone_path": "resources/patches.zip"
          },
          {
            "bundled": true,
            "description": "SDL controller mapping database",
            "name": "game_controller_db.txt",
            "note": "A copy in the data root wins, then the resources folder, and the path is handed to SDL as a hint. SDL falls back to its built-in mappings when neither exists.",
            "path": "pcsx2/resources/game_controller_db.txt",
            "required": false,
            "source_ref": "pcsx2/Input/SDLInputSource.cpp:24, pcsx2/Input/SDLInputSource.cpp:614-627",
            "standalone_path": "resources/game_controller_db.txt"
          },
          {
            "bundled": true,
            "description": "Interface font",
            "name": "Roboto-Regular.ttf",
            "note": "Seeded as the standard font when no language layer supplied one, which is always the case on Android. LoadFontData fails without it and the GS device is torn down.",
            "path": "pcsx2/resources/fonts/Roboto-Regular.ttf",
            "required": true,
            "source_ref": "pcsx2/ImGui/ImGuiManager.cpp:501-523, pcsx2/ImGui/ImGuiManager.cpp:155-160, pcsx2/GS/GS.cpp:160-179",
            "standalone_path": "resources/fonts/Roboto-Regular.ttf"
          },
          {
            "bundled": true,
            "description": "Fixed-width interface font",
            "name": "RobotoMono-Medium.ttf",
            "note": "Read for the fixed-width font. LoadFontData fails without it. Also the initial path the fullscreen interface offers when picking a custom OSD font.",
            "path": "pcsx2/resources/fonts/RobotoMono-Medium.ttf",
            "required": true,
            "source_ref": "pcsx2/ImGui/ImGuiManager.cpp:544-552, pcsx2/ImGui/FullscreenUI_Settings.cpp:3417",
            "standalone_path": "resources/fonts/RobotoMono-Medium.ttf"
          },
          {
            "bundled": true,
            "description": "Font Awesome icon font",
            "name": "fa-solid-900.ttf",
            "note": "Read for the interface icon glyphs. LoadFontData fails without it.",
            "path": "pcsx2/resources/fonts/fa-solid-900.ttf",
            "required": true,
            "source_ref": "pcsx2/ImGui/ImGuiManager.cpp:554-562",
            "standalone_path": "resources/fonts/fa-solid-900.ttf"
          },
          {
            "bundled": true,
            "description": "Controller prompt font",
            "name": "promptfont.otf",
            "note": "Read for the controller button glyphs. LoadFontData fails without it.",
            "path": "pcsx2/resources/fonts/promptfont.otf",
            "required": true,
            "source_ref": "pcsx2/ImGui/ImGuiManager.cpp:564-572",
            "standalone_path": "resources/fonts/promptfont.otf"
          },
          {
            "bundled": true,
            "description": "Emoji font",
            "name": "Twemoji.Mozilla.ttf",
            "note": "First entry of the emoji script table, resolved under UserResources then the resources folder and downloaded into UserResources/fonts when neither holds it.",
            "path": "pcsx2/resources/fonts/Twemoji.Mozilla.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:340-347, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/Twemoji.Mozilla.ttf"
          },
          {
            "bundled": true,
            "description": "Android emoji font",
            "name": "NotoColorEmoji-Regular.ttf",
            "note": "Committed under the Android asset tree and unpacked with the rest of the resources folder. Rendered by the Compose interface.",
            "path": "pcsx2/resources/fonts/NotoColorEmoji-Regular.ttf",
            "required": false,
            "source_ref": "platforms/android/app/src/main/assets/resources/fonts/NotoColorEmoji-Regular.ttf, platforms/android/app/src/main/java/com/armsx2/ui/emulation/EmulationMenuScreen.kt:507",
            "standalone_path": "resources/fonts/NotoColorEmoji-Regular.ttf"
          },
          {
            "description": "Japanese interface font",
            "name": "NotoSansJP-Regular.ttf",
            "note": "First entry of the Japanese script table. Resolved under UserResources then the resources folder, and downloaded into UserResources/fonts when the interface language needs it and neither holds it. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansJP-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:354-360, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansJP-Regular.ttf"
          },
          {
            "description": "Korean interface font",
            "name": "NotoSansKR-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansKR-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:361-367, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansKR-Regular.ttf"
          },
          {
            "description": "Simplified Chinese interface font",
            "name": "NotoSansSC-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansSC-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:320-326, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansSC-Regular.ttf"
          },
          {
            "description": "Traditional Chinese interface font",
            "name": "NotoSansTC-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansTC-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:327-333, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansTC-Regular.ttf"
          },
          {
            "description": "Arabic interface font",
            "name": "NotoSansArabic-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansArabic-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:314-319, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansArabic-Regular.ttf"
          },
          {
            "description": "Hebrew interface font",
            "name": "NotoSansHebrew-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansHebrew-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:348-353, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansHebrew-Regular.ttf"
          },
          {
            "description": "Devanagari interface font",
            "name": "NotoSansDevanagari-Regular.ttf",
            "note": "Same resolution and download path as the Japanese font. Not shipped.",
            "path": "pcsx2/resources/fonts/NotoSansDevanagari-Regular.ttf",
            "required": false,
            "source_ref": "pcsx2-qt/Translations.cpp:334-339, pcsx2-qt/Translations.cpp:407-424, pcsx2-qt/Translations.cpp:541-549",
            "standalone_path": "resources/fonts/NotoSansDevanagari-Regular.ttf"
          },
          {
            "bundled": true,
            "description": "Vulkan texture function shader",
            "name": "tfx.glsl",
            "note": "Compiled at device creation. The Vulkan backend is the only one the Android, iOS and libretro builds use, and a source that cannot be read fails the pipeline compile and the device with it.",
            "path": "pcsx2/resources/shaders/vulkan/tfx.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2568, pcsx2/GS/Renderers/Common/GSDevice.cpp:422-425",
            "standalone_path": "resources/shaders/vulkan/tfx.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan conversion shader",
            "name": "convert.glsl",
            "path": "pcsx2/resources/shaders/vulkan/convert.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5521-5527, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5877",
            "standalone_path": "resources/shaders/vulkan/convert.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan presentation shader",
            "name": "present.glsl",
            "path": "pcsx2/resources/shaders/vulkan/present.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5706",
            "standalone_path": "resources/shaders/vulkan/present.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan merge shader",
            "name": "merge.glsl",
            "path": "pcsx2/resources/shaders/vulkan/merge.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5807",
            "standalone_path": "resources/shaders/vulkan/merge.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan interlace shader",
            "name": "interlace.glsl",
            "path": "pcsx2/resources/shaders/vulkan/interlace.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5756",
            "standalone_path": "resources/shaders/vulkan/interlace.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan shade boost shader",
            "name": "shadeboost.glsl",
            "note": "Compiled by the post-processing pass, which runs unconditionally in the device creation chain, so a source that cannot be read fails the device.",
            "path": "pcsx2/resources/shaders/vulkan/shadeboost.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5857, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5911-5917, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2593-2598",
            "standalone_path": "resources/shaders/vulkan/shadeboost.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan contrast adaptive sharpening shader",
            "name": "cas.glsl",
            "note": "Includes ffx_a.h and ffx_cas.h. The only shader whose compile failure is caught: sharpening is turned off and device creation carries on, because older Adreno compilers reject the compute pipeline.",
            "path": "pcsx2/resources/shaders/vulkan/cas.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5963, pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2606-2612",
            "standalone_path": "resources/shaders/vulkan/cas.glsl"
          },
          {
            "bundled": true,
            "description": "Vulkan interface shader",
            "name": "imgui.glsl",
            "path": "pcsx2/resources/shaders/vulkan/imgui.glsl",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5989",
            "standalone_path": "resources/shaders/vulkan/imgui.glsl"
          },
          {
            "bundled": true,
            "description": "FXAA shader, shared by every backend",
            "name": "fxaa.fx",
            "note": "Compiled by the Vulkan and OpenGL post-processing passes as part of device creation, so the device fails without it. The Direct3D backends compile it lazily on first use and only lose the effect.",
            "path": "pcsx2/resources/shaders/common/fxaa.fx",
            "required": true,
            "source_ref": "pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:5884, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:607, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2805-2813, pcsx2/GS/Renderers/DX11/GSDevice11.cpp:1933-1940",
            "standalone_path": "resources/shaders/common/fxaa.fx"
          },
          {
            "bundled": true,
            "description": "FidelityFX helper header",
            "name": "ffx_a.h",
            "note": "Read as a source file and substituted for the include line of the sharpening shader before compilation.",
            "path": "pcsx2/resources/shaders/common/ffx_a.h",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/Common/GSDevice.cpp:1481-1488",
            "standalone_path": "resources/shaders/common/ffx_a.h"
          },
          {
            "bundled": true,
            "description": "FidelityFX CAS header",
            "name": "ffx_cas.h",
            "note": "Substituted the same way as ffx_a.h.",
            "path": "pcsx2/resources/shaders/common/ffx_cas.h",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/Common/GSDevice.cpp:1481-1488",
            "standalone_path": "resources/shaders/common/ffx_cas.h"
          },
          {
            "bundled": true,
            "description": "OpenGL texture function vertex and geometry shader",
            "name": "tfx_vgs.glsl",
            "note": "The OpenGL backend is one of three the renderer setting selects, and it is what an Android device falls back to when Vulkan is not chosen. Its device creation fails without this source; a Vulkan session is unaffected.",
            "path": "pcsx2/resources/shaders/opengl/tfx_vgs.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:749-753, pcsx2/GS/GS.cpp:88-110",
            "standalone_path": "resources/shaders/opengl/tfx_vgs.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL texture function fragment shader",
            "name": "tfx_fs.glsl",
            "note": "Read with tfx_vgs.glsl; the OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/tfx_fs.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:749-753",
            "standalone_path": "resources/shaders/opengl/tfx_fs.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL conversion shader",
            "name": "convert.glsl",
            "note": "The OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/convert.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:441-447",
            "standalone_path": "resources/shaders/opengl/convert.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL presentation shader",
            "name": "present.glsl",
            "note": "The OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/present.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:527-532",
            "standalone_path": "resources/shaders/opengl/present.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL merge shader",
            "name": "merge.glsl",
            "note": "The OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/merge.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:563-568",
            "standalone_path": "resources/shaders/opengl/merge.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL interlace shader",
            "name": "interlace.glsl",
            "note": "The OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/interlace.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:586-591",
            "standalone_path": "resources/shaders/opengl/interlace.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL shade boost shader",
            "name": "shadeboost.glsl",
            "note": "Compiled with the FXAA program in the OpenGL device creation chain, so that device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/shadeboost.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:607-608, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3060-3066",
            "standalone_path": "resources/shaders/opengl/shadeboost.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL contrast adaptive sharpening shader",
            "name": "cas.glsl",
            "note": "A desktop GL compute shader, gated away from GL ES contexts because feeding it to an ES compiler crashes some drivers.",
            "path": "pcsx2/resources/shaders/opengl/cas.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3251, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:610-615",
            "standalone_path": "resources/shaders/opengl/cas.glsl"
          },
          {
            "bundled": true,
            "description": "OpenGL interface shader",
            "name": "imgui.glsl",
            "note": "The OpenGL device fails without it.",
            "path": "pcsx2/resources/shaders/opengl/imgui.glsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:709-710, pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:3309-3316",
            "standalone_path": "resources/shaders/opengl/imgui.glsl"
          },
          {
            "bundled": true,
            "description": "Direct3D texture function shader",
            "name": "tfx.fx",
            "note": "Read by the Direct3D 11 and Direct3D 12 backends of the Windows on arm64 build, whose devices fail without it. The Android asset step drops the dx11 folder because the mobile backends never compile it.",
            "path": "pcsx2/resources/shaders/dx11/tfx.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:215-218, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:967, platforms/android/app/build.gradle.kts:40-47",
            "standalone_path": "resources/shaders/dx11/tfx.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D conversion shader",
            "name": "convert.fx",
            "note": "The Direct3D devices fail without it.",
            "path": "pcsx2/resources/shaders/dx11/convert.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:229-231, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2827",
            "standalone_path": "resources/shaders/dx11/convert.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D presentation shader",
            "name": "present.fx",
            "note": "The Direct3D devices fail without it.",
            "path": "pcsx2/resources/shaders/dx11/present.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:265, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2971",
            "standalone_path": "resources/shaders/dx11/present.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D merge shader",
            "name": "merge.fx",
            "note": "The Direct3D devices fail without it.",
            "path": "pcsx2/resources/shaders/dx11/merge.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:317, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3050",
            "standalone_path": "resources/shaders/dx11/merge.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D interlace shader",
            "name": "interlace.fx",
            "note": "The Direct3D devices fail without it.",
            "path": "pcsx2/resources/shaders/dx11/interlace.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:352, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3014",
            "standalone_path": "resources/shaders/dx11/interlace.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D shade boost shader",
            "name": "shadeboost.fx",
            "path": "pcsx2/resources/shaders/dx11/shadeboost.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:372, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:3120",
            "standalone_path": "resources/shaders/dx11/shadeboost.fx"
          },
          {
            "bundled": true,
            "description": "Direct3D contrast adaptive sharpening shader",
            "name": "cas.hlsl",
            "note": "Includes ffx_a.h and ffx_cas.h.",
            "path": "pcsx2/resources/shaders/dx11/cas.hlsl",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:2259, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2299",
            "standalone_path": "resources/shaders/dx11/cas.hlsl"
          },
          {
            "bundled": true,
            "description": "Direct3D interface shader",
            "name": "imgui.fx",
            "note": "The Direct3D devices fail without it.",
            "path": "pcsx2/resources/shaders/dx11/imgui.fx",
            "required": false,
            "source_ref": "pcsx2/GS/Renderers/DX11/GSDevice11.cpp:2309-2313, pcsx2/GS/Renderers/DX12/GSDevice12.cpp:2327",
            "standalone_path": "resources/shaders/dx11/imgui.fx"
          },
          {
            "bundled": true,
            "description": "Achievement notification sound",
            "name": "message.wav",
            "note": "Played from the resources folder when the achievement information sound is enabled and no custom sound is set.",
            "path": "pcsx2/resources/sounds/achievements/message.wav",
            "required": false,
            "source_ref": "pcsx2/Achievements.cpp:68, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1525",
            "standalone_path": "resources/sounds/achievements/message.wav"
          },
          {
            "bundled": true,
            "description": "Achievement unlock sound",
            "name": "unlock.wav",
            "path": "pcsx2/resources/sounds/achievements/unlock.wav",
            "required": false,
            "source_ref": "pcsx2/Achievements.cpp:69, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1578",
            "standalone_path": "resources/sounds/achievements/unlock.wav"
          },
          {
            "bundled": true,
            "description": "Leaderboard submission sound",
            "name": "lbsubmit.wav",
            "path": "pcsx2/resources/sounds/achievements/lbsubmit.wav",
            "required": false,
            "source_ref": "pcsx2/Achievements.cpp:70, pcsx2/Achievements.cpp:1275-1281, pcsx2/Achievements.cpp:1672",
            "standalone_path": "resources/sounds/achievements/lbsubmit.wav"
          },
          {
            "bundled": true,
            "description": "Fullscreen interface placeholder texture",
            "name": "placeholder.png",
            "note": "Named as the placeholder texture when the fullscreen interface initialises.",
            "path": "pcsx2/resources/fullscreenui/placeholder.png",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:335",
            "standalone_path": "resources/fullscreenui/placeholder.png"
          },
          {
            "bundled": true,
            "description": "Empty save slot texture",
            "name": "no-save.png",
            "path": "pcsx2/resources/fullscreenui/no-save.png",
            "required": false,
            "source_ref": "pcsx2/ImGui/ImGuiOverlays.cpp:1664",
            "standalone_path": "resources/fullscreenui/no-save.png"
          },
          {
            "bundled": true,
            "description": "Game list menu icon",
            "name": "media-cdrom.svg",
            "path": "pcsx2/resources/fullscreenui/media-cdrom.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1367, pcsx2/ImGui/FullscreenUI.cpp:3483",
            "standalone_path": "resources/fullscreenui/media-cdrom.svg"
          },
          {
            "bundled": true,
            "description": "Start game menu icon",
            "name": "start-game.svg",
            "path": "pcsx2/resources/fullscreenui/start-game.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1373",
            "standalone_path": "resources/fullscreenui/start-game.svg"
          },
          {
            "bundled": true,
            "description": "Settings menu icon",
            "name": "applications-system.svg",
            "path": "pcsx2/resources/fullscreenui/applications-system.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1380, pcsx2/ImGui/FullscreenUI.cpp:3478",
            "standalone_path": "resources/fullscreenui/applications-system.svg"
          },
          {
            "bundled": true,
            "description": "Exit menu icon",
            "name": "exit.svg",
            "path": "pcsx2/resources/fullscreenui/exit.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1386, pcsx2/ImGui/FullscreenUI.cpp:1519",
            "standalone_path": "resources/fullscreenui/exit.svg"
          },
          {
            "bundled": true,
            "description": "Start file menu icon",
            "name": "start-file.svg",
            "path": "pcsx2/resources/fullscreenui/start-file.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1443",
            "standalone_path": "resources/fullscreenui/start-file.svg"
          },
          {
            "bundled": true,
            "description": "Start disc menu icon",
            "name": "drive-cdrom.svg",
            "path": "pcsx2/resources/fullscreenui/drive-cdrom.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1449",
            "standalone_path": "resources/fullscreenui/drive-cdrom.svg"
          },
          {
            "bundled": true,
            "description": "Start BIOS menu icon",
            "name": "start-bios.svg",
            "path": "pcsx2/resources/fullscreenui/start-bios.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1455",
            "standalone_path": "resources/fullscreenui/start-bios.svg"
          },
          {
            "bundled": true,
            "description": "Back menu icon",
            "name": "back-icon.svg",
            "path": "pcsx2/resources/fullscreenui/back-icon.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1461, pcsx2/ImGui/FullscreenUI.cpp:1511",
            "standalone_path": "resources/fullscreenui/back-icon.svg"
          },
          {
            "bundled": true,
            "description": "Desktop mode menu icon",
            "name": "desktop-mode.svg",
            "path": "pcsx2/resources/fullscreenui/desktop-mode.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1527",
            "standalone_path": "resources/fullscreenui/desktop-mode.svg"
          },
          {
            "bundled": true,
            "description": "Application banner",
            "name": "AppBanner.svg",
            "path": "pcsx2/resources/icons/AppBanner.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:762",
            "standalone_path": "resources/icons/AppBanner.svg"
          },
          {
            "bundled": true,
            "description": "Application icon",
            "name": "AppIconLarge.png",
            "note": "Drawn by the fullscreen interface, shown by the Qt setup wizard, and copied out when a desktop entry is written.",
            "path": "pcsx2/resources/icons/AppIconLarge.png",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:1291, pcsx2-qt/SetupWizardDialog.cpp:165, pcsx2-qt/QtUtils.cpp:843",
            "standalone_path": "resources/icons/AppIconLarge.png"
          },
          {
            "bundled": true,
            "description": "Windows application icon",
            "name": "AppIconLarge.ico",
            "note": "Read next to the program when a shortcut is written.",
            "path": "pcsx2/resources/icons/AppIconLarge.ico",
            "required": false,
            "source_ref": "pcsx2-qt/QtUtils.cpp:755",
            "standalone_path": "resources/icons/AppIconLarge.ico"
          },
          {
            "bundled": true,
            "description": "RetroAchievements icon",
            "name": "ra-icon.svg",
            "path": "pcsx2/resources/icons/ra-icon.svg",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI_Settings.cpp:4388, pcsx2-qt/SetupWizardDialog.cpp:428, pcsx2-qt/Settings/AchievementLoginDialog.cpp:21",
            "standalone_path": "resources/icons/ra-icon.svg"
          },
          {
            "bundled": true,
            "description": "Compatibility rating icons",
            "name": "star-<rating>.svg",
            "note": "Six files, star-0.svg through star-5.svg, named from the compatibility rating of the entry.",
            "path": "pcsx2/resources/icons/",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:767, pcsx2-qt/GameList/GameListModel.cpp:529",
            "standalone_path": "resources/icons/"
          },
          {
            "bundled": true,
            "description": "Region flag icons",
            "name": "<region>.svg",
            "note": "Forty-eight files, named from the region of the entry through RegionToFlagFilename.",
            "path": "pcsx2/resources/icons/flags/",
            "required": false,
            "source_ref": "pcsx2/ImGui/FullscreenUI.cpp:2842",
            "standalone_path": "resources/icons/flags/"
          },
          {
            "bundled": true,
            "description": "Game list cover placeholder",
            "name": "cover-placeholder.png",
            "path": "pcsx2/resources/cover-placeholder.png",
            "required": false,
            "source_ref": "pcsx2-qt/GameList/GameListModel.cpp:531",
            "standalone_path": "resources/cover-placeholder.png"
          }
        ],
        "notes": "PlayStation 2 emulator, a GPL-3.0 fork of PCSX2 that replaces the x86-64 only\nEE, IOP, VU and vtlb fast memory recompilers with native AArch64 ones. One tree\nbuilds the Android application com.armsx2, an iOS package, macOS, Windows and\nLinux on arm64, an SDL handheld frontend, and a libretro core.\nref: README.md:1-24, platforms/android/app/build.gradle.kts:17-74,\n     .github/workflows/build-all.yml:79-85\n\nA BIOS image is required and boot stops without one: LoadBIOS returning false\nmakes VMManager report that a PlayStation 2 BIOS is needed and return a startup\nfailure. Only a GS dump replay skips the load. The folder is Bios under the data\ndirectory, bios by default, and on Android the setup wizard keeps it in\napp-private storage because the native file APIs cannot reliably open a dump off\na SAF volume.\nref: pcsx2/ps2/BiosTools.cpp:332-348, pcsx2/VMManager.cpp:1592-1607,\n     pcsx2/Pcsx2Config.cpp:2498,\n     platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/NativeApp.java:82-93\n\nDetection is by content. The scan lists the BIOS folder, keeps files between 4\nand 8 MB, and accepts an image whose romdir carries a RESET entry followed by a\nreadable ROMVER; the fifth ROMVER character gives the zone among Japan, USA,\nEurope, Asia, China, T10K, COH-H, Test and Free, and an EXTINFO entry supplies\nthe serial. An image named in the configuration is opened at its own path,\nwithout the size filter. No name and no hash is matched anywhere. The image is\nread into the 4 MB ROM region and truncated to it, and one shorter than 2465792\nbytes turns off the OSDSys parameter HLE. IsBIOSFromFd runs the same romdir test\non a file descriptor, which is how the Android picker identifies a dump handed\nover by the storage framework.\nref: pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-197,\n     pcsx2/ps2/BiosTools.cpp:258-309, pcsx2/ps2/BiosTools.cpp:350-373\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, and the open retries case-insensitively. Both regions\nare 4 MB here. The nvm and the mec are read at the substituted extension only;\nthe nvm is rebuilt in memory with region and language defaults when it is\nmissing or its config block is blank, and the mec is written back to disk as\n0x00020603 when it cannot be read.\nref: pcsx2/ps2/BiosTools.cpp:214-241, pcsx2/ps2/BiosTools.cpp:381-397,\n     pcsx2/MemoryTypes.h:12-14, pcsx2/CDVD/CDVD.cpp:46-60,\n     pcsx2/CDVD/CDVD.cpp:147-214\n\nThe network adapter opens eeprom.dat and flash.dat from the working directory,\nstanding in a compiled-in image for the first and a card filled with 0xFF for\nthe second. DEV9hdd.raw is the default name of the empty disk image the settings\npage writes, and memory cards, save states and screenshots are likewise produced\nby the emulator rather than read from a distribution.\nref: pcsx2/DEV9/DEV9.cpp:109-160, pcsx2/DEV9/flash.cpp:8-16,\n     pcsx2/DEV9/flash.cpp:62-86, pcsx2/DEV9/DEV9.h:31-33\n\nAn IRX named in the configuration is read into the ROM region at 0x3C0000 once\nthe IOP reaches 0x1630. The field is empty by default and names no file of its\nown.\nref: pcsx2/ps2/BiosTools.cpp:243-256, pcsx2/ps2/BiosTools.cpp:399-400,\n     pcsx2/R3000AInterpreter.cpp:220\n\nEverything under the resources folder is read at its own name from\nEmuFolders::Resources, and GetOverridableResourcePath lets a copy in\nUserResources take precedence. The standalone builds carry the folder with them,\nthe Android application unpacks it from its assets and force-refreshes the\nshaders and the two game databases on update because a stale copy no longer\nmatches the binary. The libretro core ships as a bare shared object and reads\nthe same tree from <system>/pcsx2/resources, with the BIOS folder at\n<system>/pcsx2/bios, so a libretro user supplies both.\nref: pcsx2/Pcsx2Config.cpp:2348-2357, pcsx2/Pcsx2Config.cpp:2507,\n     pcsx2/Pcsx2Config.cpp:2584-2598, pcsx2-libretro/Main.cpp:157-158,\n     pcsx2-libretro/Main.cpp:1000,\n     platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:60-61,\n     platforms/android/app/src/main/java/kr/co/iefriends/pcsx2/MainActivity.java:355-372\n\nMissing resources are not uniformly survivable. A font that cannot be read fails\nLoadFontData, which fails ImGuiManager::Initialize and tears the GS device down,\nwhichever renderer is running. A shader source that cannot be read fails the\npipeline compile and the device with it, but only for the backend that reads it,\nand the renderer setting picks among OpenGL, Vulkan and, on Windows, Direct3D 11\nand 12. Vulkan is the only backend the Android, iOS and libretro builds have, so\nits sources are the ones no session can do without. The single caught failure is\nthe Vulkan sharpening pipeline, which turns itself off. The databases, the patch\narchive, the controller mappings, the sounds and the interface artwork degrade\ninstead.\nref: pcsx2/ImGui/ImGuiManager.cpp:155-160, pcsx2/ImGui/ImGuiManager.cpp:501-575,\n     pcsx2/GS/GS.cpp:88-110, pcsx2/GS/GS.cpp:160-179,\n     pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2593-2612\n\nThe Qt builds resolve a per-script interface font by filename, first under\nUserResources then under the resources folder, and download the first entry of\nthe script table into UserResources/fonts when neither holds it. Only the Latin\nand emoji entries are shipped.\nref: pcsx2-qt/Translations.cpp:312-370, pcsx2-qt/Translations.cpp:407-424,\n     pcsx2-qt/Translations.cpp:541-549\n",
        "profiled_date": "2026-08-11",
        "resources_directory": "resources/",
        "source": "https://github.com/ARMSX2/ARMSX2",
        "source_commit": "e509b17e7a8f741f89c1e2a36539c32122467d34",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/PCSX2/pcsx2"
      }
    },
    {
      "id": "atari800",
      "profile": {
        "core_classification": "official_port",
        "core_version": "3.1.0",
        "cores": [
          "atari800"
        ],
        "display_name": "Atari - 400/800/600XL/800XL/130XE/5200 (Atari800)",
        "emulator": "Atari800",
        "files": [
          {
            "aliases": [
              "atari5200.rom",
              "atar5200.rom",
              "5200.bin",
              "atari_5200.rom"
            ],
            "hle_fallback": true,
            "md5": "281f20ea4320404ec820fb7ec0693b38",
            "name": "5200.rom",
            "note": "Atari 5200 BIOS (original). Mapped at $F800-$FFFF. Altirra 5200 OS is used when this file is absent.\n",
            "path": "5200.rom",
            "required": false,
            "size": 2048,
            "source_ref": "atari800/src/sysrom.c:99-100, atari800/src/sysrom.c:257",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "ataribasic.rom",
              "basic.rom",
              "atari_basic.rom"
            ],
            "hle_fallback": true,
            "md5": "0bac0c6a50104045d902df4503a4c30b",
            "name": "ATARIBAS.ROM",
            "note": "Atari BASIC Rev C. Required for 400/800 software that needs BASIC. Altirra BASIC is used as fallback. Enable via core option atari800_opt2.\n",
            "path": "ATARIBAS.ROM",
            "required": false,
            "size": 8192,
            "source_ref": "atari800/src/sysrom.c:101-103, atari800/src/sysrom.c:259",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "atari_osa.rom",
              "atari_os_a.rom"
            ],
            "hle_fallback": true,
            "md5": "eb1f32f5d9f382db1bbfb8d7f9cb343a",
            "name": "ATARIOSA.ROM",
            "note": "Atari 400/800 OS Rev A. Altirra OS 800 is used as fallback. Auto-select order: OS B NTSC, OS A NTSC, OS A PAL, custom, Altirra.\n",
            "path": "ATARIOSA.ROM",
            "required": false,
            "size": 10240,
            "source_ref": "atari800/src/sysrom.c:85-86, atari800/src/sysrom.c:252",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "atari_osb.rom",
              "atari_os_b.rom"
            ],
            "crc32": "0e86d61d",
            "hle_fallback": true,
            "md5": "4177f386a3bac989a981d3fe3388cb6c",
            "name": "ATARIOSB.ROM",
            "note": "Atari 400/800 OS Rev B (NTSC). CRC32 0x0e86d61d matches sysrom.c SYSROM_B_NTSC. Preferred over Rev A for 400/800 mode. Note: .info lists md5 a3e8d617c95d08031fe1b20d541434b2 which is a different dump (crc32 3e28a1fe) -- both in repo, the CRC32-matched version is the one sysrom.c auto-detects.\n",
            "path": "ATARIOSB.ROM",
            "required": false,
            "size": 10240,
            "source_ref": "atari800/src/sysrom.c:87, atari800/src/sysrom.c:253",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "atarixlxe.rom",
              "atari_xlxe.rom",
              "atari_xl_xe.rom"
            ],
            "hle_fallback": true,
            "md5": "06daac977823773a3eea3422fd26a703",
            "name": "ATARIXL.ROM",
            "note": "Atari XL/XE OS. Used for 800XL, 130XE, and XEGS modes. Altirra XL OS is used as fallback.\n",
            "path": "ATARIXL.ROM",
            "required": false,
            "size": 16384,
            "source_ref": "atari800/src/sysrom.c:88-97, atari800/src/sysrom.c:255",
            "validation": [
              "crc32"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "b7a2a04677d34f069eeb643d5238bf86",
            "name": "BB01R4_OS.ROM",
            "note": "Atari XEGS OS Rev 4 (BB01R4). Preferred OS for XEGS machine mode.\n",
            "path": "BB01R4_OS.ROM",
            "required": false,
            "size": 16384,
            "source_ref": "atari800/src/sysrom.c:96",
            "validation": [
              "crc32"
            ]
          },
          {
            "md5": "d7eb37aec6960cba36bc500e0e5d00bc",
            "name": "XEGAME.ROM",
            "note": "XEGS built-in Missile Command ROM. Only used in XEGS machine mode. No built-in replacement exists for this ROM.\n",
            "path": "XEGAME.ROM",
            "required": false,
            "size": 8192,
            "source_ref": "atari800/src/sysrom.c:104",
            "validation": [
              "crc32"
            ]
          }
        ],
        "notes": {
          "altirra_note": "The Altirra OS/BASIC replacements are open-source alternatives compiled directly into the core binary (roms/ directory in source). They provide good compatibility for most software but real ROMs give better accuracy.\n",
          "cfg_note": "On first boot the core creates .atari800.cfg in the frontend home directory. It scans the system directory for ROM files by CRC32 first, then by filename. The core option atari800_opt1 controls whether this legacy config is loaded.\n",
          "machine_selection": "Core option atari800_system selects the emulated machine. Each machine type has its own preferred OS ROM auto-select order defined in sysrom.c.\n"
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-atari800",
        "source_commit": "9d3bcf283502512052e21c6f1453fbdf7aa3122b",
        "systems": [
          "atari-400-800",
          "atari-5200",
          "xegs"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/atari800/atari800"
      }
    },
    {
      "id": "ax360e",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.18",
        "cores": [
          "ax360e"
        ],
        "display_name": "Microsoft - Xbox 360 (aX360e)",
        "emulator": "aX360e",
        "exclusion_note": "Six file loads present in the vendored tree are not reached by this build and are not listed. The notification sound named by notification_sound_path is played inside a XE_PLATFORM_WIN32 block, and the setting is dropped from the generated preference screen. tahoma.ttf and msgothic.ttc are read by the Windows font paths only. The fontconfig CJK match is compiled out by XE_PLATFORM_LINUX && !(XE_PLATFORM_ANDROID || XE_PLATFORM_AX360E), and platform.h defines XE_PLATFORM_AX360E for this target. gamecontrollerdb.txt belongs to the SDL input driver, and xenia-hid-sdl is absent from the link list. portable.txt is read by xenia_main.cc, which is not compiled, the application supplying its own windowed app. libSPIRV-Tools-shared.so is loaded by the standalone shader compiler and needs VULKAN_SDK in the environment. librenderdoc.so is opened with RTLD_NOLOAD, which returns a handle only when the library is already mapped and never reads the file. ref: ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_guest_notification.cc:49-60,\n     ax360e/app/src/main/cpp/emulator_ax360e.cpp:356,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:376-407,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:409-493,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/base/platform.h:34-37,\n     ax360e/app/src/main/cpp/CMakeLists.txt:91-131,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/app/xenia_main.cc:480,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/spirv_tools_context.cc:28-37,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/renderdoc_api.cc:35-41\n",
        "files": [
          {
            "config_key": "Vulkan|vulkan_lib_path",
            "description": "Replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Imported through a picker that keeps only names ending in .zip. The archive is read whole, meta.json names the library to keep, and a single .so is taken instead when no meta.json is present; the .so files and meta.json are unpacked into a directory named after the archive, in internal storage. The configured path is read before the instance is created and opened through adrenotools when it exists, otherwise the system libvulkan.so is used. The setting is greyed out on devices without /dev/kgsl-3d0.",
            "required": false,
            "source_ref": "ax360e/app/src/main/java/aenu/ax360e/EmulatorSettings.java:709-713, ax360e/app/src/main/java/aenu/ax360e/Utils.java:150-215, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:34, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/vulkan/vulkan_instance.cc:71-91, ax360e/app/src/main/java/aenu/emulator/Emulator.java:116-122",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          },
          {
            "config_key": "UI|custom_font_path",
            "description": "Replacement face for the overlay text",
            "name": "<font>.ttf",
            "note": "Loaded first when the configured path exists, over the Basic Latin, Latin Supplement, Extended Latin, Greek, Cyrillic, punctuation, superscript, letterlike and number form ranges. A face that fails to build is cleared and the embedded ProggyTiny is used instead, so the absence is covered.",
            "required": false,
            "source_ref": "ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:42-44, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:340-374, ax360e/app/src/main/cpp/xenia-canary/src/xenia/ui/imgui_drawer.cc:507-514",
            "unsourceable": "any TrueType face the user picks, with no name or version the code expects"
          },
          {
            "bundled": true,
            "description": "Memory patch set for one title",
            "name": "<title_id> - <title>.patch.toml",
            "note": "Read from the patches directory under the storage root, keeping names that open with eight hexadecimal digits and close with .patch.toml. The title id and title name fields and a hash node are mandatory, the file is dropped without them, and each entry of the patch array is applied only when its is_enabled flag is set and the module hash matches. Patching is on by default.",
            "required": false,
            "source_ref": "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:17-18, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-98, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.h:121-122, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patcher.cc:22-35, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:308"
          },
          {
            "config_key": "General|allow_plugins",
            "description": "Plugin manifest for one title",
            "name": "plugins.toml",
            "note": "Read from plugins/<TITLE_ID>/ under the storage root, where the directory name is eight hexadecimal digits. Each entry of the plugin array needs a hash node, and an entry without one is skipped. Plugin loading is off by default, so nothing under plugins is scanned until it is turned on.",
            "required": false,
            "source_ref": "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:16-21, ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:40-127, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:320-321",
            "unsourceable": "per-title manifest written by whoever authors the mod, with no distributed form"
          },
          {
            "description": "Plugin module named by a plugin manifest",
            "name": "<plugin>.xex",
            "note": "The title directory is mounted as the plugins device and each enabled entry whose hash matches the running module is loaded as a user module on its own thread. A directory that cannot be mounted is a fatal error.",
            "required": false,
            "source_ref": "ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/plugin_loader.cc:175-257, ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:1996-1999",
            "unsourceable": "homebrew module built for one title, distributed with the mod it belongs to"
          },
          {
            "bundled": true,
            "description": "Encrypted profile account blob",
            "load_from": "content_dir",
            "name": "Account",
            "note": "Opened from the mounted profile when a XUID is logged in, and decrypted with the 0x19 key, retail first then devkit, against the HMAC the first sixteen bytes carry. The application extracts the one it ships for XUID E0300000A360E000 on first run, and the emulator writes its own when a profile is created.",
            "path": "content/<XUID>/FFFE07D1/00010000/<XUID>/Account",
            "required": false,
            "source_ref": "ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:188-230, ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:40-68, ax360e/app/src/main/java/aenu/ax360e/Application.java:30-34, ax360e/app/src/main/java/aenu/ax360e/Application.java:92-96"
          }
        ],
        "mode": "standalone",
        "notes": "Xbox 360 emulator for Android, distributed on Google Play as aenu.ax360e and\naenu.ax360e.free. Xenia Canary is vendored whole under\napp/src/main/cpp/xenia-canary at canary_experimental dc561e4d, and a JNI layer\nreplaces the desktop front end: its own windowed app and window, AAudio and\nOpenSLES audio systems, an Android input driver, and disc image, disc archive,\nSTFS and XEX devices backed by the Storage Access Framework.\nref: ax360e/app/src/main/cpp/version.h:4-5,\n     ax360e/app/src/main/cpp/CMakeLists.txt:39-74,\n     ax360e/app/src/main/cpp/ax360e_emu.cpp:615\n\nThe version is read from the commit subjects, which carry it: 1.18 is the head\nof main, 1.17 the drop before it. The repository has no tags, and the only\ngradle file committed is app/build.gradle.bak, which still declares versionName\n0.14 and is renamed and completed with the signing block at build time.\nref: ax360e/README.md, ax360e/app/build.gradle.bak:13-14\n\nNo Xbox 360 system file is loaded. The kernel, XAM and XBDM are HLE modules\nregistered at startup, and every key the emulator needs is a constant in the\nsource: the XEX1 retail, XEX2 retail and XEX2 devkit keys tried in turn when an\nimage is read, the 0x19 key pair the profile blob is encrypted with, and the\nkey vault map XeKeysGetKey answers from. There is no NAND, flash or keyvault\npath.\nref: ax360e/app/src/main/cpp/xenia-canary/src/xenia/emulator.cc:316-318,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:54-62,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/cpu/xex_module.cc:953-963,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/util/crypto_utils.cc:20-31,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xboxkrnl/xboxkrnl_crypt.cc:164-168\n\nThe storage root is the external files directory of the package and is passed\nas a launch argument beside the config path and the log path. Content, cache,\npatches and plugins hang off it, the global configuration is\nxenia-canary.config.toml, and per title overrides live in\ncustom_config/<title_id>.config.toml. The custom driver directory sits in\ninternal storage instead, because the external filesystem cannot carry an\nexecutable mapping.\nref: ax360e/app/src/main/java/aenu/ax360e/Application.java:14-53,\n     ax360e/app/src/main/java/aenu/ax360e/EmulatorActivity.java:67-73,\n     ax360e/app/src/main/cpp/ax360e_emu.cpp:273-316\n\nES-DE starts the emulator with the aenu.intent.action.AX360E action and a\ngame_uri extra. The native side dispatches on the name the descriptor resolves\nto: .xex, .iso and .zar each go to their own loader, and anything else is taken\nfor an STFS container and launched beside a sibling directory named after the\nfile with .data appended.\nref: ax360e/app/src/main/AndroidManifest.xml:57-59,\n     ax360e/app/src/main/cpp/ax360e_emu.cpp:554-575\n\nA default profile ships with the application. Its Account blob is extracted\nfrom the assets on first run under XUID E0300000A360E000, and the shipped\nconfiguration logs that XUID into slot 0. Further profiles are created by the\nemulator itself, which writes the blob it encrypts.\nref: ax360e/app/src/main/java/aenu/ax360e/Application.java:30-34,\n     ax360e/app/src/main/java/aenu/ax360e/Application.java:92-96,\n     ax360e/app/src/main/assets/config/default_config.toml:314,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/kernel/xam/profile_manager.cc:502-558\n\n477 game patches ship inside the APK. The patch database reads the patches\ndirectory only, so a bundled patch reaches the emulator once the user opens the\npatch dialog for that title and presses Apply, which writes the asset out under\nthe same name.\nref: ax360e/app/src/main/assets/game-patches,\n     ax360e/app/src/main/cpp/xenia-canary/src/xenia/patcher/patch_db.cc:30-56,\n     ax360e/app/src/main/java/aenu/ax360e/Emulator.java:121-151,\n     ax360e/app/src/main/java/aenu/ax360e/MainActivity.java:503-512\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/aenu1/ax360e",
        "source_branch": "main",
        "source_commit": "a451abd20ae0660bc53bcf90473ac0e6c6c0d86d",
        "systems": [
          "microsoft-xbox-360"
        ],
        "type": "standalone",
        "upstream": "https://github.com/xenia-canary/xenia-canary",
        "upstream_commit": "dc561e4df578c903087f9bdf56ff61d9ef9f2a93"
      }
    },
    {
      "id": "azahar",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "azahar"
        ],
        "display_name": "Nintendo - 3DS (Azahar)",
        "emulator": "Azahar",
        "files": [
          {
            "hle_fallback": true,
            "name": "keys.txt",
            "note": "embedded encrypted fallback if missing",
            "path": "sysdata/keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:283, src/common/common_paths.h:83",
            "system": "nintendo-3ds"
          },
          {
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "legacy load path; embedded open-source font used if missing",
            "path": "sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:263-278",
            "system": "nintendo-3ds"
          },
          {
            "name": "seeddb.bin",
            "note": "game seed database for 9.6+ titles",
            "path": "sysdata/seeddb.bin",
            "required": false,
            "source_ref": "src/core/file_sys/seed_db.cpp:15",
            "system": "nintendo-3ds"
          },
          {
            "name": "otp.bin",
            "note": "OTP data for console key derivation",
            "path": "sysdata/otp.bin",
            "required": false,
            "size": 256,
            "source_ref": "src/core/hw/unique_data.cpp:126-167, src/core/hw/unique_data.cpp:213",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "crypto"
            ]
          },
          {
            "name": "movable.sed",
            "note": "console-unique key seed; 288 bytes without the AES MAC block, 320 with it",
            "path": "nand/private/movable.sed",
            "required": false,
            "size": [
              288,
              320
            ],
            "source_ref": "src/core/hw/unique_data.cpp:170-200, src/core/hw/unique_data.cpp:217, src/core/hw/unique_data.h:103-133",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "name": "SecureInfo_A",
            "note": "console serial and region data",
            "path": "nand/rw/sys/SecureInfo_A",
            "required": false,
            "size": 273,
            "source_ref": "src/core/hw/unique_data.cpp:43-92, src/core/hw/unique_data.cpp:205",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "name": "LocalFriendCodeSeed_B",
            "note": "friend code generation seed",
            "path": "nand/rw/sys/LocalFriendCodeSeed_B",
            "required": false,
            "size": 272,
            "source_ref": "src/core/hw/unique_data.cpp:94-123, src/core/hw/unique_data.cpp:209, src/core/hw/unique_data.h:76",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          }
        ],
        "notes": "Successor to Citra (via Lime3DS). Libretro port by johndoe6345789.\nData dir: azahar-emu (legacy: citra-emu, lime3ds-emu).\nref: src/common/common_paths.h:41-43\n\nKey file named keys.txt (not aes_keys.txt like old Citra).\nEmbedded encrypted key fallback if keys.txt absent.\nref: src/core/hw/aes/key.cpp:282-297\n\nUses RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.\nref: src/citra_libretro/environment.cpp:179\n\n.info has firmware_count=0 but core loads files from system_dir.\n\nboot9.bin and sector0x96.bin are defined in common_paths.h:84-85\nbut never loaded by any code path. Dead defines from Citra heritage.\n\nSystem archives (shared font, Mii data, country list, bad word list)\nhave open-source replacements embedded in the binary.\nref: src/core/file_sys/archive_ncch.cpp:146-176\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/johndoe6345789/azahar_libretro",
        "source_commit": "9dd12da328c753806cbd4f2b0e048fced97ae97d",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/azahar-emu/azahar"
      }
    },
    {
      "id": "azaharplus",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2126.0-A",
        "cores": [
          "azaharplus"
        ],
        "display_name": "Nintendo - 3DS (AzaharPlus)",
        "emulator": "AzaharPlus",
        "files": [
          {
            "hle_fallback": true,
            "name": "keys.txt",
            "note": "AES key slots, common keys and NFC secrets; embedded encrypted blob used if missing",
            "path": "sysdata/keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:227-366, src/core/hw/aes/key.cpp:475-615",
            "system": "nintendo-3ds"
          },
          {
            "name": "aes_keys.txt",
            "note": "legacy keyfile format, parsed without section markers",
            "path": "sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:368-471, src/common/common_paths.h:86",
            "system": "nintendo-3ds"
          },
          {
            "name": "boot9.bin",
            "note": "bootrom key section read at offset 55760, filling 80 key slots",
            "path": "sysdata/boot9.bin",
            "required": false,
            "size": 65536,
            "source_ref": "src/core/hw/aes/key.cpp:156-225, src/common/common_paths.h:87",
            "system": "nintendo-3ds",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "legacy path, tried after the shared font system archive",
            "path": "sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:278-294, src/core/hle/service/apt/apt.cpp:305",
            "system": "nintendo-3ds"
          },
          {
            "hle_fallback": true,
            "name": "seeddb.bin",
            "note": "game seed database for 9.6+ titles; written out from the embedded seeds if absent",
            "path": "sysdata/seeddb.bin",
            "required": false,
            "source_ref": "src/core/file_sys/seed_db.cpp:52-103",
            "system": "nintendo-3ds"
          },
          {
            "name": "otp.bin",
            "note": "console-unique OTP, AES-CBC decrypted then checked against the OTP magic",
            "path": "sysdata/otp.bin",
            "required": false,
            "size": 256,
            "source_ref": "src/core/file_sys/otp.cpp:35-80, src/core/hw/unique_data.cpp:224-275",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "crypto"
            ]
          },
          {
            "name": "movable.sed",
            "note": "console-unique key seed; 288 bytes without the AES MAC block, 320 with it",
            "path": "nand/private/movable.sed",
            "required": false,
            "size": [
              288,
              320
            ],
            "source_ref": "src/core/hw/unique_data.cpp:277-319, src/core/hw/unique_data.h:105-135",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "name": "SecureInfo_A",
            "note": "console serial and region; a failed signature is retried against every region",
            "path": "nand/rw/sys/SecureInfo_A",
            "required": false,
            "size": 273,
            "source_ref": "src/core/hw/unique_data.cpp:123-181, src/core/hw/unique_data.h:59",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "name": "LocalFriendCodeSeed_B",
            "note": "friend code generation seed",
            "path": "nand/rw/sys/LocalFriendCodeSeed_B",
            "required": false,
            "size": 272,
            "source_ref": "src/core/hw/unique_data.cpp:183-222, src/core/hw/unique_data.h:78",
            "system": "nintendo-3ds",
            "validation": [
              "size",
              "signature"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Fork of Azahar. Data dir: azaharplus-emu (AzaharPlus on Windows and macOS),\nwith citra-emu and lime3ds-emu probed as legacy locations.\nref: src/common/common_paths.h:27-49\n\nInitKeys reads three key sources in order: boot9.bin, keys.txt, aes_keys.txt.\nref: src/core/hw/aes/key.cpp:617-633\n\nkeys.txt has an AES-encrypted key blob compiled into the binary, used when the\nfile is absent. ENABLE_BUILTIN_KEYBLOB defaults to ON.\nref: src/core/hw/aes/key.cpp:485-613, CMakeLists.txt:153\n\n1861 title seeds are compiled in and loaded before seeddb.bin is read.\nref: src/core/file_sys/seed_db.cpp:52-54, src/core/file_sys/seed_db.cpp:220\n\nSystem archives (shared font, Mii data, country list, bad word list) have\nopen-source replacements embedded in the binary, and ClCertA falls back to an\nembedded certificate and key pair.\nref: src/core/file_sys/archive_ncch.cpp:174-203,\nsrc/core/hle/service/http/http_c.cpp:2107-2133\n\notp.bin, movable.sed, SecureInfo_A and LocalFriendCodeSeed_B are replaced by\nembedded dummy data when enable_required_online_lle_modules is set. That\nsetting defaults to false, and every loader returns a not-found status without\nit.\nref: src/common/settings.h:492-493\n\nSystem titles are downloaded and installed in-app from the Nintendo CDN, so\nthe NAND title tree is not user-supplied.\nref: src/core/nus_download.cpp:13, src/core/hle/service/am/am.cpp:1220-1243\n\nsector0x96.bin is defined but read by no code path.\nref: src/common/common_paths.h:88\n\nmcu.dat, mac.txt, digests.txt, cecIds.txt and http_hle_replace_rules.txt live\nin sysdata but hold per-installation state the emulator writes itself.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/AzaharPlus/AzaharPlus",
        "source_commit": "18775d91a5c70be33ec828a32d9007384c4fad98",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone",
        "upstream": "https://github.com/AzaharPlus/AzaharPlus"
      }
    },
    {
      "id": "b2",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.4",
        "cores": [
          "b2"
        ],
        "display_name": "Acorn - BBC Micro (b2)",
        "emulator": "b2",
        "files": [],
        "notes": "Libretro port by Zoltan Balogh of Tom Seddon's b2 BBC Micro emulator.\nis_experimental=true in .info.\nref: zoltanvb/b2-libretro, tom-seddon/b2\n\nStandalone loads ROMs from etc/roms/ via GetAssetPath() + LoadFile().\nref: tom-seddon/b2/src/b2/roms.cpp:9-10\n\nLibretro port embeds all ROMs as hex arrays in src/libretro/roms.hpp.\ncreate_core() loads OS and sideways ROMs from static machine_types[] arrays.\nGetAssetPath() and LoadFile() are stubbed — no file I/O at runtime.\nref: zoltanvb/b2-libretro/src/libretro/roms.hpp\nref: zoltanvb/b2-libretro/src/libretro/core.cpp:274-304\nref: zoltanvb/b2-libretro/src/libretro/adapters.cpp:74-78\n\n9 machine types: B/Acorn 1770, B/Watford DDB2, B/Watford DDB3,\nB/Opus 1770, B/Opus Challenger 256K, B/Opus Challenger 512K,\nB+, B+128, Master 128 (MOS 3.20).\nMaster 3.50, Master Turbo, Master Compact not yet implemented.\nref: zoltanvb/b2-libretro/src/libretro/core.h:117\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/zoltanvb/b2-libretro",
        "source_commit": "6485984cddf50e20fb7d9d5d350a9d54265c283c",
        "systems": [
          "bbc-micro-b",
          "bbc-micro-bplus",
          "bbc-master-128"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/tom-seddon/b2"
      }
    },
    {
      "id": "basiliskii",
      "profile": {
        "core_version": "1.0",
        "cores": [
          "basiliskii"
        ],
        "display_name": "Apple - Macintosh 68k (Basilisk II)",
        "emulator": "Basilisk II",
        "files": [
          {
            "description": "Macintosh ROM image, 512 KB SE/Classic or 512 KB / 1 MB 32-bit clean Mac II",
            "max_size": 1048576,
            "min_size": 524288,
            "name": "ROM",
            "required": true,
            "source_ref": "BasiliskII/src/Unix/main_unix.cpp:109,685,692, BasiliskII/src/rom_patches.cpp:830-842, BasiliskII/src/main.cpp:67",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "68k Macintosh emulator living in the macemu tree alongside SheepShaver.\nEmulates a Mac Classic or a Mac II series machine depending on the ROM\nsupplied. Default model ID is 5 (Mac IIci) on a 68030\n(prefs_items.cpp:88-89).\n\nROM loading (main_unix.cpp:681-702, main_windows.cpp:367,\nmain_macosx.mm:431): the path comes from the \"rom\" prefs item\n(prefs_items.cpp:51) and falls back to a file named ROM in the working\ndirectory (main_unix.cpp:109). A missing or unreadable file raises\nSTR_NO_ROM_FILE_ERR and calls QuitEmulator.\n\nTwo gates run on the image. main_unix.cpp:692 accepts only sizes of 64K,\n128K, 256K, 512K or 1024K. CheckROM (rom_patches.cpp:830-842), called from\nInitAll at main.cpp:67, then reads the version word at ROM offset 8 and\naccepts 0x067c (32-bit clean Mac II, 512K/1MB) under real and direct\naddressing, adding 0x0276 (SE/Classic, 256K/512K) under banks addressing.\nconfigure.ac:61-68,1440-1477 defaults --enable-addressing to fastest,\nwhich resolves to real or direct, so a stock build takes 32-bit clean ROMs\nonly. 0x0000 (Mac 128K), 0x0075 (Mac Plus) and 0x0178 (non 32-bit clean\nMac II) are refused by every addressing mode. PatchROM\n(rom_patches.cpp:1834-1852) then rewrites the image in memory, injecting\nreplacement .Sony, .Disk, .AppleCD and serial drivers. Nothing is\nchecksummed: print_rom_info (rom_patches.cpp:298-310) prints the ROM header\nchecksum without comparing it against anything.\n\nMac OS itself and the games live in disk images referenced by the disk,\nfloppy and cdrom prefs items, supplied by the user.\n\nFour files are installed by the emulator's own Makefile into\n$(datadir)/BasiliskII (Makefile.in:25,155-157) and read from there:\n  keycodes            X keycode to Mac keycode table, read only when the\n                      keycodes prefs item is true, which defaults to false\n                      (prefs_unix.cpp:119). Overridable with keycodefile.\n                      video_sdl2.cpp:94-97,1231, video_x.cpp:1492\n  BasiliskII_keycodes tried when keycodes is absent (video_sdl2.cpp:98,\n                      1232), shipped in src/MacOSX/\n  fbdevices           frame buffer device table, read by the X11 backend\n                      built with --enable-fbdev-dga. Overridable with\n                      fbdevicefile. video_x.cpp:1152,1186\n  tunconfig           script run to configure the tunN interface for\n                      ethernet. Overridable with etherconfig.\n                      ether_unix.cpp:108,381\n\nThe preferences file (.basilisk_ii_prefs, prefs_unix.cpp:50) and the PRAM\nfile (.basilisk_ii_xpram on Unix, BasiliskII_xpram.dat on Windows,\nxpram_unix.cpp:32, xpram_windows.cpp:33) are written by the emulator when\nabsent.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/cebix/macemu",
        "source_commit": "96e512bd6376e78a2869f16dcc8a9028bce5ee72",
        "systems": [
          "apple-macintosh",
          "macintosh-ii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/cebix/macemu"
      }
    },
    {
      "id": "beebem",
      "profile": {
        "core_classification": "other",
        "core_version": "4.19",
        "cores": [
          "beebem"
        ],
        "display_name": "Acorn - BBC Micro (BeebEm)",
        "emulator": "beebem",
        "exclusion_note": "The TMS5220 speech generator is compiled out. Speech.cpp:57-1621 wraps the whole implementation, including the SpeechInit() that reads Phroms.cfg and the PHROM files, in #if ENABLE_SPEECH, and all four build configurations in Src/BeebEm.vcxproj define ENABLE_SPEECH=0. Every call site is guarded the same way. UserData/Phroms.cfg and the seven files in UserData/Phroms/ (PHROMA, PHROMUS, VM61002-5.bin, VM71003A.bin) ship but no released binary opens them. ref: Src/BeebEm.vcxproj:98,117,134,157 - Src/Speech.cpp:57,1621 - Help/speech.html\n",
        "files": [
          {
            "bundled": true,
            "description": "BBC Micro OS 1.20",
            "md5": "0a59a5ba15fe8557b5f7fee32bbd393a",
            "name": "OS12.rom",
            "note": "OS ROM slot. Read into 0xc000; an error is reported unless 16384 bytes are read.",
            "path": "BeebFile/BBC/OS12.rom",
            "required": true,
            "sha1": "0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d",
            "size": 16384,
            "source_ref": "Src/BeebMem.cpp:1291-1308, Src/RomConfigFile.cpp:43",
            "system": "bbc-micro-b",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "BBC BASIC II",
            "max_size": 131072,
            "md5": "2cc67be4624df4dc66617742571a8e3d",
            "name": "BASIC2.rom",
            "path": "BeebFile/BBC/BASIC2.rom",
            "required": true,
            "sha1": "4a7393f3a45ea309f744441c16723e2ef447a281",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:44, Src/BeebMem.cpp:1322-1356",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Acorn DFS 1.20 and NFS 3.34 combined",
            "max_size": 131072,
            "md5": "5daed103918277e2065dd7e8d23e57a5",
            "name": "DNFS.rom",
            "path": "BeebFile/BBC/DNFS.rom",
            "required": true,
            "sha1": "7e3c536baeae84d6498a14e8405319e01ee78232",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:45, Src/BeebMem.cpp:1322-1356",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Debugger symbol map for OS 1.20",
            "md5": "c335bb52e811d79fd3cc9b4807f98cfd",
            "name": "OS12.map",
            "note": "Path derived from the ROM file name by ReplaceFileExt. Absence is silent.",
            "path": "BeebFile/BBC/OS12.map",
            "required": false,
            "sha1": "3fb4f63479a7bedec968ec47627b17752d5889e1",
            "size": 19711,
            "source_ref": "Src/BeebMem.cpp:1311-1313",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "BBC Micro OS 1.20, Integra-B configuration",
            "md5": "0a59a5ba15fe8557b5f7fee32bbd393a",
            "name": "OS12.rom",
            "note": "OS ROM slot for Model::IntegraB. Same dump as BeebFile/BBC/OS12.rom.",
            "path": "BeebFile/BBCINT/OS12.rom",
            "required": true,
            "sha1": "0d9bcaf6a393c9ce2359ed700ddb53c232c2c45d",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:63, Src/BeebMem.cpp:1291-1308",
            "system": "bbc-micro-b",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Integra-B IBOS 1.26",
            "max_size": 131072,
            "md5": "1b57c2ba920a00d5b4ef89be68aedc43",
            "name": "IBOS126.rom",
            "path": "BeebFile/BBCINT/IBOS126.rom",
            "required": true,
            "sha1": "d0153203802c8ec3e3270443be809e23d574280b",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:64",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "BBC BASIC II",
            "max_size": 131072,
            "md5": "2cc67be4624df4dc66617742571a8e3d",
            "name": "BASIC2.rom",
            "path": "BeebFile/BBCINT/BASIC2.rom",
            "required": true,
            "sha1": "4a7393f3a45ea309f744441c16723e2ef447a281",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:65",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Acorn DFS 1.20 and NFS 3.34 combined",
            "max_size": 131072,
            "md5": "5daed103918277e2065dd7e8d23e57a5",
            "name": "DNFS.rom",
            "path": "BeebFile/BBCINT/DNFS.rom",
            "required": true,
            "sha1": "7e3c536baeae84d6498a14e8405319e01ee78232",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:66",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Integra-B IBOS 1.20",
            "max_size": 131072,
            "md5": "8882e50d5d98851a04f541c71bd25f31",
            "name": "IBOS.rom",
            "note": "Integra-B slot under the Torch configuration.",
            "path": "BeebFile/BBCINT/IBOS.rom",
            "required": false,
            "sha1": "0f5b2a5bee23808b34eab2f027f7c1e77395c782",
            "size": 16384,
            "source_ref": "UserData/Roms_Torch.cfg:24",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Watford DFS 1.44",
            "max_size": 131072,
            "md5": "1d250b0242e447e9106e8bfd1f27ea84",
            "name": "WDFS.rom",
            "note": "Filing system slot under the Torch configuration.",
            "path": "BeebFile/BBCINT/WDFS.rom",
            "required": false,
            "sha1": "387d2468c6e1360f5b531784ce95d5f71a50c2b5",
            "size": 16384,
            "source_ref": "UserData/Roms_Torch.cfg:26",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Torch MCP 1.20 host tube ROM, 8271 FDC",
            "max_size": 131072,
            "md5": "42f92cb02602e903d7bdabb33bf30966",
            "name": "MCP120-CBL.rom",
            "note": "Host tube support for the Torch Z80 co-processor on a Model B.",
            "path": "BeebFile/BBC/MCP120-CBL.rom",
            "required": false,
            "sha1": "0edb0db70c9571540793e321f527e68188b6e4cd",
            "size": 16384,
            "source_ref": "UserData/Roms_Torch.cfg:5, Help/z80torch.html",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "BBC Model B Plus MOS 2.00",
            "md5": "978370cc7ab8589a137ada34388a6e32",
            "name": "B+MOS.rom",
            "note": "OS ROM slot for Model::BPlus.",
            "path": "BeebFile/BPLUS/B+MOS.rom",
            "required": true,
            "sha1": "d9426dd7454ca199cdef9435daa332cdf405c965",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:83, Src/BeebMem.cpp:1291-1308",
            "system": "bbc-micro-bplus",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "BBC BASIC II",
            "max_size": 131072,
            "md5": "2cc67be4624df4dc66617742571a8e3d",
            "name": "BASIC2.rom",
            "path": "BeebFile/BPLUS/BASIC2.rom",
            "required": true,
            "sha1": "4a7393f3a45ea309f744441c16723e2ef447a281",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:84",
            "system": "bbc-micro-bplus"
          },
          {
            "bundled": true,
            "description": "Acorn 1770 DFS 2.26",
            "max_size": 131072,
            "md5": "f083f49d6fe66344c650d7e74249cb96",
            "name": "DFS-2.26.rom",
            "path": "BeebFile/BPLUS/DFS-2.26.rom",
            "required": true,
            "sha1": "cf2ebc422a8d24ec6f1a0320520c38a0e704109a",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:85",
            "system": "bbc-micro-bplus"
          },
          {
            "bundled": true,
            "description": "Acorn ADFS 1.30",
            "max_size": 131072,
            "md5": "831ee90ac5d49ba5507252faf0c12536",
            "name": "ADFS-1.30.rom",
            "path": "BeebFile/BPLUS/ADFS-1.30.rom",
            "required": false,
            "sha1": "301fd05c475a629c4bec70510d4507256a5b00d8",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:86",
            "system": "bbc-micro-bplus"
          },
          {
            "bundled": true,
            "description": "Watford DFS 1.44",
            "max_size": 131072,
            "md5": "1d250b0242e447e9106e8bfd1f27ea84",
            "name": "WDFS.rom",
            "note": "Named as a Model B Plus essential ROM by the emulator help, which predates the current default configuration: the DefaultRoms table and the shipped Roms.cfg fill the filing system slots with DFS-2.26.rom and ADFS-1.30.rom.\n",
            "path": "BeebFile/BPLUS/WDFS.rom",
            "required": false,
            "sha1": "387d2468c6e1360f5b531784ce95d5f71a50c2b5",
            "size": 16384,
            "source_ref": "Help/roms.html, Src/RomConfigFile.cpp:83-99",
            "system": "bbc-micro-bplus"
          },
          {
            "bundled": true,
            "description": "BBC Master 128 MOS 3.20",
            "md5": "9087f772447038a00178488b3591347b",
            "name": "MOS.rom",
            "note": "OS ROM slot for Model::Master128.",
            "path": "BeebFile/M128/MOS.rom",
            "required": true,
            "sha1": "04d5876999f93fc61a18f172b1fbb3b75db733ac",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:103, Src/BeebMem.cpp:1291-1308",
            "system": "bbc-master-128",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Master 128 Terminal emulator ROM",
            "max_size": 131072,
            "md5": "7e053353b78b4631c274280931d96f02",
            "name": "Terminal.rom",
            "note": "A different dump from the Master ET Terminal.rom of the same name.",
            "path": "BeebFile/M128/Terminal.rom",
            "required": true,
            "sha1": "d990f41a3a0605127083a3cf7a3a676dd30423ef",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:104",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "BBC BASIC IV",
            "max_size": 131072,
            "md5": "63a6f43cbf491533cb03ceca2d2728d4",
            "name": "BASIC4.rom",
            "path": "BeebFile/M128/BASIC4.rom",
            "required": true,
            "sha1": "c45fd3c0abdcd32b78d2288addd2a777b19e9a1d",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:107",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Master 128 DFS 2.24",
            "max_size": 131072,
            "md5": "865a0f7a5d6f10f48798801bf514d761",
            "name": "DFS.rom",
            "path": "BeebFile/M128/DFS.rom",
            "required": true,
            "sha1": "cff80460954b3b9f75c83bd6a301c45d24d118a6",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:110",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Master 128 ADFS 2.03",
            "max_size": 131072,
            "md5": "10f08b255d6a6e3e888631946b628f1a",
            "name": "ADFS.rom",
            "path": "BeebFile/M128/ADFS.rom",
            "required": false,
            "sha1": "7557e99be10d81c0395df2dc6c2f8e2f95896c29",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:106",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Acorn View word processor",
            "max_size": 131072,
            "md5": "178d09285727d596f8863f94a2fc8dad",
            "name": "View.rom",
            "path": "BeebFile/M128/View.rom",
            "required": false,
            "sha1": "14820174e8ea802f1ae95186285a4592fd519699",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:105",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Acorn Edit text editor",
            "max_size": 131072,
            "md5": "cb3d762eaab6130d1360e1ac575589de",
            "name": "Edit.rom",
            "path": "BeebFile/M128/Edit.rom",
            "required": false,
            "sha1": "96d209441f4cabacf3d4e8e9da68cce918ea923e",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:108",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Acorn ViewSheet spreadsheet",
            "max_size": 131072,
            "md5": "7d5a80a8ce929d0a0f6ca8626cb9f436",
            "name": "ViewSheet.rom",
            "path": "BeebFile/M128/ViewSheet.rom",
            "required": false,
            "sha1": "b7e85a55f517959912422b02248a03a4d32f6998",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:109",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Acorn Advanced NFS 4.25",
            "max_size": 131072,
            "md5": "306cb8ff6622dbfc79dc487ac4e407e1",
            "name": "ANFS-4.25-2201351.rom",
            "path": "BeebFile/M128/ANFS-4.25-2201351.rom",
            "required": false,
            "sha1": "14f75d36ffe9af14aaac42df55b4fe3729ba75cf",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:111",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "Torch MCP 1.22 host tube ROM, Master",
            "max_size": 131072,
            "md5": "bf3d2b0a61ba36bd08d02f30e632e5ce",
            "name": "MCP122-ABM.rom",
            "note": "Host tube support for the Torch Z80 co-processor on a Master.",
            "path": "BeebFile/M128/MCP122-ABM.rom",
            "required": false,
            "sha1": "35843ace281494ab40463a69a263244d0cb0ecd6",
            "size": 16384,
            "source_ref": "UserData/Roms_Torch.cfg:79, Help/z80torch.html",
            "system": "bbc-master-128"
          },
          {
            "bundled": true,
            "description": "BBC Master ET MOS 4.00",
            "md5": "4d4afbf220abaa702026f42f98eb5807",
            "name": "MOS400.rom",
            "note": "OS ROM slot for Model::MasterET.",
            "path": "BeebFile/Master ET/MOS400.rom",
            "required": true,
            "sha1": "c9483ef3ebd66930e635674a3776d171785ae959",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:123, Src/BeebMem.cpp:1291-1308",
            "system": "bbc-master-et",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Master ET Terminal emulator ROM",
            "max_size": 131072,
            "md5": "456cb9035fd3d6c9d4d98adcd65882d8",
            "name": "Terminal.rom",
            "note": "A different dump from the Master 128 Terminal.rom of the same name.",
            "path": "BeebFile/Master ET/Terminal.rom",
            "required": true,
            "sha1": "0b4425149ca93dddf8d03da3767635dc3f1eecb8",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:124",
            "system": "bbc-master-et"
          },
          {
            "bundled": true,
            "description": "Acorn Advanced NFS 4.25",
            "max_size": 131072,
            "md5": "306cb8ff6622dbfc79dc487ac4e407e1",
            "name": "ANFS425.rom",
            "note": "Filing system of the Econet terminal, which has no disc filing system.",
            "path": "BeebFile/Master ET/ANFS425.rom",
            "required": true,
            "sha1": "14f75d36ffe9af14aaac42df55b4fe3729ba75cf",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:125",
            "system": "bbc-master-et"
          },
          {
            "bundled": true,
            "description": "BBC BASIC IV",
            "max_size": 131072,
            "md5": "63a6f43cbf491533cb03ceca2d2728d4",
            "name": "BASIC4.rom",
            "path": "BeebFile/Master ET/BASIC4.rom",
            "required": true,
            "sha1": "c45fd3c0abdcd32b78d2288addd2a777b19e9a1d",
            "size": 16384,
            "source_ref": "Src/RomConfigFile.cpp:126",
            "system": "bbc-master-et"
          },
          {
            "bundled": true,
            "description": "Acorn 6502 second processor Tube OS 1.10",
            "md5": "cd6ba85e22adec70b6d863de4c053db7",
            "name": "6502Tube.rom",
            "note": "Copied into tube RAM at 0xf800 on every 65C02 reset. An error is reported unless 2048 bytes are read.\n",
            "path": "BeebFile/6502Tube.rom",
            "required": false,
            "sha1": "05980c296e1a7800c4aa21d6bed16323b6d859d5",
            "size": 2048,
            "source_ref": "Src/Tube.cpp:1534-1559",
            "system": "bbc-micro-b",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Acorn Z80 second processor ROM 1.21",
            "md5": "c4c72ceb73300253dc69c865af32f5ac",
            "name": "Z80.rom",
            "note": "Loaded for TubeDevice::AcornZ80. An error is reported unless 4096 bytes are read. Jonathan Harston's v1.21; the Acorn v1.20 ships as Z80-1.20.rom and is used by renaming it onto this path.\n",
            "path": "BeebFile/Z80.rom",
            "required": false,
            "sha1": "d05de861922fed73041cc8ac2666886d95bae15b",
            "size": 4096,
            "source_ref": "Src/Z80Support.cpp:243-267, Help/z80copro.html",
            "system": "bbc-micro-b",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Torch Z80 CCPN 1.02 second processor ROM",
            "md5": "f786d0647f9732fa065695d569d261ab",
            "name": "CCPN102.rom",
            "note": "Loaded for TubeDevice::TorchZ80. Up to 8192 bytes are read and a short image is mirrored to fill the 8 KB window: a 2 KB image is repeated four times, a 4 KB image twice. No size is rejected.\n",
            "path": "BeebFile/CCPN102.rom",
            "required": false,
            "sha1": "e6ee738e5f2f8556002b79d18caa8ef21f14e08d",
            "size": 8192,
            "size_options": [
              2048,
              4096,
              8192
            ],
            "source_ref": "Src/Z80Support.cpp:268-299",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Master 512 80186 co-processor BIOS",
            "md5": "de72efe184f74f1cb98f92b1fbf532bb",
            "name": "BIOS.rom",
            "note": "Loaded at 0xf0000 and mirrored three times to fill the top of the 1 MB space. An error is reported unless 0x4000 bytes are read.\n",
            "path": "BeebFile/BIOS.rom",
            "required": false,
            "sha1": "eb2a043d139ae0f3d512b4f1afa32286510c886c",
            "size": 16384,
            "source_ref": "Src/Master512CoPro.cpp:3768-3797",
            "system": "bbc-master-128",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Acorn ARM Evaluation System ROM 1.00",
            "md5": "751f615ccbefa312915d1be8aa5617f5",
            "name": "ARMeval_100.rom",
            "note": "Rejected as InvalidROM unless the file is exactly ROM_SIZE, which Arm.h defines as 0x4000. The dialog text at BeebWin.cpp:1043 says 4096 bytes and does not match the constant it reports on.\n",
            "path": "BeebFile/ARMeval_100.rom",
            "required": false,
            "sha1": "ba33eaf1a23cfef6fc1b88aa516ca2b3693e69d9",
            "size": 16384,
            "source_ref": "Src/Arm.cpp:100-129, Src/Arm.h:254, Src/BeebWin.cpp:1017-1047",
            "system": "bbc-master-128",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Sprow ARM7TDMI co-processor system software 0.40",
            "md5": "4da45778c15098755294b8b78e32839b",
            "name": "Sprow.rom",
            "note": "512 KB on-board flash carrying the system software and BASIC. Rejected as InvalidROM unless the file is exactly 0x80000 bytes.\n",
            "path": "BeebFile/Sprow.rom",
            "required": false,
            "sha1": "babfb5bdb8265cf3ac7feff254146cb2d2773da1",
            "size": 524288,
            "source_ref": "Src/SprowCoPro.cpp:51-90, Src/SprowCoPro.h:49, Src/BeebWin.cpp:1058-1088",
            "system": "bbc-master-128",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Mode 7 SAA5050 teletext character set",
            "md5": "007ba0c023740666e56f879f5d0d4461",
            "name": "Teletext.fnt",
            "note": "Read from the program directory. The only file whose absence stops the emulator: BuildMode7Font failure makes Initialise return false and Main.cpp then exits with status 1.\n",
            "required": true,
            "sha1": "7d1d2a7321b21a237ad2c52afb21a432ce674967",
            "size": 3456,
            "source_ref": "Src/BeebWin.cpp:491-502, Src/Main.cpp:62-66",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Cassette relay engage sample",
            "md5": "6e7137fbd3545f8303b6d1594c3b2ccb",
            "name": "RelayOn.snd",
            "note": "Read from the program directory. Missing samples are reported and playback is skipped.",
            "required": false,
            "sha1": "b6e7c8a33117f4f8a49c5fd4326f948d1763f1e1",
            "size": 297,
            "source_ref": "Src/Sound.cpp:65, 538-570, 805",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Cassette relay release sample",
            "md5": "0699cec768a8f84827fef594f4f73c22",
            "name": "RelayOff.snd",
            "required": false,
            "sha1": "9c9a3d5ebf0e4b4c183e74b9c2ec79f280cc1556",
            "size": 400,
            "source_ref": "Src/Sound.cpp:66, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Disc drive motor sample",
            "md5": "a681147ce93e1b5a9e22bb00b701e1cf",
            "name": "DriveMotor.snd",
            "required": false,
            "sha1": "cf496c677d345bb65feccf8cf2269a4cd7053645",
            "size": 44127,
            "source_ref": "Src/Sound.cpp:67, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Disc drive head load sample",
            "md5": "cf30cf2585f9edff7a3d166e6a07b40a",
            "name": "HeadLoad.snd",
            "required": false,
            "sha1": "2f7204df95363ce56c486696a878ed113bedb23b",
            "size": 8837,
            "source_ref": "Src/Sound.cpp:68, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Disc drive head unload sample",
            "md5": "d9b352abee95ee2873c1753fb0d6ad11",
            "name": "HeadUnload.snd",
            "required": false,
            "sha1": "781692c24e737d60045b10eb0b8434eccdd1ea82",
            "size": 4446,
            "source_ref": "Src/Sound.cpp:69, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Disc drive head seek sample",
            "md5": "2672a78593558045736c62cf9e0252bc",
            "name": "HeadSeek.snd",
            "required": false,
            "sha1": "759d62a94e1571810fe2edc10e14b07b5dd4b2b5",
            "size": 31969,
            "source_ref": "Src/Sound.cpp:70, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Disc drive head step sample",
            "md5": "46c4fdb65f67ac2cdc97fb42455d3b11",
            "name": "HeadStep.snd",
            "required": false,
            "sha1": "5e07a972059751d094fc96610734bb6d659348fe",
            "size": 2251,
            "source_ref": "Src/Sound.cpp:71, 538-570",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "ROM slot table, one OS ROM plus 16 paged banks per model",
            "md5": "33c5208252f32334618a3fd9294acdf4",
            "name": "Roms.cfg",
            "note": "Without it Load returns before the DefaultRoms backfill, every slot stays an empty string and no ROM is loaded. Overridable with -Roms.\n",
            "required": true,
            "sha1": "a538968ecb96e520546a99008cdfc2af98a92a81",
            "size": 840,
            "source_ref": "Src/BeebWin.cpp:334, 473, Src/RomConfigFile.cpp:158-219",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "ROM slot table for the Torch Z80 co-processor",
            "md5": "4a3789eb3c7949871cdbfd856d21625d",
            "name": "Roms_Torch.cfg",
            "note": "Selected by the shipped BeebEmTorch.vbs as `BeebEm.exe -Roms Roms_Torch.cfg`.",
            "required": false,
            "sha1": "7b0827bd0fd9425c2e1b4f59313701b78f6d83e0",
            "size": 817,
            "source_ref": "BeebEmTorch.vbs:3, Help/z80torch.html",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Emulator preferences",
            "md5": "0108b1eb683308408ad109ce6e4d2839",
            "name": "Preferences.cfg",
            "note": "Absence is reported and built-in defaults are used. Rewritten on save.",
            "required": false,
            "sha1": "31291e6f9e2f0b20ccb80bf3ef5e2fe8a5dc712c",
            "size": 2047,
            "source_ref": "Src/BeebWin.cpp:296, Src/BeebWinPrefs.cpp:282-298, Src/Preferences.cpp:59-66",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Logical keyboard mapping",
            "md5": "07b0e1d4cb329185a8a52c48db00bcf9",
            "name": "Logical.kmap",
            "note": "Read at ApplyPreferences. The return value is ignored, leaving the built-in map.",
            "required": false,
            "sha1": "5817277bcb110b747432b8716a0ffbe0c1e13de2",
            "size": 6716,
            "source_ref": "Src/BeebWin.cpp:560-563, Src/KeyMap.cpp:65-78",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Default keyboard mapping",
            "md5": "199de64bdb59a176d102f03cca4eadf9",
            "name": "Default.kmap",
            "required": false,
            "sha1": "63c72e11f6ce8cd9dc5ebb96b4938010f4b2e4f0",
            "size": 6716,
            "source_ref": "Src/BeebWin.cpp:565-567, Src/KeyMap.cpp:65-78",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Fallback user keyboard mapping",
            "md5": "199de64bdb59a176d102f03cca4eadf9",
            "name": "DefaultUser.kmap",
            "note": "Read only when the user key map preference is unset or fails to load.",
            "required": false,
            "sha1": "63c72e11f6ce8cd9dc5ebb96b4938010f4b2e4f0",
            "size": 6716,
            "source_ref": "Src/BeebWinPrefs.cpp:934-957",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Econet station to address map",
            "md5": "7cb22b998d2de0f85a638485b9f8db6e",
            "name": "Econet.cfg",
            "note": "Read when Econet is enabled, which is off by default. A read failure makes EconetReset return false and Econet stays off. Overridable with -EconetCfg.\n",
            "required": false,
            "sha1": "faf55cd1eafaa3499695fe8179e43ffe6f86daaa",
            "size": 5704,
            "source_ref": "Src/BeebWin.cpp:526-537, Src/Econet.cpp:784-792, 1039-1042",
            "system": "bbc-micro-b"
          },
          {
            "bundled": true,
            "description": "Econet network to IP subnet map",
            "md5": "d2e4b22f9433cf16a3dcb320dc2cf1a2",
            "name": "AUNMap",
            "note": "Read only when AUN mode is on. Overridable with -AUNMap.",
            "required": false,
            "sha1": "efd505f459448c5741a8ca249089f068b72cb751",
            "size": 1812,
            "source_ref": "Src/BeebWin.cpp:539-550, Src/Econet.cpp:931-938, 1059-1061",
            "system": "bbc-micro-b"
          }
        ],
        "notes": "BBC Micro and Master Series emulator for Windows. Started by Dave Gilbert on\nUnix in 1994, ported to Windows. Five machine models: Model B, Model B with\nIntegra-B board, Model B Plus, Master 128, Master ET.\nref: Src/Model.h:24-32\n\nTwo file roots. GetUserDataPath() defaults to <Documents>\\BeebEm and falls back\nto <app>\\UserData; it holds BeebFile/ and the .cfg and .kmap files. GetAppPath()\nis the program directory and holds Teletext.fnt and the sound samples.\nref: Src/BeebWin.cpp:5813-5851\n\nROM slots are read from Roms.cfg: one OS ROM plus 16 paged banks per model,\neach line naming a file under BeebFile/, or EMPTY, or RAM. Paths in the profile\nare the shipped default configuration, which matches the DefaultRoms table\ncompiled into the binary.\nref: Src/RomConfigFile.cpp:39-141\nref: Src/BeebMem.cpp:1277-1356\n\nA missing Roms.cfg is not covered by DefaultRoms: Load() returns at the open\nfailure, before the backfill loop, and RomConfigFile has no constructor and no\nReset() caller, so every slot stays an empty string and no ROM loads.\nref: Src/RomConfigFile.cpp:158-219\n\nRoms_Torch.cfg is the alternate configuration for the Torch Z80 co-processor,\nselected with `BeebEm.exe -Roms Roms_Torch.cfg` by the shipped BeebEmTorch.vbs.\nIt adds the MCP host-tube ROMs and swaps the Integra-B slots.\nref: UserData/Roms_Torch.cfg, BeebEmTorch.vbs:3\n\nReadRom derives a .map path from every ROM file name and hands it to the\ndebugger symbol loader. Only BBC/OS12.map ships.\nref: Src/BeebMem.cpp:1252-1254, 1311-1313\n\nNo hash is verified anywhere. The code checks sizes only, per entry below.\nHashes here identify the dumps the emulator ships.\n\nBeebFile/ also carries an application ROM library (word processors, drawing\npackages, language ROMs) and DiscIms/ carries the disc images supplied with the\nMaster 512, ARM and Z80 co-processors. No code path names them; they load only\nthrough the file browser in Edit ROM Configuration, the same way a disc image\ndoes.\nref: Src/RomConfigDialog.cpp:179-215\n\nAlternate dumps ship under their own names for slots already listed here:\nBeebFile/M128-MOS3.5/ holds the MOS 3.50 set for the M128 slots, and\nBeebFile/Z80-1.20.rom is the Acorn v1.20 Z80 ROM. Both are used by renaming\nthem onto the listed paths, so they are variants of those entries.\nref: Help/roms.html, Help/z80copro.html\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/stardot/beebem-windows",
        "source_commit": "a982ba6a74af09e801c296b29d514dbd4da09b94",
        "systems": [
          "bbc-micro-b",
          "bbc-micro-bplus",
          "bbc-master-128",
          "bbc-master-et"
        ],
        "type": "standalone",
        "upstream": "https://github.com/stardot/beebem-windows"
      }
    },
    {
      "id": "beetle_gba",
      "profile": {
        "cores": [
          "mednafen_gba"
        ],
        "emulator": "Beetle GBA (Mednafen)",
        "files": [
          {
            "md5": "a860e8c0b6d573d191e4ec7db1b1e4f6",
            "name": "gba_bios.bin",
            "required": false,
            "system": "nintendo-gba"
          }
        ],
        "source": "https://github.com/libretro/beetle-gba-libretro",
        "systems": [
          "nintendo-gba"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "beetle_lynx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.24.0",
        "cores": [
          "mednafen_lynx"
        ],
        "display_name": "Atari - Lynx (Beetle Lynx)",
        "emulator": "Beetle Lynx (Mednafen Lynx)",
        "files": [
          {
            "crc32": "0d973c9d",
            "description": "Atari Lynx boot ROM",
            "name": "lynxboot.img",
            "note": "512-byte boot ROM. Core silently degrades without it but games will not run.",
            "region": [
              "world"
            ],
            "required": true,
            "size": 512,
            "source_ref": "libretro.cpp:191, mednafen/lynx/rom.cpp:50-78, mednafen/lynx/cart.cpp:67"
          }
        ],
        "notes": "Community fork of Mednafen's Lynx module (itself based on Handy by K. Wilkins) for libretro. Loads lynxboot.img from the system directory at game load time (libretro.cpp:191). CRom constructor reads exactly 512 bytes (rom.cpp:50-78). If the file is missing or undersized, the ROM array is filled with 0x88 (DEFAULT_ROM_CONTENTS) and the core continues without error, but games will not boot without the real boot ROM. No hash validation is performed on the BIOS at load time. The cart database in cart.cpp includes the BIOS CRC32 0x0d973c9d for identification purposes, not validation. Upstream Mednafen throws an exception if the BIOS is missing or undersized; the libretro port silently degrades. Upstream supports custom palette loading (lynx.pal); the libretro port does not.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-lynx-libretro",
        "source_commit": "fcdefcfb3c11d6d2e71be076a5d3df2e88ab73ed",
        "systems": [
          "atari-lynx"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/",
        "verification": "existence"
      }
    },
    {
      "id": "beetle_ngp",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.29.0.0",
        "cores": [
          "mednafen_ngp"
        ],
        "display_name": "SNK - Neo Geo Pocket / Color (Beetle NeoPop)",
        "emulator": "Beetle NGP (Mednafen Neo Geo Pocket)",
        "files": [],
        "notes": "Libretro port of Mednafen's NeoPop module (originally by neopop_uk).\nHLE BIOS only, constructed at runtime by bios_install() in\nmednafen/ngp/bios.c. No external BIOS or firmware files loaded.\nUpstream Mednafen also uses HLE only (Documentation/ngp.html:\n\"BIOS is HLE'd\"). The only core option is ngp_language\n(english/japanese).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-ngp-libretro",
        "source_commit": "139fe34c8dfc5585d6ee1793a7902bca79d544de",
        "systems": [
          "snk-ngp",
          "snk-ngpc"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "beetle_pce",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.38.7",
        "cores": [
          "mednafen_pce"
        ],
        "display_name": "NEC - PC Engine / SuperGrafx / CD (Beetle PCE)",
        "emulator": "Beetle PCE (Mednafen PCE)",
        "files": [
          {
            "description": "CD-ROM System Card 3.0 (Japan)",
            "md5": "38179df8f4ac870017db21ebcbf53114",
            "name": "syscard3.pce",
            "note": "Default value for pce_cdbios option.",
            "region": [
              "japan"
            ],
            "required": true,
            "sha1": "79f5ff55dd10187c7fd7b8daab0b3ffbd1f56a2c",
            "source_ref": "libretro.cpp:1051-1052, mednafen/settings.cpp:40"
          },
          {
            "description": "CD-ROM System Card 3.0 (US / TurboGrafx-CD)",
            "md5": "0754f903b52e3b3342202bdafb13efa5",
            "name": "syscard3u.pce",
            "note": "pce_cdbios = 'System Card 3 US'",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha1": "d02611d99921986147c753df14c7349b31d71950",
            "source_ref": "libretro.cpp:1059-1060"
          },
          {
            "description": "CD-ROM System Card 2.0 (Japan)",
            "md5": "3cdd6614a918616bfc41c862e889dd79",
            "name": "syscard2.pce",
            "note": "pce_cdbios = 'System Card 2'",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "88da02e2503f7c32810f5d93a34849d470742b6d",
            "source_ref": "libretro.cpp:1053-1054"
          },
          {
            "description": "CD-ROM System Card 2.0 (US / TurboGrafx-CD)",
            "md5": "94279f315e8b52904f65ab3108542afe",
            "name": "syscard2u.pce",
            "note": "pce_cdbios = 'System Card 2 US'",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha1": "2bea3dac98f84b2f2f469fa77ea720b8770d598d",
            "source_ref": "libretro.cpp:1061-1062"
          },
          {
            "description": "CD-ROM System Card 1.0 (Japan)",
            "md5": "2b7ccb3d86baa18f6402c176f3065082",
            "name": "syscard1.pce",
            "note": "pce_cdbios = 'System Card 1'",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "a39a66da7de6ba94ab84d04eef7afeec7d4ee66a",
            "source_ref": "libretro.cpp:1055-1056"
          },
          {
            "aliases": [
              "gecard.pce"
            ],
            "description": "Games Express CD Card",
            "md5": "6d2cb14fc3e1f65ceb135633d1694122",
            "name": "gexpress.pce",
            "note": "pce_cdbios = 'Games Express' or auto-detected via DetectGECD().",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "014881a959e045e00f4db8f52955200865d40280",
            "source_ref": "libretro.cpp:1057-1058, mednafen/settings.cpp:41, mednafen/pce/pce.cpp:374-411"
          }
        ],
        "notes": "Libretro port of Mednafen's PCE-Accurate module. BIOS loaded from system directory at CD-ROM load time via PCE_LoadCD() in pce.cpp:441-460. Core option \"pce_cdbios\" selects which card image to use (default: System Card 3). DetectGECD() auto-detects Games Express discs and switches to gexpress.pce. Arcade Card mode (pce_arcadecard option, enabled by default) extends System Card 3 with extra RAM mapping via SYSCARD_ARCADE enum. No hash or size validation on BIOS load: file_open() then HuC_Load() reads data directly. DetectSGXCD() reads sector data to decide SGX mode but uses the same BIOS files.\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": "beetle_pcfx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.36.5",
        "cores": [
          "mednafen_pcfx",
          "pcfx"
        ],
        "display_name": "NEC - PC-FX (Beetle PC-FX)",
        "emulator": "Beetle PC-FX (Mednafen)",
        "files": [
          {
            "description": "PC-FX BIOS v1.00",
            "md5": "08e36edbea28a017f79f8d4f7ff9b6d7",
            "name": "pcfx.rom",
            "required": true,
            "sha1": "1a77fd83e337f906aecab27a1604db064cf10074",
            "size": 1048576,
            "source_ref": "libretro.cpp:367-394, mednafen/settings.c:92-93",
            "system": "nec-pcfx",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Libretro port of Mednafen's PC-FX module. Setting \"pcfx.bios\" resolves to \"pcfx.rom\" (settings.c:92). LoadCommon() loads the file, validates size (1048576 bytes), and maps it at 0xFFF00000. Core won't start without it. No hash validation. Upstream Mednafen also supports an FX-SCSI ROM (pcfx.fxscsi setting, developer-only) not present in this port.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-pcfx-libretro",
        "source_commit": "650c30ea2203636a1716675854d11c608ed6eacc",
        "systems": [
          "nec-pcfx"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "beetle_psx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.44.1",
        "cores": [
          "beetle_psx",
          "mednafen_psx",
          "mednafen_psx_hw"
        ],
        "display_name": "Sony - PlayStation (Beetle PSX)",
        "emulator": "Beetle PSX (Mednafen PSX)",
        "files": [
          {
            "aliases": [
              "SCPH5500.bin",
              "SCPH-5500.bin"
            ],
            "description": "SCPH-5500 (v3.0 09-09-96 J)",
            "hle_fallback": true,
            "md5": "8dd7d5296a650fac7319bce665a6a53c",
            "mode": "both",
            "name": "scph5500.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "sha1": "b05def971d8ec59f346f2d9ac21fb742e3eb6917",
            "size": 524288,
            "source_ref": "libretro.c:433-441",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "SCPH-5903 (System ROM Version 2.2 12/04/95 J), Video CD daughterboard",
            "md5": "81328b966e6dcf7ea1e32e55e1c104bb",
            "mode": "libretro",
            "name": "scph5903.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "15c94da3cc5a38a582429575af4198c487fe893c",
            "size": 1048576,
            "source_ref": "libretro.c:443-450, 2974-2988, 3007-3009, 5838",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "aliases": [
              "SCPH5501.bin",
              "SCPH-5501.bin",
              "scph5503.bin",
              "SCPH5503.bin",
              "SCPH-5503.bin",
              "scph7003.bin",
              "SCPH7003.bin",
              "SCPH-7003.bin"
            ],
            "description": "SCPH-5501, 5503, 7003 (v3.0 11-18-96 A)",
            "hle_fallback": true,
            "md5": "490f666e1afb15b7362b406ed1cea246",
            "mode": "both",
            "name": "scph5501.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha1": "0555c6fae8906f3f09baf5988f00e55f88e9f30b",
            "size": 524288,
            "source_ref": "libretro.c:452-470",
            "validation": [
              "sha1"
            ]
          },
          {
            "aliases": [
              "SCPH5502.bin",
              "SCPH-5502.bin",
              "scph5552.bin",
              "SCPH5552.bin",
              "SCPH-5552.bin"
            ],
            "description": "SCPH-5502, 5552 (v3.0 01-06-97 E)",
            "hle_fallback": true,
            "md5": "32736f17079d0b2b7024407c39bd3050",
            "mode": "both",
            "name": "scph5502.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "sha1": "f6bc2d1f5eb6593de7d089c425ac681d6fffd3f0",
            "size": 524288,
            "source_ref": "libretro.c:472-486",
            "validation": [
              "sha1"
            ]
          },
          {
            "aliases": [
              "PSXONPSP660.bin"
            ],
            "description": "PSP embedded PS1 BIOS (region-free override)",
            "md5": "c53ca5908936d412331790f4426c6c33",
            "mode": "libretro",
            "name": "psxonpsp660.bin",
            "note": "override_bios=1. Falls back to region BIOS if not found.",
            "region": [
              "world"
            ],
            "required": false,
            "sha1": "96880d1ca92a016ff054be5159bb06fe03cb4e14",
            "size": 524288,
            "source_ref": "libretro.c:362-368",
            "validation": [
              "sha1"
            ]
          },
          {
            "aliases": [
              "PS1_ROM.bin"
            ],
            "description": "PS3 embedded PS1 BIOS, first 512KB extracted (region-free override)",
            "md5": "81bbe60ba7a3d1cea1d48c14cbcc647b",
            "mode": "libretro",
            "name": "ps1_rom.bin",
            "note": "override_bios=2. Falls back to region BIOS if not found.",
            "region": [
              "world"
            ],
            "required": false,
            "sha1": "c40146361eb8cf670b19fdc9759190257803cab7",
            "source_ref": "libretro.c:370-376",
            "validation": [
              "sha1"
            ]
          },
          {
            "aliases": [
              "OPENBIOS.bin"
            ],
            "description": "OpenBIOS (open-source PS1 HLE BIOS, region-free override)",
            "mode": "libretro",
            "name": "openbios.bin",
            "note": "override_bios=3. No SHA1 validation. Falls back to region BIOS if not found. Also embedded in binary as HLE fallback (libretro.cpp:2157-2159).",
            "region": [
              "world"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "libretro.c:378-384"
          }
        ],
        "notes": "Region-based BIOS selection: the core picks JP/NA/EU firmware based on disc region. SHA1 validated with warning on mismatch (does not block loading). SHA1 and alternate filenames sourced from MAME psx.cpp (libretro.cpp:186). Override option allows using PSP, PS3, or OpenBIOS as region-free alternative. Embedded OpenBIOS (512KB) compiled into the binary serves as HLE fallback when no BIOS found. \"Skip BIOS\" option patches BIOS ROM but causes compatibility issues. Upstream Mednafen loads the same 3 region BIOS; override BIOS and HLE fallback are libretro additions. Two BIOS geometries are accepted: the stock 512 KB kernel and the 1 MB SCPH-5903 part, selected by file size at load time (libretro.c:2974-2988). A 1 MB image switches Video CD from HLE to daughterboard emulation (libretro.c:5838). Reached through the BIOS path override only: the region name lists carry no SCPH-5903 entry, and the firmware scan compares against the region SHA1, so a 1 MB file never matches there (libretro.c:324-332). Mednafen rejects a BIOS that is not 524288 bytes (psx.cpp:1777), so this geometry is libretro only.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/libretro/beetle-psx-libretro",
        "source_commit": "1093a5d0c22775b08bef18087735c911e6f5eebd",
        "systems": [
          "sony-playstation"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "beetle_saturn",
      "profile": {
        "core": "mednafen_saturn_libretro",
        "core_classification": "community_fork",
        "core_version": "v0.9.45.1",
        "cores": [
          "mednafen_saturn",
          "beetle-saturn"
        ],
        "display_name": "Sega - Saturn (Beetle Saturn)",
        "emulator": "beetle_saturn",
        "files": [
          {
            "name": "sega_101.bin",
            "note": "Saturn BIOS v1.01 (Japan). Used when region is JP or Asia NTSC.",
            "region": [
              "japan",
              "asia-ntsc"
            ],
            "required": true,
            "size": 524288,
            "source_ref": "mednafen/ss/ss.c:1761 (region filename), mednafen/ss/ss.c:1784-1899 (open, size check, read, sha256)",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "mpr-17933.bin",
            "note": "Saturn BIOS (NA/EU). Used for all non-JP/Asia-NTSC regions.",
            "region": [
              "north-america",
              "europe",
              "south-korea",
              "asia-pal",
              "brazil",
              "latin-america"
            ],
            "required": true,
            "size": 524288,
            "source_ref": "mednafen/ss/ss.c:1763 (region filename), mednafen/ss/ss.c:1784-1899 (open, size check, read, sha256)",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "mpr-18811-mx.ic1",
            "note": "KOF95 expansion ROM cart. Loaded when cart type set to KOF95.",
            "required": false,
            "size": 2097152,
            "source_ref": "mednafen/ss/cart.c:200-215 (firmware path + open), mednafen/ss/cart/rom.c:51 (CART_ROM_Init)",
            "system": "sega-saturn"
          },
          {
            "name": "mpr-19367-mx.ic1",
            "note": "Ultraman expansion ROM cart. Loaded when cart type set to Ultraman.",
            "required": false,
            "size": 2097152,
            "source_ref": "mednafen/ss/cart.c:200-215 (firmware path + open), mednafen/ss/cart/rom.c:51 (CART_ROM_Init)",
            "system": "sega-saturn"
          },
          {
            "name": "satar4mp.bin",
            "note": "Action Replay 4M Plus firmware. Unfinished in source (ar4mp.c:22-24), needs CPU UBC emulation. Cart type not exposed in core options.",
            "required": false,
            "size": 262144,
            "source_ref": "mednafen/ss/cart.c:218 (CART_AR4MP case), mednafen/ss/cart/ar4mp.c:150 (CART_AR4MP_Init)",
            "system": "sega-saturn"
          }
        ],
        "notes": "Libretro port of Mednafen's Saturn emulation module, frozen circa v0.9.45.1\n(2017) with some later backports. Region auto-detection reads the disc header\nand selects the matching BIOS. Manual override via beetle_saturn_region option.\n\nInitCommon() returns false if the BIOS file is missing or not exactly 512 KB.\nBoth region BIOS files are required for full region coverage.\n\nKOF95 and Ultraman ROM carts are loaded when the cart type is set via core\noption or auto-detected from the internal game database.\n\nUpstream Mednafen (1.32.x) has ST-V arcade board support (3 additional BIOS\nfiles) and bootable ROM cart support, both absent from this libretro port.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-saturn-libretro",
        "source_commit": "84461434f249c1b5cd10c83ae922feae84e1acf8",
        "systems": [
          "sega-saturn"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "beetle_vb",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.36.1",
        "cores": [
          "mednafen_vb",
          "vb"
        ],
        "display_name": "Nintendo - Virtual Boy (Beetle VB)",
        "emulator": "Beetle VB (Mednafen Virtual Boy)",
        "files": [],
        "notes": "Libretro port of Mednafen's Virtual Boy emulation module.\nNo external BIOS or firmware files. The Virtual Boy has no boot\nROM; the V810 CPU executes directly from the game ROM mapped at\n0x07000000. Load() in libretro.cpp:1787 takes only ROM data.\nUpstream Mednafen supports an optional vb.pal palette file\n(Documentation/vb.html); the libretro port handles palette via\ncore options instead.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-vb-libretro",
        "source_commit": "65debc7c4c7b85e2fd988d2be53496c2cf0b5f44",
        "systems": [
          "nintendo-virtualboy"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "beetle_wswan",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v0.9.35.1",
        "cores": [
          "beetle_wswan",
          "mednafen_wswan"
        ],
        "display_name": "Bandai - WonderSwan/Color (Beetle Wonderswan)",
        "emulator": "Beetle WonderSwan (Mednafen WonderSwan)",
        "files": [],
        "notes": "Beetle WonderSwan is a fork of Mednafen's Cygne module for WonderSwan\nand WonderSwan Color emulation via libretro.\n\nNo external BIOS or firmware files are required. The core bypasses the\noriginal boot ROM entirely by hardcoding the initial I/O register state\nin mednafen/wswan/start.inc (a 256-byte table of power-on defaults for\nall hardware registers 0x00-0xFF). On reset, WSwan_MemoryReset() in\nwswan-memory.c zeroes RAM and writes a fixed 8-byte identifier at\n0x75AC, then the CPU starts executing the cartridge directly.\n\nInternal EEPROM owner data (name, birthday, sex, blood type) is\nconfigured through core options (wswan.name, wswan.byear, wswan.bmonth,\nwswan.bday, wswan.sex, wswan.blood) and initialized at boot by\nWSwan_EEPROMInit() without needing a real EEPROM dump.\n\nThe wswan.language core option selects English or Japanese, which is\nreturned via I/O port 0xC8+ as the hardware language flag. This\nreplaces the boot ROM's language selection screen.\n\nThe NEC V30MZ CPU is emulated in software (v30mz.c). Sound DMA,\ncartridge banking, and RTC are all handled internally.\n\nROM extensions: .ws, .wsc, .pc2\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/beetle-wswan-libretro",
        "source_commit": "2aeb47d3a58bf0360c686f842d9bb5bd201306fe",
        "systems": [
          "bandai-wswan",
          "bandai-wswanc"
        ],
        "type": "libretro",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "bennugd",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "git",
        "cores": [
          "bennugd"
        ],
        "display_name": "Bennu Game Development",
        "emulator": "BennuGD",
        "files": [],
        "notes": "Self-contained interpreter for BennuGD bytecode (.dcb/.dat). Successor to\nDIV Games Studio / Fenix. Games bundle all assets with the content file.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/diekleinekuh/BennuGD_libretro",
        "source_commit": "a78319991d62520bed4e873d3538657ad0ae2ca7",
        "systems": [
          "bennugd"
        ],
        "type": "libretro",
        "upstream": "https://github.com/SplinterGU/BennuGD"
      }
    },
    {
      "id": "bigpemu",
      "profile": {
        "core_version": "1.12",
        "cores": [
          "bigpemu"
        ],
        "display_name": "BigPEmu (Atari Jaguar)",
        "emulator": "BigPEmu",
        "files": [],
        "mode": "standalone",
        "notes": "Closed-source Atari Jaguar and Jaguar CD emulator by Rich Whitehouse.\nBuilt-in boot ROM emulation for both cartridge and CD. No external\nBIOS or firmware files required. The emulator supports optional\n\"custom boot ROM images\" via the UI (loading mode for specific\nhomebrew demos), but no fixed file path or file name is expected.\nEmuDeck confirms: \"No BIOS are required to play BigPEmu.\"\n",
        "profiled_date": "2026-03-26",
        "source": "https://www.richwhitehouse.com/jaguar/",
        "systems": [
          "atari-jaguar",
          "atari-jaguarcd"
        ],
        "type": "standalone",
        "upstream": "https://www.richwhitehouse.com/jaguar/"
      }
    },
    {
      "id": "bk",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.00",
        "cores": [
          "bk"
        ],
        "display_name": "Elektronika - BK-0010/BK-0011(M)",
        "emulator": "bk-emulator",
        "files": [
          {
            "aliases": [
              "monit10.rom"
            ],
            "name": "MONIT10.ROM",
            "note": "BK-0010 monitor ROM (8 KB). Loaded at address 0100000. Required for all BK-0010 models (0, 1, 2).",
            "path": "bk/MONIT10.ROM",
            "required": true,
            "size": 8192,
            "source_ref": "main.c:53, boot.c:107",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "focal10.rom"
            ],
            "name": "FOCAL10.ROM",
            "note": "FOCAL interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010 (model 0, default).",
            "path": "bk/FOCAL10.ROM",
            "required": false,
            "size": 24576,
            "source_ref": "libretro.c:15, boot.c:110",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "basic10.rom"
            ],
            "name": "BASIC10.ROM",
            "note": "BASIC interpreter ROM (24448-24576 bytes). Loaded at 0120000. Used by BK-0010.01 (model 1).",
            "path": "bk/BASIC10.ROM",
            "required": false,
            "size": 24576,
            "source_ref": "libretro.c:16, boot.c:110",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "disk_327.rom"
            ],
            "name": "DISK_327.ROM",
            "note": "Floppy disk controller ROM (4 KB). Loaded at 0160000 for BK-0010.01+FDD (model 2), or into system_rom for BK-0011M (model 3/4).",
            "path": "bk/DISK_327.ROM",
            "required": false,
            "size": 4096,
            "source_ref": "main.c:54, boot.c:99,113",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "b11m_bos.rom"
            ],
            "name": "B11M_BOS.ROM",
            "note": "BK-0011M system ROM / BOS (8 KB). Loaded into system_rom at offset 0. Required for BK-0011M (model 3/4).",
            "path": "bk/B11M_BOS.ROM",
            "required": false,
            "size": 8192,
            "source_ref": "main.c:55, boot.c:98",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "b11m_ext.rom"
            ],
            "name": "B11M_EXT.ROM",
            "note": "BK-0011M extended BOS ROM (8 KB). Loaded into rom[1] at offset 8192. Required for BK-0011M (model 3/4).",
            "path": "bk/B11M_EXT.ROM",
            "required": false,
            "size": 8192,
            "source_ref": "main.c:56, boot.c:102",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "bas11m_0.rom"
            ],
            "name": "BAS11M_0.ROM",
            "note": "BK-0011M BASIC ROM part 0 (16 KB). Loaded into rom[0]. Required for BK-0011M (model 3/4).",
            "path": "bk/BAS11M_0.ROM",
            "required": false,
            "size": 16384,
            "source_ref": "main.c:57, boot.c:100",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "bas11m_1.rom"
            ],
            "name": "BAS11M_1.ROM",
            "note": "BK-0011M BASIC ROM part 1 (8 KB). Loaded into rom[1] at offset 0. Required for BK-0011M (model 3/4).",
            "path": "bk/BAS11M_1.ROM",
            "required": false,
            "size": 8192,
            "source_ref": "main.c:58, boot.c:101",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "terak.rom"
            ],
            "name": "TERAK.ROM",
            "note": "Terak 8510/a boot ROM (128 bytes). Used when model is set to Terak 8510/a (model 9).",
            "path": "bk/TERAK.ROM",
            "required": false,
            "size": 128,
            "source_ref": "boot.c:94",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Files go in {system_dir}/bk/.\nEach BK model requires a specific set of ROMs. The default model is BK-0010\nwhich needs MONIT10.ROM and FOCAL10.ROM. Changing the core option \"bk_model\"\nchanges which ROMs are loaded. The core shuts down if a required ROM is\nmissing (no fallback or pseudo-BIOS).\nIf a ROM file with uppercase name is not found, the core retries with\nthe filename lowercased.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "ROM directory is {system_dir}/bk/ (libretro.c:724-726).\nModel selection via core option \"bk_model\" determines which ROMs are loaded.\nThe core shuts down immediately if any required ROM for the selected model\nis not found.\n",
            "source_ref": "libretro.c:718-760, boot.c:83-116"
          },
          "model_rom_map": {
            "note": "BK-0010:            MONIT10.ROM + FOCAL10.ROM\nBK-0010.01:         MONIT10.ROM + BASIC10.ROM\nBK-0010.01 + FDD:   MONIT10.ROM + DISK_327.ROM\nBK-0011M + FDD:     B11M_BOS.ROM + DISK_327.ROM + BAS11M_0.ROM + BAS11M_1.ROM + B11M_EXT.ROM\nSlow BK-0011M:      same as BK-0011M + FDD\nTerak 8510/a:       TERAK.ROM\n",
            "source_ref": "libretro.c:734-756, boot.c:83-116"
          },
          "rom_loading": {
            "note": "load_rom_file() first tries {romdir}/{filename} with original casing.\nIf not found, retries with the filename converted to lowercase.\nReturns NULL and shuts down the core on failure.\n",
            "source_ref": "libretro.c:1050-1107"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/bk-emulator",
        "source_commit": "fe64da42ee463c1b2f4d0566e4d0f7a9667506f6",
        "systems": [
          "elektronika-bk"
        ],
        "type": "libretro",
        "upstream": "https://github.com/emestee/bk-emulator"
      }
    },
    {
      "id": "blastem",
      "profile": {
        "analysis": {
          "jaguar_bios": {
            "libretro_relevant": false,
            "note": "blastjag (jaguar.c) is a separate standalone binary, not compiled\ninto the libretro core. Requires BIOS as first CLI argument.\n"
          },
          "sega_cd": {
            "note": "TODO comment only: 'Differentiate between vanilla Genesis and Sega CD/32X games'",
            "source_ref": "system.c:16",
            "supported": false
          },
          "tmss": {
            "config_path": "system\u0000tmss_path\u0000",
            "default_model": "md1va3",
            "default_tmss": "off",
            "libretro_support": false,
            "note": "TMSS ROM is loaded from tmss.md (configurable via system/tmss_path).\nModels with tmss=on: md1va6, md2va1, md2va2, md3va1, md3va2.\nModels with tmss=off: md1va0, md1va3 (default), teradrive.\nThe libretro build uses md1va3 (tmss off) with no option to change.\n",
            "rom_filename": "tmss.md",
            "rom_size": 2048,
            "source_ref": "genesis.c:1910",
            "standalone_support": true
          }
        },
        "core_classification": "official_port",
        "core_version": "v0.6.3-pre",
        "cores": [
          "blastem"
        ],
        "display_name": "Sega - Mega Drive - Genesis (BlastEm)",
        "emulator": "BlastEm",
        "files": [
          {
            "hle_fallback": true,
            "name": "rom.db",
            "note": "ROM feature database (game-specific mapper/save config). Embedded in core, external is optional override.",
            "required": false,
            "source_ref": "libblastem.c:532-542 read_bundled_file()",
            "system": "sega-megadrive"
          },
          {
            "mode": "standalone",
            "name": "tmss.md",
            "note": "TMSS startup ROM. Standalone only (models md1va6, md2va1+). Libretro core uses md1va3 (tmss off), no way to change.",
            "required": false,
            "size": 2048,
            "source_ref": "genesis.c:3027-3040",
            "system": "sega-megadrive"
          }
        ],
        "notes": "BlastEm is a cycle-accurate Sega Mega Drive/Genesis emulator with basic\nMaster System support. In standalone mode it supports TMSS ROM loading and\nmultiple hardware models (MD1 VA0 through MD3 VA2, Teradrive). The Jaguar\nemulator (blastjag) is a separate standalone binary, not part of the\nlibretro core.\n\nThe libretro port (libblastem.c) does NOT expose any core options and\ndefaults to model md1va3 which has TMSS disabled. There is no way to\nselect a TMSS-enabled model through the libretro interface.\n\nEven if a TMSS-enabled model were forced, read_bundled_file() in the\nlibretro build only serves rom.db and returns NULL for tmss.md, so TMSS\nROM loading would fail (fatal_error at genesis.c:1923).\n\nSega CD / Mega CD is not supported (only a TODO comment in system.c:16).\nNo BIOS files are required or loaded by the libretro core.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/blastem",
        "source_commit": "84e567e17b6fb3cea23146c4209c18d50d46cbf0",
        "systems": [
          "sega-megadrive",
          "sega-mastersystem"
        ],
        "type": "standalone + libretro",
        "upstream": "https://www.retrodev.com/blastem/"
      }
    },
    {
      "id": "bluemsx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "bluemsx"
        ],
        "data_directories": [
          {
            "ref": "bluemsx",
            "source_ref": "libretro.c:1118-1119"
          }
        ],
        "display_name": "MSX/SVI/ColecoVision/SG-1000 (blueMSX)",
        "emulator": "blueMSX",
        "files": [
          {
            "name": "MSX.rom",
            "note": "MSX1 generic BIOS. Used by default 'MSX' machine config.",
            "path": "Machines/Shared Roms/MSX.rom",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSX/config.ini",
            "system": "msx"
          },
          {
            "name": "MSXJ.rom",
            "note": "MSX1 Japanese BIOS. Used by 'MSX - Japanese' machine.",
            "path": "Machines/Shared Roms/MSXJ.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSX - Japanese/config.ini",
            "system": "msx"
          },
          {
            "name": "MSXBR.rom",
            "note": "MSX1 Brazilian BIOS.",
            "path": "Machines/Shared Roms/MSXBR.rom",
            "region": [
              "brazil"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXFR.rom",
            "note": "MSX1 French BIOS.",
            "path": "Machines/Shared Roms/MSXFR.rom",
            "region": [
              "france"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXG.rom",
            "note": "MSX1 German BIOS.",
            "path": "Machines/Shared Roms/MSXG.rom",
            "region": [
              "germany"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXKR.rom",
            "note": "MSX1 Korean BIOS.",
            "path": "Machines/Shared Roms/MSXKR.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXR.rom",
            "note": "MSX1 Russian BIOS.",
            "path": "Machines/Shared Roms/MSXR.rom",
            "region": [
              "russia"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXSE.ROM",
            "note": "MSX1 Swedish BIOS.",
            "path": "Machines/Shared Roms/MSXSE.ROM",
            "region": [
              "sweden"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXSP.rom",
            "note": "MSX1 Spanish BIOS.",
            "path": "Machines/Shared Roms/MSXSP.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXAR.ROM",
            "note": "MSX1 Arabic BIOS.",
            "path": "Machines/Shared Roms/MSXAR.ROM",
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXR2.ROM",
            "note": "MSX1 Russian BIOS (variant 2).",
            "path": "Machines/Shared Roms/MSXR2.ROM",
            "region": [
              "russia"
            ],
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "name": "MSXHAN.rom",
            "note": "MSX1 Korean Hangul extension ROM.",
            "path": "Machines/Shared Roms/MSXHAN.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 8192,
            "system": "msx"
          },
          {
            "name": "MSX2.rom",
            "note": "MSX2 generic main BIOS. Used by default 'MSX2' machine config.",
            "path": "Machines/Shared Roms/MSX2.rom",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSX2/config.ini",
            "system": "msx2"
          },
          {
            "name": "MSX2EXT.rom",
            "note": "MSX2 extension BIOS (SubROM). Required alongside MSX2.rom.",
            "path": "Machines/Shared Roms/MSX2EXT.rom",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX2/config.ini",
            "system": "msx2"
          },
          {
            "name": "MSX2J.rom",
            "note": "MSX2 Japanese main BIOS.",
            "path": "Machines/Shared Roms/MSX2J.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2JEXT.rom",
            "note": "MSX2 Japanese extension BIOS.",
            "path": "Machines/Shared Roms/MSX2JEXT.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2BR.rom",
            "note": "MSX2 Brazilian main BIOS.",
            "path": "Machines/Shared Roms/MSX2BR.rom",
            "region": [
              "brazil"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2BREXT.rom",
            "note": "MSX2 Brazilian extension BIOS.",
            "path": "Machines/Shared Roms/MSX2BREXT.rom",
            "region": [
              "brazil"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2FR.rom",
            "note": "MSX2 French main BIOS.",
            "path": "Machines/Shared Roms/MSX2FR.rom",
            "region": [
              "france"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2FREXT.rom",
            "note": "MSX2 French extension BIOS.",
            "path": "Machines/Shared Roms/MSX2FREXT.rom",
            "region": [
              "france"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2G.rom",
            "note": "MSX2 German main BIOS.",
            "path": "Machines/Shared Roms/MSX2G.rom",
            "region": [
              "germany"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2GEXT.rom",
            "note": "MSX2 German extension BIOS.",
            "path": "Machines/Shared Roms/MSX2GEXT.rom",
            "region": [
              "germany"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2KR.rom",
            "note": "MSX2 Korean main BIOS.",
            "path": "Machines/Shared Roms/MSX2KR.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2KREXT.rom",
            "note": "MSX2 Korean extension BIOS.",
            "path": "Machines/Shared Roms/MSX2KREXT.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2R.rom",
            "note": "MSX2 Russian main BIOS.",
            "path": "Machines/Shared Roms/MSX2R.rom",
            "region": [
              "russia"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2REXT.rom",
            "note": "MSX2 Russian extension BIOS.",
            "path": "Machines/Shared Roms/MSX2REXT.rom",
            "region": [
              "russia"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2R2.ROM",
            "note": "MSX2 Russian main BIOS (variant 2).",
            "path": "Machines/Shared Roms/MSX2R2.ROM",
            "region": [
              "russia"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2SE.rom",
            "note": "MSX2 Swedish main BIOS.",
            "path": "Machines/Shared Roms/MSX2SE.rom",
            "region": [
              "sweden"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2SP.rom",
            "note": "MSX2 Spanish main BIOS.",
            "path": "Machines/Shared Roms/MSX2SP.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2SPEXT.rom",
            "note": "MSX2 Spanish extension BIOS.",
            "path": "Machines/Shared Roms/MSX2SPEXT.rom",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2AR.ROM",
            "note": "MSX2 Arabic main BIOS.",
            "path": "Machines/Shared Roms/MSX2AR.ROM",
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2AREXT.ROM",
            "note": "MSX2 Arabic extension BIOS.",
            "path": "Machines/Shared Roms/MSX2AREXT.ROM",
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "name": "MSX2HAN.rom",
            "note": "MSX2 Korean Hangul BIOS.",
            "path": "Machines/Shared Roms/MSX2HAN.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "name": "MSX2P.rom",
            "note": "MSX2+ main BIOS. Used by default 'MSX2+' machine config (auto-selected for .dsk/.cas/.rom).",
            "path": "Machines/Shared Roms/MSX2P.rom",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini",
            "system": "msx2plus"
          },
          {
            "name": "MSX2PEXT.rom",
            "note": "MSX2+ extension BIOS (SubROM).",
            "path": "Machines/Shared Roms/MSX2PEXT.rom",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini",
            "system": "msx2plus"
          },
          {
            "name": "MSX2PMUS.rom",
            "note": "MSX2+ MSX-MUSIC BIOS (FM-PAC built-in). Used by MSX2+ and MSX2 default configs.",
            "path": "Machines/Shared Roms/MSX2PMUS.rom",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini",
            "system": "msx2plus"
          },
          {
            "name": "MSXTR.ROM",
            "note": "MSX turboR main BIOS.",
            "path": "Machines/Shared Roms/MSXTR.ROM",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSXturboR/config.ini",
            "system": "msxturboR"
          },
          {
            "name": "MSXTREXT.ROM",
            "note": "MSX turboR extension BIOS.",
            "path": "Machines/Shared Roms/MSXTREXT.ROM",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSXturboR/config.ini",
            "system": "msxturboR"
          },
          {
            "name": "MSXTRMUS.ROM",
            "note": "MSX turboR MSX-MUSIC BIOS.",
            "path": "Machines/Shared Roms/MSXTRMUS.ROM",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSXturboR/config.ini",
            "system": "msxturboR"
          },
          {
            "name": "MSXTROPT.ROM",
            "note": "MSX turboR option ROM (firmware utilities).",
            "path": "Machines/Shared Roms/MSXTROPT.ROM",
            "required": true,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSXturboR/config.ini",
            "system": "msxturboR"
          },
          {
            "name": "MSXDOS23.ROM",
            "note": "MSX-DOS 2.3 ROM. Used by turboR default config for disk operations.",
            "path": "Machines/Shared Roms/MSXDOS23.ROM",
            "required": true,
            "size": 65536,
            "source_ref": "system/bluemsx/Machines/MSXturboR/config.ini",
            "system": "msxturboR"
          },
          {
            "name": "KANJI.rom",
            "note": "Kanji font ROM (256 KB). Used by MSX2+, turboR, and Japanese MSX2 machines.",
            "path": "Machines/Shared Roms/KANJI.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 262144,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini"
          },
          {
            "name": "MSXKANJI.rom",
            "note": "MSX-Kanji driver ROM. Used by MSX2+, turboR, and Japanese MSX2 for kanji display.",
            "path": "Machines/Shared Roms/MSXKANJI.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini"
          },
          {
            "hle_fallback": true,
            "name": "FMPAC.rom",
            "note": "FM-PAC cartridge ROM (YM2413 FM synthesis). If missing, core uses built-in minimal ROM stub.",
            "path": "Machines/Shared Roms/FMPAC.rom",
            "required": false,
            "size": 65536,
            "source_ref": "Src/Memory/MegaromCartridge.c:290-306"
          },
          {
            "name": "XBASIC2.rom",
            "note": "MSX-BASIC 2 extension ROM. Used by MSX2, MSX2+, and turboR default configs.",
            "path": "Machines/Shared Roms/XBASIC2.rom",
            "required": false,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX2/config.ini"
          },
          {
            "name": "PAINT.rom",
            "note": "Paint utility ROM. Used by some MSX2 Japanese machine configs.",
            "path": "Machines/Shared Roms/PAINT.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 65536
          },
          {
            "name": "SWP.rom",
            "note": "Software World Processor ROM. Used by Al Alamiah MSX2 machines.",
            "path": "Machines/Shared Roms/SWP.rom",
            "required": false,
            "size": 32768
          },
          {
            "name": "ARABIC.rom",
            "note": "Arabic character set extension ROM.",
            "path": "Machines/Shared Roms/ARABIC.rom",
            "required": false,
            "size": 32768
          },
          {
            "name": "HANGUL.rom",
            "note": "Korean Hangul font ROM (128 KB).",
            "path": "Machines/Shared Roms/HANGUL.rom",
            "region": [
              "south-korea"
            ],
            "required": false,
            "size": 131072
          },
          {
            "name": "RS232.ROM",
            "note": "RS-232C serial interface ROM.",
            "path": "Machines/Shared Roms/RS232.ROM",
            "required": false,
            "size": 8192
          },
          {
            "name": "MOONSOUND.rom",
            "note": "MoonSound (OPL4) wavetable ROM (2 MB). Used by MSX2, MSX2+, and turboR configs.",
            "path": "Machines/Shared Roms/MOONSOUND.rom",
            "required": false,
            "size": 2097152,
            "source_ref": "system/bluemsx/Machines/MSX2/config.ini"
          },
          {
            "name": "PANASONICDISK.rom",
            "note": "Panasonic disk controller ROM. Used by MSX2+ and turboR default configs.",
            "path": "Machines/Shared Roms/PANASONICDISK.rom",
            "required": false,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX2+/config.ini"
          },
          {
            "name": "PHILIPSDISK.rom",
            "note": "Philips disk controller ROM. Used by MSX1 and MSX2 default configs.",
            "path": "Machines/Shared Roms/PHILIPSDISK.rom",
            "required": false,
            "size": 16384,
            "source_ref": "system/bluemsx/Machines/MSX/config.ini"
          },
          {
            "name": "NATIONALDISK.rom",
            "note": "National disk controller ROM.",
            "path": "Machines/Shared Roms/NATIONALDISK.rom",
            "required": false,
            "size": 16384
          },
          {
            "name": "MICROSOLDISK.ROM",
            "note": "Microsol disk controller ROM.",
            "path": "Machines/Shared Roms/MICROSOLDISK.ROM",
            "required": false,
            "size": 16384
          },
          {
            "name": "SUNRISEIDE.rom",
            "note": "Sunrise IDE interface ROM. Loaded as expansion cartridge.",
            "path": "Machines/Shared Roms/SUNRISEIDE.rom",
            "required": false,
            "size": 65536,
            "source_ref": "Src/Memory/MegaromCartridge.c:311"
          },
          {
            "name": "BEERIDE.ROM",
            "note": "Beer IDE interface ROM.",
            "path": "Machines/Shared Roms/BEERIDE.ROM",
            "required": false,
            "size": 16384,
            "source_ref": "Src/Memory/MegaromCartridge.c:319"
          },
          {
            "name": "NOVAXIS.rom",
            "note": "Novaxis SCSI interface ROM.",
            "path": "Machines/Shared Roms/NOVAXIS.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Src/Memory/MegaromCartridge.c:327"
          },
          {
            "name": "nowindDos1.rom",
            "note": "Nowind USB disk interface with MSX-DOS 1.",
            "path": "Machines/Shared Roms/nowindDos1.rom",
            "required": false,
            "size": 524288,
            "source_ref": "Src/Memory/MegaromCartridge.c:335"
          },
          {
            "name": "nowindDos2.rom",
            "note": "Nowind USB disk interface with MSX-DOS 2.",
            "path": "Machines/Shared Roms/nowindDos2.rom",
            "required": false,
            "size": 524288,
            "source_ref": "Src/Memory/MegaromCartridge.c:339"
          },
          {
            "name": "GCVMX80.ROM",
            "note": "GCV MX-80 printer interface ROM.",
            "path": "Machines/Shared Roms/GCVMX80.ROM",
            "required": false,
            "size": 8192
          },
          {
            "name": "ARAB1.ROM",
            "note": "Arabic support ROM (variant 1).",
            "path": "Machines/Shared Roms/ARAB1.ROM",
            "required": false,
            "size": 32768
          },
          {
            "bundled": true,
            "name": "cbios_main_msx1.rom",
            "note": "C-BIOS MSX1 main ROM (open source). Bundled with core. Cartridge games only.",
            "path": "Machines/MSX - C-BIOS/cbios_main_msx1.rom",
            "required": false,
            "size": 32768,
            "system": "msx"
          },
          {
            "bundled": true,
            "name": "cbios_logo_msx1.rom",
            "note": "C-BIOS MSX1 logo ROM (open source). Bundled with core.",
            "path": "Machines/MSX - C-BIOS/cbios_logo_msx1.rom",
            "required": false,
            "size": 16384,
            "system": "msx"
          },
          {
            "bundled": true,
            "name": "cbios_main_msx2.rom",
            "note": "C-BIOS MSX2 main ROM (open source). Bundled with core. Cartridge games only.",
            "path": "Machines/MSX2 - C-BIOS/cbios_main_msx2.rom",
            "required": false,
            "size": 32768,
            "system": "msx2"
          },
          {
            "bundled": true,
            "name": "cbios_logo_msx2.rom",
            "note": "C-BIOS MSX2 logo ROM (open source). Bundled with core.",
            "path": "Machines/MSX2 - C-BIOS/cbios_logo_msx2.rom",
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "bundled": true,
            "name": "cbios_sub.rom",
            "note": "C-BIOS MSX2/MSX2+ sub ROM (open source). Bundled with core.",
            "path": "Machines/MSX2 - C-BIOS/cbios_sub.rom",
            "required": false,
            "size": 16384,
            "system": "msx2"
          },
          {
            "bundled": true,
            "name": "cbios_main_msx2+.rom",
            "note": "C-BIOS MSX2+ main ROM (open source). Bundled with core. Cartridge games only.",
            "path": "Machines/MSX2+ - C-BIOS/cbios_main_msx2+.rom",
            "required": false,
            "size": 32768,
            "system": "msx2plus"
          },
          {
            "bundled": true,
            "name": "cbios_logo_msx2+.rom",
            "note": "C-BIOS MSX2+ logo ROM (open source). Bundled with core.",
            "path": "Machines/MSX2+ - C-BIOS/cbios_logo_msx2+.rom",
            "required": false,
            "size": 16384,
            "system": "msx2plus"
          },
          {
            "bundled": true,
            "name": "cbios_music.rom",
            "note": "C-BIOS MSX2+ music ROM (open source). Bundled with core.",
            "path": "Machines/MSX2+ - C-BIOS/cbios_music.rom",
            "required": false,
            "size": 16384,
            "system": "msx2plus"
          },
          {
            "name": "coleco.rom",
            "note": "ColecoVision BIOS ROM. Required for ColecoVision mode.",
            "path": "Machines/COL - ColecoVision/coleco.rom",
            "required": true,
            "size": 8192,
            "source_ref": "system/bluemsx/Machines/COL - ColecoVision/config.ini",
            "system": "colecovision"
          },
          {
            "name": "sf7000.rom",
            "note": "Sega SF-7000 BIOS ROM. SG-1000 and SC-3000 have no BIOS requirement.",
            "path": "Machines/SEGA - SF-7000/sf7000.rom",
            "required": true,
            "size": 8192,
            "source_ref": "system/bluemsx/Machines/SEGA - SF-7000/config.ini",
            "system": "sega-sf7000"
          },
          {
            "name": "svi318.rom",
            "note": "SVI-318 BIOS ROM.",
            "path": "Machines/SVI - Spectravideo SVI-318/svi318.rom",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/SVI - Spectravideo SVI-318/config.ini",
            "system": "spectravideo"
          },
          {
            "name": "svi328.rom",
            "note": "SVI-328 BIOS ROM.",
            "path": "Machines/SVI - Spectravideo SVI-328/svi328.rom",
            "required": true,
            "size": 32768,
            "source_ref": "system/bluemsx/Machines/SVI - Spectravideo SVI-328/config.ini",
            "system": "spectravideo"
          },
          {
            "bundled": true,
            "name": "msxromdb.xml",
            "note": "MSX ROM database for mapper auto-detection. Bundled with core.",
            "path": "Databases/msxromdb.xml",
            "required": false
          },
          {
            "bundled": true,
            "name": "msxsysromdb.xml",
            "note": "MSX system ROM database. Bundled with core.",
            "path": "Databases/msxsysromdb.xml",
            "required": false
          },
          {
            "bundled": true,
            "name": "colecodb.xml",
            "note": "ColecoVision ROM database. Bundled with core.",
            "path": "Databases/colecodb.xml",
            "required": false
          },
          {
            "bundled": true,
            "name": "msxcaswavdb.xml",
            "note": "MSX cassette/WAV media database. Bundled with core.",
            "path": "Databases/msxcaswavdb.xml",
            "required": false
          },
          {
            "bundled": true,
            "name": "segadb.xml",
            "note": "Sega SG-1000/SC-3000/SF-7000 ROM database. Bundled with core.",
            "path": "Databases/segadb.xml",
            "required": false
          },
          {
            "bundled": true,
            "name": "svidb.xml",
            "note": "Spectravideo SVI ROM database. Bundled with core.",
            "path": "Databases/svidb.xml",
            "required": false
          }
        ],
        "notes": "The directory structure must be preserved exactly as shipped in the repo's\nsystem/bluemsx/ folder. The core expects Machines/ and Databases/ subdirectories\ninside the system directory. Each machine model has its own subdirectory with\na config.ini and associated ROM files.\n\nDefault machines (used when selecting base type names like \"MSX\", \"MSX2\", etc.)\nreference ROMs from \"Machines/Shared Roms/\". Machine-specific variants (e.g.\n\"MSX2 - Panasonic FS-A1F\") have their own ROMs in their own subdirectory.\n\nC-BIOS machines work for cartridge-based games without any copyrighted BIOS.\nFor disk/tape support, real BIOS ROMs are required.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/blueMSX-libretro",
        "source_commit": "0f32f52c48d3e772bfdf0379756f81f00b4e08bc",
        "systems": [
          "msx",
          "msx2",
          "msx2plus",
          "msxturboR",
          "colecovision",
          "sega-sg1000",
          "sega-sc3000",
          "sega-sf7000",
          "spectravideo"
        ],
        "type": "standalone + libretro",
        "upstream": "http://bluemsx.msxblue.com/"
      }
    },
    {
      "id": "bnes",
      "profile": {
        "analysis": {
          "bios_search": {
            "cartridge_load": "nes/cartridge/cartridge.cpp:18-31 - parses iNES header + ROM data",
            "interface_init": "nes/interface/interface.cpp:17-20 - stores derived pointer, calls system.init",
            "retro_load_game": "libretro/libretro.cpp:181-211 - loads cartridge data only, no BIOS",
            "system_init": "nes/system/system.cpp:62-66 - sets interface pointer, no ROM loading",
            "system_power": "nes/system/system.cpp:43-50 - powers subsystems, no file I/O"
          },
          "fds_support": false,
          "filesystem_access": false,
          "system_directory_used": false
        },
        "core_classification": "frozen_snapshot",
        "core_version": "v083",
        "cores": [
          "bnes"
        ],
        "display_name": "Nintendo - NES / Famicom (bnes)",
        "emulator": "bnes",
        "files": [],
        "notes": "Frozen libretro port of byuu's higan v083 NES module by Ryphecha. Experimental,\nnot maintained. ROM data passed via retro_load_game memory buffer\n(libretro/libretro.cpp:181-184). Cartridge::load parses iNES headers and\ndelegates to Board::load (nes/cartridge/cartridge.cpp:18-31). System::init sets\nup the interface pointer and default input devices (nes/system/system.cpp:62-66).\nNo system directory access. No FDS support. Palette hardcoded\n(libretro/libretro.cpp:20-37). .info declares no firmware (firmware_count absent).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/bnes-libretro",
        "source_commit": "8e26e89a93bef8eb8992d1921b539dce1792660a",
        "systems": [
          "nes"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Alcaro/bsnes-gc"
      }
    },
    {
      "id": "boom3",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "git",
        "cores": [
          "boom3",
          "boom3_xp"
        ],
        "display_name": "Doom 3 (boom3)",
        "emulator": "boom3",
        "files": [],
        "notes": "Doom 3 source port based on dhewm3 (GPL Doom 3 engine). The core accepts .pk4 extensions (retro_get_system_info sets valid_extensions = \"pk4\"). Content is loaded directly from the .pk4 file path - the engine extracts the grandparent directory as fs_basepath (libretro.cpp:1097,1135-1136 via extract_directory called twice on info->path) and expects the standard Doom 3 directory layout with base/ containing pak000.pk4 through pak008.pk4. BASE_GAMEDIR is hardcoded to \"base\" (Licensee.h:58). The boom3_xp variant compiles with _D3XP defined, which passes \"+set fs_game d3xp\" at startup (libretro.cpp:538-544) to load the Resurrection of Evil expansion from a d3xp/ subdirectory alongside base/. The filesystem code (FileSystem.cpp:2125) scans for .pk4 files in the game directory and loads them in order, with higher-numbered paks overriding lower ones. The core requires OpenGL (RETRO_ENVIRONMENT_SET_HW_RENDER) and XRGB8888 pixel format. All required files are commercial Doom 3 game data, not engine firmware. No BIOS or system files are needed in the RetroArch system directory.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/boom3",
        "source_commit": "b810234ea1e3b498fa6ff5f51efaaa9433b21060",
        "systems": [
          "doom3"
        ],
        "type": "libretro",
        "upstream": "https://github.com/dhewm/dhewm3",
        "verification": "existence"
      }
    },
    {
      "id": "boytacean",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.11.5",
        "cores": [
          "boytacean"
        ],
        "display_name": "Nintendo - Game Boy / Color (Boytacean)",
        "emulator": "Boytacean",
        "files": [
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "dmg_boot.bin",
            "note": "Original Nintendo DMG boot ROM",
            "required": false,
            "size": 256,
            "source_ref": "src/gb.rs:1400, src/data.rs:14",
            "system": "nintendo-gb"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "sgb_boot.bin",
            "note": "Super Game Boy boot ROM",
            "required": false,
            "size": 256,
            "source_ref": "src/gb.rs:1401, src/data.rs:29",
            "system": "nintendo-gb"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "dmg_bootix.bin",
            "note": "Open-source DMG boot ROM from Bootix (default DMG)",
            "required": false,
            "size": 256,
            "source_ref": "src/gb.rs:1402, src/data.rs:44",
            "system": "nintendo-gb"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "mgb_bootix.bin",
            "note": "Open-source MGB (Pocket) boot ROM from Bootix",
            "required": false,
            "size": 256,
            "source_ref": "src/gb.rs:1403, src/data.rs:59",
            "system": "nintendo-gb"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "cgb_boot.bin",
            "note": "Original Nintendo CGB boot ROM",
            "required": false,
            "size": 2304,
            "source_ref": "src/gb.rs:1404, src/data.rs:74",
            "system": "nintendo-gbc"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "cgb_boytacean.bin",
            "note": "Custom open-source CGB boot ROM (default CGB)",
            "required": false,
            "size": 2304,
            "source_ref": "src/gb.rs:1405, src/data.rs:177",
            "system": "nintendo-gbc"
          }
        ],
        "notes": "Game Boy / Game Boy Color emulator written in Rust by Joao Magalhaes.\n\nLibretro: all boot ROMs compiled into binary as static byte arrays in\nsrc/data.rs. load_boot_static() copies from arrays. No filesystem\naccess, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. No external files.\nref: core.rs:402 instance.load(true) -> gb.rs:1311 -> load_boot_static\n\nStandalone (SDL): also defaults to embedded boot ROMs via load(true).\nUser can override via --boot-rom-path CLI argument with any boot ROM\nfile. load_boot_file() with hardcoded ./res/boot/*.bin paths exists in\ngb.rs:1361 but is not called from any frontend.\n\nBoot ROM defaults: DmgBootix (DMG), CgbBoytacean (CGB) — open-source.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/joamag/boytacean",
        "source_commit": "440213b507cfaefcc3adf6a62460097407379bcc",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/joamag/boytacean"
      }
    },
    {
      "id": "bsnes",
      "profile": {
        "core_classification": "official_port",
        "core_version": "115",
        "cores": [
          "bsnes"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes)",
        "emulator": "bsnes",
        "files": [
          {
            "hle_fallback": true,
            "name": "dsp1.program.rom",
            "note": "NEC uPD7725 program ROM for DSP1",
            "required": false,
            "size": 6144,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/heuristics/super-famicom.cpp:601",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp1.data.rom",
            "note": "NEC uPD7725 data ROM for DSP1",
            "required": false,
            "size": 2048,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.program.rom",
            "note": "NEC uPD7725 program ROM for DSP1B (default NEC identifier)",
            "required": false,
            "size": 6144,
            "source_ref": "bsnes/heuristics/super-famicom.cpp:606",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.data.rom",
            "note": "NEC uPD7725 data ROM for DSP1B",
            "required": false,
            "size": 2048,
            "source_ref": "bsnes/heuristics/super-famicom.cpp:606",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp2.program.rom",
            "note": "NEC uPD7725 program ROM for DSP2 (Dungeon Master)",
            "required": false,
            "size": 6144,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:515-520, bsnes/heuristics/super-famicom.cpp:602",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp2.data.rom",
            "note": "NEC uPD7725 data ROM for DSP2",
            "required": false,
            "size": 2048,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "dsp3.program.rom",
            "note": "NEC uPD7725 program ROM for DSP3 (SD Gundam GX). No HLE fallback",
            "required": true,
            "size": 6144,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:531-534",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "dsp3.data.rom",
            "note": "NEC uPD7725 data ROM for DSP3. No HLE fallback",
            "required": true,
            "size": 2048,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:531-534",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp4.program.rom",
            "note": "NEC uPD7725 program ROM for DSP4 (Top Gear 3000)",
            "required": false,
            "size": 6144,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:522-528, bsnes/heuristics/super-famicom.cpp:604-605",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "dsp4.data.rom",
            "note": "NEC uPD7725 data ROM for DSP4",
            "required": false,
            "size": 2048,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "st010.program.rom",
            "note": "NEC uPD96050 program ROM for ST010",
            "required": false,
            "size": 49152,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:570-574, bsnes/heuristics/super-famicom.cpp:583-587",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "st010.data.rom",
            "note": "NEC uPD96050 data ROM for ST010",
            "required": false,
            "size": 4096,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:578-583",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "st011.program.rom",
            "note": "NEC uPD96050 program ROM for ST011 (2dan Morita Shougi). No HLE fallback",
            "required": true,
            "size": 49152,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:599-601, bsnes/heuristics/super-famicom.cpp:586",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "st011.data.rom",
            "note": "NEC uPD96050 data ROM for ST011. No HLE fallback",
            "required": true,
            "size": 4096,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:599-601",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "st018.program.rom",
            "note": "ARM6 program ROM for ST018 (Hayazashi Nidan Morita Shougi). No HLE fallback",
            "required": true,
            "size": 131072,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:379-385, bsnes/sfc/coprocessor/armdsp/armdsp.hpp:31, bsnes/heuristics/super-famicom.cpp:580",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "st018.data.rom",
            "note": "ARM6 data ROM for ST018. No HLE fallback",
            "required": true,
            "size": 32768,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:387-393, bsnes/sfc/coprocessor/armdsp/armdsp.hpp:32",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "crc32": "b6e76a6a",
            "hle_fallback": true,
            "md5": "037ac4296b6b6a5c47c440188d3c72e3",
            "name": "cx4.data.rom",
            "note": "Hitachi HG51BS169 data ROM for Cx4 (Mega Man X2/X3). HLE fallback and built-in static ROM available",
            "required": false,
            "sha1": "a002f4efba42775a31185d443f3ed1790b0e949a",
            "size": 3072,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:444-456, bsnes/sfc/coprocessor/hitachidsp/hitachidsp.hpp:49, bsnes/heuristics/super-famicom.cpp:597, bsnes/sfc/coprocessor/hitachidsp/data-rom.cpp:3 (staticDataROM[3072])",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "name": "SGB1.sfc",
            "note": "Super Game Boy 1 cartridge ROM, loaded when playing .gb/.gbc via SGB mode",
            "required": false,
            "source_ref": "bsnes/target-libretro/libretro.cpp:926-935 (system_dir + sgb_bios), bsnes/target-libretro/libretro.cpp:393 (core option bsnes_sgb_bios)",
            "system": "nintendo-super-game-boy"
          },
          {
            "name": "SGB2.sfc",
            "note": "Super Game Boy 2 cartridge ROM, uses dedicated oscillator for accurate GB speed",
            "required": false,
            "source_ref": "bsnes/target-libretro/libretro.cpp:926-935 (system_dir + sgb_bios), bsnes/target-libretro/libretro.cpp:393 (core option bsnes_sgb_bios)",
            "system": "nintendo-super-game-boy"
          },
          {
            "name": "BS-X.bin",
            "note": "BS-X Satellaview BIOS ROM, loaded from system_dir when running .bs games",
            "required": true,
            "source_ref": "bsnes/target-libretro/libretro.cpp:944-951 (system_dir + BS-X.bin hardcoded, .bs extension branch)",
            "system": "nintendo-satellaview"
          }
        ],
        "logo": "https://raw.githubusercontent.com/bsnes-emu/bsnes/master/bsnes/target-bsnes/resource/bsnes.svg",
        "notes": {
          "cx4_static_fallback": "The Cx4 (HG51BS169) has a compiled-in static data ROM (hitachidsp/staticDataROM) as fallback when cx4.data.rom is missing and HLE is disabled. This means Mega Man X2/X3 work in all configurations without user-supplied firmware.\n",
          "embedded_firmware": "If firmware data is appended to the game ROM, bsnes splits it automatically based on firmwareRomSize() detection. Sizes: uPD7725=0x2000, uPD96050=0xD000, ARM6=0x28000, HG51BS169=0xC00. This eliminates the need for separate files when using combined ROM+firmware dumps.\n",
          "firmware_resolution": "Firmware filenames are derived from the game manifest identifier field (lowercased) plus \".program.rom\" or \".data.rom\" suffix. The mapping is: NEC uPD7725 -> dsp1/dsp1b/dsp2/dsp3/dsp4, NEC uPD96050 -> st010/st011, ARM6 -> st018, HG51BS169 -> cx4. Firmware can also be appended directly to the ROM image (auto-detected by firmwareRomSize heuristic).\n",
          "hle_available": true,
          "hle_note": "bsnes provides HLE for DSP1, DSP1B, DSP2, DSP4, ST010, and Cx4. Controlled by core option bsnes_coprocessor_prefer_hle (default ON). DSP3, ST011, and ST018 have no HLE - LLE firmware files are mandatory for the few games that use them.\n",
          "sgb_note": "SGB boot ROMs (256 bytes each for SGB1/SGB2) are compiled into the core at icd/boot-roms.cpp. The SGB cartridge ROM (SGB1.sfc or SGB2.sfc) is a separate requirement. Core option bsnes_sgb_bios selects which one to use (default SGB1.sfc). Loading .gb/.gbc files auto-loads the selected SGB ROM.\n"
        },
        "profiled_date": "2026-04-05",
        "source": "https://github.com/libretro/bsnes-libretro",
        "source_commit": "9c1285dda7dd6bb9a9951d37bcee8794ada640e6",
        "systems": [
          "nintendo-snes",
          "nintendo-super-game-boy",
          "nintendo-satellaview"
        ],
        "type": "libretro",
        "upstream": "https://github.com/bsnes-emu/bsnes"
      }
    },
    {
      "id": "bsnes-jg",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.1.0",
        "cores": [
          "bsnes-jg"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes-jg)",
        "emulator": "bsnes-jg",
        "files": [
          {
            "hle_fallback": true,
            "name": "dsp1.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:429, src/cartridge.cpp:774,798-804",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:432, src/cartridge.cpp:786,798-804",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:435, src/cartridge.cpp:774,798-804",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:438, src/cartridge.cpp:786,798-804",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:441, src/cartridge.cpp:774,806-811",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:444, src/cartridge.cpp:786,806-811",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:447-448, src/cartridge.cpp:774,822-828",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:451-452, src/cartridge.cpp:786,822-828",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:455, src/cartridge.cpp:774,813-818",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:458, src/cartridge.cpp:786,813-818",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:461, src/cartridge.cpp:851,872-882",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:464, src/cartridge.cpp:863,872-882",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:467-468, src/cartridge.cpp:851,884-901",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:471-472, src/cartridge.cpp:863,884-901",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "arm6.program.rom"
            ],
            "name": "st018.program.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:475-476, src/cartridge.cpp:640",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "arm6.data.rom"
            ],
            "name": "st018.data.rom",
            "required": false,
            "source_ref": "libretro/libretro.cpp:479-480, src/cartridge.cpp:650",
            "system": "nintendo-snes"
          }
        ],
        "notes": "Fork of bsnes v115 by Rupert Carmichael, rewritten for C++ standard library.\nCoprocessor firmware loaded from system_dir via openFileCallback.\nHLE available for DSP1/1B/2/4 and ST010 (core option bsnes_jg_coproc_preferhle).\nDSP3, ST011, ST018 require LLE firmware in all cases (no HLE path).\nCX4/HitachiDSP uses embedded static data ROM (3072 bytes), no external file.\nSGB1/SGB2 boot ROMs embedded (256 bytes each).\nBML game databases embedded as C++ string literals.\n\nref: libretro/libretro.cpp:420-502 fileOpenV firmware loading callback\nref: src/cartridge.cpp:754-829 uPD7725 (DSP1-4) LLE/HLE dispatch\nref: src/cartridge.cpp:831-901 uPD96050 (ST010/ST011) LLE/HLE dispatch\nref: src/cartridge.cpp:615-670 ARM6 (ST018) firmware loading\nref: src/cartridge.cpp:672-752 HG51BS169 (HitachiDSP/CX4) embedded ROM + HLE\nref: src/coprocessor/icd.cpp:249,260 SGB1/SGB2 boot ROMs embedded\nref: src/cartridge.cpp:62 hitachidspStaticDataROM embedded\nref: libretro/libretro.cpp:30-33 BML databases embedded\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/bsnes-jg",
        "source_commit": "aedc27e367b65f002afb5098684f39eb6124079c",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://gitlab.com/jgemu/bsnes"
      }
    },
    {
      "id": "bsnes2014",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v094",
        "cores": [
          "bsnes2014_accuracy",
          "bsnes2014_balanced",
          "bsnes2014_performance"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes 2014)",
        "emulator": "bsnes 2014",
        "files": [
          {
            "name": "dsp1b.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:381",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:382",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:403",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:404",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:417",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:418",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:431",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:432",
            "system": "nintendo-snes"
          },
          {
            "name": "cx4.data.rom",
            "required": false,
            "size": 3072,
            "source_ref": "ananke/heuristics/super-famicom.hpp:146",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "ananke/heuristics/super-famicom.hpp:445",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "ananke/heuristics/super-famicom.hpp:446",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "ananke/heuristics/super-famicom.hpp:460",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "ananke/heuristics/super-famicom.hpp:461",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "required": false,
            "size": 131072,
            "source_ref": "ananke/heuristics/super-famicom.hpp:475",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "required": false,
            "size": 32768,
            "source_ref": "ananke/heuristics/super-famicom.hpp:476",
            "system": "nintendo-snes"
          },
          {
            "name": "sgb.boot.rom",
            "required": false,
            "size": 256,
            "source_ref": "ananke/heuristics/super-famicom.hpp:133",
            "system": "nintendo-sgb"
          }
        ],
        "notes": "Frozen at bsnes v094. Three build profiles: accuracy (dot-based PPU),\nbalanced, performance (scanline PPU). All 3 share the same 16 firmware\nfiles. Profiles only differ in PPU (sfc/profile-*.hpp), not coprocessors.\nSPC700 IPL ROM (64 bytes) embedded in target-libretro/libretro.cpp:31.\nNo HLE fallback for any coprocessor in v094.\nFirmware loaded from system_dir via file::exists() + mmapstream.\nNo hash or size validation on any firmware file.\nLibretro build uses heuristics only (ananke/heuristics/), not the SHA256\ndatabase (ananke/database/). All DSP1 games use DSP1B filenames via\nheuristic fallback. The database dsp1.program.rom / dsp1.data.rom names\nare only in the standalone build (target-ethos via ananke).\n.info accuracy/balanced: firmware_count=18 (overcounts by 2, includes\nphantom dsp1.* from unused database). Performance .info: firmware_count=17\n(also missing cx4.data.rom).\nUpstream v094 source is contained within the libretro repo (sfc/, ananke/).\nbsnes-emu/bsnes is the modern rewrite (v115+).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/bsnes2014",
        "source_commit": "1a6b3caf187605e53fa9970996bcfa49b8c90ce3",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://github.com/bsnes-emu/bsnes"
      }
    },
    {
      "id": "bsnes_cplusplus98",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v085 (Performance)",
        "cores": [
          "bsnes_cplusplus98"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes C++98 (v085))",
        "emulator": "bsnes C++98",
        "exclusion_note": "firmware_count=0 in .info is correct. DSP firmware (NEC uPD7725/uPD96050, Hitachi CX4) is loaded from the ROM directory via game XML markup, not from system_dir. RetroArch cannot pre-populate firmware in the ROM directory. Upstream byuu.org is defunct; this libretro port is the preserved v085 code.\n",
        "files": [],
        "notes": "Frozen snapshot of bsnes v085 downgraded to C++98 for old compilers (PS3).\nPerformance profile only. is_experimental=true.\n\nNEC DSP and Hitachi DSP firmware loaded from the ROM directory, not\nsystem_dir. Path: dir(interface->path(Slot::Base, \".dsp\")) + firmware_name\nfrom game XML markup. interface->path() returns ROM basename + hint.\nref: snes/cartridge/markup.cpp parse_markup_necdsp, parse_markup_hitachidsp\nref: snes/libretro/libretro.cpp Interface::path()\n\nRETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is never called.\nNo file I/O targets system_dir anywhere in the codebase.\n\nCore continues without DSP firmware but coprocessor games won't function.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/bsnes-libretro-cplusplus98",
        "source_commit": "0ac6a163490b4ffb1c09350e17bad060857c33d2",
        "systems": [
          "nintendo-snes",
          "nintendo-sufami-turbo",
          "nintendo-satellaview"
        ],
        "type": "libretro",
        "upstream": "https://byuu.org/"
      }
    },
    {
      "id": "bsnes_hd_beta",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v10.6",
        "cores": [
          "bsnes_hd_beta",
          "bsneshd",
          "bsnes_hd"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes-hd beta)",
        "emulator": "bsnes-hd beta",
        "files": [
          {
            "hle_fallback": true,
            "name": "dsp1.program.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/sfc/cartridge/load.cpp:506-513",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1.data.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503, bsnes/sfc/cartridge/load.cpp:506-513",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.program.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/sfc/cartridge/load.cpp:506-513",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.data.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503, bsnes/sfc/cartridge/load.cpp:506-513",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.program.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/sfc/cartridge/load.cpp:515-520",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.data.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503, bsnes/sfc/cartridge/load.cpp:515-520",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "note": "no HLE — required for SD Gundam GX",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/sfc/cartridge/load.cpp:531-534",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "note": "no HLE — required for SD Gundam GX",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503, bsnes/sfc/cartridge/load.cpp:531-534",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.program.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:490-494, bsnes/sfc/cartridge/load.cpp:522-528",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.data.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:498-503, bsnes/sfc/cartridge/load.cpp:522-528",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "cx4.data.rom",
            "required": false,
            "size": 3072,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:431-454",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.program.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:570-574, bsnes/sfc/cartridge/load.cpp:586-596",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.data.rom",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:578-583, bsnes/sfc/cartridge/load.cpp:586-596",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "note": "no HLE — required for Hayazashi Nidan Morita Shougi",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:570-574, bsnes/sfc/cartridge/load.cpp:599-602",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "note": "no HLE — required for Hayazashi Nidan Morita Shougi",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:578-583, bsnes/sfc/cartridge/load.cpp:599-602",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "note": "no HLE — required for Hayazashi Nidan Morita Shougi 2",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:379-384",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "note": "no HLE — required for Hayazashi Nidan Morita Shougi 2",
            "required": false,
            "source_ref": "bsnes/sfc/cartridge/load.cpp:387-393",
            "system": "nintendo-snes"
          },
          {
            "md5": "b15ddb15721c657d82c5bab6db982ee9",
            "name": "SGB1.sfc",
            "note": "SGB1 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:1",
            "required": false,
            "source_ref": "bsnes/target-libretro/libretro.cpp:1022, bsnes/target-libretro/libretro.cpp:1040",
            "system": "nintendo-sgb"
          },
          {
            "md5": "8ecd73eb4edf7ed7e81aef1be80031d5",
            "name": "SGB2.sfc",
            "note": "SGB2 cartridge ROM. Boot ROM embedded in icd/boot-roms.cpp:12",
            "required": false,
            "source_ref": "bsnes/target-libretro/libretro.cpp:1022, bsnes/target-libretro/libretro.cpp:1040",
            "system": "nintendo-sgb"
          },
          {
            "name": "BS-X.bin",
            "note": "required when loading .bs files, core returns false if missing",
            "required": false,
            "source_ref": "bsnes/target-libretro/libretro.cpp:1054-1060",
            "system": "nintendo-satellaview"
          }
        ],
        "notes": "bsnes-hd beta is a fork of bsnes ~v114 by DerKoun with widescreen\nand true color rendering. Firmware handling identical to bsnes v115.\nrepo Version=\"10.6\", SerializerVersion=\"114.2\"\nref: bsnes/emulator/emulator.hpp:33-34,40\n\nSGB boot ROMs embedded in binary (icd/boot-roms.cpp:1,12).\nSGB1.sfc/SGB2.sfc are SGB cartridge ROMs (not boot ROMs).\nHLE available for DSP1/1B/2/4, ST010, CX4 (default ON in libretro).\nDSP3, ST011, ST018 have no HLE.\nCoprocessor firmware not loaded from system_dir in libretro wrapper;\nHLE used by default, LLE requires firmware embedded in ROM.\nref: sfc/cartridge/load.cpp:431,506,586\nref: sfc/coprocessor/icd/icd.cpp:87,90\nref: target-libretro/libretro_core_options.h:462-470\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/DerKoun/bsnes-hd",
        "source_commit": "fc26b25ea236f0f877f0265d2a2c37dfd93dfde9",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://github.com/bsnes-emu/bsnes"
      }
    },
    {
      "id": "bsnes_mercury",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v094 (Mercury)",
        "cores": [
          "bsnes_mercury_accuracy",
          "bsnes_mercury_balanced",
          "bsnes_mercury_performance"
        ],
        "display_name": "Nintendo - SNES / SFC (bsnes-mercury)",
        "emulator": "bsnes-mercury",
        "files": [
          {
            "hle_fallback": true,
            "name": "dsp1.program.rom",
            "note": "only loaded via custom BML manifest, ananke uses dsp1b",
            "required": false,
            "size": 6144,
            "source_ref": "sfc/cartridge/markup.cpp:422-432",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1.data.rom",
            "note": "only loaded via custom BML manifest, ananke uses dsp1b",
            "required": false,
            "size": 2048,
            "source_ref": "sfc/cartridge/markup.cpp:422-432",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:381",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp1b.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:382",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:403",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp2.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:404",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp3.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:417",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp3.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:418",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.program.rom",
            "required": false,
            "size": 6144,
            "source_ref": "ananke/heuristics/super-famicom.hpp:431",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "dsp4.data.rom",
            "required": false,
            "size": 2048,
            "source_ref": "ananke/heuristics/super-famicom.hpp:432",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "cx4.data.rom",
            "required": false,
            "size": 3072,
            "source_ref": "ananke/heuristics/super-famicom.hpp:146",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "ananke/heuristics/super-famicom.hpp:445",
            "system": "nintendo-snes"
          },
          {
            "hle_fallback": true,
            "name": "st010.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "ananke/heuristics/super-famicom.hpp:446",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "size": 49152,
            "source_ref": "ananke/heuristics/super-famicom.hpp:460",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "size": 4096,
            "source_ref": "ananke/heuristics/super-famicom.hpp:461",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "required": false,
            "size": 131072,
            "source_ref": "ananke/heuristics/super-famicom.hpp:475",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "required": false,
            "size": 32768,
            "source_ref": "ananke/heuristics/super-famicom.hpp:476",
            "system": "nintendo-snes"
          },
          {
            "name": "sgb.boot.rom",
            "required": false,
            "size": 256,
            "source_ref": "ananke/heuristics/super-famicom.hpp:133",
            "system": "nintendo-sgb"
          }
        ],
        "notes": "Fork of higan v094 by Alcaro. Restores HLE for coprocessor chips removed\nin v094, adds firmware_appended support and SuperFX overclocking.\nThree profiles: accuracy, balanced, performance (PPU differs, not firmware).\nCore option bsnes_chip_hle (default LLE, requires bsnes_violate_accuracy)\ncontrols HLE/LLE at runtime. ref: target-libretro/libretro.cpp:428-442\n\nFirmware loaded from system_dir via file::exists + mmapstream.\nNo hash or size validation on any firmware file.\nref: target-libretro/libretro.cpp:242-264\n\nfirmware_appended: firmware can be appended to end of ROM file.\nref: ananke/heuristics/super-famicom.hpp:83\n\nSPC700 IPL ROM (64 bytes) is embedded in the binary.\nref: target-libretro/libretro.cpp:39\n\nUpstream higan v094 by byuu (2014, site defunct). Mercury preserves v094\ncode with HLE additions documented in changes.diff at repo root.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/bsnes-mercury",
        "source_commit": "d83bf7ab607e09131731b3a81825f986f91c1f84",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://byuu.org/higan"
      }
    },
    {
      "id": "c64-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "c64-emu",
          "C64.emu",
          "C64-EMU"
        ],
        "display_name": "Commodore - C64 (C64.emu)",
        "emulator": "C64.emu",
        "files": [
          {
            "description": "C64 kernal Rev 3, default kernal and default model",
            "name": "kernal-901227-03.bin",
            "path": "C64/kernal-901227-03.bin",
            "required": true,
            "sha1": "1d503e56df85a62fee696e7618dc5b4e781df1bb",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:52,93 (name, hash), C64.emu/src/vice/c64/c64-resources.c:378,245, C64.emu/src/vice/c64/c64rom.c:226",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "C64 kernal Rev 2, C64 old PAL model",
            "name": "kernal-901227-02.bin",
            "path": "C64/kernal-901227-02.bin",
            "required": false,
            "sha1": "0e2e4ee3f2d41f00bed72f9ab588b83e306fdb13",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:51,92, C64.emu/src/vice/c64/c64model.c:113-116, C64.emu/src/vice/c64/c64-resources.c:244",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "C64 kernal Rev 1, C64 old NTSC model",
            "name": "kernal-901227-01.bin",
            "path": "C64/kernal-901227-01.bin",
            "required": false,
            "sha1": "87cc04d61fc748b82df09856847bb5c2754a2033",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:50,91, C64.emu/src/vice/c64/c64model.c:128-131, C64.emu/src/vice/c64/c64-resources.c:243",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "SX-64 kernal, C64 SX PAL and NTSC models",
            "name": "kernal-251104-04.bin",
            "path": "C64/kernal-251104-04.bin",
            "required": false,
            "sha1": "aa136e91ecf3c5ac64f696b3dbcbfc5ba0871c98",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:54,95, C64.emu/src/vice/c64/c64model.c:138-146, C64.emu/src/vice/c64/c64-resources.c:247",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "Japanese C64 kernal",
            "name": "kernal-906145-02.bin",
            "path": "C64/kernal-906145-02.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "4ff0f11e80f4b57430d8f0c3799ed0f0e0f4565d",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:49,90, C64.emu/src/vice/c64/c64model.c:148-151, C64.emu/src/vice/c64/c64-resources.c:246",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "C64 GS kernal",
            "name": "kernal-390852-01.bin",
            "path": "C64/kernal-390852-01.bin",
            "required": false,
            "sha1": "3ad6cc1837c679a11f551ad1cf1a32dd84ace719",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:53,94, C64.emu/src/vice/c64/c64model.c:153-156, C64.emu/src/vice/c64/c64-resources.c:248",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "Educator 64 kernal, PET64 PAL and NTSC models",
            "name": "kernal-901246-01.bin",
            "path": "C64/kernal-901246-01.bin",
            "required": false,
            "sha1": "6c4fa9465f6091b174df27dfe679499df447503c",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:55,96, C64.emu/src/vice/c64/c64model.c:158-166, C64.emu/src/vice/c64/c64-resources.c:249",
            "system": "commodore-c64",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "C64 BASIC",
            "name": "basic-901226-01.bin",
            "path": "C64/basic-901226-01.bin",
            "required": true,
            "sha1": "79015323128650c742a3694c9429aa91f355905e",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:31,88, C64.emu/src/vice/c64/c64-resources.c:381, C64.emu/src/vice/c64/c64rom.c:279",
            "system": "commodore-c64",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C64 character generator",
            "name": "chargen-901225-01.bin",
            "path": "C64/chargen-901225-01.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:60, C64.emu/src/vice/c64/c64-resources.c:375, C64.emu/src/vice/c64/c64rom.c:295",
            "system": "commodore-c64",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Japanese C64 character generator",
            "name": "chargen-906143-02.bin",
            "path": "C64/chargen-906143-02.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/c64/c64rom.h:61, C64.emu/src/vice/c64/c64model.c:148-151,323",
            "system": "commodore-c64",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "C64 symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "C64/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704,1386-1392",
            "system": "commodore-c64"
          },
          {
            "category": "game_data",
            "description": "VIC-II default external palette",
            "name": "pepto-pal.vpl",
            "path": "C64/pepto-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/viciisc/vicii-resources.c:186, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-c64"
          },
          {
            "description": "SuperCPU64 firmware",
            "max_size": 524288,
            "min_size": 65536,
            "name": "scpu64",
            "path": "SCPU64/scpu64",
            "required": true,
            "source_ref": "C64.emu/src/vice/scpu64/scpu64-resources.c:234, C64.emu/src/vice/scpu64/scpu64rom.c:80, C64.emu/src/vice/scpu64/scpu64mem.h:39-40",
            "system": "commodore-c64-supercpu",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Character generator for the SuperCPU machine",
            "name": "chargen-901225-01.bin",
            "path": "SCPU64/chargen-901225-01.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/scpu64/scpu64-resources.c:231, C64.emu/src/vice/scpu64/scpu64rom.c:63, C64.emu/src/vice/scpu64/scpu64mem.h:38",
            "system": "commodore-c64-supercpu",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Japanese character generator, Japanese SuperCPU model",
            "name": "chargen-906143-02.bin",
            "path": "SCPU64/chargen-906143-02.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/scpu64/scpu64model.c:303, C64.emu/src/vice/c64/c64rom.h:61",
            "system": "commodore-c64-supercpu",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SuperCPU symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "SCPU64/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-c64-supercpu"
          },
          {
            "category": "game_data",
            "description": "VIC-II default external palette",
            "name": "pepto-pal.vpl",
            "path": "SCPU64/pepto-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/viciisc/vicii-resources.c:186, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-c64-supercpu"
          },
          {
            "description": "C64 kernal Rev 3 for the DTV machine",
            "name": "kernal-901227-03.bin",
            "path": "C64DTV/kernal-901227-03.bin",
            "required": true,
            "sha1": "1d503e56df85a62fee696e7618dc5b4e781df1bb",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64dtv/c64dtv-resources.c:154, C64.emu/src/vice/c64/c64rom.h:52,93, C64.emu/src/vice/c64/c64rom.c:226",
            "system": "commodore-c64dtv",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "description": "C64 BASIC for the DTV machine",
            "name": "basic-901226-01.bin",
            "path": "C64DTV/basic-901226-01.bin",
            "required": true,
            "sha1": "79015323128650c742a3694c9429aa91f355905e",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c64dtv/c64dtv-resources.c:157, C64.emu/src/vice/c64/c64rom.h:31,88, C64.emu/src/vice/c64/c64rom.c:279",
            "system": "commodore-c64dtv",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Character generator for the DTV machine",
            "name": "chargen-901225-01.bin",
            "path": "C64DTV/chargen-901225-01.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/c64dtv/c64dtv-resources.c:151, C64.emu/src/vice/c64/c64rom.c:295",
            "system": "commodore-c64dtv",
            "validation": [
              "size"
            ]
          },
          {
            "description": "DTV flash image, all six DTV model resources default to this name",
            "max_size": 2097152,
            "name": "dtvrom.bin",
            "note": "Read into the 2 MB flash. When the file is absent the emulator builds the flash from the loaded kernal, BASIC and chargen instead.",
            "path": "C64DTV/dtvrom.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/c64dtv/c64dtvflash.c:59-64,643-656,471,486-500",
            "system": "commodore-c64dtv",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "DTV symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "C64DTV/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-c64dtv"
          },
          {
            "category": "game_data",
            "description": "VIC-II default external palette on the DTV machine",
            "name": "spiff.vpl",
            "path": "C64DTV/spiff.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vicii/vicii-resources.c:167-168, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-c64dtv"
          },
          {
            "description": "C128 international kernal, editor and Z80 BIOS",
            "name": "kernal-318020-05.bin",
            "path": "C128/kernal-318020-05.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:93, C64.emu/src/vice/c128/c128-resources.c:658, C64.emu/src/vice/c128/c128rom.c:343,770",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 German kernal",
            "name": "kernal-315078-03.bin",
            "path": "C128/kernal-315078-03.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:95, C64.emu/src/vice/c128/c128-resources.c:662, C64.emu/src/vice/c128/c128rom.c:771",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Swiss kernal",
            "name": "kernal-325172-01.bin",
            "path": "C128/kernal-325172-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:94, C64.emu/src/vice/c128/c128-resources.c:660, C64.emu/src/vice/c128/c128rom.c:777",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Swedish kernal",
            "name": "kernal-318034-01.bin",
            "path": "C128/kernal-318034-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:100, C64.emu/src/vice/c128/c128-resources.c:672, C64.emu/src/vice/c128/c128rom.c:776",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Finnish kernal",
            "name": "kernalfi",
            "path": "C128/kernalfi",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:96, C64.emu/src/vice/c128/c128-resources.c:664, C64.emu/src/vice/c128/c128rom.c:772",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 French kernal",
            "name": "kernalfr",
            "path": "C128/kernalfr",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:97, C64.emu/src/vice/c128/c128-resources.c:666, C64.emu/src/vice/c128/c128rom.c:773",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Italian kernal",
            "name": "kernalit",
            "path": "C128/kernalit",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:98, C64.emu/src/vice/c128/c128-resources.c:668, C64.emu/src/vice/c128/c128rom.c:774",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Norwegian kernal",
            "name": "kernalno",
            "path": "C128/kernalno",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:99, C64.emu/src/vice/c128/c128-resources.c:670, C64.emu/src/vice/c128/c128rom.c:775",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 BASIC low half",
            "name": "basiclo-318018-04.bin",
            "path": "C128/basiclo-318018-04.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:103, C64.emu/src/vice/c128/c128-resources.c:650, C64.emu/src/vice/c128/c128rom.c:434,763",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 BASIC high half, holds the editor",
            "name": "basichi-318019-04.bin",
            "path": "C128/basichi-318019-04.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:104, C64.emu/src/vice/c128/c128-resources.c:652, C64.emu/src/vice/c128/c128rom.c:443,764",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 international character generator",
            "name": "chargen-390059-01.bin",
            "path": "C128/chargen-390059-01.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:82, C64.emu/src/vice/c128/c128-resources.c:634, C64.emu/src/vice/c128/c128rom.c:529,783",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 German character generator",
            "name": "chargen-315079-01.bin",
            "path": "C128/chargen-315079-01.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:85, C64.emu/src/vice/c128/c128-resources.c:638, C64.emu/src/vice/c128/c128rom.c:784",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Italian, French and Belgian character generator",
            "name": "chargen-325167-02.bin",
            "path": "C128/chargen-325167-02.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:87-88, C64.emu/src/vice/c128/c128-resources.c:642,644, C64.emu/src/vice/c128/c128rom.c:785,790",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Swedish and Finnish character generator",
            "name": "chargen-325181-01.bin",
            "path": "C128/chargen-325181-01.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:86,90, C64.emu/src/vice/c128/c128-resources.c:640,648, C64.emu/src/vice/c128/c128rom.c:786,789",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Swiss character generator",
            "name": "chargen-325173-01D.bin",
            "path": "C128/chargen-325173-01D.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:84, C64.emu/src/vice/c128/c128-resources.c:636, C64.emu/src/vice/c128/c128rom.c:787",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C128 Norwegian character generator",
            "name": "chargen-325078-02.bin",
            "path": "C128/chargen-325078-02.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:89, C64.emu/src/vice/c128/c128-resources.c:646, C64.emu/src/vice/c128/c128rom.c:788",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C64 mode kernal",
            "name": "kernal64-901227-03.bin",
            "path": "C128/kernal64-901227-03.bin",
            "required": true,
            "sha1": "1d503e56df85a62fee696e7618dc5b4e781df1bb",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:110, C64.emu/src/vice/c128/c128-resources.c:654, C64.emu/src/vice/c128/c128rom.c:672,796, C64.emu/src/vice/c64/c64rom.h:93",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C64 mode BASIC",
            "name": "basic64-901226-01.bin",
            "path": "C128/basic64-901226-01.bin",
            "required": true,
            "sha1": "79015323128650c742a3694c9429aa91f355905e",
            "size": 8192,
            "source_ref": "C64.emu/src/vice/c128/c128rom.h:107, C64.emu/src/vice/c128/c128-resources.c:656, C64.emu/src/vice/c128/c128rom.c:710,801, C64.emu/src/vice/c64/c64rom.h:88",
            "system": "commodore-c128",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "C128 symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "C128/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-c128"
          },
          {
            "category": "game_data",
            "description": "VIC-II default external palette",
            "name": "pepto-pal.vpl",
            "path": "C128/pepto-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-c128"
          },
          {
            "category": "game_data",
            "description": "VDC default external palette",
            "name": "vdc_deft.vpl",
            "path": "C128/vdc_deft.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vdc/vdc-resources.c:127, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-c128"
          },
          {
            "description": "VIC-20 PAL kernal, default kernal resource",
            "name": "kernal.901486-07.bin",
            "path": "VIC20/kernal.901486-07.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:53, C64.emu/src/vice/vic20/vic20-resources.c:183, C64.emu/src/vice/vic20/vic20rom.c:112",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-20 NTSC kernal, default model and VIC-21",
            "name": "kernal.901486-06.bin",
            "path": "VIC20/kernal.901486-06.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:52, C64.emu/src/vice/vic20/vic20model.c:58-59,140",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-1001 kernal",
            "name": "kernal.901486-02.bin",
            "path": "VIC20/kernal.901486-02.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:51, C64.emu/src/vice/vic20/vic20model.c:60,140",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-20 BASIC",
            "name": "basic-901486-01.bin",
            "path": "VIC20/basic-901486-01.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:43, C64.emu/src/vice/vic20/vic20-resources.c:185, C64.emu/src/vice/vic20/vic20rom.c:156",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-20 character generator",
            "name": "chargen-901460-03.bin",
            "path": "VIC20/chargen-901460-03.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:56, C64.emu/src/vice/vic20/vic20-resources.c:181, C64.emu/src/vice/vic20/vic20rom.c:175",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-1001 character generator",
            "name": "chargen-901460-02.bin",
            "path": "VIC20/chargen-901460-02.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/vic20/vic20rom.h:57, C64.emu/src/vice/vic20/vic20model.c:60,139",
            "system": "commodore-vic20",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "VIC-20 symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "VIC20/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-vic20"
          },
          {
            "category": "game_data",
            "description": "VIC default external palette",
            "name": "mike-pal.vpl",
            "path": "VIC20/mike-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vic20/vic-resources.c:90, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-vic20"
          },
          {
            "description": "Plus/4 NTSC kernal, default model",
            "name": "kernal-318005-05.bin",
            "path": "PLUS4/kernal-318005-05.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:37, C64.emu/src/vice/plus4/plus4model.c:67,69,153, C64.emu/src/vice/plus4/plus4rom.c:89",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Plus/4 PAL kernal, default kernal resource",
            "name": "kernal-318004-05.bin",
            "path": "PLUS4/kernal-318004-05.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:36, C64.emu/src/vice/plus4/plus4-resources.c:186, C64.emu/src/vice/plus4/plus4model.c:66,68",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C232 prototype kernal",
            "name": "kernal-318004-01.bin",
            "path": "PLUS4/kernal-318004-01.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:35, C64.emu/src/vice/plus4/plus4model.c:71,153",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "V364 prototype kernal",
            "name": "kernal-364.bin",
            "path": "PLUS4/kernal-364.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:38, C64.emu/src/vice/plus4/plus4model.c:70,153",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Plus/4 BASIC",
            "name": "basic-318006-01.bin",
            "path": "PLUS4/basic-318006-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:33, C64.emu/src/vice/plus4/plus4-resources.c:188, C64.emu/src/vice/plus4/plus4rom.c:111",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "3-plus-1 low function ROM, Plus/4 and V364 models",
            "name": "3plus1-317053-01.bin",
            "path": "PLUS4/3plus1-317053-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:40, C64.emu/src/vice/plus4/plus4-resources.c:190, C64.emu/src/vice/plus4/plus4memrom.c:146",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "3-plus-1 high function ROM, Plus/4 and V364 models",
            "name": "3plus1-317054-01.bin",
            "path": "PLUS4/3plus1-317054-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:41, C64.emu/src/vice/plus4/plus4-resources.c:192, C64.emu/src/vice/plus4/plus4memrom.c:166",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "description": "V364 speech ROM",
            "name": "c2lo-364.bin",
            "path": "PLUS4/c2lo-364.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/plus4/plus4rom.h:43, C64.emu/src/vice/plus4/plus4model.c:70,161, C64.emu/src/vice/plus4/plus4memrom.c:187",
            "system": "commodore-plus4",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Plus/4 symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "PLUS4/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-plus4"
          },
          {
            "category": "game_data",
            "description": "TED default external palette",
            "name": "yape-pal.vpl",
            "path": "PLUS4/yape-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/plus4/ted-resources.c:90, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-plus4"
          },
          {
            "description": "BASIC 4 kernal, default model PET 8032",
            "name": "kernal-4.901465-22.bin",
            "path": "PET/kernal-4.901465-22.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:53, C64.emu/src/vice/pet/pet-resources.c:406, C64.emu/src/vice/pet/petrom.c:581",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 2 kernal, PET 3008 to 3032B models",
            "name": "kernal-2.901465-03.bin",
            "path": "PET/kernal-2.901465-03.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:52, C64.emu/src/vice/pet/petmodel.c:108,371",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 1 kernal, PET 2001-8N model",
            "name": "kernal-1.901439-04-07.bin",
            "path": "PET/kernal-1.901439-04-07.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:51, C64.emu/src/vice/pet/petmodel.c:89,371",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 4, default model PET 8032",
            "max_size": 12288,
            "min_size": 8192,
            "name": "basic-4.901465-23-20-21.bin",
            "path": "PET/basic-4.901465-23-20-21.bin",
            "required": true,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:57, C64.emu/src/vice/pet/pet-resources.c:410, C64.emu/src/vice/pet/petrom.c:534",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 2, PET 3008 to 3032B models",
            "max_size": 12288,
            "min_size": 8192,
            "name": "basic-2.901465-01-02.bin",
            "path": "PET/basic-2.901465-01-02.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:56, C64.emu/src/vice/pet/petmodel.c:110,372",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 1, PET 2001-8N model",
            "max_size": 12288,
            "min_size": 8192,
            "name": "basic-1.901439-09-05-02-06.bin",
            "path": "PET/basic-1.901439-09-05-02-06.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:55, C64.emu/src/vice/pet/petmodel.c:91,372",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 4 business 80 column editor, default model PET 8032",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-4-80-b-50Hz.901474-04_.bin",
            "path": "PET/edit-4-80-b-50Hz.901474-04_.bin",
            "required": true,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:63, C64.emu/src/vice/pet/pet-resources.c:408, C64.emu/src/vice/pet/petrom.c:612",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 4 graphics 40 column editor, PET 4016 and 4032 models",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-4-40-n-50Hz.901498-01.bin",
            "path": "PET/edit-4-40-n-50Hz.901498-01.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:62, C64.emu/src/vice/pet/petmodel.c:373",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 4 business 40 column editor, PET 4032B model",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-4-40-b-50Hz.ts.bin",
            "path": "PET/edit-4-40-b-50Hz.ts.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:65, C64.emu/src/vice/pet/petmodel.c:373",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 2 graphics 40 column editor, PET 3008 to 3032 models",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-2-n.901447-24.bin",
            "path": "PET/edit-2-n.901447-24.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:60, C64.emu/src/vice/pet/petmodel.c:109,373",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 2 business editor, PET 3032B model",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-2-b.901474-01.bin",
            "path": "PET/edit-2-b.901474-01.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:61, C64.emu/src/vice/pet/petmodel.c:373",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "BASIC 1 graphics 40 column editor, PET 2001-8N model",
            "max_size": 4096,
            "min_size": 2048,
            "name": "edit-1-n.901439-03.bin",
            "path": "PET/edit-1-n.901439-03.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:59, C64.emu/src/vice/pet/petmodel.c:90,373",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Second generation character generator, default model PET 8032",
            "max_size": 4096,
            "min_size": 2048,
            "name": "characters-2.901447-10.bin",
            "path": "PET/characters-2.901447-10.bin",
            "required": true,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:47, C64.emu/src/vice/pet/pet-resources.c:404, C64.emu/src/vice/pet/petrom.c:506",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "First generation character generator, PET 2001-8N model",
            "max_size": 4096,
            "min_size": 2048,
            "name": "characters-1.901447-08.bin",
            "path": "PET/characters-1.901447-08.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:46, C64.emu/src/vice/pet/petmodel.c:88,370",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET character generator",
            "max_size": 4096,
            "min_size": 2048,
            "name": "characters.901640-01.bin",
            "path": "PET/characters.901640-01.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:48, C64.emu/src/vice/pet/petmodel.c:370",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at a000",
            "name": "waterloo-a000.901898-01.bin",
            "path": "PET/waterloo-a000.901898-01.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:75, C64.emu/src/vice/pet/petmodel.c:305, C64.emu/src/vice/pet/petrom.c:747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at b000",
            "name": "waterloo-b000.901898-02.bin",
            "path": "PET/waterloo-b000.901898-02.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:76, C64.emu/src/vice/pet/petmodel.c:306, C64.emu/src/vice/pet/petrom.c:747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at c000",
            "name": "waterloo-c000.901898-03.bin",
            "path": "PET/waterloo-c000.901898-03.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:77, C64.emu/src/vice/pet/petmodel.c:307, C64.emu/src/vice/pet/petrom.c:747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at d000",
            "name": "waterloo-d000.901898-04.bin",
            "path": "PET/waterloo-d000.901898-04.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:78, C64.emu/src/vice/pet/petmodel.c:308, C64.emu/src/vice/pet/petrom.c:747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at e000, the one slot the loader accepts at 2 KB",
            "max_size": 8192,
            "min_size": 2048,
            "name": "waterloo-e000.901897-01.bin",
            "path": "PET/waterloo-e000.901897-01.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:79, C64.emu/src/vice/pet/petmodel.c:309, C64.emu/src/vice/pet/petrom.c:745,747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SuperPET 6809 ROM at f000",
            "name": "waterloo-f000.901898-05.bin",
            "path": "PET/waterloo-f000.901898-05.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/pet/petrom.h:80, C64.emu/src/vice/pet/petmodel.c:310, C64.emu/src/vice/pet/petrom.c:747",
            "system": "commodore-pet",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "PET symbolic keymap, US layout and the fallback for every keyboard type",
            "name": "gtk3_sym.vkm",
            "path": "PET/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263-1269,1386-1392, C64.emu/src/vice/pet/pet.c:169-176",
            "system": "commodore-pet"
          },
          {
            "category": "game_data",
            "description": "CRTC default external palette",
            "name": "green.vpl",
            "path": "PET/green.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/crtc/crtc-resources.c:102, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-pet"
          },
          {
            "description": "CBM-II 6x0 and 7x0 kernal, default model CBM 610",
            "name": "kernal-901244-04a.bin",
            "path": "CBM-II/kernal-901244-04a.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:45, C64.emu/src/vice/cbm2/cbm2model.c:66-74,160, C64.emu/src/vice/cbm2/cbm2rom.c:155",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM 510 kernal, default model of the cbm5x0 plugin",
            "name": "kernal-901234-02.bin",
            "path": "CBM-II/kernal-901234-02.bin",
            "required": true,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:46, C64.emu/src/vice/cbm2/cbm2model.c:64-65,160, C64.emu/src/vice/cbm2/cbm5x0rom.c:125",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM-II 128 KB BASIC, CBM 610 and 710 models",
            "name": "basic-901242+3-04a.bin",
            "path": "CBM-II/basic-901242+3-04a.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:41, C64.emu/src/vice/cbm2/cbm2model.c:66-67,72,161, C64.emu/src/vice/cbm2/cbm2rom.c:171",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM-II 256 KB BASIC, CBM 620, 620+, 720 and 720+ models",
            "name": "basic-901240+1-03.bin",
            "path": "CBM-II/basic-901240+1-03.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:42, C64.emu/src/vice/cbm2/cbm2model.c:68-71,73-74,161",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM 510 BASIC",
            "name": "basic-901235+6-02.bin",
            "path": "CBM-II/basic-901235+6-02.bin",
            "required": true,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:43, C64.emu/src/vice/cbm2/cbm2model.c:64-65,161, C64.emu/src/vice/cbm2/cbm5x0rom.c:141",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM-II 600 series character generator, default model CBM 610",
            "name": "chargen-901237-01.bin",
            "path": "CBM-II/chargen-901237-01.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:38, C64.emu/src/vice/cbm2/cbm2model.c:66-71,162, C64.emu/src/vice/cbm2/cbm2rom.c:100-101",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM-II 700 series character generator",
            "name": "chargen-901232-01.bin",
            "path": "CBM-II/chargen-901232-01.bin",
            "required": false,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:39, C64.emu/src/vice/cbm2/cbm2model.c:72-74,162",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CBM 510 character generator",
            "name": "chargen-901225-01.bin",
            "path": "CBM-II/chargen-901225-01.bin",
            "required": true,
            "size": 4096,
            "source_ref": "C64.emu/src/vice/cbm2/cbm2rom.h:37, C64.emu/src/vice/cbm2/cbm2model.c:64-65,162, C64.emu/src/vice/cbm2/cbm5x0rom.c:83",
            "system": "commodore-cbm-ii",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "CBM-II symbolic keymap, US layout",
            "name": "gtk3_sym.vkm",
            "path": "CBM-II/gtk3_sym.vkm",
            "required": false,
            "source_ref": "C64.emu/src/config/kbd.h:7, C64.emu/src/vice/keymap.c:1263,704",
            "system": "commodore-cbm-ii"
          },
          {
            "category": "game_data",
            "description": "CRTC default external palette, 6x0 and 7x0 models",
            "name": "green.vpl",
            "path": "CBM-II/green.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/crtc/crtc-resources.c:102, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-cbm-ii"
          },
          {
            "category": "game_data",
            "description": "VIC-II default external palette, 5x0 models",
            "name": "pepto-pal.vpl",
            "path": "CBM-II/pepto-pal.vpl",
            "required": false,
            "source_ref": "C64.emu/src/vice/vicii/vicii-resources.c:170, C64.emu/src/vice/video/video-resources.c:916-923",
            "system": "commodore-cbm-ii"
          },
          {
            "description": "1541-II DOS, default unit 8 on C64, SuperCPU and DTV",
            "max_size": 32768,
            "min_size": 16384,
            "name": "dos1541ii-251968-03.bin",
            "path": "DRIVES/dos1541ii-251968-03.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:40-41,90, C64.emu/src/vice/drive/iec/iecrom.c:107,182, C64.emu/src/vice/c64/c64drive.c:43",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1541 DOS",
            "max_size": 32768,
            "min_size": 16384,
            "name": "dos1541-325302-01+901229-05.bin",
            "path": "DRIVES/dos1541-325302-01+901229-05.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:38-39,89, C64.emu/src/vice/drive/iec/iecrom.c:100,172",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1540 DOS, default unit 8 on VIC-20",
            "max_size": 32768,
            "min_size": 16384,
            "name": "dos1540-325302+3-01.bin",
            "path": "DRIVES/dos1540-325302+3-01.bin",
            "required": false,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:36-37,88, C64.emu/src/vice/drive/iec/iecrom.c:93,162, C64.emu/src/vice/vic20/vic20drive.c:44",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1570 DOS",
            "name": "dos1570-315090-01.bin",
            "path": "DRIVES/dos1570-315090-01.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:43,93, C64.emu/src/vice/drive/iec/iecrom.c:115,193",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1571 DOS",
            "name": "dos1571-310654-05.bin",
            "path": "DRIVES/dos1571-310654-05.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:44,94, C64.emu/src/vice/drive/iec/iecrom.c:121,198",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1571CR DOS, default unit 8 on C128",
            "name": "dos1571cr-318047-01.bin",
            "path": "DRIVES/dos1571cr-318047-01.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:45,95, C64.emu/src/vice/drive/iec128dcr/iec128dcrrom.c:51,68, C64.emu/src/vice/c128/c128drive.c:56",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1581 DOS",
            "name": "dos1581-318045-02.bin",
            "path": "DRIVES/dos1581-318045-02.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:46,96, C64.emu/src/vice/drive/iec/iecrom.c:127,203",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1551 DOS, default unit 8 on Plus/4",
            "name": "dos1551-318008-01.bin",
            "path": "DRIVES/dos1551-318008-01.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:42,92, C64.emu/src/vice/drive/tcbm/tcbmrom.c:50,66, C64.emu/src/vice/plus4/plus4drive.c:46",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "dos2000"
            ],
            "description": "CMD FD-2000 DOS",
            "name": "dos2000-cs-33cc6f.bin",
            "path": "DRIVES/dos2000-cs-33cc6f.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:47,98, C64.emu/src/vice/drive/iec/iecrom.c:133,208",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "dos4000"
            ],
            "description": "CMD FD-4000 DOS",
            "name": "dos4000-fd-350022.bin",
            "path": "DRIVES/dos4000-fd-350022.bin",
            "required": false,
            "size": 32768,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:48,99, C64.emu/src/vice/drive/iec/iecrom.c:139,213",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CMD HD boot ROM",
            "name": "bootromCMDHD-v2-80.bin",
            "note": "The MAME dump cmd_hd_bootrom_v280.bin reads the chip over 32 KB and its two halves are identical; the image here is the first half, the 16 KB the loader asks for.",
            "path": "DRIVES/bootromCMDHD-v2-80.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:49,100, C64.emu/src/vice/drive/iec/iecrom.c:145,218",
            "validation": [
              "size"
            ]
          },
          {
            "description": "2031 DOS, default unit 8 on PET and CBM-II",
            "name": "dos2031-901484-03+05.bin",
            "path": "DRIVES/dos2031-901484-03+05.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:50,73, C64.emu/src/vice/drive/ieee/ieeerom.c:56,107, C64.emu/src/vice/pet/petdrive.c:42",
            "validation": [
              "size"
            ]
          },
          {
            "description": "2040 DOS",
            "name": "dos2040-901468-06+07.bin",
            "path": "DRIVES/dos2040-901468-06+07.bin",
            "required": false,
            "size": 8192,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:53,76, C64.emu/src/vice/drive/ieee/ieeerom.c:63,115",
            "validation": [
              "size"
            ]
          },
          {
            "description": "3040 DOS",
            "name": "dos3040-901468-11-13.bin",
            "path": "DRIVES/dos3040-901468-11-13.bin",
            "required": false,
            "size": 12288,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:54,79, C64.emu/src/vice/drive/ieee/ieeerom.c:70,123",
            "validation": [
              "size"
            ]
          },
          {
            "description": "4040 DOS",
            "name": "dos4040-901468-14-16.bin",
            "path": "DRIVES/dos4040-901468-14-16.bin",
            "required": false,
            "size": 12288,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:55,82, C64.emu/src/vice/drive/ieee/ieeerom.c:77,131",
            "validation": [
              "size"
            ]
          },
          {
            "description": "1001, 8050 and 8250 DOS",
            "name": "dos1001-901887+8-01.bin",
            "path": "DRIVES/dos1001-901887+8-01.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:51,70, C64.emu/src/vice/drive/ieee/ieeerom.c:84,141",
            "validation": [
              "size"
            ]
          },
          {
            "description": "D9090 and D9060 DOS",
            "name": "dos9000-300516+7-revC.bin",
            "path": "DRIVES/dos9000-300516+7-revC.bin",
            "required": false,
            "size": 16384,
            "source_ref": "C64.emu/src/vice/drive/driverom.h:52,85, C64.emu/src/vice/drive/ieee/ieeerom.c:91,149",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Android and Linux member of the EX Emulator series by Robert Broglia,\npublished as com.explusalpha.C64Emu (C64.emu/metadata/conf.mk:2,6,7) and\nreached by ES-DE through its C64-EMU find rule. VICE 3.10 is vendored under\nC64.emu/src/vice (C64.emu/src/config/vice-config.h:699,795) and driven by the\napp's own sysfile, video, sound and zfile layers.\n\nTen machines are built as separate shared libraries\n(C64.emu/src/CMakeLists.txt:535-683): c64, c64sc, scpu64, c64dtv, c128, vic,\npet, plus4, cbm2, cbm5x0. Each opens its files under the VICE machine\ndirectory named by its own machine_name (c64/c64.c:179, c128/c128.c:240,\nvic20/vic20.c:144, plus4/plus4.c:131, pet/pet.c:128, cbm2/cbm2.c:131,\ncbm2/cbm5x0.c:122, scpu64/scpu64.c:157, c64dtv/c64dtv.c:129), so c64 and c64sc\nshare C64/ and cbm2 and cbm5x0 share CBM-II/. Drive ROMs live in DRIVES/\n(drive/driverom.c:104,174).\n\nNothing is embedded. The app implements sysfile_open, sysfile_locate and\nsysfile_load itself (C64.emu/src/main/sysfile.cc:218-355) over a user-set\npath that may be a directory or a ZIP archive, and that path is rejected\nunless it carries a DRIVES folder (C64.emu/src/main/sysfile.cc:140-151). On\nLinux two fallbacks follow it, ~/.local/share/C64.emu and\n/usr/share/games/vice (C64.emu/src/main/Main.cc:91-95). A last fallback reads\nthe application bundle (C64.emu/src/main/sysfile.cc:107-119,252-259), which\nsupplies only the eight keymaps below (C64.emu/res/android/assets symlinks\nC64.emu/res/vice, and each machine directory there holds one file).\n\nMissing ROMs stop the app rather than degrading it: initC64 throws when the\npath is unset, and again with the name of the first file that failed once\nplugin.init_main() returns -1 (C64.emu/src/main/Main.cc:301-311), which is\nwhat machine_init does when mem_load cannot find a ROM.\n\nAll fourteen C64 models are offered (C64.emu/src/main/VicePlugin.cc:66-79), so\nevery kernal revision and both chargens are reachable. The MAX Machine model\nloads nothing: c64rom.c:222-224 matches the kernal-none.bin name and zeroes\nthe ROM area instead of calling sysfile_load.\n\nC128 is the one machine that needs its whole language set present. mem_load\nruns c128rom_check_res_file over both BASIC halves, all eight kernal\nresources, all eight chargen resources, Kernal64 and Basic64, and returns -1\nif any one of them cannot be located (c128/c128rom.c:762-806). Only the\nselected variant is then read. MachineType stays at C128_MACHINE_INT\n(c128/c128-resources.c:684) because no reachable code writes it, so the\nDanish, Norwegian and Swedish kernal64 variants of c128rom.h:111-113 are never\nnamed.\n\nDrive ROMs are optional in the strict sense: iec_drive_rom_load,\nieee_drive_rom_load, tcbm_drive_rom_load and iec128dcr_drive_rom_load return\nvoid, and driverom_load logs the miss and disables the units of that type\n(drive/driverom.c:186-196,131-144). Default unit 8 is a 1541-II on C64, SCPU64\nand DTV (c64/c64drive.c:43), a 1571CR on C128 (c128/c128drive.c:56), a 1540 on\nVIC-20 (vic20/vic20drive.c:44), a 1551 on Plus/4 (plus4/plus4drive.c:46) and a\n2031 on PET and CBM-II (pet/petdrive.c:42, cbm2/cbm2drive.c:42).\n\nSizes come from the min and max arguments of each sysfile_load call. The\nloader accepts a file two bytes over its maximum by dropping the leading load\naddress, pads a short file to the top of the buffer, and truncates anything\nlonger with a warning (C64.emu/src/main/sysfile.cc:30-71).\n\nSHA-1s are those hardcoded in c64/c64rom.h:88-96. c64rom.c:120-131 hashes the\nloaded kernal and matches that table to identify the revision; an unmatched\nimage is reported and accepted. VICE distributes C128/kernal64-901227-03.bin\nand C128/basic64-901226-01.bin with the same bytes as the C64 Rev 3 kernal and\nBASIC, so those two entries carry the same hashes.\n\nPalettes are read only after the user enables an external palette: the\n${CHIP}ExternalPalette resource is registered with factory value 0 and\n${CHIP}PaletteFile with the chip's default name\n(video/video-resources.c:393-398,916-923). The app lists every .vpl in the\nmachine directory and sets both resources\n(C64.emu/src/main/EmuMenuViews.cc:186,1058,1074-1083,\nC64.emu/src/main/options.cc:38-51). Only the code-named default of each chip\nis listed here; palette_load appends the .vpl extension itself\n(palette.c:228-248).\n\nKeymaps are named from KBD_PORT_PREFIX, which the app sets to gtk3\n(C64.emu/src/config/kbd.h:7). keymap_init runs inside init_main and the lookup\nfalls back to <prefix>_sym.vkm (keymap.c:1249-1270,1386-1392), the file the\napp bundles for each machine directory. Host-layout and keyboard-type variants\nextend the name and are not enumerated here.\n\nFour subsystems are compiled but cannot reach their files. Printer ROMs and\nthe PRINTER/ palettes load from drv_mps803_open and drv_nl10_open, which\nrequire Printer4, Printer5 or Printer6 to leave PRINTER_DEVICE_NONE\n(printerdrv/interface-serial.c:145-149); the app writes no printer resource,\nand neither main.c nor initcmdline.c is compiled, so the resource file and the\ncommand line that would set one do not exist. Romset .vrs files, the monitor\ncommand file and joystick .vjm maps have no default name at all\n(joyport/joystick.c:2212) and no menu that supplies one. vice/arch is outside\nthe build, so the CBM font, icon and hotkey lookups of archdep_cbmfont.c,\narchdep_icon_path.c and hotkeys/parser.c are never linked.\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "commodore-c64",
          "commodore-c64-supercpu",
          "commodore-c64dtv",
          "commodore-c128",
          "commodore-vic20",
          "commodore-plus4",
          "commodore-pet",
          "commodore-cbm-ii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/VICE-Team/svn-mirror"
      }
    },
    {
      "id": "cannonball",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.0",
        "cores": [
          "cannonball"
        ],
        "display_name": "Cannonball",
        "emulator": "Cannonball",
        "files": [
          {
            "aliases": [
              "epr-10381b.132"
            ],
            "category": "game_data",
            "crc32": "be8c412b",
            "name": "epr-10381b.132",
            "note": "Master 68K, high byte, upper bank",
            "path": "cannonball/epr-10381b.132",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:39",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "10a2014a",
            "name": "epr-10383b.117",
            "note": "Master 68K, low byte, upper bank",
            "path": "cannonball/epr-10383b.117",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:40",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "1f6cadad",
            "name": "epr-10380b.133",
            "note": "Master 68K, high byte, lower bank",
            "path": "cannonball/epr-10380b.133",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:39",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "c4c3fa1a",
            "name": "epr-10382b.118",
            "note": "Master 68K, low byte, lower bank",
            "path": "cannonball/epr-10382b.118",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:40",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "e28a5baf",
            "name": "epr-10327a.76",
            "note": "Slave 68K, high byte, lower bank",
            "path": "cannonball/epr-10327a.76",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:44",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "da131c81",
            "name": "epr-10329a.58",
            "note": "Slave 68K, low byte, lower bank",
            "path": "cannonball/epr-10329a.58",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:45",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "d5ec5e5d",
            "name": "epr-10328a.75",
            "note": "Slave 68K, high byte, upper bank",
            "path": "cannonball/epr-10328a.75",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:46",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "ba9ec82a",
            "name": "epr-10330a.57",
            "note": "Slave 68K, low byte, upper bank",
            "path": "cannonball/epr-10330a.57",
            "required": true,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:47",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "95344b04",
            "name": "opr-10268.99",
            "note": "Tile ROM bank 0",
            "path": "cannonball/opr-10268.99",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:51",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "776ba1eb",
            "name": "opr-10232.102",
            "note": "Tile ROM bank 1",
            "path": "cannonball/opr-10232.102",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:52",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "a85bb823",
            "name": "opr-10267.100",
            "note": "Tile ROM bank 2",
            "path": "cannonball/opr-10267.100",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:53",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "8908bcbf",
            "name": "opr-10231.103",
            "note": "Tile ROM bank 3",
            "path": "cannonball/opr-10231.103",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:54",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "9f6f1a74",
            "name": "opr-10266.101",
            "note": "Tile ROM bank 4",
            "path": "cannonball/opr-10266.101",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:55",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "686f5e50",
            "name": "opr-10230.104",
            "note": "Tile ROM bank 5",
            "path": "cannonball/opr-10230.104",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:56",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "22794426",
            "name": "opr-10185.11",
            "note": "Road ROM, layer 1",
            "path": "cannonball/opr-10185.11",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:60",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "22794426",
            "name": "opr-10186.47",
            "note": "Road ROM, layer 2 (identical to opr-10185.11)",
            "path": "cannonball/opr-10186.47",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:61",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "7cc86208",
            "name": "mpr-10371.9",
            "note": "Sprite ROM, bank 0 byte 0",
            "path": "cannonball/mpr-10371.9",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:65",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "b0d26ac9",
            "name": "mpr-10373.10",
            "note": "Sprite ROM, bank 0 byte 1",
            "path": "cannonball/mpr-10373.10",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:66",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "59b60bd7",
            "name": "mpr-10375.11",
            "note": "Sprite ROM, bank 0 byte 2",
            "path": "cannonball/mpr-10375.11",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:67",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "17a1b04a",
            "name": "mpr-10377.12",
            "note": "Sprite ROM, bank 0 byte 3",
            "path": "cannonball/mpr-10377.12",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:68",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "b557078c",
            "name": "mpr-10372.13",
            "note": "Sprite ROM, bank 1 byte 0",
            "path": "cannonball/mpr-10372.13",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:69",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "8051e517",
            "name": "mpr-10374.14",
            "note": "Sprite ROM, bank 1 byte 1",
            "path": "cannonball/mpr-10374.14",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:70",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "f3b8f318",
            "name": "mpr-10376.15",
            "note": "Sprite ROM, bank 1 byte 2",
            "path": "cannonball/mpr-10376.15",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:71",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "a1062984",
            "name": "mpr-10378.16",
            "note": "Sprite ROM, bank 1 byte 3",
            "path": "cannonball/mpr-10378.16",
            "required": true,
            "size": 131072,
            "source_ref": "src/main/roms.cpp:72",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "a10abaa9",
            "name": "epr-10187.88",
            "note": "Z80 sound program",
            "path": "cannonball/epr-10187.88",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:77",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "bcd10dde",
            "name": "opr-10193.66",
            "note": "PCM sample bank 0",
            "path": "cannonball/opr-10193.66",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:81",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "770f1270",
            "name": "opr-10192.67",
            "note": "PCM sample bank 1",
            "path": "cannonball/opr-10192.67",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:81",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "20a284ab",
            "name": "opr-10191.68",
            "note": "PCM sample bank 2",
            "path": "cannonball/opr-10191.68",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:83",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "7cab70e2",
            "name": "opr-10190.69",
            "note": "PCM sample bank 3",
            "path": "cannonball/opr-10190.69",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:83",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "01366b54",
            "name": "opr-10189.70",
            "note": "PCM sample bank 4",
            "path": "cannonball/opr-10189.70",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:85",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "bad30ad9",
            "name": "opr-10188.71",
            "note": "PCM sample bank 5",
            "path": "cannonball/opr-10188.71",
            "required": true,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:85",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "37598616",
            "name": "opr-10188.71f",
            "note": "PCM sample bank 5, fixed version (replaces opr-10188.71)",
            "path": "cannonball/opr-10188.71f",
            "required": false,
            "size": 32768,
            "source_ref": "src/main/roms.cpp:123",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "e339e87a",
            "name": "epr-10380.133",
            "note": "Master 68K Japan, high byte, lower bank",
            "path": "cannonball/epr-10380.133",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:106",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "65248dd5",
            "name": "epr-10382.118",
            "note": "Master 68K Japan, low byte, lower bank",
            "path": "cannonball/epr-10382.118",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:107",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "be8c412b",
            "name": "epr-10381.132",
            "note": "Master 68K Japan, high byte, upper bank",
            "path": "cannonball/epr-10381.132",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:106",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "dcc586e7",
            "name": "epr-10383.117",
            "note": "Master 68K Japan, low byte, upper bank",
            "path": "cannonball/epr-10383.117",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:107",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "da99d855",
            "name": "epr-10327.76",
            "note": "Slave 68K Japan, high byte, lower bank",
            "path": "cannonball/epr-10327.76",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:112",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "fe0fa5e2",
            "name": "epr-10329.58",
            "note": "Slave 68K Japan, low byte, lower bank",
            "path": "cannonball/epr-10329.58",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:113",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "3c0e9a7f",
            "name": "epr-10328.75",
            "note": "Slave 68K Japan, high byte, upper bank",
            "path": "cannonball/epr-10328.75",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:112",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "crc32": "59786e99",
            "name": "epr-10330.57",
            "note": "Slave 68K Japan, low byte, upper bank",
            "path": "cannonball/epr-10330.57",
            "required": false,
            "size": 65536,
            "source_ref": "src/main/roms.cpp:113",
            "system": "sega-outrun",
            "validation": [
              "crc32"
            ]
          }
        ],
        "notes": "Cannonball is an enhanced OutRun engine that runs the original Sega OutRun\narcade ROM set (Rev B). It is not a traditional emulator but a source port\nthat loads the original ROM data for graphics, sound, and gameplay logic.\n\nThe core looks for ROM files in one of two locations\n(src/main/libretro/main.c:1009-1020):\n  1. The directory containing a loaded .game content file\n  2. {system_dir}/cannonball/\n\nROM loading is in src/main/roms.c. Each file is located by CRC32 first,\ncanonical filename as fallback (src/main/romloader.c:168-201). Files are\nloaded as raw ROM chips, not\ninside ZIP archives.\n\nThe Rev B ROM set is always required. Japanese ROM variants are loaded on\ndemand when the \"Japanese Tracks\" core option is enabled.\n\nThe widescreen tilemap patches are compiled into the binary\n(tilemap_data.h) and loaded from memory (src/main/engine/omusic.c:50-67).\n\nThe fixed PCM sample variant (opr-10188.71f) replaces opr-10188.71 when the\n\"Fix Broken Samples\" core option is enabled.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/cannonball",
        "source_commit": "0d83575d920ea4c0a280847a19d7802f673e6a68",
        "systems": [
          "sega-outrun"
        ],
        "type": "libretro",
        "upstream": "https://github.com/djyt/cannonball"
      }
    },
    {
      "id": "cap32",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v4.2.0",
        "cores": [
          "cap32",
          "caprice32"
        ],
        "display_name": "Amstrad - CPC/GX4000 (Caprice32)",
        "emulator": "Caprice32",
        "files": [
          {
            "mode": "standalone",
            "name": "cpc464.rom",
            "note": "CPC 464 OS + BASIC 1.0",
            "required": true,
            "size": 32768,
            "source_ref": "src/cap32.cpp:217, rom/cpc464.rom",
            "system": "amstrad-cpc"
          },
          {
            "mode": "standalone",
            "name": "cpc664.rom",
            "note": "CPC 664 OS + BASIC 1.0",
            "required": false,
            "size": 32768,
            "source_ref": "caprice32/rom/cpc664.rom",
            "system": "amstrad-cpc"
          },
          {
            "mode": "standalone",
            "name": "cpc6128.rom",
            "note": "CPC 6128 OS + BASIC 1.1",
            "required": false,
            "size": 32768,
            "source_ref": "caprice32/rom/cpc6128.rom",
            "system": "amstrad-cpc"
          },
          {
            "mode": "standalone",
            "name": "amsdos.rom",
            "note": "AMSDOS disc ROM (sideways slot 7)",
            "required": false,
            "size": 16384,
            "source_ref": "src/cap32.cpp:1238",
            "system": "amstrad-cpc"
          },
          {
            "mode": "standalone",
            "name": "system.cpr",
            "note": "CPC+ system cartridge",
            "required": false,
            "size": 131156,
            "source_ref": "caprice32/rom/system.cpr",
            "system": "amstrad-cpc"
          },
          {
            "mode": "standalone",
            "name": "MF2.rom",
            "note": "Multiface 2 ROM",
            "required": false,
            "size": 8192,
            "source_ref": "caprice32/rom/MF2.rom, src/cap32.cpp:1316-1335",
            "system": "amstrad-cpc"
          }
        ],
        "notes": "Caprice32 is an Amstrad CPC emulator ported to libretro. Supports CPC 464,\nCPC 664, CPC 6128, and CPC+ (Plus) models.\n\nAll system ROMs are compiled directly into the core binary as C header\narrays in cap32/rom/*.h. No external BIOS files are required.\n\nEmbedded ROMs (cap32/cap32.c:342-345):\n  - cap32/rom/464.h:    OS_BASIC10[32768] - CPC 464 OS + BASIC 1.0\n  - cap32/rom/6128.h:   OS_BASIC11[32768] - CPC 6128 OS + BASIC 1.1\n  - cap32/rom/amsdos.h: AMSDOS[16384]     - AMSDOS disk controller ROM\n  - cap32/rom/6128p.h:  OS_6128P          - CPC+ system cartridge ROM\n  - cap32/rom/cpm.h:    cpmROM            - CP/M boot snapshot (128KB)\n\nROM selection in emulator_select_ROM() (cap32/cap32.c:1072-1100):\n  - CPC 464:  OS_BASIC10 (32KB)\n  - CPC 664:  OS_BASIC10 (32KB) + AMSDOS in slot 7\n  - CPC 6128: OS_BASIC11 (32KB) + AMSDOS in slot 7\n  - CPC+:     OS_6128P loaded as system cartridge via cpr_load()\n\nThe standalone (non-libretro) version references external filenames\ncpc464.rom, cpc664.rom, cpc6128.rom, amsdos.rom in cap32.c:349-352\nvia config file loading (cap32.c:1828-1840), but the libretro port\ndoes not use this path. The libretro init (libretro-core.c:1512) has\na \"TODO: future use to load custom bios\" comment that is not\nimplemented.\n\nKeyboard layout patches are applied to the ROM in memory for French\nand Spanish layouts via rom_mods.h (cap32.c:1102-1126).\n\nCP/M support loads a pre-built snapshot (cpm.h) into memory via\nsnapshot_load_mem() in slots.c:87.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "All ROMs are embedded. emulator_select_ROM() copies the appropriate\nROM array into the pbROM buffer based on CPC.model. No filesystem\nlookup occurs in the libretro port. The retro_system_bios_directory\nvariable is set up in libretro-core.c:1499-1510 but only used for\na future custom BIOS feature that is not yet implemented.\n",
            "source_ref": "cap32/cap32.c:1072-1100, cap32/cap32.c:342-345"
          },
          "embedded_roms": {
            "note": "5 ROM sets embedded as C arrays:\nOS_BASIC10 (32KB) - CPC 464/664 OS + BASIC 1.0\nOS_BASIC11 (32KB) - CPC 6128 OS + BASIC 1.1\nAMSDOS (16KB)     - Disk controller ROM, mapped to slot 7\nOS_6128P          - CPC+ system cartridge (White Label cartridge)\ncpmROM (128KB+)   - CP/M boot snapshot including SNA header\n",
            "source_ref": "cap32/rom/464.h, cap32/rom/6128.h, cap32/rom/amsdos.h, cap32/rom/6128p.h, cap32/rom/cpm.h"
          },
          "model_rom_map": {
            "note": "CPC 464:  OS_BASIC10 only (no disk support)\nCPC 664:  OS_BASIC10 + AMSDOS in ROM slot 7\nCPC 6128: OS_BASIC11 + AMSDOS in ROM slot 7\nCPC+:     6128P system cartridge (or user-provided .cpr file)\n",
            "source_ref": "cap32/cap32.c:1072-1100"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-cap32",
        "source_commit": "4abfb8be233bec630f369379fb6c1d92d31f1c7d",
        "systems": [
          "amstrad-cpc"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/ColinPitrat/caprice32"
      }
    },
    {
      "id": "cdi2015",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.160",
        "cores": [
          "cdi2015"
        ],
        "display_name": "Philips CDi (CDi 2015)",
        "emulator": "CDi 2015",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "description": "Magnavox CD-i 200 BIOS (default)",
                "name": "cdi200.rom",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "description": "Philips CD-i 220 F2 BIOS (alternate)",
                "name": "cdi220b.rom",
                "size": 524288
              }
            ],
            "name": "cdimono1.zip",
            "required": true,
            "source_ref": "src/osd/retro/retromain.c:1989, src/mame/drivers/cdi.c:421",
            "system": "philips-cdi",
            "validation": [
              "crc32",
              "sha1"
            ]
          }
        ],
        "notes": "MAME 0.160 compiled with SUBTARGET=cdi, only cdimono1 driver.\nChecks cdimono1.zip existence in system_dir, then game dir. Returns -2 if missing.\ncdic.bin and slave.bin are undumped 68HC05 MCUs (NO_DUMP), not in the ZIP.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/mame2015-libretro",
        "source_commit": "283e04b03c121db9be12632d6bad2fc3e8707248",
        "systems": [
          "philips-cdi"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0160"
      }
    },
    {
      "id": "cemu",
      "profile": {
        "analysis_commit": "HEAD (depth=1)",
        "analysis_date": "2026-03-17",
        "core_version": "2.6",
        "cores": [
          "cemu"
        ],
        "display_name": "Cemu (Wii U)",
        "emulator": "Cemu",
        "files": [
          {
            "name": "keys.txt",
            "note": "AES-128 disc keys for WUD/WUX decryption, one 32-char hex key per line",
            "path": "",
            "required": true,
            "size": null,
            "source_ref": "src/Cafe/Filesystem/FST/KeyCache.cpp:63"
          },
          {
            "name": "otp.bin",
            "note": "Wii U OTP dump, required for online mode and SSL certificate generation",
            "path": "",
            "required": false,
            "size": 1024,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:556"
          },
          {
            "name": "seeprom.bin",
            "note": "Wii U SEEPROM dump, required for online mode and console region detection",
            "path": "",
            "required": false,
            "size": 512,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:579"
          },
          {
            "name": "CafeCn.ttf",
            "note": "Shared font - Chinese",
            "path": "mlc01/sys/title/0005001b/10042400/content/",
            "required": true,
            "source_ref": "src/Cafe/CafeSystem.cpp:289"
          },
          {
            "name": "CafeKr.ttf",
            "note": "Shared font - Korean",
            "path": "mlc01/sys/title/0005001b/10042400/content/",
            "required": true,
            "source_ref": "src/Cafe/CafeSystem.cpp:290"
          },
          {
            "name": "CafeStd.ttf",
            "note": "Shared font - Standard (Latin/Japanese)",
            "path": "mlc01/sys/title/0005001b/10042400/content/",
            "required": true,
            "source_ref": "src/Cafe/CafeSystem.cpp:291"
          },
          {
            "name": "CafeTw.ttf",
            "note": "Shared font - Traditional Chinese (Taiwan)",
            "path": "mlc01/sys/title/0005001b/10042400/content/",
            "required": true,
            "source_ref": "src/Cafe/CafeSystem.cpp:292"
          },
          {
            "name": "WIIU_COMMON_1_CERT.der",
            "note": "Nintendo client certificate - common",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471"
          },
          {
            "name": "WIIU_COMMON_1_RSA_KEY.aes",
            "note": "Nintendo client key - common (AES-encrypted)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:471"
          },
          {
            "name": "WIIU_ACCOUNT_1_CERT.der",
            "note": "Nintendo client certificate - account",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472"
          },
          {
            "name": "WIIU_ACCOUNT_1_RSA_KEY.aes",
            "note": "Nintendo client key - account (AES-encrypted)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:472"
          },
          {
            "name": "WIIU_OLIVE_1_CERT.der",
            "note": "Nintendo client certificate - olive (Miiverse)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473"
          },
          {
            "name": "WIIU_OLIVE_1_RSA_KEY.aes",
            "note": "Nintendo client key - olive (AES-encrypted)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:473"
          },
          {
            "name": "WIIU_VINO_1_CERT.der",
            "note": "Nintendo client certificate - vino",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474"
          },
          {
            "name": "WIIU_VINO_1_RSA_KEY.aes",
            "note": "Nintendo client key - vino (AES-encrypted)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:474"
          },
          {
            "name": "WIIU_WOOD_1_CERT.der",
            "note": "Nintendo client certificate - wood",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475"
          },
          {
            "name": "WIIU_WOOD_1_RSA_KEY.aes",
            "note": "Nintendo client key - wood (AES-encrypted)",
            "path": "mlc01/sys/title/0005001b/10054000/content/ccerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:475"
          },
          {
            "name": "CACERT_NINTENDO_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:480"
          },
          {
            "name": "CACERT_NINTENDO_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:481"
          },
          {
            "name": "CACERT_NINTENDO_CA_G3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:482"
          },
          {
            "name": "CACERT_NINTENDO_CLASS2_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:483"
          },
          {
            "name": "CACERT_NINTENDO_CLASS2_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:484"
          },
          {
            "name": "CACERT_NINTENDO_CLASS2_CA_G3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:485"
          },
          {
            "name": "BALTIMORE_CYBERTRUST_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:488"
          },
          {
            "name": "CYBERTRUST_GLOBAL_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:489"
          },
          {
            "name": "VERIZON_GLOBAL_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:490"
          },
          {
            "name": "GLOBALSIGN_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:491"
          },
          {
            "name": "GLOBALSIGN_ROOT_CA_R2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:492"
          },
          {
            "name": "GLOBALSIGN_ROOT_CA_R3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:493"
          },
          {
            "name": "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:494"
          },
          {
            "name": "VERISIGN_UNIVERSAL_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:495"
          },
          {
            "name": "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G5.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:496"
          },
          {
            "name": "THAWTE_PRIMARY_ROOT_CA_G3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:497"
          },
          {
            "name": "THAWTE_PRIMARY_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:498"
          },
          {
            "name": "GEOTRUST_GLOBAL_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:499"
          },
          {
            "name": "GEOTRUST_GLOBAL_CA2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:500"
          },
          {
            "name": "GEOTRUST_PRIMARY_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:501"
          },
          {
            "name": "GEOTRUST_PRIMARY_CA_G3.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:502"
          },
          {
            "name": "ADDTRUST_EXT_CA_ROOT.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:503"
          },
          {
            "name": "COMODO_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:504"
          },
          {
            "name": "UTN_DATACORP_SGC_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:505"
          },
          {
            "name": "UTN_USERFIRST_HARDWARE_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:506"
          },
          {
            "name": "DIGICERT_HIGH_ASSURANCE_EV_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:507"
          },
          {
            "name": "DIGICERT_ASSURED_ID_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:508"
          },
          {
            "name": "DIGICERT_GLOBAL_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:509"
          },
          {
            "name": "GTE_CYBERTRUST_GLOBAL_ROOT.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:510"
          },
          {
            "name": "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:511"
          },
          {
            "name": "THAWTE_PREMIUM_SERVER_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:512"
          },
          {
            "name": "EQUIFAX_SECURE_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:513"
          },
          {
            "name": "ENTRUST_SECURE_SERVER_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:514"
          },
          {
            "name": "VERISIGN_CLASS3_PUBLIC_PRIMARY_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:515"
          },
          {
            "name": "ENTRUST_CA_2048.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:516"
          },
          {
            "name": "ENTRUST_ROOT_CA.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:517"
          },
          {
            "name": "ENTRUST_ROOT_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:518"
          },
          {
            "name": "DIGICERT_ASSURED_ID_ROOT_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:519"
          },
          {
            "name": "DIGICERT_GLOBAL_ROOT_CA_G2.der",
            "path": "mlc01/sys/title/0005001b/10054000/content/scerts/",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:520"
          },
          {
            "name": "snd_user.rpl",
            "note": "Wii U firmware sound library, improves audio accuracy for some games",
            "path": "cafeLibs/",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/snd_user/snd_user.cpp:1225"
          },
          {
            "name": "snduser2.rpl",
            "note": "Wii U firmware sound library v2, improves audio accuracy for some games",
            "path": "cafeLibs/",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/snd_user/snd_user.cpp:1225"
          }
        ],
        "firmware_titles": [
          {
            "content": [
              "CafeCn.ttf",
              "CafeKr.ttf",
              "CafeStd.ttf",
              "CafeTw.ttf"
            ],
            "id": "0005001b-10042400",
            "name": "Shared fonts",
            "required": true,
            "source_ref": "src/Cafe/CafeSystem.cpp:289-292"
          },
          {
            "content": [
              "ccerts/",
              "scerts/"
            ],
            "id": "0005001b-10054000",
            "name": "SSL certificates",
            "note": "Only needed for online features, requires otp.bin",
            "required": false,
            "source_ref": "src/Cafe/IOSU/legacy/iosu_crypto.cpp:535"
          },
          {
            "content": [
              "language.txt",
              "country.txt"
            ],
            "id": "0005001b-1005c000",
            "name": "System language/country data",
            "note": "Auto-generated by Cemu if missing",
            "required": false,
            "source_ref": "src/gui/wxgui/CemuApp.cpp:535-561"
          },
          {
            "content": [
              "version.bin"
            ],
            "id": "00050010-10041200",
            "name": "System version",
            "note": "Referenced but not strictly loaded (TODO in source)",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/coreinit/coreinit_MCP.cpp:203"
          },
          {
            "id": "00050010-10040000",
            "name": "Wii U Menu (JPN)",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/sysapp/sysapp.cpp:382"
          },
          {
            "id": "00050010-10040100",
            "name": "Wii U Menu (USA)",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/sysapp/sysapp.cpp:382"
          },
          {
            "id": "00050010-10040200",
            "name": "Wii U Menu (EUR)",
            "required": false,
            "source_ref": "src/Cafe/OS/libs/sysapp/sysapp.cpp:382"
          }
        ],
        "logo": "https://raw.githubusercontent.com/cemu-project/Cemu/main/dist/linux/info.cemu.Cemu.png",
        "mlc_structure": [
          "mlc01/sys/title/0005001b/10042400/content/",
          "mlc01/sys/title/0005001b/10054000/content/ccerts/",
          "mlc01/sys/title/0005001b/10054000/content/scerts/",
          "mlc01/sys/title/0005001b/1005c000/content/",
          "mlc01/sys/title/00050010/",
          "mlc01/usr/title/00050000/",
          "mlc01/usr/title/0005000c/",
          "mlc01/usr/title/0005000e/",
          "mlc01/usr/save/",
          "mlc01/usr/boss/"
        ],
        "notes": "Cemu is a standalone Wii U emulator (not a libretro core).\nMinimum to run games: keys.txt with disc decryption keys.\nShared fonts are required but Cemu ships fallback fonts in resources/sharedFonts/.\nOnline play requires otp.bin (1024 bytes) + seeprom.bin (512 bytes) + SSL certificates.\nThe cafeLibs/ directory can hold original Wii U firmware .rpl libraries for accuracy.\nAny .rpl from the Wii U firmware placed in cafeLibs/ will override Cemu's HLE implementation.\n",
        "profiled_date": "2026-03-18",
        "source": "https://github.com/cemu-project/Cemu",
        "source_commit": "daacdda0bab55dd78a2b5aac2c12d6ebe8c8e868",
        "systems": [
          "nintendo-wiiu"
        ],
        "type": "standalone"
      }
    },
    {
      "id": "chailove",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2.0.0",
        "cores": [
          "chailove"
        ],
        "display_name": "ChaiLove",
        "emulator": "ChaiLove",
        "files": [],
        "notes": "2D game framework for libretro using ChaiScript, inspired by LOVE2D. Game engine runtime that loads .chai/.chailove game files as content. Mounts system_dir at /libretro/system via PhysFS for game scripts, but the core itself requires no external files.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-chailove",
        "source_commit": "467cd453e3b1761c5c3611746b35e709328a2ced",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-chailove"
      }
    },
    {
      "id": "chimerasnes",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "",
        "cores": [
          "chimerasnes"
        ],
        "display_name": "Nintendo - SNES / SFC (ChimeraSNES)",
        "emulator": "ChimeraSNES",
        "files": [
          {
            "aliases": [
              "BS-X.bios"
            ],
            "description": "Satellaview BS-X BIOS",
            "name": "BS-X.bin",
            "note": "Loaded by BSX_LoadBIOS() from system_dir when core option\nchimerasnes_bsx_bios is set to 'load' (default: skip).\nTries BS-X.bin first, then BS-X.bios as fallback.\nSize must be BIOS_SIZE (0x100000). Many BS-X games run without it.\n",
            "required": false,
            "size": 1048576,
            "source_ref": "source/bsx.c:857-882",
            "system": "nintendo-satellaview",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Sufami Turbo BIOS",
            "name": "STBIOS.bin",
            "note": "Loaded by LoadSFTBIOS() from system_dir when Sufami Turbo game\ndetected (BANDAI SFC-ADX header at ROM offset 0, memmap.c:833).\nReads 0x40000 bytes into Memory.ROM. No validation performed.\n",
            "required": true,
            "size": 262144,
            "source_ref": "source/memmap.c:275-289",
            "system": "nintendo-sufami-turbo"
          }
        ],
        "notes": "Based on multiple snes9x forks (uosnes, snes9x2005), optimized for slow hardware.\nAll coprocessor data (DSP1-4, CX4, SuperFX, SA-1, SPC7110, OBC1) is HLE with\nembedded ROM tables. No external coprocessor firmware needed.\nBS-X BIOS loading controlled by core option chimerasnes_bsx_bios (default: skip).\nretro_load_game_special() returns false (no subsystem support).\n.info firmware_count absent (= 0), under-declares: code loads 2 files.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/jamsilva/chimerasnes",
        "source_commit": "04c57c2902c25f36ae5a5d9c57aff851a772c868",
        "systems": [
          "nintendo-snes",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://github.com/snes9xgit/snes9x"
      }
    },
    {
      "id": "citra",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "citra"
        ],
        "display_name": "Nintendo - 3DS (Citra)",
        "emulator": "Citra",
        "files": [
          {
            "description": "AES encryption keys",
            "name": "aes_keys.txt",
            "note": "needed for encrypted games",
            "path": "Citra/sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:207-208 LoadPresetKeys()",
            "system": "nintendo-3ds"
          },
          {
            "description": "ARM9 bootrom",
            "name": "boot9.bin",
            "note": "provides AES and RSA keys",
            "path": "Citra/sysdata/boot9.bin",
            "required": false,
            "size": 65536,
            "source_ref": "src/core/hw/aes/key.cpp:162-172 LoadBootromKeys(), src/core/hw/rsa/rsa.cpp:55-65 InitSlots()",
            "system": "nintendo-3ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "system shared font (legacy format)",
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "fallback to embedded open-source replacement font",
            "path": "Citra/sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:259-267 LoadLegacySharedFont()",
            "system": "nintendo-3ds"
          },
          {
            "description": "game seed database",
            "name": "seeddb.bin",
            "note": "needed for seed-encrypted games (9.6+ titles), creates empty if missing",
            "path": "Citra/sysdata/seeddb.bin",
            "required": false,
            "source_ref": "src/core/file_sys/seed_db.cpp:13-27 SeedDB::Load()",
            "system": "nintendo-3ds"
          }
        ],
        "notes": "Citra 3DS emulator. Upstream taken down March 2024 (Nintendo lawsuit).\nMirror: https://github.com/citra-mirror/citra\nData dir: {save_dir}/Citra/ or {system_dir}/Citra/\nref: src/citra_libretro/citra_libretro.cpp:460-466\n\nHLE for most services. Embedded open-source replacements for shared font,\nMii data, country list, and bad word list compiled into the binary.\nref: src/core/file_sys/archive_ncch.cpp:9-27, 133-167\n\nfirmware_count absent in .info (= 0). All files optional.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/citra",
        "source_commit": "4268124a74b55ddba69f29dc9858f222c4bd006d",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/citra-emu/citra"
      }
    },
    {
      "id": "citra-mmj",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "20251112",
        "cores": [
          "citra-mmj"
        ],
        "display_name": "Nintendo - 3DS (Citra MMJ)",
        "emulator": "Citra MMJ",
        "files": [
          {
            "description": "ARM9 bootrom",
            "name": "boot9.bin",
            "note": "AES key section read at offset 55760, RSA modulus and exponent at 0xB3E0 and 0xB4E0. Both readers bail on any other size.",
            "path": "sysdata/boot9.bin",
            "required": false,
            "size": 65536,
            "source_ref": "src/core/hw/aes/key.cpp:135-205, src/core/hw/rsa/rsa.cpp:49-80",
            "system": "nintendo-3ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "AES key slots",
            "name": "aes_keys.txt",
            "note": "One name=hex pair per line, slot0x<NN>Key<X|Y|N> and common<N>. Read last, so it overrides what boot9.bin and the native firm titles set.",
            "path": "sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:428-493, src/core/hw/aes/key.cpp:497-508",
            "system": "nintendo-3ds"
          },
          {
            "description": "New 3DS NAND secret sector",
            "min_size": 17,
            "name": "sector0x96.bin",
            "note": "First 16 bytes decrypt the slot 0x15 KeyX of the New 3DS safe mode native firm, title 0x0004013820000003. A file of 16 bytes or less trips a live assert: Android compiles out ASSERT_MSG, not ASSERT.",
            "path": "sysdata/sector0x96.bin",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:309-345, src/core/hw/aes/key.cpp:380-386, src/common/assert.h:30-35, src/common/assert.h:59-62",
            "system": "nintendo-3ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "game seed database",
            "name": "seeddb.bin",
            "note": "Seed-encrypted titles from firmware 9.6 onwards. 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-57",
            "system": "nintendo-3ds"
          },
          {
            "description": "shared font system archive, title 0x0004009b00014002",
            "hle_fallback": true,
            "name": "00000000.app.romfs",
            "note": "First step of the shared font chain, holding cbf_std.bcfnt.lz in its RomFS. This title low ID is the one the embedded open-source font answers.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00014002/content/00000000.app.romfs",
            "region": [
              "japan",
              "north-america",
              "europe",
              "australia"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:143-148",
            "system": "nintendo-3ds"
          },
          {
            "description": "shared font system archive for CHN, title 0x0004009b00014102",
            "name": "00000000.app.romfs",
            "note": "Holds cbf_zh-Hans-CN.bcfnt.lz. No embedded replacement answers this title low ID.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00014102/content/00000000.app.romfs",
            "region": [
              "china"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158",
            "system": "nintendo-3ds"
          },
          {
            "description": "shared font system archive for KOR, title 0x0004009b00014202",
            "name": "00000000.app.romfs",
            "note": "Holds cbf_ko-Hang-KR.bcfnt.lz. No embedded replacement answers this title low ID.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00014202/content/00000000.app.romfs",
            "region": [
              "south-korea"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158",
            "system": "nintendo-3ds"
          },
          {
            "description": "shared font system archive for TWN, title 0x0004009b00014302",
            "name": "00000000.app.romfs",
            "note": "Holds cbf_zh-Hant-TW.bcfnt.lz. No embedded replacement answers this title low ID.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00014302/content/00000000.app.romfs",
            "region": [
              "taiwan"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:124-182, src/core/file_sys/archive_ncch.cpp:132-158",
            "system": "nintendo-3ds"
          },
          {
            "description": "system shared font, legacy dump",
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "Copied whole into the shared memory block, so the file carries the 0x80 byte APT header. Tried after the system archive and before the regional BCFNT files.",
            "path": "sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:230-246, src/core/hle/service/apt/apt.cpp:256-272",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "shared font for JPN, USA, EUR and AUS",
            "hle_fallback": true,
            "name": "cbf_std.bcfnt",
            "note": "Read to offset 0x80 of the shared memory block, so the file is a bare uncompressed BCFNT. Selected for every CFG region other than CHN, KOR and TWN. The embedded open-source font answers the archive request first, so this file is only reached when that archive path is taken out.",
            "path": "sysdata/cbf_std.bcfnt",
            "region": [
              "japan",
              "north-america",
              "europe",
              "australia"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:184-228, src/core/file_sys/archive_ncch.cpp:143-148",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "shared font for CHN",
            "name": "cbf_zh-Hans-CN.bcfnt",
            "note": "Selected when the CFG region is CHN. The embedded font does not cover archive 0x00014102, so the session ends with ErrorSystemFiles without this file or shared_font.bin.",
            "path": "sysdata/cbf_zh-Hans-CN.bcfnt",
            "region": [
              "china"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "shared font for KOR",
            "name": "cbf_ko-Hang-KR.bcfnt",
            "note": "Selected when the CFG region is KOR. The embedded font does not cover archive 0x00014202, so the session ends with ErrorSystemFiles without this file or shared_font.bin.",
            "path": "sysdata/cbf_ko-Hang-KR.bcfnt",
            "region": [
              "south-korea"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "shared font for TWN",
            "name": "cbf_zh-Hant-TW.bcfnt",
            "note": "Selected when the CFG region is TWN. The embedded font does not cover archive 0x00014302, so the session ends with ErrorSystemFiles without this file or shared_font.bin.",
            "path": "sysdata/cbf_zh-Hant-TW.bcfnt",
            "region": [
              "taiwan"
            ],
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:184-228, src/core/hle/service/apt/apt.cpp:256-272",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "Mii data system archive, title 0x0004009b00010202",
            "hle_fallback": true,
            "name": "00000000.app.romfs",
            "note": "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00010202/content/00000000.app.romfs",
            "required": false,
            "source_ref": "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:132-136",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "country list system archive, title 0x0004009b00010402",
            "hle_fallback": true,
            "name": "00000000.app.romfs",
            "note": "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.",
            "path": "nand/00000000000000000000000000000000/title/0004009b/00010402/content/00000000.app.romfs",
            "required": false,
            "source_ref": "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:137-142",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "bad word list system archive, title 0x000400db00010302",
            "hle_fallback": true,
            "name": "00000000.app.romfs",
            "note": "Split-off RomFS served in place of the NCCH the title tree resolves to. An open-source replacement is built into the binary.",
            "path": "nand/00000000000000000000000000000000/title/000400db/00010302/content/00000000.app.romfs",
            "required": false,
            "source_ref": "src/core/file_sys/ncch_container.cpp:726-741, src/core/file_sys/archive_ncch.cpp:150-157",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "title metadata of the DLP module, title 0x0004013000002802",
            "hle_fallback": true,
            "name": "00000000.tmd",
            "note": "Read to resolve the content ID of index 0, which the shipped metadata gives as 0x1f. Without it the path falls back to content ID 0 and the module is not found.",
            "path": "nand/00000000000000000000000000000000/title/00040130/00002802/content/00000000.tmd",
            "required": false,
            "source_ref": "src/core/hle/service/am/am.cpp:428-464, src/core/hle/service/am/am.cpp:466-501, src/core/file_sys/title_metadata.cpp:19-34",
            "system": "nintendo-3ds"
          },
          {
            "bundled": true,
            "description": "DLP system module, title 0x0004013000002802",
            "hle_fallback": true,
            "name": "0000001f.app",
            "note": "Loaded as a process when LLE is enabled for DLP, otherwise the HLE service is installed.",
            "path": "nand/00000000000000000000000000000000/title/00040130/00002802/content/0000001f.app",
            "required": false,
            "source_ref": "src/core/hle/service/service.cpp:78, src/core/hle/service/service.cpp:197-213",
            "system": "nintendo-3ds"
          }
        ],
        "mode": "standalone",
        "notes": "Citra fork for Android, shipped as four APKs of the same build per release:\nthe org.citra.emu package, a com.antutu.ABenchMark package, and a\nStorageAccess variant of each. The user directory is citra-emu at the root of\nexternal storage, and Android/data/org.citra.emu/files/citra-emu for the\nStorageAccess builds. External files live in sysdata/ and nand/ below it.\nref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:61-94,\n     src/common/common_paths.h:23-29, src/common/file_util.cpp:398-430\n\nInitKeys reads boot9.bin, then the native firm titles in the NAND tree, then\nsector0x96.bin for the New 3DS firm, then aes_keys.txt. Content left\nencrypted stops loading with ErrorEncrypted, shown as \"ROM Encrypted\".\nref: src/core/hw/aes/key.cpp:497-508, src/core/file_sys/ncch_container.cpp:348-351,\n     src/android/jni/main_android.cpp:88-90\n\nGetSharedFont tries the shared font system archive, then shared_font.bin,\nthen the regional BCFNT for the CFG region, and ends the session with\nErrorSystemFiles when the three fail. The embedded open-source font answers\ntitle low ID 0x00014002 only, so CHN, KOR and TWN, which resolve to\n0x00014102, 0x00014202 and 0x00014302, depend on a file. Region defaults to\nthe code the ROM declares.\nref: src/core/hle/service/apt/apt.cpp:143, src/core/hle/service/apt/apt.cpp:256-272,\n     src/core/file_sys/archive_ncch.cpp:143-148, src/core/hle/service/cfg/cfg.cpp:176-181,\n     src/core/loader/ncch.cpp:179, src/android/jni/config/main_settings.cpp:12\n\nLoading the four regional fonts from sysdata is specific to this fork.\nref: src/core/hle/service/apt/apt.cpp:184-228\n\nThe APK assets carry those fonts, three system archives, the DLP module and a\nseeded CFG savegame, and the first run copies them into the user directory\nwithout overwriting what is already there. System archives ship as split-off\nRomFS, picked up beside the .app path the title tree resolves to.\nref: src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:192-207,\n     src/android/app/src/main/java/org/citra/emu/utils/CitraDirectory.java:368-399,\n     src/core/file_sys/ncch_container.cpp:726-741\n\nLLE is opt-in per service module and reads the module from the NAND title\ntree, falling back to HLE when it is absent. There is no title downloader:\nsystem titles come from CIA files the user installs.\nref: src/core/hle/service/service.cpp:60-107, src/core/hle/service/service.cpp:197-213,\n     src/android/jni/main_android.cpp:278-289\n\nClCertA is read from NAND title 0x0004001b00010002 and decrypted with the\nkeyslot 0x0D normal key. HTTPS client authentication stays off without both.\nref: src/core/hle/service/http_c.cpp:810-884\n\nThe published tree does not build as it stands: CitraDirectory.java:349 calls\na NativeLibrary.SetBackgroundGLSL that no file declares, and GetBuildDate and\nGetDeviceIinfo are declared native with no JNI counterpart. Nothing compiled\nhere reads the post-processing shaders the settings screen lists.\nref: src/android/app/src/main/java/org/citra/emu/NativeLibrary.java:341-342,\n     src/android/app/src/main/java/org/citra/emu/settings/SettingsFragment.java:397-401\n\nAmiibo dumps are read as .bin files from amiibo/, cheat codes from\ncheats/<title id>.txt, texture packs and mods from load/.\nref: src/android/app/src/main/java/org/citra/emu/ui/AmiiboDialog.java:57-64,\n     src/core/cheats/cheats.cpp:93-110, src/core/custom_tex_cache.cpp:67,\n     src/core/file_sys/ncch_container.cpp:359-365\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/weihuoya/citra",
        "source_commit": "302b0c3bc4312bc96489c11584a97664894b343f",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone",
        "upstream": "https://github.com/weihuoya/citra"
      }
    },
    {
      "id": "citra2018",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "Git",
        "cores": [
          "citra2018"
        ],
        "display_name": "Nintendo - 3DS (Citra 2018)",
        "emulator": "Citra 2018",
        "files": [
          {
            "name": "aes_keys.txt",
            "note": "AES encryption keys for decrypting 3DS content",
            "path": "Citra/sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:72-76",
            "system": "nintendo-3ds"
          },
          {
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "system shared font, falls back to embedded open-source replacement",
            "path": "Citra/sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:168-183",
            "system": "nintendo-3ds"
          }
        ],
        "notes": "Frozen 2018 snapshot of the Citra 3DS emulator.\nLoads files from {system_dir}/Citra/sysdata/.\nref: src/citra_libretro/citra_libretro.cpp:317, src/common/common_paths.h:24\n\nEmbedded open-source replacement font in archive_ncch.cpp.\nref: src/core/file_sys/archive_ncch.cpp:134-146\n\nfirmware_count absent in .info (= 0). Both files are optional.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/citra2018",
        "source_commit": "29183a99b9771b128a36304c7d734daf5bfd5051",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/citra-emu/citra"
      }
    },
    {
      "id": "citra_canary",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "citra_canary"
        ],
        "display_name": "Nintendo - 3DS (Citra Canary/Experimental)",
        "emulator": "Citra Canary",
        "files": [
          {
            "name": "aes_keys.txt",
            "note": "AES encryption keys for decrypting 3DS content",
            "path": "Citra/sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/core/hw/aes/key.cpp:71-131",
            "system": "nintendo-3ds"
          },
          {
            "hle_fallback": true,
            "name": "shared_font.bin",
            "note": "system shared font, falls back to embedded open-source replacement",
            "path": "Citra/sysdata/shared_font.bin",
            "required": false,
            "source_ref": "src/core/hle/service/apt/apt.cpp:168-200",
            "system": "nintendo-3ds"
          }
        ],
        "notes": "Canary branch of libretro/citra. Older codebase than master branch (citra core).\nMissing boot9.bin, sector0x96.bin, seeddb.bin support present in master.\nSeed crypto unimplemented (src/core/file_sys/ncch_container.cpp:169).\nUpstream citra-emu/citra taken down March 2024 (Nintendo lawsuit).\nMirror: https://github.com/citra-mirror/citra\n\nData dir: {system_dir}/Citra/sysdata/\nref: src/citra_libretro/citra_libretro.cpp:305-314\n\nEmbedded open-source replacements for shared font, country list, bad word list.\nref: src/core/file_sys/archive_ncch.cpp:142-147\n\nfirmware_count absent in .info (= 0).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/citra",
        "source_commit": "4268124a74b55ddba69f29dc9858f222c4bd006d",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/citra-emu/citra"
      }
    },
    {
      "id": "citron",
      "profile": {
        "analysis_commit": "79dee42 (depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "community_fork",
        "core_version": "2026.03.12",
        "cores": [
          "citron"
        ],
        "display_name": "Citron (Nintendo Switch)",
        "emulator": "Citron",
        "files": [
          {
            "mode": "standalone",
            "name": "prod.keys",
            "note": "Production keys for NCA decryption (master, key area, header, titlekek)",
            "path": "switch/",
            "required": true,
            "source_ref": "src/core/crypto/key_manager.cpp:655-656"
          },
          {
            "mode": "standalone",
            "name": "title.keys",
            "note": "Per-title encryption keys (rights_id to titlekey mappings)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:659-660"
          },
          {
            "mode": "standalone",
            "name": "console.keys",
            "note": "Console-specific keys (BIS, SD seed)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:661-662"
          },
          {
            "mode": "standalone",
            "name": "key_retail.bin",
            "note": "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)",
            "path": "switch/",
            "required": false,
            "size": 160,
            "source_ref": "src/core/hle/service/nfc/common/amiibo_crypto.cpp:274-292"
          }
        ],
        "mode": "standalone",
        "notes": "Citron is a standalone Nintendo Switch emulator, community fork of yuzu by Zephyron.\ndev.keys can be used instead of prod.keys when use_dev_keys is enabled (for Switch dev units).\nFirmware (system NCAs) must be installed through Citron's UI from a firmware ZIP or NCA files.\nRequired for commercial games. Homebrew (.nro, .nso) can run without keys or firmware.\n",
        "profiled_date": "2026-03-26",
        "source": "https://git.citron-emu.org/citron-emu/Citron",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://git.citron-emu.org/citron-emu/Citron"
      }
    },
    {
      "id": "clk",
      "profile": {
        "core_version": "2026-07-28",
        "cores": [
          "clk"
        ],
        "display_name": "Clock Signal",
        "emulator": "Clock Signal (CLK)",
        "files": [
          {
            "crc32": "54c0c963",
            "description": "RISC OS v3.11",
            "mode": "standalone",
            "name": "ROM311",
            "path": "Archimedes/ROM311",
            "required": true,
            "size": 2097152,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:58-65"
          },
          {
            "aliases": [
              "basic2.rom"
            ],
            "crc32": "79434781",
            "description": "Acorn BASIC II ROM, shared by BBC Micro and Electron",
            "mode": "standalone",
            "name": "basic.rom",
            "path": "Acorn/basic.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:78-85"
          },
          {
            "crc32": "3c14fc70",
            "description": "BBC MOS v1.2",
            "mode": "standalone",
            "name": "os12.rom",
            "path": "BBCMicro/os12.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:436-443"
          },
          {
            "crc32": "3ce609cf",
            "description": "Acorn 8271 DFS 0.9 ROM",
            "mode": "standalone",
            "name": "dfs09.rom",
            "note": "Conditional: only when using 8271 disk interface",
            "path": "BBCMicro/dfs09.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:444-451"
          },
          {
            "crc32": "5ae33e94",
            "description": "Acorn 1770 DFS 2.26 ROM",
            "mode": "standalone",
            "name": "dfs-2.26.rom",
            "note": "Conditional: needed for 1770 DFS or tube processor",
            "path": "BBCMicro/dfs-2.26.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:452-459"
          },
          {
            "crc32": "d3855588",
            "description": "Acorn ADFS 1.30 ROM",
            "mode": "standalone",
            "name": "adfs-1.30.rom",
            "note": "Conditional: needed for ADFS support",
            "path": "BBCMicro/adfs-1.30.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:460-467"
          },
          {
            "crc32": "8314fed0",
            "description": "Advanced Disc Toolkit 1.40 ROM",
            "mode": "standalone",
            "name": "ADT-1.40.rom",
            "note": "Optional: fetched separately, silently skipped if absent",
            "path": "BBCMicro/ADT-1.40.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:468-475"
          },
          {
            "crc32": "9ec2dbd0",
            "description": "6502 Tube 1.10 Boot ROM",
            "mode": "standalone",
            "name": "TUBE110.rom",
            "note": "Conditional: needed for 6502 tube processor",
            "path": "BBCMicro/TUBE110.rom",
            "required": false,
            "size": 2048,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:476-483"
          },
          {
            "crc32": "b5851efc",
            "description": "Z80 Tube 1.22 Boot ROM",
            "mode": "standalone",
            "name": "Z80_122.rom",
            "note": "Conditional: needed for Z80 tube processor",
            "path": "BBCMicro/Z80_122.rom",
            "required": false,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:484-491"
          },
          {
            "crc32": "79434781",
            "description": "Acorn BASIC II ROM (Electron copy)",
            "mode": "standalone",
            "name": "basic.rom",
            "path": "Electron/basic.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:90-97"
          },
          {
            "crc32": "bf63fb1f",
            "description": "Electron MOS ROM v1.00",
            "mode": "standalone",
            "name": "os.rom",
            "note": "The catalogue accepts five images: 406a42ce, 0886741b, bf63fb1f, 6fea0978 and d61135d7. They differ only in the credits text, which lives on the IO page of a real machine.\n",
            "path": "Electron/os.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:146-156"
          },
          {
            "crc32": "51523993",
            "description": "E00 ADFS ROM, first slot",
            "mode": "standalone",
            "name": "ADFS-E00_1.rom",
            "note": "Conditional: needed for PRES ADFS",
            "path": "Electron/ADFS-E00_1.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:98-105"
          },
          {
            "crc32": "8d17de0e",
            "description": "E00 ADFS ROM, second slot",
            "mode": "standalone",
            "name": "ADFS-E00_2.rom",
            "note": "Conditional: needed for PRES ADFS",
            "path": "Electron/ADFS-E00_2.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:106-113"
          },
          {
            "crc32": "3289bdc6",
            "description": "Acorn ADFS ROM",
            "mode": "standalone",
            "name": "adfs.rom",
            "note": "Conditional: needed for Acorn ADFS",
            "path": "Electron/adfs.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:114-121"
          },
          {
            "crc32": "f3dc9bc5",
            "description": "1770 DFS ROM",
            "mode": "standalone",
            "name": "DFS-1770-2.20.rom",
            "note": "Conditional: needed for DFS disk images",
            "path": "Electron/DFS-1770-2.20.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:122-129"
          },
          {
            "crc32": "a923368d",
            "description": "IDE-modified ADFS 1.03 ROM",
            "mode": "standalone",
            "name": "ELK130E.rom",
            "note": "Conditional: needed for IDE interface",
            "path": "Electron/ELK130E.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:130-137"
          },
          {
            "crc32": "e0013cfc",
            "description": "Advanced Plus 6 ROM",
            "mode": "standalone",
            "name": "AP6v133.rom",
            "note": "Conditional: needed for AP6 commands",
            "path": "Electron/AP6v133.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:138-145"
          },
          {
            "crc32": "c4f0f55f",
            "description": "A500/A1000/A2000/CDTV Kickstart 1.3 ROM",
            "mode": "standalone",
            "name": "Kickstart-v1.3-rev34.5-1987-Commodore-A500-A1000-A2000-CDTV.rom",
            "path": "Amiga/Kickstart-v1.3-rev34.5-1987-Commodore-A500-A1000-A2000-CDTV.rom",
            "required": true,
            "size": 262144,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:193-200"
          },
          {
            "crc32": "815752df",
            "description": "CPC 464 firmware",
            "mode": "standalone",
            "name": "os464.rom",
            "note": "Built into binary. Required for CPC 464 model.",
            "path": "AmstradCPC/os464.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:261-268, Machines/Utility/ROMLibrary.cpp:14535"
          },
          {
            "crc32": "7d9a3bac",
            "description": "CPC 464 BASIC ROM",
            "mode": "standalone",
            "name": "basic464.rom",
            "note": "Built into binary. Required for CPC 464 model.",
            "path": "AmstradCPC/basic464.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:269-276, Machines/Utility/ROMLibrary.cpp:14532"
          },
          {
            "crc32": "3f5a6dc4",
            "description": "CPC 664 firmware",
            "mode": "standalone",
            "name": "os664.rom",
            "note": "Built into binary. Required for CPC 664 model.",
            "path": "AmstradCPC/os664.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:277-283, Machines/Utility/ROMLibrary.cpp:14537"
          },
          {
            "crc32": "32fee492",
            "description": "CPC 664 BASIC ROM",
            "mode": "standalone",
            "name": "basic664.rom",
            "note": "Built into binary. Required for CPC 664 model.",
            "path": "AmstradCPC/basic664.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:284-291, Machines/Utility/ROMLibrary.cpp:14534"
          },
          {
            "crc32": "0219bb74",
            "description": "CPC 6128 firmware",
            "mode": "standalone",
            "name": "os6128.rom",
            "note": "Built into binary. Required for CPC 6128 model.",
            "path": "AmstradCPC/os6128.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:292-299, Machines/Utility/ROMLibrary.cpp:14536"
          },
          {
            "crc32": "ca6af63d",
            "description": "CPC 6128 BASIC ROM",
            "mode": "standalone",
            "name": "basic6128.rom",
            "note": "Built into binary. Required for CPC 6128 model.",
            "path": "AmstradCPC/basic6128.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:300-307, Machines/Utility/ROMLibrary.cpp:14533"
          },
          {
            "crc32": "1fe22ecd",
            "description": "Amstrad Disk Operating System",
            "mode": "standalone",
            "name": "amsdos.rom",
            "note": "Built into binary. Needed for CPC 664/6128 disk support.",
            "path": "AmstradCPC/amsdos.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:253-260, Machines/Utility/ROMLibrary.cpp:14531"
          },
          {
            "crc32": "ba210588",
            "description": "Original Apple II ROM",
            "mode": "standalone",
            "name": "apple2o.rom",
            "note": "Required for original Apple II model",
            "path": "AppleII/apple2o.rom",
            "required": true,
            "size": 12288,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:336-343"
          },
          {
            "crc32": "f66f9c26",
            "description": "Apple II+ ROM",
            "mode": "standalone",
            "name": "apple2.rom",
            "note": "Required for Apple II+ model",
            "path": "AppleII/apple2.rom",
            "required": true,
            "size": 12288,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:328-335"
          },
          {
            "crc32": "e12be18d",
            "description": "Apple IIe ROM",
            "mode": "standalone",
            "name": "apple2eu.rom",
            "note": "Required for Apple IIe model",
            "path": "AppleII/apple2eu.rom",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:320-327"
          },
          {
            "crc32": "65989942",
            "description": "Enhanced Apple IIe ROM",
            "mode": "standalone",
            "name": "apple2e.rom",
            "note": "Required for Enhanced IIe model",
            "path": "AppleII/apple2e.rom",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:312-319"
          },
          {
            "crc32": "64f415c6",
            "description": "Apple II/II+ character ROM",
            "mode": "standalone",
            "name": "apple2-character.rom",
            "note": "Required for Apple II and II+ models",
            "path": "AppleII/apple2-character.rom",
            "required": true,
            "size": 2048,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:344-351"
          },
          {
            "crc32": "816a86f1",
            "description": "Apple IIe character ROM",
            "mode": "standalone",
            "name": "apple2eu-character.rom",
            "note": "Required for Apple IIe model",
            "path": "AppleII/apple2eu-character.rom",
            "required": true,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:352-359"
          },
          {
            "crc32": "2651014d",
            "description": "Enhanced Apple IIe character ROM",
            "mode": "standalone",
            "name": "apple2e-character.rom",
            "note": "Required for Enhanced IIe model. Also used by Apple IIgs.",
            "path": "AppleII/apple2e-character.rom",
            "required": true,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:360-367"
          },
          {
            "crc32": "5aff85d3",
            "description": "Apple II SCSI card ROM",
            "mode": "standalone",
            "name": "scsi.rom",
            "note": "Conditional: needed for SCSI controller",
            "path": "AppleII/scsi.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:368-375"
          },
          {
            "crc32": "42f124b0",
            "description": "Apple IIgs ROM01",
            "mode": "standalone",
            "name": "apple2gs.rom",
            "note": "Required for ROM01 model",
            "path": "AppleIIgs/apple2gs.rom",
            "required": true,
            "size": 131072,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:380-387"
          },
          {
            "crc32": "de7ddf29",
            "description": "Apple IIgs ROM03",
            "mode": "standalone",
            "name": "apple2gs.rom2",
            "note": "Required for ROM03 model (default)",
            "path": "AppleIIgs/apple2gs.rom2",
            "required": true,
            "size": 262144,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:388-395"
          },
          {
            "crc32": "91e53cd8",
            "description": "Apple IIgs character ROM",
            "mode": "standalone",
            "name": "apple2gs.chr",
            "path": "AppleIIgs/apple2gs.chr",
            "required": true,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:396-403"
          },
          {
            "crc32": "e1c11fb0",
            "description": "Apple IIgs ROM03 ADB microcontroller ROM",
            "mode": "standalone",
            "name": "341s0632-2",
            "path": "AppleIIgs/341s0632-2",
            "required": true,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:404-411"
          },
          {
            "crc32": "1a586c64",
            "description": "UK TOS 1.00 ROM",
            "mode": "standalone",
            "name": "tos100.img",
            "path": "AtariST/tos100.img",
            "required": true,
            "size": 196608,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:416-423"
          },
          {
            "crc32": "3aa93ef3",
            "description": "ColecoVision BIOS",
            "mode": "standalone",
            "name": "coleco.rom",
            "path": "ColecoVision/coleco.rom",
            "required": true,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:496-503"
          },
          {
            "crc32": "718d42b1",
            "description": "Commodore 1540 floppy drive ROM",
            "mode": "standalone",
            "name": "1540.bin",
            "note": "Conditional: needed when VIC-20 has 1540 drive",
            "path": "Commodore1540/1540.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:508-515"
          },
          {
            "crc32": "fb760019",
            "description": "Commodore 1541 floppy drive ROM",
            "mode": "standalone",
            "name": "1541.bin",
            "note": "Conditional: needed when Plus/4 has 1541 drive",
            "path": "Commodore1540/1541.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:516-523"
          },
          {
            "crc32": "ce7144f6",
            "description": "Disk II 16-sector boot ROM",
            "mode": "standalone",
            "name": "boot-16.rom",
            "note": "Conditional: needed for 16-sector disk controller",
            "path": "DiskII/boot-16.rom",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:528-535"
          },
          {
            "crc32": "9796a238",
            "description": "Disk II 16-sector state machine ROM",
            "mode": "standalone",
            "name": "state-machine-16.rom",
            "note": "Conditional: needed for disk controller. Also used by Oric Pravetz.",
            "path": "DiskII/state-machine-16.rom",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:536-543"
          },
          {
            "crc32": "d34eb2ff",
            "description": "Disk II 13-sector boot ROM",
            "mode": "standalone",
            "name": "boot-13.rom",
            "note": "Conditional: needed for 13-sector disk controller",
            "path": "DiskII/boot-13.rom",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:544-551"
          },
          {
            "crc32": "62e22620",
            "description": "Disk II 13-sector state machine ROM",
            "mode": "standalone",
            "name": "state-machine-13.rom",
            "note": "Conditional: needed for 13-sector disk controller",
            "path": "DiskII/state-machine-13.rom",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:552-559"
          },
          {
            "aliases": [
              "Exos (198x)(Enterprise).bin"
            ],
            "crc32": "30b26387",
            "description": "Enterprise EXOS ROM v1.0",
            "mode": "standalone",
            "name": "exos10.bin",
            "note": "One EXOS version required. Selected by target or any available.",
            "path": "Enterprise/exos10.bin",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:600-607"
          },
          {
            "aliases": [
              "Expandible OS v2.0 (1984)(Intelligent Software).bin"
            ],
            "crc32": "d421795f",
            "description": "Enterprise EXOS ROM v2.0",
            "mode": "standalone",
            "name": "exos20.bin",
            "note": "Alternative EXOS version",
            "path": "Enterprise/exos20.bin",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:611-618"
          },
          {
            "aliases": [
              "Expandible OS v2.1 (1985)(Intelligent Software).bin"
            ],
            "crc32": "982a3b44",
            "description": "Enterprise EXOS ROM v2.1",
            "mode": "standalone",
            "name": "exos21.bin",
            "note": "Alternative EXOS version",
            "path": "Enterprise/exos21.bin",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:622-629"
          },
          {
            "aliases": [
              "Expandible OS v2.3 (1987)(Intelligent Software).bin"
            ],
            "crc32": "24838410",
            "description": "Enterprise EXOS ROM v2.3",
            "mode": "standalone",
            "name": "exos23.bin",
            "note": "Alternative EXOS version",
            "path": "Enterprise/exos23.bin",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:633-640"
          },
          {
            "crc32": "d62e4fb7",
            "description": "Enterprise BASIC ROM v1.0",
            "mode": "standalone",
            "name": "basic10.bin",
            "note": "One BASIC version required. v1.0 single-file version.",
            "path": "Enterprise/basic10.bin",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:645-652"
          },
          {
            "crc32": "37bf48e1",
            "description": "Enterprise BASIC ROM v1.0, Part 1",
            "mode": "standalone",
            "name": "BASIC 1.0 - EPROM 1-2 (198x)(Enterprise).bin",
            "note": "Alternative: both parts needed together as substitute for basic10.bin",
            "path": "Enterprise/BASIC 1.0 - EPROM 1-2 (198x)(Enterprise).bin",
            "required": false,
            "size": 8193,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:653-660"
          },
          {
            "crc32": "c5298c79",
            "description": "Enterprise BASIC ROM v1.0, Part 2",
            "mode": "standalone",
            "name": "BASIC 1.0 - EPROM 2-2 (198x)(Enterprise).bin",
            "note": "Alternative: both parts needed together as substitute for basic10.bin",
            "path": "Enterprise/BASIC 1.0 - EPROM 2-2 (198x)(Enterprise).bin",
            "required": false,
            "size": 8193,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:661-668"
          },
          {
            "crc32": "683cf455",
            "description": "Enterprise BASIC ROM v1.1",
            "mode": "standalone",
            "name": "basic11.bin",
            "note": "Alternative BASIC version",
            "path": "Enterprise/basic11.bin",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:669-676"
          },
          {
            "crc32": "c96b7602",
            "description": "Enterprise BASIC ROM v1.1, with trailing byte",
            "mode": "standalone",
            "name": "BASIC 1.1 - EPROM 1.1 (198x)(Enterprise).bin",
            "note": "Alternative format of BASIC v1.1 with trailing byte",
            "path": "Enterprise/BASIC 1.1 - EPROM 1.1 (198x)(Enterprise).bin",
            "required": false,
            "size": 16385,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:677-684"
          },
          {
            "aliases": [
              "BASIC Interpreter v2.1 (1985)(Intelligent Software).bin",
              "BASIC Interpreter v2.1 (1985)(Intelligent Software)[a].bin"
            ],
            "crc32": "55f96251",
            "description": "Enterprise BASIC ROM v2.1",
            "mode": "standalone",
            "name": "basic21.bin",
            "note": "Alternative BASIC version",
            "path": "Enterprise/basic21.bin",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:685-693"
          },
          {
            "aliases": [
              "EPDOS v1.7 (19xx)(Haluska, Laszlo).bin"
            ],
            "crc32": "201319eb",
            "description": "Enterprise EPDOS ROM",
            "mode": "standalone",
            "name": "epdos.bin",
            "note": "Conditional: needed for EPDOS disk interface",
            "path": "Enterprise/epdos.bin",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:698-705"
          },
          {
            "aliases": [
              "EX-DOS EPROM (198x)(Enterprise).bin"
            ],
            "crc32": "e6daa0e9",
            "description": "Enterprise EXDOS ROM",
            "mode": "standalone",
            "name": "exdos.bin",
            "note": "Conditional: needed when DOS is set to EXDOS",
            "path": "Enterprise/exdos.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:709-716"
          },
          {
            "crc32": "6d0c8a28",
            "description": "Macintosh 128k ROM",
            "mode": "standalone",
            "name": "mac128k.rom",
            "note": "Required for Macintosh 128k model",
            "path": "Macintosh/mac128k.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:724-731"
          },
          {
            "crc32": "cf759e0d",
            "description": "Macintosh 512k ROM",
            "mode": "standalone",
            "name": "mac512k.rom",
            "note": "Required for Macintosh 512k model",
            "path": "Macintosh/mac512k.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:732-739"
          },
          {
            "crc32": "4fa5b399",
            "description": "Macintosh Plus ROM",
            "mode": "standalone",
            "name": "macplus.rom",
            "note": "Required for Macintosh 512ke and Plus models",
            "path": "Macintosh/macplus.rom",
            "required": true,
            "size": 131072,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:740-751"
          },
          {
            "crc32": "0072ed54",
            "description": "European/US Master System BIOS",
            "mode": "standalone",
            "name": "bios.sms",
            "note": "Optional. Boots cartridge directly if absent.",
            "path": "MasterSystem/bios.sms",
            "region": [
              "north-america",
              "europe"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:764-771"
          },
          {
            "crc32": "48d44a13",
            "description": "Japanese Master System BIOS",
            "mode": "standalone",
            "name": "japanese-bios.sms",
            "note": "Optional. Used for Japan region. Boots without if absent.",
            "path": "MasterSystem/japanese-bios.sms",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:756-763"
          },
          {
            "aliases": [
              "MSX.ROM"
            ],
            "crc32": "94ee12f3",
            "description": "Generic MSX BIOS",
            "mode": "standalone",
            "name": "msx.rom",
            "note": "Required for MSX1. Region bytes patched in memory if regional BIOS absent.",
            "path": "MSX/MSX.ROM",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:777-784"
          },
          {
            "crc32": "ee229390",
            "description": "Japanese MSX BIOS",
            "mode": "standalone",
            "name": "msx-japanese.rom",
            "note": "Alternative to msx.rom for Japanese region",
            "path": "MSX/msx-japanese.rom",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:785-792"
          },
          {
            "description": "American MSX BIOS",
            "mode": "standalone",
            "name": "msx-american.rom",
            "note": "Alternative to msx.rom for American region",
            "path": "MSX/msx-american.rom",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:793-800"
          },
          {
            "description": "European MSX BIOS",
            "mode": "standalone",
            "name": "msx-european.rom",
            "note": "Alternative to msx.rom for European region",
            "path": "MSX/msx-european.rom",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:801-808"
          },
          {
            "crc32": "721f61df",
            "description": "MSX-DOS ROM",
            "mode": "standalone",
            "name": "disk.rom",
            "note": "Conditional: needed for disk drive support",
            "path": "MSX/disk.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:809-816"
          },
          {
            "aliases": [
              "MSX2.ROM"
            ],
            "crc32": "6cdaf3a5",
            "description": "Generic MSX2 BIOS",
            "mode": "standalone",
            "name": "msx2.rom",
            "note": "Required for MSX2",
            "path": "MSX/MSX2.ROM",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:818-825"
          },
          {
            "aliases": [
              "MSX2EXT.ROM"
            ],
            "crc32": "66237ecf",
            "description": "MSX2 extension ROM",
            "mode": "standalone",
            "name": "msx2ext.rom",
            "note": "Required for MSX2",
            "path": "MSX/MSX2EXT.ROM",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:826-833"
          },
          {
            "crc32": "0e84505d",
            "description": "MSX-MUSIC / FM-PAC ROM",
            "mode": "standalone",
            "name": "fmpac.rom",
            "note": "Conditional: needed for MSX-Music support",
            "path": "MSX/fmpac.rom",
            "required": false,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:834-841"
          },
          {
            "crc32": "f18710b4",
            "description": "Oric BASIC 1.0",
            "mode": "standalone",
            "name": "basic10.rom",
            "note": "Required for Oric-1 model",
            "path": "Oric/basic10.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:870-877"
          },
          {
            "crc32": "c3a92bef",
            "description": "Oric BASIC 1.1",
            "mode": "standalone",
            "name": "basic11.rom",
            "note": "Required for Oric Atmos model",
            "path": "Oric/basic11.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:878-885"
          },
          {
            "crc32": "58079502",
            "description": "Pravetz BASIC",
            "mode": "standalone",
            "name": "pravetz.rom",
            "note": "Required for Pravetz 8D model",
            "path": "Oric/pravetz.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:886-893"
          },
          {
            "crc32": "d50fca65",
            "description": "Oric colour ROM (128-byte version)",
            "mode": "standalone",
            "name": "colour.rom",
            "note": "Optional. Enables colour video output.",
            "path": "Oric/colour.rom",
            "required": false,
            "size": 128,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:846-853"
          },
          {
            "crc32": "1ab9b572",
            "description": "Oric colour ROM (256-byte version)",
            "mode": "standalone",
            "name": "ORIC.PAL-PROM-TBP24S10-1ab9b572.bin",
            "note": "Optional. Alternative colour ROM.",
            "path": "Oric/ORIC.PAL-PROM-TBP24S10-1ab9b572.bin",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:854-861"
          },
          {
            "crc32": "1576a69b",
            "description": "Pravetz 8D colour ROM",
            "mode": "standalone",
            "name": "PRAVETZ-8D.PAL-PROM-82S129-1576a69b.bin",
            "note": "Optional. Colour ROM for Pravetz model.",
            "path": "Oric/PRAVETZ-8D.PAL-PROM-82S129-1576a69b.bin",
            "required": false,
            "size": 256,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:862-869"
          },
          {
            "crc32": "61952e34",
            "description": "Oric Byte Drive 500 ROM",
            "mode": "standalone",
            "name": "bd500.rom",
            "note": "Conditional: needed for Byte Drive 500 disk interface",
            "path": "Oric/bd500.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:894-901"
          },
          {
            "crc32": "37220e89",
            "description": "Oric Jasmin ROM",
            "mode": "standalone",
            "name": "jasmin.rom",
            "note": "Conditional: needed for Jasmin disk interface",
            "path": "Oric/jasmin.rom",
            "required": false,
            "size": 2048,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:902-909"
          },
          {
            "crc32": "a9664a9c",
            "description": "Oric Microdisc ROM",
            "mode": "standalone",
            "name": "microdisc.rom",
            "note": "Conditional: needed for Microdisc disk interface",
            "path": "Oric/microdisc.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:910-917"
          },
          {
            "crc32": "49a74c06",
            "description": "8DOS boot ROM",
            "mode": "standalone",
            "name": "8dos.rom",
            "note": "Conditional: needed for Pravetz 8-DOS disk interface",
            "path": "Oric/8dos.rom",
            "required": false,
            "size": 512,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:918-925"
          },
          {
            "crc32": "9576944c",
            "description": "8088 GLaBIOS 0.2.5",
            "mode": "standalone",
            "name": "GLABIOS_0.2.5_8T.ROM",
            "note": "Required for XT-class emulation",
            "path": "PCCompatible/GLABIOS_0.2.5_8T.ROM",
            "required": true,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:930-937"
          },
          {
            "crc32": "371ea3f1",
            "description": "AT GLaTICK 0.8.5 RTC option ROM",
            "mode": "standalone",
            "name": "GLaTICK_0.8.5_AT.ROM",
            "note": "XT-class RTC option ROM",
            "path": "PCCompatible/GLaTICK_0.8.5_AT.ROM",
            "required": false,
            "size": 2048,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:938-945"
          },
          {
            "crc32": "8d0d318a",
            "description": "Phoenix 80286 BIOS 3.05",
            "mode": "standalone",
            "name": "Phoenix 80286 ROM BIOS Version 3.05.bin",
            "note": "Required for AT-class emulation (alternative to IBM AT BIOS)",
            "path": "PCCompatible/Phoenix 80286 ROM BIOS Version 3.05.bin",
            "required": true,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:946-953"
          },
          {
            "crc32": "674426be",
            "description": "IBM PC AT BIOS v3",
            "mode": "standalone",
            "name": "at-bios.bin",
            "note": "AT-class: single-file IBM AT BIOS (alternative to split U27/U47)",
            "path": "PCCompatible/at-bios.bin",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:954-961"
          },
          {
            "crc32": "4995be7a",
            "description": "IBM PC AT BIOS, Nov 1985, U27 chip",
            "mode": "standalone",
            "name": "BIOS_5170_15NOV85_U27_61X9266_27256.BIN",
            "note": "AT-class: split BIOS, used with U47 chip",
            "path": "PCCompatible/BIOS_5170_15NOV85_U27_61X9266_27256.BIN",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:962-969"
          },
          {
            "crc32": "c32713e4",
            "description": "IBM PC AT BIOS, Nov 1985, U47 chip",
            "mode": "standalone",
            "name": "BIOS_5170_15NOV85_U47_61X9265_27256.BIN",
            "note": "AT-class: split BIOS, used with U27 chip",
            "path": "PCCompatible/BIOS_5170_15NOV85_U47_61X9265_27256.BIN",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:970-977"
          },
          {
            "crc32": "a362ffe6",
            "description": "IBM CGA font",
            "mode": "standalone",
            "name": "CGA.F08",
            "note": "Required for CGA video adapter",
            "path": "PCCompatible/CGA.F08",
            "required": true,
            "size": 2048,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:978-985"
          },
          {
            "crc32": "7754882a",
            "description": "IBM MDA font",
            "mode": "standalone",
            "name": "EUMDA9.F14",
            "note": "Required for MDA video adapter",
            "path": "PCCompatible/EUMDA9.F14",
            "required": true,
            "size": 3584,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:986-993"
          },
          {
            "crc32": "2f2fbc40",
            "description": "IBM EGA BIOS",
            "mode": "standalone",
            "name": "ibm_6277356_ega_card_u44_27128.bin",
            "note": "Needed for EGA video adapter",
            "path": "PCCompatible/ibm_6277356_ega_card_u44_27128.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:994-1001"
          },
          {
            "crc32": "03b3f90d",
            "description": "IBM VGA BIOS",
            "mode": "standalone",
            "name": "ibm_vga.bin",
            "note": "Needed for VGA video adapter",
            "path": "PCCompatible/ibm_vga.bin",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1002-1009"
          },
          {
            "crc32": "ebacb791",
            "description": "IBM ROM BASIC 1.10",
            "mode": "standalone",
            "name": "ibm-basic-1.10.rom",
            "note": "Required for AT-class with IBM BIOS (not needed with Phoenix)",
            "path": "PCCompatible/ibm-basic-1.10.rom",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1010-1017"
          },
          {
            "crc32": "74eaae87",
            "description": "C16+4 BASIC ROM",
            "mode": "standalone",
            "name": "basic.318006-01.bin",
            "path": "Plus4/basic.318006-01.bin",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1046-1053"
          },
          {
            "crc32": "71c07bd4",
            "description": "C16+4 kernel, PAL-G revision 5",
            "mode": "standalone",
            "name": "kernal.318004-05.bin",
            "note": "Default kernel version requested by machine code",
            "path": "Plus4/kernal.318004-05.bin",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1038-1045"
          },
          {
            "crc32": "77bab934",
            "description": "C16+4 kernel, PAL-G revision 3",
            "mode": "standalone",
            "name": "kernal.318004-03.bin",
            "note": "Alternative kernel version (in catalogue but not default)",
            "path": "Plus4/kernal.318004-03.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1022-1029"
          },
          {
            "crc32": "be54ed79",
            "description": "C16+4 kernel, PAL-G revision 4",
            "mode": "standalone",
            "name": "kernal.318004-04.bin",
            "note": "Alternative kernel version (in catalogue but not default)",
            "path": "Plus4/kernal.318004-04.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1030-1037"
          },
          {
            "crc32": "f62d2f3a",
            "description": "Thomson MO5 ROM, version 1",
            "mode": "standalone",
            "name": "mo5-v1.0.rom",
            "path": "Thomson/mo5-v1.0.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1157-1164"
          },
          {
            "crc32": "237c60bf",
            "description": "Thomson MO5 ROM, version 1.1",
            "mode": "standalone",
            "name": "mo5-v1.1.rom",
            "path": "Thomson/mo5-v1.1.rom",
            "required": true,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1165-1172"
          },
          {
            "crc32": "45e859c6",
            "description": "Thomson MO6 ROM, version 1",
            "mode": "standalone",
            "name": "mo6-v1.rom",
            "path": "Thomson/mo6-v1.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1173-1180"
          },
          {
            "crc32": "b4430a3b",
            "description": "Thomson MO6 ROM, version 2",
            "mode": "standalone",
            "name": "mo6-v2.rom",
            "path": "Thomson/mo6-v2.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1181-1188"
          },
          {
            "crc32": "7a012322",
            "description": "Thomson MO6 ROM, version 3",
            "mode": "standalone",
            "name": "mo6-v3.rom",
            "path": "Thomson/mo6-v3.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1189-1196"
          },
          {
            "crc32": "fc173504",
            "description": "Olivetti Prodest PC128 ROM",
            "mode": "standalone",
            "name": "pc128.rom",
            "path": "Thomson/pc128.rom",
            "required": true,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1197-1204"
          },
          {
            "crc32": "5114c0a5",
            "description": "Thomson CD90-640 floppy controller ROM",
            "mode": "standalone",
            "name": "cd90-640.rom",
            "note": "Requested on top of the machine ROM when a disk is attached.",
            "path": "Thomson/cd90-640.rom",
            "required": false,
            "size": 1984,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1206-1213"
          },
          {
            "crc32": "db4c43c1",
            "description": "VIC-20 BASIC ROM",
            "mode": "standalone",
            "name": "basic.bin",
            "path": "Vic20/basic.bin",
            "required": true,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1218-1225"
          },
          {
            "crc32": "83e032a6",
            "description": "English-language VIC-20 character ROM",
            "mode": "standalone",
            "name": "characters-english.bin",
            "note": "Required for English region",
            "path": "Vic20/characters-english.bin",
            "region": [
              "north-america",
              "europe"
            ],
            "required": true,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1226-1233"
          },
          {
            "crc32": "4be07cb4",
            "description": "English-language PAL VIC-20 kernel ROM",
            "mode": "standalone",
            "name": "kernel-pal.bin",
            "note": "Required for English PAL region",
            "path": "Vic20/kernel-pal.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1234-1241"
          },
          {
            "crc32": "e5e7c174",
            "description": "English-language NTSC VIC-20 kernel ROM",
            "mode": "standalone",
            "name": "kernel-ntsc.bin",
            "note": "Required for English NTSC region",
            "path": "Vic20/kernel-ntsc.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1242-1249"
          },
          {
            "crc32": "7fc11454",
            "description": "Danish VIC-20 character ROM",
            "mode": "standalone",
            "name": "characters-danish.bin",
            "note": "Required for Danish region",
            "path": "Vic20/characters-danish.bin",
            "region": [
              "denmark"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1250-1257"
          },
          {
            "crc32": "02adaf16",
            "description": "Danish VIC-20 kernel ROM",
            "mode": "standalone",
            "name": "kernel-danish.bin",
            "note": "Required for Danish region",
            "path": "Vic20/kernel-danish.bin",
            "region": [
              "denmark"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1258-1265"
          },
          {
            "crc32": "fcfd8a4b",
            "description": "Japanese VIC-20 character ROM",
            "mode": "standalone",
            "name": "characters-japanese.bin",
            "note": "Required for Japanese region",
            "path": "Vic20/characters-japanese.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1266-1273"
          },
          {
            "crc32": "336900d7",
            "description": "Japanese VIC-20 kernel ROM",
            "mode": "standalone",
            "name": "kernel-japanese.bin",
            "note": "Required for Japanese region",
            "path": "Vic20/kernel-japanese.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1274-1281"
          },
          {
            "crc32": "d808551d",
            "description": "Swedish VIC-20 character ROM",
            "mode": "standalone",
            "name": "characters-swedish.bin",
            "note": "Required for Swedish region",
            "path": "Vic20/characters-swedish.bin",
            "region": [
              "sweden"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1282-1289"
          },
          {
            "crc32": "b2a60662",
            "description": "Swedish VIC-20 kernel ROM",
            "mode": "standalone",
            "name": "kernel-swedish.bin",
            "note": "Required for Swedish region",
            "path": "Vic20/kernel-swedish.bin",
            "region": [
              "sweden"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1290-1297"
          },
          {
            "crc32": "ddee531f",
            "description": "ZX Spectrum 48K ROM",
            "mode": "standalone",
            "name": "48.rom",
            "note": "Built into binary. Required for 16K/48K model.",
            "path": "ZXSpectrum/48.rom",
            "required": false,
            "size": 16384,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1302-1309, Machines/Utility/ROMLibrary.cpp:14539"
          },
          {
            "crc32": "2cbe8995",
            "description": "ZX Spectrum 128K ROM",
            "mode": "standalone",
            "name": "128.rom",
            "note": "Built into binary. Required for 128K model.",
            "path": "ZXSpectrum/128.rom",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1310-1317, Machines/Utility/ROMLibrary.cpp:14540"
          },
          {
            "crc32": "e7a517dc",
            "description": "ZX Spectrum +2 ROM",
            "mode": "standalone",
            "name": "plus2.rom",
            "note": "Built into binary. Required for +2 model.",
            "path": "ZXSpectrum/plus2.rom",
            "required": false,
            "size": 32768,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1318-1325, Machines/Utility/ROMLibrary.cpp:14541"
          },
          {
            "crc32": "96e3c17a",
            "description": "ZX Spectrum +2a/+3 ROM",
            "mode": "standalone",
            "name": "plus3.rom",
            "note": "Built into binary. Required for +2a/+3 model.",
            "path": "ZXSpectrum/plus3.rom",
            "required": false,
            "size": 65536,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1326-1336, Machines/Utility/ROMLibrary.cpp:14542"
          },
          {
            "crc32": "4c7fc597",
            "description": "ZX80 BASIC ROM",
            "mode": "standalone",
            "name": "zx80.rom",
            "note": "Built into binary. Required for ZX80 model.",
            "path": "ZX8081/zx80.rom",
            "required": false,
            "size": 4096,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1341-1348, Machines/Utility/ROMLibrary.cpp:14544"
          },
          {
            "crc32": "4b1dd6eb",
            "description": "ZX81 BASIC ROM",
            "mode": "standalone",
            "name": "zx81.rom",
            "note": "Built into binary. Required for ZX81 model.",
            "path": "ZX8081/zx81.rom",
            "required": false,
            "size": 8192,
            "source_ref": "Machines/Utility/ROMCatalogue.cpp:1349-1356, Machines/Utility/ROMLibrary.cpp:14545"
          }
        ],
        "notes": "Multi-system cycle-accurate emulator by Tom Harte. Used by Batocera and\nRetroBat as a standalone emulator. Invoked as clksignal with --rompath\npointing to the BIOS directory.\n\nROM resolution: {rompath}/{machine_name}/{filename}. Machine names are\nfixed strings per system (e.g. \"Enterprise\", \"Oric\", \"AmstradCPC\").\nBatocera passes --rompath=/userdata/bios/.\n\nAll ROMs are loaded via a centralized ROM::Request/ROMFetcher system.\nNo hash validation at runtime. CRC32s in the ROM catalogue are for host\nplatform identification only. Sizes are enforced via truncation/padding.\n\nBuilt-in ROMs (compiled into binary, no external file needed):\nAmstrad CPC (all 7), ZX Spectrum (all 4), ZX80 + ZX81. These systems\nfunction without external ROM files. User-supplied files override the\nbuilt-in copies.\n\nAtari 2600 requires no system ROM (cartridge-only).\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/TomHarte/CLK",
        "source_commit": "096de57445920ecf16cf066979422e34aceb843a",
        "systems": [
          "amstrad-cpc",
          "acorn-archimedes",
          "acorn-electron",
          "acorn-bbc-micro",
          "amiga",
          "apple-ii",
          "apple-iigs",
          "apple-macintosh",
          "atari-2600",
          "atari-st",
          "colecovision",
          "commodore-plus4",
          "commodore-vic20",
          "enterprise-64-128",
          "microsoft-msx",
          "microsoft-msx2",
          "oric",
          "pc-compatible",
          "sega-mastersystem",
          "sinclair-zx80-81",
          "sinclair-zx-spectrum",
          "thomson-mo5",
          "thomson-mo6"
        ],
        "type": "standalone",
        "upstream": "https://github.com/TomHarte/CLK"
      }
    },
    {
      "id": "clownmdemu",
      "profile": {
        "analysis": {
          "megacd_bios": {
            "bios_hle": true,
            "boot_rom_location": "source/mega-cd-boot-rom.c (16384 uint16 entries = 32 KB)",
            "boot_rom_source": "https://github.com/Clownacy/clownmdemu-mcd-boot",
            "builtin_boot_rom": true,
            "bus_mapping": "0x400000-0x41FFFF (address & 0x20000 == 0)",
            "external_required": false,
            "hle_source_ref": "bus-sub-m68k.c:64 (MegaCDBIOSCall)",
            "source_ref": "bus-main-m68k.c:19-21, bus-main-m68k.c:501-513"
          },
          "tmss": {
            "supported": false
          }
        },
        "core_classification": "official_port",
        "core_version": "Git",
        "cores": [
          "clownmdemu"
        ],
        "display_name": "Sega - MD/CD (ClownMDEmu)",
        "emulator": "ClownMDEmu",
        "files": [],
        "notes": "Mega Drive/Genesis and Mega CD emulator by Clownacy. Supports cartridge\n(bin/md/gen) and CD (cue/iso/chd) formats, plus a subsystem for\ncartridge+CD combo (Mega CD Mode 1). Mega CD boot ROM is an open-source\nreplacement compiled into the binary (mega-cd-boot-rom.c, 32 KB). Sub-CPU\nBIOS calls handled via HLE. TMSS not implemented. No external files needed.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/Clownacy/clownmdemu-libretro",
        "source_commit": "3b278c900c278678763d96087f1d343a6aed6e58",
        "systems": [
          "sega-megadrive",
          "sega-megacd"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/Clownacy/clownmdemu"
      }
    },
    {
      "id": "colem",
      "profile": {
        "core_classification": "other",
        "core_version": "5.6",
        "cores": [
          "colem"
        ],
        "display_name": "Coleco - ColecoVision / Adam (ColEm)",
        "emulator": "ColEm",
        "files": [
          {
            "description": "OS7 ColecoVision BIOS, read into the 8kB ROM_OS7 window",
            "min_size": 8192,
            "name": "COLECO.ROM",
            "required": true,
            "source_ref": "ColEm/Coleco.c:266-273, 306; ColEm/Coleco.h:78-79",
            "system": "coleco-colecovision",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Adam SmartWriter ROM, read into the 32kB ROM_WRITER window",
            "min_size": 32768,
            "name": "WRITER.ROM",
            "required": true,
            "source_ref": "ColEm/Coleco.c:275-285, 300, 749; ColEm/Coleco.h:75",
            "system": "coleco-adam",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Adam EOS, read into the 8kB ROM_EOS window",
            "min_size": 8192,
            "name": "EOS.ROM",
            "required": true,
            "source_ref": "ColEm/Coleco.c:287-297, 300, 749; ColEm/Coleco.h:83",
            "system": "coleco-adam",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "ColecoVision and Coleco Adam emulator by Marat Fayzullin, published as\nversioned archives on a personal site rather than a repository. The 5.6\nsource archive carries the portable core (ColEm/, EMULib/, Z80/) and the\nUnix port; Windows and Android builds are binary-only.\n\nThree system ROMs are read by StartColeco (Coleco.c:266-300) before the\nhardware reset and before the cartridge. Lookup runs in the directory\nnamed by -home, which main() defaults to the directory holding the\nexecutable (ColEm.c:66-72), so the ROMs sit next to the binary the way the\nofficial archives ship them. Each name is passed to fopen as written, in\nuppercase.\n\nCOLECO.ROM is fatal. A failed open or a file yielding fewer than 8192\nbytes sets the error string, and StartColeco returns before ResetColeco\nand RunZ80 (Coleco.c:306). It is loaded in both modes and maps at 0000h\non the ColecoVision and under the Super Game Module (Coleco.c:651).\nNothing in the tree substitutes for it.\n\nWRITER.ROM and EOS.ROM gate Adam emulation. Each has to yield its full\nread to advance the AdamROMs counter, EOS.ROM is attempted only once\nWRITER.ROM succeeded, and Coleco.c:300 collapses the counter unless both\nlanded. ResetColeco then clears CV_ADAM when the counter is zero\n(Coleco.c:749), so -adam falls back to ColecoVision, and inserting the\nfirst disk or tape into drive A: is refused (Coleco.c:1454, 1460, 1496,\n1502). SmartWriter maps at 0000h on boot and EOS at 4000h once port 20h\nenables it (Coleco.c:628-646).\n\nNo hash or magic number is checked on the three ROMs; the read length is\nthe only gate. CRC32 is computed for cartridges alone, feeding the\nGuessROM hardware heuristics (Coleco.c:482-486).\n\nCartridges, .DSK/.FDI disks and .DDP tapes are user content. Beside a\nloaded cartridge, FindState (Coleco.c:1529-1548) probes <name>.sav,\n<name>.sta, <name>.cht and <name>.pal, and StartColeco tries the palette\nfile named by -palette, defaulting to ColEm.pal (Coleco.c:75, 327-332).\nThose are written by the emulator or hand-authored, and ChangePalette\nsupplies one of three built-in palettes when no file is found\n(Coleco.c:324, 543). Console fonts are compiled-in arrays (Console.c:46,\n130), and LoadPNG (Image.c:1230) sits behind an undefined LIBPNG guard\nwith no caller.\n",
        "profiled_date": "2026-08-08",
        "source": "https://fms.komkon.org/ColEm/",
        "systems": [
          "coleco-colecovision",
          "coleco-adam"
        ],
        "type": "standalone",
        "upstream": "https://fms.komkon.org/ColEm/"
      }
    },
    {
      "id": "cpcemu",
      "profile": {
        "core_classification": "other",
        "core_version": "3.0.2",
        "cores": [
          "cpcemu"
        ],
        "display_name": "Amstrad - CPC (CPCemu)",
        "emulator": "CPCemu",
        "files": [
          {
            "md5": "b96280dc6c95a48857b4b8eb931533ae",
            "min_size": 32768,
            "name": "CPC6128.ROM",
            "note": "CPC 6128 firmware and BASIC. Loaded for the shipped CPC_TYPE 2 and opened twice, once per block. Foreground ROM header 80 01 02 00.",
            "path": "ROM/CPC6128.ROM",
            "required": true,
            "sha1": "5977adbad3f7c1e0e082cd02fe76a700d9860c30",
            "source_ref": "CPCemu 2.5/3.0.2: ROM/CPC6128.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 2, 4 and 5",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "a993f85b88ac4350cf4d41554e87fe4f",
            "min_size": 32768,
            "name": "CPC464.ROM",
            "note": "CPC 464 firmware and BASIC, selected by CPC_TYPE 0 or the -t 0 command line. Foreground ROM header 80 01 00 00.",
            "path": "ROM/CPC464.ROM",
            "required": false,
            "sha1": "56d39c463da60968d93e58b4ba0e675829412a20",
            "source_ref": "CPCemu 2.5/3.0.2: ROM/CPC464.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 0 and 3",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "5a384a2310f472c7857888371c00ed66",
            "min_size": 32768,
            "name": "CPC664.ROM",
            "note": "CPC 664 firmware and BASIC, selected by CPC_TYPE 1 or the -t 1 command line. Foreground ROM header 80 01 01 00.",
            "path": "ROM/CPC664.ROM",
            "required": false,
            "sha1": "073a7665527b5bd8a148747a3947dbd3328682c8",
            "source_ref": "CPCemu 2.5/3.0.2: ROM/CPC664.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 1",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "aa2fb251814bd971b2b9874ab0971b3f",
            "name": "CPCADOS.ROM",
            "note": "AMSDOS disc ROM, the 8 KB image zero-padded to 16 KB. Declared for every machine by the shipped configuration, so startup ends on status 3 without it; dropping the ROM_BLOCK line instead boots with \"ROM: No AMSDOS ROM found.\" and no disc support. Length is not checked, an 8 KB file installs the AMSDOS speedup all the same.",
            "path": "ROM/CPCADOS.ROM",
            "required": true,
            "sha1": "0e247123b9d3204784eeadb4629b9d35b9dfd984",
            "size": 16384,
            "source_ref": "CPCemu 2.5/3.0.2: ROM/CPCADOS.ROM, cpcemu0.cfg ROM_BLOCK 7 for every CPC_TYPE",
            "system": "amstrad-cpc"
          },
          {
            "md5": "28a7e368badca8299ba24a15bb4ebe9b",
            "name": "M4.ROM",
            "note": "M4 board firmware by Duke. Declared by the shipped configuration, so startup ends on status 3 without it even when M4_ENABLED is 0. Contents are checked, a zeroed file boots and reports \"M4 ROM not valid.\"",
            "path": "ROM/M4.ROM",
            "required": true,
            "sha1": "05f9447d307ab17eae9e2100f91c36b0c9560d4b",
            "size": 16384,
            "source_ref": "CPCemu 2.5/3.0.2: ROM/M4.ROM, cpcemu0.cfg ROM_BLOCK 6, M4_ENABLED = 1",
            "system": "amstrad-cpc",
            "validation": [
              "signature"
            ]
          },
          {
            "md5": "ffcbcbce32223a152753d30766ad6215",
            "name": "HACK.ROM",
            "note": "M4 hack ROM, the lower ROM behind the Shift+F1 menu. Opened at every startup, and superseded by a NMIROM.BIN on the emulated SD card. Missing prints \"Unable to load HACK.ROM\" and emulation continues.",
            "path": "ROM/HACK.ROM",
            "required": false,
            "sha1": "582dd1706391f6f0161ad3486ae75a04fb0f7d5b",
            "size": 7994,
            "source_ref": "CPCemu 2.5/3.0.2: ROM_PATH + /HACK.ROM, opened after M4_SD_PATH + NMIROM.BIN",
            "system": "amstrad-cpc"
          },
          {
            "md5": "b96280dc6c95a48857b4b8eb931533ae",
            "min_size": 32768,
            "name": "CPC6128.ROM.UK",
            "note": "English CPC 6128 firmware, the same image as CPC6128.ROM. Ships in the National folder without being named by any path constant.",
            "path": "ROM/National/CPC6128.ROM.UK",
            "region": [
              "uk"
            ],
            "required": false,
            "sha1": "5977adbad3f7c1e0e082cd02fe76a700d9860c30",
            "source_ref": "CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.UK",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "5ee871d5600eb9b5a22989c295f902a5",
            "min_size": 32768,
            "name": "CPC6128.ROM.FR",
            "note": "French CPC 6128 firmware, configured when the French layout is picked.",
            "path": "ROM/National/CPC6128.ROM.FR",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "200d59076dfef36db061d6d7d21d80021cab1237",
            "source_ref": "CPCemu 3.0.2: National/CPC6128.ROM.FR, keyboard layout dialog on first start",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "0246740371010333385665dfeb7cd0ec",
            "min_size": 32768,
            "name": "CPC6128.ROM.ES",
            "note": "Spanish CPC 6128 firmware, configured when the Spanish layout is picked.",
            "path": "ROM/National/CPC6128.ROM.ES",
            "region": [
              "spain"
            ],
            "required": false,
            "sha1": "1acd01c2c03424a78b32c9440f4d890fb1104815",
            "source_ref": "CPCemu 3.0.2: National/CPC6128.ROM.ES, keyboard layout dialog on first start",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "ca1635fd992e2aa7a776b30da13467e5",
            "min_size": 32768,
            "name": "CPC6128.ROM.DK",
            "note": "Danish CPC 6128 firmware, configured when the Danish layout is picked.",
            "path": "ROM/National/CPC6128.ROM.DK",
            "region": [
              "denmark"
            ],
            "required": false,
            "sha1": "a9e7ee6355730f319a37c95ca0a714212b88c3b1",
            "source_ref": "CPCemu 3.0.2: National/CPC6128.ROM.DK, keyboard layout dialog on first start",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "8ca256a832e83c875f5432b3dee8a36f",
            "min_size": 32768,
            "name": "CPC6128.ROM.SE",
            "note": "Swedish CPC 6128 firmware. Ships in the National folder without being named by any path constant, the layout dialog offering English, French, Spanish and Danish only.",
            "path": "ROM/National/CPC6128.ROM.SE",
            "region": [
              "sweden"
            ],
            "required": false,
            "sha1": "6765a91a42fed68a807325bf62a728e5ac5d622f",
            "source_ref": "CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.SE",
            "system": "amstrad-cpc",
            "validation": [
              "size",
              "signature"
            ]
          },
          {
            "md5": "1d91a9ef315b302d335cd7e04e8d8d86",
            "name": "XDDOS210.ROM",
            "note": "X-DDOS 2.10 by Dobbertin, the disc operating system of the HD20 hard disk. Required in a ROM slot to use DOBBERTIN_HD_ENABLED = 1. Added in 3.0, not shipped with 2.5.",
            "path": "ROM/XDDOS210.ROM",
            "required": false,
            "sha1": "2f1bd4d6e2d2e62818b01e6e7a26488362a7a8ee",
            "size": 16384,
            "source_ref": "CPCemu 3.0.2: ROM/XDDOS210.ROM, cpcemu0.cfg commented ROM_BLOCK 7, help topic DOBBERTIN HD20 ENABLED",
            "system": "amstrad-cpc"
          },
          {
            "md5": "e9c4288eab8885a1e6ae7504a4736115",
            "name": "COPYMATE.ROM",
            "note": "Copy utility ROM, carrying a 128-byte AMSDOS file header ahead of the 16 KB image. Shipped as the example expansion ROM of the configuration file and loaded once the line is uncommented.",
            "path": "ROM/COPYMATE.ROM",
            "required": false,
            "sha1": "15d52de01320d9b954e03b4c2e71ec75fd301bbb",
            "size": 16512,
            "source_ref": "CPCemu 2.5/3.0.2: ROM/COPYMATE.ROM, cpcemu0.cfg commented ROM_BLOCK 4",
            "system": "amstrad-cpc"
          },
          {
            "md5": "4c9f014e91d407cc6509fad0095ab909",
            "name": "multface.rom",
            "note": "Romantic Robot Multiface Two ROM. Ships in the ROM folder for the user to map into a slot, no path constant naming it.",
            "path": "ROM/multface.rom",
            "required": false,
            "sha1": "1431ec628d38f000715545dd2186b684c5fe5a6f",
            "size": 8192,
            "source_ref": "CPCemu 2.5/3.0.2: ROM/multface.rom, ROM_BLOCK filename or ROM Manager entry",
            "system": "amstrad-cpc"
          }
        ],
        "mode": "standalone",
        "notes": "Amstrad CPC emulator by Marco Vieth and Rainer Loritz, closed-source freeware\nfor Windows, macOS, Linux, Android and iOS. Machines are the CPC 464, 664 and\n6128; the firmware identifier and the message catalogue also know the 464+,\nthe 6128+ and the KC compact.\n\nTwo packages were used. The 3.0.2 Windows portable and macOS builds of\n2025-04-24 carry the same fourteen ROM files and the same data files, and\nprovide the path constants, the message catalogue and the v3.0 help file. The\n2.5 Linux x86-64 build of 2022-08-13 is still the newest Linux release, the\n3.0.2 Linux archives listed on the download page being absent from the\nserver, and provides the runtime behaviour:\nfile opens traced with strace, required and optional decided by removing,\ntruncating and patching each file and reading the emulator's own messages.\n\nROMs live in ROM_PATH, \"./ROM/\" in the shipped configuration, resolved against\nthe working directory; the macOS build reads them from the application bundle\nResources folder. Slots are filled by ROM_BLOCK lines naming a ROM number, a\nfile in ROM_PATH and a 16 KB block position inside that file:\n\n  ROM_BLOCK = 255, \"CPC6128.ROM\", 0    lower ROM\n  ROM_BLOCK = 0  , \"CPC6128.ROM\", 1    foreground ROM\n  ROM_BLOCK = 7  , \"CPCADOS.ROM\", 0    AMSDOS\n  ROM_BLOCK = 6  , \"M4.ROM\"     , 0    M4 board\n\nThe shipped cpcemu0.cfg repeats the first three for every CPC_TYPE from 0 to\n5, with CPC464.ROM for types 0 and 3, CPC664.ROM for type 1 and CPC6128.ROM\nfor types 2, 4 and 5, and adds the M4 line once for all types. A file named by\na ROM_BLOCK line that cannot be opened prints \"ROM: Cannot open file\" and ends\nthe process with status 3 before audio initialisation, whichever slot it fills\nand whether or not the matching device is enabled; deleting the line instead\nlets the emulator start.\n\nThe machine is identified from the foreground ROM, not from the lower half and\nnot from CPC_TYPE. CPCemu reads the four-byte CPC ROM header at the start of\nblock 1: byte 0 has to be 0x80, and byte 2 selects the machine, 0x00 for the\n464, 0x01 for the 664, 0x02 for the 6128. A random block 1 gives \"ROM: No\nforeground ROM found.\", an unlisted version byte gives \"ROM: Unknown ROM\nversion.\", and both end on \"CPC type not configured or ROM for CPC type not\navailable. Unable to continue.\" The modification byte is ignored, the lower\n16 KB half is never inspected, and padding past 32768 bytes is accepted, so\nthe length requirement is a lower bound: a block 1 has to exist.\n\nTypes 3, 4 and 5 need ROM images the packages do not carry. The help file\nstates they have to be supplied in CPCEMU.CFG first, and no filename for them\nis compiled into the binary, the user names the file in the ROM_BLOCK line.\nLeft on the shipped configuration those types load the 464 and 6128 files and\nreport the machine those files describe. There is no cartridge support, the\nfile types handled on the command line are dsk, sna, cfg and zip.\n\nM4 board emulation is on by default. HACK.ROM, the board's lower ROM, is\nopened at every startup whatever M4_ENABLED holds, after M4_SD_PATH +\nNMIROM.BIN has been tried, so a NMIROM.BIN placed on the emulated SD card\nreplaces it; with neither present the emulator prints \"Unable to load\nHACK.ROM\" and keeps running. M4.ROM contents are checked, a zeroed file boots\nthe CPC and reports \"M4 ROM not valid.\" The firmware updater downloads\nM4FIRM.BIN from spinpoint.org and rewrites M4.ROM and HACK.ROM in place.\n\nAlongside the ROMs the binary reads its own payload from the program\ndirectory: cpcemu.msg, the message catalogue, whose absence leaves every\nmessage unprinted; cpcemu.dat, colours and key tables; cpcemu.hlp, the online\nhelp opened on F1; cpcemu.dbf, the poke database opened from the poke menu;\nand cpcemu0.cfg, the template used when no user configuration exists.\nConfiguration is looked up first in the user profile, ~/.CPCemu/cpcemu.cfg on\nLinux, then cpcemu0.cfg in the working directory; with neither, startup stops\non \"CPCEMU: Use INSTALL first\". The disc, tape and snapshot folders and the\nM4 SD card folder hold user content.\n",
        "profiled_date": "2026-08-08",
        "source": "https://www.cpc-emu.org/",
        "systems": [
          "amstrad-cpc"
        ],
        "type": "standalone",
        "upstream": "https://www.cpc-emu.org/"
      }
    },
    {
      "id": "craft",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "craft"
        ],
        "display_name": "Minecraft (Craft)",
        "emulator": "Craft",
        "files": [],
        "notes": "Libretro port of Craft, a simple Minecraft clone by Michael Fogleman. All textures, fonts, and shaders are embedded in the binary (header arrays). Upstream loads textures from external PNG files; libretro port compiles them in. Uses system directory only for craft.db/auth.db (core-generated save data). Source has zero fopen calls. .info declares no firmware.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/Craft",
        "source_commit": "675c5b2fc690d2e80f6099f46407bf23827c59d4",
        "source_ref": "libretro/libretro.c, src/main.c:2680-2698, src/main.c:3315-3345",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/fogleman/Craft"
      }
    },
    {
      "id": "crocods",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v1",
        "cores": [
          "crocods"
        ],
        "display_name": "Amstrad - CPC (CrocoDS)",
        "emulator": "CrocoDS",
        "files": [],
        "notes": "CrocoDS is an Amstrad CPC 6128 emulator ported to libretro. Supports\n.dsk, .sna, and .kcr file formats.\n\nAll system ROMs are compiled directly into the core binary as C byte\narrays. No external BIOS files are required.\n\nEmbedded ROMs (crocods-core/):\n  - cpc6128.bin.c: cpc6128_bin[32768] - CPC 6128 OS (16KB) + BASIC 1.1 (16KB)\n  - romdisc.bin.c: romdisc_bin[16384] - AMSDOS disk controller ROM (16KB)\n\nROM initialization in InitMemCPC() (crocods-core/vga.c:185-200):\n  - ROMINF (lower ROM, 16KB): first half of cpc6128_bin (OS)\n  - ROMEXT[0] (upper ROM slot 0, 16KB): second half of cpc6128_bin (BASIC)\n  - ROMEXT[7] (upper ROM slot 7, 16KB): romdisc_bin (AMSDOS)\n\nCalled from HardResetCPC() (crocods-core/platform.c:1009-1020) using\nthe extern byte arrays directly. No filesystem ROM loading exists in\nthe libretro path.\n\nA Multiface ROM loader exists (crocods-core/multiface.c:51-61) that\nreads LocRomMulti via fopen(), but InitMultiface() is never called\nfrom the libretro build or platform.c. Dead code in libretro context.\n\nThe core does not request retro_system_directory or declare any\nfirmware entries in the .info file. need_fullpath is false.\n\nOnly the CPC 6128 model is emulated (no CPC 464/664 selection).\n",
        "platform_details": {
          "bios_mapping": {
            "note": "All ROMs are embedded. InitMemCPC() copies cpc6128_bin and romdisc_bin\ninto ROMINF and ROMEXT arrays via memcpy. No filesystem lookup occurs.\nretro_set_environment() does not request system_directory.\n",
            "source_ref": "crocods-core/vga.c:185-200, crocods-core/platform.c:1009-1020"
          },
          "embedded_roms": {
            "note": "2 ROM sets embedded as C byte arrays:\ncpc6128_bin (32KB) - CPC 6128 OS (lower 16KB) + BASIC 1.1 (upper 16KB)\nromdisc_bin (16KB) - AMSDOS disk controller ROM, mapped to slot 7\n",
            "source_ref": "crocods-core/cpc6128.bin.c, crocods-core/romdisc.bin.c"
          },
          "model_rom_map": {
            "note": "CPC 6128 only: OS in ROMINF, BASIC in ROMEXT[0], AMSDOS in ROMEXT[7]\nemulator_patch_ROM() applies language patches to ROMINF after loading\n",
            "source_ref": "crocods-core/vga.c:189-192"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-crocods",
        "source_commit": "a320f6e38af49af84a63f81329a1bdb9322022b4",
        "systems": [
          "amstrad-cpc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/redbug26/crocods-core"
      }
    },
    {
      "id": "cruzes",
      "profile": {
        "analysis": {
          "author": "Higor Euripedes",
          "file_loading": "none",
          "is_experimental": true,
          "license": "2-clause BSD",
          "need_fullpath": false,
          "supports_no_game": true,
          "system_directory_used": false
        },
        "core_classification": "pure_libretro",
        "core_version": "0.1",
        "cores": [
          "cruzes"
        ],
        "display_name": "Cruzes",
        "emulator": "Cruzes",
        "exclusion_note": "Game core with no external file dependencies. All assets compiled in.\n",
        "files": [],
        "notes": "Unfinished Picross puzzle game, part of the libretro-samples repository.\nNo separate upstream -- written directly for the libretro API.\n\nsupports_no_game true (cruzes.c:772), valid_extensions \"\" (cruzes.c:749).\nPuzzle grid hardcoded in retro_init (cruzes.c:706-717) via load_challenge.\nretro_load_game (cruzes.c:728-732) sets pixel format and returns true.\nNo file I/O, no RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY call.\n\nFont data (Carlito-Regular.ttf) compiled in via ttf2c (font10.h, font16.h,\nfont24.h).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-samples/tree/master/tests/cruzes",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [
          "game"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "cspect",
      "profile": {
        "core_classification": "other",
        "core_version": "3.3.1.0",
        "cores": [
          "cspect"
        ],
        "display_name": "Sinclair - ZX Spectrum Next (#CSpect)",
        "emulator": "CSpect",
        "files": [
          {
            "description": "NextZXOS and BASIC ROM",
            "min_size": 65536,
            "name": "enNextZX.rom",
            "note": "Paged as four 16K banks, so anything shorter than 65536 bytes leaves the top bank unreadable. The image failing to hold it ends the process through Environment.FailFast. Bytes 6 and 7 carry the NextZXOS version as b[6] + ((b[7] & 0x0f) << 8), and a value of 518 or less clears the flag that arms the program counter watch the CPU runs before each instruction.",
            "path": "machines/next/enNextZX.rom",
            "required": true,
            "source_ref": "CSpect.exe 3.3.1.0 a.H::e() IL_00bd-IL_00c9, a.H::e() IL_0102-IL_0149, a.H::N(int32) IL_0051-IL_0086, A.h::a(string[]) IL_0637-IL_0644",
            "system": "sinclair-zx-spectrum-next"
          },
          {
            "description": "DivMMC ROM, the esxDOS layer over the SD card",
            "min_size": 8192,
            "name": "enNxtmmc.rom",
            "note": "Read into the 8K DivMMC bank. Its absence ends the process through the same Environment.FailFast as enNextZX.rom, except under -fw, where the test is skipped because TBBLUE.FW replaces both reads.",
            "path": "machines/next/enNxtmmc.rom",
            "required": true,
            "source_ref": "CSpect.exe 3.3.1.0 a.H::e() IL_00da-IL_00e6, a.H::e() IL_010a-IL_012e, a.H::N(int32) IL_0087-IL_0097",
            "system": "sinclair-zx-spectrum-next"
          },
          {
            "aliases": [
              "enNextMF.rom"
            ],
            "description": "Multiface ROM",
            "min_size": 8192,
            "name": "enNextMf.rom",
            "note": "Read into the 8K Multiface bank with no test of any kind, so a card without it boots and runs. The bank read indexes the array directly, which faults the moment the Multiface is paged in.",
            "path": "machines/next/enNextMf.rom",
            "required": false,
            "source_ref": "CSpect.exe 3.3.1.0 a.H::e() IL_00eb-IL_00f7, a.H::N(int32) IL_00a1-IL_00b1",
            "system": "sinclair-zx-spectrum-next"
          },
          {
            "description": "FPGA core firmware",
            "name": "TBBLUE.FW",
            "note": "Read from the root of the card under -fw only, in place of the three ROMs. Word 0 of its header gives the payload offset as (n + 1) * 512 and word 1 the payload length as n * 512, and those bytes are written to memory from 0x6000. A .fw file named on the command line takes the same route.",
            "required": false,
            "source_ref": "CSpect.exe 3.3.1.0 a.H::e() IL_0016-IL_00bb, A.h::A(string[]) IL_0164-IL_0197, a.d::C(string) IL_014b-IL_01db",
            "system": "sinclair-zx-spectrum-next"
          },
          {
            "description": "ZX Spectrum Next SD card image",
            "name": "<sdcard>.img",
            "note": "The only route to the ROMs above. SDCard.Open reads its MBR and boot sector, which is also the test that decides whether a positional argument is a card or a game, and the DivMMC opens the same path read write as its card. A second image mounts on the second slot through -sd2=.",
            "required": true,
            "source_ref": "CSpect.exe 3.3.1.0 a.H::e() IL_000b-IL_0015, A.h::A(string) IL_0000-IL_00b6, A.h::A(string[]) IL_0697-IL_0773, B.R::.ctor(string), SDCardAccess.dll SDCard.cs:600-635",
            "system": "sinclair-zx-spectrum-next",
            "unsourceable": "A FAT image the user builds or downloads, under whatever name is passed to -mmc= or given as the positional argument. CSpect fetches the current one from https://zxnext.uk/hosted/ on demand, and the machine writes to it."
          }
        ],
        "notes": "ZX Spectrum Next emulator, assembler and debugger for Windows, macOS and\nLinux, written in C# against .NET Framework 4.8 and run under Mono elsewhere.\nIt is closed source and shipped as a zip from its itch.io page, so every\nreference below names a method and an IL offset in the CSpect.exe of 3.3.1.0.\nType and member names in that build are obfuscated and the string literals sit\nXOR encoded in one 18146 byte blob, decoded at class load by b[i] ^ i ^ 0xAA.\nref: CSpect.exe 3.3.1.0, ReadMe.txt:9-11\n\nThe machine carries no built-in ROM. A cold reset either loads the Next ROMs\nor allocates them zero filled, 65536 bytes for the ROM banks and 8192 each for\nthe DivMMC and Multiface ROMs. The loading branch runs when the Next ROM flag\nis set, which -nextrom and -fw do, which -mmc= does when its argument is an\nexisting file, and which a positional argument does when it opens as a FAT\nimage.\nref: CSpect.exe 3.3.1.0 a.H::A(bool) IL_01fe-IL_023c, A.h::A(string[])\n     IL_012b-IL_0197, A.h::A(string[]) IL_0697-IL_070e, A.h::a(string[])\n     IL_0131-IL_0150\n\nThe ROMs live inside the SD card image, not beside the executable. e() opens\nthe image through SDCardAccess.SDCard.Open and pulls each ROM out with\nSDCard.LoadFile, whose directory walk lowercases both sides of the comparison,\nso the spelling of these paths carries no weight. Memory pages enNextZX.rom as\nfour 16K banks and the other two as their first 8192 bytes.\nref: CSpect.exe 3.3.1.0 a.H::e() IL_000b-IL_00f7, a.H::N(int32)\n     IL_0051-IL_00b1, SDCardAccess.dll SDCard.cs:457-490, SDCard.cs:624-635\n\nES-DE launches it as mono CSpect.exe -zxnext -mmc=./ <rom> from the game\nfolder. An -mmc= naming a directory leaves the Next ROM flag clear, so the\n.nex file runs against the zero filled banks while the bundled esxDOS plugin\nanswers RST $08 out of that directory.\nref: es_systems.xml zxnext, A.h::A(string[]) IL_0697-IL_06f7, esxDOS.dll\n     CRST8.cs:286-302\n\nA positional argument ending in none of nex, sna, snx, rom or fw is taken for\na card image, and when no file sits at that path CSpect offers to fetch one:\nit reads https://zxnext.uk/hosted/ for the first href holding 8gb, unzips it\nand copies the single .img inside to the path that was asked for. The path is\nthen accepted only if its MBR and boot sector read. A .rom argument goes into\na 128 KB buffer entered at 0x6000 instead, and a .fw argument is unpacked\nthrough the TBBLUE.FW header.\nref: A.h::a(string[]) IL_00a6-IL_012c, A.h::b(string), A.h::B(string, string),\n     a.d::C(string) IL_0086-IL_01db\n\nWhat CSpect writes rather than reads: cspect_win.dat under -r for the window\nplacement, cspect.log for the session log, the F5 screenshots, and the -wad=\ncontainer under LocalApplicationData/CSpect, which is created when it does not\nexist. The debugger reads the symbol and map files that -map=, -zmap=, -clst=,\n-z88dk and -pasta80 name, all of them output of the user's own assembler. The\nWindows build probes its audio runtime with LoadLibrary(\"openal32.dll\") and\noffers to run the bundled oalinst.exe when that answers zero.\nref: B.E::e(), B.E::E(), a.V::.ctor(string), A.y::A(), A.y::A(bool, bool),\n     A.g::A(), A.h::a(string[]) IL_02dc-IL_034f\n",
        "profiled_date": "2026-08-11",
        "source": "https://mdf200.itch.io/cspect",
        "systems": [
          "sinclair-zx-spectrum-next",
          "sinclair-zx-spectrum"
        ],
        "type": "standalone",
        "upstream": "https://mdf200.itch.io/cspect",
        "verification": "existence"
      }
    },
    {
      "id": "cxbx-reloaded",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "CI-585c49a",
        "cores": [
          "cxbx-reloaded",
          "cxbx"
        ],
        "display_name": "Microsoft - Xbox / Sega Chihiro (Cxbx-Reloaded)",
        "emulator": "Cxbx-Reloaded",
        "exclusion_note": "Five host libraries the code names are not listed. ntdll.dll and the XInput libraries tried in turn, xinput1_4, xinput1_3 and xinput9_1_0, are Windows components resolved by the loader, and cxbxr-emu.dll is the emulator's own build output shipped beside cxbx.exe. xbdm.dll is not opened at all: the name is compared against the import table of the loaded XBE so the debug monitor imports can be thunked to the emulator's own implementations. Two further files belong to the title rather than the system: boot.id, read from the title directory for its region flags, and default.xbe. logo.bmp is only the name offered in the open and save dialogs of the XBE logo editor. ref: src/common/input/XInputPad.cpp:100-120,\n     src/core/kernel/init/CxbxKrnl.cpp:356-365,\n     src/devices/chihiro/MediaBoard.cpp:46-57,\n     src/gui/WndMain.cpp:880-890\n",
        "files": [
          {
            "description": "Chihiro media board flash ROM",
            "name": "fpr21042_m29w160et.bin",
            "note": "Checked for existence, opened, and rejected unless it is exactly 2 MB; each failure ends the run with a message naming the file and the EmuMediaBoard folder. Read once, to write out the two SEGABOOT halves when they are absent. It is also the target a Chihiro title returns to when it reboots with an empty launch path.",
            "path": "EmuMediaBoard/fpr21042_m29w160et.bin",
            "required": true,
            "size": 2097152,
            "source_ref": "src/core/kernel/init/CxbxKrnl.cpp:596-614, src/core/kernel/support/EmuFile.cpp:251, src/core/kernel/exports/EmuKrnlHal.cpp:550-553",
            "system": "sega-chihiro",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Base board QC microcontroller firmware",
            "min_size": 7937,
            "name": "ic10_g24lc64.bin",
            "note": "Memory mapped read/write at JVS setup, and the run ends when it cannot be opened. Byte 0x1F00 is dereferenced straight after loading, which is the floor the size carries: it holds the board region and is rewritten to USA, export or Japan when the running title's BootID rejects the current value. Titles read it through JvsFirmwareDownload and overwrite it through JvsFirmwareUpload.",
            "path": "EmuMediaBoard/Chihiro/ic10_g24lc64.bin",
            "required": true,
            "source_ref": "src/core/hle/JVS/JVS.cpp:181-188, src/core/hle/JVS/JVS.cpp:241-259, src/core/hle/JVS/JVS.cpp:484-523",
            "system": "sega-chihiro"
          },
          {
            "description": "Base board SC microcontroller firmware",
            "name": "pc20_g24lc64.bin",
            "note": "Memory mapped read/write at JVS setup, and the run ends when it cannot be opened. Served to titles through JvsScFirmwareDownload and rewritten through JvsScFirmwareUpload.",
            "path": "EmuMediaBoard/Chihiro/pc20_g24lc64.bin",
            "required": true,
            "source_ref": "src/core/hle/JVS/JVS.cpp:182-192, src/core/hle/JVS/JVS.cpp:671-709",
            "system": "sega-chihiro"
          },
          {
            "description": "Base board configuration EEPROM",
            "name": "ic11_24lc024.bin",
            "note": "Memory mapped read/write at JVS setup, and the run ends when it cannot be opened. Writes from JvsEEPROM_Write are synced back to disk immediately, so cabinet settings a title stores persist across runs.",
            "path": "EmuMediaBoard/Chihiro/ic11_24lc024.bin",
            "required": true,
            "source_ref": "src/core/hle/JVS/JVS.cpp:183-196, src/core/hle/JVS/JVS.cpp:437-482",
            "system": "sega-chihiro"
          },
          {
            "description": "Base board backup memory",
            "has_builtin": true,
            "name": "backup_ram.bin",
            "note": "The only one of the four JVS images the emulator will produce itself: when the file is missing it writes 128 KB of zeros and maps that, so a fresh board starts blank. Titles keep bookkeeping and high scores here through JvsBACKUP_Read and JvsBACKUP_Write.",
            "path": "EmuMediaBoard/Chihiro/backup_ram.bin",
            "required": false,
            "size_note": "Created as 128 KB of zeros when absent, then memory mapped",
            "source_ref": "src/core/hle/JVS/JVS.cpp:184-213, src/core/hle/JVS/JVS.cpp:397-435",
            "system": "sega-chihiro"
          },
          {
            "description": "SEGABOOT, old revision",
            "name": "Partition2.bin",
            "note": "Written by the emulator from the first megabyte of fpr21042_m29w160et.bin when either half is missing, and mounted as the mbrom0 device. Supplying it does not remove the need for the ROM, whose existence is checked before the extraction block is reached.",
            "path": "EmuMediaBoard/Partition2.bin",
            "required": false,
            "source_ref": "src/core/kernel/init/CxbxKrnl.cpp:616-648, src/core/kernel/support/EmuFile.cpp:252, src/core/kernel/support/EmuMediaBoard.cpp:230-233",
            "system": "sega-chihiro"
          },
          {
            "description": "SEGABOOT, current revision",
            "name": "Partition3.bin",
            "note": "Written from the second megabyte of fpr21042_m29w160et.bin under the same condition as the old half, mounted as the mbrom1 device, and launched as the XBE that boots the title.",
            "path": "EmuMediaBoard/Partition3.bin",
            "required": false,
            "source_ref": "src/core/kernel/init/CxbxKrnl.cpp:616-653, src/core/kernel/support/EmuFile.cpp:253, src/core/kernel/support/EmuMediaBoard.cpp:230-233",
            "system": "sega-chihiro"
          },
          {
            "description": "Xbox dashboard executable",
            "name": "xboxdash.xbe",
            "note": "Read from the shell partition of the emulated disk when a title reboots with an empty launch path and when the Open Dashboard menu entry is used. Its absence is handled as the console handles it, with the unrecoverable error screen and the LED sequence that goes with it, the code carrying the dashboard's own reason when the launch data page supplies one. Titles run without it.",
            "path": "EmuDisk/Partition2/xboxdash.xbe",
            "required": false,
            "source_ref": "src/core/kernel/exports/EmuKrnlHal.cpp:546-556, src/gui/WndMain.cpp:2463-2467, src/common/xbe/Xbe.cpp:62-96, src/core/kernel/support/EmuDisk.cpp:269",
            "system": "microsoft-xbox"
          },
          {
            "description": "Xbox EEPROM image",
            "has_builtin": true,
            "name": "EEPROM.bin",
            "note": "Opened at startup and mapped read/write; the file is created and filled with defaults when it does not exist, and a file that is not 256 bytes ends the run. Section checksums are recomputed on every load. The hard disk key is taken from it, and the game region it carries becomes the factory region. The GUI exposes an editor over the same file.",
            "path": "EEPROM.bin",
            "required": false,
            "size": 256,
            "source_ref": "src/common/EmuEEPROM.cpp:93-193, src/common/FilePaths.cpp:125, src/core/kernel/init/CxbxKrnl.cpp:958, src/gui/DlgEepromConfig.cpp:212-230",
            "system": "microsoft-xbox",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Xbox EEPROM and certificate keys",
            "name": "keys.bin",
            "note": "Two 16 byte keys read in order, the EEPROM key then the certificate key, as produced by dump-xbox. A file of any other length is refused with a warning naming the expected length, and an absent file only costs the ability to read save data from a real console. The certificate key derives the LAN, signature and alternate signature keys of the running title; the EEPROM key checks the EEPROM header and is read again by the EEPROM editor to recompute the checksum it writes.",
            "path": "keys.bin",
            "required": false,
            "size": 32,
            "source_ref": "src/common/FilePaths.cpp:139-172, src/core/kernel/common/types.h:2232, src/core/kernel/init/CxbxKrnl.cpp:113-132, src/common/EmuEEPROM.cpp:184-191, src/gui/DlgEepromConfig.cpp:200-207",
            "system": "microsoft-xbox",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Dokany user mode library",
            "name": "dokan2.dll",
            "note": "Loaded by name with every entry point resolved individually, and the failure message tells the user to install the upstream signed Dokany runtime. It backs the only path that reads a disc image: an .iso or .xiso is mounted to a drive letter and the default.xbe of the mount is opened, so without it only unpacked titles load. The build produces an import library from the Dokany definition file and takes headers from the vendored tree, but ships no runtime of its own.",
            "required": false,
            "source_ref": "src/gui/xiso/XisoMount.cpp:36-61, src/gui/WndMain.cpp:2252-2272, projects/dokany/CMakeLists.txt:8-10, projects/cxbx/CMakeLists.txt:17-18"
          }
        ],
        "mode": "standalone",
        "notes": "Windows x86 emulator running Xbox and Sega Chihiro titles. The kernel is\nreimplemented and XBE code executes natively, so no Xbox flash ROM or MCPX\nimage is read. The flash window answers the two addresses titles poll with\nconstants, hardware revision 1.6 among them, and the MCPX device is a PCI stub\nwhose revision comes from the hardware model. A title is opened as an XBE,\neither from an unpacked directory or from an .iso or .xiso mounted to a drive\nletter, in which case the default.xbe of the mount is what gets opened.\nref: src/devices/x86/EmuX86.cpp:162-180,\n     src/devices/MCPXDevice.cpp:36-70,\n     src/devices/Xbox.cpp:48-58,\n     src/devices/Xbox.cpp:132-155,\n     src/gui/WndMain.cpp:89-96,\n     src/gui/WndMain.cpp:2252-2272\n\nEvery path below is relative to the data directory, picked on first run\nbetween the folder holding cxbx.exe, %APPDATA%\\Cxbx-Reloaded and a custom\nlocation. EmuDisk, EmuMediaBoard and EmuMu are created under it at startup.\nref: src/common/Settings.cpp:82,\n     src/common/Settings.cpp:902-937,\n     src/common/Settings.cpp:968-996,\n     src/common/FilePaths.cpp:81-137\n\nA title counts as Chihiro when its XBE type says so or a boot.id sits beside\nit. Launching one directly requires the media board ROM: its absence ends the\nrun. The 2 MB image is cut into two 1 MB halves written as Partition2.bin and\nPartition3.bin, the old and new SEGABOOT, and the new one is launched, which\nthen boots the title. A title returning to firmware with an empty launch path\ngoes back to the same ROM.\nref: src/core/kernel/init/CxbxKrnl.cpp:573-578,\n     src/core/kernel/init/CxbxKrnl.cpp:590-655,\n     src/core/kernel/exports/EmuKrnlHal.cpp:546-556,\n     src/core/kernel/support/EmuFile.cpp:250-253\n\nThe JVS base board dumps are memory mapped read/write once the title is\nChihiro, and each one ends the run when it cannot be opened. Byte 0x1F00 of the\nQC firmware carries the region, rewritten to one the title's BootID accepts so\nthe board does not reject the game. Titles read and write all four images\nthrough the JVS patches at offsets of their own choosing; no size, bound or\nhash check exists anywhere in that path.\nref: src/core/hle/JVS/JVS.cpp:129-145,\n     src/core/hle/JVS/JVS.cpp:174-213,\n     src/core/hle/JVS/JVS.cpp:241-259,\n     src/core/hle/JVS/JVS.cpp:397-435,\n     src/core/kernel/init/CxbxKrnl.cpp:1330-1333\n\nOn the Xbox side the emulated disk holds the dashboard on Partition2. A title\nrebooting with an empty launch path lands there, as does the Open Dashboard\nmenu entry, and an absent dashboard raises the console's own unrecoverable\nerror screen rather than an emulator failure.\nref: src/core/kernel/exports/EmuKrnlHal.cpp:546-556,\n     src/gui/WndMain.cpp:2463-2467,\n     src/common/xbe/Xbe.cpp:62-96,\n     src/core/kernel/support/EmuDisk.cpp:269\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Cxbx-Reloaded/Cxbx-Reloaded",
        "source_commit": "585c49a50af1255ab155099e06f24505f9c5a800",
        "systems": [
          "microsoft-xbox",
          "sega-chihiro"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Cxbx-Reloaded/Cxbx-Reloaded"
      }
    },
    {
      "id": "daphne",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "daphne"
        ],
        "display_name": "Arcade (Daphne)",
        "emulator": "Daphne",
        "exclusion_note": ".info declares no firmware (firmware_count absent). Code confirmed: the core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All files (ROM ZIPs, framefiles, sound, pics) load from the content directory via g_homedir (libretro.cpp:1153, set to rom_path/..). No shared system BIOS or firmware.\n",
        "files": [],
        "notes": "LaserDisc arcade game emulator. Port of Daphne 1.0 (Matt Ownby) to libretro.\nEach game loads its own arcade ROM set from a ZIP file named after the game\n(e.g. lair.zip). ROMs are loaded from a content-relative directory structure\n(homedir/roms/) with CRC32 verification (game.cpp:767-781). The core never\naccesses the RetroArch system directory. Additional per-game data (framefiles,\nsound samples, overlay BMPs) is also loaded relative to the content directory.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/daphne",
        "source_commit": "1586978f7b71f40675f8d0a08d9872ecd2415422",
        "systems": [
          "arcade-laserdisc"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/mirror/daphne-emu"
      }
    },
    {
      "id": "demul",
      "profile": {
        "core_version": "0.7",
        "cores": [
          "demul"
        ],
        "display_name": "Sega - Dreamcast/NAOMI/Hikaru (Demul)",
        "emulator": "Demul",
        "files": [
          {
            "name": "dc_boot.bin",
            "note": "Dreamcast boot ROM (2 MB). No HLE fallback in Demul.",
            "required": true,
            "size": 2097152,
            "system": "sega-dreamcast"
          },
          {
            "name": "dc_flash.bin",
            "note": "Dreamcast flash memory (128 KB). Created by emulator if missing.",
            "required": false,
            "size": 131072,
            "system": "sega-dreamcast"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "note": "NAOMI system BIOS archive (MAME format). Contains region-specific BIOS ROMs (EPR-21576 Japan, EPR-21577 USA, EPR-21578 Export, EPR-21579 Korea) plus development and special BIOS variants.\n",
            "required": true,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "note": "NAOMI GD-ROM BIOS. Shares ROMs with naomi.zip (subset of region BIOS variants).",
            "required": false,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "note": "House of the Dead 2 game-specific BIOS. Japan/USA/Export variants.",
            "required": false,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "note": "Ferrari F355 Challenge game-specific BIOS. Japan/USA/Export variants.",
            "required": false,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "f355dlx.zip",
            "note": "Ferrari F355 Challenge Deluxe game-specific BIOS. Japan/USA/Export variants.",
            "required": false,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "note": "Airline Pilots Deluxe game-specific BIOS. USA/Export variants.",
            "required": false,
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "note": "NAOMI 2 system BIOS archive (MAME format). Contains region-specific BIOS ROMs (EPR-23605 Japan, EPR-23607 USA, EPR-23608 Export, EPR-23609 Korea, EPR-23610 Australia).\n",
            "required": true,
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "note": "Hikaru system BIOS archive (MAME format). Contains EPR-23400a (latest), EPR-23400, EPR-21904 (early), prot_bot (dev/prototype). All 2 MB at IC94.\n",
            "required": true,
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "note": "Atomiswave system BIOS archive (MAME format). Contains bios0.ic23 and bios1.ic23 (128 KB each).",
            "required": true,
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "segasp.zip",
            "note": "System SP (Aurora/Spider) BIOS archive (MAME format). Contains EPR-24236a, EPR-24328/a BIOS ROMs, serial EEPROM, and network firmware variants.\n",
            "required": true,
            "system": "sega-system-sp"
          },
          {
            "category": "bios_zip",
            "hle_fallback": true,
            "name": "mie.zip",
            "note": "MIE (Maple-JVS bridge) Z80 MCU firmware (315-6146.bin). HLE mode available; LLE mode requires this archive.",
            "required": false
          },
          {
            "category": "bios_zip",
            "name": "jvs13551.zip",
            "note": "Sega 837-13551 JVS I/O board firmware. Contains sp5001.bin, sp5001-a.bin, sp5001-b.bin, sp5002-a.bin, 315-6215.bin.\n",
            "required": true
          }
        ],
        "notes": "Closed-source Windows emulator for Sega Dreamcast and related arcade hardware.\nRun via Wine (32-bit, win32 prefix) on Linux platforms (Batocera, RetroBat).\nUses MAME ROM naming conventions for arcade BIOS archives.\n\nBatocera configgen (demulGenerator.py) maps roms0 to the BIOS directory.\nAll BIOS ZIPs are placed directly in bios/ (no subdirectory prefix).\nDemul searches configured ROM paths for both game ROMs and BIOS archives.\n\nGaelco PowerVR and Cave CV1000 (3rd gen) games are self-contained ROM sets\nand do not require separate BIOS archives.\n\nHLE MIE emulation available (changelog: \"full HLE MIE\" mode). LLE mode\nrequires mie.zip with the 315-6146 MCU firmware.\n\nSupported launch modes via -run= parameter:\n  dc, naomi, naomi2, hikaru, atomiswave, gaelco, cave3rd, segasp.\n\nBIOS requirements verified against Batocera configgen, batocera-systems\ndeclarations, MAME ROM set conventions, and community documentation.\nNo source code available for direct verification.\n",
        "profiled_date": "2026-03-26",
        "systems": [
          "sega-dreamcast",
          "sega-naomi",
          "sega-naomi2",
          "sega-hikaru",
          "sammy-atomiswave",
          "sega-system-sp",
          "gaelco-powervr",
          "cave-cv1000"
        ],
        "type": "standalone",
        "upstream": "https://demul.emulation64.com"
      }
    },
    {
      "id": "desmume",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "desmume"
        ],
        "display_name": "Nintendo - DS (DeSmuME)",
        "emulator": "DeSmuME",
        "files": [
          {
            "description": "ARM7 BIOS",
            "hle_fallback": true,
            "name": "bios7.bin",
            "note": "Native file needed for firmware boot and SWI-from-BIOS accuracy",
            "required": false,
            "size": 16384,
            "source_ref": "desmume/src/NDSSystem.cpp:2178-2182, desmume/src/frontend/libretro/libretro.cpp:763",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "ARM9 BIOS",
            "hle_fallback": true,
            "name": "bios9.bin",
            "note": "Native file needed for firmware boot and logo comparison (Pal Park)",
            "required": false,
            "size": 4096,
            "source_ref": "desmume/src/NDSSystem.cpp:2236-2239, desmume/src/frontend/libretro/libretro.cpp:764",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "NDS firmware image",
            "hle_fallback": true,
            "name": "firmware.bin",
            "note": "Loaded only if both BIOS files present; needed for boot animation, wifi config, user settings",
            "required": false,
            "source_ref": "desmume/src/firmware.cpp:249-280, desmume/src/frontend/libretro/libretro.cpp:765",
            "system": "nintendo-ds"
          }
        ],
        "notes": "Full HLE of ARM7/ARM9 SWI routines; BIOS files optional for most games.\nExternal BIOS enables SWI-from-BIOS mode. Firmware boot requires both\nBIOS files loaded and interpreter mode (JIT incompatible).\nNo DSi support. Core option: desmume_use_external_bios.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/desmume",
        "source_commit": "ae0f7f51f96d9b5741b47b425505a4a4224b91fa",
        "systems": [
          "nintendo-ds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/TASEmulators/desmume"
      }
    },
    {
      "id": "desmume2015",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "SVN (2015 snapshot)",
        "cores": [
          "desmume2015"
        ],
        "display_name": "Nintendo - DS (DeSmuME 2015)",
        "emulator": "DeSmuME 2015",
        "exclusion_note": ".info declares firmware_count=3 but libretro frontend never enables external BIOS loading (UseExtBIOS defaults false in NDSSystem.h:497, never set in libretro.cpp)",
        "files": [],
        "notes": "Frozen 2015 snapshot of DeSmuME. The core emulator code supports external\nBIOS/firmware (PrepareBiosARM7/ARM9 in NDSSystem.cpp:1974-2050), but\nUseExtBIOS defaults to false (NDSSystem.h:497) and the libretro frontend\nnever sets it — no desmume_use_external_bios core option exists in this\nversion. Uses HLE BIOS stubs when external BIOS not loaded.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/desmume2015",
        "source_commit": "af397ff3d1f208c27f3922cc8f2b8e08884ba893",
        "systems": [
          "nintendo-ds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/TASEmulators/desmume"
      }
    },
    {
      "id": "dice",
      "profile": {
        "analysis": {
          "bios_required": false,
          "filesystem_access": false,
          "game_count": 21,
          "rom_games": 10,
          "rom_loading": {
            "method": "MAME-style ZIP, matched by CRC32 per RomDesc",
            "source_ref": "chips/rom.cpp:41-218",
            "zip_handling": "unzip library (unzip/), opened via libretro_zip_filename"
          },
          "romless_games": 11,
          "system_directory_used": false
        },
        "core_classification": "community_fork",
        "core_version": "v0.4.2",
        "cores": [
          "dice"
        ],
        "display_name": "Arcade (DICE)",
        "emulator": "DICE",
        "files": [],
        "notes": "Discrete Integrated Circuit Emulator. Emulates early arcade hardware built\nfrom discrete logic components with no CPU. Libretro port by Ken Mitton,\nbased on upstream DICE by Adam B.\n\nGames load as MAME-style ZIP archives matched by CRC32 per ROM chip\n(chips/rom.cpp:41-218). ROM-less games (Pong, Breakout, etc.) use .dmy\ndummy launcher files. The system directory is retrieved but never used\nfor file loading (libretro.cpp:60-62).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/mittonk/dice-libretro",
        "source_commit": "72d66a67a296b004fa0bb7a57dbab9cfcec462b9",
        "systems": [
          "discrete-arcade"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/dice/"
      }
    },
    {
      "id": "dinothawr",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v1.0",
        "cores": [
          "dinothawr"
        ],
        "data_directories": [
          {
            "ref": "dinothawr",
            "source_ref": "libretro.cpp:270-271"
          }
        ],
        "display_name": "Dinothawr",
        "emulator": "Dinothawr",
        "files": [],
        "notes": "Puzzle game by the libretro team (Themaister, Agnes Heyer). Push blocks on ice.\nGame data (TMX levels, sprites, music) needed for the core to work.\n\nTwo loading modes:\n1. Load dinothawr.game as content (data in content directory)\n2. supports_no_game=true: loads from system_dir/dinothawr/\n   ref: libretro.cpp:267-271 —\n     game_path_dir = join(system_dir, \"/\", \"dinothawr\")\n     game_path = join(game_path_dir, \"/\", \"dinothawr.game\")\n\nBuildbot provides Dinothawr.zip via Core System Files Downloader.\nref: buildbot.libretro.com/assets/system/Dinothawr.zip\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/Dinothawr",
        "source_commit": "d66dde551be8e68e47c05e88838b4f1c6b114c99",
        "systems": [
          "dinothawr"
        ],
        "type": "libretro",
        "upstream": "https://github.com/libretro/Dinothawr"
      }
    },
    {
      "id": "directxbox",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "alpha",
        "cores": [
          "directxbox"
        ],
        "display_name": "Microsoft - Xbox (DirectXbox)",
        "emulator": "DirectXBox",
        "files": [
          {
            "name": "mcpx_1.0.bin",
            "note": "Xbox MCPX ROM (secret boot ROM on the southbridge). Contains the initial boot vector that loads the flash BIOS. Overlaid at the last 512 bytes of the 16 MB flash region (0xFFFFFE00-0xFFFFFFFF). Only needed for retail machine types; Debug and Chihiro skip this file.\n",
            "path": "mcpx_1.0.bin",
            "required": true,
            "size": 512,
            "source_ref": "src/xbox.cpp:186-207, src/libretro/libretro.cpp:202",
            "validation": [
              "size"
            ]
          },
          {
            "name": "cromwell_1024.bin",
            "note": "Cromwell open-source Xbox BIOS (1024 KB variant). Loaded as the flash ROM and mirrored across the 16 MB flash region at 0xFF000000. Size must be a multiple of 0x10000. This is the only BIOS that currently boots in the emulator. The Microsoft retail BIOS (xbox-3944.bin) is referenced in commented-out code but does not work yet.\n",
            "path": "cromwell_1024.bin",
            "required": true,
            "size": 1048576,
            "source_ref": "src/xbox.cpp:143-178, src/libretro/libretro.cpp:203",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": {
          "machine_types": "xbox_database.cpp defines retail v1.0 through v1.6, debug, and chihiro variants. Each has different TV encoder (Conexant/Focus/XCalibur) and MCPX revision (X2/X3) settings. The core option auto-detects from the loaded BIOS.\n",
          "microsoft_bios": "The source references xbox-3944.bin as an alternative flash ROM (Microsoft retail BIOS, typically 256 KB). It is commented out in libretro.cpp:204 because ATA and OHCI hardware are not yet implemented, preventing the Microsoft BIOS from completing boot.\n",
          "status": "Alpha stage. Only Cromwell BIOS boots. No commercial game compatibility. Missing ATA (hard drive), OHCI (USB/controllers), audio, and GPU HW acceleration. The core requires libvirt86 for x86 virtualization.\n"
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-directxbox",
        "source_commit": "a157f3c1a68cb40dd74d5a664c0e39a245aaa59c",
        "systems": [
          "xbox"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "dirksimple",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.2",
        "cores": [
          "dirksimple"
        ],
        "data_directories": [
          {
            "ref": "dirksimple",
            "source_ref": "dirksimple_libretro.c:794"
          }
        ],
        "display_name": "Laserdisc arcade game (DirkSimple)",
        "emulator": "DirkSimple",
        "files": [],
        "notes": "DirkSimple by Ryan C. Gordon (icculus). Plays laserdisc arcade games\nvia Lua scripts + Ogg Theora video. Same author wrote both standalone\nand libretro backends (source == upstream).\n\nLibretro port loads from system_dir/DirkSimple/.\nref: dirksimple_libretro.c:782,794 —\n  sysdir from RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY\n  basedir = sysdir + \"/DirkSimple/\"\nDirkSimple_startup(basedir, info->path, ...) at line 799\n\nStandalone loads from SDL_GetBasePath() + data/.\nref: dirksimple_sdl.c:575-577\n\nGame data in data/games/<gamename>/game.lua + assets (PNG, WAV).\nUser provides the OGV laserdisc video as content.\n\nSupported games: Dragon's Lair (lair), Cliff Hanger (cliff).\n10 data files in the repo (game.lua scripts, sprites, sounds, icons).\n\nBuildbot provides DirkSimple.zip via Core System Files Downloader.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/icculus/DirkSimple",
        "source_commit": "5aea3e2951ed641908a7bd2ca09019614003b5e3",
        "systems": [
          "laserdisc-arcade"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/icculus/DirkSimple"
      }
    },
    {
      "id": "dolphin",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "dolphin"
        ],
        "data_directories": [
          {
            "destination": "Sys",
            "ref": "dolphin-sys",
            "source_ref": "Source/Core/Common/CommonPaths.h:128-141"
          }
        ],
        "display_name": "Nintendo - GameCube / Wii (Dolphin)",
        "emulator": "Dolphin",
        "files": [
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:139, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:108"
          },
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube PAL boot ROM",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/Config/MainSettings.cpp:776-782"
          },
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube NTSC-J boot ROM. JAP is the legacy directory name",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:185"
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "name": "dsp_rom.bin",
            "note": "DSP instruction ROM for LLE audio. Free replacement (v0.4) included",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:136, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:84-117",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "name": "dsp_coef.bin",
            "note": "DSP coefficient ROM for LLE audio and HLE polyphase resampling. Free replacement included",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:137, Source/Core/Core/DSP/DSPCore.cpp:32-33, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:55-62",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "font_western.bin",
            "note": "Windows-1252 font for GC/Wii text rendering. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_western.bin",
            "required": false,
            "size": 9589,
            "source_ref": "Source/Core/Common/CommonPaths.h:133, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130,202-239"
          },
          {
            "hle_fallback": true,
            "name": "font_japanese.bin",
            "note": "Shift-JIS font for Japanese text. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_japanese.bin",
            "required": false,
            "size": 303693,
            "source_ref": "Source/Core/Common/CommonPaths.h:134, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:129,234"
          },
          {
            "name": "segaboot.gcm",
            "note": "SegaBoot, the Triforce system disc image. Read on every Triforce boot, min(size, 2 MiB) copied into the firmware buffer, nothing validated",
            "path": "Triforce/segaboot.gcm",
            "required": true,
            "source_ref": "Source/Core/Core/HW/DVD/AMMediaboard.cpp:159,512,531-551, Source/Core/Core/HW/DVD/DVDInterface.cpp:292-294, Source/Core/Core/System.h:147",
            "system": "sega-triforce"
          },
          {
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "GBA BIOS for GC-GBA link feature (uses integrated mGBA). Path configurable in settings",
            "path": "GBA/gba_bios.bin",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:145, Source/Core/Core/HW/GBACore.cpp:346-363"
          },
          {
            "hle_fallback": true,
            "name": "SYSCONF",
            "note": "Wii system configuration. Auto-generated by Dolphin, can be imported from NAND backup",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:118, Source/Core/Common/FileUtil.cpp:900"
          },
          {
            "hle_fallback": true,
            "name": "setting.txt",
            "note": "Wii region/language settings. Auto-generated by Dolphin during Wii boot emulation",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:153, Source/Core/Core/Boot/Boot_BS2Emu.cpp:384-460"
          },
          {
            "hle_fallback": true,
            "name": "nand.bin",
            "note": "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:26-39,42-89"
          },
          {
            "hle_fallback": true,
            "name": "keys.bin",
            "note": "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import",
            "path": null,
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:20, Source/Core/DiscIO/NANDImporter.cpp:82-94, Source/Core/DiscIO/NANDImporter.h:46"
          },
          {
            "hle_fallback": true,
            "name": "WiiSD.raw",
            "note": "Virtual SD card image for Wii homebrew. Auto-created by Dolphin, supports SD/SDHC up to 4GB",
            "path": "Load/WiiSD.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:150"
          },
          {
            "hle_fallback": true,
            "name": "codehandler.bin",
            "note": "Gecko/Ocarina cheat code handler. Shipped with Dolphin in Sys/, not user-supplied",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:155, Source/Core/Core/GeckoCode.cpp:120"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "Wii System Menu",
            "note": "Wii System Menu WAD. Installed to NAND via Tools > Install WAD, needed for Wii Menu boot",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DolphinQt/MainWindow.cpp:1629-1631, Source/Core/DolphinQt/MenuBar.cpp:1218-1232"
          },
          {
            "hle_fallback": true,
            "name": "clientca.pem",
            "note": "SSL client certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:239-323"
          },
          {
            "hle_fallback": true,
            "name": "clientcakey.pem",
            "note": "SSL client private key. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientcakey.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:275"
          },
          {
            "hle_fallback": true,
            "name": "rootca.pem",
            "note": "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/rootca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:276"
          },
          {
            "mode": "standalone",
            "name": "rtl8723a_fw.bin",
            "note": "Realtek 8723A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:387"
          },
          {
            "mode": "standalone",
            "name": "rtl8723b_fw.bin",
            "note": "Realtek 8723B BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723b_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:389"
          },
          {
            "mode": "standalone",
            "name": "rtl8723d_fw.bin",
            "note": "Realtek 8723D BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723d_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:391"
          },
          {
            "mode": "standalone",
            "name": "rtl8761a_fw.bin",
            "note": "Realtek 8761A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8761a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:393"
          },
          {
            "mode": "standalone",
            "name": "rtl8761bu_fw.bin",
            "note": "Realtek 8761BU BT firmware for Wiimote passthrough (most common USB dongle)",
            "path": "Load/Firmware/rtl_bt/rtl8761bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:395"
          },
          {
            "mode": "standalone",
            "name": "rtl8821a_fw.bin",
            "note": "Realtek 8821A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8821a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:397"
          },
          {
            "mode": "standalone",
            "name": "rtl8821c_fw.bin",
            "note": "Realtek 8821C BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8821c_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:399"
          },
          {
            "mode": "standalone",
            "name": "rtl8822b_fw.bin",
            "note": "Realtek 8822B BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8822b_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:403"
          },
          {
            "mode": "standalone",
            "name": "rtl8822cu_fw.bin",
            "note": "Realtek 8822CU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8822cu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:401"
          },
          {
            "mode": "standalone",
            "name": "rtl8851bu_fw.bin",
            "note": "Realtek 8851BU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8851bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:405"
          },
          {
            "mode": "standalone",
            "name": "rtl8852au_fw.bin",
            "note": "Realtek 8852AU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852au_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:407"
          },
          {
            "mode": "standalone",
            "name": "rtl8852bu_fw.bin",
            "note": "Realtek 8852BU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:409"
          },
          {
            "mode": "standalone",
            "name": "rtl8852cu_fw.bin",
            "note": "Realtek 8852CU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852cu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:411"
          },
          {
            "mode": "standalone",
            "name": "rtl8852btu_fw.bin",
            "note": "Realtek 8852BT/8852BE-VT BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852btu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:413"
          },
          {
            "mode": "standalone",
            "name": "rtl8922au_fw.bin",
            "note": "Realtek 8922AU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8922au_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:415"
          }
        ],
        "logo": "https://raw.githubusercontent.com/dolphin-emu/dolphin/master/Data/dolphin-emu.svg",
        "notes": {
          "bt_passthrough_note": "Bluetooth passthrough allows connecting real Wiimotes via USB Bluetooth adapters. Realtek chipsets (very common) require firmware files in Load/Firmware/rtl_bt/. Dolphin can auto-download these from kernel-firmware/linux-firmware on GitLab. 15 device families supported. Each needs _fw.bin (required) + _config.bin (optional). ref: Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:75-179 (device IDs), 382-420 (firmware names)\n",
          "dsp_rom_note": "DSP ROMs are verified at load time via Adler32 hash. Official Nintendo hashes: irom=0x66f334fe, drom=0xf3b93527. Multiple free replacement versions exist (v0.1 through v0.4).\n",
          "font_note": "Fonts can come from three sources: real IPL dump (preferred), standalone font files in Sys/GC/, or bundled free alternatives. The free fonts have different padding that causes text positioning issues in some games.\n",
          "hle_available": true,
          "hle_note": "Dolphin provides HLE for GameCube IPL (boot ROM), DSP, and Wii system functions. No BIOS files are strictly required for most games. DSP ROMs (dsp_rom.bin + dsp_coef.bin) are the most impactful optional files - Dolphin ships free replacements but real dumps from hardware provide better audio accuracy in some titles.\n",
          "ipl_region_note": "IPL.bin is region-specific, placed in GC/<REGION>/IPL.bin. JAP is the legacy directory name, JPN is the modern default. DEV is for development/debug units.\n",
          "ipl_regions": [
            "USA",
            "EUR",
            "JAP",
            "JPN",
            "DEV"
          ],
          "nand_note": "Wii NAND content (channels, saves, system menu) is managed by Dolphin internally. Users can import a BootMii NAND backup (nand.bin + optional keys.bin) to populate it. Most Wii games do not require a real NAND dump.\n"
        },
        "pack_structure": {
          "libretro": "dolphin-emu",
          "standalone": ""
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dolphin",
        "source_commit": "b4c88b46ad26227ebde585111de691db1b0a151a",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii",
          "sega-triforce"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/dolphin-emu/dolphin"
      }
    },
    {
      "id": "dolphin-mmjr",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "11460 - bankaimaster999",
        "cores": [
          "dolphin-mmjr"
        ],
        "display_name": "Nintendo - GameCube / Wii (Dolphin MMJR)",
        "emulator": "Dolphin MMJR",
        "exclusion_note": "The NAND importer, which reads nand.bin and writes clientca.pem, clientcakey.pem and rootca.pem, and the signature database totaldb.dsy are reachable only from the Qt front-end, which the Android build does not compile: the APK builds the core libraries and Source/Android/jni, and the JNI surface exposes no NAND import or WAD install. libusb is switched off for Android, so the Bluetooth passthrough firmware paths are out as well. ref: Source/CMakeLists.txt:60-65, Source/Core/CMakeLists.txt:1-16,\n     Source/Core/DolphinQt/MainWindow.cpp:1510, Source/Core/DolphinQt/MenuBar.cpp:1092,\n     Source/Core/DolphinQt/MenuBar.cpp:1156, CMakeLists.txt:630-644\n",
        "files": [
          {
            "description": "GameCube boot ROM, NTSC-U directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted, and the four non-PAL dumps pass here without complaint.",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/ConfigManager.cpp:861-868, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:99-112, Source/Core/Core/HW/EXI/EXI_DeviceIPL.h:43, Source/Core/Core/Boot/Boot.cpp:296-330",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "GameCube boot ROM, PAL directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "The two PAL dumps are the ones this directory takes without a mismatch warning.",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/ConfigManager.cpp:835-849, Source/Core/Core/Boot/Boot.cpp:298-337",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "GameCube boot ROM, NTSC-J directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "JAP is the only Japanese directory name this fork knows. FindIPLDump, which serves the font path, scans USA then EUR then JAP and stops at the first hit.",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:32-34, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:174-186",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "Windows-1252 font, loaded at 0x1fcf00",
            "hle_fallback": true,
            "name": "font_western.bin",
            "note": "Read from GC/ in the Sys directory, with no user directory fallback. Skipped in favour of the IPL dump whenever one is found.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:105, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:126, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:199-240"
          },
          {
            "description": "Shift JIS font, loaded at 0x1aff00",
            "hle_fallback": true,
            "name": "font_japanese.bin",
            "note": "Read from GC/ in the Sys directory, with no user directory fallback. Skipped in favour of the IPL dump whenever one is found.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:106, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:125, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:199-240"
          },
          {
            "adler32_byteswap": true,
            "description": "DSP instruction ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "name": "dsp_rom.bin",
            "note": "DSP LLE only, and LLE aborts when the file is absent or not 8192 bytes. The adler32 is taken over the byte-swapped image and the value here is the Nintendo pair; five replacement pairs are also accepted.",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:108, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:120-152, Source/Core/Core/DSP/DSPCore.h:35, Source/Core/Core/DSP/DSPCore.cpp:38-80",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "description": "DSP coefficient ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "name": "dsp_coef.bin",
            "note": "Read by DSP LLE alongside the instruction ROM, and by the AX ucode under HLE for polyphase resampling, which drops any file that is not 0x1000 bytes and plays on without it.",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:109, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:120-152, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:45-70, Source/Core/Core/DSP/DSPCore.h:49",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Gecko code handler",
            "name": "codehandler.bin",
            "note": "Read from the root of the Sys directory when cheats are enabled, and written into guest memory between the installer bounds; too large a file is refused and cheats stay off.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:124, Source/Core/Core/GeckoCode.cpp:121-136"
          },
          {
            "description": "BootMii key dump, console keys and identity",
            "hle_fallback": true,
            "name": "keys.bin",
            "note": "Read at every key store construction, so on every Wii title. Supplies the console private key and signature, the MS and CA identifiers, the NAND key and HMAC and the backup key. A short read leaves the built-in keys in place, the structure being fixed at 0x400 bytes.",
            "path": "Wii/keys.bin",
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/Core/IOS/IOSC.cpp:94, Source/Core/Core/IOS/IOSC.cpp:136-140, Source/Core/Core/IOS/IOSC.cpp:559-584",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii system configuration",
            "hle_fallback": true,
            "name": "SYSCONF",
            "note": "Opened through the emulated filesystem and accepted only at 0x4000 bytes; anything else is replaced by a freshly generated one.",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "size": 16384,
            "source_ref": "Source/Core/Common/CommonPaths.h:90, Source/Core/Core/SysConf.cpp:20, Source/Core/Core/SysConf.cpp:55-66",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii region and language settings",
            "hle_fallback": true,
            "name": "setting.txt",
            "note": "Read for its serial number at Wii boot, then deleted and written again from the emulated region settings. The read fills a fixed 0x100 byte buffer, so a shorter file yields nothing.",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:122, Source/Core/Common/SettingsHandler.h:22-27, Source/Core/Core/Boot/Boot_BS2Emu.cpp:228-256",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii SD card image",
            "hle_fallback": true,
            "name": "sd.raw",
            "note": "Opened read-write when the SD device is opened; a 128 MB image is created when the file is missing.",
            "path": "Wii/sd.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:119, Source/Core/Common/FileUtil.cpp:802, Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp:60-79",
            "system": "nintendo-wii"
          },
          {
            "aliases": [
              "titles.txt"
            ],
            "description": "user title database",
            "name": "wiitdb.txt",
            "note": "One title id equals name pair per line, ids of four characters and up. titles.txt is read only when wiitdb.txt yields nothing. Overlays the per-language databases shipped in the Sys directory.",
            "path": "Load/wiitdb.txt",
            "required": false,
            "source_ref": "Source/Core/Core/TitleDatabase.cpp:26-48, Source/Core/Core/TitleDatabase.cpp:50-63, Source/Core/Core/TitleDatabase.cpp:86-94"
          },
          {
            "description": "MIOS symbol map",
            "name": "mios-ipl.map",
            "note": "Read from Maps/ in the user directory when MIOS starts, and a successful load re-applies the HLE function patches against the symbols it names.",
            "path": "Maps/mios-ipl.map",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/MIOS.cpp:47, Source/Core/Core/IOS/MIOS.cpp:55-66"
          },
          {
            "description": "symbol map for game id GFZE01",
            "name": "GFZE01.map",
            "note": "Reached by the per-title lookup, which reads Maps/<game id>.map from the user directory then the Sys directory. Ships in Maps/ inside the Sys directory.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Core/Boot/Boot.cpp:253-290"
          },
          {
            "description": "symbol map for game id GMBE8P",
            "name": "GMBE8P.map",
            "note": "Reached by the per-title lookup, which reads Maps/<game id>.map from the user directory then the Sys directory. Ships in Maps/ inside the Sys directory.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Core/Boot/Boot.cpp:253-290"
          }
        ],
        "mode": "standalone",
        "notes": "Android-only Dolphin fork continuing the MMJ line, published as the org.mm.jr\npackage. The repositories it released from are gone, including the\nDolphin-MMJR1 link in its own README; this reading is taken from a surviving\ncopy that carries the release build metadata of the app, applicationId\norg.mm.jr and versionCode 15808.\nref: Source/Android/app/build.gradle:23-29,\n     Source/Android/app/release/output-metadata.json\n\nTwo roots. The user directory is dolphin-mmjr at the root of external\nstorage. The Sys directory is extracted from the APK assets into the app's\ninternal files directory, and the first run after a versionCode change\ndeletes it and extracts it again, so nothing placed there survives an update.\nPaths below are relative to the user directory; entries with no path are read\nonly from the Sys directory and name their location in their note.\nref: Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java:93-134,\n     Source/Core/Common/CommonPaths.h:22-24, Source/Core/Common/FileUtil.cpp:756-807\n\nThe GameCube boot ROM is looked up as GC/<REGION>/IPL.bin, the region\ndirectory being NTSC-J to JAP, NTSC-U to USA and PAL to EUR, in the user\ndirectory first and the Sys directory second. Booting the IPL itself hashes\nthe whole file with crc32 and warns on an unknown dump, and again when a PAL\ndump answers a non-PAL boot. SkipIPL defaults to true, so games start without\nit.\nref: Source/Core/Core/ConfigManager.cpp:835-849, Source/Core/Core/ConfigManager.cpp:861-868,\n     Source/Core/Core/Boot/Boot.cpp:295-337, Source/Core/Core/Config/MainSettings.cpp:18\n\nFonts follow the IPL. When a dump is present the Shift JIS and Windows-1252\nfonts are read out of it at offsets 0x1aff00 and 0x1fcf00, for 0x4a24d and\n0x2575 bytes; otherwise the standalone font files are loaded whole, and the\nbundled ones have different padding from the console fonts.\nref: Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:99-127,\n     Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:159-172,\n     Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:199-240\n\nDSP HLE is the default and reads dsp_coef.bin alone, for polyphase resampling\ncoefficients, skipping any file that is not 0x1000 bytes. DSP LLE, reached by\nsetting DSPHLE to False in Dolphin.ini, loads both ROMs from GC/ in the user\ndirectory then Sys/GC/, rejects either at the wrong size and refuses to start\nwhen one is missing. Both are byte-swapped into memory and the pair is then\nhashed with adler32 against six known combinations.\nref: Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:120-138,\n     Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:140-176,\n     Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:45-58,\n     Source/Core/Core/DSP/DSPCore.cpp:38-105, Source/Core/Core/HW/DSP.cpp:190\n\nWii emulation reads keys.bin from the NAND root every time the key store is\nbuilt, and keeps the built-in keys when it is absent. SYSCONF is read through\nthe emulated filesystem and rebuilt unless it is exactly 0x4000 bytes,\nsetting.txt is read for its serial number then deleted and written again, and\nthe WiiConnect24 files shipped in Sys/Wii are copied into the NAND without\noverwriting what is there. A missing SD card image is created at 128 MB.\nref: Source/Core/Core/IOS/IOSC.cpp:94, Source/Core/Core/IOS/IOSC.cpp:136-140,\n     Source/Core/Core/IOS/IOSC.cpp:559-584, Source/Core/Core/SysConf.cpp:55-66,\n     Source/Core/Core/Boot/Boot_BS2Emu.cpp:228-256, Source/Core/Core/WiiRoot.cpp:217-227,\n     Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp:60-79\n\nEvery boot looks for a symbol map named after the running game ID, in Maps/\nthen Sys/Maps/, and reloads it whenever the running title changes. The game\nID comes from the disc metadata, not from a debugger setting.\nref: Source/Core/Core/Boot/Boot.cpp:253-290, Source/Core/Core/ConfigManager.cpp:698-720,\n     Source/Core/Core/ConfigManager.cpp:742-754\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/acidtech/Dolphin-MMJR",
        "source_commit": "1b095b64857c2eabb49a42cc56ffd9d7881bc263",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/weihuoya/dolphin",
        "valid_bios_crc32": {
          "ipl_ntsc": [
            {
              "crc32": "6DAC1F2A",
              "name": "NTSC v1.0"
            },
            {
              "crc32": "D5E6FEEA",
              "name": "NTSC v1.1"
            },
            {
              "crc32": "86573808",
              "name": "NTSC v1.2"
            },
            {
              "crc32": "667D0B64",
              "name": "MPAL v1.1 (Brazil)"
            }
          ],
          "ipl_pal": [
            {
              "crc32": "4F319F43",
              "name": "PAL v1.0"
            },
            {
              "crc32": "AD1B7F16",
              "name": "PAL v1.2"
            }
          ]
        }
      }
    },
    {
      "id": "dolphin-mmjr2",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.0-18025",
        "cores": [
          "dolphin-mmjr2"
        ],
        "display_name": "Nintendo - GameCube / Wii (Dolphin MMJR2)",
        "emulator": "Dolphin MMJR2",
        "exclusion_note": "gba_bios.bin has no reader in this build: HW/GBACore.cpp is compiled only under USE_MGBA, which the root CMakeLists forces off whenever the Qt front-end is off, and the Android branch turns Qt off. The path override is itself behind HAS_LIBMGBA. The signature database totaldb.dsy is reached only from the Qt menu bar, which the Android build does not compile. libusb is switched off for Android, so the Bluetooth passthrough firmware paths are out as well. Load/Textures, Load/Riivolution, Load/GraphicMods, the per-game inis in Sys/GameSettings, the post-processing shaders in Sys/Shaders and the per-title symbol maps under Maps/ are read by directory scan under a game id or a user-chosen name, so they carry no fixed filename. ref: CMakeLists.txt:495, CMakeLists.txt:943-945,\n     Source/Core/Core/CMakeLists.txt:652-660,\n     Source/Core/Core/HW/GBACore.cpp:202, Source/Core/UICommon/UICommon.cpp:106-110,\n     Source/Core/DolphinQt/MenuBar.cpp:1212, CMakeLists.txt:842-843\n",
        "files": [
          {
            "description": "GameCube boot ROM, NTSC-U directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "Read whole into a 2 MiB buffer with no size check, then descrambled from 0x100 for 0x1afe00 bytes. The crc32 gate runs when the IPL itself is booted and only warns; the four non-PAL dumps, the Brazilian MPAL one included, pass here without complaint.",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/Config/MainSettings.cpp:594-600, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:105-113, Source/Core/Core/HW/EXI/EXI_DeviceIPL.h:43, Source/Core/Core/Boot/Boot.cpp:408-442, Source/Core/Core/Boot/Boot.cpp:444-449",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "GameCube boot ROM, PAL directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "The two PAL dumps are the ones this directory takes without a mismatch warning.",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/Config/MainSettings.cpp:580-581, Source/Core/Core/Boot/Boot.cpp:444-449",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "GameCube boot ROM, NTSC-J directory",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "JPN is defined alongside JAP but the boot ROM callers use the legacy default, so JAP is the directory read. FindIPLDump, which serves the font path, scans USA then EUR then JAP and stops at the first hit.",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:34-35, Source/Core/Core/Config/MainSettings.cpp:574-575, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:175-187",
            "system": "nintendo-gamecube",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "Windows-1252 font, loaded at 0x1fcf00",
            "hle_fallback": true,
            "name": "font_western.bin",
            "note": "Read from GC/ in the Sys directory, with no user directory fallback. Skipped in favour of the IPL dump whenever one is found.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:117, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:200-241"
          },
          {
            "description": "Shift JIS font, loaded at 0x1aff00",
            "hle_fallback": true,
            "name": "font_japanese.bin",
            "note": "Read from GC/ in the Sys directory, with no user directory fallback. Skipped in favour of the IPL dump whenever one is found.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:118, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:129, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:200-241"
          },
          {
            "adler32_byteswap": true,
            "description": "DSP instruction ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "name": "dsp_rom.bin",
            "note": "DSP LLE only, and a file that is absent or not 8192 bytes fails initialisation, which aborts the emulation thread. The adler32 is taken over the byte-swapped image and the value here is the Nintendo pair; six replacement pairs are also accepted.",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:120, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:107-120, Source/Core/Core/DSP/DSPCore.h:44, Source/Core/Core/DSP/DSPCore.cpp:28-71",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "description": "DSP coefficient ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "name": "dsp_coef.bin",
            "note": "Read by DSP LLE alongside the instruction ROM, and by the AX ucode under HLE for polyphase resampling, which drops any file that is not 0x1000 bytes and plays on without it.",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:121, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:107-120, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:42-69, Source/Core/Core/DSP/DSPCore.h:58",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Gecko code handler",
            "name": "codehandler.bin",
            "note": "Read from the root of the Sys directory when cheats are enabled, and written into guest memory between the installer bounds; too large a file is refused and cheats stay off.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:139, Source/Core/Core/GeckoCode.cpp:120-134, Source/Core/Core/GeckoCode.cpp:142-144"
          },
          {
            "description": "BootMii key dump, console keys and identity",
            "hle_fallback": true,
            "name": "keys.bin",
            "note": "Read at every key store construction, so on every Wii title. Supplies the console private key and signature, the MS and CA identifiers, the NAND key and HMAC and the backup key. A short read leaves the built-in keys in place, the structure being fixed at 0x400 bytes. NAND import writes this file from the keys appended to the image.",
            "path": "Wii/keys.bin",
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/Core/IOS/IOSC.cpp:92, Source/Core/Core/IOS/IOSC.cpp:211, Source/Core/Core/IOS/IOSC.cpp:623-649, Source/Core/DiscIO/NANDImporter.cpp:258-267",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii system configuration",
            "hle_fallback": true,
            "name": "SYSCONF",
            "note": "Opened through the emulated filesystem and accepted only at 0x4000 bytes; anything else is replaced by a freshly generated one.",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "size": 16384,
            "source_ref": "Source/Core/Common/CommonPaths.h:102, Source/Core/Core/SysConf.cpp:19, Source/Core/Core/SysConf.cpp:54-65",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii region and language settings",
            "hle_fallback": true,
            "name": "setting.txt",
            "note": "Read for its serial number and model at Wii boot, then written again from the emulated region settings. The read fills a fixed 0x100 byte buffer, so a shorter file yields nothing.",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:137, Source/Core/Common/SettingsHandler.h:21-26, Source/Core/Core/Boot/Boot_BS2Emu.cpp:341-353",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii SD card image",
            "hle_fallback": true,
            "name": "WiiSD.raw",
            "note": "Opened read-write when the SD device is opened; a 128 MB image is created when the file is missing. The configured override is empty by default, so the file stays under Load/.",
            "path": "Load/WiiSD.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:134, Source/Core/Common/FileUtil.cpp:998, Source/Core/Core/Config/MainSettings.cpp:289, Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp:90-107",
            "system": "nintendo-wii"
          },
          {
            "description": "console SSL client certificate",
            "hle_fallback": true,
            "name": "clientca.pem",
            "note": "Read from the NAND root when a title asks for the built-in client certificate, and refused when the sha256 does not match the value in the source. One panic alert per IOS instance covers this file and the key together. NAND import carves it out of the IOS13 content by its DER header.",
            "path": "Wii/clientca.pem",
            "required": false,
            "sha256": "229ec678525e060588e8ea23e5459ec14af3c2ebb7b9e69ec46b0faf011730d9",
            "source_ref": "Source/Core/Core/IOS/Network/SSL.cpp:135-138, Source/Core/Core/IOS/Network/SSL.cpp:148-181, Source/Core/Core/IOS/Network/SSL.cpp:383-390, Source/Core/DiscIO/NANDImporter.cpp:224",
            "system": "nintendo-wii",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "console SSL client private key",
            "hle_fallback": true,
            "name": "clientcakey.pem",
            "note": "Read alongside the client certificate and parsed as the private key for it; either one failing leaves the connection without a client certificate.",
            "path": "Wii/clientcakey.pem",
            "required": false,
            "sha256": "723be9b32c3afb83a4a3757adf352529e90c0ad6fad52509963ba8942ae625df",
            "source_ref": "Source/Core/Core/IOS/Network/SSL.cpp:139-142, Source/Core/Core/IOS/Network/SSL.cpp:383-395, Source/Core/DiscIO/NANDImporter.cpp:225",
            "system": "nintendo-wii",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "console SSL root CA certificate",
            "hle_fallback": true,
            "name": "rootca.pem",
            "note": "Read when a title asks for the built-in root CA, on the same sha256 check as the client pair.",
            "path": "Wii/rootca.pem",
            "required": false,
            "sha256": "c5b0f8dfcec6b9ed2ac38b8bc69a4db7c209dc177d243c8df2bddf9e39171e5f",
            "source_ref": "Source/Core/Core/IOS/Network/SSL.cpp:143-146, Source/Core/Core/IOS/Network/SSL.cpp:449-455, Source/Core/DiscIO/NANDImporter.cpp:226",
            "system": "nintendo-wii",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "BootMii NAND backup",
            "name": "nand.bin",
            "note": "Chosen through the app's import entry, not read from a fixed location. Accepted at the bare image size or that plus the 0x400 byte key block, and refused at any other. The pages are read 0x800 at a time with the 0x40 byte ECC block skipped. Import writes keys.bin and the three certificates, then unpacks the filesystem.",
            "path": null,
            "required": false,
            "size": [
              553648128,
              553649152
            ],
            "source_ref": "Source/Android/jni/WiiUtils.cpp:97-116, Source/Core/DiscIO/NANDImporter.cpp:19, Source/Core/DiscIO/NANDImporter.cpp:26-40, Source/Core/DiscIO/NANDImporter.cpp:42-72",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Mii database imported into the emulated Wii Remote",
            "name": "mii.bin",
            "note": "Read from the NAND root when an emulated Wii Remote is reset, and copied into both Mii blocks of its EEPROM. Absent, the EEPROM keeps its default contents.",
            "path": "Wii/mii.bin",
            "required": false,
            "source_ref": "Source/Core/Core/HW/WiimoteEmu/WiimoteEmu.cpp:156-165",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 account configuration",
            "name": "nwc24msg.cfg",
            "note": "Read as one packed structure, so a shorter file fails the read and a default configuration is generated and written back. A file that reads is then checked for the WcCf magic, its own checksum, an id generation under 0x20 and version 8, each mismatch logged.",
            "path": "Wii/shared2/wc24/nwc24msg.cfg",
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/Core/IOS/Network/KD/NWC24Config.cpp:17, Source/Core/Core/IOS/Network/KD/NWC24Config.cpp:24-38, Source/Core/Core/IOS/Network/KD/NWC24Config.cpp:90-117, Source/Core/Core/IOS/Network/KD/NWC24Config.h:87-109",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "WiiConnect24 download task list",
            "name": "nwc24dl.bin",
            "note": "Read as one packed structure of a 128 byte header plus 120 records and 120 entries, so a shorter file fails the read and leaves the list empty. A file that reads is checked for the WcDl magic and version 1.",
            "path": "Wii/shared2/wc24/nwc24dl.bin",
            "required": false,
            "size": 63488,
            "source_ref": "Source/Core/Core/IOS/Network/KD/NWC24DL.cpp:16, Source/Core/Core/IOS/Network/KD/NWC24DL.cpp:23-32, Source/Core/Core/IOS/Network/KD/NWC24DL.cpp:34-50, Source/Core/Core/IOS/Network/KD/NWC24DL.h:43, Source/Core/Core/IOS/Network/KD/NWC24DL.h:111-116",
            "system": "nintendo-wii",
            "validation": [
              "size"
            ]
          },
          {
            "description": "WiiConnect24 friend list",
            "name": "nwc24fl.bin",
            "note": "Placed in the NAND by the Sys/Wii copy and read from there by the running title. Titles such as Mario Kart Wii expect the WiiConnect24 files to exist even on a first launch, which is why the copy happens without the system menu ever running.",
            "path": "Wii/shared2/wc24/nwc24fl.bin",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Source/Core/Core/WiiRoot.cpp:330-335",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 friend list backup",
            "name": "nwc24fls.bin",
            "note": "Placed in the NAND by the Sys/Wii copy, which never overwrites a file the NAND already holds.",
            "path": "Wii/shared2/wc24/nwc24fls.bin",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Source/Core/Core/WiiRoot.cpp:334",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 account configuration backup",
            "name": "nwc24msg.cbk",
            "note": "Placed in the NAND by the Sys/Wii copy, which never overwrites a file the NAND already holds.",
            "path": "Wii/shared2/wc24/nwc24msg.cbk",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Source/Core/Core/WiiRoot.cpp:334",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 miscellaneous state",
            "name": "misc.bin",
            "note": "Placed in the NAND by the Sys/Wii copy. The time device carries a note about writing it but no code path does.",
            "path": "Wii/shared2/wc24/misc.bin",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Source/Core/Core/IOS/Network/KD/NetKDTime.cpp:34",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 receive mailbox index",
            "name": "wc24recv.ctl",
            "note": "Placed in the NAND by the Sys/Wii copy, which recurses into mbox and never overwrites a file the NAND already holds.",
            "path": "Wii/shared2/wc24/mbox/wc24recv.ctl",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 receive mailbox",
            "name": "wc24recv.mbx",
            "note": "Placed in the NAND by the Sys/Wii copy. The bundled file is a stub; the note shipped beside it gives 0x700000 as the size on a console.",
            "path": "Wii/shared2/wc24/mbox/wc24recv.mbx",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Data/Sys/Wii/shared2/wc24/mbox/Readme.txt",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 send mailbox index",
            "name": "wc24send.ctl",
            "note": "Placed in the NAND by the Sys/Wii copy, which recurses into mbox and never overwrites a file the NAND already holds.",
            "path": "Wii/shared2/wc24/mbox/wc24send.ctl",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322",
            "system": "nintendo-wii"
          },
          {
            "description": "WiiConnect24 send mailbox",
            "name": "wc24send.mbx",
            "note": "Placed in the NAND by the Sys/Wii copy. The bundled file is a stub; the note shipped beside it gives 0x200000 as the size on a console.",
            "path": "Wii/shared2/wc24/mbox/wc24send.mbx",
            "required": false,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:288-322, Data/Sys/Wii/shared2/wc24/mbox/Readme.txt",
            "system": "nintendo-wii"
          },
          {
            "description": "note on the truncated mailboxes, copied into the NAND",
            "name": "Readme.txt",
            "note": "The Sys/Wii copy walks the directory and takes every entry, so this file lands in the NAND with the mailboxes. It records the console sizes of the two mbx files. The hash names the file carried in the source tree, the only form it has, and is not a check the code performs; without it the name alone matches any readme.",
            "path": "Wii/shared2/wc24/mbox/Readme.txt",
            "required": false,
            "sha256": "e5a888912968050c6c1d46d1c364c324684e1d15aaa62cfe36cf7fce2c687b21",
            "size": 103,
            "source_ref": "Source/Core/Core/WiiRoot.cpp:291-319, Data/Sys/Wii/shared2/wc24/mbox/Readme.txt",
            "system": "nintendo-wii"
          },
          {
            "aliases": [
              "titles.txt"
            ],
            "description": "user title database",
            "name": "wiitdb.txt",
            "note": "One title id equals name pair per line, ids of four characters and up. titles.txt is read only when wiitdb.txt yields nothing. Overlays the per-language databases shipped in the Sys directory, which cover ten languages; the Portuguese and Russian files also present there are never registered.",
            "path": "Load/wiitdb.txt",
            "required": false,
            "source_ref": "Source/Core/Core/TitleDatabase.cpp:29-51, Source/Core/Core/TitleDatabase.cpp:54-58, Source/Core/Core/TitleDatabase.cpp:63-79"
          },
          {
            "description": "MIOS symbol map",
            "name": "mios-ipl.map",
            "note": "Read from Maps/ in the user directory when MIOS starts, and a successful load re-applies the HLE function patches against the symbols it names.",
            "path": "Maps/mios-ipl.map",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/MIOS.cpp:67-72"
          }
        ],
        "mode": "standalone",
        "notes": "Android-only Dolphin fork published as the org.dolphinemu.mmjr package. The\nrepositories it was developed and released from are gone; this reading is\ntaken from a surviving copy carrying the whole maintainer commit line, up to\nthe last one, which sets the version string to 2.0-18025. The tree is a\nselective merge of Dolphin Official carrying that label rather than a\ncheckout of it: at Dolphin 5.0-18025 the memory subsystem has already moved\nbehind Core::System, and here it has not, so no single Dolphin revision\nmatches and no upstream pin is declared.\nref: Source/Android/app/build.gradle:32, Source/Android/app/build.gradle:135\n\nTwo roots. The user directory is mmjr-revamp at the root of external storage.\nThe Sys directory is extracted from the APK assets into the app's internal\nfiles directory, and a change of git revision deletes it and extracts it\nagain, so nothing placed there survives an update. The build drops Resources\nand Themes from the assets copy. Paths below are relative to the user\ndirectory; entries with no path are read only from the Sys directory and name\ntheir location in their note.\nref: Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java:103,\n     Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java:138-155,\n     Source/Core/Common/CommonPaths.h:23, Source/Android/jni/CMakeLists.txt:37-42\n\nThe GameCube boot ROM is looked up as GC/<REGION>/IPL.bin, in the user\ndirectory first and the Sys directory second. The region directory is USA for\nNTSC-U, EUR for PAL and JAP for NTSC-J: JPN also exists but only the memory\ncard folder path asks for it, every other caller takes the legacy default.\nBooting the IPL itself hashes the whole file with crc32 and warns on an\nunknown dump, then warns again when the dump and the boot region disagree on\nPAL. SkipIPL defaults to true, so games start without it.\nref: Source/Core/Common/CommonPaths.h:34-35,\n     Source/Core/Core/Config/MainSettings.cpp:567-592,\n     Source/Core/Core/Config/MainSettings.cpp:594-600,\n     Source/Core/Core/Config/MainSettings.cpp:675-723,\n     Source/Core/Core/Boot/Boot.cpp:323-327, Source/Core/Core/Boot/Boot.cpp:408-442,\n     Source/Core/Core/Boot/Boot.cpp:444-449,\n     Source/Core/Core/Config/MainSettings.cpp:35\n\nFonts follow the IPL. When a dump is present the Shift JIS and Windows-1252\nfonts are read out of it at offsets 0x1aff00 and 0x1fcf00, for 0x4a24d and\n0x2575 bytes; otherwise the standalone font files are loaded whole, and the\nbundled ones have different padding from the console fonts.\nref: Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:102-131,\n     Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:175-187,\n     Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:200-241\n\nDSP HLE is the default and reads dsp_coef.bin alone, for polyphase resampling\ncoefficients, skipping any file that is not 0x1000 bytes. DSP LLE, reached by\nsetting DSPHLE to False, loads both ROMs from GC/ in the user directory then\nSys/GC/, rejects either at the wrong size, and a rejection aborts the\nemulation thread. Both are byte-swapped into memory and the pair is then\nhashed with adler32 against seven known combinations.\nref: Source/Core/Core/Config/MainSettings.cpp:40,\n     Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,\n     Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:107-120,\n     Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:42-69,\n     Source/Core/Core/DSP/DSPCore.cpp:28-71, Source/Core/Core/Core.cpp:556-559\n\nWii emulation reads keys.bin from the NAND root every time the key store is\nbuilt, and keeps the built-in keys when it is absent. SYSCONF is read through\nthe emulated filesystem and rebuilt unless it is exactly 0x4000 bytes, and\nsetting.txt is read for its serial number then written again from the\nemulated region settings. A missing SD card image is created at 128 MB. The\nthree SSL files are hashed with sha256 against values held in the source and\nrefused on a mismatch, once per session.\nref: Source/Core/Core/IOS/IOSC.cpp:211, Source/Core/Core/IOS/IOSC.cpp:623-649,\n     Source/Core/Core/SysConf.cpp:19, Source/Core/Core/SysConf.cpp:54-65,\n     Source/Core/Core/Boot/Boot_BS2Emu.cpp:341-352,\n     Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp:90-107,\n     Source/Core/Core/IOS/Network/SSL.cpp:135-181\n\nThe WiiConnect24 tree is copied out of Sys/Wii into the NAND at every Wii\nboot, one file at a time, and a file already present in the NAND is left\nalone. Copies placed under Wii/shared2/wc24 are therefore the ones that\nsurvive, and the shipped blanks only fill what is still missing. Dolphin\nitself reads nwc24msg.cfg and nwc24dl.bin back out of the NAND; the rest are\nthere because titles expect them.\nref: Source/Core/Core/WiiRoot.cpp:288-322, Source/Core/Core/WiiRoot.cpp:330-335,\n     Source/Core/Core/IOS/Network/KD/NWC24Config.cpp:24-38,\n     Source/Core/Core/IOS/Network/KD/NWC24DL.cpp:23-32\n\nNAND import is compiled into the Android build and wired to both launchers. A\nBootMii image writes keys.bin and the three certificates into the NAND root,\nthe certificates being carved out of the IOS13 content by searching for their\nDER headers. The keys have to be appended to the image: the callback that\nwould ask for a separate OTP dump answers with an empty path here.\nref: Source/Android/jni/WiiUtils.cpp:97-116,\n     Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java:240,\n     Source/Core/DiscIO/NANDImporter.cpp:26-40,\n     Source/Core/DiscIO/NANDImporter.cpp:189-256,\n     Source/Core/DiscIO/NANDImporter.cpp:258-267\n\nEvery boot looks for a symbol map named after the running game ID, in Maps/\nin the user directory alone, and reloads it whenever the running title\nchanges. The game ID comes from the disc or TMD metadata, not from a debugger\nsetting. No map ships with the build.\nref: Source/Core/Core/Boot/Boot.cpp:373-399,\n     Source/Core/Core/ConfigManager.cpp:153-162,\n     Source/Core/Core/ConfigManager.cpp:189-199\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/nachoverdon/Dolphin-MMJR2",
        "source_commit": "4d0fdb8eea616320e967408cf5547c72a95196f3",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/dolphin-emu/dolphin",
        "valid_bios_crc32": {
          "ipl_ntsc": [
            {
              "crc32": "6DAC1F2A",
              "name": "NTSC v1.0"
            },
            {
              "crc32": "D5E6FEEA",
              "name": "NTSC v1.1"
            },
            {
              "crc32": "86573808",
              "name": "NTSC v1.2"
            },
            {
              "crc32": "667D0B64",
              "name": "MPAL v1.1 (Brazil)"
            }
          ],
          "ipl_pal": [
            {
              "crc32": "4F319F43",
              "name": "PAL v1.0"
            },
            {
              "crc32": "AD1B7F16",
              "name": "PAL v1.2"
            }
          ]
        }
      }
    },
    {
      "id": "dolphin_launcher",
      "profile": {
        "core_classification": "launcher",
        "core_version": "1.2.0",
        "cores": [
          "dolphin_launcher"
        ],
        "display_name": "Nintendo - GameCube / Wii (Dolphin Launcher)",
        "emulator": "Dolphin Launcher",
        "exclusion_note": "stub core calls standalone Dolphin — all BIOS in Dolphin's own directory",
        "files": [],
        "notes": "Launcher stub that passes games to standalone Dolphin via system() calls.\nTries dolphin-emu-nogui, falls back to dolphin-emu, then Flatpak\norg.DolphinEmu.dolphin-emu. Waits for Dolphin to exit, then signals\nRETRO_ENVIRONMENT_SHUTDOWN. Requires Dolphin installed on the host.\nAll BIOS/firmware files are managed by the standalone Dolphin install.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/RobLoach/libretro-dolphin-launcher",
        "source_commit": "6d72f3093d33461821e4f7fde6d3308187e644b9",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "launcher",
        "upstream": "https://github.com/dolphin-emu/dolphin"
      }
    },
    {
      "id": "dosbox",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.74",
        "cores": [
          "dosbox"
        ],
        "display_name": "DOS (DOSBox)",
        "emulator": "DOSBox",
        "files": [
          {
            "description": "MT-32 Control v1.04",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:30",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:31",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:32",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:33",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:34",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.00",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:36",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.02",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/midi/midi_mt32.h:92, src/midi/munt/ROMInfo.cpp:37",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_PCM.ROM",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/midi/midi_mt32.h:99, src/midi/munt/ROMInfo.cpp:39",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "hle_fallback": true,
            "mode": "libretro",
            "name": "MT32_PCM.ROM",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/midi/midi_mt32.h:99, src/midi/munt/ROMInfo.cpp:40",
            "validation": [
              "sha1",
              "size"
            ]
          }
        ],
        "notes": "Based on DOSBox 0.74 snapshot. MUNT MT-32 emulation added by libretro port.\nUpstream DOSBox 0.74 has no MUNT — only OS-level MIDI (ALSA, CoreMIDI, Win32).\nHardware MIDI drivers removed, replaced with retro_midi_interface passthrough.\nMT-32 activated via mididevice=mt32 in dosbox config section [midi].\nOlder MUNT version: no MT-32 v2.x ROMs, no CM-32LN support.\nBoth ROMs loaded by fixed filename from system directory root.\nref: midi_mt32.h:82-106\nKeyboard layouts and codepages embedded in binary.\nref: dos_keyboard_layout_data.h, dos_codepages.h\n.info declares firmware_count=0 but code loads 2 files (MUNT ROMs).\ndosbox-libretro.conf optional config searched in system_directory/DOSbox/.\nref: libretro.cpp:751\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dosbox-libretro",
        "source_commit": "4024bf0048c261db58ef98cb5e16de291c429f4e",
        "systems": [
          "dos"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/dosbox/"
      }
    },
    {
      "id": "dosbox-pure-unleashed",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.0-preview6",
        "cores": [
          "dosbox-pure-unleashed",
          "dosboxpure"
        ],
        "display_name": "DOS (DOSBox Pure Unleashed)",
        "emulator": "DOSBox Pure Unleashed",
        "files": [
          {
            "description": "MT-32 Control v1.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5112, src/gui/mt32emu.h:5129",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5113, src/gui/mt32emu.h:5130",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5114, src/gui/mt32emu.h:5131",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5115, src/gui/mt32emu.h:5132",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5116, src/gui/mt32emu.h:5133",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.03",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5837064c9df4741a55f7c4d8787ac158dff2d3ce",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5118, src/gui/mt32emu.h:5135",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5119, src/gui/mt32emu.h:5136",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5120, src/gui/mt32emu.h:5137",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5121, src/gui/mt32emu.h:5138",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.00",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5122, src/gui/mt32emu.h:5139",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.02",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5123, src/gui/mt32emu.h:5140",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32LN/CM-500/LAPC-N Control v1.00",
            "hle_fallback": true,
            "name": "CM32LN_CONTROL.ROM",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5124, src/gui/mt32emu.h:5141",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM",
            "hle_fallback": true,
            "name": "MT32_PCM.ROM",
            "note": "accepted by every MT-32 control ROM, v1.x and v2.x (pcmCount 128)",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/gui/mt32emu.h:5126, src/gui/mt32emu.h:5143",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32LN_PCM.ROM"
            ],
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "hle_fallback": true,
            "name": "CM32L_PCM.ROM",
            "note": "accepted by the CM-32L and CM-32LN control ROMs (pcmCount 256). The alias covers the name derived from CM32LN_CONTROL.ROM.\n",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/gui/mt32emu.h:5127, src/gui/mt32emu.h:5144",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "General MIDI SoundFont (any .sf2/.sf3 accepted)",
            "hle_fallback": true,
            "name": "DOSBOX.SF2",
            "note": "Any .SF2 or .SF3 in the system directory is listed in the MIDI option. DOSBOX.SF2 is the fixed name looked up on the mounted C: drive as a per game override.\n",
            "required": false,
            "source_ref": "dosbox_pure_libretro.cpp:1407,2805"
          }
        ],
        "logo": "https://raw.githubusercontent.com/schellingb/dosbox-pure-unleashed/main/images/logo.png",
        "mode": "standalone",
        "notes": "Desktop build of DOSBox Pure by the same author. The repository holds only\nthe platform layer (main.cpp, vfs_implementation.cpp) and compiles the\nemulation core from a sibling checkout of schellingb/dosbox-pure with\n-D__LIBRETRO__ -DDBP_STANDALONE, using ZillaLib for video, input and audio.\nref: Makefile:7,9-14,34\n\nNo BIOS. Windows 3.x and 9x run as guest operating systems installed into\nthe emulated DOS machine, not as separate emulated hardware.\n\nSystem directory: the program keeps DOSBoxPure.cfg in a base directory and\ncreates saves and system folders next to it. Base directory is\n%APPDATA%\\DOSBoxPure on Windows when the user creates that folder, else the\ndirectory of the executable; $HOME/.config/DOSBoxPure on Linux and\n$HOME/Library/Application Support/DOSBoxPure on macOS, else the working\ndirectory. The system folder can be redirected with the path_system key in\nDOSBoxPure.cfg. It is returned to the core as RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.\nref: main.cpp:1985-2045,973-974\n\nSystem directory scan (recursive, DBP_ScanSystem):\n  *.SF2 and *.SF3 listed as General MIDI SoundFonts, any file whose last\n  four characters are \".SF\" plus one.\n  *_CONTROL.ROM listed as Roland MT-32/CM-32L control ROMs.\n  ref: dosbox_pure_libretro.cpp:1380-1412\n  Both feed the Audio > MIDI SoundFont option, prefixed with the system\n  directory path at apply time.\n  ref: dosbox_pure_libretro.cpp:2495\n  With no MIDI file selected, mpu401 is set to none and games fall back to\n  their OPL or Sound Blaster music driver. A General MIDI over OPL\n  synthesizer is built in and opens on midiconfig=adlib.\n  ref: dosbox_pure_libretro.cpp:2497, midi_opl.h:46-49\n\nMT-32 pairing: the PCM ROM is not scanned. Its name is derived from the\ncontrol ROM path by replacing CONTROL with PCM, preserving the case of both\nletters, so MT32_CONTROL.ROM resolves MT32_PCM.ROM. Open fails unless both\nare found.\nref: midi_mt32.h:182-201,194-195\nZIP archives are accepted and picked by size instead of name: 65536 or\n131072 for control, 524288 or 1048576 for PCM.\nref: midi_mt32.h:163\nBundled MUNT (header-only mt32emu.h) validates size and SHA1 against a\n14 entry table and rejects anything else, failing Synth::open.\nref: mt32emu.h:5185,2979-2989,3013-3020\nEach control ROM fixes the PCM size it accepts through its pcmCount: 128\nrequires the 524288 byte MT-32 PCM ROM, 256 requires the 1048576 byte\nCM-32L PCM ROM. The MT-32 v2.x control ROMs carry pcmCount 128 and so pair\nwith the MT-32 PCM ROM.\nref: mt32emu.h:2586-2598,3167,3024-3029\n\nSoundFonts are parsed by TinySoundFont with no size or hash check. SF3 ogg\ncompressed samples decode through the bundled stb_vorbis.\nref: midi_tsf.h:22,65,96-105\n\nPer game override: a DOSBOX.SF2, or an MT32_PCM.ROM together with an\nMT32_CONTROL.ROM, found on the mounted C: drive replaces the option value\nand is marked fixed. The control ROM is matched through its 8.3 forms\nMT32TROL.ROM inside ZIPs and MT32_C~1.ROM on local file systems.\nref: dosbox_pure_libretro.cpp:2803-2813\nMIDI ZIPs are looked up in the content directory before the system directory.\nref: dosbox_pure_libretro.cpp:906-914\n\nKeyboard layouts and codepages are compiled in, external keyboard.sys,\nkeybrd2.sys, keybrd3.sys and EGA*.CPI loading is disabled.\nref: include/config.h:58, dos_keyboard_layout.cpp:729-819\n\nOther system directory entries carry no fixed identity and are not listed\nas files. Hard disk images (*.IMG, *.IMA, *.VHD of at least 7 MB and a\nmultiple of 512 bytes) are created by the Install New Operating System\nfeature and booted as C:. *.DOSZ archives are shells the user assembles,\nunderlaid below C: and started through WINDOWS.BAT, AUTOEXEC.BAT or\nWINDOWS\\WIN.COM. DOSBoxPureMidiCache.txt is written by the emulator when a\nscan exceeds two seconds and read back to skip later scans.\nref: dosbox_pure_libretro.cpp:1413-1424,1425-1446,1452-1466,\n     dosbox_pure_run.h:187-210,289-297\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/schellingb/dosbox-pure-unleashed",
        "source_commit": "4a11412248ca4c862751a7d9e6818023795031e9",
        "systems": [
          "dos"
        ],
        "type": "standalone",
        "upstream": "https://github.com/schellingb/dosbox-pure",
        "upstream_commit": "7f6e8fb7385fa446d1444d671063268520bf9b54",
        "verification": "sha1"
      }
    },
    {
      "id": "dosbox-staging",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "0.84.0-alpha",
        "cores": [
          "dosbox-staging",
          "dosbox_staging"
        ],
        "display_name": "DOS (DOSBox Staging)",
        "emulator": "DOSBox Staging",
        "files": [
          {
            "description": "MT-32 Control v1.04",
            "name": "ctrl_mt32_1_04.rom",
            "path": "mt32-roms/ctrl_mt32_1_04.rom",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:110, src/midi/mt32.cpp:154-160, munt ROMInfo.cpp:59, munt ROMInfo.cpp:89",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05",
            "name": "ctrl_mt32_1_05.rom",
            "path": "mt32-roms/ctrl_mt32_1_05.rom",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:114, src/midi/mt32.cpp:162-168, munt ROMInfo.cpp:62, munt ROMInfo.cpp:92",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06",
            "name": "ctrl_mt32_1_06.rom",
            "path": "mt32-roms/ctrl_mt32_1_06.rom",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:118, src/midi/mt32.cpp:170-176, munt ROMInfo.cpp:65, munt ROMInfo.cpp:95",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07",
            "name": "ctrl_mt32_1_07.rom",
            "path": "mt32-roms/ctrl_mt32_1_07.rom",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:122, src/midi/mt32.cpp:178-184, munt ROMInfo.cpp:68, munt ROMInfo.cpp:98",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge",
            "name": "ctrl_mt32_bluer.rom",
            "path": "mt32-roms/ctrl_mt32_bluer.rom",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:126, src/midi/mt32.cpp:186-192, munt ROMInfo.cpp:71, munt ROMInfo.cpp:101",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.03",
            "name": "ctrl_mt32_2_03.rom",
            "path": "mt32-roms/ctrl_mt32_2_03.rom",
            "required": false,
            "sha1": "5837064c9df4741a55f7c4d8787ac158dff2d3ce",
            "size": 131072,
            "source_ref": "src/midi/mt32.cpp:130, src/midi/mt32.cpp:194-200, munt ROMInfo.cpp:73, munt ROMInfo.cpp:103",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.04",
            "name": "ctrl_mt32_2_04.rom",
            "path": "mt32-roms/ctrl_mt32_2_04.rom",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "src/midi/mt32.cpp:132, src/midi/mt32.cpp:202-208, munt ROMInfo.cpp:74, munt ROMInfo.cpp:104",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.06",
            "name": "ctrl_mt32_2_06.rom",
            "path": "mt32-roms/ctrl_mt32_2_06.rom",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "src/midi/mt32.cpp:134, src/midi/mt32.cpp:210-216, munt ROMInfo.cpp:75, munt ROMInfo.cpp:105",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.07",
            "name": "ctrl_mt32_2_07.rom",
            "path": "mt32-roms/ctrl_mt32_2_07.rom",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "src/midi/mt32.cpp:136, src/midi/mt32.cpp:218-224, munt ROMInfo.cpp:76, munt ROMInfo.cpp:106",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.00",
            "name": "ctrl_cm32l_1_00.rom",
            "path": "mt32-roms/ctrl_cm32l_1_00.rom",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:143, src/midi/mt32.cpp:226-232, munt ROMInfo.cpp:77, munt ROMInfo.cpp:107",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.02",
            "name": "ctrl_cm32l_1_02.rom",
            "path": "mt32-roms/ctrl_cm32l_1_02.rom",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:144, src/midi/mt32.cpp:234-240, munt ROMInfo.cpp:78, munt ROMInfo.cpp:108",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32LN/CM-500/LAPC-N Control v1.00",
            "name": "ctrl_cm32ln_1_00.rom",
            "path": "mt32-roms/ctrl_cm32ln_1_00.rom",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "src/midi/mt32.cpp:145, src/midi/mt32.cpp:242-248, munt ROMInfo.cpp:79, munt ROMInfo.cpp:109",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.04, even bytes",
            "name": "ctrl_mt32_1_04_a.rom",
            "path": "mt32-roms/ctrl_mt32_1_04_a.rom",
            "required": false,
            "sha1": "9cd4858014c4e8a9dff96053f784bfaac1092a2e",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:111, src/midi/mt32.cpp:154-160, munt ROMInfo.cpp:57, munt ROMInfo.cpp:87",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.04, odd bytes",
            "name": "ctrl_mt32_1_04_b.rom",
            "path": "mt32-roms/ctrl_mt32_1_04_b.rom",
            "required": false,
            "sha1": "fe8db469b5bfeb37edb269fd47e3ce6d91014652",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:112, src/midi/mt32.cpp:154-160, munt ROMInfo.cpp:58, munt ROMInfo.cpp:88",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05, even bytes",
            "name": "ctrl_mt32_1_05_a.rom",
            "path": "mt32-roms/ctrl_mt32_1_05_a.rom",
            "required": false,
            "sha1": "57a09d80d2f7ca5b9734edbe9645e6e700f83701",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:115, src/midi/mt32.cpp:162-168, munt ROMInfo.cpp:60, munt ROMInfo.cpp:90",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05, odd bytes",
            "name": "ctrl_mt32_1_05_b.rom",
            "path": "mt32-roms/ctrl_mt32_1_05_b.rom",
            "required": false,
            "sha1": "52e3c6666db9ef962591a8ee99be0cde17f3a6b6",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:116, src/midi/mt32.cpp:162-168, munt ROMInfo.cpp:61, munt ROMInfo.cpp:91",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06, even bytes",
            "name": "ctrl_mt32_1_06_a.rom",
            "path": "mt32-roms/ctrl_mt32_1_06_a.rom",
            "required": false,
            "sha1": "cc83bf23cee533097fb4c7e2c116e43b50ebacc8",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:119, src/midi/mt32.cpp:170-176, munt ROMInfo.cpp:63, munt ROMInfo.cpp:93",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06, odd bytes",
            "name": "ctrl_mt32_1_06_b.rom",
            "path": "mt32-roms/ctrl_mt32_1_06_b.rom",
            "required": false,
            "sha1": "bf4f15666bc46679579498386704893b630c1171",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:120, src/midi/mt32.cpp:170-176, munt ROMInfo.cpp:64, munt ROMInfo.cpp:94",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07, even bytes",
            "name": "ctrl_mt32_1_07_a.rom",
            "path": "mt32-roms/ctrl_mt32_1_07_a.rom",
            "required": false,
            "sha1": "13f06b38f0d9e0fc050b6503ab777bb938603260",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:123, src/midi/mt32.cpp:178-184, munt ROMInfo.cpp:66, munt ROMInfo.cpp:96",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07, odd bytes",
            "name": "ctrl_mt32_1_07_b.rom",
            "path": "mt32-roms/ctrl_mt32_1_07_b.rom",
            "required": false,
            "sha1": "c55e165487d71fa88bd8c5e9c083bc456c1a89aa",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:124, src/midi/mt32.cpp:178-184, munt ROMInfo.cpp:67, munt ROMInfo.cpp:97",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge, even bytes",
            "name": "ctrl_mt32_bluer_a.rom",
            "path": "mt32-roms/ctrl_mt32_bluer_a.rom",
            "required": false,
            "sha1": "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:127, src/midi/mt32.cpp:186-192, munt ROMInfo.cpp:69, munt ROMInfo.cpp:99",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge, odd bytes",
            "name": "ctrl_mt32_bluer_b.rom",
            "path": "mt32-roms/ctrl_mt32_bluer_b.rom",
            "required": false,
            "sha1": "e0934320d7cbb5edfaa29e0d01ae835ef620085b",
            "size": 32768,
            "source_ref": "src/midi/mt32.cpp:128, src/midi/mt32.cpp:186-192, munt ROMInfo.cpp:70, munt ROMInfo.cpp:100",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM",
            "name": "pcm_mt32.rom",
            "note": "also serves as the first half of the CM-32L PCM ROM, paired with pcm_cm32l_h.rom\n",
            "path": "mt32-roms/pcm_mt32.rom",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/midi/mt32.cpp:138, src/midi/mt32.cpp:151, munt ROMInfo.cpp:83, munt ROMInfo.cpp:113, munt ROMInfo.cpp:115",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM, first half",
            "name": "pcm_mt32_l.rom",
            "path": "mt32-roms/pcm_mt32_l.rom",
            "required": false,
            "sha1": "3a1e19b0cd4036623fd1d1d11f5f25995585962b",
            "size": 262144,
            "source_ref": "src/midi/mt32.cpp:139, munt ROMInfo.cpp:81, munt ROMInfo.cpp:111",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM, second half",
            "name": "pcm_mt32_h.rom",
            "path": "mt32-roms/pcm_mt32_h.rom",
            "required": false,
            "sha1": "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01",
            "size": 262144,
            "source_ref": "src/midi/mt32.cpp:140, munt ROMInfo.cpp:82, munt ROMInfo.cpp:112",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "name": "pcm_cm32l.rom",
            "path": "mt32-roms/pcm_cm32l.rom",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/midi/mt32.cpp:147, src/midi/mt32.cpp:226-248, munt ROMInfo.cpp:85, munt ROMInfo.cpp:117",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/CM-64/LAPC-I PCM ROM, second half",
            "name": "pcm_cm32l_h.rom",
            "path": "mt32-roms/pcm_cm32l_h.rom",
            "required": false,
            "sha1": "3ad889fde5db5b6437cbc2eb6e305312fec3df93",
            "size": 524288,
            "source_ref": "src/midi/mt32.cpp:148, munt ROMInfo.cpp:84, munt ROMInfo.cpp:116",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "SC-55 wave ROM A (R15209276)",
            "max_size": 2097152,
            "name": "sc55_waverom1.bin",
            "path": "soundcanvas-roms/SC-55-v1.21/sc55_waverom1.bin",
            "required": false,
            "sha256": "5655509a531804f97ea2d7ef05b8fec20ebf46216b389a84c44169257a4d2007",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:340, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP pcm.h:83",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 wave ROM B (R15209277)",
            "max_size": 2097152,
            "name": "sc55_waverom2.bin",
            "path": "soundcanvas-roms/SC-55-v1.21/sc55_waverom2.bin",
            "required": false,
            "sha256": "c655b159792d999b90df9e4fa782cf56411ba1eaa0bb3ac2bdaf09e1391006b1",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:342, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP pcm.h:84",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 wave ROM C (R15209281)",
            "max_size": 1048576,
            "name": "sc55_waverom3.bin",
            "path": "soundcanvas-roms/SC-55-v1.21/sc55_waverom3.bin",
            "required": false,
            "sha256": "334b2d16be3c2362210fdbec1c866ad58badeb0f84fd9bf5d0ac599baf077cc2",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:344, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP pcm.h:85",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.00 MCU ROM (R15199748)",
            "max_size": 32768,
            "name": "sc55_rom1.bin",
            "path": "soundcanvas-roms/SC-55-v1.00/sc55_rom1.bin",
            "required": false,
            "sha256": "b4ecf44bc0520322b0d114d397951d3bf92ca6fa51d0d27b2407df58a6be2efe",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:336, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP mcu.h:216",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.00 program ROM (R15449258)",
            "max_size": 524288,
            "name": "sc55_rom2.bin",
            "path": "soundcanvas-roms/SC-55-v1.00/sc55_rom2.bin",
            "required": false,
            "sha256": "014e2e21ea30de7a1e4f1cdea14dd9a719960535e257a9e40e98dbb1a5870226",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:338, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.10 MCU ROM (R15199736)",
            "max_size": 32768,
            "name": "sc55_rom1.bin",
            "path": "soundcanvas-roms/SC-55-v1.10/sc55_rom1.bin",
            "required": false,
            "sha256": "2fe88ec39f3ef4b1de8cdf74527419467975c47f7aacfcd07605e01d54bd89b5",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:351, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP mcu.h:216",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.10 program ROM (R15209275)",
            "max_size": 524288,
            "name": "sc55_rom2.bin",
            "path": "soundcanvas-roms/SC-55-v1.10/sc55_rom2.bin",
            "required": false,
            "sha256": "ec064d6c4fc70ec990911089d966043cb819fba0e26e6f6afdd0a05e5301b91b",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:353, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.20 and v1.21 MCU ROM (R15199778)",
            "max_size": 32768,
            "name": "sc55_rom1.bin",
            "note": "same dump in the SC-55-v1.20 and SC-55-v1.21 directories",
            "path": "soundcanvas-roms/SC-55-v1.20/sc55_rom1.bin",
            "required": false,
            "sha256": "7e1bacd1d7c62ed66e465ba05597dcd60dfc13fc23de0287fdbce6cf906c6544",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:366, Nuked-SC55-CLAP 381, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP mcu.h:216",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.20 program ROM (R15209337)",
            "max_size": 524288,
            "name": "sc55_rom2.bin",
            "path": "soundcanvas-roms/SC-55-v1.20/sc55_rom2.bin",
            "required": false,
            "sha256": "22ce6ca59e6332143b335525e81fab501ea6fccce4b7e2f3bfc2cc8bf6612ff6",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:368, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v1.21 program ROM (R15209363)",
            "max_size": 524288,
            "name": "sc55_rom2.bin",
            "path": "soundcanvas-roms/SC-55-v1.21/sc55_rom2.bin",
            "required": false,
            "sha256": "effc6132d68f7e300aaef915ccdd08aba93606c22d23e580daf9ea6617913af1",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:383, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v2.00 MCU ROM (R15199799)",
            "max_size": 32768,
            "name": "sc55_rom1.bin",
            "path": "soundcanvas-roms/SC-55-v2.00/sc55_rom1.bin",
            "required": false,
            "sha256": "24a65c97cdbaa847d6f59193523ce63c73394b4b693a6517ee79441f2fb8a3ee",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:396, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP mcu.h:216",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55 v2.00 program ROM (R15209387)",
            "max_size": 524288,
            "name": "sc55_rom2.bin",
            "path": "soundcanvas-roms/SC-55-v2.00/sc55_rom2.bin",
            "required": false,
            "sha256": "f5dac35d450ab986570a209dff3816eec75cee669e161f54b51224b467dd0bcc",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:398, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 v1.01 MCU ROM (R15199858)",
            "max_size": 32768,
            "name": "rom1.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom1.bin",
            "required": false,
            "sha256": "8a1eb33c7599b746c0c50283e4349a1bb1773b5c0ec0e9661219bf6c067d2042",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:295, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP mcu.h:216",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 v1.01 program ROM (R00233567)",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "a4c9fd821059054c7e7681d61f49ce6f42ed2fe407a7ec1ba0dfdc9722582ce0",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:297, Nuked-SC55-CLAP emu.cpp:247-254, Nuked-SC55-CLAP mcu.h:217",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 v1.01 sub-MCU ROM (R15199880)",
            "max_size": 4096,
            "name": "rom_sm.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom_sm.bin",
            "required": false,
            "sha256": "b0b5f865a403f7308b4be8d0ed3ba2ed1c22db881b8a8326769dea222f6431d8",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:299, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP submcu.h:62",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 wave ROM 16M (R15209359)",
            "max_size": 2097152,
            "name": "waverom1.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/waverom1.bin",
            "required": false,
            "sha256": "c6429e21b9b3a02fbd68ef0b2053668433bee0bccd537a71841bc70b8874243b",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:301, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP pcm.h:83",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 wave ROM 8M (R15279813)",
            "max_size": 2097152,
            "name": "waverom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/waverom2.bin",
            "required": false,
            "sha256": "5b753f6cef4cfc7fcafe1430fecbb94a739b874e55356246a46abe24097ee491",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:303, Nuked-SC55-CLAP emu.cpp:238, Nuked-SC55-CLAP pcm.h:84",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, strict SC-55 tones, SC-55 v1.21 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "64f8c9daf1021cf86ea4ddf03a29b81b5ea0c18e74f462833023436388bb9dc4",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:553",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, strict SC-55 tones, SC-55 v2.00 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "14d14778caf46ffa9e3d608aa8e9c1a60c32bd4a536c26af3b2e1d81784c60f9",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:555",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, SC-55 tones, SC-55 v1.21 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "10b3f09485a74bb014f1a940d5c67f380c7979b62891d540d788154c83f17430",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:557",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, SC-55 tones, SC-55 v2.00 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "a2c720be1ab9115930d27f821a413c0366b7bf0c4ddfe0dadc5086136a1a4345",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:559",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, SC-55mkII tones, SC-55 v1.21 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "16cec615da10089beffe6de5129ba8ba33fa1bf017a5e6b78ad1d6d15cf4708e",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:561",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "description": "SC-55mk2 program ROM, SC-55mkII tones, SC-55 v2.00 drums",
            "max_size": 524288,
            "name": "rom2.bin",
            "path": "soundcanvas-roms/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "sha256": "c22bf7d34a3406530924d750b007bbdb470f3216c65086edb6e53023383ee907",
            "source_ref": "Nuked-SC55-CLAP rom_io.cpp:563",
            "validation": [
              "sha256",
              "size"
            ]
          },
          {
            "aliases": [
              "GeneralUser-GS.sf2",
              "FluidR3_GM.sf2",
              "Fluid_R3_GM_GS.sf2",
              "4gmgsmt-sf2_04-compat.sf2",
              "4GMGSMT.SF2",
              "synthgs-sf2_04-compat.sf2"
            ],
            "description": "General MIDI SoundFont",
            "name": "default.sf2",
            "note": "any SoundFont loads; GeneralUser GS, Fluid R3, the AWE32 4MB GM/GS/MT bank and the Trevor0402 SC-55 SoundFont are recognised by filename or RIFF INFO name and get their own reverb, chorus and filter presets\n",
            "path": "soundfonts/default.sf2",
            "required": false,
            "source_ref": "src/midi/fluidsynth.cpp:672-689, src/midi/fluidsynth.cpp:816-883, src/midi/fluidsynth.cpp:1229-1242"
          },
          {
            "description": "IBM PCjr system ROM",
            "min_size": 57344,
            "name": "system.rom",
            "note": "read during PCjr cartridge boot from the current DOS drive, then from the host working directory; bytes 0x3000 to 0xDFFF are copied to physical F3000. A short read leaves the region untouched and the cartridge still boots\n",
            "required": false,
            "source_ref": "src/dos/programs/boot.cpp:379-397, src/dos/programs/boot.cpp:83-124",
            "validation": [
              "size"
            ]
          },
          {
            "description": "IBM BASIC ROM image mapped at F600:0",
            "name": "IBM PC Cassette BASIC ROM",
            "note": "accepted when the file is exactly 32768 bytes, starts with E9 8F 7E and carries the string IBM at offset 0x4CD4\n",
            "required": false,
            "size": 32768,
            "source_ref": "src/dos/programs/loadrom.cpp:56-80, src/dos/programs/loadrom.cpp:95",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Option ROM image mapped at C000:0 and initialised",
            "max_size": 32768,
            "min_size": 16384,
            "name": "Video BIOS ROM",
            "note": "accepted when the file is 16384 bytes or larger, starts with 55 AA, has byte 3 masked to E8 and carries the string IBM at offset 0x1E; needs an EGA or better machine type\n",
            "required": false,
            "source_ref": "src/dos/programs/loadrom.cpp:56-75, src/dos/programs/loadrom.cpp:88-93",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Continuation of DOSBox on a C++23 codebase, SDL3, libmt32emu and FluidSynth\nfrom vcpkg. The machine setting selects a video adapter (hercules, cga,\ncga_mono, ega, svga_s3, svga_et3000, svga_et4000, svga_paradise, vesa_nolfb,\nvesa_oldvbe) or a machine (pcjr, tandy).\nref: src/dosbox.cpp:1317-1329, vcpkg.json\n\nNo system BIOS: the PC BIOS, video BIOS fonts, keyboard layouts and codepage\ntables are implemented in code.\nref: int10_memory.cpp:160, dos_keyboard_layout_data.h\n\nMIDI devices that need external data are mt32, soundcanvas and fluidsynth.\nA device that fails to initialise throws, MIDI_Init warns and retries with\nmididevice = port, then disables MIDI output. Emulation continues either way.\nref: midi.cpp:794-850\n\nMT-32/CM-32L: libmt32emu identifies every candidate by file size then SHA1,\nso file names carry no meaning; a directory scan caches which ROM ids each\ndirectory holds and logs anything unrecognised.\nref: mt32_lasynth_model.cpp:36-97, munt ROMInfo.cpp:206-213\nA model needs one control ROM and one PCM ROM, supplied either as a full\nimage (addROMFile) or as the two chip dumps merged in memory\n(mergeAndAddROMFiles): control halves are byte-interleaved, PCM halves are\nconcatenated.\nref: mt32_lasynth_model.cpp:114-151, munt ROMInfo.cpp:312-331\nmodel = auto resolves the first available of cm32l_102, cm32l_100,\ncm32ln_100, mt32_107, mt32_106, mt32_105, mt32_104, mt32_bluer, mt32_207,\nmt32_206, mt32_204, mt32_203; the aliases cm32l, mt32, mt32_old and mt32_new\nrestrict that list. MIXER /LISTMIDI prints what was found.\nref: mt32.cpp:278-331, 504-557\nSearch order is romdir, then mt32-roms in the configuration directory, then\nthe platform locations (C:\\mt32-rom-data on Windows;\n~/Library/Audio/Sounds/MT32-Roms and /usr/{local/,}share/mt32-rom-data on\nmacOS; $XDG_DATA_HOME/dosbox/mt32-roms, $XDG_DATA_HOME/mt32-rom-data,\n$XDG_DATA_DIRS/mt32-rom-data and $XDG_CONFIG_HOME/dosbox/mt32-roms on Linux).\nA relative romdir resolves against the working directory, so a game folder\ncan carry its own set.\nref: mt32.cpp:385-396, 416-485\n\nSound Canvas: the SC-55 is emulated by the Nuked SC55 CLAP plugin, loaded\nfrom a plugins directory next to the executable, in the configuration\ndirectory or under the XDG data directories. DOSBox Staging resolves the ROM\ndirectory candidates, canonicalises the ones that exist and exports them as\nSOUNDCANVAS_ROM_PATH; the plugin appends the per-model subdirectory, hashes\nevery file under 4 MB it finds there and matches SHA256 against its table.\nref: soundcanvas.cpp:326-373, support.cpp:351-379,\n     Nuked-SC55-CLAP nuked_sc55.cpp:117-215,\n     Nuked-SC55-CLAP rom_loader.cpp:32-63,\n     Nuked-SC55-CLAP rom_io.cpp:271-564\nsoundcanvas_model = auto resolves sc55_121, sc55_120, sc55_110, sc55_100,\nsc55_200, sc55mk2_101, sc55mk2_100 in that order by matching plugin names.\nThe plugin publishes six descriptors: SC-55 v1.00, v1.10, v1.20, v1.21,\nv2.00 and SC-55mk2 v1.01.\nref: soundcanvas.cpp:55-71, 80-147, Nuked-SC55-CLAP plugin.cpp:23-90\n\nFluidSynth: the soundfont setting names a file, tried as given and with .sf2\nappended, in soundfont_dir, then soundfonts in the configuration directory,\nthen the platform locations. fluid_synth_sfload is the only check. The\nSoundFont name from the RIFF INFO chunk and the file stem select reverb,\nchorus and filter presets for four known banks.\nref: fluidsynth.cpp:107-230, 672-689, 816-883, 1229-1252\n\nBundled data ships with the program and is read from the resources directory\nnext to the executable: FreeDOS codepages and keyboard layouts, translations,\nshaders and shader presets, CGA colour presets, drive noise samples, the\nmounted Y: drive utilities, the web interface and the manual pages.\nref: support.cpp:300-320, dos_code_page.cpp:1828, dos_keyboard_layout.cpp:70,\n     messages.cpp:1073, shader_manager.cpp:236,404, int10_modes.cpp:2302,\n     disk_noise.cpp:187, autoexec.cpp:759\n\nBIOSTEST.COM loads an arbitrary BIOS image at F000:0 and is compiled only\nwhen the debugger is enabled, which is off by default.\nref: src/dos/CMakeLists.txt:81-83, biostest.h\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/dosbox-staging/dosbox-staging",
        "source_commit": "cd81dcbc72773a4bd559b305c8b6ad3196cd09dc",
        "systems": [
          "dos",
          "ibm-pc",
          "ibm-pcjr",
          "tandy-1000"
        ],
        "type": "standalone",
        "upstream": "https://github.com/dosbox-staging/dosbox-staging"
      }
    },
    {
      "id": "dosbox-x",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "2026.08.02",
        "cores": [
          "dosbox-x",
          "dosboxx"
        ],
        "display_name": "DOS (DOSBox-X)",
        "emulator": "DOSBox-X",
        "files": [
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v1.04",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:59, src/libs/mt32/ROMInfo.cpp:89",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v1.05",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:62, src/libs/mt32/ROMInfo.cpp:92",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v1.06",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:65, src/libs/mt32/ROMInfo.cpp:95",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v1.07",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:68, src/libs/mt32/ROMInfo.cpp:98",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control BlueRidge",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:71, src/libs/mt32/ROMInfo.cpp:101",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v2.03",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5837064c9df4741a55f7c4d8787ac158dff2d3ce",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:73, src/libs/mt32/ROMInfo.cpp:103",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v2.04",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:74, src/libs/mt32/ROMInfo.cpp:104",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v2.06",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:75, src/libs/mt32/ROMInfo.cpp:105",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_CONTROL.ROM"
            ],
            "description": "MT-32 Control v2.07",
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:76, src/libs/mt32/ROMInfo.cpp:106",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "MT32_CONTROL.ROM"
            ],
            "description": "CM-32L/LAPC-I Control v1.00",
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:77, src/libs/mt32/ROMInfo.cpp:107",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "MT32_CONTROL.ROM"
            ],
            "description": "CM-32L/LAPC-I Control v1.02",
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:78, src/libs/mt32/ROMInfo.cpp:108",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "MT32_CONTROL.ROM"
            ],
            "description": "CM-32LN/CM-500/LAPC-N Control v1.00",
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.h:81-89, src/libs/mt32/ROMInfo.cpp:79, src/libs/mt32/ROMInfo.cpp:109",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32L_PCM.ROM"
            ],
            "description": "MT-32 PCM ROM",
            "name": "MT32_PCM.ROM",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/gui/midi_mt32.h:93-105, src/libs/mt32/ROMInfo.cpp:83, src/libs/mt32/ROMInfo.cpp:113",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "MT32_PCM.ROM"
            ],
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "name": "CM32L_PCM.ROM",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/gui/midi_mt32.h:93-105, src/libs/mt32/ROMInfo.cpp:85, src/libs/mt32/ROMInfo.cpp:117",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "FluidR3_GM.sf2",
              "GeneralUser_GS.sf2"
            ],
            "description": "General MIDI SoundFont",
            "name": "default.sf2",
            "note": "any SF2 or SF3 file loads; fluid.soundfont names it and fluid_synth_sfload is the only check\n",
            "required": false,
            "source_ref": "src/gui/midi_synth.h:346-384, src/gui/midi_synth.h:462-473, src/dosbox.cpp:3710"
          },
          {
            "description": "PC-98 character generator ROM, T98Tools layout",
            "hle_fallback": true,
            "name": "FONT.ROM",
            "note": "256 8x8 cells at 0x0, 256 8x16 cells at 0x800, 96 by 92 16x16 cells at 0x1800; a file of any other length is rejected. Enabled by pc-98 try font rom, on by default\n",
            "required": false,
            "size": 288768,
            "source_ref": "src/ints/int10.cpp:1487-1549, src/dosbox.cpp:2477-2478",
            "validation": [
              "size"
            ]
          },
          {
            "description": "PC-98 character generator, Anex86 bitmap",
            "hle_fallback": true,
            "name": "ANEX86.BMP",
            "note": "2048 by 2048 monochrome Windows bitmap, biSize 40, one plane, one bit per pixel, no compression, inverse colour scheme; the first row is the 8x16 single-width set and the rest is 16x16 full-width. Also reachable through the pc-98 anex86 font setting, which is tried before FONT.ROM\n",
            "required": false,
            "source_ref": "src/ints/int10.cpp:1555-1647, src/dosbox.cpp:2481-2484"
          },
          {
            "description": "PC-98 character generator, free generated bitmap",
            "hle_fallback": true,
            "name": "FREECG98.BMP",
            "note": "same bitmap layout as ANEX86.BMP and tried after it; ships in the resource directory\n",
            "required": false,
            "source_ref": "src/ints/int10.cpp:1577-1580, src/Makefile.am:17"
          },
          {
            "aliases": [
              "wqy_12pt.pcf"
            ],
            "description": "WenQuanYi 16-pixel bitmap font",
            "name": "wqy_12pt.bdf",
            "note": "ships in the resource directory",
            "required": false,
            "source_ref": "src/ints/int_dosv.cpp:1197-1218, src/Makefile.am:19"
          },
          {
            "aliases": [
              "wqy_11pt.pcf"
            ],
            "description": "WenQuanYi 14-pixel bitmap font",
            "name": "wqy_11pt.bdf",
            "note": "ships in the resource directory",
            "required": false,
            "source_ref": "src/ints/int_dosv.cpp:1296-1316, src/Makefile.am:18"
          },
          {
            "description": "CJK fixed-width TrueType font",
            "hle_fallback": true,
            "name": "SarasaGothicFixed.ttf",
            "note": "tried by the TTF output on PC-98 and on double-byte code pages when ttf.font is unset, and by the printer when the selected typeface file is missing; ships in the resource directory\n",
            "required": false,
            "source_ref": "src/output/output_ttf.cpp:655-668, src/hardware/parport/printer.cpp:354-380, src/Makefile.am:21"
          },
          {
            "description": "Printer Roman typeface",
            "name": "roman.ttf",
            "note": "also the fallback typeface for any unmapped LQ selection",
            "path": "FONTS/roman.ttf",
            "required": false,
            "source_ref": "src/hardware/parport/printer.cpp:320-321, src/hardware/parport/printer.cpp:336-337, src/dosbox.cpp:4597"
          },
          {
            "description": "Printer Sans Serif typeface",
            "name": "sansserif.ttf",
            "path": "FONTS/sansserif.ttf",
            "required": false,
            "source_ref": "src/hardware/parport/printer.cpp:323-324, src/dosbox.cpp:4597"
          },
          {
            "description": "Printer Courier typeface",
            "name": "courier.ttf",
            "path": "FONTS/courier.ttf",
            "required": false,
            "source_ref": "src/hardware/parport/printer.cpp:326-327, src/dosbox.cpp:4597"
          },
          {
            "description": "Printer Script typeface",
            "name": "script.ttf",
            "path": "FONTS/script.ttf",
            "required": false,
            "source_ref": "src/hardware/parport/printer.cpp:329-330, src/dosbox.cpp:4597"
          },
          {
            "description": "Printer OCR-A typeface",
            "name": "ocra.ttf",
            "note": "serves both the OCR-A and OCR-B selections",
            "path": "FONTS/ocra.ttf",
            "required": false,
            "source_ref": "src/hardware/parport/printer.cpp:332-334, src/dosbox.cpp:4597"
          },
          {
            "description": "PC-9801-26K/86 FM board BIOS",
            "hle_fallback": true,
            "min_size": 16384,
            "name": "SOUND.ROM",
            "note": "16 KB read into CC000h from the working directory only, when pc-98 sound bios and pc-98 load sound bios rom file are both set\n",
            "required": false,
            "source_ref": "src/hardware/pc98_fm.cpp:367-385, src/dosbox.cpp:2378-2386",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Tseng ET4000 video BIOS",
            "max_size": 65536,
            "min_size": 1024,
            "name": "et4000.bin",
            "note": "default file name for machine = svga_et4000",
            "required": false,
            "source_ref": "src/dosbox.cpp:938-982, src/dosbox.cpp:2745-2757",
            "validation": [
              "size"
            ]
          },
          {
            "description": "S3 Trio64 video BIOS",
            "max_size": 65536,
            "min_size": 1024,
            "name": "TRIO64 (Ver. 1.5-07) [VGA] (S3 Incorporated).bin",
            "note": "default file name for machine = svga_s3",
            "required": false,
            "source_ref": "src/dosbox.cpp:943-945, src/dosbox.cpp:2745-2757",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Option ROM image mapped at C000:0 and initialised",
            "max_size": 32768,
            "min_size": 16384,
            "name": "Video BIOS option ROM",
            "note": "read by LOADROM.COM from a mounted local drive; accepted when the file starts with 55 AA, byte 3 masked with 0xFC equals 0xE8 and the string IBM appears at offset 0x1E, and the machine is EGA or better\n",
            "required": false,
            "source_ref": "src/dos/dos_programs.cpp:3523-3549, src/dos/dos_programs.cpp:3560-3565",
            "validation": [
              "size"
            ]
          },
          {
            "description": "IBM 5150 Cassette BASIC ROM",
            "max_size": 65536,
            "min_size": 32768,
            "name": "IBMROMBASIC-F6000h-1982-10-27.ROM",
            "note": "the ibm rom basic setting maps it just below the ROM BIOS and accepts 32 KB to 64 KB in 4 KB steps; LOADROM.COM maps the same image at F600:0 when it is exactly 32768 bytes, starts with E9 8F 7E and carries the string IBM at offset 0x4CD4\n",
            "required": false,
            "source_ref": "src/ints/bios.cpp:13074-13094, src/dos/dos_programs.cpp:3550-3554, src/dosbox.cpp:1931-1933",
            "validation": [
              "size"
            ]
          },
          {
            "description": "IBM PCjr system ROM",
            "min_size": 57344,
            "name": "system.rom",
            "note": "read during PCjr cartridge boot; bytes 0x3000 to 0xDFFF are copied to physical F3000. A short read leaves the region untouched and the cartridge still boots\n",
            "required": false,
            "source_ref": "src/dos/dos_programs.cpp:3061-3070",
            "validation": [
              "size"
            ]
          },
          {
            "description": "PC/AT or PC-98 BIOS ROM image booted by BOOT -bios",
            "name": "System BIOS image",
            "note": "loaded at the top of the first megabyte, rounded up to a paragraph and truncated to 128 KB, or to 96 KB on PC-98; a larger image is clamped rather than rejected\n",
            "required": false,
            "source_ref": "src/dos/dos_programs.cpp:2244-2293"
          },
          {
            "description": "PC-98 Initial Firmware Test BIOS",
            "max_size": 32768,
            "name": "ITF.ROM",
            "note": "served through the port 43Dh bank switch alongside a BOOT -bios image; <image>.itf.rom is tried before the bare name so one directory can hold several\n",
            "required": false,
            "source_ref": "src/dos/dos_programs.cpp:2295-2326",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Fork of DOSBox SVN with its own DOS kernel. The machine setting picks the\nemulated hardware: mda, cga and its composite variants, hercules,\nhercules_plus, hercules_incolor, hercules_color, tandy, pcjr, amstrad,\nolivetti/m24/att6300, pc3270, ega, ega200, jega, mcga, vgaonly, the S3,\nTseng, Paradise and ATI SVGA cards, the vesa variants, and pc98/pc9801/pc9821.\nfm_towns is marked STUB in the same list.\nref: dosbox.cpp:1526-1562\n\nNo system BIOS: the PC BIOS, VGA BIOS, video fonts, keyboard layouts, codepage\ntables, the Z: drive utilities including GLIDE2X.OVL, and the TTF text font are\ncompiled in.\nref: int10_memory.cpp, dos_keyboard_layout_data.h, dos_codepages.h,\n     src/builtin/glide2x.cpp:2861, output_ttf.cpp:664\n\nFiles named without a directory are searched in the working directory, the\nprogram directory, the user configuration directory and the resource\ndirectory. On Linux the configuration directory is $XDG_CONFIG_HOME/dosbox-x\nor ~/.config/dosbox-x, and the resource directory is $XDG_DATA_HOME/dosbox-x,\nthen /usr/local/share/dosbox-x, then /usr/share/dosbox-x. Windows uses\nC:\\DOSBox-X.\nref: int10.cpp:1442-1485, cross.cpp:120-167\n\nMT-32: libmt32emu is built from src/libs/mt32. Only four file names are ever\nopened, and each candidate is identified by exact file size then SHA1, so the\nname says nothing about the contents. addROMFile matches against the full\nimage list only, which rejects the interleaved chip dumps.\nref: midi_mt32.h:74-109, c_interface.cpp:442-462, ROMInfo.cpp:206-215\nmt32.model = auto opens CM32L_CONTROL.ROM then MT32_CONTROL.ROM, and\nCM32L_PCM.ROM then MT32_PCM.ROM; cm32l keeps only the CM32L names, mt32 only\nthe MT32 names. The directory is mt32.romdir, then the working directory, then\nthe resource directory, then the configuration directory. A missing pair logs\nthe accepted file names and disables the device.\nref: midi_mt32.h:246-275, dosbox.cpp:3571-3576\n\nFluidSynth reads fluid.soundfont; fluid_synth_sfload is the only check. With\nthe setting empty it probes /usr/share/soundfonts/default.sf2,\n/usr/share/sounds/sf2/FluidR3_GM.sf2 and GeneralUser_GS.sf2 on Linux, and\nC:\\soundfonts\\default.sf2 then the two same names under C:\\DOSBox-X on Windows.\nref: midi_synth.h:342-384, 462-480\n\nPC-98 character generator, tried in order: FONT.ROM as generated by T98Tools,\nthen the FONTX2 files named by pc-98 fontx sbcs and pc-98 fontx dbcs, then the\nfile named by pc-98 anex86 font or ANEX86.BMP followed by FREECG98.BMP, then\nthe built-in FREECG single-byte font and the built-in Japanese double-byte\nfont. Each stage fills only what the previous one left empty.\nref: int10.cpp:1882-1893, 1652-1675\n\nPC-98 sound board BIOS: with pc-98 sound bios set, SOUND.ROM is read from the\nworking directory into CC000h. Without it a callback Sound BIOS is installed\nat CEE0:0000 answering INT D2h.\nref: pc98_fm.cpp:367-385, 416-434\n\nDOS/V and CJK text: fontxsbcs, fontxsbcs16, fontxsbcs24, fontxdbcs,\nfontxdbcs14 and fontxdbcs24 name font files. LoadFontxFile reads a FONTX2\nheader, otherwise tries BDF and PCF, otherwise accepts a raw bitmap font\nidentified by its size, which covers ASC16 and ASCFONT.15 from UCDOS and ETen\nChinese DOS, ASC24, HZK14, HZK16, HZK24 and STDFONT.15 and STDFONT.24.\nUnset settings fall back to the built-in font data.\nref: int_dosv.cpp:654-749, 1631-1710, dosbox.cpp:2533-2568\n\nBOOT -bios loads a BIOS image at the top of the first megabyte, truncated to\n128 KB, or 96 KB on PC-98 where it also looks for <image>.itf.rom, <image>.ITF.ROM,\nitf.rom and ITF.ROM to serve the bank switched Initial Firmware Test region\nthrough port 43Dh.\nref: dos_programs.cpp:2244-2332\n\nBIOSTEST.COM loads an image of up to 64 KB at F000:0 and restarts the CPU at\nthe reset vector; it is compiled only when the debugger is enabled. The\nsettings call binary on reset and call binary on boot load blobs of up to\n128 KB into the ROM BIOS area for CPU testing.\nref: dos_programs.cpp:3581-3640, bios.cpp:13142-13215\n\nGlide passthrough loads glide2x.dll, libglide2x.so or libglide2x.dylib.\nref: glide.cpp:353-359, dosbox.cpp:3471-3473\n\nttf.font, ttf.fontbold, ttf.fontital and ttf.fontboit name a TTF, OTF, FON or\nTTC font resolved through the same search order plus the system font\ndirectories. Unset, the TTF output uses the built-in font, except on PC-98 or\na double-byte code page where SarasaGothicFixed.ttf is tried first.\nref: output_ttf.cpp:318-473, 653-668\n\nShipped in the resource directory: FREECG98.BMP, wqy_11pt.bdf, wqy_12pt.bdf,\nNouveau_IBM.ttf, SarasaGothicFixed.ttf and the two reference configuration\nfiles.\nref: src/Makefile.am:14-22\n\nOverrides for data that is compiled in: the boot logo PNG, the mapper file,\nthe customcodepage translation table, .kl layout files and the KEYBOARD.SYS\nto KEYBRD4.SYS libraries read from a mounted drive, the glshaders directory\nand the .lng translations.\nref: bios.cpp:11389-11398, sdlmain.cpp:7001-7008,\n     dos.cpp:4397-4420, dos_keyboard_layout.cpp:300-340,\n     render.cpp:1538-1545, messages.cpp:294-320\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/joncampbell123/dosbox-x",
        "source_commit": "6cad735d685406bd4ef2a0b60a4613569e211fd8",
        "systems": [
          "dos",
          "ibm-pc",
          "ibm-pcjr",
          "tandy-1000",
          "pc-98"
        ],
        "type": "standalone",
        "upstream": "https://github.com/joncampbell123/dosbox-x"
      }
    },
    {
      "id": "dosbox_core",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "dosbox_core"
        ],
        "display_name": "DOS (DOSBox-core)",
        "emulator": "DOSBox-core",
        "files": [
          {
            "description": "MT-32 Control v1.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:58"
          },
          {
            "description": "MT-32 Control v1.05",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:61"
          },
          {
            "description": "MT-32 Control v1.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:64"
          },
          {
            "description": "MT-32 Control v1.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "note": "version referenced in .info file (md5: 5626206284b22c2734f3e9efefcd2675)",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:67"
          },
          {
            "description": "MT-32 Control BlueRidge",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:70"
          },
          {
            "description": "MT-32 Control v2.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:72"
          },
          {
            "description": "MT-32 Control v2.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:73"
          },
          {
            "description": "MT-32 Control v2.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "src/gui/midi_mt32.cpp:55, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:74"
          },
          {
            "description": "CM-32L/LAPC-I Control v1.00",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:53, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:75"
          },
          {
            "description": "CM-32L/LAPC-I Control v1.02",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "note": "version referenced in .info file (md5: bfff32b6144c1d706109accb6e6b1113)",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:53, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:76"
          },
          {
            "description": "CM-32LN/CM-500/LAPC-N Control v1.00",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "note": "MUNT recognizes this ROM when named CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "src/gui/midi_mt32.cpp:53, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:77"
          },
          {
            "description": "MT-32 PCM ROM",
            "hle_fallback": true,
            "name": "MT32_PCM.ROM",
            "note": "pairs with any MT-32 v1.x control ROM (md5: 89e42e386e82e0cacb4a2704a03706ca)",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/gui/midi_mt32.cpp:66, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:81"
          },
          {
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "hle_fallback": true,
            "name": "CM32L_PCM.ROM",
            "note": "pairs with MT-32 v2.x or CM-32L control ROMs (md5: 08cdcfa0ed93e9cb16afa76e6ac5f0a4)",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/gui/midi_mt32.cpp:64, libretro/deps/munt/mt32emu/src/ROMInfo.cpp:85"
          },
          {
            "description": "BASS audio library (Linux)",
            "hle_fallback": true,
            "name": "libbass.so",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:238"
          },
          {
            "description": "BASSMIDI addon library (Linux)",
            "hle_fallback": true,
            "name": "libbassmidi.so",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:239"
          },
          {
            "description": "BASS audio library (Windows)",
            "hle_fallback": true,
            "name": "bass.dll",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:232"
          },
          {
            "description": "BASSMIDI addon library (Windows)",
            "hle_fallback": true,
            "name": "bassmidi.dll",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:233"
          },
          {
            "description": "BASS audio library (macOS)",
            "hle_fallback": true,
            "name": "libbass.dylib",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:235"
          },
          {
            "description": "BASSMIDI addon library (macOS)",
            "hle_fallback": true,
            "name": "libbassmidi.dylib",
            "note": "proprietary library from un4seen.com, not a ROM",
            "required": false,
            "source_ref": "libretro/src/midi_bassmidi.cpp:236"
          }
        ],
        "notes": "No BIOS required. MT-32 and SoundFont support is optional for MIDI music.\nMT-32 ROMs loaded by exact filename from system directory.\nmt32.romdir = system_dir (libretro.cpp:652). CM-32L is default type.\nref: src/gui/midi_mt32.cpp:35,51-66\nMUNT identifies ROMs by SHA1+size (ROMInfo.cpp:171-180).\nFluidSynth reads .sf2/.sf3/.dls/.gig from system/soundfonts/.\nref: libretro/src/libretro.cpp:1086-1097\nBASSMIDI reads .sf2/.sfz from system/soundfonts/, requires BASS +\nBASSMIDI shared libs in system dir (dlopen'd at runtime).\nref: libretro/src/midi_bassmidi.cpp:232-254\n.info declares firmware_count=10 (4 ROMs + 6 BASS libs).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dosbox-core",
        "source_commit": "7bcf083e8309660e2c598d6f7d5982d3851f2178",
        "systems": [
          "dos"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/dosbox/"
      }
    },
    {
      "id": "dosbox_pure",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "1.0-preview5",
        "cores": [
          "dosbox_pure"
        ],
        "display_name": "DOS (DOSBox-Pure)",
        "emulator": "DOSBox Pure",
        "files": [
          {
            "description": "MT-32 Control v1.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5112, src/gui/mt32emu.h:5129",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.05",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5113, src/gui/mt32emu.h:5130",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5114, src/gui/mt32emu.h:5131",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v1.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5115, src/gui/mt32emu.h:5132",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control BlueRidge",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5116, src/gui/mt32emu.h:5133",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.03 (new MT-32)",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "5837064c9df4741a55f7c4d8787ac158dff2d3ce",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5118, src/gui/mt32emu.h:5135",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.04",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5119, src/gui/mt32emu.h:5136",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.06",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5120, src/gui/mt32emu.h:5137",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 Control v2.07",
            "hle_fallback": true,
            "name": "MT32_CONTROL.ROM",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "src/gui/mt32emu.h:5121, src/gui/mt32emu.h:5138",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.00",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5122, src/gui/mt32emu.h:5139",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32L/LAPC-I Control v1.02",
            "hle_fallback": true,
            "name": "CM32L_CONTROL.ROM",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5123, src/gui/mt32emu.h:5140",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "CM-32LN/CM-500/LAPC-N Control v1.00",
            "hle_fallback": true,
            "name": "CM32LN_CONTROL.ROM",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "src/gui/mt32emu.h:5124, src/gui/mt32emu.h:5141",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "MT-32 PCM ROM",
            "hle_fallback": true,
            "name": "MT32_PCM.ROM",
            "note": "accepted by every MT-32 control ROM, v1.x and v2.x. Each control ROM fixes the PCM size it accepts through its pcmCount: 128 requires this 524288 byte image. ref: mt32emu.h:2586-2598,3167,3025\n",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "src/gui/mt32emu.h:5126, src/gui/mt32emu.h:5143",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "aliases": [
              "CM32LN_PCM.ROM"
            ],
            "description": "CM-32L/CM-64/LAPC-I PCM ROM",
            "hle_fallback": true,
            "name": "CM32L_PCM.ROM",
            "note": "accepted by the CM-32L and CM-32LN control ROMs, which carry pcmCount 256 and require this 1048576 byte image. The alias covers the name derived from CM32LN_CONTROL.ROM. ref: mt32emu.h:2586-2598,3167,3025, midi_mt32.h:194-195\n",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "src/gui/mt32emu.h:5127, src/gui/mt32emu.h:5144",
            "validation": [
              "sha1",
              "size"
            ]
          },
          {
            "description": "General MIDI SoundFont (any .sf2/.sf3 accepted)",
            "hle_fallback": true,
            "name": "DOSBOX.SF2",
            "note": "Any .SF2 or .SF3 file in the system directory works. The core lists all found SoundFonts in the MIDI config dropdown. DOSBOX.SF2 is the conventional name and is also auto-detected when placed inside game content on C: drive.\n",
            "required": false,
            "source_ref": "dosbox_pure_libretro.cpp:1410 (scan classifies .SF* as a SoundFont), dosbox_pure_libretro.cpp:2492-2495 (path taken from the system directory), dosbox_pure_libretro.cpp:2803-2805 (auto-detected on the mounted C: drive)"
          }
        ],
        "logo": "https://raw.githubusercontent.com/schellingb/dosbox-pure/main/images/logo.png",
        "notes": "No BIOS required. MT-32 and SoundFont support is optional for MIDI music.\n\nROM scanning (both modes):\n  Recursive scan of system directory for *_CONTROL.ROM and *.SF2/*.SF3.\n  ref: dosbox_pure_libretro.cpp:1399-1410\n  MT-32 requires matched pair: *_CONTROL.ROM + *_PCM.ROM (PCM name derived\n  from CONTROL name by replacing CONTROL with PCM, preserving case).\n  ref: midi_mt32.h:189-199\n  ZIP archives also supported — scanned for files by size (65536/131072 =\n  control, 524288/1048576 = PCM), not by name.\n  ref: midi_mt32.h:160-166\n  Files can also be on mounted C: drive (DOSBOX.SF2, MT32_CONTROL.ROM).\n  ref: dosbox_pure_libretro.cpp:2803-2805\n  Cache file DOSBoxPureMidiCache.txt written when scan >2s.\n  ref: dosbox_pure_libretro.cpp:1425-1445\n\nBundled MUNT (header-only mt32emu.h) for MT-32 emulation.\nSHA1+size validation at load: unrecognized ROMs rejected (Synth::open fails).\nref: mt32emu.h:2982-2988,3016-3019,5183-5187\n12 full control ROMs + 2 PCM ROMs supported (no split ROMs in this MUNT).\nTinySoundFont (tsf.h) for SF2/SF3 playback.\nNo firmware entries in .info file — all MIDI files optional.\n\nDBP_STANDALONE build mode exists (same MIDI logic, different I/O layer).\nref: dosbox_pure_libretro.cpp:81,1590,2302\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dosbox-pure",
        "source_commit": "a4a0bab7f8931433588f2fcad9045c85b277373d",
        "systems": [
          "dos"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/schellingb/dosbox-pure",
        "verification": "sha1"
      }
    },
    {
      "id": "dosbox_svn",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "dosbox_svn"
        ],
        "display_name": "DOS (DOSBox-SVN)",
        "emulator": "DOSBox-SVN",
        "exclusion_note": "system_directory set but never used for file loading",
        "files": [],
        "notes": "Same codebase as dosbox_svn_ce, builds against a fake SDL shim\n(WITH_FAKE_SDL=1) instead of real SDL, for broader platform compat.\nref: libretro/Makefile.libretro, libretro/fakesdl/\n\nNo MT-32 emulation. src/midi/munt referenced in Makefile.common:15\ndoes not exist, no MUNT submodule. MIDI is hardware-only\n(ALSA, CoreAudio, CoreMIDI, Win32, OSS) + retro_midi_interface.\nref: src/gui/midi.cpp\n\nsystem_directory set and logged (libretro.cpp:1399-1401), never used\nto load files. Config uses retro_save_directory (cross.cpp:61-71).\nKeyboard layouts and codepages embedded in binary.\nref: dos_keyboard_layout_data.h, dos_codepages.h\n\n.info firmware_count=0, matches code.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dosbox-svn",
        "source_commit": "53ca2f6303a652d129321cfc521f000cd7ec5531",
        "systems": [
          "dos"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/dosbox/"
      }
    },
    {
      "id": "dosbox_svn_ce",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN CE",
        "cores": [
          "dosbox_svn_ce"
        ],
        "display_name": "DOS (DOSBox-SVN CE)",
        "emulator": "DOSBox-SVN CE",
        "exclusion_note": "system_directory set but never used for file loading",
        "files": [],
        "notes": "Same codebase as dosbox_svn, builds against real SDL 1.2 + SDL_net\ninstead of the fake SDL shim (WITH_FAKE_SDL not set).\nref: libretro/Makefile.libretro:238\n\nNo MT-32 emulation. src/midi/munt referenced in Makefile.common:15\ndoes not exist, no MUNT submodule. MIDI is hardware-only\n(ALSA, CoreAudio, CoreMIDI, Win32, OSS) + retro_midi_interface.\nref: src/gui/midi.cpp\n\nsystem_directory set and logged (libretro.cpp:1399-1401), never used\nto load files. Config uses retro_save_directory (cross.cpp:61-73).\nKeyboard layouts and codepages embedded in binary.\nref: dos_keyboard_layout_data.h, dos_codepages.h\n\n.info firmware_count=0, matches code.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/dosbox-svn",
        "source_commit": "53ca2f6303a652d129321cfc521f000cd7ec5531",
        "systems": [
          "dos"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/dosbox/"
      }
    },
    {
      "id": "doublecherrygb",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v0.18.1",
        "cores": [
          "DoubleCherryGB"
        ],
        "display_name": "Nintendo - Game Boy / Color (DoubleCherryGB)",
        "emulator": "DoubleCherryGB",
        "files": [],
        "notes": "Game Boy / Game Boy Color emulator forked from TGB Dual (Hii, 2000-2004)\nvia the libretro port tgbdual. Adds multi-Game Boy emulation with link\ncable support for up to 16 players, DMG-07 4-Player Adapter emulation,\ninfrared peripherals, and built-in Pokemon distribution events.\n\nNo boot ROM support. cpu::reset() sets PC=0x100 and post-boot register\nvalues directly (AF=0x01B0 DMG, 0x11B0 CGB). The core does not access\nthe system directory and loads no external firmware files.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/TimOelrichs/doublecherryGB-libretro",
        "source_commit": "2e7a8bd5442ad7b2cb98ea07dbb5000ac95193e9",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/libertyernie/tgbdual"
      }
    },
    {
      "id": "doukutsu_rs",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.2.0 - 0.101.0",
        "cores": [
          "doukutsu_rs"
        ],
        "display_name": "Cave Story (drs)",
        "emulator": "doukutsu-rs",
        "exclusion_note": "game data loaded relative to content path, not from system directory",
        "files": [],
        "notes": "No BIOS or firmware files required in the system directory.\nThe core reads game data from a data/ subfolder next to the loaded content.\nUsers must provide the Cave Story freeware game files (Doukutsu.exe and its\ndata/ directory) or a Cave Story+ installation as the content to load.\nAll engine-internal resources (fonts, wavetables, controller mappings) are\nbuilt into the core binary.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/DrGlaucous/doukutsu-rs-nm",
        "source_commit": "51e64c2e9615bcd476034c69b58927877fe73494",
        "systems": [
          "cavestory"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/doukutsu-rs/doukutsu-rs"
      }
    },
    {
      "id": "drastic",
      "profile": {
        "author": "Exophase (Gilead Kutnick)",
        "core_classification": "other",
        "core_version": "r2.6.0.4a",
        "cores": [
          "drastic"
        ],
        "display_name": "Nintendo - DS (DraStic)",
        "emulator": "DraStic",
        "exclusion_note": "fonts/orbitron.ttf and keymaps/Shield.dkm ship in the Android package and nothing opens them: neither string appears in the classes dex of the official apk nor in any of the native libraries, and the menus draw from a font compiled into the binary. Left out with them are the files DraStic authors itself and reads back, which are emulator state rather than system files: drastic.cfg and the per-directory drastic.cf2, the config/<name>.cfg profiles, savestates/<name>_<slot>.dss, the backup/<name>.dsv and .sav in-game saves, input_record/<name>.ir, the icon and file info caches, unzip_cache and unzipped_rom.nds, crash_dump.txt, the profiler dumps under profiles, and the drastic_mapped_memory.dat and drastic_mapped_memory_vram.dat scratch files of the memory mapper. ref: official apk classes dex, libdrastic_arm64.so, drastic r2.5.2.2 0x11a938,\n     drastic r2.5.2.2 0x11aca8, drastic r2.5.2.2 0x11b440, drastic r2.5.2.2 0x11b650,\n     drastic r2.5.2.2 0x11edd8, drastic r2.5.2.2 0x120190, drastic r2.5.2.2 0x1201b0,\n     drastic r2.5.2.2 0x1202d0, drastic r2.5.2.2 0x1217f0, drastic r2.5.2.2 0x121868,\n     drastic r2.5.2.2 0x1249f8, drastic r2.5.2.2 0x124b08\n",
        "files": [
          {
            "aliases": [
              "NDS_Bios9.bin",
              "bios9.bin",
              "biosnds9.rom"
            ],
            "description": "Nintendo DS ARM9 BIOS",
            "name": "nds_bios_arm9.bin",
            "note": "First candidate for the ARM9 slot. Booting continues on the free replacement when it is absent, and the slot ending empty is fatal.",
            "path": "system/nds_bios_arm9.bin",
            "required": false,
            "size": 4096,
            "source_ref": "drastic r2.5.2.2 initialize_memory 0x1c398-0x1c3b0, drastic r2.5.2.2 load_system_file 0xea80-0xebe4, libdrastic_arm64.so 0x2b6d0-0x2b6ec",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "DraStic free ARM9 BIOS replacement",
            "name": "drastic_bios_arm9.bin",
            "note": "Second candidate for the ARM9 slot, written by Exophase from public documentation and released under a BSD licence. Installed from the package assets on first run.",
            "path": "system/drastic_bios_arm9.bin",
            "required": false,
            "size": 4096,
            "source_ref": "drastic r2.5.2.2 initialize_memory 0x1c4b0-0x1c4d4, libdrastic_arm64.so 0x2b6f0-0x2b708, DraSticActivity.smali:4084-4090, drastic_bios_readme.txt:1-31",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "NDS_Bios7.bin",
              "bios7.bin",
              "biosnds7.rom"
            ],
            "description": "Nintendo DS ARM7 BIOS",
            "name": "nds_bios_arm7.bin",
            "note": "First candidate for the ARM7 slot, and the only image carrying the Blowfish key table at offset 0x30 that the card secure area is decrypted with.",
            "path": "system/nds_bios_arm7.bin",
            "required": false,
            "size": 16384,
            "source_ref": "drastic r2.5.2.2 initialize_memory 0x1c3bc-0x1c3d4, drastic r2.5.2.2 gamecard_load_program 0x6fb98-0x6fbac, libdrastic_arm64.so 0x2b724-0x2b73c",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "DraStic free ARM7 BIOS replacement",
            "name": "drastic_bios_arm7.bin",
            "note": "Second candidate for the ARM7 slot. Offset 0x30 is zero filled, so cards whose secure area is encrypted do not decrypt under it.",
            "path": "system/drastic_bios_arm7.bin",
            "required": false,
            "size": 16384,
            "source_ref": "drastic r2.5.2.2 initialize_memory 0x1c508-0x1c52c, libdrastic_arm64.so 0x2b740-0x2b758, DraSticActivity.smali:4078-4083",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "NDS_Lite_Firmware.bin",
              "dsfirmware.bin",
              "firmware.bin"
            ],
            "description": "Nintendo DS firmware",
            "hle_fallback": true,
            "name": "nds_firmware.bin",
            "note": "Absent, the region is zeroed and patch_firmware_header_data writes a header, a console identity and a user settings block into it, so the emulator boots either way. r2.6.0.4a reads nds_firmware_modified.bin before this.",
            "path": "system/nds_firmware.bin",
            "required": false,
            "size": 262144,
            "source_ref": "drastic r2.5.2.2 initialize_memory 0x1c3e0-0x1c3f8, drastic r2.5.2.2 initialize_memory 0x1c560-0x1c578, drastic r2.5.2.2 patch_firmware_header_data 0x1b920, libdrastic_arm64.so 0x2b794-0x2b7c4",
            "system": "nintendo-ds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "firmware image edited in the emulator",
            "hle_fallback": true,
            "name": "nds_firmware_modified.bin",
            "note": "Read before nds_firmware.bin in r2.6.0.4a and absent from r2.5.2.2.",
            "path": "system/nds_firmware_modified.bin",
            "required": false,
            "size": 262144,
            "source_ref": "libdrastic_arm64.so 0x2b768-0x2b790, libdrastic_arm64.so 0x774e0-0x7751c",
            "system": "nintendo-ds",
            "unsourceable": "written by the firmware editor of r2.6.0.4a from the emulated user settings, so no dump of it exists",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "save type database, one entry per title",
            "name": "game_database.xml",
            "note": "Parsed from the root of the data directory. A failed open logs an error and the session continues without it. Installed from the package assets on first run.",
            "path": "game_database.xml",
            "required": false,
            "source_ref": "drastic r2.5.2.2 initialize_gamecard 0x709bc-0x70a00, drastic r2.5.2.2 initialize_game_database 0x73180, drastic r2.5.2.2 initialize_game_database 0x73d24-0x73d38, DraSticActivity.smali:5459",
            "system": "nintendo-ds"
          },
          {
            "category": "game_data",
            "description": "user save type database",
            "name": "game_database_user.xml",
            "note": "Read after game_database.xml in r2.6.0.4a and absent from r2.5.2.2.",
            "path": "game_database_user.xml",
            "required": false,
            "source_ref": "libdrastic_arm64.so 0x76af8-0x76b28",
            "system": "nintendo-ds",
            "unsourceable": "user overlay of the save type database, authored per collection"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Action Replay cheat library",
            "name": "usrcheat.dat",
            "note": "Read from the root of the data directory and written back when a cheat is toggled, so the file carries the enabled state. Installed from the package assets on first run.",
            "path": "usrcheat.dat",
            "required": false,
            "source_ref": "drastic r2.5.2.2 initialize_gamecard 0x70a0c-0x70a30, libdrastic_arm64.so 0x76b34-0x76b58, DraSticActivity.smali:5974",
            "system": "nintendo-ds"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "source archive of the free BIOS replacement",
            "name": "drastic_bios.zip",
            "note": "Copied to the root of the data directory on first run and never read back. Holds bios_common.S, a Makefile, the BSD licence notice and the two built images.",
            "path": "drastic_bios.zip",
            "required": false,
            "source_ref": "DraSticActivity.smali:5189-5200, drastic_bios_readme.txt:1-31"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "default screen layout",
            "name": "LC_default.dat",
            "note": "Android only. Copied out of the package assets into config on first run, and offered from there by the layout list, which filters that directory on the .dat extension.",
            "path": "config/LC_default.dat",
            "required": false,
            "source_ref": "DraSticActivity.smali:4052-4066, DraSticActivity.smali:4830-4925"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "post-processing chain definition",
            "name": "<name>.dfx",
            "note": "Android only. Names the passes, the texture inputs and the headers of one chain, all resolved relative to its own path. The package ships None, Linear, Quilez, Scale2X, Scanline, HQ2X, FXAA, FXAA HQ and SMAA.",
            "path": "shaders/<name>.dfx",
            "required": false,
            "source_ref": "DraSticActivity.smali:5619-5624, assets/shaders/_shader_format_.txt:11-21"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "GLSL stage source named by a chain",
            "name": "<name>.dsd",
            "note": "Android only. Named by the shader entry of a pass, and carrying the vertex and fragment code for it, together with the .h and .hlsl files the include tags pull in. A stage that fails to compile leaves a <name>dsd.log beside it.",
            "path": "shaders/<name>.dsd",
            "required": false,
            "source_ref": "assets/shaders/_shader_format_.txt:8-9, assets/shaders/_shader_format_.txt:36-40, assets/shaders/_shader_format_.txt:59-72, assets/shaders/_shader_format_.txt:75-98"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "lookup texture named by a chain",
            "name": "<name>.raw",
            "note": "Android only. Loaded when a texture tag names a file instead of the framebuffer or an FBO, with the dimensions and the format taken from the tag. SMAA is the one shipped chain that names any, taking smaa/AreaTexRGB.raw and smaa/SearchTexRGB.raw; the package also carries the non-RGB pair of the same two tables, which no shipped chain names.",
            "path": "shaders/<name>.raw",
            "required": false,
            "source_ref": "assets/shaders/_shader_format_.txt:42-56, assets/shaders/SMAA.dfx:1-6"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "on-screen controller skin",
            "name": "<name>.zip",
            "note": "Android only. Installed from the package assets, which carry Simple, Simple-II and Neon.",
            "path": "virtual_controller/<name>.zip",
            "required": false,
            "source_ref": "DraSticActivity.smali:5645, DraSticActivity.smali:5834"
          },
          {
            "category": "game_data",
            "description": "default microphone input",
            "name": "microphone.wav",
            "note": "Read when no per-title file answers, and logged as the default fake microphone audio file.",
            "path": "microphone/microphone.wav",
            "required": false,
            "source_ref": "drastic r2.5.2.2 reset_spu 0x6dc30-0x6dc5c",
            "system": "nintendo-ds",
            "unsourceable": "audio the user records to stand in for the console microphone"
          },
          {
            "category": "game_data",
            "description": "per-title microphone input",
            "name": "<game>.wav",
            "note": "Tried before microphone.wav and named after the running title.",
            "path": "microphone/<game>.wav",
            "required": false,
            "source_ref": "drastic r2.5.2.2 reset_spu 0x6dba8-0x6dbe8",
            "system": "nintendo-ds"
          },
          {
            "category": "game_data",
            "description": "fallback Lua script",
            "name": "default.lua",
            "note": "Loaded at game start when no per-title script answers, then handed the load-game callback.",
            "path": "scripts/default.lua",
            "required": false,
            "source_ref": "drastic r2.5.2.2 load_nds 0x70054-0x70094",
            "unsourceable": "script the user writes against the built-in Lua 5.3 interpreter"
          },
          {
            "category": "game_data",
            "description": "per-title Lua script",
            "name": "<game>.lua",
            "note": "Tried before default.lua and named after the running title.",
            "path": "scripts/<game>.lua",
            "required": false,
            "source_ref": "drastic r2.5.2.2 load_nds 0x6ff78-0x6ffd0"
          },
          {
            "category": "game_data",
            "description": "custom cheat file",
            "name": "<game>.cht",
            "note": "Plain text, one bracketed cheat name per block followed by its codes, a trailing plus marking the cheat active. Read on top of the entries usrcheat.dat holds and written back when a cheat is toggled.",
            "path": "cheats/<game>.cht",
            "required": false,
            "source_ref": "drastic r2.5.2.2 load_custom_cheats 0x817b4, drastic r2.5.2.2 save_custom_cheats 0x81d24, drastic_readme.txt:789-812",
            "system": "nintendo-ds"
          },
          {
            "category": "game_data",
            "description": "slot 2 cartridge image",
            "name": "<game>.gba",
            "note": "Loaded into the slot 2 cart window, with its save read from slot2/<game>.sav beside it.",
            "path": "slot2/<game>.gba",
            "required": false,
            "source_ref": "drastic r2.5.2.2 gamecard_load_gba 0x6ec98, drastic r2.5.2.2 gamecard_load_gba 0x6eda0",
            "system": "nintendo-ds",
            "unsourceable": "Game Boy Advance cartridge the title reads for bonus content"
          },
          {
            "category": "game_data",
            "description": "R4 flashcart disk image",
            "name": "drastic_dldi.img",
            "note": "Opened read-write when a homebrew title is recognised and mounted as the fat:/ device. Absent, the message is logged and the title runs without a card.",
            "path": "drastic_dldi.img",
            "required": false,
            "source_ref": "drastic r2.5.2.2 gamecard_initialize_homebrew 0x6e4e0-0x6e518, drastic r2.5.2.2 gamecard_initialize_homebrew 0x6e5a4",
            "system": "nintendo-ds",
            "unsourceable": "FAT image the user builds for the emulated flashcart"
          },
          {
            "category": "game_data",
            "description": "boot splash, first of two",
            "name": "drastic_logo_0.raw",
            "note": "Read from the root of the data directory in one 120000 byte request, so a shorter file is rejected. One of the two indices is picked at random and a missing file skips the splash.",
            "path": "drastic_logo_0.raw",
            "required": false,
            "size": 120000,
            "source_ref": "drastic r2.5.2.2 load_logo 0x7fad0-0x7fb78",
            "validation": [
              "size"
            ]
          },
          {
            "category": "game_data",
            "description": "boot splash, second of two",
            "name": "drastic_logo_1.raw",
            "note": "Same read as index 0.",
            "path": "drastic_logo_1.raw",
            "required": false,
            "size": 120000,
            "source_ref": "drastic r2.5.2.2 load_logo 0x7fad0-0x7fb78",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Nintendo DS emulator by Exophase, closed source and distributed as a binary.\nTwo releases are read here and they name the same files: the Android build\nr2.6.0.4a build 109, package com.dsemu.drastic, apk md5\n7df979ef9420c5053b27c838e6a7e20c, whose loader is\nlib/arm64-v8a/libdrastic_arm64.so and whose installer is the smali of\nDraSticActivity; and the Linux AArch64 build r2.5.2.2, md5\n17550db727f3b59d36b57746ad1944be, which ships unstripped with 2731 named\nfunctions and is cited by function name. r2.5.2.2 predates the firmware editor\nand the user database, and that is the whole of the divergence. Every\nreference below is an address in one of the two binaries or a line in the\napktool decode of the Android one.\nref: libdrastic_arm64.so, drastic r2.5.2.2 (DWARF comp_dir\n     /home/odroid/nds_emu/src/linux_odroid64), DraSticActivity.smali\n\nOne root holds everything. On Android it is a directory named DraStic at the\nroot of shared storage; on Linux it is the working directory. Startup creates\nbackup, savestates, config, unzip_cache, system, input_record, cheats, slot2,\nmicrophone and scripts below it, and the Android build adds backgrounds,\nicon_cache, users, shaders and virtual_controller. Paths below are relative to\nthat root.\nref: drastic r2.5.2.2 initialize_system_directories 0xf780,\n     drastic r2.5.2.2 0x11ac08-0x11ac80, drastic r2.5.2.2 initialize_system 0xf9e8,\n     DraSticPathCache.smali:44-56, DraSticActivity.smali:4373-4429,\n     DraSticActivity.smali:4187, DraSticActivity.smali:4482\n\nload_system_file builds <root>/system/<name>, opens it read only, measures it\nby seeking to the end, refuses any length other than the one its caller asks\nfor with \"System file %s is the wrong size (should be %d bytes, is %d)\", then\nreads it whole. Size is the only test; no hash is computed on any file.\nref: drastic r2.5.2.2 load_system_file 0xea80-0xebe4,\n     libdrastic_arm64.so 0x1b4d4-0x1b510\n\nEach BIOS slot has two candidates. The ARM9 slot takes nds_bios_arm9.bin, and\non failure logs \"Can't find Nintendo ARM9 BIOS. Trying free DraStic ARM9\nBIOS.\" and takes drastic_bios_arm9.bin; the ARM7 slot does the same with\nnds_bios_arm7.bin then drastic_bios_arm7.bin. A slot left empty returns -1\nfrom initialize_memory, and initialize_system answers that with the on-screen\nwarning naming the two Nintendo files and their sizes, the line \"FATAL: Could\nnot load system files.\" and quit. Neither name in a slot is required on its\nown, both slots are. Taking the replacement sets a bit per slot, which is what\nsavestates record so that a state made under one pair does not load under the\nother.\nref: drastic r2.5.2.2 initialize_memory 0x1c398-0x1c3d4,\n     drastic r2.5.2.2 initialize_memory 0x1c4b0-0x1c52c,\n     drastic r2.5.2.2 initialize_system 0xf940-0xf944,\n     drastic r2.5.2.2 initialize_system 0xf9f8-0xfa10,\n     drastic r2.5.2.2 menu_bios_warning 0x801e0-0x80238,\n     libdrastic_arm64.so 0x2b6d0-0x2b764\n\nFirmware is answered in code when no file loads: the 256 KB region is zeroed\nand patch_firmware_header_data writes the header, the console identity and the\nuser settings block into it. r2.5.2.2 reads nds_firmware.bin alone; r2.6.0.4a\nreads nds_firmware_modified.bin first, which is what its firmware editor\nwrites back, and falls through to nds_firmware.bin.\nref: drastic r2.5.2.2 initialize_memory 0x1c3e0-0x1c3f8,\n     drastic r2.5.2.2 initialize_memory 0x1c560-0x1c578,\n     drastic r2.5.2.2 patch_firmware_header_data 0x1b920,\n     libdrastic_arm64.so 0x2b768-0x2b7c4, libdrastic_arm64.so 0x774e0-0x7751c\n\nThe Nintendo ARM7 image still decides one thing. gamecard_load_program passes\nthe 0x1048 bytes at ARM7 BIOS offset 0x30 to gamecard_decrypt_secure_region as\nthe Blowfish key table, and a secure area that does not decrypt to the id\nencryObj is reported and left alone. The free ARM7 replacement holds zeroes\nthere, so encrypted cards need the dumped image.\nref: drastic r2.5.2.2 gamecard_load_program 0x6fb98-0x6fbac,\n     drastic r2.5.2.2 gamecard_decrypt_secure_region 0x6e2c0-0x6e38c,\n     drastic r2.5.2.2 initialize_memory 0x1c3bc-0x1c3c8\n\nTwo databases sit at the root. game_database.xml carries the save type per\ntitle and a failed open only logs \"Error: could not load game database file\n%s.\"; r2.6.0.4a reads game_database_user.xml after it as a user overlay.\nusrcheat.dat is the Action Replay library, read by load_cheat_directory.\nref: drastic r2.5.2.2 initialize_gamecard 0x709bc-0x70a30,\n     drastic r2.5.2.2 initialize_game_database 0x73180,\n     drastic r2.5.2.2 initialize_game_database 0x73d24-0x73d38,\n     libdrastic_arm64.so 0x76ab8-0x76b58\n\nThe Android package carries its own copies of the files it needs and lays them\ndown on first run: the two free BIOS images into system, the default layout\ninto config, game_database.xml, usrcheat.dat and the BSD-licensed source\narchive of the free BIOS at the root, and the shaders and virtual_controller\ntrees whole. Nothing already present is overwritten.\nref: DraSticActivity.smali:4052-4090, DraSticActivity.smali:5189-5200,\n     DraSticActivity.smali:5459, DraSticActivity.smali:5619-5624,\n     DraSticActivity.smali:5645, DraSticActivity.smali:5834,\n     DraSticActivity.smali:5974\n\nA .dfx names the passes of a post-processing chain and pulls its GLSL stages,\nits included headers and its lookup textures from paths relative to itself.\nNine chains ship: None, Linear, Quilez, Scale2X, Scanline, HQ2X, FXAA, FXAA HQ\nand SMAA, the last two reading .raw lookup textures.\nref: assets/shaders/_shader_format_.txt:12-58, assets/shaders/SMAA.dfx:1-6\n\nPer-title inputs are read beside the ROM name. reset_spu answers the\nmicrophone with microphone/<game>.wav then microphone/microphone.wav, load_nds\nruns scripts/<game>.lua then scripts/default.lua through the built-in Lua\n5.3, load_custom_cheats reads cheats/<game>.cht on top of the library, and\ngamecard_load_gba fills the slot 2 cart from slot2/<game>.gba with its save\nbeside it. Homebrew turns on R4 flashcart emulation and opens\ndrastic_dldi.img read-write for the fat:/ device, logging \"Couldn't load\ndrastic_dldi.img: \" and carrying on without one.\nref: drastic r2.5.2.2 reset_spu 0x6dba8-0x6dc5c,\n     drastic r2.5.2.2 load_nds 0x6ff78-0x6ffd0, drastic r2.5.2.2 load_nds 0x70054-0x70094,\n     drastic r2.5.2.2 load_custom_cheats 0x817b4,\n     drastic r2.5.2.2 gamecard_load_gba 0x6ec98, drastic r2.5.2.2 gamecard_load_gba 0x6eda0,\n     drastic r2.5.2.2 gamecard_initialize_homebrew 0x6e4e0-0x6e518,\n     drastic r2.5.2.2 gamecard_initialize_homebrew 0x6e5a4\n\nThe Linux build alone draws a splash, reading drastic_logo_0.raw or\ndrastic_logo_1.raw at 120000 bytes each, one of the two picked at random.\nref: drastic r2.5.2.2 load_logo 0x7fad0-0x7fb78\n",
        "profiled_date": "2026-08-11",
        "source": "https://archive.org/details/dra-stic-ds-emulator-r-2.6.0.4a",
        "systems": [
          "nintendo-ds"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "dreamm",
      "profile": {
        "core_classification": "other",
        "core_version": "4.0",
        "cores": [
          "dreamm"
        ],
        "display_name": "LucasArts (DREAMM)",
        "emulator": "DREAMM",
        "files": [
          {
            "crc32": "4c91fa96",
            "description": "Roland MT-32 v1.04 control ROM",
            "name": "mt32_ctrl_1_04.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_04.rom",
            "required": false,
            "sha1": "5a5cb5a77d7d55ee69657c2f870416daed52dea7",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23dafc8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "a93b65f2",
            "description": "Roland MT-32 v1.04 control ROM, chip A",
            "name": "mt32_ctrl_1_04_a.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_04_a.rom",
            "required": false,
            "sha1": "9cd4858014c4e8a9dff96053f784bfaac1092a2e",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23dafd8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "b5ee2192",
            "description": "Roland MT-32 v1.04 control ROM, chip B",
            "name": "mt32_ctrl_1_04_b.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_04_b.rom",
            "required": false,
            "sha1": "fe8db469b5bfeb37edb269fd47e3ce6d91014652",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23dafe8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "e6bb2b77",
            "description": "Roland MT-32 v1.05 control ROM",
            "name": "mt32_ctrl_1_05.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_05.rom",
            "required": false,
            "sha1": "e17a3a6d265bf1fa150312061134293d2b58288c",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23daff8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "3281216c",
            "description": "Roland MT-32 v1.05 control ROM, chip A",
            "name": "mt32_ctrl_1_05_a.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_05_a.rom",
            "required": false,
            "sha1": "57a09d80d2f7ca5b9734edbe9645e6e700f83701",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db008, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "e06d8020",
            "description": "Roland MT-32 v1.05 control ROM, chip B",
            "name": "mt32_ctrl_1_05_b.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_05_b.rom",
            "required": false,
            "sha1": "52e3c6666db9ef962591a8ee99be0cde17f3a6b6",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db018, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "d63319e8",
            "description": "Roland MT-32 v1.06 control ROM",
            "name": "mt32_ctrl_1_06.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_06.rom",
            "required": false,
            "sha1": "a553481f4e2794c10cfe597fef154eef0d8257de",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db028, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "29369ae1",
            "description": "Roland MT-32 v1.06 control ROM, chip A",
            "name": "mt32_ctrl_1_06_a.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_06_a.rom",
            "required": false,
            "sha1": "cc83bf23cee533097fb4c7e2c116e43b50ebacc8",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db038, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "4d495d98",
            "description": "Roland MT-32 v1.06 control ROM, chip B",
            "name": "mt32_ctrl_1_06_b.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_06_b.rom",
            "required": false,
            "sha1": "bf4f15666bc46679579498386704893b630c1171",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db048, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "a7c1531b",
            "description": "Roland MT-32 v1.07 control ROM",
            "name": "mt32_ctrl_1_07.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_07.rom",
            "required": false,
            "sha1": "b083518fffb7f66b03c23b7eb4f868e62dc5a987",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db058, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "67fd8968",
            "description": "Roland MT-32 v1.07 control ROM, chip A",
            "name": "mt32_ctrl_1_07_a.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_07_a.rom",
            "required": false,
            "sha1": "13f06b38f0d9e0fc050b6503ab777bb938603260",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db068, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "60f45882",
            "description": "Roland MT-32 v1.07 control ROM, chip B",
            "name": "mt32_ctrl_1_07_b.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_1_07_b.rom",
            "required": false,
            "sha1": "c55e165487d71fa88bd8c5e9c083bc456c1a89aa",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db078, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "627b9a51",
            "description": "Roland MT-32 Blue Ridge Enhanced control ROM",
            "name": "mt32_ctrl_bluer.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_bluer.rom",
            "required": false,
            "sha1": "7b8c2a5ddb42fd0732e2f22b3340dcf5360edf92",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0b8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "d75fc3d9",
            "description": "Roland MT-32 Blue Ridge Enhanced control ROM, chip A",
            "name": "mt32_ctrl_bluer_a.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_bluer_a.rom",
            "required": false,
            "sha1": "11a6ae5d8b6ee328b371af7f1e40b82125aa6b4d",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0c8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "5816476f",
            "description": "Roland MT-32 Blue Ridge Enhanced control ROM, chip B",
            "name": "mt32_ctrl_bluer_b.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_bluer_b.rom",
            "required": false,
            "sha1": "e0934320d7cbb5edfaa29e0d01ae835ef620085b",
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0d8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "description": "Roland MT-32 v2.03 control ROM",
            "name": "mt32_ctrl_2_03.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_2_03.rom",
            "required": false,
            "sha1": "5837064c9df4741a55f7c4d8787ac158dff2d3ce",
            "size": 131072,
            "source_ref": "DREAMM 4.0 linux-x64: set table 0x23db5a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "sha1"
            ]
          },
          {
            "crc32": "59a49d5c",
            "description": "Roland MT-32 v2.04 control ROM",
            "name": "mt32_ctrl_2_04.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_2_04.rom",
            "required": false,
            "sha1": "2c16432b6c73dd2a3947cba950a0f4c19d6180eb",
            "size": 131072,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db088, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "94815415",
            "description": "Roland MT-32 v2.06 control ROM",
            "name": "mt32_ctrl_2_06.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_2_06.rom",
            "required": false,
            "sha1": "2869cf4c235d671668cfcb62415e2ce8323ad4ed",
            "size": 131072,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db098, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "a016b607",
            "description": "Roland MT-32 v2.07 control ROM",
            "name": "mt32_ctrl_2_07.rom",
            "path": "sounddata/mt32emu/mt32_ctrl_2_07.rom",
            "required": false,
            "sha1": "47b52adefedaec475c925e54340e37673c11707c",
            "size": 131072,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0a8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "ee62022f",
            "description": "Roland CM-32L v1.00 control ROM",
            "name": "cm32l_ctrl_1_00.rom",
            "path": "sounddata/mt32emu/cm32l_ctrl_1_00.rom",
            "required": false,
            "sha1": "73683d585cd6948cc19547942ca0e14a0319456d",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23daf88, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "b998047e",
            "description": "Roland CM-32L v1.02 control ROM",
            "name": "cm32l_ctrl_1_02.rom",
            "path": "sounddata/mt32emu/cm32l_ctrl_1_02.rom",
            "required": false,
            "sha1": "a439fbb390da38cada95a7cbb1d6ca199cd66ef8",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23daf98, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "4a3bb4ef",
            "description": "Roland CM-32LN v1.00 control ROM",
            "name": "cm32ln_ctrl_1_00.rom",
            "path": "sounddata/mt32emu/cm32ln_ctrl_1_00.rom",
            "required": false,
            "sha1": "dc1c5b1b90a4646d00f7daf3679733c7badc7077",
            "size": 65536,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23daf78, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "573e31cc",
            "description": "Roland MT-32 PCM ROM",
            "name": "mt32_pcm.rom",
            "path": "sounddata/mt32emu/mt32_pcm.rom",
            "required": false,
            "sha1": "f6b1eebc4b2d200ec6d3d21d51325d5b48c60252",
            "size": 524288,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0e8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "dd9deac3",
            "description": "Roland MT-32 PCM ROM, low half",
            "name": "mt32_pcm_l.rom",
            "path": "sounddata/mt32emu/mt32_pcm_l.rom",
            "required": false,
            "sha1": "3a1e19b0cd4036623fd1d1d11f5f25995585962b",
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db108, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "4ee6506c",
            "description": "Roland MT-32 PCM ROM, high half",
            "name": "mt32_pcm_h.rom",
            "path": "sounddata/mt32emu/mt32_pcm_h.rom",
            "required": false,
            "sha1": "2cadb99d21a6a4a6f5b61b6218d16e9b43f61d01",
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db0f8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "4b961eba",
            "description": "Roland CM-32L PCM ROM",
            "name": "cm32l_pcm.rom",
            "path": "sounddata/mt32emu/cm32l_pcm.rom",
            "required": false,
            "sha1": "289cc298ad532b702461bfc738009d9ebe8025ea",
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23dafa8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "8e9ea06e",
            "description": "Roland CM-32L PCM ROM, high half",
            "name": "cm32l_pcm_h.rom",
            "path": "sounddata/mt32emu/cm32l_pcm_h.rom",
            "required": false,
            "sha1": "3ad889fde5db5b6437cbc2eb6e305312fec3df93",
            "size": 524288,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23dafb8, set table 0x23db4a8; sounddata/mt32emu-dreamm.so ROM table",
            "validation": [
              "size",
              "crc32",
              "sha1"
            ]
          },
          {
            "crc32": "d072c251",
            "description": "Roland SC-55 v1.00 program ROM (ROM1)",
            "name": "sc55_rom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_rom1.bin",
            "required": false,
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db118",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "dbaaae8f",
            "description": "Roland SC-55 v1.00 program ROM (ROM2)",
            "name": "sc55_rom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_rom2.bin",
            "required": false,
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db128",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1ac774d3",
            "description": "Roland SC-55 v1.00 wave ROM (WAVEROM1)",
            "name": "sc55_waverom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom1.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db138",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "8dcc592a",
            "description": "Roland SC-55 v1.00 wave ROM (WAVEROM2)",
            "name": "sc55_waverom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom2.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db148",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e21ebc04",
            "description": "Roland SC-55 v1.00 wave ROM (WAVEROM3)",
            "name": "sc55_waverom3.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.00/sc55_waverom3.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db158",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "4ed0d171",
            "description": "Roland SC-55 v1.20 program ROM (ROM1)",
            "name": "sc55_rom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_rom1.bin",
            "required": false,
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db168",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "ebd488fd",
            "description": "Roland SC-55 v1.20 program ROM (ROM2)",
            "name": "sc55_rom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_rom2.bin",
            "required": false,
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db178",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1ac774d3",
            "description": "Roland SC-55 v1.20 wave ROM (WAVEROM1)",
            "name": "sc55_waverom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom1.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db188",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "8dcc592a",
            "description": "Roland SC-55 v1.20 wave ROM (WAVEROM2)",
            "name": "sc55_waverom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom2.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db198",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e21ebc04",
            "description": "Roland SC-55 v1.20 wave ROM (WAVEROM3)",
            "name": "sc55_waverom3.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.20/sc55_waverom3.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1a8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "4ed0d171",
            "description": "Roland SC-55 v1.21 program ROM (ROM1)",
            "name": "sc55_rom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_rom1.bin",
            "required": false,
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1b8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "2dc58549",
            "description": "Roland SC-55 v1.21 program ROM (ROM2)",
            "name": "sc55_rom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_rom2.bin",
            "required": false,
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1c8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1ac774d3",
            "description": "Roland SC-55 v1.21 wave ROM (WAVEROM1)",
            "name": "sc55_waverom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom1.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1d8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "8dcc592a",
            "description": "Roland SC-55 v1.21 wave ROM (WAVEROM2)",
            "name": "sc55_waverom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom2.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1e8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e21ebc04",
            "description": "Roland SC-55 v1.21 wave ROM (WAVEROM3)",
            "name": "sc55_waverom3.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v1.21/sc55_waverom3.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db1f8",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "a160da90",
            "description": "Roland SC-55 v2.00 program ROM (ROM1)",
            "name": "sc55_rom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_rom1.bin",
            "required": false,
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db208",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1768cc18",
            "description": "Roland SC-55 v2.00 program ROM (ROM2)",
            "name": "sc55_rom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_rom2.bin",
            "required": false,
            "size": 262144,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db218",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1ac774d3",
            "description": "Roland SC-55 v2.00 wave ROM (WAVEROM1)",
            "name": "sc55_waverom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom1.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db228",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "8dcc592a",
            "description": "Roland SC-55 v2.00 wave ROM (WAVEROM2)",
            "name": "sc55_waverom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom2.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db238",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e21ebc04",
            "description": "Roland SC-55 v2.00 wave ROM (WAVEROM3)",
            "name": "sc55_waverom3.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55-v2.00/sc55_waverom3.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db248",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "9b66631f",
            "description": "Roland SC-55mk2 v1.01 program ROM (ROM1)",
            "name": "rom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom1.bin",
            "required": false,
            "size": 32768,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db258",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "fcee1e8e",
            "description": "Roland SC-55mk2 v1.01 program ROM (ROM2)",
            "name": "rom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom2.bin",
            "required": false,
            "size": 524288,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db268",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "702c0a82",
            "description": "Roland SC-55mk2 v1.01 sub-MCU ROM (SMROM)",
            "name": "rom_sm.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/rom_sm.bin",
            "required": false,
            "size": 4096,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db278",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "1519d3b3",
            "description": "Roland SC-55mk2 v1.01 wave ROM (WAVEROM1)",
            "name": "waverom1.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/waverom1.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db288",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "0f826c7f",
            "description": "Roland SC-55mk2 v1.01 wave ROM (WAVEROM2)",
            "name": "waverom2.bin",
            "path": "sounddata/Nuked-SC55-Resources/ROMs/SC-55mk2-v1.01/waverom2.bin",
            "required": false,
            "size": 1048576,
            "source_ref": "DREAMM 4.0 linux-x64: ROM manifest 0x23db298",
            "validation": [
              "size",
              "crc32"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Closed-source emulator by Aaron Giles for LucasArts, Lucasfilm Games and\nLucas Learning titles, shipped as a single executable for Windows, macOS and\nLinux on x64 and ARM64. The game database is compiled in: 67 definitions\ncovering 1013 variants, keyed on machine = pc, fmtowns or tandy and\nosenv = dos, windows or fmtowns. Windows titles run on a reimplemented Win16\nand Win32 layer carried inside the executable. The game directory is passed\non the command line and the title is detected from its contents.\nref: DREAMM 4.0 linux-x64, appended zip game/*.dreamm\n\nSupport files live in the SDL preference path for organisation\n\"Aaron Giles\" and application \"DREAMM\":\n%APPDATA%\\Aaron Giles\\DREAMM on Windows,\n~/Library/Application Support/Aaron Giles/DREAMM on macOS,\n$XDG_DATA_HOME/Aaron Giles/DREAMM on Linux. Paths below are relative to that\ndirectory. Startup writes config.json and creates install, gamedelta,\nscreenshots, logs and sounddata.\nref: SDL_GetPrefPath; strace of DREAMM 4.0 linux-x64 with a clean HOME\n\nAudio hardware is set per game and per variant: speaker, cms, adlib, sb16,\ntandy, mt32 and gmidi. MT-32 and General MIDI output can go to an external\nMIDI device, to the OPL MIDI generator or to a SoundFont, so no ROM file is\nneeded to play any title. ROMs add the two hardware synthesiser options.\nref: game/*.dreamm audiohw; \"Expected one of 'speaker', 'cms', 'adlib',\n     'sb16', 'mt32', or 'gmidi' in audiohw\"\n\nMT-32 and CM-32L are emulated by a bundled munt build, unpacked at runtime\nto sounddata/mt32emu-dreamm.so and driven through mt32emu_get_service_i.\nTwelve ROM sets are declared in a table of twelve 64-byte records holding\ndisplay name, id, control ROM full image, control chips A and B, PCM full\nimage and PCM low and high halves: MT-32 v1.04, v1.05, v1.06, v1.07, Blue\nRidge Enhanced, v2.03, v2.04, v2.06, v2.07, CM-32L v1.00, CM-32L v1.02 and\nCM-32LN v1.00. A set is offered once a control ROM is present as the full\nimage or as both chips, and a PCM ROM is present as the full image or as\nboth halves. The CM-32L sets name cm32l_pcm.rom as the full image,\nmt32_pcm_l.rom as the low half and cm32l_pcm_h.rom as the high half. munt\nidentifies each file by size then SHA1 before opening the synth.\nref: set table 0x23db4a8, id lookup 0x164d050, availability 0x164d2a8;\n     munt ROMInfo.cpp:206-214 ROMInfo::getROMInfo\n\nThe SC-55 is emulated by the Nuked SC-55 CLAP plug-in, unpacked to\nsounddata/Nuked-SC55.clap, which reads one model directory under\nNuked-SC55-Resources/ROMs. Five models are probed at startup: SC-55 v1.00,\nv1.20, v1.21, v2.00 and SC-55mk2 v1.01. The plug-in identifies a set by\nhashing the directory contents, so its own loader does not depend on the\nfile names.\nref: strace of DREAMM 4.0 linux-x64; Nuked-SC55-CLAP nuked_sc55.cpp:145-212\n     GetRomBasePaths and Init, rom_loader.cpp:31-80 DetectRomsetsByHash\n\nBoth families install by dropping files on the Manage Sound Fonts & ROMs\nscreen, or by copying them into sounddata by hand. A dropped file is matched\nagainst a 51-entry manifest of {crc32, size, name} sorted by name: one path\nresolves a file by name and checks its size then its CRC32, the other maps a\nsize and CRC32 back to the destination paths listed below. The manifest\nsizes agree with the bundled munt ROM table. mt32_ctrl_2_03.rom is named by\nthe v2.03 set but has no manifest entry, so it loads from sounddata and\ncannot be installed by drag and drop.\nref: manifest 0x23daf78, name match 0x16456a0, reverse lookup 0x1645880;\n     \"To install Sound Fonts (.sf2 files) or ROMs for Roland MIDI emulation,\n     drop them onto this screen.\"\n\nSoundFonts are read from sounddata as well: the directory is scanned at\nstartup and every .sf2 found becomes a MIDI output option for both MT-32 and\nGMIDI. No name and no hash is compiled in and the file keeps the name it\narrived with, so none is listed below.\nref: sounddata scan; \"Error loading soundfont '{}': {}\", \"Font file '{}'\n     seems to be an MT-32 set, not compatible with GMIDI\"\n\nEverything else the emulator reads is appended to the executable and\nunpacked at runtime: the game definitions and their icons, the copy\nprotection artwork, gamecontrollerdb.txt, the shaders, the UI fonts and\nimages, the two synthesiser plug-ins, and the Win16 and Win32 system files,\nfonts and sounds.\nref: appended zip, 488 entries\n",
        "profiled_date": "2026-08-08",
        "source": "https://dreamm.aarongiles.com/",
        "systems": [
          "dos",
          "ibm-pc",
          "tandy-1000",
          "fmtowns"
        ],
        "type": "standalone",
        "upstream": "https://dreamm.aarongiles.com/"
      }
    },
    {
      "id": "droidarcadia",
      "profile": {
        "author": "James Jacobs (Amigan Software)",
        "core_classification": "embedded_hle",
        "core_version": "4.60",
        "cores": [
          "droidarcadia",
          "com.amigan.droidarcadia"
        ],
        "display_name": "Emerson Arcadia 2001 / Interton VC 4000 (DroidArcadia)",
        "emulator": "DroidArcadia",
        "exclusion_note": "Nothing to obtain. The app reads back only what it writes in its own private storage, each read wrapped in a catch that continues when the file is absent: DroidArcadia.ini for settings, DroidArcadia.hgh for the high score table, and Autosave.cos with Quicksave.cos for save states. Screenshots go out to /sdcard/Pictures/DroidArcadia and are never read back, and RetroAchievements traffic, login and badge and game images alike, is decoded in memory. The apk carries no assets directory and no raw resource, so no payload is unpacked on first run either. ref: MainActivity.java:1123,1184,1242,1312,1340,1415,\n     OptionsActivity.java:224-235,682,742, RAActivity.java:237-238,268-269,\n     NetworkUtil.java:17-38\n",
        "files": [],
        "mode": "standalone",
        "notes": "Android build of the Signetics 2650 emulator line by James Jacobs, published\nas package com.amigan.droidarcadia. A game arrives as a content URI declared\nby the manifest under MIME type application/octet-stream or application/zip,\na zip yielding its first member only, and the read stops at 32768 bytes. This\nreading is taken from the author's own source archive DroidArcadia-src.rar\n4.60, md5 5f88d8b01493a2430d2f9c94da69bf8a, and confirmed against the\npublished DroidArcadia.apk, md5 a72cf2f5e2b213577f3e185aa58f7e21.\nref: app/src/main/cpp/da.h:3-5, app/src/main/AndroidManifest.xml:21-37,\n     app/build.gradle:22-28, MainActivity.java:1502-1558,\n     res/values/strings.xml:5-6\n\nFifteen memory maps over five machines: Interton VC 4000 types A to D,\nElektor TV Games Computer basic and expanded, Emerson Arcadia 2001 types G\n(Emerson), H (Tele-Fever) and I (Palladium), and the coin-ops Astro Wars,\nGalaxia, Laser Battle and Lazarian (Zaccaria) with Malzak 1 and 2 (Kitronix).\nref: android.c:245-261, da.h:445-467\n\nEvery ROM those machines run is a const array compiled into\nlibdroidarcadia.so and copied into memory when the machine is set up:\na_bios[348] for the\nArcadia boot stub, i_bios[287] for the Interton one, e_bios_philips[2048] and\ne_bios_hobbymodule[2048] for the two Elektor monitor ROMs, galaxia_game,\nastrowars_game, lb_game and lz_game for the Zaccaria coin-ops, m1_bios and\nm2_bios for the Malzak pair. The first sixteen bytes of all ten arrays are\npresent in the arm64 library of the published apk.\nref: android.c:588-596, arcadia.h:279 with arcadia.c:426, interton.h:1 with\n     interton.c:36, elektor.h:1,131 with elektor.c:95-103,\n     zaccaria.h:1,644,1599,3653 with zaccaria.c:243,325,423,436,\n     malzak.h:1,558 with malzak.c:363,373\n\nThe native side never opens a file. It receives the game as a byte array over\nJNI and parses it in memory: a cartridge is matched on size and CRC32 against\nthe games.h table, and the bios field of the matched entry carries the Arcadia\nregion and picks which of the two Elektor monitor ROMs is installed.\nRetroAchievements identification is handed that same memory with the file path\nargument left NULL, so the file reader of the bundled rcheevos is never\nreached. A coin-op is stepped to through the machine button rather than\nloaded, and a raw binary aimed at Zaccaria or Malzak hardware is refused.\nref: android.c:877-894, android.c:2166-2192, android.c:2082-2096,\n     android.c:1010-1013, android.c:4592-4631, elektor.c:95-103,\n     OptionsActivity.java:455-465\n",
        "profiled_date": "2026-08-11",
        "source": "https://amigan.1emu.net/releases/",
        "systems": [
          "emerson-arcadia-2001",
          "interton-vc4000",
          "elektor-tv-games-computer",
          "arcade"
        ],
        "type": "standalone",
        "upstream": "https://amigan.1emu.net/releases/"
      }
    },
    {
      "id": "dsmile",
      "profile": {
        "core_classification": "other",
        "core_version": "0.4.4",
        "cores": [
          "dsmile"
        ],
        "display_name": "VTech - V.Smile (D.Smile)",
        "emulator": "D.Smile",
        "exclusion_note": "The system ROM is the only file to obtain. The cartridge dump arrives as the intent payload and everything else the app touches it writes itself: the save states and their PNG thumbnails under states in the external files directory, and the dsmile preferences, which also hold the touch layouts as a JSON string rather than as files. The Art Studio NVRAM the SPG200 maps over bank 2 is dead here, the sole SetCart call passing a null pointer for it, so no such image exists to name. Oboe and libc++_shared are linked into the package by CMake at build time and are never opened as files. The native sources perform no file I/O at all. ref: EmuActivity.kt:123-145, EmuActivity.kt:246-296, EmuActivity.kt:528-555,\n     vsmile.cpp:294, spg200.cpp:204,214, CMakeLists.txt:11,26\n",
        "files": [
          {
            "description": "V.Smile system ROM, revision 1.03",
            "hle_fallback": true,
            "name": "vsmile_v103.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:238-261 (size and vector test), app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:277-288 (folder detection), app/src/main/java/com/dsmile/emulator/ui/EmuActivity.kt:156-168 (selection), app/src/main/cpp/jni_bridge.cpp:34-40, app/src/main/cpp/core/vsmile.cpp:326-334 (load)",
            "system": "vtech-vsmile",
            "validation": [
              "size"
            ]
          },
          {
            "description": "V.Smile system ROM, revision 1.02",
            "hle_fallback": true,
            "name": "vsmile_v102.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:238-261 (size and vector test), app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:277-288 (folder detection), app/src/main/java/com/dsmile/emulator/ui/EmuActivity.kt:156-168 (selection), app/src/main/cpp/jni_bridge.cpp:34-40, app/src/main/cpp/core/vsmile.cpp:326-334 (load)",
            "system": "vtech-vsmile",
            "validation": [
              "size"
            ]
          },
          {
            "description": "V.Smile system ROM, revision 1.00",
            "hle_fallback": true,
            "name": "vsmile_v100.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:238-261 (size and vector test), app/src/main/java/com/dsmile/emulator/ui/MainActivity.kt:277-288 (folder detection), app/src/main/java/com/dsmile/emulator/ui/EmuActivity.kt:156-168 (selection), app/src/main/cpp/jni_bridge.cpp:34-40, app/src/main/cpp/core/vsmile.cpp:326-334 (load)",
            "system": "vtech-vsmile",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "V.Smile emulator for Android, package com.dsmile.emulator, built on an SPG200\n(unSP) core of its own. Frontends launch the exported EmuActivity either with\nACTION_VIEW and a content or file Uri, or with the LAUNCH_GAME action and a\nrom, ROM, path or uri string extra carrying a path; ES-DE uses the first form.\nref: AndroidManifest.xml:34-51, EmuActivity.kt:123-145,\n     docs/iisu-integration.md:42-51\n\nThe machine never boots from the system ROM. UnSP::Reset takes the program\ncounter from 0xFFF7, and the FIQ, IRQ n and BREAK vectors are read from\n0xFFF6, 0xFFF8+n and 0xFFF5; all four sit in bank 0, which ExtRead answers\nfrom the cartridge under every decode mode. The system ROM sits on bank 3 and\nis reachable only once cartridge code selects decode mode 2 or 3;\nextmem_ctrl_ resets to 0x0028, which is decode 0, so nothing but the\ncartridge is mapped at power on.\nref: unsp.cpp:49,67,77,253, spg200.cpp:188-209, spg200.cpp:37\n\nAbsent a file the constructor synthesises the region: 0x100000 words zero\nfilled, with 0x0031 written into the odd word of each pair across\n0xFFFC0-0xFFFDB so that calls into the BIOS land on zeroed memory. LoadSysrom\nreplaces it, reading the image as little-endian 16-bit words and clamping at\n0x100000 words, and runs only when bytes were passed.\nref: vsmile.cpp:273-283, vsmile.cpp:326-334, jni_bridge.cpp:34-40\n\nTwo paths reach LoadSysrom and one of them checks nothing. The BIOS button\nimports through a file picker: validateBios demands exactly 0x200000 bytes and\nnine of the eleven words at 0xFFF5-0xFFFF decoding inside 0x0100-0xFFF0, tries\nboth byte orders, rewrites the image to little-endian when the swapped reading\nscores higher, and stores the result as sysrom.bin in the app's private\ndirectory. With no imported file the ROM folder is searched instead: any entry\nwhose extension is bin, rom or vsmile and whose lowercased name holds bios,\nsysrom or system rom, or begins with vsmile_v, is taken as the system ROM and\nhanded over unmeasured, the last match in directory order winning. No hash is\ncomputed on either path. The three dumped revisions satisfy both tests as they\nstand, scoring eleven of eleven in both byte orders, so they load unswapped.\nref: MainActivity.kt:31, MainActivity.kt:34, MainActivity.kt:215-236,\n     MainActivity.kt:238-261, MainActivity.kt:277-288, EmuActivity.kt:156-168\n\nRegion is a jumper, never a file. Port C carries the region code in its low\nnibble and the intro jumper in bit 4. The code is fixed at 0xF and SetRegion\nhas no caller, so one image serves every session; the jumper is exposed only\nas the Game intros setting, passed through nativeInit.\nref: vsmile.cpp:365-369, vsmile.h:76, vsmile.h:77, vsmile.h:116,\n     jni_bridge.cpp:39, MainActivity.kt:309,320\n\nThe system ROM has no directory of its own. The validated copy is written by\nthe app into private storage, which the user cannot reach, so the one\nplacement open to a collection is the folder chosen with ROM folder, beside\nthe cartridge dumps.\nref: MainActivity.kt:34, MainActivity.kt:154-168, MainActivity.kt:263-288\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/derik-dot-digital/D.Smile",
        "source_commit": "d4bbc3be27537def21513991647f14ea9a9c2d15",
        "systems": [
          "vtech-vsmile"
        ],
        "type": "standalone",
        "upstream": "https://github.com/derik-dot-digital/D.Smile"
      }
    },
    {
      "id": "duckstation",
      "profile": {
        "bios_size": 524288,
        "core_classification": "official_port",
        "core_version": "v0.1",
        "cores": [
          "duckstation"
        ],
        "display_name": "Sony - PlayStation (DuckStation)",
        "emulator": "DuckStation",
        "files": [
          {
            "description": "SCPH-1000, DTL-H1000 (v1.0)",
            "fast_boot": "Type1",
            "md5": "239665b1a3dade1b5a52c06338011044",
            "name": "scph1000.bin",
            "priority": 50,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:35"
          },
          {
            "description": "SCPH-1001, 5003, DTL-H1201, H3001 (v2.2 12-04-95 A)",
            "fast_boot": "Type1",
            "md5": "924e392ed05558ffdb115408c263dccf",
            "name": "scph1001.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:36"
          },
          {
            "description": "SCPH-1002, DTL-H1002 (v2.0 05-10-95 E)",
            "fast_boot": "Type1",
            "md5": "54847e693405ffeb0359c6287434cbef",
            "name": "scph1002a.bin",
            "priority": 10,
            "region": [
              "europe"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:37"
          },
          {
            "description": "SCPH-1002, DTL-H1102 (v2.1 07-17-95 E)",
            "fast_boot": "Type1",
            "md5": "417b34706319da7cf001e76e40136c23",
            "name": "scph1002b.bin",
            "priority": 10,
            "region": [
              "europe"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:38"
          },
          {
            "description": "SCPH-1002, DTL-H1202, H3002 (v2.2 12-04-95 E)",
            "fast_boot": "Type1",
            "md5": "e2110b8a2b97a8e0b857a45d32f7e187",
            "name": "scph1002c.bin",
            "priority": 10,
            "region": [
              "europe"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:39"
          },
          {
            "description": "DTL-H1100 (v2.2 03-06-96 D)",
            "fast_boot": "Type1",
            "md5": "ca5cfc321f916756e3f0effbfaeba13b",
            "name": "dtlh1100.bin",
            "priority": 20,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:40"
          },
          {
            "description": "SCPH-3000, DTL-H1000H (v1.1 01-22-95)",
            "fast_boot": "Type1",
            "md5": "849515939161e62f6b866f6853006780",
            "name": "scph3000.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:41"
          },
          {
            "description": "SCPH-1001, DTL-H1001 (v2.0 05-07-95 A)",
            "fast_boot": "Type1",
            "md5": "dc2b9bf8da62ec93e868cfd29f0d067d",
            "name": "scph1001_v20.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:42"
          },
          {
            "description": "SCPH-3500 (v2.1 07-17-95 J)",
            "fast_boot": "Type1",
            "md5": "cba733ceeff5aef5c32254f1d617fa62",
            "name": "scph3500.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:43"
          },
          {
            "description": "SCPH-1001, DTL-H1101 (v2.1 07-17-95 A)",
            "fast_boot": "Type1",
            "md5": "da27e8b6dab242d8f91a9b25d80c63b8",
            "name": "scph1001_v21.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:44"
          },
          {
            "description": "SCPH-5000, DTL-H1200, H3000 (v2.2 12-04-95 J)",
            "fast_boot": "Type1",
            "md5": "57a06303dfa9cf9351222dfcbb4a29d9",
            "name": "scph5000.bin",
            "priority": 5,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:45"
          },
          {
            "description": "SCPH-5500 (v3.0 09-09-96 J)",
            "fast_boot": "Type1",
            "md5": "8dd7d5296a650fac7319bce665a6a53c",
            "name": "scph5500.bin",
            "priority": 5,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": true,
            "source_ref": "src/core/bios.cpp:46"
          },
          {
            "description": "SCPH-5501, 5503, 7003 (v3.0 11-18-96 A)",
            "fast_boot": "Type1",
            "md5": "490f666e1afb15b7362b406ed1cea246",
            "name": "scph5501.bin",
            "priority": 5,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": true,
            "source_ref": "src/core/bios.cpp:47"
          },
          {
            "description": "SCPH-5502, 5552 (v3.0 01-06-97 E)",
            "fast_boot": "Type1",
            "md5": "32736f17079d0b2b7024407c39bd3050",
            "name": "scph5502.bin",
            "priority": 5,
            "region": [
              "europe"
            ],
            "region_check": false,
            "required": true,
            "source_ref": "src/core/bios.cpp:48"
          },
          {
            "description": "SCPH-7000, 7500, 9000 (v4.0 08-18-97 J)",
            "fast_boot": "Type1",
            "md5": "8e4c14f567745eff2f0408c8129f72a6",
            "name": "scph7000.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:49"
          },
          {
            "description": "SCPH-7000W (v4.1 11-14-97 A)",
            "fast_boot": "Type1",
            "md5": "b84be139db3ee6cbd075630aa20a6553",
            "name": "scph7000w.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:50"
          },
          {
            "description": "SCPH-7001, 7501, 7503, 9001, 9003, 9903 (v4.1 12-16-97 A)",
            "fast_boot": "Type1",
            "md5": "1e68c231d0896b7eadcad1d7d8e76129",
            "name": "scph7001.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:51"
          },
          {
            "description": "SCPH-7002, 7502, 9002 (v4.1 12-16-97 E)",
            "fast_boot": "Type1",
            "md5": "b9d9a0286c33dc6b7237bb13cd46fdee",
            "name": "scph7002.bin",
            "priority": 10,
            "region": [
              "europe"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:52"
          },
          {
            "description": "SCPH-100 (v4.3 03-11-00 J)",
            "fast_boot": "Type1",
            "md5": "8abc1b549a4a80954addc48ef02c4521",
            "name": "scph100.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:53"
          },
          {
            "description": "SCPH-101 (v4.4 03-24-00 A)",
            "fast_boot": "Type1",
            "md5": "9a09ab7e49b422c007e6d54d7c49b965",
            "name": "scph101_v44.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:54"
          },
          {
            "description": "SCPH-101 (v4.5 05-25-00 A)",
            "fast_boot": "Type1",
            "md5": "6e3735ff4c7dc899ee98981385f6f3d0",
            "name": "scph101_v45.bin",
            "priority": 10,
            "region": [
              "north-america"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:55"
          },
          {
            "description": "SCPH-102 (v4.4 03-24-00 E)",
            "fast_boot": "Type1",
            "md5": "b10f5e0e3d9eb60e5159690680b1e774",
            "name": "scph102_v44.bin",
            "priority": 20,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:56"
          },
          {
            "description": "SCPH-102 (v4.5 05-25-00 E)",
            "fast_boot": "Type1",
            "md5": "de93caec13d1a141a40a79f5c86168d6",
            "name": "scph102_v45.bin",
            "priority": 20,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:57"
          },
          {
            "description": "SCPH-1000R (v4.5 05-25-00 J)",
            "fast_boot": "Type1",
            "md5": "476d68a94ccec3b9c8303bbd1daf2810",
            "name": "scph1000r.bin",
            "priority": 10,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:58"
          },
          {
            "description": "PS2, SCPH-18000 (v5.0 10-27-00 J)",
            "fast_boot": "Type2",
            "md5": "d8f485717a5237285e4d7c5f881b7f32",
            "name": "ps2_scph18000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:59"
          },
          {
            "description": "PS2, SCPH-30003 (v5.0 09-02-00 E)",
            "fast_boot": "Type2",
            "md5": "71f50ef4f4e17c163c78908e16244f7d",
            "name": "ps2_scph30003.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:60"
          },
          {
            "description": "PS2, DTL-H10000 (v5.0 01/17/00 T)",
            "fast_boot": "Type2",
            "md5": "32f2e4d5ff5ee11072a6bc45530f5765",
            "name": "ps2_dtlh10000_0117.bin",
            "priority": 100,
            "region": [
              "world"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:61"
          },
          {
            "description": "PS2, SCPH-10000 (v5.0 01/17/00 T)",
            "fast_boot": "Type2",
            "md5": "acf4730ceb38ac9d8c7d8e21f2614600",
            "name": "ps2_scph10000_0117.bin",
            "priority": 100,
            "region": [
              "world"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:62"
          },
          {
            "description": "PS2, DTL-H10000 (v5.0 02/17/00 T)",
            "fast_boot": "Type2",
            "md5": "acf9968c8f596d2b15f42272082513d1",
            "name": "ps2_dtlh10000_0217.bin",
            "priority": 100,
            "region": [
              "world"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:63"
          },
          {
            "description": "PS2, SCPH-10000/SCPH-15000 (v5.0 02/17/00 T)",
            "fast_boot": "Type2",
            "md5": "b1459d7446c69e3e97e6ace3ae23dd1c",
            "name": "ps2_scph10000_15000.bin",
            "priority": 100,
            "region": [
              "world"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:64"
          },
          {
            "description": "PS2, DTL-H10000 (v5.0 02/24/00 T)",
            "fast_boot": "Type2",
            "md5": "d3f1853a16c2ec18f3cd1ae655213308",
            "name": "ps2_dtlh10000_0224.bin",
            "priority": 100,
            "region": [
              "world"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:65"
          },
          {
            "description": "PS2, DTL-H30001 (v5.0 07/27/00 A)",
            "fast_boot": "Type2",
            "md5": "63e6fd9b3c72e0d7b920e80cf76645cd",
            "name": "ps2_dtlh30001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:66"
          },
          {
            "description": "PS2, SCPH-30001 (v5.0 07/27/00 A)",
            "fast_boot": "Type2",
            "md5": "a20c97c02210f16678ca3010127caf36",
            "name": "ps2_scph30001_0727.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:67"
          },
          {
            "description": "PS2, SCPH-30001 (v5.0 09/02/00 A)",
            "fast_boot": "Type2",
            "md5": "8db2fbbac7413bf3e7154c1e0715e565",
            "name": "ps2_scph30001_0902.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:68"
          },
          {
            "description": "PS2, DTL-H30002 (v5.0 09/02/00 E)",
            "fast_boot": "Type2",
            "md5": "91c87cb2f2eb6ce529a2360f80ce2457",
            "name": "ps2_dtlh30002.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:69"
          },
          {
            "description": "PS2, DTL-H30102 (v5.0 09/02/00 E)",
            "fast_boot": "Type2",
            "md5": "3016b3dd42148a67e2c048595ca4d7ce",
            "name": "ps2_dtlh30102_0902.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:70"
          },
          {
            "description": "PS2, SCPH-30002/SCPH-30003/SCPH-30004 (v5.0 09/02/00 E)",
            "fast_boot": "Type2",
            "md5": "b7fa11e87d51752a98b38e3e691cbf17",
            "name": "ps2_scph30002_0902.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:71"
          },
          {
            "description": "PS2, SCPH-18000 (GH-003) (v5.0 10/27/00 J)",
            "fast_boot": "Type2",
            "md5": "f63bc530bd7ad7c026fcd6f7bd0d9525",
            "name": "ps2_scph18000_gh003.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:72"
          },
          {
            "description": "PS2, SCPH-18000 (GH-008) (v5.0 10/27/00 J)",
            "fast_boot": "Type2",
            "md5": "cee06bd68c333fc5768244eae77e4495",
            "name": "ps2_scph18000_gh008.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:73"
          },
          {
            "description": "PS2, DTL-H30101 (v5.0 12/28/00 A)",
            "fast_boot": "Type2",
            "md5": "0bf988e9c7aaa4c051805b0fa6eb3387",
            "name": "ps2_dtlh30101.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:74"
          },
          {
            "description": "PS2, SCPH-30001/SCPH-35001 (v5.0 12/28/00 A)",
            "fast_boot": "Type2",
            "md5": "8accc3c49ac45f5ae2c5db0adc854633",
            "name": "ps2_scph30001_35001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:75"
          },
          {
            "description": "PS2, DTL-H30102 (v5.0 12/28/00 E)",
            "fast_boot": "Type2",
            "md5": "6f9a6feb749f0533aaae2cc45090b0ed",
            "name": "ps2_dtlh30102_1228.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:76"
          },
          {
            "description": "PS2, SCPH-30002/SCPH-30003/SCPH-30004/SCHP-35002/SCPH-35003/SCPH-35004 (v5.0 12/28/00 E)",
            "fast_boot": "Type2",
            "md5": "838544f12de9b0abc90811279ee223c8",
            "name": "ps2_scph30002_1228.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:77"
          },
          {
            "description": "PS2, DTL-H30000 (v5.0 01/18/01 J)",
            "fast_boot": "Type2",
            "md5": "bb6bbc850458fff08af30e969ffd0175",
            "name": "ps2_dtlh30000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:78"
          },
          {
            "description": "PS2, SCPH-30000/SCPH-35000 (v5.0 01/18/01 J)",
            "fast_boot": "Type2",
            "md5": "815ac991d8bc3b364696bead3457de7d",
            "name": "ps2_scph30000_35000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:79"
          },
          {
            "description": "PS2, SCPH-30001R (v5.0 04/27/01 A)",
            "fast_boot": "Type2",
            "md5": "b107b5710042abe887c0f6175f6e94bb",
            "name": "ps2_scph30001r_0427.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:80"
          },
          {
            "description": "PS2, SCPH-30000 (v5.0 04/27/01 J)",
            "fast_boot": "Type2",
            "md5": "ab55cceea548303c22c72570cfd4dd71",
            "name": "ps2_scph30000_0427.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:81"
          },
          {
            "description": "PS2, SCPH-30001R (v5.0 07/04/01 A)",
            "fast_boot": "Type2",
            "md5": "18bcaadb9ff74ed3add26cdf709fff2e",
            "name": "ps2_scph30001r_0704.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:82"
          },
          {
            "description": "PS2, SCPH-30002R/SCPH-30003R/SCPH-30004R (v5.0 07/04/01 E)",
            "fast_boot": "Type2",
            "md5": "491209dd815ceee9de02dbbc408c06d6",
            "name": "ps2_scph30002r_0704.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:83"
          },
          {
            "description": "PS2, SCPH-30001R (v5.0 10/04/01 A)",
            "fast_boot": "Type2",
            "md5": "7200a03d51cacc4c14fcdfdbc4898431",
            "name": "ps2_scph30001r_1004.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:84"
          },
          {
            "description": "PS2, SCPH-30002R/SCPH-30003R/SCPH-30004R (v5.0 10/04/01 E)",
            "fast_boot": "Type2",
            "md5": "8359638e857c8bc18c3c18ac17d9cc3c",
            "name": "ps2_scph30002r_1004.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:85"
          },
          {
            "description": "PS2, SCPH-30005R/SCPH-30006R/SCPH-30007R (v5.0 07/30/01 J)",
            "fast_boot": "Type2",
            "md5": "352d2ff9b3f68be7e6fa7e6dd8389346",
            "name": "ps2_scph30005r.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:86"
          },
          {
            "description": "PS2, SCPH-39001 (v5.0 02/07/02 A)",
            "fast_boot": "Type2",
            "md5": "d5ce2c7d119f563ce04bc04dbc3a323e",
            "name": "ps2_scph39001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:87"
          },
          {
            "description": "PS2, SCPH-39002/SCPH-39003/SCPH-39004 (v5.0 03/19/02 E)",
            "fast_boot": "Type2",
            "md5": "0d2228e6fd4fb639c9c39d077a9ec10c",
            "name": "ps2_scph39002.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:88"
          },
          {
            "description": "PS2, SCPH-37000/SCPH-39000 (v5.0 04/26/02 J)",
            "fast_boot": "Type2",
            "md5": "72da56fccb8fcd77bba16d1b6f479914",
            "name": "ps2_scph37000_39000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:89"
          },
          {
            "description": "PS2, SCPH-39008 (v5.0 04/26/02 E)",
            "fast_boot": "Type2",
            "md5": "5b1f47fbeb277c6be2fccdd6344ff2fd",
            "name": "ps2_scph39008.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:90"
          },
          {
            "description": "PS2, SCPH-39005/SCPH-39006/SCPH-39007 (v5.0 04/26/02 J)",
            "fast_boot": "Type2",
            "md5": "315a4003535dfda689752cb25f24785c",
            "name": "ps2_scph39005.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:91"
          },
          {
            "description": "PS2, DTL-H50000 (v5.0 02/06/03 J)",
            "fast_boot": "Type2",
            "md5": "54ecde087258557e2ddb5c3ddb004028",
            "name": "ps2_dtlh50000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:92"
          },
          {
            "description": "PS2, SCPH-50000/SCPH-55000 (v5.0 02/06/03 J)",
            "fast_boot": "Type2",
            "md5": "312ad4816c232a9606e56f946bc0678a",
            "name": "ps2_scph50000_55000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:93"
          },
          {
            "description": "PS2, DTL-H50002 (v5.0 02/27/03 E)",
            "fast_boot": "Type2",
            "md5": "666018ffec65c5c7e04796081295c6c7",
            "name": "ps2_dtlh50002.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:94"
          },
          {
            "description": "PS2, SCPH-50002/SCPH-50003/SCPH-50004 (v5.0 02/27/03 E)",
            "fast_boot": "Type2",
            "md5": "6e69920fa6eef8522a1d688a11e41bc6",
            "name": "ps2_scph50002_0227.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:95"
          },
          {
            "description": "PS2, DTL-H50001 (v5.0 03/25/03 A)",
            "fast_boot": "Type2",
            "md5": "eb960de68f0c0f7f9fa083e9f79d0360",
            "name": "ps2_dtlh50001_0325.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:96"
          },
          {
            "description": "PS2, SCPH-50001 (v5.0 03/25/03 A)",
            "fast_boot": "Type2",
            "md5": "8aa12ce243210128c5074552d3b86251",
            "name": "ps2_scph50001_0325.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:97"
          },
          {
            "description": "PS2, DTL-H50009 (v5.0 02/24/03 J)",
            "fast_boot": "Type2",
            "md5": "240d4c5ddd4b54069bdc4a3cd2faf99d",
            "name": "ps2_dtlh50009.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:98"
          },
          {
            "description": "PS2, DESR-5000/DESR-5100/DESR-7000/DESR-7100 (v5.0 10/28/03 J)",
            "fast_boot": "Type2",
            "md5": "1c6cd089e6c83da618fbf2a081eb4888",
            "name": "ps2_desr5000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:99"
          },
          {
            "description": "PS2, SCPH-55000 (v5.0 06/23/03 J)",
            "fast_boot": "Type2",
            "md5": "463d87789c555a4a7604e97d7db545d1",
            "name": "ps2_scph55000_0623.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:100"
          },
          {
            "description": "PS2, DTL-H50001 (v5.0 06/23/03 A)",
            "fast_boot": "Type2",
            "md5": "ab9d49ad40ae49f19856ad187777b1b3",
            "name": "ps2_dtlh50001_0623.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:101"
          },
          {
            "description": "PS2, SCPH-50001/SCPH-50010 (v5.0 06/23/03 A)",
            "fast_boot": "Type2",
            "md5": "35461cecaa51712b300b2d6798825048",
            "name": "ps2_scph50001_0623.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:102"
          },
          {
            "description": "PS2, SCPH-50002/SCPH-50003/SCPH-50004 (v5.0 06/23/03 E)",
            "fast_boot": "Type2",
            "md5": "bd6415094e1ce9e05daabe85de807666",
            "name": "ps2_scph50002_0623.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:103"
          },
          {
            "description": "PS2, SCPH-50006/SCPH-50007 (v5.0 06/23/03 J)",
            "fast_boot": "Type2",
            "md5": "2e70ad008d4ec8549aada8002fdf42fb",
            "name": "ps2_scph50006.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:104"
          },
          {
            "description": "PS2, SCPH-50005 (v5.0 06/23/03 J)",
            "fast_boot": "Type2",
            "md5": "50d5b97b57d8c9b6534adcb46c2027d4",
            "name": "ps2_scph50005.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:105"
          },
          {
            "description": "PS2, SCPH-50008 (v5.0 06/23/03 E)",
            "fast_boot": "Type2",
            "md5": "b53d51edc7fc086685e31b811dc32aad",
            "name": "ps2_scph50008.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:106"
          },
          {
            "description": "PS2, SCPH-50009 (v5.0 06/23/03 J)",
            "fast_boot": "Type2",
            "md5": "1b6e631b536247756287b916f9396872",
            "name": "ps2_scph50009.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:107"
          },
          {
            "description": "PS2, SCPH-50000 (v5.0 08/22/03 J)",
            "fast_boot": "Type2",
            "md5": "00da1b177096cfd2532c8fa22b43e667",
            "name": "ps2_scph50000_0822.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:108"
          },
          {
            "description": "PS2, SCPH-50004 (v5.0 08/22/03 E)",
            "fast_boot": "Type2",
            "md5": "afde410bd026c16be605a1ae4bd651fd",
            "name": "ps2_scph50004_0822.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:109"
          },
          {
            "description": "PS2, SCPH-50011 (v5.0 03/29/04 A)",
            "fast_boot": "Type2",
            "md5": "81f4336c1de607dd0865011c0447052e",
            "name": "ps2_scph50011.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:110"
          },
          {
            "description": "PS2, SCPH-70000 (v5.0 06/14/04 J)",
            "fast_boot": "Type2",
            "md5": "0eee5d1c779aa50e94edd168b4ebf42e",
            "name": "ps2_scph70000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:111"
          },
          {
            "description": "PS2, SCPH-70001/SCPH-70011/SCPH-70012 (v5.0 06/14/04 A)",
            "fast_boot": "Type2",
            "md5": "d333558cc14561c1fdc334c75d5f37b7",
            "name": "ps2_scph70001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:112"
          },
          {
            "description": "PS2, SCPH-70002/SCPH-70003/SCPH-70004/SCPH-70008 (v5.0 06/14/04 E)",
            "fast_boot": "Type2",
            "md5": "dc752f160044f2ed5fc1f4964db2a095",
            "name": "ps2_scph70002.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:113"
          },
          {
            "description": "PS2, SCPH-70002 (v5.0 06/14/04 E)",
            "fast_boot": "Type2",
            "md5": "7ebb4fc5eab6f79a27d76ac9aad392b2",
            "name": "ps2_scph70002_alt.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:114"
          },
          {
            "description": "PS2, DTL-H70002 (v5.0 06/14/04 E)",
            "fast_boot": "Type2",
            "md5": "63ead1d74893bf7f36880af81f68a82d",
            "name": "ps2_dtlh70002.bin",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:115"
          },
          {
            "description": "PS2, SCPH-70005/SCPH-70006/SCPH-70007 (v5.0 06/14/04 J)",
            "fast_boot": "Type2",
            "md5": "3e3e030c0f600442fa05b94f87a1e238",
            "name": "ps2_scph70005.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:116"
          },
          {
            "description": "PS2, DESR-5500/DESR-5700/DESR-7500/DESR-7700 (v5.0 09/17/04 J)",
            "fast_boot": "Type2",
            "md5": "1ad977bb539fc9448a08ab276a836bbc",
            "name": "ps2_desr5500.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:117"
          },
          {
            "description": "PS2, DTL-H75000 (v5.0 06/20/05 J)",
            "fast_boot": "Type2",
            "md5": "bf0078ba5e19d57eae18047407f3b6e5",
            "name": "ps2_dtlh75000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:118"
          },
          {
            "description": "PS2, SCPH-75000 (v5.0 06/20/05 J)",
            "fast_boot": "Type2",
            "md5": "eb4f40fcf4911ede39c1bbfe91e7a89a",
            "name": "ps2_scph75000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:119"
          },
          {
            "description": "PS2, DTL-H75000A (v5.0 06/20/05 A)",
            "fast_boot": "Type2",
            "md5": "9959ad7a8685cad66206e7752ca23f8b",
            "name": "ps2_dtlh75000a.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:120"
          },
          {
            "description": "PS2, SCPH-75001/SCPH-75010 (v5.0 06/20/05 A)",
            "fast_boot": "Type2",
            "md5": "929a14baca1776b00869f983aa6e14d2",
            "name": "ps2_scph75001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:121"
          },
          {
            "description": "PS2, SCPH-75002/SCPH-75003/SCPH-75004/SCPH-75008 (v5.0 06/20/05 E)",
            "fast_boot": "Type2",
            "md5": "573f7d4a430c32b3cc0fd0c41e104bbd",
            "name": "ps2_scph75002.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:122"
          },
          {
            "description": "PS2, SCPH-75006 (v5.0 06/20/05 J)",
            "fast_boot": "Type2",
            "md5": "df63a604e8bff5b0599bd1a6c2721bd0",
            "name": "ps2_scph75006.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:123"
          },
          {
            "description": "PS2, SCPH-77000 (v5.0 02/10/06 J)",
            "fast_boot": "Type2",
            "md5": "5b1ba4bb914406fae75ab8e38901684d",
            "name": "ps2_scph77000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:124"
          },
          {
            "description": "PS2, SCPH-77001/SCPH-77010 (v5.0 02/10/06 A)",
            "fast_boot": "Type2",
            "md5": "cb801b7920a7d536ba07b6534d2433ca",
            "name": "ps2_scph77001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:125"
          },
          {
            "description": "PS2, SCPH-77002/SCPH-77003/SCPH-77004/SCPH-77008 (v5.0 02/10/06 E)",
            "fast_boot": "Type2",
            "md5": "af60e6d1a939019d55e5b330d24b1c25",
            "name": "ps2_scph77002.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:126"
          },
          {
            "description": "PS2, SCPH-77006/SCPH-77007 (v5.0 02/10/06 J)",
            "fast_boot": "Type2",
            "md5": "549a66d0c698635ca9fa3ab012da7129",
            "name": "ps2_scph77006.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:127"
          },
          {
            "description": "PS2, DTL-H90000 (v5.0 09/05/06 J)",
            "fast_boot": "Type2",
            "md5": "5e2014472c88f74f7547d8c2c60eca45",
            "name": "ps2_dtlh90000_j.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:128"
          },
          {
            "description": "PS2, SCPH-79000/SCPH-90000 (v5.0 09/05/06 J)",
            "fast_boot": "Type2",
            "md5": "5de9d0d730ff1e7ad122806335332524",
            "name": "ps2_scph79000_90000.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:129"
          },
          {
            "description": "PS2, DTL-H90000 (v5.0 09/05/06 A)",
            "fast_boot": "Type2",
            "md5": "21fe4cad111f7dc0f9af29477057f88d",
            "name": "ps2_dtlh90000_a.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:130"
          },
          {
            "description": "PS2, SCPH-79001/SCPH-79010/SCPH-90001 (v5.0 09/05/06 A)",
            "fast_boot": "Type2",
            "md5": "40c11c063b3b9409aa5e4058e984e30c",
            "name": "ps2_scph79001_90001.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:131"
          },
          {
            "description": "PS2, SCPH-79002/SCPH-79003/SCPH-79004/SCPH-79008/SCPH-90002/SCPH-90003/SCPH-90004 (v5.0 09/05/06 E)",
            "fast_boot": "Type2",
            "md5": "80bbb237a6af9c611df43b16b930b683",
            "name": "ps2_scph79002_90002.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:132"
          },
          {
            "description": "PS2, SCPH-79006/SCPH-79007/SCPH-90006/SCPH-90007 (v5.0 09/05/06 J)",
            "fast_boot": "Type2",
            "md5": "c37bce95d32b2be480f87dd32704e664",
            "name": "ps2_scph79006_90006.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:133"
          },
          {
            "description": "PS2, SCPH-90000 (v5.0 02/20/08 J)",
            "fast_boot": "Type2",
            "md5": "80ac46fa7e77b8ab4366e86948e54f83",
            "name": "ps2_scph90000_0220.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:134"
          },
          {
            "description": "PS2, SCPH-90001/SCPH-90010 (v5.0 02/20/08 A)",
            "fast_boot": "Type2",
            "md5": "21038400dc633070a78ad53090c53017",
            "name": "ps2_scph90001_0220.bin",
            "priority": 100,
            "region": [
              "north-america"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:135"
          },
          {
            "description": "PS2, SCPH-90002/SCPH-90003/SCPH-90004/SCPH-90008 (v5.0 02/20/08 E)",
            "fast_boot": "Type2",
            "md5": "dc69f0643a3030aaa4797501b483d6c4",
            "name": "ps2_scph90002_0220.bin",
            "priority": 100,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:136"
          },
          {
            "description": "PS2, SCPH-90005/SCPH-90006/SCPH-90007 (v5.0 02/20/08 J)",
            "fast_boot": "Type2",
            "md5": "30d56e79d89fbddf10938fa67fe3f34e",
            "name": "ps2_scph90005_0220.bin",
            "priority": 100,
            "region": [
              "japan"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:137"
          },
          {
            "description": "PS2, KDL-22PX300 (v5.0 04/15/10 E)",
            "fast_boot": "Type2",
            "md5": "93ea3bcee4252627919175ff1b16a1d9",
            "name": "ps2_kdl22px300.bin",
            "note": "Sony Bravia TV with embedded PS2",
            "priority": 150,
            "region": [
              "europe"
            ],
            "region_check": true,
            "required": false,
            "source_ref": "src/core/bios.cpp:138"
          },
          {
            "description": "OpenBIOS",
            "fast_boot": "unsupported",
            "md5": null,
            "name": "openbios.bin",
            "note": "Detected by 'OpenBIOS' signature at offset 0x78, not by MD5 hash",
            "priority": 200,
            "region": [
              "world"
            ],
            "region_check": false,
            "required": false,
            "source_ref": "src/core/bios.cpp:144-146"
          }
        ],
        "logo": "https://raw.githubusercontent.com/stenzek/duckstation/master/data/resources/images/duck.png",
        "notes": "DuckStation auto-detects BIOS by MD5 hash from a flat scan of the BIOS directory.\nref: src/core/bios.cpp:460-482 (FindBIOSImagesInDirectory — scans all files by size)\nref: src/core/bios.cpp:208 (MD5Digest::HashData identification)\n\nAccepts PS1 (512 KB), PS2 (4 MB), and PS3 (0x3E66F0) BIOS images.\nref: src/core/bios.h:24-26 (BIOS_SIZE, BIOS_SIZE_PS2, BIOS_SIZE_PS3)\nOnly the first 512 KB are mapped (bios.cpp:212).\n\n105 known BIOS entries: 24 PS1 + 80 PS2 (identified by MD5) + 1 OpenBIOS (by signature).\nref: src/core/bios.cpp:34-139 (s_image_info_by_hash)\nEach image has: region, region_check, fast_boot_patch type, priority score.\n\nImageInfo gained a version and an expected_filename field after the previous\nprofiling pass. Neither takes part in identification: expected_filename is read\nonly by the two settings screens, which fall back to the real filename when it\nis null.\nref: src/core/bios.h:41-43 (field declarations)\nref: src/duckstation-qt/biossettingswidget.cpp:150, src/core/fullscreenui_settings.cpp:3219\nLower priority = preferred. PS2 deprioritized (>= 100) for dynamic fast boot.\nLate PAL deprioritized (>= 150) due to additional regional checks.\nOpenBIOS detected by signature at offset 0x78, not by hash.\nref: src/core/bios.cpp:142-147\n\nStandalone: BIOS dir = EmuFolders::Bios (configurable, default bios/).\nref: src/core/bios.cpp:375,380\nLibretro: BIOS dir = RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (flat).\nThe libretro core was removed by the author (license change to non-commercial).\nThe .info file and buildbot builds still exist from community forks.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/stenzek/duckstation",
        "source_commit": "6f704d405b2374a35944d85e330452e4c3cbc08b",
        "systems": [
          "sony-playstation"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/stenzek/duckstation",
        "verification": "md5"
      }
    },
    {
      "id": "easyrpg",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.8.1.0",
        "cores": [
          "easyrpg"
        ],
        "display_name": "RPG Maker 2000/2003 (EasyRPG)",
        "emulator": "EasyRPG Player",
        "files": [
          {
            "category": "game_data",
            "hle_fallback": true,
            "name": "easyrpg.soundfont",
            "note": "General MIDI soundfont (SF2 format) for MIDI music playback. Many RPG Maker games use MIDI for background music. Without a soundfont, MIDI falls back to the built-in FmMidi synthesizer (lower quality). Any GM-compatible .sf2 works.\n",
            "path": "easyrpg.soundfont",
            "required": false,
            "source_ref": "src/decoder_fluidsynth.cpp:125"
          },
          {
            "category": "game_data",
            "hle_fallback": true,
            "name": "wildmidi.cfg",
            "note": "WildMidi configuration file pointing to GUS patch sets for MIDI playback. Alternative to FluidSynth/SF2. Only used if WildMidi support is compiled in and FluidSynth is not available or disabled.\n",
            "path": "wildmidi.cfg",
            "required": false,
            "source_ref": "src/decoder_wildmidi.cpp:103-104"
          },
          {
            "category": "game_data",
            "name": "RPG Maker 2000 RTP",
            "note": "Run-Time Package for RPG Maker 2000 games. Contains default tilesets, character sprites, battle animations, music, and sound effects. Only needed by games that reference RTP assets instead of bundling them. Multiple RTP variants exist (Japanese official, English official, Don Miguel English translation). EasyRPG auto-detects which variant a game expects.\n",
            "path": "rtp/2000/",
            "required": false,
            "source_ref": "src/filefinder_rtp.cpp:73-74",
            "type": "directory"
          },
          {
            "category": "game_data",
            "name": "RPG Maker 2003 RTP",
            "note": "Run-Time Package for RPG Maker 2003 games. Same concept as the 2000 RTP but with additional battle system assets for the side-view ATB combat. Multiple variants exist (Japanese official, English official, RPG Advocate English, Vlad Russian, Korean, Traditional Chinese).\n",
            "path": "rtp/2003/",
            "required": false,
            "source_ref": "src/filefinder_rtp.cpp:73-74",
            "type": "directory"
          }
        ],
        "notes": "No BIOS or firmware required. All files listed below are optional runtime\ndata that improve compatibility and audio quality.\n\nRTP (Run-Time Package) contains default assets (sprites, music, sound effects)\nshared by many RPG Maker games. Games that ship all their own assets do not\nneed it. The RPG Maker 2000 and 2003 RTPs are separate packages. EasyRPG\nalso supports translated/third-party RTP variants (Don Miguel, Kadokawa,\nEnterbrain, RPG Advocate, etc.) and auto-detects which one a game uses.\n\nFor MIDI music, a General MIDI soundfont in SF2 format is needed. Place it\nas easyrpg.soundfont in the system directory, or put any .sf2 file in\neasyrpg-player/Soundfont/ and select it from the core settings menu.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/easyrpg-libretro",
        "source_commit": "03dda252dae0a133181e1c61b77d68c8feb9412d",
        "systems": [
          "rpgmaker"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/EasyRPG/Player"
      }
    },
    {
      "id": "ecwolf",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.3.99999",
        "cores": [
          "ecwolf"
        ],
        "display_name": "Wolfenstein 3D (ECWolf)",
        "emulator": "ECWolf",
        "files": [
          {
            "description": "ECWolf engine data package",
            "md5": "c011b428819eea4a80b455c245a5a04d",
            "mode": "standalone",
            "name": "ecwolf.pk3",
            "note": "Built from wadsrc/static/ via zipdir. Contains IWADINFO (game detection rules), palettes (wolfpal, spearpal, blakepal, noahpal), map lump remappers (wl6map, sodmap, etc.), DECORATE actor definitions, MAPINFO, SNDINFO, SNDSEQ, textures, sprites, fonts, and localization strings. md5 from .info, not validated by code.\n",
            "required": true,
            "source_ref": "src/version.h:12 (MAIN_PK3), src/wl_iwad.cpp:664-672 (embedded open + fatal)"
          }
        ],
        "notes": "Wolfenstein 3D source port by Braden Obrzut. Plays Wolf3D (wl6/wl1),\nSpear of Destiny (sod/sdm), Super 3D Noah's Ark (n3d), and community pk3 mods.\nBlake Stone and Rise of the Triad support flagged as Preview in upstream.\n\nRequires ecwolf.pk3 — engine data package built from wadsrc/static/.\nContains IWADINFO (game detection rules), palettes, sprites, map configs,\nDECORATE actor definitions, MAPINFO, SNDINFO, fonts, and localization strings.\nWithout this file: \"Could not open ecwolf.pk3!\" fatal error.\n\nLibretro no longer reads ecwolf.pk3 from disk: it is compiled into the core as\na byte array and opened through a MemoryReader, with a fatal error naming it\n\"embedded\" when that fails. The system directory is still passed to SelectGame,\nbut for the game data search, not for the engine package.\nref: src/libretro/ecwolf_pk3_data.c, src/wl_iwad.cpp:664-672,\nsrc/libretro/libretro.cpp:990-992\n\nStandalone: ecwolf.pk3 searched in progdir (binary directory).\nref: wl_main.cpp:1295 (progdir passed to SelectGame)\nAlso: INSTALL_PREFIX/share/ecwolf/ on Linux (wl_iwad.cpp:648)\n\nGame data files (vswap, gamemaps, vgagraph, audiot) loaded from content\ndirectory, not system directory. Auto-detects game variant by scanning\nlump contents against IWADINFO MustContain rules.\n\nLibretro fork based on ECWolf 1.3.99999-dev (forked 2020-02-23).\nUpstream head at 1.5.0pre with broader game support.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/ecwolf",
        "source_commit": "f5a68634244c8719645626ef714387b268a5ae32",
        "systems": [
          "wolfenstein3d"
        ],
        "type": "standalone + libretro",
        "upstream": "https://bitbucket.org/ecwolf/ecwolf"
      }
    },
    {
      "id": "eden",
      "profile": {
        "analysis_commit": "9347202 (depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "community_fork",
        "core_version": "0.1.1",
        "cores": [
          "eden"
        ],
        "display_name": "Eden (Nintendo Switch)",
        "emulator": "Eden",
        "files": [
          {
            "mode": "standalone",
            "name": "prod.keys",
            "note": "Production keys for NCA decryption (master, key area, header, titlekek)",
            "path": "switch/",
            "required": true,
            "source_ref": "src/core/crypto/key_manager.cpp:574-575, 853"
          },
          {
            "mode": "standalone",
            "name": "dev.keys",
            "note": "Development-unit keys, read instead of prod.keys when use_dev_keys is set",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:570-571, 852"
          },
          {
            "mode": "standalone",
            "name": "title.keys",
            "note": "Per-title encryption keys (rights_id to titlekey mappings)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:577-578, 850"
          },
          {
            "mode": "standalone",
            "name": "console.keys",
            "note": "Console-specific keys (BIS, SD seed)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:579-580"
          },
          {
            "mode": "standalone",
            "name": "key_retail.bin",
            "note": "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)",
            "path": "switch/",
            "required": false,
            "size": 160,
            "source_ref": "src/core/hle/service/nfc/common/amiibo_crypto.cpp:281-302"
          }
        ],
        "mode": "standalone",
        "notes": "Eden is a standalone Nintendo Switch emulator, community fork of yuzu by Camille LaVey.\nFirmware (system NCAs) must be installed through Eden's UI from a firmware ZIP or NCA folder.\nRequired for commercial games. Homebrew (.nro, .nso) can run without keys or firmware.\n",
        "profiled_date": "2026-03-26",
        "source": "https://git.eden-emu.dev/eden-emu/eden",
        "source_commit": "c0ffc900cdf19b9373549c59a7e6b22c33615ea4",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://git.eden-emu.dev/eden-emu/eden"
      }
    },
    {
      "id": "eden-nightly",
      "profile": {
        "alias_of": "eden",
        "core_classification": "alias",
        "core_version": "Git",
        "cores": [
          "eden-nightly"
        ],
        "display_name": "Eden Nightly (Nintendo Switch)",
        "emulator": "Eden Nightly",
        "files": [],
        "note": "Same tree as eden, built from master with the gradle property nightly=true\n(src/android/app/build.gradle.kts:41-42). The property sets applicationIdSuffix\n\".nightly\" (:139) and passes -DNIGHTLY_BUILD=ON -DENABLE_UPDATE_CHECKER=ON (:95-99).\n\nNIGHTLY_BUILD points the update feed at nightly.eden-emu.dev, repo eden-ci/nightly,\ninstead of stable.eden-emu.dev, repo eden-emu/eden\n(CMakeModules/GenerateSCMRev.cmake:43-52), splits the release tag on \".\" before the\nversion compare (src/common/net/net.cpp:27-35,\nsrc/frontend_common/update_checker.cpp:26-43), sets the g_is_nightly_build constant\n(src/common/scm_rev.cpp.in:28,45) and exposes NativeLibrary.isNightlyBuild\n(src/android/app/src/main/jni/native.cpp:1703-1711). No file loading path differs,\nso the keys are those of eden.\n\nNightly builds carry no release tag: getGitVersion() returns git describe\n(build.gradle.kts:368-383) and GenerateSCMRev.cmake:22-24 marks the result a dev build.\n\nThe android package ids are the three product flavors plus the suffix:\ndev.eden.eden_emulator.nightly (build.gradle.kts:67),\ncom.miHoYo.Yuanshen.nightly (:206), dev.legacy.eden_emulator.nightly (:224).\n",
        "profiled_date": "2026-08-11",
        "source": "https://git.eden-emu.dev/eden-emu/eden",
        "source_commit": "8648c27cbb4c17b176076b09ac245271829cbd9f",
        "systems": [
          "nintendo-switch"
        ],
        "type": "alias",
        "upstream": "https://git.eden-emu.dev/eden-emu/eden"
      }
    },
    {
      "id": "eka2l1",
      "profile": {
        "analysis_commit": "e67f84d (depth=1)",
        "analysis_date": "2026-03-26",
        "core_version": "continuous",
        "cores": [
          "eka2l1"
        ],
        "display_name": "EKA2L1 (Symbian OS / N-Gage)",
        "emulator": "eka2l1",
        "files": [
          {
            "description": "Symbian OS phone ROM dump. One per device, placed in roms/{firmware_code}/ subdirectory.",
            "mode": "standalone",
            "name": "SYM.ROM",
            "required": true,
            "source_ref": "src/emu/system/src/epoc.cpp:1225,754-759, src/emu/system/include/system/consts.h:23-25"
          }
        ],
        "mode": "standalone",
        "notes": "Pure standalone Symbian OS / N-Gage emulator. No libretro core.\nRequires phone ROM dumps (SYM.ROM) obtained from real Nokia devices.\nThe emulator supports 100+ Nokia phone models (NEM-4, RH-29, RM-409, etc.).\nNo hash or size validation on the ROM file; the loader parses the ROM structure.\nBatocera maps the ngage system to eka2l1 in configgen-defaults.yml.\nNo dedicated Batocera configgen generator exists.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/EKA2L1/EKA2L1",
        "source_commit": "46ef1ebdcfbd7454c080d0f1efb5fb54cfa7f622",
        "systems": [
          "ngage"
        ],
        "type": "standalone",
        "upstream": "https://github.com/EKA2L1/EKA2L1"
      }
    },
    {
      "id": "emucorev",
      "profile": {
        "author": "Oleksandr (sashkinbro)",
        "core_classification": "community_fork",
        "core_version": "0.1.8",
        "cores": [
          "emucorev"
        ],
        "display_name": "Sony - PlayStation Vita (EmuCoreV)",
        "emulator": "EmuCoreV",
        "exclusion_note": "Left out are the files EmuCoreV writes and reads back, which are emulator state rather than system files: config.yml and the per-title custom configs, the shader and texture caches under cache, savedata and users under ux0, the TROPUSR.DAT trophy progress, play_time.json, the settings backup JSON and the driver_name.txt the driver installer writes. Left out with them are the static assets of Vita3K, which on Android are read from inside the package and never exist on the filesystem: the built-in shaders, the ImGui fonts and images, and the language files. ref: app/src/main/cpp/vita3k/vita3k/app/src/app_init.cpp:244-256,\n     app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:122-148,\n     app/src/main/java/com/sbro/emucorev/core/GpuDriverManager.kt:90,\n     app/src/main/cpp/vita3k/vita3k/np/src/trophy/collection.cpp:95\n",
        "files": [
          {
            "description": "PS Vita system software update package",
            "md5": "f2c7b12fe85496ec88a0391b514d6e3b",
            "name": "PSVUPDAT.PUP",
            "note": "Base firmware, pinned to 3.74 by a hardcoded URL whose rel_ segment is the MD5 of the package. Downloaded on demand to firmware-downloads under the external files directory, or picked from anywhere through the file picker, then consumed by install_pup, which extracts whichever of os0, vs0, pd0 and sa0 the package carries. This one is what fills vs0, and the app refuses to start a title while vs0 is empty.",
            "required": true,
            "source_ref": "app/src/main/java/com/sbro/emucorev/core/FirmwareSource.kt:17-23, app/src/main/java/com/sbro/emucorev/ui/onboarding/FirmwareDownloadViewModel.kt:96-105, app/src/main/java/com/sbro/emucorev/core/VitaInstallBridge.kt:25-36, app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:97-101, app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:292-299, app/src/main/java/com/sbro/emucorev/core/VitaLaunchBridge.kt:25-27",
            "storage": "large_file",
            "system": "sony-playstation-vita"
          },
          {
            "description": "PS Vita firmware font package",
            "md5": "59dcf059d3328fb67be7e51f8aa33418",
            "name": "PSP2UPDAT.PUP",
            "note": "Second package of the same 3.74 release, pinned by a URL whose sd_ segment is its MD5, and the one that fills sa0 with the PVF system fonts. Installed through the same path as the base package. The app refuses to start a title while sa0 is empty, and asks for it even though the overlay carries a system font fallback of its own.",
            "required": true,
            "source_ref": "app/src/main/java/com/sbro/emucorev/core/FirmwareSource.kt:25-31, app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:296-297, app/src/main/cpp/vita3k/vita3k/renderer/src/renderer.cpp:121-127, app/src/main/java/com/sbro/emucorev/core/VitaLaunchBridge.kt:28-30",
            "storage": "large_file",
            "system": "sony-playstation-vita"
          },
          {
            "category": "game_data",
            "description": "per-title compatibility ratings",
            "name": "app_compat_db.xml",
            "note": "Downloaded as app_compat_db.xml.zip from the Vita3K compatibility releases, unpacked into the compatibility directory of internal storage and parsed for the badges the library and catalog screens draw. The native side looks for the same filename in the cache directory at bootstrap and logs a warning when it finds none.",
            "path": "compatibility/app_compat_db.xml",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:18-20, app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:54-107, app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:346-350, app/src/main/cpp/vita3k/vita3k/android/jni/native_bootstrap.cpp:122, app/src/main/cpp/vita3k/vita3k/compat/src/compat.cpp:127-150",
            "system": "sony-playstation-vita"
          },
          {
            "category": "game_data",
            "description": "commercial title index",
            "name": "commercial_list.json",
            "note": "Fetched from the Vita3K web API and merged over the XML snapshot, so a title the database does not carry still resolves. Read only when the file is present and not empty.",
            "path": "compatibility/commercial_list.json",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:20, app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:69-73, app/src/main/java/com/sbro/emucorev/data/VitaCompatibilityRepository.kt:349",
            "system": "sony-playstation-vita"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "bundled catalog of Vita titles",
            "name": "psvita_games.db",
            "note": "SQLite catalog carried in the package assets and copied into internal storage the first time the catalog screen opens, then reopened read only from there. A copy already present is kept.",
            "path": "psvita_games.db",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorev/data/VitaCatalogRepository.kt:8-9, app/src/main/java/com/sbro/emucorev/data/VitaCatalogRepository.kt:276-292",
            "system": "sony-playstation-vita"
          },
          {
            "category": "game_data",
            "description": "taiHEN plugin configuration",
            "name": "config.txt",
            "note": "Read once per session from ux0:tai/config.txt, then from ur0:tai/config.txt when the first is absent. Sections name a title id or KERNEL and list the plugin paths loaded for it. No file found is logged and the session continues.",
            "path": "vita/ux0/tai/config.txt",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/modules/taiHEN/taiHEN.cpp:1253-1272, app/src/main/cpp/vita3k/vita3k/interface.cpp:535",
            "system": "sony-playstation-vita",
            "unsourceable": "plugin list the user writes for their own titles"
          },
          {
            "category": "game_data",
            "description": "taiHEN plugin",
            "name": "<plugin>.suprx",
            "note": "Loaded at the path config.txt gives it, kernel plugins once per session and title plugins on each launch of the matching title id. A plugin that fails to load is logged and skipped. Exports of a loaded plugin that already have an HLE implementation are overridden by it.",
            "path": "vita/ux0/tai/<plugin>.suprx",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/modules/taiHEN/taiHEN.cpp:1362-1405, app/src/main/cpp/vita3k/vita3k/modules/taiHEN/taiHEN.cpp:1306-1359",
            "system": "sony-playstation-vita",
            "unsourceable": "homebrew plugin built against taiHEN, chosen per collection"
          },
          {
            "category": "game_data",
            "description": "per-title binary patch list",
            "name": "<TITLEID>.txt",
            "note": "The patch directory is scanned at module load and any filename holding the running title id and ending in .txt is parsed. A bracketed header names the binary the lines under it apply to, eboot.bin until one says otherwise, and each line is a segment and an offset followed by the values written there. A line that fails to parse is logged and the rest of the file is kept.",
            "path": "patch/<TITLEID>.txt",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/patch/src/patch.cpp:26-70, app/src/main/cpp/vita3k/vita3k/patch/src/patch.cpp:77-90, app/src/main/cpp/vita3k/vita3k/patch/src/util.cpp:24-50, app/src/main/cpp/vita3k/vita3k/interface.cpp:482-484",
            "system": "sony-playstation-vita",
            "unsourceable": "patch list authored per title, with no released artefact behind it"
          },
          {
            "category": "game_data",
            "description": "shared binary patch list",
            "name": "PATCHLIST.TXT",
            "note": "Read alongside the per-title files whatever the running title is, the name matched case insensitively as a substring. Its headers take a title id and an optional binary, so one file holds patches for several titles, and the lines under a header for another title are skipped.",
            "path": "patch/PATCHLIST.TXT",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/patch/src/patch.cpp:30-37, app/src/main/cpp/vita3k/vita3k/patch/src/patch.cpp:57-59, app/src/main/cpp/vita3k/vita3k/patch/src/util.cpp:30-38",
            "system": "sony-playstation-vita"
          },
          {
            "category": "game_data",
            "description": "replacement texture",
            "name": "<hash>.png",
            "note": "Read when the import textures option is on. The import folder is walked recursively and a file counts only when its name parses as a hexadecimal hash, which is the key the texture cache looks it up by.",
            "path": "textures/import/<TITLEID>/<hash>.png",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/renderer/src/texture/cache.cpp:312-315, app/src/main/cpp/vita3k/vita3k/renderer/src/texture/replacement.cpp:607-630, app/src/main/java/com/sbro/emucorev/core/VitaCoreConfigRepository.kt:30, app/src/main/java/com/sbro/emucorev/core/VitaCoreConfigRepository.kt:262",
            "system": "sony-playstation-vita",
            "unsourceable": "replacement artwork authored against the texture hashes of one title"
          },
          {
            "category": "game_data",
            "description": "replacement texture, compressed",
            "name": "<hash>.dds",
            "note": "Same folder and same hash naming as the png form, taken as a DDS instead and used for the block compressed formats.",
            "path": "textures/import/<TITLEID>/<hash>.dds",
            "required": false,
            "source_ref": "app/src/main/cpp/vita3k/vita3k/renderer/src/texture/replacement.cpp:624-629",
            "system": "sony-playstation-vita",
            "unsourceable": "replacement artwork authored against the texture hashes of one title"
          },
          {
            "description": "replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Listed by a catalog fetched from the EmuCoreV-Drivers repository, or picked from the device. The archive is unpacked into a directory named after it under driver in internal storage, the Vulkan library it holds is recorded in a driver_name.txt written beside it, libvulkan.so taken first and any other name carrying vulkan after it, and the renderer resolves vkGetInstanceProcAddr through adrenotools from that pair before the Vulkan instance is created. The system loader is used when no driver is configured or the injection fails. The setting is shown only when the device strings name Qualcomm hardware, or match an sm model with no other vendor named.",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorev/core/GpuDriverCatalogRepository.kt:45-78, app/src/main/java/com/sbro/emucorev/core/GpuDriverCatalogRepository.kt:130-136, app/src/main/java/com/sbro/emucorev/core/GpuDriverManager.kt:52-125, app/src/main/java/com/sbro/emucorev/core/GpuDriverManager.kt:136-171, app/src/main/java/com/sbro/emucorev/ui/settings/SettingsTabContent.kt:215, app/src/main/cpp/vita3k/vita3k/util/src/android_driver.cpp:202-215, app/src/main/cpp/vita3k/vita3k/util/src/android_driver.cpp:362-380, app/src/main/cpp/vita3k/vita3k/renderer/src/vulkan/renderer.cpp:371-387, app/src/main/cpp/vita3k/vita3k/renderer/src/vulkan/renderer.cpp:569-578",
            "system": "sony-playstation-vita",
            "unsourceable": "Vulkan driver built for one Adreno family, not an emulator artefact"
          },
          {
            "category": "game_data",
            "description": "title license",
            "name": "work.bin",
            "note": "A picked file named work.bin, or carrying the .rif or .bin extension, is read as a license, checked for its magic and copied under ux0:license as <content id>.rif. A PKG install with no zRIF given reads the license already sitting there for that content id and derives one from it. A missing or corrupt license is logged and the retail livearea path is used instead.",
            "path": "vita/ux0/license/<TITLEID>/<CONTENTID>.rif",
            "required": false,
            "source_ref": "app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:122-124, app/src/main/cpp/vita3k/vita3k/packages/src/license.cpp:53-84, app/src/main/cpp/vita3k/vita3k/packages/src/license.cpp:99-106, app/src/main/cpp/vita3k/vita3k/packages/src/pkg.cpp:356-376",
            "system": "sony-playstation-vita",
            "unsourceable": "NpDrm license issued for one copy of one title"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation Vita emulator for Android, package com.sbro.emucorev, arm64-v8a\nonly. A Kotlin and Compose front end drives a Vita3K tree vendored verbatim\nunder app/src/main/cpp/vita3k, reached through an adapter layer that owns\nevery JNI entry point. Frontends start the exported activity\ncom.sbro.emucorev.core.vita.Emulator with an AppStartParameters string array;\nES-DE passes -r followed by the title id read from the .psvita file.\nref: app/src/main/cpp/emucorev/README.md:1-13,\n     app/src/main/AndroidManifest.xml:85-101,\n     app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:128,\n     app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:140-152,\n     app/build.gradle.kts:85-86, app/build.gradle.kts:95\n\nThe Android library is built from the JNI sources plus interface.cpp and\nperformance.cpp, and links app, audio, compat, config, cppcommon, ctrl,\ndialog, display, ime, lang, gdbstub, gxm, io, miniz, modules, motion,\npackages, patch, renderer, shader, touch, util and psvpfsparser, with overlay\nand np arriving through renderer and modules. The ImGui front end under\nvita3k/gui is never added as\na subdirectory, gui-qt is desktop only, and the adapter drops those two and\nupdater from the link line as well when a configuration defines them. So the\nhome screen, live area, themes, trophy collection, user avatars and the pd0\nbackground music player are not compiled: pd0 is written by a firmware install\nand never read back, which is why no third preinst package is offered.\nref: app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:122-124,\n     app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:154-172,\n     app/src/main/cpp/vita3k/vita3k/CMakeLists.txt:212-215,\n     app/src/main/cpp/emucorev/cmake/AttachToVita3K.cmake:31,\n     app/src/main/cpp/emucorev/cmake/CoreTargetFilter.cmake:19-23\n\nFirmware installation calls vanilla install_pup. The file is tested for the\nSCEUF magic and nothing else, the SCE segments are decrypted with the built-in\nkeys, os0.img, pd0.img, sa0.img and vs0.img are joined from their pieces, and\neach image with content is extracted into the Vita filesystem root. The\nversion string is read from the version.txt the package carries. No digest and\nno length is compared.\nref: app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:86-102,\n     app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:119-123,\n     app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:239-258,\n     app/src/main/cpp/vita3k/vita3k/packages/src/pup.cpp:260-314\n\nTwo packages are named in code, both pinned to firmware 3.74 and fetched from\nSony. Each URL carries the MD5 of the package it serves in its rel_ and sd_\npath segment. The byte counts beside them feed the progress bar and its\nfallback alone, and one of the two is not the length of the file it names, so\nnothing measures what was downloaded.\nref: app/src/main/java/com/sbro/emucorev/core/FirmwareSource.kt:16-37,\n     app/src/main/java/com/sbro/emucorev/ui/onboarding/FirmwareDownloadViewModel.kt:96-124\n\nBoth packages are required. launchInstalledTitle returns MissingFirmware\nbefore doing any work when vita/vs0 holds no file, and MissingFirmwareUpdate\nwhen vita/sa0 holds no file, each with its own refusal string. The refusal is\nthe app's own: nothing in the vendored core tests either partition before a\nrun, and the only sa0 test in the tree sits in the front end that is not\ncompiled. The gate also sits in the in-app launcher alone, so a frontend\nstarting the activity itself, which is what ES-DE does, reaches the core\nwithout passing through it.\nref: app/src/main/java/com/sbro/emucorev/core/VitaLaunchBridge.kt:24-30,\n     app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:262-272,\n     app/src/main/java/com/sbro/emucorev/core/vita/Emulator.kt:140-152,\n     app/src/main/res/values/strings.xml:27-31,\n     app/src/main/res/values/strings.xml:710-711\n\nWhat the partitions are read for. Every launch queues os0:kd/bootimage.skprx\nand os0:kd/sysmodule.skprx, then for each preload module that is LLE takes\napp0:sce_module/<name>.suprx when the title carries one and\nvs0:sys/external/<name>.suprx otherwise. libc, libSceFt2, libpvf and libfiber\nare always LLE, alongside an automatic list of nineteen sysmodules, and a\nfailed module load is logged and stepped over. The overlay renderer registers\nsa0/data/font/pvf as the firmware font directory and asks it for the ltn, jpn,\ncn and kr faces by name, falling back to /system/fonts for its own text.\nref: app/src/main/cpp/vita3k/vita3k/interface.cpp:499-535,\n     app/src/main/cpp/vita3k/vita3k/module/src/load_module.cpp:142-161,\n     app/src/main/cpp/vita3k/vita3k/module/src/load_module.cpp:187-195,\n     app/src/main/cpp/vita3k/vita3k/renderer/src/renderer.cpp:114-127,\n     app/src/main/cpp/vita3k/vita3k/overlay/src/font.cpp:116-160,\n     app/src/main/cpp/vita3k/vita3k/overlay/src/font.cpp:174-234\n\nStorage. The Vita filesystem is a directory named vita under a storage root\nthe user can move to a card, holding ux0 and the partitions a firmware install\nwrites. Configuration, logs, patches, the texture folders and the cache stay\non internal storage. Static assets never reach the filesystem: on Android the\nstatic assets path is left empty and shaders, fonts and images are read out of\nthe package through SDL.\nref: app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:36-46,\n     app/src/main/java/com/sbro/emucorev/core/EmulatorStorage.kt:101-148,\n     app/src/main/cpp/vita3k/vita3k/app/src/app_init.cpp:244-256\n\nTitles arrive as VPK, ZIP, PKG or an already extracted directory, and a PKG\nneeds a zRIF that is either typed in or derived from a license already\ninstalled for that content id.\nref: app/src/main/cpp/emucorev/src/vita_install_bridge.cpp:104-197,\n     app/src/main/cpp/vita3k/vita3k/packages/src/pkg.cpp:356-376\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/sashkinbro/EmuCoreV",
        "source_commit": "b71d8cf5397b1c6394e92eeb48427cd17e542971",
        "systems": [
          "sony-playstation-vita"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Vita3K/Vita3K"
      }
    },
    {
      "id": "emucorex",
      "profile": {
        "author": "Oleksandr (sashkinbro)",
        "bios_directory": "bios/",
        "core_classification": "community_fork",
        "core_version": "0.3.3",
        "cores": [
          "emucorex"
        ],
        "display_name": "Sony - PlayStation 2 (EmuCoreX)",
        "emulator": "EmuCoreX",
        "exclusion_note": "Left out are the parts of the bundled resource tree that this platform compiles out. ImGuiManager::Initialize returns false before the ImGui context exists, so LoadFontData never runs and fonts/RobotoMono-Medium.ttf, fonts/fa-solid-900.ttf and fonts/promptfont.otf are never read; InitializeFullscreenUI returns false unconditionally, so FullscreenUI::Initialize never runs and nothing under fullscreenui or icons is loaded, cover-placeholder.png included. The DX11 and DX12 renderers sit in the Windows branch of the core CMakeLists, so shaders/dx11 is dead here. game_controller_db.txt has one consumer, Input/SDLInputSource.cpp, which the adapter removes from the target and replaces with a source that never opens it. The user resource override folder is only ever consulted by those same font and controller database reads, so it is dead with them. Left out with these are the app's other package assets, which are read through the asset manager and never reach the filesystem: catalog/rom_identity_index.json, catalog/rom_identity_overrides.json and catalog/pcsx2_compat_index.json. Left out too is what the emulator writes and reads back, which is state rather than system files: the inis, the per-game settings and input profiles, the memory cards, the save states, the snapshots, the shader and texture caches, the logs, the dumped textures, and the system-ca-bundle.pem the app exports from the Android trust store. The covers folder is inert: its only readers are the FullscreenUI game list and GameList::DownloadCovers, which has no caller, and the app runs its own cover cache. ref: app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:133-136,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:193-198,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:449-511,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/FullscreenUI.cpp:335,\n     app/src/main/cpp/pcsx2/pcsx2/CMakeLists.txt:691,\n     app/src/main/cpp/pcsx2/pcsx2/CMakeLists.txt:708-712,\n     app/src/main/cpp/pcsx2/pcsx2/Input/SDLInputSource.cpp:24,\n     app/src/main/cpp/ARM_ANDROID/CMakeLists.txt:239-243,\n     app/src/main/cpp/pcsx2/pcsx2/Pcsx2Config.cpp:2439-2446,\n     app/src/main/cpp/pcsx2/pcsx2/GameList.cpp:1336,\n     app/src/main/java/com/sbro/emucorex/data/ps2/Ps2CatalogRepository.kt:191-203,\n     app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:166-171\n",
        "files": [
          {
            "agnostic": true,
            "description": "PS2 BIOS image",
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "ps2-0230a-20080220.bin",
            "note": "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; an image named in the configuration skips that range. Read into the 4 MB ROM region and truncated to it. Shorter than 2465792 bytes disables the OSDSys parameter HLE.",
            "path": "bios/ps2-0230a-20080220.bin",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:16-17, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:80-197, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:258-294, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:317-369",
            "system": "sony-playstation-2",
            "validation": [
              "size"
            ]
          },
          {
            "description": "DVD player ROM",
            "max_size": 4194304,
            "name": "ps2-0230a-20080220.rom1",
            "note": "Tried as {bios}.rom1 then {biosbase}.rom1, with a case-insensitive retry on the open. Copied to the ROM1 region and truncated to 4 MB. Logged and skipped when absent. The storage access framework import does not carry this extension, so it is reachable only from a plain BIOS folder path.",
            "path": "bios/ps2-0230a-20080220.rom1",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:214-241, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:366, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:371-381, app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:25-27, app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:433-438",
            "system": "sony-playstation-2"
          },
          {
            "aliases": [
              "SCPH-90006_BIOS_VX_HK _230.ROM2"
            ],
            "description": "Chinese ROM extension",
            "max_size": 4194304,
            "name": "ps2-0230a-20080220.rom2",
            "note": "Same two-step naming as rom1, copied to the ROM2 region. Present on Chinese region consoles. Carried by the same import restriction as rom1.",
            "path": "bios/ps2-0230a-20080220.rom2",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:214-241, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:367, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:371-381",
            "system": "sony-playstation-2"
          },
          {
            "description": "Console NVRAM",
            "hle_fallback": true,
            "name": "ps2-0230a-20080220.nvm",
            "note": "Read at the BIOS path with the extension replaced by nvm, case-insensitively. Carries the console id, the iLink id, the model number and the OSD configuration. A 1024 byte image is built in memory when the file is absent, short, or carries a blank config block, filled with a fixed iLink id and the language and region defaults of the detected BIOS region.",
            "path": "bios/ps2-0230a-20080220.nvm",
            "required": false,
            "size": 1024,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/CDVD/CDVD.cpp:46-47, app/src/main/cpp/pcsx2/pcsx2/CDVD/CDVD.cpp:160-163, app/src/main/cpp/pcsx2/pcsx2/CDVD/CDVD.cpp:165-189",
            "system": "sony-playstation-2"
          },
          {
            "description": "Mechacon version",
            "hle_fallback": true,
            "name": "ps2-0230a-20080220.mec",
            "note": "Read at the BIOS path with the extension replaced by mec. Defaults to 0x00020603 and is written back at that path when it cannot be read.",
            "path": "bios/ps2-0230a-20080220.mec",
            "required": false,
            "size": 4,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/CDVD/CDVD.cpp:49, app/src/main/cpp/pcsx2/pcsx2/CDVD/CDVD.cpp:191-204",
            "system": "sony-playstation-2"
          },
          {
            "description": "DEV9 EEPROM",
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "Opened from the working directory when the network adapter starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing or cannot be mapped.",
            "required": false,
            "size": 64,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/DEV9/DEV9.cpp:97-160",
            "system": "sony-playstation-2"
          },
          {
            "description": "DEV9 SmartMedia flash image",
            "hle_fallback": true,
            "max_size": 8650752,
            "name": "flash.dat",
            "note": "Opened from the working directory at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent.",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/DEV9/flash.cpp:9-16, app/src/main/cpp/pcsx2/pcsx2/DEV9/flash.cpp:62-86",
            "system": "sony-playstation-2"
          },
          {
            "config_key": "EmuCore/CurrentIRX",
            "description": "IOP module injected at boot",
            "name": "<module>.irx",
            "note": "Read into the ROM region at 0x3C0000 when the IOP program counter reaches 0x1630 and the setting is longer than three characters. The launcher fills it from the boot parameters when the picked file is an IRX. Empty otherwise.",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:243-256, app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:384-385, app/src/main/cpp/pcsx2/pcsx2/VMManager.cpp:1434, app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:334",
            "system": "sony-playstation-2",
            "unsourceable": "any IOP module the user points at, under no name and no version the code expects"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "per-title compatibility and fix database",
            "name": "GameIndex.yaml",
            "note": "Opened from the resources directory and parsed into the game database that drives per-title rounding modes, clamp modes, GS hacks and memory card filters. The Kotlin catalog reads the same file straight out of the package for the compatibility badges it draws.",
            "path": "resources/GameIndex.yaml",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GameDatabase.cpp:39, app/src/main/cpp/pcsx2/pcsx2/GameDatabase.cpp:976-977, app/src/main/java/com/sbro/emucorex/ui/gamedb/GameDbCatalogRepository.kt:96, app/src/main/java/com/sbro/emucorex/ui/gamedb/GameDbCatalogRepository.kt:202",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "disc hash database",
            "name": "RedumpDatabase.yaml",
            "note": "Opened from the resources directory and parsed into the hash database used to name a disc from its dump.",
            "path": "resources/RedumpDatabase.yaml",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GameDatabase.cpp:1081, app/src/main/cpp/pcsx2/pcsx2/GameDatabase.cpp:1138-1139",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "built-in game patch archive",
            "name": "patches.zip",
            "note": "Opened read only from the resources directory as a zip source and searched for the pnach matching the running serial and CRC. A failure to open is reported once and the built-in patches are dropped for the session.",
            "path": "resources/patches.zip",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/Patch.cpp:117, app/src/main/cpp/pcsx2/pcsx2/Patch.cpp:289-310, app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:163-165",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "core text font",
            "name": "Roboto-Regular.ttf",
            "note": "Read by the adapter's own font setup before the VM starts and handed to the core as the standard font. An empty font list is logged as a setup failure.",
            "path": "resources/fonts/Roboto-Regular.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:254-262, app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:271-282, app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:307",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "core emoji font",
            "name": "Twemoji.Mozilla.ttf",
            "note": "Read by the same font setup and appended as the emoji face. Skipped when the file cannot be read.",
            "path": "resources/fonts/Twemoji.Mozilla.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:263-270, app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:271-282",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan texture and framebuffer shader",
            "name": "tfx.glsl",
            "note": "Read from the resources directory when the Vulkan device is created. A read failure is reported and device creation fails.",
            "path": "resources/shaders/vulkan/tfx.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:346-349, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2400-2404",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan format conversion shader",
            "name": "convert.glsl",
            "note": "Read when the conversion pipelines are compiled and again as the vertex stage of the FXAA pipeline.",
            "path": "resources/shaders/vulkan/convert.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4462-4466, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4847-4851",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan presentation shader",
            "name": "present.glsl",
            "path": "resources/shaders/vulkan/present.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4676-4680",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan deinterlacing shader",
            "name": "interlace.glsl",
            "path": "resources/shaders/vulkan/interlace.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4726-4730",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan field merge shader",
            "name": "merge.glsl",
            "path": "resources/shaders/vulkan/merge.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4777-4781",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan brightness and contrast shader",
            "name": "shadeboost.glsl",
            "path": "resources/shaders/vulkan/shadeboost.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4882-4886",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan contrast adaptive sharpening shader",
            "name": "cas.glsl",
            "note": "Read as a compute shader and its two include lines substituted with the contents of the common headers. The Vulkan device compiles the CAS pipelines unconditionally and returns on a failure, so a missing file stops device creation rather than dropping the feature.",
            "path": "resources/shaders/vulkan/cas.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2438-2439, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4932-4934, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:1038-1049",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "Vulkan overlay shader",
            "name": "imgui.glsl",
            "path": "resources/shaders/vulkan/imgui.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4959-4962",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL texture and framebuffer vertex shader",
            "name": "tfx_vgs.glsl",
            "note": "Read from the resources directory when the OpenGL device is created.",
            "path": "resources/shaders/opengl/tfx_vgs.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:346-349, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:778",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL texture and framebuffer fragment shader",
            "name": "tfx_fs.glsl",
            "path": "resources/shaders/opengl/tfx_fs.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:779",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL format conversion shader",
            "name": "convert.glsl",
            "path": "resources/shaders/opengl/convert.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:514-518",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL presentation shader",
            "name": "present.glsl",
            "path": "resources/shaders/opengl/present.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:584",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL deinterlacing shader",
            "name": "interlace.glsl",
            "path": "resources/shaders/opengl/interlace.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:643",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL field merge shader",
            "name": "merge.glsl",
            "path": "resources/shaders/opengl/merge.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:620",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL brightness and contrast shader",
            "name": "shadeboost.glsl",
            "path": "resources/shaders/opengl/shadeboost.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2423",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL contrast adaptive sharpening shader",
            "name": "cas.glsl",
            "note": "Read as a compute program with the two include lines substituted, and needs an ES 3.1 or 3.2 context. A failure turns CAS sharpening off.",
            "path": "resources/shaders/opengl/cas.glsl",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2577-2597, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:1038-1049",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "OpenGL overlay shader",
            "name": "imgui.glsl",
            "path": "resources/shaders/opengl/imgui.glsl",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2661",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "antialiasing shader shared by both renderers",
            "name": "fxaa.fx",
            "note": "Read as the fragment stage of the FXAA pipeline on Vulkan, inside the post-processing pipelines the device creation chain requires, so a missing file stops device creation there. On OpenGL the program is compiled on its own and an invalid one makes the FXAA pass return without drawing.",
            "path": "resources/shaders/common/fxaa.fx",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2425-2430, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:4854-4858, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2385-2390, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:2404-2407",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "CAS support header",
            "name": "ffx_a.h",
            "note": "Read from the resources directory and pasted over the matching include line of the CAS shader, the compilers having no include support. It shares the fate of the CAS shader it is pasted into: fatal to device creation on Vulkan, and only the sharpening feature on OpenGL.",
            "path": "resources/shaders/common/ffx_a.h",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:1038-1049, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2438-2439, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:667",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "description": "CAS kernel header",
            "name": "ffx_cas.h",
            "note": "Read and substituted the same way as the other CAS header, with the same consequence per renderer when it is missing.",
            "path": "resources/shaders/common/ffx_cas.h",
            "required": true,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Common/GSDevice.cpp:1038-1049, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/Vulkan/GSDeviceVK.cpp:2438-2439, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/OpenGL/GSDeviceOGL.cpp:667",
            "system": "sony-playstation-2"
          },
          {
            "description": "achievement notification sound",
            "name": "message.wav",
            "note": "Played from the resources directory whenever an achievement notification is raised and no custom sound is configured. Sound effects and the notification sound both default on. The vendored tree carries only the README for this directory, so the file has to be supplied; the Android sound callback returns without playing when the path is not a file. Upstream v2.7.316 ships it at 15696 bytes.",
            "path": "resources/sounds/achievements/message.wav",
            "required": false,
            "source_ref": "app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:81, app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:1245-1250, app/src/main/cpp/pcsx2/pcsx2/Pcsx2Config.cpp:1951-1954, app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:194-200",
            "system": "sony-playstation-2"
          },
          {
            "description": "achievement unlock sound",
            "name": "unlock.wav",
            "note": "Played on an unlock under the same two settings, both on by default. Absent from the vendored tree. Upstream v2.7.316 ships it at 202702 bytes.",
            "path": "resources/sounds/achievements/unlock.wav",
            "required": false,
            "source_ref": "app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:82, app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:1313-1318",
            "system": "sony-playstation-2"
          },
          {
            "description": "leaderboard submission sound",
            "name": "lbsubmit.wav",
            "note": "Played on a leaderboard submission under the same two settings, both on by default. Absent from the vendored tree. Upstream v2.7.316 ships it at 82096 bytes.",
            "path": "resources/sounds/achievements/lbsubmit.wav",
            "required": false,
            "source_ref": "app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:83, app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:1458-1463",
            "system": "sony-playstation-2"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "bundled catalog of PS2 titles",
            "name": "games.db",
            "note": "SQLite catalog carried in the package assets and copied into internal storage the first time the catalog is queried, then read from there. A copy already present is kept.",
            "path": "games.db",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorex/data/ps2/Ps2CatalogRepository.kt:18, app/src/main/java/com/sbro/emucorex/data/ps2/Ps2CatalogRepository.kt:38-56",
            "system": "sony-playstation-2"
          },
          {
            "category": "game_data",
            "description": "per-title cheat file",
            "name": "<SERIAL>_<CRC>.pnach",
            "note": "The cheats folder is searched for the running serial and CRC, then for files carrying the CRC alone, both with a trailing wildcard so a suffix after the CRC is kept. The patches folder is searched the same way for patches rather than cheats. The app also imports pnach files out of a picked zip.",
            "path": "cheats/<SERIAL>_<CRC>.pnach",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/Patch.cpp:331-342, app/src/main/cpp/pcsx2/pcsx2/Patch.cpp:344-366, app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:355",
            "system": "sony-playstation-2",
            "unsourceable": "cheat list authored per title, with no released artefact behind it"
          },
          {
            "category": "game_data",
            "description": "replacement texture",
            "name": "<hash>.png",
            "note": "Read when texture replacement is on. The replacements folder under the running serial is walked recursively and a file counts only when its name parses as the TEX0 hash, optional CLUT hash, optional region size and format that the texture cache looks it up by. A directory whose case does not match is reported.",
            "path": "textures/<SERIAL>/replacements/<hash>.png",
            "required": false,
            "source_ref": "app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/HW/GSTextureReplacements.cpp:36-42, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/HW/GSTextureReplacements.cpp:328-331, app/src/main/cpp/pcsx2/pcsx2/GS/Renderers/HW/GSTextureReplacements.cpp:442-500",
            "system": "sony-playstation-2",
            "unsourceable": "replacement artwork authored against the texture hashes of one title"
          },
          {
            "description": "replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Listed by a catalog fetched from the EmuCoreV-Drivers repository, or picked from the device. The archive is unpacked into a directory named after it under driver in internal storage, entries carrying a parent path segment being refused, and the Vulkan library it holds is recorded in a driver_name.txt written beside it. The renderer then resolves the driver through adrenotools from that pair. The system loader is used when no driver is configured.",
            "required": false,
            "source_ref": "app/src/main/java/com/sbro/emucorex/core/GpuDriverCatalogRepository.kt:131-135, app/src/main/java/com/sbro/emucorex/core/GpuDriverManager.kt:89-128, app/src/main/java/com/sbro/emucorex/core/GpuDriverManager.kt:135-141, app/src/main/cpp/ARM_ANDROID/src/runtime/android_runtime.cpp:98-112, app/src/main/cpp/ARM_ANDROID/src/runtime/android_runtime.cpp:362",
            "system": "sony-playstation-2",
            "unsourceable": "Vulkan driver built for one Adreno family, not an emulator artefact"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation 2 emulator for Android, package com.sbro.emucorex, arm64-v8a only,\nminSdk 29. A Kotlin and Compose front end drives a PCSX2 tree vendored under\napp/src/main/cpp/pcsx2 and pinned to v2.7.316, reached through the ARM_ANDROID\nadapter that owns the JNI entry points. Frontends start the exported activity\ncom.sbro.emucorex.MainActivity; ES-DE passes the disc as the intent data URI.\nref: app/build.gradle.kts:53-56, app/build.gradle.kts:77,\n     app/src/main/AndroidManifest.xml:48-62,\n     app/src/main/cpp/ARM_ANDROID/CMakeLists.txt:77-79,\n     app/src/main/cpp/ARM_ANDROID/CMakeLists.txt:338\n\nThe whole upstream core is linked, with three files swapped out of the target:\nAchievements.cpp, Host/SDLAudioStream.cpp and Input/SDLInputSource.cpp are\nremoved and replaced by the adapter's own achievements, AAudio and OpenSL, and\ninput sources. OpenGL and Vulkan are on, pcsx2-qt is never added, and the\nDX11 and DX12 renderers sit in the Windows branch of the core CMakeLists.\nref: app/src/main/cpp/ARM_ANDROID/CMakeLists.txt:239-256,\n     app/src/main/cpp/ARM_ANDROID/CMakeLists.txt:58-59,\n     app/src/main/cpp/pcsx2/pcsx2/CMakeLists.txt:691,\n     app/src/main/cpp/pcsx2/pcsx2/CMakeLists.txt:708-712\n\nStorage. The data root is the app files directory; the app creates cache,\nresources, inis, sstates and memcards under it, then copies the whole resources\nasset tree out of the package into resources. The core is handed AppRoot,\nDataRoot, Resources, Settings and Cache from that root, and the launcher sets\nFolders for Bios, Savestates, MemoryCards, Textures, Cheats, Patches and Logs\nper run.\nref: app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:28,\n     app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:163-165,\n     app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:293-300,\n     app/src/main/java/com/sbro/emucorex/core/NativeApp.kt:316-348,\n     app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:135-139,\n     app/src/main/java/com/sbro/emucorex/core/EmulatorBridge.kt:546-552\n\nA BIOS image is required and boot stops without one: LoadBIOS returning false\nmakes VMManager report that a PlayStation 2 BIOS is needed. Only a GS dump\nreplay skips the load. Detection is by content: the folder scan keeps files\nbetween 4 and 8 MB and accepts an image whose romdir carries a RESET entry\nfollowed by a readable ROMVER, the fifth ROMVER character giving the zone among\nJapan, USA, Europe, Asia, China, T10K, COH-H, Test and Free, with EXTINFO\nsupplying the serial. An image named in the configuration is opened at its own\npath without the size filter. No name and no hash is matched.\nref: app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:16-17,\n     app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:80-197,\n     app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:258-294,\n     app/src/main/cpp/pcsx2/pcsx2/ps2/BiosTools.cpp:317-369,\n     app/src/main/cpp/pcsx2/pcsx2/VMManager.cpp:1487-1499\n\nThe app runs its own gate over the same test before launching. A candidate is\na .bin or .rom between 512 KB and 8 MB whose name carries scph, ps2, bios or\nrom, and it is confirmed by isBiosPath or isBiosFd, both of which call the\ncore's IsBIOS on the path or on /proc/self/fd.\nref: app/src/main/java/com/sbro/emucorex/core/BiosValidator.kt:13-19,\n     app/src/main/java/com/sbro/emucorex/core/BiosValidator.kt:110-137,\n     app/src/main/cpp/ARM_ANDROID/src/jni/native_app_jni.cpp:414-436\n\nA BIOS folder picked through the storage access framework is copied flat into\nimported-bios under the external files directory, and Folders/Bios points there.\nThe import filter takes any .bin or .rom, plus .mec, .nvm and .elf whose name\ncarries one of the hints. Neither rom1 nor rom2 is an accepted extension, and\nLoadExtraRom looks for exactly {bios}.rom1 or {biosbase}.rom1, so the two ROM\nmodules only reach the core when Folders/Bios is a plain filesystem path used\nas-is. A re-import preserves the .nvm and .mec sitting beside the image.\nref: app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:25-27,\n     app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:101-154,\n     app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:366-388,\n     app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:433-438,\n     app/src/main/java/com/sbro/emucorex/core/DocumentPathResolver.kt:492-499\n\nMuch of the bundled resource tree is compiled out on this platform and never\nread. ImGuiManager::Initialize returns false before creating the ImGui context,\nso LoadFontData and the three fonts it reads are unreachable, and SetFonts and\nReloadFonts both guard on that context. InitializeFullscreenUI returns false\nunconditionally, so FullscreenUI::Initialize never runs and nothing under\nfullscreenui or icons is loaded. The adapter reads two fonts of its own instead\nand hands them over through SetFonts.\nref: app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:115-128,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:132-136,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:147,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:193-198,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:262-281,\n     app/src/main/cpp/pcsx2/pcsx2/ImGui/ImGuiManager.cpp:449-511,\n     app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:254-282,\n     app/src/main/cpp/ARM_ANDROID/src/runtime/upstream_vm_bridge.cpp:307\n\nThe three achievement sounds are the one resource the code reads that the tree\ndoes not carry. Their directory holds only the README naming their origin,\nwhile upstream v2.7.316 ships message.wav at 15696 bytes, lbsubmit.wav at 82096\nand unlock.wav at 202702. All four sound settings default on, so a signed-in\nsession asks for them at every notification.\nref: app/src/main/cpp/pcsx2/bin/resources/sounds/achievements/README.txt:1-3,\n     app/src/main/cpp/ARM_ANDROID/src/integration/pcsx2_achievements_android.cpp:81-83,\n     app/src/main/cpp/pcsx2/pcsx2/Config.h:1346-1349,\n     app/src/main/cpp/pcsx2/pcsx2/Pcsx2Config.cpp:1951-1954\n",
        "profiled_date": "2026-08-11",
        "resources_directory": "resources/",
        "source": "https://github.com/sashkinbro/EmuCoreX",
        "source_commit": "7d103230adfa671a3e66b090b8a7fe8f44edc09c",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/PCSX2/pcsx2",
        "upstream_commit": "53e3838c1dd59f611fa3d2fd36915903a1304c6e"
      }
    },
    {
      "id": "emuscv",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.12",
        "cores": [
          "emuscv"
        ],
        "display_name": "EPOCH/YENO Super Cassette Vision",
        "emulator": "EmuSCV",
        "files": [
          {
            "aliases": [
              "upd7801g.bin",
              "upd7801g.bios",
              "bios.rom",
              "bios.bin"
            ],
            "md5": "635a978fd40db9a18ee44eff449fc126",
            "name": "upd7801g.s01",
            "note": "UPD7801G internal ROM (BIOS). Mapped at 0x0000-0x0FFF. Contains character font at offset 0x200.",
            "required": true,
            "size": 4096,
            "source_ref": "src/vm/scv/memory.cpp:74-243",
            "system": "scv",
            "validation": [
              "md5"
            ]
          }
        ],
        "notes": "Libretro port of eSCV by Takeda Toshiya (Common Source Code Project),\nported to libretro by MARCONATO Maxime. Upstream source mirrored at\nhttps://github.com/tautologico/common-src-project (src/vm/scv/).\n\nBIOS loading in src/vm/scv/memory.cpp:initialize() (lines 74-243).\nTries filenames in order: upd7801g.s01, upd7801g.bin, upd7801g.bios,\nbios.rom, bios.bin. First successful open wins. Upstream eSCV uses\nonly BIOS.ROM (uppercase); the libretro port renamed and added\nfallback aliases.\n\nThe BIOS is read as 0x1000 (4096) bytes into the bios[] array, mapped\nread-only at CPU address 0x0000-0x0FFF (UPD7801 internal ROM area).\n\nWhen CHECKBIOS core option is YES, the core computes MD5 of the loaded\ndata and compares against 635a978fd40db9a18ee44eff449fc126. If the\nhash does not match, the BIOS is rejected (zeroed out,\nbios_present=false). When CHECKBIOS is AUTO (default) or NO, any file\ncontent is accepted. The log message for AUTO says \"automatic (yes)\"\nbut the code skips the check (code bug: != YES_VAL at line 80).\n\nThe font/character data is embedded within the BIOS at offset 0x200\n(memory.h get_font() returns bios + 0x200). No separate font ROM file.\n\nThe core can start without BIOS (supports_no_game=true) but shows\n\"BIOS not found\" or \"Bad BIOS\" on the OSD. Games will not run without\nit.\n\nThe .info declares firmware_count=1, firmware0_opt=false. Matches code.\n",
        "platform_details": {
          "bios_mapping": {
            "upd7801g": {
              "format": "raw binary",
              "notes": "Memory map from memory.cpp:initialize():\n  0x0000-0x0FFF  BIOS ROM (read-only)\n  0x2000-0x3FFF  VRAM (8 KB)\n  0x8000-0xFF7F  Cartridge ROM (up to 4 banks of 32 KB)\n  0xFF80-0xFFFF  CPU internal RAM (128 bytes)\nFont data lives inside the BIOS at offset 0x200, accessed via\nget_font() for the VDP character rendering (src/vm/scv/vdp.cpp).\n",
              "source_ref": "src/vm/scv/memory.cpp:249-254",
              "target": "0x0000-0x0FFF (CPU internal ROM, 4 KB)"
            }
          },
          "cartridge_loading": {
            "banking": "4 banks of 32 KB via PC5/PC6 port lines",
            "formats": "cart, bin, rom, 0 (multi-file: .0/.1/.2/.3), zip",
            "source_ref": "src/vm/scv/memory.h, src/vm/scv/memory.cpp"
          },
          "cpu": "NEC UPD7801G"
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/wzcwzc/emuscv",
        "source_commit": "6d6e4594d79862dd5c2ff7f725c109e4266f0b03",
        "systems": [
          "scv"
        ],
        "type": "libretro",
        "upstream": "http://takeda-toshiya.my.coocan.jp/"
      }
    },
    {
      "id": "emux_chip8",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "emux_chip8"
        ],
        "display_name": "CHIP-8 (Emux CHIP-8)",
        "emulator": "emux (CHIP-8)",
        "exclusion_note": "CHIP-8 has no BIOS, font data hardcoded in char_mem[]",
        "files": [],
        "notes": "emux is a multi-system emulator supporting CHIP-8, Game Boy, NES, and\nSega Master System as separate libretro cores. The CHIP-8 core\n(emux_chip8) does not require any external BIOS or firmware files.\n\nThe CHIP-8 architecture has no real BIOS. The standard font/character\nset (hex digits 0-F, 5 bytes each = 80 bytes) is hardcoded in\nmach/chip8.c:40-57 as the char_mem[] array. On reset, this font data\nis copied into the beginning of the 4 KB RAM (address 0x000-0x04F)\nvia memcpy in chip8_reset() at mach/chip8.c:105.\n\nROM loading: the game ROM is loaded via file_open(PATH_DATA, ...) in\nchip8_init() at mach/chip8.c:68-74. On reset, ROM contents are copied\ninto RAM starting at address 0x200 (mach/chip8.c:113). The core\naccepts .ch8, .bin, and .rom extensions (libretro/Makefile.rules:20).\n\nMemory map from mach/chip8.c:17-20:\n  0x000-0x04F  font/character data (hardcoded)\n  0x050-0x1FF  unused\n  0x200-0xFFF  program ROM + working RAM\n\nThe libretro frontend retrieves the system directory via\nRETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (libretro/libretro.c:34) but\nonly uses it as a general config path, not for BIOS loading.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "No external BIOS. The 80-byte character font is compiled into the\nbinary as char_mem[] and memcpy'd into RAM[0x000] on every reset.\nThis is standard CHIP-8 behavior -- all interpreters embed the font.\n",
            "source_ref": "mach/chip8.c:40-57, mach/chip8.c:98-115",
            "target": "none"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/emux",
        "source_commit": "120362977493765032cba7bed9c7aee1ff5b8579",
        "systems": [
          "chip8"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sronsse/emux"
      }
    },
    {
      "id": "emux_gb",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "emux_gb"
        ],
        "display_name": "Nintendo - Game Boy / Color (Emux GB)",
        "emulator": "emux (Game Boy)",
        "files": [
          {
            "aliases": [
              "DMG_ROM.bin"
            ],
            "description": "Game Boy (DMG) boot ROM",
            "name": "dmg_boot.bin",
            "note": "Upstream name DMG_ROM.bin, renamed by libretro port (gb_mapper.c:33-34).",
            "required": true,
            "size": 256,
            "source_ref": "controllers/mapper/gb_mapper.c:35 (bootrom_path), controllers/mapper/gb_mapper.h:13 (BOOTROM_SIZE=256), controllers/mapper/gb_mapper.c:225-232 (file_map + error)",
            "system": "nintendo-gb"
          }
        ],
        "notes": "emux is a multi-system emulator by Sebastien Ronsse. The libretro port\nrenamed the boot ROM from DMG_ROM.bin (upstream, gb_mapper.c:32) to\ndmg_boot.bin (libretro, gb_mapper.c:35) to match RetroArch conventions.\n\nBoot ROM loaded via file_map(PATH_SYSTEM, \"dmg_boot.bin\", 0, 256) in\ngb_mapper_init (gb_mapper.c:225-228). Returns false on failure — no HLE\nfallback. Mapped at 0x0000-0x00FF, overlays ROM0 until BOOT_LOCK (0xFF50)\nis written non-zero (lock_writeb, gb_mapper.c:97-106).\n\nNo hash validation. Code accepts any 256+ byte file.\nis_experimental=true. No save states, rewind, or netplay.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/emux",
        "source_commit": "02f7ba42bedad6882ce47f24c8fc3af7eaac79ae",
        "systems": [
          "nintendo-gb"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sronsse/emux"
      }
    },
    {
      "id": "emux_nes",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "emux_nes"
        ],
        "display_name": "Nintendo - NES / Famicom (Emux NES)",
        "emulator": "emux (NES)",
        "exclusion_note": "NES has no boot ROM, CPU starts at reset vector from cartridge",
        "files": [],
        "notes": "emux is a multi-system emulator by Sebastien Ronsse, supporting CHIP-8,\nGame Boy, NES, and Sega Master System as separate libretro cores.\n\nThe NES core does not require any BIOS or firmware files.\nThe .info declares no firmware_count.\n\nThe NES has no boot ROM. CPU starts at the reset vector address\nstored at 0xFFFC-0xFFFD (cpu/rp2a03.c RESET_VECTOR).\n\nCartridge loading in controllers/mapper/nes_mapper.c:\n  - iNES header parsed (magic 0x1A53454E)\n  - Mapper number extracted from flags6/flags7\n  - Supported mappers: NROM (0), MMC1 (1), MMC3 (4)\n  - PRG-ROM and CHR-ROM mapped via file_map(PATH_DATA, ...)\n\nMemory map from mach/nes.c:\n  CPU bus:\n    0x0000-0x07FF  WRAM (2 KB, mirrored to 0x1FFF)\n    0x2000-0x2007  PPU registers (mirrored to 0x3FFF)\n    0x4000-0x4013  APU registers\n    0x4014         Sprite DMA\n    0x4016-0x4017  Controller ports\n    0x6000-0x7FFF  SRAM\n    0x8000-0xFFFF  PRG-ROM\n\n  PPU bus:\n    0x0000-0x1FFF  CHR-ROM/RAM (pattern tables)\n    0x2000-0x2FFF  VRAM (nametables, 4 KB)\n    0x3F00-0x3F1F  Palette RAM\n\nsystem_directory obtained via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY\n(libretro/libretro.c:23-25) but not used for any file loading.\n\nis_experimental=true. No save states, rewind, or netplay support.\nSupported extensions: nes, bin, rom.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/emux",
        "source_commit": "120362977493765032cba7bed9c7aee1ff5b8579",
        "systems": [
          "nes"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sronsse/emux"
      }
    },
    {
      "id": "emux_sms",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "emux_sms"
        ],
        "display_name": "Sega - Master System (Emux SMS)",
        "emulator": "emux (SMS)",
        "files": [
          {
            "description": "Sega Master System BIOS",
            "name": "bios.sms",
            "note": "Mapped at 0x0000, overlays cartridge ROM until bios_disable bit set. file_map rejects files < 8192 bytes (file.c:59).",
            "required": true,
            "size": 8192,
            "source_ref": "controllers/mapper/sms_mapper.c:12 (BIOS_SIZE=0x2000), :61 (bios_path), :162-170 (file_map + NULL check → return false)",
            "system": "sms",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "emux is a multi-system emulator by Sebastien Ronsse. BIOS and cartridge\ncode identical between upstream and libretro fork (only difference: libretro\nadds g_ram_data/g_ram_size exposure in mach/sms.c for RETRO_MEMORY_SYSTEM_RAM).\n\nBIOS loaded via file_map(PATH_SYSTEM, \"bios.sms\", 0, BIOS_SIZE) in\nsms_mapper_init (sms_mapper.c:162-165). Returns false on failure — no HLE\nfallback. Mapped at 0x0000, overlays cartridge ROM until bios_disable bit\nset in slot control register (sms_mapper.c:79-82).\n\nNo hash validation. Code accepts any file >= 8192 bytes.\nis_experimental=true. No save states, rewind, or netplay.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/emux",
        "source_commit": "02f7ba42bedad6882ce47f24c8fc3af7eaac79ae",
        "systems": [
          "sms"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sronsse/emux"
      }
    },
    {
      "id": "ep128emu",
      "profile": {
        "core_version": "v1.2.10",
        "cores": [
          "ep128emu_core"
        ],
        "display_name": "Enterprise - 64/128 (ep128emu)",
        "emulator": "ep128emu-core",
        "files": [
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "f36f24cbb87745fbd2714e4df881db09",
            "name": "exos21.rom",
            "note": "Enterprise 128 EXOS 2.1. Default OS for EP128 machines.",
            "path": "ep128emu/roms/exos21.rom",
            "required": false,
            "source_ref": "core/core.cpp:237-240",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "5ad3baaad3b5156d6b60b34229a676fb",
            "name": "exos20.rom",
            "note": "Enterprise 64 EXOS 2.0. Used when EP64 machine type is selected.",
            "path": "ep128emu/roms/exos20.rom",
            "required": false,
            "source_ref": "core/core.cpp:229-232",
            "system": "enterprise-64"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "55af78f877a21ca45eb2df68a74fcc60",
            "name": "exos24uk.rom",
            "note": "Enterprise 128 EXOS 2.4 (UK). Used when enhanced ROM mode is enabled. 64K, loaded across segments 0-3.",
            "path": "ep128emu/roms/exos24uk.rom",
            "required": false,
            "source_ref": "core/core.cpp:217-224",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "e972fe42b398c9ff1d93ff014786aec6",
            "name": "basic21.rom",
            "note": "Enterprise 128 BASIC 2.1. Loaded when cartridge mode is active (default).",
            "path": "ep128emu/roms/basic21.rom",
            "required": false,
            "source_ref": "core/core.cpp:251, core/core.cpp:279",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "8e18edce4a7acb2c33cc0ab18f988482",
            "name": "basic20.rom",
            "note": "Enterprise 64 BASIC 2.0. Used with EP64 machine type.",
            "path": "ep128emu/roms/basic20.rom",
            "required": false,
            "source_ref": "core/core.cpp:249, core/core.cpp:267, core/core.cpp:277",
            "system": "enterprise-64"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "ddff70c014d1958dc75378b6c9aab6f8",
            "name": "exdos13.rom",
            "note": "EXDOS 1.3 disk controller. Loaded for EP128_DISK and EP64_DISK modes. 32K across segments 0x20-0x21.",
            "path": "ep128emu/roms/exdos13.rom",
            "required": false,
            "source_ref": "core/core.cpp:306-323",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "f91c4a507cc6895bdd9c43df4f021df3",
            "name": "exdos14isdos10uk.rom",
            "note": "EXDOS 1.4 + IS-DOS 1.0 (UK). Used for IS-DOS disk mode instead of exdos13.rom.",
            "path": "ep128emu/roms/exdos14isdos10uk.rom",
            "required": false,
            "size": 32768,
            "source_ref": "core/core.cpp:255, roms/roms.hpp:30104 (built-in data, MD5 verified)",
            "system": "enterprise-128"
          },
          {
            "bundled": true,
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "a68ebcbc73a4d2178d755b7755bf18fe",
            "name": "epfileio.rom",
            "note": "Direct file I/O extension. Loaded for EP128_FILE and EP64_FILE modes. Source included in roms/ directory.",
            "path": "ep128emu/roms/epfileio.rom",
            "required": false,
            "source_ref": "core/core.cpp:286-287",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "228540b6be83ae2acd7569c8ff0f91d0",
            "name": "zt19uk.rom",
            "note": "ZozoTools 1.9 (UK). Loaded for DTF (direct tape file) mode. 32K across segments 0x40-0x41.",
            "path": "ep128emu/roms/zt19uk.rom",
            "required": false,
            "source_ref": "core/core.cpp:290-293",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "22167938f142c222f40992839aa21a06",
            "name": "hun.rom",
            "note": "Hungarian language extension. Auto-loaded when content locale is Hungarian.",
            "path": "ep128emu/roms/hun.rom",
            "required": false,
            "source_ref": "core/core.cpp:245-246",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "6593dff00ab32a4b1fc084674ededf2b",
            "name": "epdos16f.rom",
            "note": "EP-DOS 1.6f. Provides HFONT and CLKOFF for Hungarian locale. 32K across segments 0x06-0x07.",
            "path": "ep128emu/roms/epdos16f.rom",
            "required": false,
            "size": 32768,
            "source_ref": "core/core.cpp:238-239, roms/roms.hpp:43780 (built-in data, MD5 verified)",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "6af0402906944fd134004b85097c8524",
            "name": "brd.rom",
            "note": "German (BRD) language extension. Auto-loaded when content locale is German.",
            "path": "ep128emu/roms/brd.rom",
            "region": [
              "germany"
            ],
            "required": false,
            "source_ref": "core/core.cpp:263-264",
            "system": "enterprise-128"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "8c54285f541930cde766069942bad0f2",
            "name": "tvc22_sys.rom",
            "note": "TVC system ROM v2.2. Main BIOS for all TVC modes.",
            "path": "ep128emu/roms/tvc22_sys.rom",
            "required": false,
            "source_ref": "core/core.cpp:328-329",
            "system": "videoton-tvc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "5ce95a26ceed5bec73995d83568da9cf",
            "name": "tvc22_ext.rom",
            "note": "TVC extension ROM v2.2. Loaded alongside tvc22_sys.rom.",
            "path": "ep128emu/roms/tvc22_ext.rom",
            "required": false,
            "source_ref": "core/core.cpp:366-367",
            "system": "videoton-tvc"
          },
          {
            "bundled": true,
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "a2cf86ba8e7fc58b242137fe59036832",
            "name": "tvcfileio.rom",
            "note": "TVC direct file I/O extension. Used for TVC64_FILE mode. Source included in roms/ directory.",
            "path": "ep128emu/roms/tvcfileio.rom",
            "required": false,
            "source_ref": "core/core.cpp:370-371",
            "system": "videoton-tvc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "88dc7876d584f90e4106f91444ab23b7",
            "name": "tvc_dos12d.rom",
            "note": "TVC DOS 1.2d. Loaded for TVC64_DISK mode.",
            "path": "ep128emu/roms/tvc_dos12d.rom",
            "required": false,
            "source_ref": "core/core.cpp:375-376",
            "system": "videoton-tvc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "a993f85b88ac4350cf4d41554e87fe4f",
            "name": "cpc464.rom",
            "note": "CPC 464 combined ROM (OS + BASIC). 32K loaded at segments 0x10 (OS) and 0x00 (BASIC) with offset.",
            "path": "ep128emu/roms/cpc464.rom",
            "required": false,
            "source_ref": "core/core.cpp:353-356",
            "system": "amstrad-cpc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "5a384a2310f472c7857888371c00ed66",
            "name": "cpc664.rom",
            "note": "CPC 664 combined ROM (OS + BASIC). Used for CPC_664_DISK mode.",
            "path": "ep128emu/roms/cpc664.rom",
            "required": false,
            "source_ref": "core/core.cpp:361-364",
            "system": "amstrad-cpc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "b96280dc6c95a48857b4b8eb931533ae",
            "name": "cpc6128.rom",
            "note": "CPC 6128 combined ROM (OS + BASIC). Default CPC machine when no specific model requested.",
            "path": "ep128emu/roms/cpc6128.rom",
            "required": false,
            "source_ref": "core/core.cpp:370-373",
            "system": "amstrad-cpc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "25629dfe870d097469c217b95fdc1c95",
            "name": "cpc_amsdos.rom",
            "note": "AMSDOS disk controller ROM. Loaded for CPC_DISK and CPC_664_DISK modes.",
            "path": "ep128emu/roms/cpc_amsdos.rom",
            "required": false,
            "source_ref": "core/core.cpp:377",
            "system": "amstrad-cpc"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "85fede415f4294cc777517d7eada482e",
            "name": "zx128.rom",
            "note": "ZX Spectrum 128K ROM. 32K loaded at segments 0x00-0x01.",
            "path": "ep128emu/roms/zx128.rom",
            "required": false,
            "source_ref": "core/core.cpp:400-403",
            "system": "zx-spectrum"
          },
          {
            "has_builtin": true,
            "hle_fallback": true,
            "md5": "4c42a2f075212361c3117015b107ff68",
            "name": "zx48.rom",
            "note": "ZX Spectrum 48K ROM. Used for ZX16 and ZX48 modes.",
            "path": "ep128emu/roms/zx48.rom",
            "required": false,
            "source_ref": "core/core.cpp:407-408",
            "system": "zx-spectrum"
          }
        ],
        "notes": "All ROMs go under <system_dir>/ep128emu/roms/. The core has built-in ROM\nfallbacks for every file, so it works without any user-supplied ROMs.\nExternal ROMs provide byte-exact originals vs the built-in copies.\n\nEnterprise EP128 is the default machine. EP64 is selected when content\nrequires it. Machine type can also be forced via core options.\n\nHungarian and German locale ROMs are loaded automatically when content\nmetadata indicates the locale. The IS-DOS disk system is an alternative\nto the standard EXDOS disk controller.\n",
        "profiled_date": "2026-03-18",
        "source": "https://github.com/libretro/ep128emu-core",
        "source_commit": "6af5d03de220e6effcd0ffcd99e0fb8e8c77cc9e",
        "systems": [
          "enterprise-64",
          "enterprise-128",
          "videoton-tvc",
          "amstrad-cpc",
          "zx-spectrum"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "ep128emu_core",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.2.10",
        "cores": [
          "ep128emu_core",
          "ep128emu-core"
        ],
        "display_name": "Enterprise - 64/128 (ep128emu)",
        "emulator": "ep128emu_core",
        "files": [
          {
            "aliases": [
              "EXOS21.ROM"
            ],
            "description": "Enterprise 128 Expandible OS 2.1",
            "name": "exos21.rom",
            "path": "ep128emu/roms/exos21.rom",
            "required": false,
            "source_ref": "core/core.cpp:235-238, roms/roms.hpp:18472-21205"
          },
          {
            "aliases": [
              "EXOS20.ROM"
            ],
            "description": "Enterprise 64 Expandible OS 2.0",
            "name": "exos20.rom",
            "path": "ep128emu/roms/exos20.rom",
            "required": false,
            "source_ref": "core/core.cpp:227-230, roms/roms.hpp:15738-18471"
          },
          {
            "description": "Enterprise 128 Expandible OS 2.4 (enhanced, fast memory test)",
            "name": "exos24uk.rom",
            "path": "ep128emu/roms/exos24uk.rom",
            "required": false,
            "source_ref": "core/core.cpp:215-222, roms/roms.hpp:32838-38302"
          },
          {
            "description": "Enterprise 128 BASIC Interpreter v2.1",
            "name": "basic21.rom",
            "path": "ep128emu/roms/basic21.rom",
            "required": false,
            "source_ref": "core/core.cpp:249, core/core.cpp:267, core/core.cpp:277, roms/roms.hpp:3433-4801"
          },
          {
            "description": "Enterprise 64 BASIC Interpreter v2.0",
            "name": "basic20.rom",
            "path": "ep128emu/roms/basic20.rom",
            "required": false,
            "source_ref": "core/core.cpp:247, core/core.cpp:265, core/core.cpp:275, roms/roms.hpp:2064-3432"
          },
          {
            "aliases": [
              "EXDOS14.ROM"
            ],
            "description": "Enterprise 128 Disk Controller v1.3",
            "name": "exdos13.rom",
            "path": "ep128emu/roms/exdos13.rom",
            "required": false,
            "source_ref": "core/core.cpp:304-307, roms/roms.hpp:13004-15737"
          },
          {
            "description": "Enterprise 128 IS-DOS (CP/M compatible disk system)",
            "name": "exdos14isdos10uk.rom",
            "path": "ep128emu/roms/exdos14isdos10uk.rom",
            "required": false,
            "source_ref": "core/core.cpp:296-299, roms/roms.hpp:30103-32836"
          },
          {
            "description": "Enterprise 128 Direct File I/O",
            "name": "epfileio.rom",
            "path": "ep128emu/roms/epfileio.rom",
            "required": false,
            "source_ref": "core/core.cpp:284-285, roms/roms.hpp:9-1377"
          },
          {
            "description": "Enterprise 128 EP-DOS v1.6f (Hungarian font and CLKOFF)",
            "name": "epdos16f.rom",
            "path": "ep128emu/roms/epdos16f.rom",
            "required": false,
            "source_ref": "core/core.cpp:253-256, roms/roms.hpp:43779-46512"
          },
          {
            "description": "Enterprise 128 Hungarian language extension",
            "name": "hun.rom",
            "path": "ep128emu/roms/hun.rom",
            "required": false,
            "source_ref": "core/core.cpp:243, roms/roms.hpp:41039-42407"
          },
          {
            "description": "Enterprise 128 German language extension",
            "name": "brd.rom",
            "path": "ep128emu/roms/brd.rom",
            "region": [
              "germany"
            ],
            "required": false,
            "source_ref": "core/core.cpp:261, roms/roms.hpp:42409-43777"
          },
          {
            "description": "Enterprise 128 ZozoTools extension (DTF file loading)",
            "name": "zt19uk.rom",
            "path": "ep128emu/roms/zt19uk.rom",
            "required": false,
            "source_ref": "core/core.cpp:288-291, roms/roms.hpp:38304-41037"
          },
          {
            "aliases": [
              "TVC22_D6_D4.64K"
            ],
            "description": "Videoton TVC system ROM v2.2",
            "name": "tvc22_sys.rom",
            "path": "ep128emu/roms/tvc22_sys.rom",
            "required": false,
            "source_ref": "core/core.cpp:328-329, roms/roms.hpp:21206-22574"
          },
          {
            "aliases": [
              "TVC22_D7.64K"
            ],
            "description": "Videoton TVC extension ROM v2.2",
            "name": "tvc22_ext.rom",
            "path": "ep128emu/roms/tvc22_ext.rom",
            "required": false,
            "source_ref": "core/core.cpp:330-331, roms/roms.hpp:22575-23260"
          },
          {
            "description": "Videoton TVC Direct File I/O",
            "name": "tvcfileio.rom",
            "path": "ep128emu/roms/tvcfileio.rom",
            "required": false,
            "source_ref": "core/core.cpp:334-335, roms/roms.hpp:1378-2063"
          },
          {
            "aliases": [
              "VT-DOS12-DISK.ROM"
            ],
            "description": "Videoton TVC disk BIOS v1.2d",
            "name": "tvc_dos12d.rom",
            "path": "ep128emu/roms/tvc_dos12d.rom",
            "required": false,
            "source_ref": "core/core.cpp:339-340, roms/roms.hpp:23261-24629"
          },
          {
            "description": "Amstrad CPC 464 OS + BASIC",
            "name": "cpc464.rom",
            "path": "ep128emu/roms/cpc464.rom",
            "required": false,
            "source_ref": "core/core.cpp:353-356, roms/roms.hpp:4802-7535"
          },
          {
            "description": "Amstrad CPC 664 OS + BASIC",
            "name": "cpc664.rom",
            "path": "ep128emu/roms/cpc664.rom",
            "required": false,
            "source_ref": "core/core.cpp:361-364, roms/roms.hpp:7536-10269"
          },
          {
            "description": "Amstrad CPC 6128 OS + BASIC",
            "name": "cpc6128.rom",
            "path": "ep128emu/roms/cpc6128.rom",
            "required": false,
            "source_ref": "core/core.cpp:370-373, roms/roms.hpp:10270-13003"
          },
          {
            "aliases": [
              "AMSDOS_0.5.ROM"
            ],
            "description": "Amstrad CPC AMSDOS disk BIOS",
            "name": "cpc_amsdos.rom",
            "path": "ep128emu/roms/cpc_amsdos.rom",
            "required": false,
            "source_ref": "core/core.cpp:377-378, roms/roms.hpp:24630-25998"
          },
          {
            "description": "ZX Spectrum 128 ROM",
            "name": "zx128.rom",
            "path": "ep128emu/roms/zx128.rom",
            "required": false,
            "source_ref": "core/core.cpp:400-403, roms/roms.hpp:27368-30101"
          },
          {
            "aliases": [
              "48.rom"
            ],
            "description": "ZX Spectrum 48 ROM",
            "name": "zx48.rom",
            "path": "ep128emu/roms/zx48.rom",
            "required": false,
            "source_ref": "core/core.cpp:407-408, roms/roms.hpp:25999-27367"
          }
        ],
        "notes": "Emulates Enterprise 64/128, Videoton TVC, Amstrad CPC 464/664/6128, and ZX Spectrum 16/48/128. All ROMs are embedded in the binary since v1.1.0; external files override built-in data. Content type is auto-detected and determines machine configuration and ROM selection. Custom ROM mappings are possible via .ep128cfg config files placed in ep128emu/config/ or next to content. The .info declares epd19hft.rom and zt19hfnt.rom which are phantom entries never referenced in code. The .info omits epdos16f.rom and exdos14isdos10uk.rom which are used by the code. SDEXT, ReSID, and MIDI port features are compile-disabled in the libretro build.",
        "profiled_date": "2026-03-30",
        "source": "https://github.com/libretro/ep128emu-core",
        "source_commit": "6af5d03de220e6effcd0ffcd99e0fb8e8c77cc9e",
        "systems": [
          "enterprise-64",
          "enterprise-128",
          "videoton-tvc",
          "amstrad-cpc",
          "zx-spectrum"
        ],
        "type": "libretro",
        "upstream": "https://github.com/istvan-v/ep128emu"
      }
    },
    {
      "id": "epsxe",
      "profile": {
        "author": "calb, _Demo_, Galtor (ePSXe Software S.L.)",
        "bios_directory": "bios/",
        "bios_size": 524288,
        "core_classification": "other",
        "core_version": "2.0.18",
        "cores": [
          "epsxe"
        ],
        "display_name": "Sony - PlayStation (ePSXe)",
        "emulator": "ePSXe",
        "exclusion_note": "Left out are the files ePSXe writes and reads back itself, which are emulator state rather than files a user has to obtain: the epsxerc configuration and the per-title profiles under config, the memory cards memcards/epsxe000.mcr and epsxe001.mcr with the per-game pairs memcards/games/<name>-00.mcr and -01.mcr and the Windows scratch pair memcards/temp.000 and temp.001, the savestates and their .pic thumbnails under sstates, the ECM indexes under idx, the game list and scan records under info, epsxe.log, and shadererr.txt, which is only written when a shader stage fails to compile. Left out with them are the ROM images themselves and the .cue, .ccd, .mds, .ecm and .pbp sidecars of a disc. The HLE BIOS is not a file either: it is code, and the ASCII and JIS fonts it draws with are compiled into the binary as bios_ascii_font and bios_jis_font. ref: ePSXe 2.0.5 Linux x64 write_configuration 0x42d330,\n     ePSXe 2.0.5 Linux x64 bios_ascii_font 0x883740,\n     ePSXe 2.0.5 Linux x64 bios_jis_font 0x883d00,\n     ePSXe 2.0.5 Linux x64 0x565110, ePSXe 2.0.5 Linux x64 0x56d164,\n     ePSXe 2.0.18 Windows 0x595600\n",
        "files": [
          {
            "config_key": "BiosPath",
            "description": "SCPH-1000, DTL-H1000 (v1.0 J)",
            "hle_fallback": true,
            "md5": "239665b1a3dade1b5a52c06338011044",
            "name": "scph1000.bin",
            "note": "Windows names this image scph1000 - JP and identifies it by id 0xb817c93d.",
            "path": "bios/scph1000.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ScanBiosTask.java:162-172, ePSXe 2.0.18 Windows 0x5c10b4",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-1001, DTL-H1201, DTL-H3001 (v2.2 12-04-95 A)",
            "hle_fallback": true,
            "md5": "924e392ed05558ffdb115408c263dccf",
            "name": "scph1001.bin",
            "note": "The name the default BiosPath and biosPref point at on every platform. Windows names it scph1001 - US (Recommended) and identifies it by id 0x4c1e4c6a.",
            "path": "bios/scph1001.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.5 Linux x64 write_configfiledefault 0x42ae99, ePSXeReadPreferences.java:21, ePSXe 2.0.18 Windows 0x5c10d8",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "DTL-H1001 (v2.0 05-07-95 A)",
            "hle_fallback": true,
            "md5": "dc2b9bf8da62ec93e868cfd29f0d067d",
            "name": "scph1001_v20.bin",
            "note": "Windows names this image scph1200 - JP and identifies it by id 0xdac96c37.",
            "path": "bios/scph1001_v20.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1120",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-1002, DTL-H1002 (v2.0 05-10-95 E)",
            "hle_fallback": true,
            "md5": "54847e693405ffeb0359c6287434cbef",
            "name": "scph1002a.bin",
            "note": "Windows names this image scph1002 - PAL and identifies it by id 0xea0b1691.",
            "path": "bios/scph1002a.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c10fc",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-3000, DTL-H1000H (v1.1 01-22-95)",
            "hle_fallback": true,
            "md5": "849515939161e62f6b866f6853006780",
            "name": "scph3000.bin",
            "note": "Windows names this image scph3000 - JP and identifies it by id 0x4d0889a4.",
            "path": "bios/scph3000.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1144",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-3500 (v2.1 07-17-95 J)",
            "hle_fallback": true,
            "md5": "cba733ceeff5aef5c32254f1d617fa62",
            "name": "scph3500.bin",
            "note": "Windows names this image scph3500 - JP and identifies it by id 0x4dab5145.",
            "path": "bios/scph3500.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1168",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "biosPref",
            "description": "DTL-H1100 (v2.2 03-06-96 D)",
            "hle_fallback": true,
            "md5": "ca5cfc321f916756e3f0effbfaeba13b",
            "name": "dtlh1100.bin",
            "note": "Known to the Android table alone; no Windows record carries its checksum.",
            "path": "bios/dtlh1100.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ScanBiosTask.java:162-172",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "biosPref",
            "description": "DTL-H1101 (v2.1 07-17-95 A)",
            "hle_fallback": true,
            "md5": "da27e8b6dab242d8f91a9b25d80c63b8",
            "name": "scph1001_v21.bin",
            "note": "Known to the Android table alone; no Windows record carries its checksum.",
            "path": "bios/scph1001_v21.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ScanBiosTask.java:162-172",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "biosPref",
            "description": "SCPH-1002, DTL-H1102 (v2.1 07-17-95 E)",
            "hle_fallback": true,
            "md5": "417b34706319da7cf001e76e40136c23",
            "name": "scph1002b.bin",
            "note": "Known to the Android table alone; no Windows record carries its checksum.",
            "path": "bios/scph1002b.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ScanBiosTask.java:162-172",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "biosPref",
            "description": "SCPH-5000, DTL-H1200 (v2.2 12-04-95 J)",
            "hle_fallback": true,
            "md5": "57a06303dfa9cf9351222dfcbb4a29d9",
            "name": "scph5000.bin",
            "note": "Known to the Android table alone. The Windows record labelled scph5000 identifies a different dump.",
            "path": "bios/scph5000.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ScanBiosTask.java:162-172",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-1002, DTL-H1202, DTL-H3002 (v2.2 12-04-95 E)",
            "hle_fallback": true,
            "md5": "e2110b8a2b97a8e0b857a45d32f7e187",
            "name": "scph1002c.bin",
            "note": "Windows names this image dtlh3002 - PAL and identifies it by id 0xc8ec73c0.",
            "path": "bios/scph1002c.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1090",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-5500 (v3.0 09-09-96 J)",
            "hle_fallback": true,
            "md5": "8dd7d5296a650fac7319bce665a6a53c",
            "name": "scph5500.bin",
            "note": "Windows names this image scph5500 - JP and identifies it by id 0xa8bc4eba.",
            "path": "bios/scph5500.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c11b0",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-5501, SCPH-7003 (v3.0 11-18-96 A)",
            "hle_fallback": true,
            "md5": "490f666e1afb15b7362b406ed1cea246",
            "name": "scph5501.bin",
            "note": "Windows names this image scph7003 - JP and identifies it by id 0xbe16f916.",
            "path": "bios/scph5501.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1288",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-5502, SCPH-5552 (v3.0 01-06-97 E)",
            "hle_fallback": true,
            "md5": "32736f17079d0b2b7024407c39bd3050",
            "name": "scph5502.bin",
            "note": "Windows names this image scph5552 - PAL and identifies it by id 0x19181dce.",
            "path": "bios/scph5502.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c11f8",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-7000, SCPH-9000 (v4.0 08-18-97 J)",
            "hle_fallback": true,
            "md5": "8e4c14f567745eff2f0408c8129f72a6",
            "name": "scph7000.bin",
            "note": "Windows names this image scph7000 - JP and identifies it by id 0x43771cd1.",
            "path": "bios/scph7000.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c121c",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-7001, SCPH-7501, SCPH-7503, SCPH-9001 (v4.1 12-16-97 A)",
            "hle_fallback": true,
            "md5": "1e68c231d0896b7eadcad1d7d8e76129",
            "name": "scph7001.bin",
            "note": "Windows names this image scph7001 - US and identifies it by id 0x6c1ba989.",
            "path": "bios/scph7001.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1240",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-7002, SCPH-7502, SCPH-9002 (v4.1 12-16-97 E)",
            "hle_fallback": true,
            "md5": "b9d9a0286c33dc6b7237bb13cd46fdee",
            "name": "scph7002.bin",
            "note": "The one dump three Windows records share, scph7002 - PAL, scph7502 - PAL (Recommended) and scph9002 - PAL, all carrying id 0x701bad89.",
            "path": "bios/scph7002.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1264, ePSXe 2.0.18 Windows 0x5c12ac, ePSXe 2.0.18 Windows 0x5c12d0",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-100 (v4.3 03-11-00 J)",
            "hle_fallback": true,
            "md5": "8abc1b549a4a80954addc48ef02c4521",
            "name": "scph100.bin",
            "note": "Windows names this image scph100 - JP and identifies it by id 0x061a33e2.",
            "path": "bios/scph100.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c12f4",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-102 (v4.4 03-24-00 E)",
            "hle_fallback": true,
            "md5": "b10f5e0e3d9eb60e5159690680b1e774",
            "name": "scph102_v44.bin",
            "note": "Windows names this image scph102A - PAL and identifies it by id 0x9337252b, the A and B suffixes separating the two SCPH-102 revisions.",
            "path": "bios/scph102_v44.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c133c",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-101 (v4.5 05-25-00 A)",
            "hle_fallback": true,
            "md5": "6e3735ff4c7dc899ee98981385f6f3d0",
            "name": "scph101_v45.bin",
            "note": "Windows names this image scph101 - US and identifies it by id 0x6e7f8edd.",
            "path": "bios/scph101_v45.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1318",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-102 (v4.5 05-25-00 E)",
            "hle_fallback": true,
            "md5": "de93caec13d1a141a40a79f5c86168d6",
            "name": "scph102_v45.bin",
            "note": "Windows names this image scph102B - PAL and identifies it by id 0x727f8add.",
            "path": "bios/scph102_v45.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ScanBiosTask.java:28, ePSXe 2.0.18 Windows 0x5c1360",
            "system": "sony-playstation",
            "validation": [
              "size",
              "md5"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-5000, DTL-H1200, DTL-H3000 (v2.2 12-04-95 J), bad dump",
            "hle_fallback": true,
            "md5": "eb201d2d98251a598af467d4347bb62f",
            "name": "scph5000_b.bin",
            "note": "Recognised by Windows alone, as scph5000 - JP with id 0xa63468aa. That record is pinned on a checksum, not on a hash the code spells out; the md5 here is the dump that reproduces the checksum. TOSEC tags the same dump [b].",
            "path": "bios/scph5000_b.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ePSXe 2.0.18 Windows 0x5c118c, ePSXe 2.0.18 Windows 0x42f525-0x42f568",
            "system": "sony-playstation",
            "validation": [
              "size"
            ],
            "variant_group": "psx-bios"
          },
          {
            "config_key": "BiosPath",
            "description": "SCPH-5502, SCPH-5552 (v3.0 01-06-97 E), bad dump",
            "hle_fallback": true,
            "md5": "e56ec1b027e2fe8a49217d9678f7f6bb",
            "name": "scph5502_b.bin",
            "note": "Recognised by Windows alone, as scph5502 - PAL with id 0x702fa307, resolved the same way as the SCPH-5000 bad dump above. TOSEC tags it [b].",
            "path": "bios/scph5502_b.bin",
            "required": false,
            "size": 524288,
            "source_ref": "ePSXe 2.0.18 Windows 0x5c11d4, ePSXe 2.0.18 Windows 0x42f525-0x42f568",
            "system": "sony-playstation",
            "validation": [
              "size"
            ],
            "variant_group": "psx-bios"
          },
          {
            "aliases": [
              "<game>.SBI"
            ],
            "category": "game_data",
            "description": "subchannel data for a libcrypt protected disc",
            "name": "<game>.sbi",
            "note": "Named after the running disc. The uppercase extension is tried first and the lowercase one second, and a disc with neither runs on the built-in substitute, reported as fake .sbi.",
            "path": "patches/<game>.sbi",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 ISOtestsubchannel 0x46f198-0x46f263",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "cheat code database",
            "name": "database.dat",
            "note": "Opened read only from cheats at startup. Absent, the session runs with no library behind the per-title files.",
            "path": "cheats/database.dat",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 load_cheat_dynamic_database 0x431bc7-0x431bd0",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "cheat database index, keyed on the disc serial",
            "name": "dataconf.dat",
            "note": "Read after database.dat into CheatDataConf, mapping serials such as SLUS_011.60 onto entries of the library.",
            "path": "cheats/dataconf.dat",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 load_cheat_dynamic_database 0x431ca7-0x431cfa",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "cheat codes for one title",
            "name": "<code>.txt",
            "note": "Named after the disc serial and parsed as a list of hex address and value pairs under bracketed titles. Android downloads it from epsxe.com into the same directory.",
            "path": "cheats/<code>.txt",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 initGSCodes 0x432ea4-0x43304d, DownloadCheatFileTask.java:49-55",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "vertex stage of one GPUCORE shader effect",
            "name": "gpuCore.slv",
            "note": "One directory per effect. A stage that will not open logs the unable to read shader file message and the effect is dropped. The shaders pack on epsxe.com carries the set.",
            "path": "shaders/<name>/gpuCore.slv",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 createProgramCustom 0x4f7d7e-0x4f7db9, DownloadShaderPluginTask.java:68-76"
          },
          {
            "category": "game_data",
            "description": "fragment stage of one GPUCORE shader effect",
            "name": "gpuCore.slf",
            "note": "Read straight after the vertex stage from the same directory.",
            "path": "shaders/<name>/gpuCore.slf",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 createProgramCustom 0x4f7dcd-0x4f7df1, DownloadShaderPluginTask.java:69-78"
          },
          {
            "category": "game_data",
            "description": "parameters of one GPUCORE shader effect",
            "name": "gpuCore.ini",
            "note": "Read beside the two stages once they link. Not every effect in the pack ships one.",
            "path": "shaders/<name>/gpuCore.ini",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 readPropertiesProgramCustom 0x4f7c30, ePSXe 2.0.5 Linux x64 createProgramCustom 0x4f7f15, DownloadShaderPluginTask.java:70-80"
          },
          {
            "category": "game_data",
            "description": "GLSlang vertex stage of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2.slv",
            "note": "Resolved under the configured shader directory, defaulting to SHADERS\\. Selected by the GLSlang shader effect setting.",
            "path": "shaders/gpuPeteOGL2.slv",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4fbd79-0x4fbd7e, ePSXe 2.0.18 Windows 0x4fb220-0x4fb263"
          },
          {
            "category": "game_data",
            "description": "GLSlang fragment stage of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2.slf",
            "note": "Read from the same directory as the vertex stage.",
            "path": "shaders/gpuPeteOGL2.slf",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4fbe80, ePSXe 2.0.18 Windows 0x4fb220-0x4fb263"
          },
          {
            "category": "game_data",
            "description": "ARB vertex program of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2.vp",
            "note": "The ARB alternative to the GLSlang pair, taken by a different value of the shader effect setting, and reporting the offset when the program fails to assemble.",
            "path": "shaders/gpuPeteOGL2.vp",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4faaf2, ePSXe 2.0.18 Windows 0x59f534-0x59f580"
          },
          {
            "category": "game_data",
            "description": "ARB fragment program of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2.fp",
            "note": "Read alongside the vertex program.",
            "path": "shaders/gpuPeteOGL2.fp",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4fabbb, ePSXe 2.0.18 Windows 0x59f4c8-0x59f518"
          },
          {
            "category": "game_data",
            "description": "linear lookup texture of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2_t<n>l.tga",
            "note": "Numbered per effect and resolved from the same directory as the shader stages. One of two names formatted into the same slot, the other being the nearest flavour, picked on the remainder of the effect index.",
            "path": "shaders/gpuPeteOGL2_t<n>l.tga",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4fb429-0x4fb433, ePSXe 2.0.18 Windows 0x59f43c"
          },
          {
            "category": "game_data",
            "description": "nearest lookup texture of the integrated Pete OpenGL2 plugin",
            "name": "gpuPeteOGL2_t<n>n.tga",
            "note": "The alternative to the linear flavour, taken when the index divides evenly, and read again on its own further in.",
            "path": "shaders/gpuPeteOGL2_t<n>n.tga",
            "required": false,
            "source_ref": "ePSXe 2.0.18 Windows 0x4fb3de, ePSXe 2.0.18 Windows 0x4fb573, ePSXe 2.0.18 Windows 0x59f424"
          },
          {
            "aliases": [
              "libgpu<name>.so"
            ],
            "category": "game_data",
            "description": "PSEmu Pro video plugin",
            "name": "gpu<name>.dll",
            "note": "Named by the VideoPlugin setting, opened from plugins and bound entry point by entry point, from GPUinit and GPUopen through GPUdmaChain to GPUregisterResolutionCallback, each missing symbol logged as a dlsym error. Windows enumerates the directory on gpu*.dll. The built-in GPUCORE and the integrated Pete OpenGL2 plugin need no file.",
            "path": "plugins/gpu<name>.dll",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 init_gpu 0x4408a1-0x440d5d, ePSXe 2.0.18 Windows 0x58aded",
            "system": "sony-playstation"
          },
          {
            "aliases": [
              "libspu<name>.so"
            ],
            "category": "game_data",
            "description": "PSEmu Pro sound plugin",
            "name": "spu<name>.dll",
            "note": "Named by the SoundPlugin setting. Windows enumerates the directory on spu*.dll. The built-in SPUCORE needs no file.",
            "path": "plugins/spu<name>.dll",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 init_spu_plugins, ePSXe 2.0.5 Linux x64 write_configfiledefault 0x42ae40",
            "system": "sony-playstation"
          },
          {
            "aliases": [
              "libcdr<name>.so"
            ],
            "category": "game_data",
            "description": "PSEmu Pro cdrom plugin",
            "name": "cdr<name>.dll",
            "note": "Enumerated on cdr*.dll and initialised through init_plugins_cdrom. Reading a disc image directly needs none.",
            "path": "plugins/cdr<name>.dll",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 init_plugins_cdrom, ePSXe 2.0.18 Windows 0x58af0d",
            "system": "sony-playstation"
          },
          {
            "aliases": [
              "libpad<name>.so"
            ],
            "category": "game_data",
            "description": "PSEmu Pro input plugin",
            "name": "pad<name>.dll",
            "note": "Named by the InputPlugin and Input2Plugin settings and loaded from plugins by LoadPadPlugins. The built-in INPUTCORE needs no file.",
            "path": "plugins/pad<name>.dll",
            "required": false,
            "source_ref": "ePSXe 2.0.5 Linux x64 LoadPadPlugins 0x51927e, ePSXe 2.0.5 Linux x64 write_configfiledefault 0x42ae57-0x42ae6e",
            "system": "sony-playstation"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "OpenGL2 renderer of the Android build",
            "name": "liboglplugin2.so",
            "note": "Android only. Read when the renderer setting is 5: a copy found under plugins is staged into the private directory and used, otherwise the one inside the package answers and the setting falls back to the software renderer if neither is there.",
            "path": "plugins/liboglplugin2.so",
            "required": false,
            "source_ref": "ePSXe.java:847-886",
            "system": "sony-playstation"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "extended OpenGL2 renderer of the Android build",
            "name": "libogl2extplugin.so",
            "note": "Android only. Same override path as liboglplugin2.so, taken when the renderer setting is 4.",
            "path": "plugins/libogl2extplugin.so",
            "required": false,
            "source_ref": "ePSXe.java:887-926",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "external OpenGL plugin of the Android build",
            "name": "libopenglplugin.so",
            "note": "Android only. Named by the gpuPref setting, which points at the root of shared storage by default and is also looked for under the package library directory and the secondary card.",
            "path": "libopenglplugin.so",
            "required": false,
            "source_ref": "ePSXe.java:927-966, ePSXeReadPreferences.java:32-34, ePSXe 2.0.15 libepsxe.so 0x176128, ePSXe 2.0.15 libepsxe.so 0x176160",
            "system": "sony-playstation"
          },
          {
            "category": "game_data",
            "description": "in-app guide for one title",
            "name": "<code>.txt",
            "note": "Android only. Named after the disc serial and loaded into the help viewer as a local page; the menu entry is offered only when the file is there.",
            "path": "faqs/<code>.txt",
            "required": false,
            "source_ref": "ePSXe.java:1047, ePSXe.java:1857, ePSXe.java:1896",
            "system": "sony-playstation",
            "unsourceable": "guide text the user files under the disc serial"
          },
          {
            "category": "game_data",
            "description": "on-screen controller skin",
            "name": "skin.png",
            "note": "Android only. Named by the skinPref setting, which points at the root of shared storage by default, and handed to the view as the input skin.",
            "path": "skin.png",
            "required": false,
            "source_ref": "ePSXeReadPreferences.java:36-38, ePSXeNative.java:702",
            "unsourceable": "pad artwork the user supplies"
          },
          {
            "category": "game_data",
            "description": "cover art for one title",
            "name": "<hash>.jpg",
            "note": "Cached under covers and fetched from epsxe.com when absent, the desktop builds falling back to a shipped na.jpg when the fetch finds nothing.",
            "path": "covers/<hash>.jpg",
            "required": false,
            "source_ref": "ImageLoader.java:88, ePSXe 2.0.5 Linux x64 download_covers, ePSXe 2.0.5 Linux x64 0x572ea0",
            "system": "sony-playstation"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation emulator, closed source and distributed as a binary. Five builds\nare read here. The desktop ones come from the download page: 2.0.18 Windows\n(md5 c1abd8cffcd0bc3dbd9c72b13bfc20e5, UPX packed, cited at the virtual\naddresses of the unpacked image), 2.0.5 Windows (bfa6eb173d9bae9b2e7983b23383c789),\n2.0.5 Linux x64 (52ef10e78aeec86f84105b7b59d375ee), 2.0.5 Linux x86\n(efe6c2c6303d4f7c5251166342bfb002) and 2.0.5 macOS x64\n(c4ca85710fbea827da2a1ce304536973). The Linux x64 build keeps 1771 of its own\nfunctions in .dynsym although it reports as stripped, so it is cited by\nfunction name. The Android side is package com.epsxe.ePSXe, versionCode 139\nversionName 2.0.15, apk md5 e18988b825f263bbc961bfbed1c4bc0b, with 2.0.6\n(fce9c60c5cbc4e075cf97a587e64eb78) read alongside it; both verify against the\nepsxe.com signing certificate (CN=epsxeteam, serial 0x4fdaca68), every entry\ndigest matches and none is unsigned. Two copies of 2.0.16 circulating on\narchive.org are repackaged, signed CN=A1 and ModYolo, and are not read here.\nref: epsxe.com/download.php, com.epsxe.ePSXe META-INF/CERT.RSA\n\nOne root holds everything. On Linux and macOS it is $HOME/.epsxe, created at\nstartup together with plugins, bios, cheats, sstates, patches, idx, config,\ninfo, covers, memcards, memcards/games, memcards/net, shaders and configs, and\nthe process chdirs into it. On Windows it is the program directory with the\nsame names. On Android it is a directory named epsxe at the root of shared\nstorage, holding sstates, bios, isos, cheats, config, idx, patches, plugins,\nfaqs, shaders, memcards and covers. Paths below are relative to that root.\nref: ePSXe 2.0.5 Linux x64 create_folders 0x42a727-0x42abcf,\n     ePSXe.java:1517, ePSXe.java:1541-1577\n\nExactly one BIOS file is ever loaded, and its full path is a setting, not a\nname the code looks for: BiosPath in $HOME/.epsxe/epsxerc on Linux and macOS,\nbiosPref in the shared preferences on Android, both defaulting to\nbios/scph1001.bin below the root. load_bios opens it read only, reads one block\nof 0x80000 bytes into the 0x80000-byte psxBIOS object and logs\n\" * ePSXe: PSX BIOS loaded [%s]. \". A file that will not open reaches\nemu_mesg_exit_error with \" * !Error: PSX BIOS not found [%s]. \" and the run\nends. The HLE branch, taken when the BiosHLE setting is on, skips the read\nentirely and logs \" * ePSXe: using HLE BIOS (compatibility limited)\", so any\none of the images below fills the slot and none of them is needed on its own.\nHLE arrived in 1.9.25 and savestates made under it are not interchangeable\nwith savestates made under a real image.\nref: ePSXe 2.0.5 Linux x64 load_bios 0x433540-0x433621,\n     ePSXe 2.0.5 Linux x64 bios_name_select 0x4334c0-0x4334f2,\n     ePSXe 2.0.5 Linux x64 write_configfiledefault 0x42ae99-0x42aeeb,\n     ePSXeReadPreferences.java:20-30, ePSXe.java:445-453,\n     docs/ePSXe_en.txt:260-271, docs/ePSXe_en.txt:883-888\n\nBoth consumer families carry a table of the images they recognise, and the two\ntables are built differently and do not hold the same set. Android ships 21\npairs of label and md5; findBios walks the tree to a depth of ten, skipping\nDCIM, Camera, asec, secure, dev, obb, .lfs and anything under /Android/data,\nkeeps files whose lowercased name ends in .bin and whose length is exactly\n524288, md5s each one and on a hit writes biosPref to that path and turns\nBiosHLE off. Windows ships 21 records of a 32-byte name and a 32-bit id, globs\nbios\\*.bin, reads each candidate whole and identifies it by a checksum of its\nown: over the 512 KB as big endian 16-bit words, the sum shifted left 16 bits\nor'd with the low 16 bits of the xor. That value is looked up only to name the\nimage in the setup wizard. The Linux and macOS builds carry neither table.\nSeventeen dumps are in both tables; four are known to Android alone; two are\nknown to Windows alone and both turn out to be dumps TOSEC marks [b].\nref: ScanBiosTask.java:28, ScanBiosTask.java:145-191, ePSXeNative.java:280,\n     ePSXe 2.0.18 Windows 0x5c1090-0x5c1384, ePSXe 2.0.18 Windows 0x5c108c,\n     ePSXe 2.0.18 Windows 0x42f264-0x42f2c7,\n     ePSXe 2.0.18 Windows 0x42f4b0-0x42f568,\n     ePSXe 2.0.18 Windows 0x42f584-0x42f5b4\n\nNo region decides which image is taken. findBios keeps the first md5 that\nanswers anywhere in the walk, the Windows ids only pick a label to display, and\nthe JP, US and PAL words are part of that label string. Automatic selection of\na required BIOS per game existed once and was removed because it stopped\nLegend of Dragoon US and Wild Arms 2 US from running.\nref: ScanBiosTask.java:167-171, ePSXe 2.0.18 Windows 0x42f5aa-0x42f5c2,\n     docs/ePSXe_en.txt:1243-1244\n\nVideo, sound, cdrom and input go through the PSEmu Pro plugin interface.\ninit_gpu builds plugins/<name> from the configured name, dlopens it and\nresolves GPUinit, GPUopen, GPUdmaChain and the rest of the entry points one by\none; init_spu_plugins and LoadPadPlugins do the same for their own. Windows\nenumerates gpu*.dll, spu*.dll and cdr*.dll in plugins\\. GPUCORE, SPUCORE and\nINPUTCORE are the built-in defaults and are not files. Android has no PSEmu Pro\nloader: its two OpenGL renderers ship inside the package and are only replaced\nwhen a file of the matching name is found under plugins.\nref: ePSXe 2.0.5 Linux x64 init_gpu 0x4408a1-0x440bc0,\n     ePSXe 2.0.5 Linux x64 LoadPadPlugins 0x51927e,\n     ePSXe 2.0.5 Linux x64 write_configfiledefault 0x42ae29-0x42ae6e,\n     ePSXe.java:842-977\n\nPer-title files are looked up beside the running game. ISOtestsubchannel reads\npatches/<name>.SBI, then patches/<name>.sbi, and reports \" * Subchannel support\nfrom .sbi file. \" when one answers. initGSCodes reads the cheat file\ncheats/<code>.txt keyed on the game code, on top of the two cheat databases\nload_cheat_dynamic_database opens from cheats. Android downloads the same cheat\nfile from epsxe.com into cheats, reads faqs/<code>.txt into its help viewer and\nfills covers from epsxe.com.\nref: ePSXe 2.0.5 Linux x64 ISOtestsubchannel 0x46f198-0x46f263,\n     ePSXe 2.0.5 Linux x64 initGSCodes 0x432ea4-0x432f11,\n     ePSXe 2.0.5 Linux x64 load_cheat_dynamic_database 0x431bc7-0x431cac,\n     DownloadCheatFileTask.java:49-55, ePSXe.java:1047, ePSXe.java:1896,\n     ImageLoader.java:88\n\nShaders are directories, not single files. createProgramCustom reads\n<dir>/gpuCore.slv and <dir>/gpuCore.slf and readPropertiesProgramCustom reads\n<dir>/gpuCore.ini beside them, one directory per effect, and a stage that will\nnot open logs \" (unable to read shader file %s) \". The shaders pack on\nepsxe.com carries these triplets and Android pulls the same set one file at a\ntime from an index it downloads first. The integrated Pete OpenGL2 plugin has\nits own set under the configured shader directory, defaulting to SHADERS\\.\nref: ePSXe 2.0.5 Linux x64 createProgramCustom 0x4f7d7e-0x4f7f42,\n     ePSXe 2.0.18 Windows 0x4fb220-0x4fb263,\n     DownloadShaderPluginTask.java:56-80\n",
        "profiled_date": "2026-08-11",
        "source": "https://www.epsxe.com/download.php",
        "systems": [
          "sony-playstation"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "fake08",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v0.0.2.19",
        "cores": [
          "fake08"
        ],
        "display_name": "PICO-8 (FAKE-08)",
        "emulator": "FAKE-08",
        "exclusion_note": "all engine resources compiled into binary via include_bytes!",
        "files": [],
        "notes": "FAKE-08 is an open-source PICO-8 compatible runtime for running .p8 and\n.p8.png cartridges on platforms where the official PICO-8 binary is not\navailable (3DS, Vita, Switch, Wii U, various handhelds).\n\nThe core retrieves RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY in\nretro_set_environment() (libretro.cpp:162-163) but never uses the value.\nNo file is loaded from the system directory. The PICO-8 boot sequence,\nglobal Lua functions, and default cart menu are compiled directly into the\nbinary as string constants (p8GlobalLuaFunctions.h, DefaultCart.h).\n\nWhen no ROM is passed (supports_no_game = true), the core queues its\nbuilt-in BIOS cart \"__FAKE08-BIOS.p8\" (libretro.cpp:751). This is not\nan external file -- it is generated internally by the VM.\n\nThe core accepts .p8 (text) and .png (cartridge-as-image) formats\n(libretro.cpp:258). Content is loaded either via the libretro data buffer\nor full path depending on the _NEED_FULL_PATH_ compile flag.\n",
        "platform_details": {
          "cartridge_format": {
            "extensions": "p8, png",
            "note": ".p8 is the PICO-8 text cartridge format containing Lua code, gfx,\ngff, map, sfx, and music sections. .png is the cartridge-as-image\nformat where cart data is steganographically encoded in the image.\n",
            "source_ref": "platform/libretro/libretro.cpp:258"
          },
          "runtime": {
            "note": "The FAKE-08 VM reimplements the PICO-8 API (128x128 screen, 16 colors,\n4-channel audio, Lua scripting) entirely in C++. The built-in BIOS\nprovides a cart browser and error display. Audio runs at 22050 Hz\nwith save state support via custom serialization (libretro.cpp:517-736).\n",
            "source_ref": "source/vm.h, source/p8GlobalLuaFunctions.h"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/jtothebell/fake-08",
        "source_commit": "3e89519ca4b4eaf65be9e8cb982ea2c1ccd34e5d",
        "systems": [
          "pico8"
        ],
        "type": "libretro",
        "upstream": "https://github.com/jtothebell/fake-08"
      }
    },
    {
      "id": "fbalpha2012",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v0.2.97.29",
        "cores": [
          "fbalpha2012",
          "fbalpha"
        ],
        "display_name": "Arcade (FB Alpha 2012)",
        "emulator": "FB Alpha 2012",
        "exclusion_note": "All BIOS ROMs (Neo Geo, PGM, CPS-3, Sega) are inside game ROM set ZIPs, not standalone system files. neogeo.zip is a parent ROM set loaded automatically by the emulator when a Neo Geo game is started.",
        "files": [
          {
            "description": "High score persistence database",
            "name": "hiscore.dat",
            "note": "Loaded from save directory (g_save_dir). Gated by EnableHiscores core option and per-game BDF_HISCORE_SUPPORTED flag.",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/hiscore.cpp:411"
          },
          {
            "category": "game_data",
            "description": "Donkey Kong audio samples",
            "name": "dkong.zip",
            "note": "WAV samples for Donkey Kong and clones (dkongo, dkongj, dkongjo, dkongjo1, dkongf, dkongx, dkongx11)",
            "path": "fba2012/samples/dkong.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Donkey Kong Jr audio samples",
            "name": "dkongjr.zip",
            "note": "WAV samples for Donkey Kong Jr and clones (dkongjrj, dkongjnrj, dkongjrb, jrking, dkingjr, dkongjre)",
            "path": "fba2012/samples/dkongjr.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Galaga audio samples",
            "name": "galaga.zip",
            "note": "WAV samples for Galaga and clones (galagao, galagamw, galagamk, galagamf, gallag)",
            "path": "fba2012/samples/galaga.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Rally-X audio samples",
            "name": "rallyx.zip",
            "note": "WAV samples for Rally-X and clones (rallyxa, rallyxm, rallyxmr, nrallyx)",
            "path": "fba2012/samples/rallyx.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Ghox audio samples",
            "name": "ghox.zip",
            "note": "WAV samples for Ghox and Ghox (joystick). Substitutes undumped MCU sound.",
            "path": "fba2012/samples/ghox.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Fire Shark / Same! Same! Same! audio samples",
            "name": "fireshrk.zip",
            "note": "WAV samples for Fire Shark and clones (fireshrkd, fireshrkdh, samesame, samesame2)",
            "path": "fba2012/samples/fireshrk.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Teki Paki audio samples",
            "name": "tekipaki.zip",
            "path": "fba2012/samples/tekipaki.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          },
          {
            "category": "game_data",
            "description": "Vimana audio samples",
            "name": "vimana.zip",
            "note": "WAV samples for Vimana and clones (vimanan, vimanaj)",
            "path": "fba2012/samples/vimana.zip",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/snd/samples.cpp:248,262"
          }
        ],
        "notes": "Frozen snapshot of Final Burn Alpha v0.2.97.29 (circa 2012), full version.\nSupports CPS-1, CPS-2, CPS-3, Neo Geo, PGM, Sega, Cave, Toaplan, and more.\n\nMultiple arcade systems have BIOS ROMs marked BRF_BIOS in source:\n\nNeo Geo (d_neogeo.cpp:923-1011): neogeo.zip ROM set contains ~35 BIOS variants\n  - 68K BIOS: asia-s3.rom (default), sp-s2.sp1, sp-s.sp1, sp-u2.sp1, sp-e.sp1,\n    vs-bios.rom, sp-j2.sp1, sp1.jipan.1024, sp-45.sp1, japan-j3.bin, neo-po.bin,\n    neo-epo.bin, neodebug.bin, sp-1v1_3db8c.bin, 16 Universe BIOS variants,\n    neopen.sp1, plus PCB/CD/trackball BIOS variants\n  - Z80 BIOS: sm1.sm1 (sound program)\n  - Graphics: sfix.sfix (text layer tiles)\n  - Data: 000-lo.lo (zoom table)\n  - Neo Geo CD: neocd.bin\n\nPGM (d_pgm.cpp:303-379): per-game BIOS sets in each ROM ZIP\n  - pgm_t01s.rom (text tiles), pgm_m01s.rom (samples),\n    pgm_p01s.u20/pgm_p02s.u20 (68K BIOS v1/v2),\n    ddp3_bios.u37, bios.u42, svg_bios.u49 (custom per-game)\n\nCPS-3 (d_cps3.cpp): 18 SH-2 BIOS variants, 512 KB each, region-specific\n  (see fbalpha2012_cps3.yml for full list)\n\nSega System 16B (d_sys16b.cpp:8900): ism2006v00.u1\n\nAll BIOS files are part of their respective game ROM set ZIPs (arcade standard).\nNone are standalone system directory files. The .info note \"BIOS files must be\ninside the ROM directory\" refers to the ROM directory containing the game ZIPs,\nwhich already include their BIOS.\n\nROM path: g_rom_dir from content path.\nSample path: g_system_dir/fba2012/samples/ (samples.cpp:248).\nHiscore path: g_save_dir/hiscore.dat (hiscore.cpp:411).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fbalpha2012",
        "source_commit": "0ce31536bef3162fe7e69ff5f555334ec4913cef",
        "systems": [
          "arcade",
          "neogeo",
          "cps1",
          "cps2",
          "cps3",
          "pgm"
        ],
        "type": "libretro",
        "upstream": "https://www.fbalpha.com"
      }
    },
    {
      "id": "fbalpha2012_cps1",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v0.2.97.28",
        "cores": [
          "fbalpha2012_cps1"
        ],
        "display_name": "Arcade (FB Alpha 2012 CPS-1)",
        "emulator": "FB Alpha 2012 CPS-1",
        "files": [
          {
            "description": "High score database, loaded from system directory",
            "name": "hiscore.dat",
            "path": "fbalpha2012/hiscore.dat",
            "required": false,
            "source_ref": "src/burn/hiscore.cpp:226"
          }
        ],
        "notes": "Frozen snapshot of Final Burn Alpha v0.2.97.28 (circa 2012), CPS-1 only.\nExists for RAM-constrained platforms (3DS, embedded). Most users should use FBNeo.\n\nCPS-1 has no system BIOS. Each game's ROM set is self-contained:\n68000 program ROMs + Z80 sound program + GFX ROMs + (optional) QSound samples.\nQSound games (Cadillacs & Dinosaurs, etc.) include audio samples directly in\ntheir ROM set (cd-q1.1k through cd-q4.4k), not as a separate DSP BIOS.\n\nBoard PLDs (buf1, ioa1, prg1, rom1, sou1) are listed in ROM definitions as\nBRF_OPT (optional). These are GAL/PAL dumps for hardware preservation —\nnever loaded by the emulator.\n\nROM path: ROMs are loaded from the content directory (g_rom_dir).\nsystem_directory (libretro.cpp:2202) is used only for hiscore.dat.\n\nThe .info note \"BIOS files must be inside the ROM directory\" is misleading —\nthere are no BIOS files for CPS-1. This note is generic across all FBA cores.\n\n244 ROM sets defined (488 STD_ROM_PICK/FN entries = 244 games).\nis_experimental=false, need_fullpath=true, block_extract=true.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fbalpha2012_cps1",
        "source_commit": "5542c1848ef81e92db311193b01dc349bc29d7cc",
        "systems": [
          "cps1"
        ],
        "type": "libretro",
        "upstream": "https://www.fbalpha.com"
      }
    },
    {
      "id": "fbalpha2012_cps2",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v0.2.97.28",
        "cores": [
          "fbalpha2012_cps2"
        ],
        "display_name": "Arcade (FB Alpha 2012 CPS-2)",
        "emulator": "FB Alpha 2012 CPS-2",
        "files": [
          {
            "description": "High score persistence database",
            "name": "hiscore.dat",
            "note": "Loaded from <system_dir>/fbalpha2012/hiscore.dat",
            "path": "fbalpha2012/hiscore.dat",
            "required": false,
            "source_ref": "src/burn/hiscore.c:228-232"
          }
        ],
        "notes": "Frozen snapshot of Final Burn Alpha v0.2.97.28 (circa 2012), CPS-2 only.\nExists for RAM-constrained platforms (3DS, embedded).\n\nCPS-2 has no system BIOS. Each game's ROM set is self-contained:\n68000 program ROMs + Z80 sound program + GFX ROMs + QSound samples.\nZero BRF_BIOS entries in entire codebase. No BRF_OPT entries either\n(PLD references stripped from this CPS-2-only build).\n\nQSound emulated in software (qs_c.c). No external QSound DSP ROM needed.\nAll audio data loaded from game ROM ZIP.\n\nROMs loaded from content directory (g_rom_dir, libretro.cpp:969).\ng_system_dir used only for hiscore.dat (hiscore.c:228-232).\n\nHiscore support gated by fba2012cps2_hiscores core option\n(libretro.cpp:561-563) and per-game BDF_HISCORE_SUPPORTED flag.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fbalpha2012_cps2",
        "source_commit": "e3f3ae46f120228b74d41e2b2862f1fbf1d7eb5b",
        "systems": [
          "cps2"
        ],
        "type": "libretro",
        "upstream": "https://www.fbalpha.com"
      }
    },
    {
      "id": "fbalpha2012_cps3",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v0.2.97.29",
        "cores": [
          "fbalpha2012_cps3"
        ],
        "display_name": "Arcade (FB Alpha 2012 CPS-3)",
        "emulator": "FB Alpha 2012 CPS-3",
        "exclusion_note": "CPS-3 BIOS ROMs (SH-2 flash, 18 variants) are part of each game's ROM set ZIP archive, not standalone system files. Users obtain them as part of the arcade ROM set, not separately.",
        "files": [
          {
            "description": "High score persistence database",
            "name": "hiscore.dat",
            "note": "Loaded from save directory (g_save_dir)",
            "required": false,
            "source_ref": "svn-current/trunk/src/burn/hiscore.cpp:116-118"
          }
        ],
        "notes": "Frozen snapshot of Final Burn Alpha v0.2.97.29 (circa 2012), CPS-3 only.\nExists for RAM-constrained platforms. Most users should use FBNeo.\n\nCPS-3 uses a Hitachi SH-2 CPU with per-game, per-region BIOS ROMs.\nEach BIOS is a 512 KB (0x080000) 29F400 flash chip dump, region-locked.\nBIOS ROMs are marked BRF_ESS | BRF_BIOS in the ROM definitions.\n\nBIOS is loaded into RomBios (cps3run.cpp:1048-1064), byte-swapped to\nlittle-endian, then decrypted via cps3_decrypt_bios() (cps3run.cpp:255).\nThe SH-2 boots from BIOS, which initializes hardware and loads the game\nprogram from simulated flash/CD-ROM.\n\nBIOS files are INSIDE the game ROM set ZIP (arcade standard), not separate\nsystem directory files. Each game variant has its own region BIOS.\n\nUnique BIOS ROMs across all ROM sets (CRC32 from source):\n  sfiii_usa.29f400.u2           0xfb172a8e  SF3: New Generation (USA)\n  sfiii_japan.29f400.u2         0x74205250  SF3: New Generation (Japan)\n  sfiii_hispanic.29f400.u2      0xd2b3cd48  SF3: New Generation (Hispanic)\n  sfiii_asia_nocd.29f400.u2     0x73e32463  SF3: New Generation (Asia NoCD)\n  sfiii2_usa.29f400.u2          0x75dd72e0  SF3: 2nd Impact (USA)\n  sfiii2_japan.29f400.u2        0xfaea0a3e  SF3: 2nd Impact (Japan)\n  sfiii2_asia_nocd.29f400.u2    0xfd297c0d  SF3: 2nd Impact (Asia NoCD)\n  sfiii3_euro.29f400.u2         0x30bbf293  SF3: 3rd Strike (Euro)\n  sfiii3_usa.29f400.u2          0xecc545c1  SF3: 3rd Strike (USA)\n  sfiii3_japan_nocd.29f400.u2   0x1edc6366  SF3: 3rd Strike (Japan NoCD)\n  jojo_usa.29f400.u2            0x8d40f7be  JoJo's Venture (USA)\n  jojo_japan.29f400.u2          0x02778f60  JoJo's Venture (Japan)\n  jojo_asia_nocd.29f400.u2      0x05b4f953  JoJo's Venture (Asia NoCD)\n  jojoba_japan.29f400.u2        0x3085478c  JoJo's Bizarre Adventure (Japan)\n  jojoba_japan_nocd.29f400.u2   0x4dab19f5  JoJo's Bizarre Adventure (Japan NoCD)\n  jojoba_euro_nocd.29f400.u2    0x1ee2d679  JoJo's Bizarre Adventure (Euro NoCD)\n  redearth_euro.29f400.u2       0x02e0f336  Red Earth (Euro)\n  warzard_japan.29f400.u2       0xf8e2f0c6  Warzard (Japan)\n\n18 unique BIOS ROMs, all 512 KB, all region-specific.\nThese are arcade ROM set components, not user-supplied BIOS files.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fbalpha2012_cps3",
        "source_commit": "57f8015c2e0cdebcf42d3add2c314bb7448f9421",
        "systems": [
          "cps3"
        ],
        "type": "libretro",
        "upstream": "https://www.fbalpha.com"
      }
    },
    {
      "id": "fbalpha2012_neogeo",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v0.2.97.29",
        "cores": [
          "fbalpha2012_neogeo"
        ],
        "display_name": "Arcade (FB Alpha 2012 Neo Geo)",
        "emulator": "FB Alpha 2012 Neo Geo",
        "exclusion_note": "Neo Geo BIOS is a parent ROM set (neogeo.zip) placed in the ROM directory alongside game ZIPs. Not a system directory file — follows arcade ROM set convention.",
        "files": [],
        "notes": "Frozen snapshot of Final Burn Alpha v0.2.97.29 (circa 2012), Neo Geo only.\nExists for RAM-constrained platforms. Most users should use FBNeo.\n\nNeo Geo requires a BIOS ROM set (neogeo.zip) placed alongside game ROMs.\nThe BIOS set contains ~35 variants (d_neogeo.cpp:903-981), all BRF_BIOS:\n\n68K main BIOS (BRF_SELECT, one active at a time):\n  asia-s3.rom       0x91b64be3  MVS Asia/Europe ver. 6 (default)\n  sp-s2.sp1         0x9036d879  MVS Asia/Europe ver. 5\n  sp-s.sp1          0xc7f2fa45  MVS Asia/Europe ver. 3 (4 slot)\n  sp-u2.sp1         0xe72943de  MVS USA ver. 5 (2 slot)\n  sp-e.sp1          0x2723a5b5  MVS USA ver. 5 (6 slot)\n  vs-bios.rom       0xf0e8f27d  MVS Japan ver. 6\n  sp-j2.sp1         0xacede59c  MVS Japan ver. 5\n  sp1.jipan.1024    0x9fb0abe4  MVS Japan ver. 3 (4 slot)\n  sp-45.sp1         0x03cc9f6a  NEO-MVH MV1C (512 KB)\n  japan-j3.bin      0xdff6d41f  MVS Japan (J3)\n  neo-po.bin        0x16d0c132  AES Japan\n  neo-epo.bin       0xd27a71f1  AES Asia\n  neodebug.bin      0x698ebb7d  Development Kit\n  sp-1v1_3db8c.bin  0x162f0ebe  Deck ver. 6 (Git Ver 1.3)\n  uni-bios_4_0.rom  0xa7aab458  Universe BIOS 4.0\n  (+ 14 more Universe BIOS variants, versions 1.0-3.3)\n  neopen.sp1        0xcb915e76  NeoOpen BIOS v0.1 beta\n\nSystem ROMs (always required):\n  sm1.sm1           0x94416d67  Z80 BIOS (sound program)\n  sfix.sfix         0xc2ea0cfd  Text layer tiles (fix layer)\n  000-lo.lo         0x5a86cff2  Zoom table\n\nSpecial sets:\n  236-bios.sp1      0x853e6b96  Trackball BIOS\n  sp-4x.sp1         0xb4590283  PCB BIOS\n  spj.sp1           0x148dd727  PCB BIOS (Japan)\n  neocd.bin          0xdf9de490  Neo Geo CD BIOS\n\nneogeo.zip is a parent ROM set, loaded from g_rom_dir alongside game ZIPs.\ng_system_dir is set (libretro.cpp:3016) but never used for file loading.\n\nThe .info note \"BIOS files must be inside the ROM directory\" is accurate here:\nneogeo.zip must be in the same directory as game ROM ZIPs.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fbalpha2012_neogeo",
        "source_commit": "ce4949b1557cc7134e736342801ed25b2f3bd790",
        "systems": [
          "neogeo"
        ],
        "type": "libretro",
        "upstream": "https://www.fbalpha.com"
      }
    },
    {
      "id": "fbneo",
      "profile": {
        "archive_prefix": "fbneo",
        "core_classification": "official_port",
        "core_version": "v1.0.0.2",
        "cores": [
          "fbneo"
        ],
        "data_directories": [
          {
            "destination": "fbneo/cheats",
            "ref": "fbneo-cheats",
            "source_ref": "src/burner/conc.cpp:167"
          },
          {
            "destination": "fbneo",
            "ref": "fbneo-samples",
            "source_ref": "src/burn/snd/samples.cpp:21-35"
          }
        ],
        "display_name": "Arcade (FinalBurn Neo)",
        "emulator": "FinalBurn Neo",
        "files": [
          {
            "archive": "neogeo.zip",
            "crc32": "91b64be3",
            "name": "sp-s3.sp1",
            "note": "MVS Asia/Europe ver. 6 (1 slot) - default BIOS",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1624",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "9036d879",
            "name": "sp-s2.sp1",
            "note": "MVS Asia/Europe ver. 5 (1 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1625",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "c7f2fa45",
            "name": "sp-s.sp1",
            "note": "MVS Asia/Europe ver. 3 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1626",
            "system": "snk-neogeo-mvs"
          },
          {
            "aliases": [
              "usa_2slt.bin"
            ],
            "archive": "neogeo.zip",
            "crc32": "e72943de",
            "name": "sp-u2.sp1",
            "note": "MVS USA ver. 5 (2 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1627",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "62f021f4",
            "name": "sp1-u2",
            "note": "MVS USA ver. 5 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1628",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2723a5b5",
            "name": "sp-e.sp1",
            "note": "MVS USA ver. 5 (6 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1629",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "1179a30f",
            "name": "sp1-u4.bin",
            "note": "MVS USA (U4)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1630",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2025b7a2",
            "name": "sp1-u3.bin",
            "note": "MVS USA (U3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1631",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "f0e8f27d",
            "name": "vs-bios.rom",
            "note": "MVS Japan ver. 6",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1632",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "acede59c",
            "name": "sp-j2.sp1",
            "note": "MVS Japan ver. 5",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1633",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "9fb0abe4",
            "name": "sp1.jipan.1024",
            "note": "MVS Japan ver. 3 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1634",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "03cc9f6a",
            "name": "sp-45.sp1",
            "note": "NEO-MVH MV1C (Asia)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1635",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "486cb450",
            "name": "sp-j3.sp1",
            "note": "NEO-MVH MV1C (Japan)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1636",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "dff6d41f",
            "name": "japan-j3.bin",
            "note": "MVS Japan (J3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1637",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "fbc6d469",
            "name": "sp1-j3.bin",
            "note": "MVS Japan (J3, alt)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1638",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "16d0c132",
            "name": "neo-po.bin",
            "note": "AES Japan",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1640",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "d27a71f1",
            "name": "neo-epo.bin",
            "note": "AES Asia",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1641",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "698ebb7d",
            "name": "neodebug.bin",
            "note": "Development Kit BIOS",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1642",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "162f0ebe",
            "name": "sp-1v1_3db8c.bin",
            "note": "Deck ver. 6 (Git Ver 1.3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1648",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a7aab458",
            "name": "uni-bios_4_0.rom",
            "note": "Universe BIOS ver. 4.0 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1649",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "24858466",
            "name": "uni-bios_3_3.rom",
            "note": "Universe BIOS ver. 3.3 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1650",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a4e8b9b3",
            "name": "uni-bios_3_2.rom",
            "note": "Universe BIOS ver. 3.2 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1651",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0c58093f",
            "name": "uni-bios_3_1.rom",
            "note": "Universe BIOS ver. 3.1 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1652",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a97c89a9",
            "name": "uni-bios_3_0.rom",
            "note": "Universe BIOS ver. 3.0 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1653",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "27664eb5",
            "name": "uni-bios_2_3.rom",
            "note": "Universe BIOS ver. 2.3 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1654",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "601720ae",
            "name": "uni-bios_2_3o.rom",
            "note": "Universe BIOS ver. 2.3 older (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1655",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2d50996a",
            "name": "uni-bios_2_2.rom",
            "note": "Universe BIOS ver. 2.2 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1656",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "8dabf76b",
            "name": "uni-bios_2_1.rom",
            "note": "Universe BIOS ver. 2.1 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1657",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0c12c2ad",
            "name": "uni-bios_2_0.rom",
            "note": "Universe BIOS ver. 2.0 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1658",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "b24b44a0",
            "name": "uni-bios_1_3.rom",
            "note": "Universe BIOS ver. 1.3 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1659",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "4fa698e9",
            "name": "uni-bios_1_2.rom",
            "note": "Universe BIOS ver. 1.2 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1660",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "e19d3ce9",
            "name": "uni-bios_1_2o.rom",
            "note": "Universe BIOS ver. 1.2 older (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1661",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "5dda0d84",
            "name": "uni-bios_1_1.rom",
            "note": "Universe BIOS ver. 1.1 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1662",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0ce453a0",
            "name": "uni-bios_1_0.rom",
            "note": "Universe BIOS ver. 1.0 (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1663",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "cb915e76",
            "name": "neopen.sp1",
            "note": "NeoOpen BIOS v0.1 beta (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1665",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "94416d67",
            "name": "sm1.sm1",
            "note": "Z80 sound BIOS",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1672",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "c2ea0cfd",
            "name": "sfix.sfix",
            "note": "Text layer fix tiles",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1673",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1674",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "853e6b96",
            "name": "236-bios.sp1",
            "note": "Trackball BIOS / Asia MV1B 263",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1764",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "02bf4426",
            "name": "236-bios_japan_hack.sp1",
            "note": "Trackball BIOS / Japan (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1765",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "b4590283",
            "name": "sp-4x.sp1",
            "note": "PCB BIOS for Metal Slug 5 PCB and SVC Chaos PCB",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1811",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "148dd727",
            "name": "spj.sp1",
            "note": "PCB BIOS for KOF 2003 PCB",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1899",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "df9de490",
            "name": "neocd.bin",
            "note": "Neo Geo CD/CDZ top-loading BIOS",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1983",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "42f6b6c4",
            "name": "neocd_sz.rom",
            "note": "Neo Geo CDZ custom BIOS by SMKDan",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1984",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "ff3abc59",
            "name": "uni-bioscd33.rom",
            "note": "Universe BIOS CD ver. 3.3 (hack)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1985",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "0ffb3127",
            "name": "uni-bioscd32.rom",
            "note": "Universe BIOS CD ver. 3.2 (hack)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1986",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table (shared with MVS)",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1988",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "pgm.zip",
            "crc32": "1a7123a0",
            "name": "pgm_t01s.rom",
            "note": "8x8 text layer tiles",
            "required": true,
            "size": 2097152,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:880",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "45ae7159",
            "name": "pgm_m01s.rom",
            "note": "ICS2115 sound samples",
            "required": true,
            "size": 2097152,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:881",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "e42b166e",
            "name": "pgm_p01s.u20",
            "note": "68K BIOS V0001 older (02/26/97)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:883",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "78c15fa2",
            "name": "pgm_p02s.u20",
            "note": "68K BIOS V0001 newer (07/10/97)",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:884",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "b3cc5c8f",
            "name": "ddp3_bios.u37",
            "note": "68K BIOS V0001 custom (07/17/97) for DoDonPachi III",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:886",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "517cf7a2",
            "name": "bios.u42",
            "note": "68K BIOS V0001-01J custom (02/25/03) for The Gladiator",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:887",
            "system": "igs-pgm"
          },
          {
            "archive": "pgm.zip",
            "crc32": "3346401f",
            "name": "svg_bios.u49",
            "note": "68K BIOS V0001 custom (05/13/05) for SVG PCB",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/pgm/d_pgm.cpp:928",
            "system": "igs-pgm"
          },
          {
            "archive": "sfiii.zip",
            "crc32": "27699ddc",
            "name": "sfiii_euro.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact Europe",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:336",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiiiu.zip",
            "crc32": "fb172a8e",
            "name": "sfiii_usa_region_b1.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact USA",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:351",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiiia.zip",
            "crc32": "cbd28de7",
            "name": "sfiii_asia_region_bd.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact Asia",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:366",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiiij.zip",
            "crc32": "74205250",
            "name": "sfiii_japan.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:381",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiiih.zip",
            "crc32": "d2b3cd48",
            "name": "sfiii_hispanic.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact Hispanic",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:396",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiiin.zip",
            "crc32": "ca2b715f",
            "name": "sfiii_asia_nocd.29f400.u2",
            "note": "SH-2 BIOS, SF3 1st Impact Asia (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:411",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii2.zip",
            "crc32": "75dd72e0",
            "name": "sfiii2_usa.29f400.u2",
            "note": "SH-2 BIOS, SF3 2nd Impact USA",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:475",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii2j.zip",
            "crc32": "faea0a3e",
            "name": "sfiii2_japan.29f400.u2",
            "note": "SH-2 BIOS, SF3 2nd Impact Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:490",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii2h.zip",
            "crc32": "5c799526",
            "name": "sfiii2_hispanic.29f400.u2",
            "note": "SH-2 BIOS, SF3 2nd Impact Hispanic",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:505",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii2n.zip",
            "crc32": "fd297c0d",
            "name": "sfiii2_asia_nocd.29f400.u2",
            "note": "SH-2 BIOS, SF3 2nd Impact Asia (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:520",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii3.zip",
            "crc32": "30bbf293",
            "name": "sfiii3_euro.29f400.u2",
            "note": "SH-2 BIOS, SF3 3rd Strike Europe",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:579",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii3u.zip",
            "crc32": "ecc545c1",
            "name": "sfiii3_usa.29f400.u2",
            "note": "SH-2 BIOS, SF3 3rd Strike USA",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:594",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii3j.zip",
            "crc32": "63f23d1f",
            "name": "sfiii3_japan.29f400.u2",
            "note": "SH-2 BIOS, SF3 3rd Strike Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:609",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii3n.zip",
            "crc32": "1edc6366",
            "name": "sfiii3_japan_nocd.29f400.u2",
            "note": "SH-2 BIOS, SF3 3rd Strike Japan (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:624",
            "system": "capcom-cps3"
          },
          {
            "archive": "sfiii3na.zip",
            "crc32": "a12ebcd1",
            "name": "sfiii3_asia_nocd.29f400.u2",
            "note": "SH-2 BIOS, SF3 3rd Strike Asia (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:637",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojo.zip",
            "crc32": "513e40ec",
            "name": "jojo_euro.29f400.u2",
            "note": "SH-2 BIOS, JoJo's Venture Europe",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:799",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojou.zip",
            "crc32": "8d40f7be",
            "name": "jojo_usa.29f400.u2",
            "note": "SH-2 BIOS, JoJo's Venture USA",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:814",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojoa.zip",
            "crc32": "789aa72a",
            "name": "jojo_asia.29f400.u2",
            "note": "SH-2 BIOS, JoJo's Venture Asia",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:829",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojoj.zip",
            "crc32": "02778f60",
            "name": "jojo_japan.29f400.u2",
            "note": "SH-2 BIOS, JoJo's Venture Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:844",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojon.zip",
            "crc32": "05b4f953",
            "name": "jojo_asia_nocd.29f400.u2",
            "note": "SH-2 BIOS, JoJo's Venture Asia (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:859",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojobar1.zip",
            "crc32": "63cc8800",
            "name": "jojoba_euro.29f400.u2",
            "note": "SH-2 BIOS, JoJo's BA: Heritage Europe",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1184",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojobajr1.zip",
            "crc32": "3085478c",
            "name": "jojoba_japan.29f400.u2",
            "note": "SH-2 BIOS, JoJo's BA: Heritage Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1199",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojoba.zip",
            "crc32": "1ee2d679",
            "name": "jojoba_euro_nocd.29f400.u2",
            "note": "SH-2 BIOS, JoJo's BA: Heritage Europe (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1120",
            "system": "capcom-cps3"
          },
          {
            "archive": "jojoban.zip",
            "crc32": "4dab19f5",
            "name": "jojoba_japan_nocd.29f400.u2",
            "note": "SH-2 BIOS, JoJo's BA: Heritage Japan (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1133",
            "system": "capcom-cps3"
          },
          {
            "archive": "redearth.zip",
            "crc32": "02e0f336",
            "name": "redearth_euro.29f400.u2",
            "note": "SH-2 BIOS, Red Earth Europe",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1362",
            "system": "capcom-cps3"
          },
          {
            "archive": "warzard.zip",
            "crc32": "f8e2f0c6",
            "name": "warzard_japan.29f400.u2",
            "note": "SH-2 BIOS, Warzard Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1377",
            "system": "capcom-cps3"
          },
          {
            "archive": "redearthn.zip",
            "crc32": "7a4f0851",
            "name": "redearth_asia_nocd.29f400.u2",
            "note": "SH-2 BIOS, Red Earth Asia (No CD)",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/cps3/d_cps3.cpp:1392",
            "system": "capcom-cps3"
          },
          {
            "archive": "skns.zip",
            "crc32": "7e2b836c",
            "name": "sknsj1.u10",
            "note": "SKNS BIOS Japan",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/pst90s/d_suprnova.cpp:1846",
            "system": "super-kaneko-nova"
          },
          {
            "archive": "skns.zip",
            "crc32": "e2b9d7d1",
            "name": "sknse2.u10",
            "note": "SKNS BIOS Europe",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/pst90s/d_suprnova.cpp:1847",
            "system": "super-kaneko-nova"
          },
          {
            "archive": "skns.zip",
            "crc32": "745e5212",
            "name": "sknsa1.u10",
            "note": "SKNS BIOS Asia",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/pst90s/d_suprnova.cpp:1848",
            "system": "super-kaneko-nova"
          },
          {
            "archive": "skns.zip",
            "crc32": "384d21ec",
            "name": "sknsu1.u10",
            "note": "SKNS BIOS USA",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/pst90s/d_suprnova.cpp:1849",
            "system": "super-kaneko-nova"
          },
          {
            "archive": "skns.zip",
            "crc32": "ff1c9f79",
            "name": "sknsk1.u10",
            "note": "SKNS BIOS Korea",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/pst90s/d_suprnova.cpp:1850",
            "system": "super-kaneko-nova"
          },
          {
            "archive": "channelf.zip",
            "crc32": "9c047ba3",
            "name": "sl31254.rom",
            "note": "Channel F BIOS bottom half",
            "required": true,
            "size": 1024,
            "source_ref": "src/burn/drv/channelf/d_channelf.cpp:538",
            "system": "fairchild-channelf"
          },
          {
            "archive": "channelf.zip",
            "crc32": "04694ed9",
            "name": "sl31253.rom",
            "note": "Channel F BIOS top half",
            "required": true,
            "size": 1024,
            "source_ref": "src/burn/drv/channelf/d_channelf.cpp:540",
            "system": "fairchild-channelf"
          },
          {
            "archive": "channelf.zip",
            "crc32": "015c1e38",
            "name": "sl90025.rom",
            "note": "Luxor Video Entertainment System BIOS (top half)",
            "required": false,
            "size": 1024,
            "source_ref": "src/burn/drv/channelf/d_channelf.cpp:541",
            "system": "fairchild-channelf"
          },
          {
            "archive": "coleco.zip",
            "crc32": "3aa93ef3",
            "name": "coleco.rom",
            "note": "ColecoVision BIOS (Coleco, 1982)",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/coleco/d_coleco.cpp:1070",
            "system": "coleco-colecovision"
          },
          {
            "archive": "coleco.zip",
            "crc32": "39bb16fc",
            "name": "colecoa.rom",
            "note": "ColecoVision BIOS thick characters (Coleco, 1982)",
            "required": false,
            "size": 8192,
            "source_ref": "src/burn/drv/coleco/d_coleco.cpp:1071",
            "system": "coleco-colecovision"
          },
          {
            "archive": "coleco.zip",
            "crc32": "19e91b82",
            "name": "svi603.rom",
            "note": "SVI-603 Coleco Game Adapter (Spectravideo, 1983)",
            "required": false,
            "size": 8192,
            "source_ref": "src/burn/drv/coleco/d_coleco.cpp:1072",
            "system": "coleco-colecovision"
          },
          {
            "archive": "coleco.zip",
            "crc32": "4999abc6",
            "name": "czz50.rom",
            "note": "Chuang Zao Zhe 50 (Bit Corporation, 1986)",
            "required": false,
            "size": 16384,
            "source_ref": "src/burn/drv/coleco/d_coleco.cpp:1073",
            "system": "coleco-colecovision"
          },
          {
            "archive": "spectrum.zip",
            "crc32": "ddee531f",
            "name": "spectrum.rom",
            "note": "ZX Spectrum 48K BIOS",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:181",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec128.zip",
            "crc32": "e76799d2",
            "name": "zx128_0.rom",
            "note": "ZX Spectrum 128K BIOS bank 0",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:188",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec128.zip",
            "crc32": "b96a36be",
            "name": "zx128_1.rom",
            "note": "ZX Spectrum 128K BIOS bank 1",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:189",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec1282a.zip",
            "crc32": "30c9f490",
            "name": "zx128_2a_0.rom",
            "note": "ZX Spectrum +2A BIOS bank 0",
            "required": false,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:196",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec1282a.zip",
            "crc32": "a7916b3f",
            "name": "zx128_2a_1.rom",
            "note": "ZX Spectrum +2A BIOS bank 1",
            "required": false,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:197",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec1282a.zip",
            "crc32": "c9a0b748",
            "name": "zx128_2a_2.rom",
            "note": "ZX Spectrum +2A BIOS bank 2",
            "required": false,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:198",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "spec1282a.zip",
            "crc32": "b88fd6e3",
            "name": "zx128_2a_3.rom",
            "note": "ZX Spectrum +2A BIOS bank 3",
            "required": false,
            "size": 16384,
            "source_ref": "src/burn/drv/spectrum/d_spectrum.cpp:199",
            "system": "sinclair-spectrum"
          },
          {
            "archive": "msx.zip",
            "crc32": "a317e6b4",
            "name": "msx.rom",
            "note": "MSX1 standard BIOS",
            "required": true,
            "size": 32768,
            "source_ref": "src/burn/drv/msx/d_msx.cpp:1773",
            "system": "msx"
          },
          {
            "archive": "msx.zip",
            "crc32": "071135e0",
            "name": "msxj.rom",
            "note": "MSX1 Japanese BIOS",
            "required": false,
            "size": 32768,
            "source_ref": "src/burn/drv/msx/d_msx.cpp:1774",
            "system": "msx"
          },
          {
            "archive": "msx.zip",
            "crc32": "1f6406fb",
            "name": "kanji.rom",
            "note": "MSX Kanji character support",
            "required": false,
            "size": 262144,
            "source_ref": "src/burn/drv/msx/d_msx.cpp:1775",
            "system": "msx"
          },
          {
            "archive": "fdsbios.zip",
            "crc32": "5e607dcf",
            "name": "fdsbios.nes",
            "note": "Famicom Disk System BIOS",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/nes/d_nes.cpp:517",
            "system": "nes-fds"
          },
          {
            "archive": "ngp.zip",
            "crc32": "6232df8d",
            "name": "SNK Neo-Geo Pocket BIOS (1998)(SNK)(en-ja).bin",
            "note": "Neo Geo Pocket (b&w) BIOS",
            "required": true,
            "size": 65536,
            "source_ref": "src/burn/drv/pst90s/d_ngp.cpp:962",
            "system": "snk-neogeo-pocket"
          },
          {
            "archive": "ngp.zip",
            "crc32": "6eeb6f40",
            "name": "SNK Neo-Geo Pocket Color BIOS (1999)(SNK)(en-ja).bin",
            "note": "Neo Geo Pocket Color BIOS",
            "required": true,
            "size": 65536,
            "source_ref": "src/burn/drv/pst90s/d_ngp.cpp:963",
            "system": "snk-neogeo-pocket"
          },
          {
            "archive": "decocass.zip",
            "crc32": "3d33ac34",
            "name": "v0a-.7e",
            "note": "BIOS A Japan, Main M6502",
            "required": true,
            "size": 4096,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3596",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "b66b2c2a",
            "name": "v1-.5a",
            "note": "BIOS A Japan, Sound M6502 (shared across regions)",
            "required": true,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3599",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "238fdb40",
            "name": "v2.3m",
            "note": "BIOS PROM (shared across regions)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3601",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "3b5836b4",
            "name": "v4.10d",
            "note": "BIOS PROM (shared across regions)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3602",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "51eef657",
            "name": "v3.3j",
            "note": "BIOS PROM (shared across regions)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3603",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "2541e34b",
            "name": "dsp-3_p0-a.m9",
            "note": "BIOS A Japan Older, Main M6502 (part 1)",
            "required": false,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3608",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "3bfff5f3",
            "name": "dsp-3_p1-.l9",
            "note": "BIOS A Japan Older, Main M6502 (part 2, shared)",
            "required": false,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3609",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "6c4a891f",
            "name": "rms-3_p2-.c9",
            "note": "BIOS A Japan Older, Sound M6502 (shared)",
            "required": false,
            "size": 1024,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3611",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "539a5a64",
            "name": "dsp-3_p3-.e5",
            "note": "BIOS Older PROM (shared)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3613",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "9014c0fd",
            "name": "rms-3_p4-.f6",
            "note": "BIOS Older PROM (shared)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3614",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "e52089a0",
            "name": "dsp-3_p5-.m4",
            "note": "BIOS Older PROM (shared)",
            "required": false,
            "size": 32,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3615",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "23d929b7",
            "name": "v0b-.7e",
            "note": "BIOS B USA, Main M6502",
            "required": false,
            "size": 4096,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3620",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "b67a91d9",
            "name": "dsp-3_p0-b.m9",
            "note": "BIOS B USA Older, Main M6502",
            "required": false,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3632",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "9f505709",
            "name": "v0c-.7e",
            "note": "BIOS C UK, Main M6502",
            "required": false,
            "size": 4096,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3644",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "c76c4057",
            "name": "dsp-3_p0-c.m9",
            "note": "BIOS C UK Older, Main M6502",
            "required": false,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3656",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "1e0c22b1",
            "name": "v0d-.7e",
            "note": "BIOS D Europe, Main M6502",
            "required": false,
            "size": 4096,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3668",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "4b7d72bc",
            "name": "dsp-3_p0-d.m9",
            "note": "BIOS D Europe Older, Main M6502",
            "required": false,
            "size": 2048,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3680",
            "system": "deco-cassette"
          },
          {
            "archive": "decocass.zip",
            "crc32": "a6df18fd",
            "name": "cassmcu.1c",
            "note": "MCU BIOS, shared across all DECO Cassette regions",
            "required": true,
            "size": 1024,
            "source_ref": "src/burn/drv/dataeast/d_decocass.cpp:3692",
            "system": "deco-cassette"
          },
          {
            "archive": "namcoc69.zip",
            "crc32": "349134d9",
            "name": "c69.bin",
            "note": "C69 MCU internal ROM for Namco NA-1",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/pst90s/d_namcona1.cpp:1346",
            "system": "namco-na1"
          },
          {
            "archive": "namcoc70.zip",
            "crc32": "b4015f23",
            "name": "c70.bin",
            "note": "C70 MCU internal ROM for Namco NA-2",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/pst90s/d_namcona1.cpp:1367",
            "system": "namco-na1"
          },
          {
            "archive": "namcoc75.zip",
            "crc32": "42f539a5",
            "name": "c75.bin",
            "note": "C75 MCU internal ROM for Namco NB-1",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/pst90s/d_namconb1.cpp:1978",
            "system": "namco-nb1"
          },
          {
            "archive": "bubsys.zip",
            "crc32": "f0774fc2",
            "name": "boot.bin",
            "note": "M68000 vectors",
            "required": true,
            "size": 480,
            "source_ref": "src/burn/drv/konami/d_nemesis.cpp:4526",
            "system": "konami-bubsys"
          },
          {
            "archive": "bubsys.zip",
            "crc32": "85c2afc5",
            "name": "400b03.8g",
            "note": "Z80 code",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/konami/d_nemesis.cpp:4528",
            "system": "konami-bubsys"
          },
          {
            "archive": "bubsys.zip",
            "crc32": "5827b1e8",
            "name": "400a1.2b",
            "note": "K005289 wavetable 1",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/konami/d_nemesis.cpp:4530",
            "system": "konami-bubsys"
          },
          {
            "archive": "bubsys.zip",
            "crc32": "2f44f970",
            "name": "400a2.1b",
            "note": "K005289 wavetable 2",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/konami/d_nemesis.cpp:4531",
            "system": "konami-bubsys"
          },
          {
            "archive": "isgsm.zip",
            "crc32": "2292585c",
            "name": "ism2006v00.u1",
            "note": "ISG Selection Master Type 2006 BIOS",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/sega/d_sys16b.cpp:11270",
            "system": "sega-system16b"
          },
          {
            "archive": "nmk004.zip",
            "crc32": "8ae61a09",
            "name": "nmk004.bin",
            "note": "NMK004 TLCS90 internal ROM",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/pst90s/d_nmk16.cpp:6123",
            "system": "nmk16"
          },
          {
            "archive": "cchip.zip",
            "crc32": "43021521",
            "name": "cchip_upd78c11.bin",
            "note": "Taito C-Chip UPD78C11 internal ROM",
            "required": true,
            "size": 4096,
            "source_ref": "src/burn/drv/taito/d_taitof2.cpp:4392",
            "system": "taito-cchip"
          },
          {
            "archive": "midssio.zip",
            "crc32": "e1281ee9",
            "name": "82s123.12d",
            "note": "Midway SSIO sound PROM",
            "required": true,
            "size": 32,
            "source_ref": "src/burn/drv/pre90s/d_mcr.cpp:1630",
            "system": "midway-mcr"
          },
          {
            "archive": "ym2608.zip",
            "crc32": "23c9e0d8",
            "name": "ym2608_adpcm_rom.bin",
            "note": "YM2608 internal ADPCM-A rhythm samples, used by multiple drivers",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/pst90s/d_pipedrm.cpp:876",
            "system": "ym2608"
          },
          {
            "archive": "st010.zip",
            "crc32": "aa11ee2d",
            "name": "st010.bin",
            "note": "Seta ST010 coprocessor microcode",
            "required": true,
            "size": 69632,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:574",
            "system": "snes"
          },
          {
            "archive": "st011.zip",
            "crc32": "34d2952c",
            "name": "st011.bin",
            "note": "Seta ST011 coprocessor microcode",
            "required": true,
            "size": 69632,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:593",
            "system": "snes"
          },
          {
            "archive": "dsp1.zip",
            "crc32": "2838f9f5",
            "name": "dsp1.bin",
            "note": "DSP-1 coprocessor microcode",
            "required": true,
            "size": 10240,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:632",
            "system": "snes"
          },
          {
            "archive": "dsp1b.zip",
            "crc32": "453557e0",
            "name": "dsp1b.bin",
            "note": "DSP-1B coprocessor microcode (revised)",
            "required": true,
            "size": 10240,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:651",
            "system": "snes"
          },
          {
            "archive": "dsp2.zip",
            "crc32": "8e9fbd9b",
            "name": "dsp2.bin",
            "note": "DSP-2 coprocessor microcode",
            "required": true,
            "size": 10240,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:670",
            "system": "snes"
          },
          {
            "archive": "dsp3.zip",
            "crc32": "6b86728a",
            "name": "dsp3.bin",
            "note": "DSP-3 coprocessor microcode",
            "required": true,
            "size": 10240,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:689",
            "system": "snes"
          },
          {
            "archive": "dsp4.zip",
            "crc32": "ce0c7783",
            "name": "dsp4.bin",
            "note": "DSP-4 coprocessor microcode",
            "required": true,
            "size": 10240,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:708",
            "system": "snes"
          },
          {
            "name": "hiscore.dat",
            "note": "High score database, enables persistent high scores across all arcade games",
            "path": "fbneo/hiscore.dat",
            "required": false,
            "source_ref": "src/burn/hiscore.cpp:407"
          },
          {
            "category": "game_data",
            "name": "donpachi.zip",
            "note": "DonPachi CD-quality soundtrack samples (14 WAVs)",
            "path": "fbneo/samples/donpachi.zip",
            "required": false,
            "size": 209000000,
            "source_ref": "src/burn/snd/samples.cpp",
            "storage": "release"
          },
          {
            "category": "game_data",
            "name": "sfz3mix.zip",
            "note": "Street Fighter Zero 3 Mix custom audio samples (43 WAVs)",
            "path": "fbneo/samples/sfz3mix.zip",
            "required": false,
            "size": 116000000,
            "source_ref": "src/burn/snd/samples.cpp",
            "storage": "release"
          },
          {
            "category": "game_data",
            "name": "twotiger.zip",
            "note": "Two Tigers with Journey CD audio samples (2 WAVs)",
            "path": "fbneo/samples/twotiger.zip",
            "required": false,
            "size": 155000000,
            "source_ref": "src/burn/snd/samples.cpp",
            "storage": "release"
          },
          {
            "archive": "gba.zip",
            "crc32": "81977335",
            "name": "gba_bios.bin",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/gba/d_gba.cpp:328"
          },
          {
            "archive": "st018.zip",
            "crc32": "5c403cc5",
            "name": "st018.bin",
            "required": true,
            "size": 163840,
            "source_ref": "src/burn/drv/snes/d_snes.cpp:612"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "88d0be26",
            "name": "136032.205.l13",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1196"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "3c79ef05",
            "name": "136032.206.l12",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1197"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7a29dc07",
            "name": "136032.104.f5",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1198"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7e84972a",
            "name": "136032.101.e3",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1199"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "ebf1e0ae",
            "name": "136032.102.e5",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1200"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "92d6a0b4",
            "name": "136032.103.f7",
            "required": true,
            "size": 235,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1201"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "79021d3c",
            "name": "136032.105.l13",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1205"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "76ee86c4",
            "name": "136032.106.l12",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1206"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7a29dc07",
            "name": "136032.104.f5",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1207"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7e84972a",
            "name": "136032.101.e3",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1208"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "ebf1e0ae",
            "name": "136032.102.e5",
            "required": true,
            "size": 256,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1209"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "92d6a0b4",
            "name": "136032.103.f7",
            "required": true,
            "size": 235,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1210"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "195c54ad",
            "name": "136032.114.j11",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1214"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7275b4dc",
            "name": "136032.115.j10",
            "required": true,
            "size": 16384,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1215"
          },
          {
            "archive": "atarisy1.zip",
            "crc32": "7a29dc07",
            "name": "136032.107.b2",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/atari/d_atarisy1.cpp:1216"
          },
          {
            "archive": "astrocde.zip",
            "crc32": "ebc77f3a",
            "name": "astro.bin",
            "required": true,
            "size": 8192,
            "source_ref": "src/burn/drv/pre90s/d_astrocde.cpp:3034"
          }
        ],
        "logo": "https://raw.githubusercontent.com/finalburnneo/FBNeo/master/projectfiles/xcode/Emulator/Assets.xcassets/AppIcon.appiconset/icon_512.png",
        "notes": "FinalBurn Neo is a multi-system arcade and console emulator. BIOS files are\nexpected as MAME-format ZIP archives containing individual ROM chips. The\nlibretro core searches for BIOS ZIPs in this order\n(src/burner/libretro/libretro.cpp:930-1083):\n  1. {system_dir}/fbneo/patched/{romName}\n  2. {rom_dir}/{romName}\n  3. {rom_dir}/{arcade|consoles}/{romName}\n  4. {system_dir}/fbneo/{romName}\n  5. {system_dir}/fbneo/{arcade|consoles}/{romName}\n  6. {system_dir}/{romName}\n  7. directories listed in rom_path.opt, plain then per-type subdirectories\n\nEach game driver specifies a parent BIOS set via BurnDriver. The BIOS ZIP\nmust contain the individual ROM chip files listed below. CRC32 values from\nBurnRomInfo structs are used to match ROMs inside ZIPs.\n\nNeo Geo games reference \"neogeo\" as parent. The neogeo.zip BIOS set contains\nmultiple selectable BIOS variants (MVS, AES, Universe BIOS). Only one 68K\nBIOS ROM is active at a time (selected via dipswitch), but the Z80 BIOS,\nfix tiles, and zoom table are always required.\n\nCPS-3 games are self-contained: each game ZIP includes its own SH-2 BIOS\nchip. There is no shared cps3.zip. BIOS selection is per-game per-region.\n\nPGM games reference \"pgm\" as parent. The pgm.zip contains shared text tiles,\nsamples, and 68K BIOS ROMs. Some PGM sub-boards use alternate BIOS sets\n(theglad, dmnfrnt, svgpcb, ddp3).\n\nConsole subsystems (Channel F, ColecoVision, Spectrum, MSX, NES/FDS, NGP)\neach have their own BIOS set referenced as parent for their game drivers.\n\nDECO Cassette games reference \"decocass\" as parent. The decocass.zip contains\nmultiple regional BIOS variants (Japan, USA, UK, Europe) with older/newer\nversions for each.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FBNeo",
        "source_commit": "ef1f64b7023bc511858e96b8961f99c18a09f112",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "snk-neogeo-cd",
          "snk-neogeo-pocket",
          "capcom-cps3",
          "igs-pgm",
          "fairchild-channelf",
          "coleco-colecovision",
          "sinclair-spectrum",
          "msx",
          "nes-fds",
          "super-kaneko-nova",
          "deco-cassette",
          "namco-na1",
          "namco-nb1",
          "sega-system16b",
          "konami-bubsys",
          "nmk16",
          "midway-mcr",
          "snes",
          "taito-cchip",
          "ym2608"
        ],
        "type": "libretro",
        "upstream": "https://github.com/finalburnneo/FBNeo"
      }
    },
    {
      "id": "fbneo_cps12",
      "profile": {
        "archive_prefix": "fbneo",
        "core_classification": "official_port",
        "core_version": "v1.0.0.2",
        "cores": [
          "fbneo_cps12"
        ],
        "display_name": "Arcade (FinalBurn Neo) (CPS-1 / CPS-2)",
        "emulator": "FinalBurn Neo (CPS-1/CPS-2)",
        "files": [
          {
            "name": "hiscore.dat",
            "note": "High score database, enables persistent high scores across all arcade games",
            "path": "fbneo/hiscore.dat",
            "required": false,
            "source_ref": "src/burn/hiscore.cpp:407"
          }
        ],
        "notes": "CPS-1/CPS-2 subset of FinalBurn Neo, current codebase (not frozen).\nExists for platforms that cannot run the full FBNeo core.\n\nCPS-1 and CPS-2 have no system BIOS. Each game ROM set is self-contained:\n68000 program + Z80 sound + GFX + QSound samples (CPS-2).\n\nZero BRF_BIOS entries in d_cps1.cpp and d_cps2.cpp. QSound emulated in\nsoftware (qs_c.cpp:QscInit, panning table). No DSP ROM needed.\n\nBoard PLDs (buf1, ioa1, prg1/prg2, rom1, sou1) are BRF_OPT — GAL/PAL\ndumps for hardware preservation, never loaded by the emulator.\n\nhiscore.dat enables persistent high scores across all arcade games.\n\nROM path: game ZIPs loaded from content directory.\nsystem/fbneo/ used for hiscore.dat, samples, cheats, blend files, IPS patches.\n\nneed_fullpath=false, extensions=zip|7z, savestate=deterministic.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FBNeo",
        "source_commit": "ef1f64b7023bc511858e96b8961f99c18a09f112",
        "systems": [
          "cps1",
          "cps2"
        ],
        "type": "libretro",
        "upstream": "https://github.com/finalburnneo/FBNeo"
      }
    },
    {
      "id": "fbneo_neogeo",
      "profile": {
        "archive_prefix": "fbneo",
        "core_classification": "official_port",
        "core_version": "v1.0.0.2",
        "cores": [
          "fbneo_neogeo"
        ],
        "display_name": "Arcade (FinalBurn Neo) (Neo-Geo)",
        "emulator": "FinalBurn Neo (Neo Geo)",
        "files": [
          {
            "archive": "neogeo.zip",
            "crc32": "91b64be3",
            "name": "sp-s3.sp1",
            "note": "MVS Asia/Europe ver. 6 (1 slot) - default BIOS",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1624",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "9036d879",
            "name": "sp-s2.sp1",
            "note": "MVS Asia/Europe ver. 5 (1 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1625",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "c7f2fa45",
            "name": "sp-s.sp1",
            "note": "MVS Asia/Europe ver. 3 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1626",
            "system": "snk-neogeo-mvs"
          },
          {
            "aliases": [
              "usa_2slt.bin"
            ],
            "archive": "neogeo.zip",
            "crc32": "e72943de",
            "name": "sp-u2.sp1",
            "note": "MVS USA ver. 5 (2 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1627",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "62f021f4",
            "name": "sp1-u2",
            "note": "MVS USA ver. 5 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1628",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2723a5b5",
            "name": "sp-e.sp1",
            "note": "MVS USA ver. 5 (6 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1629",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "1179a30f",
            "name": "sp1-u4.bin",
            "note": "MVS USA (U4)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1630",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2025b7a2",
            "name": "sp1-u3.bin",
            "note": "MVS USA (U3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1631",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "f0e8f27d",
            "name": "vs-bios.rom",
            "note": "MVS Japan ver. 6",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1632",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "acede59c",
            "name": "sp-j2.sp1",
            "note": "MVS Japan ver. 5",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1633",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "9fb0abe4",
            "name": "sp1.jipan.1024",
            "note": "MVS Japan ver. 3 (4 slot)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1634",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "03cc9f6a",
            "name": "sp-45.sp1",
            "note": "NEO-MVH MV1C (Asia)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1635",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "486cb450",
            "name": "sp-j3.sp1",
            "note": "NEO-MVH MV1C (Japan)",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1636",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "dff6d41f",
            "name": "japan-j3.bin",
            "note": "MVS Japan (J3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1637",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "fbc6d469",
            "name": "sp1-j3.bin",
            "note": "MVS Japan (J3, alt)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1638",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "16d0c132",
            "name": "neo-po.bin",
            "note": "AES Japan",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1640",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "d27a71f1",
            "name": "neo-epo.bin",
            "note": "AES Asia",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1641",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "698ebb7d",
            "name": "neodebug.bin",
            "note": "Development Kit BIOS",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1642",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "162f0ebe",
            "name": "sp-1v1_3db8c.bin",
            "note": "Deck ver. 6 (Git Ver 1.3)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1648",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a7aab458",
            "name": "uni-bios_4_0.rom",
            "note": "Universe BIOS ver. 4.0",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1649",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "24858466",
            "name": "uni-bios_3_3.rom",
            "note": "Universe BIOS ver. 3.3",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1650",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a4e8b9b3",
            "name": "uni-bios_3_2.rom",
            "note": "Universe BIOS ver. 3.2",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1651",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0c58093f",
            "name": "uni-bios_3_1.rom",
            "note": "Universe BIOS ver. 3.1",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1652",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a97c89a9",
            "name": "uni-bios_3_0.rom",
            "note": "Universe BIOS ver. 3.0",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1653",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "27664eb5",
            "name": "uni-bios_2_3.rom",
            "note": "Universe BIOS ver. 2.3",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1654",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "601720ae",
            "name": "uni-bios_2_3o.rom",
            "note": "Universe BIOS ver. 2.3 (older)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1655",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "2d50996a",
            "name": "uni-bios_2_2.rom",
            "note": "Universe BIOS ver. 2.2",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1656",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "8dabf76b",
            "name": "uni-bios_2_1.rom",
            "note": "Universe BIOS ver. 2.1",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1657",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0c12c2ad",
            "name": "uni-bios_2_0.rom",
            "note": "Universe BIOS ver. 2.0",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1658",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "b24b44a0",
            "name": "uni-bios_1_3.rom",
            "note": "Universe BIOS ver. 1.3",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1659",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "4fa698e9",
            "name": "uni-bios_1_2.rom",
            "note": "Universe BIOS ver. 1.2",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1660",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "e19d3ce9",
            "name": "uni-bios_1_2o.rom",
            "note": "Universe BIOS ver. 1.2 (older)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1661",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "5dda0d84",
            "name": "uni-bios_1_1.rom",
            "note": "Universe BIOS ver. 1.1",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1662",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "0ce453a0",
            "name": "uni-bios_1_0.rom",
            "note": "Universe BIOS ver. 1.0",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1663",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "cb915e76",
            "name": "neopen.sp1",
            "note": "NeoOpen BIOS v0.1 beta",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1665",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "94416d67",
            "name": "sm1.sm1",
            "note": "Z80 sound BIOS",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1672",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "c2ea0cfd",
            "name": "sfix.sfix",
            "note": "Text layer fix tiles",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1673",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1988",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "853e6b96",
            "name": "236-bios.sp1",
            "note": "Trackball BIOS / Asia MV1B 263",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1764",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "02bf4426",
            "name": "236-bios_japan_hack.sp1",
            "note": "Trackball BIOS / Japan (hack)",
            "required": false,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1765",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "b4590283",
            "name": "sp-4x.sp1",
            "note": "PCB BIOS for Metal Slug 5 PCB and SVC Chaos PCB",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1811",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "148dd727",
            "name": "spj.sp1",
            "note": "PCB BIOS for KOF 2003 PCB",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1899",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "df9de490",
            "name": "neocd.bin",
            "note": "Neo Geo CD/CDZ BIOS",
            "required": true,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1983",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "42f6b6c4",
            "name": "neocd_sz.rom",
            "note": "Neo Geo CDZ custom BIOS by SMKDan",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1984",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "ff3abc59",
            "name": "uni-bioscd33.rom",
            "note": "Universe BIOS CD ver. 3.3",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1985",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "0ffb3127",
            "name": "uni-bioscd32.rom",
            "note": "Universe BIOS CD ver. 3.2",
            "required": false,
            "size": 524288,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1986",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table (shared with MVS)",
            "required": true,
            "size": 131072,
            "source_ref": "src/burn/drv/neogeo/d_neogeo.cpp:1988",
            "system": "snk-neogeo-cd"
          },
          {
            "name": "hiscore.dat",
            "note": "High score database, enables persistent high scores",
            "path": "fbneo/hiscore.dat",
            "required": false,
            "source_ref": "src/burn/hiscore.cpp:407"
          }
        ],
        "notes": "Neo Geo subset of FinalBurn Neo, current codebase (not frozen).\nBuilt with SUBSET=neogeo, includes only d_neogeo.cpp drivers.\nExists for platforms that cannot run the full FBNeo core.\n\nNeo Geo games reference \"neogeo\" as parent ROM set. The BIOS ZIP\nmust be alongside game ZIPs or in system_dir/fbneo/.\nSearch order (libretro.cpp:930-1083):\n  1. {system_dir}/fbneo/patched/{romName}\n  2. {rom_dir}/{romName}\n  3. {rom_dir}/{arcade|consoles}/{romName}\n  4. {system_dir}/fbneo/{romName}\n  5. {system_dir}/fbneo/{arcade|consoles}/{romName}\n  6. {system_dir}/{romName}\n  7. directories listed in rom_path.opt, plain then per-type subdirectories\n\nneogeo.zip contains multiple selectable 68K BIOS variants (MVS, AES,\nUniverse BIOS). One 68K BIOS active at a time (dipswitch). Z80 BIOS,\nfix tiles, and zoom table always required.\n\nNeo Geo CDZ uses neocdz.zip with parent \"neogeo\". CD/CDZ BIOS plus\nzoom table.\n\nhiscore.dat loaded from system_dir/fbneo/ (hiscore.cpp:407).\n\nneed_fullpath=false, extensions=zip|7z|cue|ccd, savestate=deterministic.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FBNeo",
        "source_commit": "ef1f64b7023bc511858e96b8961f99c18a09f112",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "snk-neogeo-cd"
        ],
        "type": "libretro",
        "upstream": "https://github.com/finalburnneo/FBNeo"
      }
    },
    {
      "id": "fceumm",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "fceumm"
        ],
        "display_name": "Nintendo - NES / Famicom (FCEUmm)",
        "emulator": "FCEUmm",
        "files": [
          {
            "description": "FDS BIOS ROM",
            "name": "disksys.rom",
            "note": "Loaded at 0xE000, mapped as 8 KB PRG bank 0. Load fails if missing or short read.",
            "required": true,
            "size": 8192,
            "source_ref": "src/fds.c:680-715 (FDSLoad), src/general.c:65-67 (FCEUMKF_FDSROM)",
            "system": "nintendo-fds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Genie add-on cartridge ROM",
            "name": "gamegenie.nes",
            "note": "iNES format ROM (4 KB PRG + 256 bytes CHR). Core option disabled by default. Only applies to cartridge games.",
            "required": false,
            "source_ref": "src/cart.c:401-455 (FCEU_OpenGenie), src/general.c:61-63 (FCEUMKF_GGROM)",
            "system": "nintendo-nes"
          },
          {
            "description": "External NES color palette",
            "name": "nes.pal",
            "note": "RGB triplets (64 standard or 512 with de-emphasis). Only loaded when palette core option is set to Custom.",
            "required": false,
            "source_ref": "src/palette.c:170-200 (FCEU_LoadGamePalette), src/general.c:69-71 (FCEUMKF_PALETTE), src/drivers/libretro/libretro.c:1991-2000",
            "system": "nintendo-nes"
          }
        ],
        "notes": "FCEUmm (FCE Ultra mappers modified) is a NES/Famicom emulator forked from\nFCEU Ultra by CaH4e3. FDS games require the FDS BIOS ROM (disksys.rom).\nGame Genie emulation requires gamegenie.nes when the core option is enabled.\nAn external palette file (nes.pal) overrides the built-in palette when the\ncore option is set to Custom.\n\nFile path construction: src/general.c FCEU_MakeFName() joins the system\ndirectory with each filename directly - no subdirectories.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-fceumm",
        "source_commit": "b5e3566515c27dc66c9c20572171673126532e06",
        "systems": [
          "nintendo-nes",
          "nintendo-fds"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/fceumm/"
      }
    },
    {
      "id": "ffmpeg",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "Git",
        "cores": [
          "ffmpeg"
        ],
        "display_name": "FFmpeg",
        "emulator": "FFmpeg",
        "files": [],
        "notes": "Media player core using libavcodec, libavformat, and libswscale.\nPlays video and audio files within RetroArch with an audio visualizer.\nNo external files required. Codecs are linked at build time.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FFmpeg",
        "source_commit": "4920879d2f09a78cdf855403c349457cee1c31da",
        "systems": [],
        "type": "libretro",
        "upstream": "https://www.ffmpeg.org/"
      }
    },
    {
      "id": "fixgb",
      "profile": {
        "core_classification": "official_port",
        "core_version": "Alpha v0.8.2",
        "cores": [
          "fixgb"
        ],
        "display_name": "Nintendo - Game Boy / Color (fixGB)",
        "emulator": "fixGB",
        "files": [
          {
            "description": "Game Boy Color (CGB-001) boot ROM",
            "hle_fallback": true,
            "md5": "dbfce9db9deaa2567f6a84fde55f9680",
            "name": "gbc_bios.bin",
            "note": "Minimum 0x900 (2304) bytes. Only first 0x900 bytes read. Disabled via memDisableCGBBootrom() on register write.",
            "required": false,
            "sha1": "1293d68bf9643bc4f36954c1e80e38f39864528d",
            "size": 2304,
            "source_ref": "libretro/libretro.c:246-254 (doOpenCGBBootrom), mem.c:567-586 (memInitCGBBootrom)",
            "system": "nintendo-gbc",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Game Boy / Game Boy Color emulator by FIX94. Supports .gb, .gbc, and\n.gbs (Game Boy Sound) files. FIX94 maintains both standalone and\nlibretro versions in the same upstream repo.\n\nOptionally loads gbc_bios.bin from the system directory. Validates\nfile size (>= 0x900 bytes), reads the first 0x900 bytes into\nmemCGBBootrom[], sets cgbBootromEnabled. Enables the GBC startup\nanimation and palette selection for DMG games.\n\nWithout the boot ROM, the core skips the boot sequence and starts\ngames directly. No DMG boot ROM support in the source.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fixGB",
        "source_commit": "ecbaee13b64a0308539e73d0eec1847925898e5d",
        "systems": [
          "nintendo-gbc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/FIX94/fixGB"
      }
    },
    {
      "id": "fixnes",
      "profile": {
        "core_classification": "official_port",
        "core_version": "Alpha v1.3.1",
        "cores": [
          "fixnes"
        ],
        "display_name": "Nintendo - NES / Famicom (fixNES)",
        "emulator": "fixNES",
        "files": [
          {
            "description": "Family Computer Disk System BIOS",
            "mode": "both",
            "name": "disksys.rom",
            "required": true,
            "size": 8192,
            "source_ref": "mapper.c:87-110 (mapperInitFDS), libretro/libretro.c:277-285 (doOpenFDSBIOS)",
            "system": "nintendo-fds",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "fixNES is an NES/Famicom emulator by FIX94 (same author as fixGB).\n\nFDS games require disksys.rom (8192 bytes) in the system directory.\nmapperInitFDS() in mapper.c:87-110 opens the file, validates exact\nsize 0x2000, reads into fdsBIOS[]. Returns false if missing or wrong\nsize. No hash validation.\n\nRegular NES/NSF games need no BIOS.\n\nNo other system files loaded. system_dir accessed only for disksys.rom\n(libretro/libretro.c:277-285, doOpenFDSBIOS).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fixNES",
        "source_commit": "d5d8cba579e139fec823f64636a972d1acdf782c",
        "systems": [
          "nintendo-nes",
          "nintendo-fds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/FIX94/fixNES"
      }
    },
    {
      "id": "flycast",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "flycast",
          "flycast_dev",
          "flycastvl"
        ],
        "display_name": "Sega - Dreamcast/Naomi (Flycast)",
        "emulator": "Flycast",
        "files": [
          {
            "aliases": [
              "dc_bios.bin",
              "dc_boot.bin.bin",
              "dc_bios.bin.bin"
            ],
            "hle_fallback": true,
            "name": "dc_boot.bin",
            "note": "Dreamcast boot ROM. HLE BIOS (reios) used as fallback. Code searches prefix + boot.bin, boot.bin.bin, bios.bin, bios.bin.bin sequentially.",
            "path": "dc/dc_boot.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "core/hw/holly/sb_mem.cpp:219,55-57",
            "system": "sega-dreamcast"
          },
          {
            "aliases": [
              "dc_flash_wb.bin",
              "dc_flash.bin",
              "dc_flash.bin.bin"
            ],
            "hle_fallback": true,
            "name": "dc_nvmem.bin",
            "note": "Dreamcast flash memory / NVRAM. Created if not found. Code searches prefix + nvmem.bin, flash_wb.bin, flash.bin, flash.bin.bin sequentially.",
            "path": "dc/dc_nvmem.bin",
            "required": false,
            "size": 131072,
            "source_ref": "core/hw/holly/sb_mem.cpp:231,196-213",
            "system": "sega-dreamcast"
          },
          {
            "name": "font.bin",
            "note": "Dreamcast system font for HLE BIOS text rendering. Built-in font used as fallback.",
            "path": "dc/font.bin",
            "required": false,
            "source_ref": "core/reios/reios.cpp:737-753",
            "system": "sega-dreamcast"
          },
          {
            "aliases": [
              "naomi_bios.bin",
              "naomi_boot.bin.bin",
              "naomi_bios.bin.bin",
              "epr-21576d.bin"
            ],
            "name": "naomi_boot.bin",
            "note": "NAOMI boot ROM (flat binary). Alternative to naomi.zip. epr-21576d.bin is searched without prefix.",
            "path": "dc/naomi_boot.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "core/hw/holly/sb_mem.cpp:219,58-59",
            "system": "sega-naomi"
          },
          {
            "name": "naomi.zip",
            "note": "NAOMI system BIOS archive (MAME format). Contains region-specific BIOS ROMs: epr-21576h.ic27 (Japan), epr-21577h.ic27 (USA), epr-21578h.ic27 (Export), epr-21579d.ic27 (Korea). Also used for NAOMI 2 games in the libretro port (no separate naomi2.zip).\n",
            "path": "dc/naomi.zip",
            "required": true,
            "source_ref": "core/hw/naomi/naomi_roms.h:133-188",
            "system": "sega-naomi"
          },
          {
            "name": "f355bios.zip",
            "note": "Ferrari F355 Challenge BIOS. Japan/USA/Export variants.",
            "path": "dc/f355bios.zip",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.h:96-103",
            "system": "sega-naomi"
          },
          {
            "name": "f355dlx.zip",
            "note": "Ferrari F355 Challenge Deluxe BIOS. Japan/USA/Export variants.",
            "path": "dc/f355dlx.zip",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.h:105-119",
            "system": "sega-naomi"
          },
          {
            "name": "hod2bios.zip",
            "note": "House of the Dead 2 BIOS. Japan/USA/Export variants.",
            "path": "dc/hod2bios.zip",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.h:121-131",
            "system": "sega-naomi"
          },
          {
            "name": "awbios.zip",
            "note": "Atomiswave system BIOS archive (MAME format). Contains bios0.ic23 (Sammy, 128 KB).",
            "path": "dc/awbios.zip",
            "required": true,
            "source_ref": "core/hw/naomi/naomi_roms.h:87-94",
            "system": "sega-atomiswave"
          }
        ],
        "logo": "https://raw.githubusercontent.com/flyinghead/flycast/master/shell/linux/flycast.png",
        "notes": "Flycast has a built-in HLE BIOS (reios) for Dreamcast that can boot most\ngames without real BIOS files. Arcade systems (NAOMI, Atomiswave) require\nMAME-format BIOS ROM archives.\n\nThe libretro port (libretro/flycast, last updated 2025-12-12) is significantly\nbehind upstream (flyinghead/flycast). Key divergences:\n- NAOMI 2 has no separate BIOS entry or platform detection; NAOMI 2 games\n  run as NAOMI using naomi.zip. Upstream has naomi2.zip with dedicated ROMs.\n- System SP is not supported. Upstream has segasp.zip support.\n- The n2_ prefix for NAOMI 2 flat boot ROMs is dead code (DC_PLATFORM_NAOMI2\n  is never assigned to settings.System in the libretro port).\n- Flash search includes legacy names (%flash_wb.bin, %flash.bin, %flash.bin.bin)\n  that upstream has removed.\n- NAOMI flat boot ROM search includes epr-21576d.bin fallback not in upstream.\n\nBIOS file search uses prefix + name pattern. The libretro port appends \"dc/\"\nto the system directory (libretro.cpp:1972). All files below are relative\nto system_dir/dc/.\n\nThe prefix is determined by platform (sb_mem.cpp:32-49):\n  Dreamcast   -> dc_\n  Dev Unit    -> hkt_\n  NAOMI       -> naomi_\n  Atomiswave  -> (no prefix, BIOS loaded from awbios.zip)\n\nBoot ROM search pattern (sb_mem.cpp:51-68):\n  {prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin\nNAOMI also tries: epr-21576d.bin (sb_mem.cpp:59)\nFlash/NVRAM search pattern (sb_mem.cpp:231):\n  {prefix}nvmem.bin, {prefix}flash_wb.bin, {prefix}flash.bin, {prefix}flash.bin.bin\n\nBIOS[] also declares airlbios and naomigd. No entry of Games[] carries\neither name in its bios field and naomi_LoadBios is only ever called with\nthat field or the literal naomi, so neither archive is opened.\nref: naomi_cart.cpp:79,229-240,476-479, naomi_roms.h:79,191\n",
        "platform_details": {
          "atomiswave": {
            "bios_size": 131072,
            "hle_available": false,
            "ram_size": 16777216,
            "source_ref": "core/nullDC.cpp:364-375",
            "sram_size": 131072
          },
          "dreamcast": {
            "bios_size": 2097152,
            "flash_size": 131072,
            "hle_available": true,
            "ram_size": 16777216,
            "source_ref": "core/nullDC.cpp:333-345"
          },
          "naomi": {
            "bios_size": 2097152,
            "hle_available": false,
            "ram_size": 33554432,
            "source_ref": "core/nullDC.cpp:346-354",
            "sram_size": 32768
          },
          "naomi2": {
            "bios_size": 2097152,
            "hle_available": false,
            "note": "Treated as NAOMI in the libretro port. Separate platform only in upstream.",
            "ram_size": 33554432,
            "source_ref": "core/nullDC.cpp:355-363",
            "sram_size": 32768
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/flycast",
        "source_commit": "45bd2f4e59708a7c16a5bb1cb90a94d1b39e330d",
        "systems": [
          "sega-dreamcast",
          "sega-naomi",
          "sega-naomi2",
          "sega-atomiswave"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/flyinghead/flycast"
      }
    },
    {
      "id": "flycast-dojo",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "dojo-7-preview4",
        "cores": [
          "flycast-dojo"
        ],
        "display_name": "Sega - Dreamcast/Naomi (Flycast Dojo)",
        "emulator": "Flycast Dojo",
        "files": [
          {
            "aliases": [
              "dc_boot.bin.bin",
              "dc_bios.bin",
              "dc_bios.bin.bin"
            ],
            "hle_fallback": true,
            "min_size": 2097152,
            "name": "dc_boot.bin",
            "note": "Boot ROM. reios takes over when it is absent, and is forced under netplay, match playback and match recording. Read fails below 2 MB.",
            "required": false,
            "source_ref": "core/hw/holly/sb_mem.cpp:269, core/emulator.cpp:566-569, core/hw/flashrom/flashrom.cpp:23-33",
            "system": "sega-dreamcast",
            "validation": [
              "size"
            ]
          },
          {
            "min_size": 131072,
            "name": "dc_nvmem.bin",
            "note": "Flash memory. Created and filled with factory settings when absent.",
            "required": false,
            "source_ref": "core/hw/holly/sb_mem.cpp:214, core/hw/holly/sb_mem.cpp:111-187",
            "system": "sega-dreamcast",
            "validation": [
              "size"
            ]
          },
          {
            "min_size": 131072,
            "name": "dc_nvmem.bin.net",
            "note": "Flash memory used once Dojo mode is enabled, keeping netplay settings apart from local ones.",
            "required": false,
            "source_ref": "core/hw/holly/sb_mem.cpp:192-195",
            "system": "sega-dreamcast",
            "validation": [
              "size"
            ]
          },
          {
            "name": "font.bin",
            "note": "System font served by the reios font syscall. A built-in font is used when absent.",
            "required": false,
            "source_ref": "core/reios/reios.cpp:741-764, core/oslib/oslib.cpp:195-198",
            "system": "sega-dreamcast"
          },
          {
            "aliases": [
              "naomi_boot.bin.bin",
              "naomi_bios.bin",
              "naomi_bios.bin.bin"
            ],
            "min_size": 2097152,
            "name": "naomi_boot.bin",
            "note": "Flat boot ROM. Games whose bios field is null run from it when naomi.zip is missing.",
            "required": false,
            "source_ref": "core/hw/holly/sb_mem.cpp:269, core/hw/naomi/naomi_cart.cpp:202-207",
            "system": "sega-naomi",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr-21576h.ic27",
                "size": 2097152
              },
              {
                "description": "USA",
                "name": "epr-21577h.ic27",
                "size": 2097152
              },
              {
                "description": "Export",
                "name": "epr-21578h.ic27",
                "size": 2097152
              },
              {
                "description": "Korea",
                "name": "epr-21579d.ic27",
                "size": 2097152
              }
            ],
            "name": "naomi.zip",
            "note": "System BIOS archive. 89 game entries name it and abort without it.",
            "required": true,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:84-140, core/hw/naomi/naomi_cart.cpp:194-208",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr-22849.ic27",
                "size": 2097152
              },
              {
                "description": "USA",
                "name": "epr-22850.ic27",
                "size": 2097152
              },
              {
                "description": "Export",
                "name": "epr-22851.ic27",
                "size": 2097152
              }
            ],
            "name": "f355bios.zip",
            "note": "Ferrari F355 Challenge twin. Required by f355twin, f355twinp and f355twn2.",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:47-54, core/hw/naomi/naomi_roms.cpp:1689,1725,1761",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr-21862.ic27",
                "size": 2097152
              },
              {
                "description": "USA",
                "name": "epr-21863.ic27",
                "size": 2097152
              },
              {
                "description": "Export",
                "name": "epr-21864.ic27",
                "size": 2097152
              }
            ],
            "name": "f355dlx.zip",
            "note": "Ferrari F355 Challenge deluxe. Required by f355.",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:56-70, core/hw/naomi/naomi_roms.cpp:1645",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr-21329.ic27",
                "size": 2097152
              },
              {
                "description": "USA",
                "name": "epr-21330.ic27",
                "size": 2097152
              },
              {
                "description": "Export",
                "name": "epr-21331.ic27",
                "size": 2097152
              }
            ],
            "name": "hod2bios.zip",
            "note": "House of the Dead 2. Required by hotd2, hotd2o, hotd2e and hotd2p.",
            "required": false,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:72-82, core/hw/naomi/naomi_roms.cpp:2003,2042,2081,2120",
            "system": "sega-naomi"
          },
          {
            "aliases": [
              "naomi2_boot.bin.bin",
              "naomi2_bios.bin",
              "naomi2_bios.bin.bin"
            ],
            "min_size": 2097152,
            "name": "naomi2_boot.bin",
            "note": "Flat boot ROM for the NAOMI 2 platform.",
            "required": false,
            "source_ref": "core/hw/holly/sb_mem.cpp:35-36,269",
            "system": "sega-naomi2",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr-23605c.ic27",
                "size": 2097152
              },
              {
                "description": "USA",
                "name": "epr-23607c.ic27",
                "size": 2097152
              },
              {
                "description": "Export",
                "name": "epr-23608c.ic27",
                "size": 2097152
              }
            ],
            "name": "naomi2.zip",
            "note": "System BIOS archive. All 43 NAOMI 2 game entries name it and abort without it.",
            "required": true,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:166-172, core/hw/naomi/naomi_cart.cpp:646-657",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "name": "bios0.ic23",
                "size": 131072
              }
            ],
            "name": "awbios.zip",
            "note": "System BIOS archive. All 34 Atomiswave game entries name it and abort without it.",
            "required": true,
            "source_ref": "core/hw/naomi/naomi_roms.cpp:38-45, core/hw/naomi/naomi_cart.cpp:194-208",
            "system": "sega-atomiswave"
          },
          {
            "category": "game_data",
            "name": "gamecontrollerdb.txt",
            "note": "SDL controller mapping database, read from the data directory then the config directory. Not part of the release archive. SDL built-in mappings are used when absent.",
            "required": false,
            "source_ref": "core/sdl/sdl.cpp:183-191"
          }
        ],
        "logo": "https://raw.githubusercontent.com/blueminder/flycast-dojo/master/shell/linux/flycast-dojo.png",
        "mode": "standalone",
        "notes": "Fork of Flycast adding rollback and delay netplay, a lobby, spectating,\nreplay recording and a training mode.\n\nEvery file below is read from the data directory, flat, with no subfolder.\nThe directory is <exe>/data on Windows, $XDG_DATA_HOME/flycast-dojo or\n$HOME/.local/share/flycast-dojo on Linux, /flycast-dojo/data on Switch.\n$FLYCAST_ROOT overrides the root, $FLYCAST_BIOS_PATH adds search paths,\nand ContentPath entries are searched after the data directory.\nref: core/linux-dist/main.cpp:157-365, core/windows/winmain.cpp:245-266,\ncore/stdclass.cpp:78-97\n\nThe boot ROM prefix follows the platform (core/hw/holly/sb_mem.cpp:27-42):\n  Dreamcast   -> dc_\n  NAOMI       -> naomi_\n  NAOMI 2     -> naomi2_\n  Atomiswave  -> aw_\nBoot ROM search pattern (sb_mem.cpp:254,269):\n  {prefix}boot.bin, {prefix}boot.bin.bin, {prefix}bios.bin, {prefix}bios.bin.bin\nFlash search takes a single name, {prefix}nvmem.bin (sb_mem.cpp:214), or\n{prefix}nvmem.bin.net once Dojo mode is on (sb_mem.cpp:195).\nThe aw_ prefix never reaches a filename: sb_mem.cpp:267 skips the boot ROM\nsearch on Atomiswave, whose BIOS comes from awbios.zip, and its flash\nfollows the per-game arcade path (sb_mem.cpp:216).\n\nArcade BIOS archives are opened as <name>.zip, then <name>.7z\n(core/hw/naomi/naomi_cart.cpp:69-71). Each ROM inside is looked up by CRC\nthen by filename; the crc field of every BIOS blob is left at zero, so the\nfilename decides. No hash is checked on an archive.\n\nNAOMI 2 is a platform of its own here: naomi_cart_GetPlatform returns\nDC_PLATFORM_NAOMI2 for any game whose bios field is naomi2\n(naomi_cart.cpp:646-657), which selects the naomi2_ prefix and naomi2.zip.\n\nUnder netplay, match playback or match recording the Dreamcast boot ROM is\nskipped and reios is forced, so both sides start from the same state.\nProduct numbers T0019M and T-31101N are the two exceptions that keep the\nreal BIOS (sb_mem.cpp:237-259).\n\nBIOS[] also declares airlbios and naomigd. No entry of Games[] carries\neither name in its bios field and loadBios is only ever called with that\nfield or the literal naomi, so neither archive is opened. The Airline\nPilots sets use the naomi BIOS (naomi_roms.cpp:821-828,854-862).\n\nflycast_roms.json ships beside the binary and lists an md5 for naomi.zip,\nnaomi2.zip and awbios.zip. The only function reading them, CompareBIOS,\nhas no live caller (DojoFile.cpp:228-242, DojoGui.cpp:1314,1369).\n\nDistributed with the emulator and fetched at build time: data/default.zip\nand the per-game .nvmem/.eeprom/.nvmem2 netplay files from\nflycast-netplay-nvmem, data/game_values/*.json from\nflycast-dojo-game-values, training/*.lua from flycast-dojo-training, and\nflycast_roms.json.\nref: CMakeLists.txt:1787-1834, .github/workflows/c-cpp.yml:171-192,\nshell/linux/make-appimage.sh:136-149\n\nAlso read but never user supplied: buttons.png overrides an on-screen\nbutton sheet compiled into the binary (core/rend/osd.cpp:152-171),\nmappings/*.cfg are written by the input configuration screen\n(core/input/mapping.cpp:382-445), and flycast.lua is a user script\n(core/lua/lua.cpp:746-761).\n",
        "platform_details": {
          "atomiswave": {
            "bios_size": 131072,
            "hle_available": false,
            "ram_size": 16777216,
            "source_ref": "core/emulator.cpp:459-465",
            "sram_size": 131072
          },
          "dreamcast": {
            "bios_size": 2097152,
            "flash_size": 131072,
            "hle_available": true,
            "ram_size": 16777216,
            "source_ref": "core/emulator.cpp:436-442"
          },
          "naomi": {
            "bios_size": 2097152,
            "hle_available": false,
            "ram_size": 33554432,
            "source_ref": "core/emulator.cpp:443-449",
            "sram_size": 32768
          },
          "naomi2": {
            "bios_size": 2097152,
            "eram_size": 33554432,
            "hle_available": false,
            "ram_size": 33554432,
            "source_ref": "core/emulator.cpp:450-458",
            "sram_size": 32768
          }
        },
        "profiled_date": "2026-08-08",
        "source": "https://github.com/blueminder/flycast-dojo",
        "source_commit": "d0e47e572b1e7b355e88bda8308c89d0c5156cbf",
        "systems": [
          "sega-dreamcast",
          "sega-naomi",
          "sega-naomi2",
          "sega-atomiswave"
        ],
        "type": "standalone",
        "upstream": "https://github.com/flyinghead/flycast",
        "upstream_commit": "a172e0001351dfbc49b86860a13d5390b1c493fe",
        "verification": "existence"
      }
    },
    {
      "id": "flycast_gles2",
      "profile": {
        "alias_of": "flycast",
        "core_version": "0.1",
        "cores": [
          "flycast_gles2"
        ],
        "display_name": "Sega - Dreamcast/Naomi (Flycast GLES2)",
        "emulator": "Flycast GLES2",
        "files": [],
        "note": "Same codebase as flycast, compiled with -DHAVE_OPENGLES2 for older mobile GPUs. Same BIOS files.",
        "profiled_date": "2026-03-23",
        "type": "alias"
      }
    },
    {
      "id": "fmsx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "6.0",
        "cores": [
          "fmsx"
        ],
        "display_name": "Microsoft - MSX (fMSX)",
        "emulator": "fMSX",
        "files": [
          {
            "bundled": true,
            "md5": "aa95aea2563cd5ec0a0919b44cc17d47",
            "name": "MSX.ROM",
            "note": "MSX1 main BIOS (32 KB). Loaded for MSX1 model (fMSX/MSX.c:693).",
            "required": true,
            "sha1": "409e82adac40f6bdd18eb6c84e8b2fbdc7fb5498",
            "size": 32768,
            "source_ref": "fMSX/ROMs/MSX.ROM",
            "system": "msx"
          },
          {
            "bundled": true,
            "md5": "ec3a01c91f24fbddcbcab0ad301bc9ef",
            "name": "MSX2.ROM",
            "note": "MSX2 main BIOS (32 KB). Loaded for MSX2 model (fMSX/MSX.c:709).",
            "required": true,
            "sha1": "6103b39f1e38d1aa2d84b1c3219c44f1abb5436e",
            "size": 32768,
            "source_ref": "fMSX/ROMs/MSX2.ROM",
            "system": "msx2"
          },
          {
            "bundled": true,
            "md5": "2183c2aff17cf4297bdb496de78c2e8a",
            "name": "MSX2EXT.ROM",
            "note": "MSX2 extension BIOS (16 KB). Loaded alongside MSX2.ROM (fMSX/MSX.c:710).",
            "required": true,
            "sha1": "5c1f9c7fb655e43d38e5dd1fcc6b942b2ff68b02",
            "size": 16384,
            "source_ref": "fMSX/ROMs/MSX2EXT.ROM",
            "system": "msx2"
          },
          {
            "bundled": true,
            "md5": "6d8c0ca64e726c82a4b726e9b01cdf1e",
            "name": "MSX2P.ROM",
            "note": "MSX2+ main BIOS (32 KB). Loaded for MSX2+ model, the default (fMSX/MSX.c:731).",
            "required": true,
            "sha1": "e2fbd56e42da637609d23ae9df9efd1b4241b18a",
            "size": 32768,
            "source_ref": "fMSX/ROMs/MSX2P.ROM",
            "system": "msx2plus"
          },
          {
            "bundled": true,
            "md5": "7c8243c71d8f143b2531f01afa6a05dc",
            "name": "MSX2PEXT.ROM",
            "note": "MSX2+ extension BIOS (16 KB). Loaded alongside MSX2P.ROM (fMSX/MSX.c:732).",
            "required": true,
            "sha1": "fe0254cbfc11405b79e7c86c7769bd6322b04995",
            "size": 16384,
            "source_ref": "fMSX/ROMs/MSX2PEXT.ROM",
            "system": "msx2plus"
          },
          {
            "bundled": true,
            "md5": "80dcd1ad1a4cf65d64b7ba10504e8190",
            "name": "DISK.ROM",
            "note": "Disk controller BIOS (16 KB). Needed for .dsk content. Enable 'Simulate DiskROM' option (fMSX/MSX.c:780).",
            "required": false,
            "sha1": "032cb1c1c75b9a191fa1230978971698d9d2a17f",
            "size": 16384,
            "source_ref": "fMSX/ROMs/DISK.ROM"
          },
          {
            "bundled": true,
            "md5": "6f69cc8b5ed761b03afd78000dfb0e19",
            "name": "FMPAC.ROM",
            "note": "FM-PAC cartridge ROM (64 KB, YM2413 FM synthesis). Auto-loaded into first free slot (fMSX/MSX.c:557).",
            "required": false,
            "sha1": "9d789166e3caf28e4742fe933d962e99618c633d",
            "size": 65536,
            "source_ref": "fMSX/ROMs/FMPAC.ROM"
          },
          {
            "bundled": true,
            "md5": "febe8782b466d7c3b16de6d104826b34",
            "name": "KANJI.ROM",
            "note": "Kanji font ROM (128 KB). Auto-loaded if present, no option needed (fMSX/MSX.c:530).",
            "required": false,
            "sha1": "84a645becec0a25d3ab7a909cde1b242699a8662",
            "size": 131072,
            "source_ref": "fMSX/ROMs/KANJI.ROM"
          },
          {
            "bundled": true,
            "md5": "6418d091cd6907bbcf940324339e43bb",
            "name": "MSXDOS2.ROM",
            "note": "MSX-DOS 2 ROM (64 KB). Loaded when 'fmsx_dos2' option enabled and model is MSX2 or MSX2+ (fMSX/MSX.c:545).",
            "required": false,
            "sha1": "c36c9e0f96738a340381e23b4f97245388801a46",
            "size": 65536,
            "source_ref": "fMSX/ROMs/MSXDOS2.ROM"
          },
          {
            "bundled": true,
            "md5": "403cdea1cbd2bb24fae506941f8f655e",
            "name": "PAINTER.ROM",
            "note": "Paint utility ROM (64 KB). Auto-loaded for MSX2 and MSX2+ models (fMSX/MSX.c:552).",
            "required": false,
            "sha1": "7fd2a28c4fdaeb140f3c8c8fb90271b1472c97b9",
            "size": 65536,
            "source_ref": "fMSX/ROMs/PAINTER.ROM"
          },
          {
            "bundled": true,
            "md5": "279efd1eae0d358eecd4edc7d9adedf3",
            "name": "RS232.ROM",
            "note": "RS-232C serial interface ROM (16 KB + 256 B). Loaded into slot 3:3 (fMSX/MSX.c:533).",
            "required": false,
            "sha1": "7aec0134ad6a5177f4056fcb6047083e8e00529b",
            "size": 16640,
            "source_ref": "fMSX/ROMs/RS232.ROM"
          },
          {
            "bundled": false,
            "name": "GMASTER2.ROM",
            "note": "Konami GameMaster2 cartridge ROM. Loaded when 'fmsx_game_master' option enabled (fMSX/MSX.c:576).",
            "required": false
          },
          {
            "bundled": false,
            "name": "GMASTER.ROM",
            "note": "Konami GameMaster cartridge ROM. Fallback if GMASTER2.ROM is missing (fMSX/MSX.c:580).",
            "required": false
          },
          {
            "bundled": false,
            "name": "CMOS.ROM",
            "note": "RTC/CMOS settings. Auto-saved by the core on exit, auto-loaded on start (fMSX/MSX.c:526).",
            "required": false
          },
          {
            "bundled": true,
            "md5": "85b38e4128bbc300e675f55b278683a8",
            "name": "DEFAULT.FNT",
            "note": "Default text font. Loaded by LoadFNT() (fMSX/MSX.c:523). Same content as CYRILLIC.FNT.",
            "required": false,
            "source_ref": "fMSX/ROMs/DEFAULT.FNT, libretro.c:1546"
          },
          {
            "bundled": true,
            "md5": "c83e50e9f33b8dd893c414691822740d",
            "name": "ITALIC.FNT",
            "note": "Italic text font.",
            "required": false,
            "source_ref": "fMSX/ROMs/ITALIC.FNT, libretro.c:1546"
          },
          {
            "bundled": true,
            "md5": "ac4f4a90c1b1887db48ded39c9d9c847",
            "name": "INTERNAT.FNT",
            "note": "International text font.",
            "required": false,
            "source_ref": "fMSX/ROMs/INTERNAT.FNT, libretro.c:1546"
          },
          {
            "bundled": true,
            "md5": "85b38e4128bbc300e675f55b278683a8",
            "name": "CYRILLIC.FNT",
            "note": "Cyrillic text font. Same content as DEFAULT.FNT.",
            "required": false,
            "source_ref": "fMSX/ROMs/CYRILLIC.FNT, libretro.c:1546"
          },
          {
            "bundled": true,
            "md5": "73291e76638a2f5aa2eceb843df468f4",
            "name": "KOREAN.FNT",
            "note": "Korean text font.",
            "region": [
              "south-korea"
            ],
            "required": false,
            "source_ref": "fMSX/ROMs/KOREAN.FNT, libretro.c:1546"
          },
          {
            "bundled": true,
            "md5": "aa28f0703b951a6be8df3e28e20d263d",
            "name": "JAPANESE.FNT",
            "note": "Japanese text font.",
            "region": [
              "japan"
            ],
            "required": false,
            "source_ref": "fMSX/ROMs/JAPANESE.FNT, libretro.c:1546"
          },
          {
            "bundled": false,
            "name": "CARTS.CRC",
            "note": "CRC database for cartridge identification and mapper detection. Tried first, before CARTS.SHA (fMSX/MSX.c:2697).",
            "required": false,
            "unsourceable": "dead legacy code path, never created or distributed, replaced by CARTS.SHA"
          },
          {
            "bundled": true,
            "md5": "74b0f217fa0e2b8bb5a2f8e2ecc69da3",
            "name": "CARTS.SHA",
            "note": "SHA1 database for cartridge identification and mapper detection. Fallback when CARTS.CRC absent (fMSX/MSX.c:2712).",
            "required": false,
            "source_ref": "fMSX/ROMs/CARTS.SHA"
          }
        ],
        "notes": "Place all ROM files directly in the RetroArch system directory. No subdirectory\nneeded. The core does chdir() to system_dir before loading.\n\nThe default model is MSX2+, which needs MSX2P.ROM and MSX2PEXT.ROM. If you only\nplay cartridge ROMs, these two files are sufficient. For disk games (.dsk), also\nadd DISK.ROM and enable \"Simulate DiskROM\" in core options.\n\nKANJI.ROM and FMPAC.ROM are loaded automatically when present, no option needed.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fmsx-libretro",
        "source_commit": "f013e213458e06d9df718e4bc4b09d46f88aa899",
        "systems": [
          "msx",
          "msx2",
          "msx2plus"
        ],
        "type": "libretro",
        "upstream": "https://fms.komkon.org/fMSX/"
      }
    },
    {
      "id": "fpse",
      "profile": {
        "author": "Schtruck & LDchen (EMUSOFT)",
        "bios_directory": "bios/",
        "bios_size": 524288,
        "core_classification": "other",
        "core_version": "12.1",
        "cores": [
          "fpse"
        ],
        "display_name": "Sony - PlayStation (FPse)",
        "emulator": "FPse",
        "exclusion_note": "Left out are the files FPse writes and reads back itself, which are emulator state rather than files a user has to obtain: fpse.ini and the per-title configurations under cfg, the memory cards slot1.mcd and slot2.mcd, savestates and the snapshots under snaps, fpselog.txt and the cpulog.txt and gpulog.txt traces. gamelist.ini is left out with them for a different reason: it is rewritten from the package at every start, so a copy placed there never survives. Left out too are the shipped overlay pad artwork, skin/pad.ini with its button and stick images, which unpack from the package, and the shader pairs, which the package carries in assets while the Shaders setting selects a directory rather than a file. bios/kanji.rom is left out on the same ground: it is a FONTX2 font the core draws Japanese text with, header FONTX2X11, 238586 bytes, md5 040d9dcbad83388c14d2628ac69ce88b, sha1 915880f8bb04de39fd5132b92dfb99872f54fa47 in 12.1, and it has only ever existed inside the package, unpacked into bios at first start and left alone afterwards so a replacement stays. It is not a dump of the font ROM inside the Japanese BIOS, and it shares its generic name with the unrelated kanji ROMs of the MSX and the PC-88. Only the ARM builds name it; the x86 build of 0.11.190 carries neither it nor the v2.2 identification strings. The disc images and their .cue sidecars are not emulator files. The HLE BIOS is not a file either: it is code, and the strings it answers a BIOS identification with sit in .rodata beside the rest of the core messages, with no 512 KB image anywhere in the library. ref: res/raw/fpse.ini MemCard1, Main.java:30046, Main.java:29721,\n     Main.java:29758-29859, res/raw/kanji.rom,\n     FPse 0.11.190 libfpse.so armeabi-v7a .rodata 0x245818-0x2458cc\n",
        "files": [
          {
            "config_key": "BiosName",
            "description": "SCPH-1001, DTL-H1201, DTL-H3001 (v2.2 12-04-95 A)",
            "hle_fallback": true,
            "md5": "924e392ed05558ffdb115408c263dccf",
            "name": "scph1001.bin",
            "note": "The only image the code identifies, and it identifies it by a checksum of its own rather than by a hash it spells out: the 524288 bytes summed as signed bytes, accepted at 85958. The md5 and sha1 here are the dump that reproduces that sum. Selecting a BIOS by hand takes any file ending in .bin that is exactly 524288 bytes, so the other images of the group fill the slot without being recognised by name or by sum.",
            "path": "bios/scph1001.bin",
            "required": false,
            "sha1": "10155d8d6e6e832d6ea66db9bc098321fb5e8ebf",
            "size": 524288,
            "source_ref": "Main.java:4159-4175, Main.java:5919, Main.java:25217, res/raw/fpse.ini BiosName",
            "system": "sony-playstation",
            "validation": [
              "size"
            ],
            "variant_group": "psx-bios"
          },
          {
            "description": "PlayStation library executable loaded at startup when present",
            "name": "LibPS.exe",
            "note": "Loaded by bare name through the same loader as any PS-X EXE, reporting \"LibPS.exe found and loaded.\" on success and continuing untouched when the loader returns -1. Not carried by the package, and the core never chdirs, so it resolves against the working directory of the process.",
            "required": false,
            "source_ref": "FPse 0.11.190 libfpse.so x86 0x95545-0x9558a, FPse 12.1 libfpse.so .rodata 0x344634",
            "system": "sony-playstation"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "software renderer plugin",
            "name": "libsoft1.so",
            "note": "Named by System.loadLibrary(\"soft1\") and listed in DT_NEEDED by the core. 0.11.190 listed it the same way without shipping it, tested for the file in the private directory and stopped on an error dialog before the core when it was absent, the file coming from plugins267.zip.",
            "required": true,
            "source_ref": "Main.java:29688, FPse 0.11.190 Main.java:24148-24162"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "sound plugin",
            "name": "libspuplugin.so",
            "note": "Named by System.loadLibrary(\"spuplugin\") and listed in DT_NEEDED. 0.11.190 picked libspupluginex.so, libspuplugin2.so or libspuplugin1.so by device and API level and copied the winner over this name.",
            "required": true,
            "source_ref": "Main.java:29687, FPse 0.11.190 Main.java:24126-24132"
          },
          {
            "aliases": [
              "libopengl1.so",
              "libopenglex.so"
            ],
            "bundled": true,
            "category": "game_data",
            "description": "OpenGL renderer plugin",
            "name": "libopengl.so",
            "note": "Named by System.loadLibrary(\"opengl\") and listed in DT_NEEDED. A plugin chosen from the .so browser is copied over libopengl1.so, which 0.11.190 in turn copied over this name, the ex variant standing in for it on the devices that ask for it.",
            "required": true,
            "source_ref": "Main.java:29690, Main.java:11010, FPse 0.11.190 Main.java:24178-24199"
          },
          {
            "aliases": [
              "libnfs.so"
            ],
            "bundled": true,
            "category": "game_data",
            "description": "NFS client plugin, for discs read from a network share",
            "name": "libnfsplugin.so",
            "note": "Named by System.loadLibrary(\"nfsplugin\") and listed in DT_NEEDED. Called libnfs.so through the 0.11.x line.",
            "required": true,
            "source_ref": "Main.java:29689, FPse 0.11.190 Main.java:24163-24177"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SDL 1.2 audio backend",
            "name": "libsdl.so",
            "note": "Named by System.loadLibrary(\"sdl\") and listed in DT_NEEDED.",
            "required": true,
            "source_ref": "Main.java:20405, FPse 12.1 libfpse.so readelf -d"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "NEON colour conversion routines",
            "name": "libneon.so",
            "note": "Named by System.loadLibrary(\"neon\") and listed in DT_NEEDED, which resolves bgr555rgb565neon for the core.",
            "required": true,
            "source_ref": "Main.java:20406, FPse 12.1 libfpse.so readelf -d"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "archive extractor for .zip, .rar, .7z, .ape and .ecm images",
            "name": "libuncompress.so",
            "note": "Named by System.loadLibrary(\"uncompress\") and the only one of the plugins the core does not list in DT_NEEDED. 0.11.190 loaded it on demand from the private directory.",
            "required": false,
            "source_ref": "Main.java:29686, FPse 0.11.190 Main.java:6244-6249"
          },
          {
            "category": "game_data",
            "description": "external overlay pad skin",
            "name": "<skin>.ini",
            "note": "Selected through a browser listing .ini files, which is what the External entry of the gamepad skin setting opens. The default set unpacks from the package as skin/pad.ini with its button and stick artwork.",
            "path": "skin/<skin>.ini",
            "required": false,
            "source_ref": "Main.java:5936-5938, Main.java:29758",
            "unsourceable": "overlay pad artwork published by other users"
          },
          {
            "category": "game_data",
            "description": "cheat codes for one title",
            "name": "<game>.txt",
            "note": "Selected through a browser listing .txt files and parsed as titles between hashes followed by address and value pairs. Cheats apply only when a BIOS image is loaded.",
            "required": false,
            "source_ref": "Main.java:5965-5967, Main.java:30552",
            "unsourceable": "cheat codes the user writes or collects per title"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation emulator for Android, closed source, sold on Google Play as package\ncom.emulator.fpse. Two builds are read here and both carry the same signing\ncertificate, CN=FPse Team issued 2011, sha256\n9af45a593faf3b522c5120fc976a03b7d82a88a9e5008162b9d6822ade7c981a: 12.1\nversionCode 940, apk md5 09160e917333d546296d4fcdae7b35f9, armeabi-v7a, and\n0.11.190 versionCode 720, apk md5 818ee3fe71370ac983283926234e920e, armeabi\nplus armeabi-v7a plus x86, taken from the OUYA store archive. The archive.org\nitem labelled FPse 1.7.8 is package com.emulator.fpse64, signed with the Android\ntest key and carrying an assets/hook.apk payload, and is not read here. The\nemulator descends from LDchen's PC FPSE and keeps its console messages, its\nfpse.ini keys and its bios, plugin, cfg and snaps directory names.\nref: com.emulator.fpse META-INF/BNDLTOOL.RSA, META-INF/CERT.RSA,\n     res/raw/fpse.ini\n\nOne root holds everything and it is the private files directory of the package,\nnot shared storage. Main sets it from getFilesDir and creates bios, plugin, cfg\nand skin under it right after the native libraries load, then unpacks its own\nresources into them. Paths below are relative to that root. The plugins have no\nstable path of their own: 12.1 loads them from the native library directory of\nthe package and 0.11.190 loaded them from this root, so they are recorded by\nname alone.\nref: Main.java:32088, Main.java:29716-29719\n\nExactly one BIOS image is ever loaded and its full path is a setting rather than\na name the code looks for. The Load Bios browser lists .bin files only, the\nchosen path is written to the preference com.emulator.fpse.biospath and pushed\ninto the emulator core as string slot 6, and leaving the browser without a\nchoice writes an empty string, which is the documented way to switch to HLE.\nThe stored path is re-checked at every start: a file that no longer exists or is\nnot exactly 524288 bytes clears the preference and the session runs on HLE. On\nthe core side a path that will not open reports\n\"Can't load biosfile '%s', switching to HLE\" and emulation continues, so no\nimage is needed on its own. fpse.ini ships with EnableHLE=on and BiosName set to\nthe placeholder scph1001.bin_is_recommended, and the core resolves BiosName\nunder bios/ when the setting is left alone.\nref: Main.java:5917-5919, Main.java:1173, Main.java:1965-1971,\n     Main.java:25213-25222, res/raw/fpse.ini BiosName,\n     FPse 0.11.190 libfpse.so x86 0x5c2c8-0x5c395\n\nAutomatic detection recognises one dump and does it on content. Scanning\nstorage, FPse keeps files whose lowercased name ends in .bin and whose length is\nexactly 524288, reads all 524288 bytes, sums them as signed bytes and accepts\nthe file when the total is 85958, writing the path to the preference and turning\nthe BIOS on. The same constant answers over NFS through isnfsbios. Reimplemented\nover the collection, that sum resolves to a single image, the v2.2 12/04/95 A\ndump listed below, and to no other. The HLE path impersonates the same revision:\nits identification strings sit in .rodata as ordinary C strings next to\n\"HLE enabled.\", and the library carries no 512 KB image of its own.\nref: Main.java:4155-4175, Main.java:4185, Main.java:21188,\n     FPse 0.11.190 libfpse.so armeabi-v7a .rodata 0x245828-0x2458cc\n\nEmulation itself lives in plugins that Main names one by one before the core:\nuncompress, spuplugin, soft1, nfsplugin and opengl, then fpse. libfpse.so lists\nall of them except uncompress in DT_NEEDED, so the core will not link without\nthem. They are distributed both ways. 0.11.190 shipped none of them, tested for\neach file in the private directory, stopped on an error dialog before loading\nthe core when one was absent, and fetched plugins267.zip and its per GPU and per\nABI variants from fpse.net; 12.1 carries them in the package and keeps an\nupdater that asks getfile.php for the list matching its own versionCode and ABI,\nalongside plugins605 constants nothing reads. Both generations of the pack still\nanswer: plugins605v7.zip is 1359776 bytes and holds the armeabi-v7a build of\nlibsoft1.so, libspuplugin.so, libopengl.so, libnfsplugin.so and\nlibuncompress.so at the same lengths as the copies inside 12.1 but not the same\nbytes, plus the libopenglex.so, libspuplugin1.so and libspupluginex.so variants\nthe package does not carry, and twenty shader pairs. An OpenGL plugin picked by\nhand from the .so browser is copied over libopengl1.so and used in place of the\npackaged one. libGLESv2, libjnigraphics, liblog, libstdc++, libdl, libm and libc\nare the Android runtime and are not files anyone supplies.\nref: Main.java:29686-29698, Main.java:20405-20406, Main.java:11010,\n     Main.java:3417-3423, Main.java:1120-1137,\n     FPse 0.11.190 Main.java:24126-24207, FPse 0.11.190 Main.java:860-871,\n     FPse 12.1 libfpse.so readelf -d,\n     fpse.net/plugins605v7.zip md5 ae5dbdc27452092af3e712448f427fd3\n\nResources unpack through two helpers that differ in one respect. b2 writes only\nwhen the target is absent, so bios/kanji.rom, fpse.ini and the whole skin set\nsurvive being replaced by hand. c2 truncates, so gamelist.ini is rewritten from\nthe package at every start and a copy put there does not last.\nref: Main.java:26892-26895, Main.java:26956-26957, Main.java:29721,\n     Main.java:29755-29758, Main.java:30046\n",
        "profiled_date": "2026-08-11",
        "source": "https://play.google.com/store/apps/details?id=com.emulator.fpse",
        "systems": [
          "sony-playstation"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "fpse-ng",
      "profile": {
        "author": "Schtruck & LDchen",
        "bios_directory": "bios/",
        "bios_size": 524288,
        "core_classification": "other",
        "core_version": "1.13",
        "cores": [
          "fpse-ng",
          "fpseng",
          "fpse64"
        ],
        "display_name": "Sony - PlayStation (FPseNG)",
        "emulator": "FPseNG",
        "exclusion_note": "Left out are the files FPseNG writes and reads back itself, which are emulator state rather than files a user has to obtain: fpse.ini and the per-title configurations under cfg, the memory cards slot1.mcd and slot2.mcd under FPse64/memcards, the savestates and snapshots under FPse64/sstates, the game list cache FPse64/filelist.txt, the recorded clips under FPse64/videos, and the fpselog.txt, cpulog.txt and gpulog.txt traces. gamelist.ini is left out with them for a different reason: it is rewritten from the package at every start, so a copy placed there never survives. Left out too are the covers, titles and game notes the application downloads into FPse64/icons, FPse64/titles and fpse64/infos, which are interface metadata keyed by game identifier, and the shipped overlay pad artwork, skin/pad.ini with its button and stick images, which unpacks from the package. The .sbi files downloaded into FPse64/sbi are left out on the ground that nothing loads them: neither the java nor any of the eight libraries reads that directory back, and the string \".sbi\" appears nowhere in the native code. The disc images and their .cue sidecars are not emulator files. The HLE BIOS is not a file either: it is code, and the identification strings it answers with sit in .rodata beside the rest of the core messages, with no 512 KB image anywhere in the library. ref: res/raw fpse.ini MemCard1, Main.java:27463, Main.java:34054-34057,\n     Main.java:15415-15430, libfpse.so .rodata 0x1b8d81-0x1b8dfb\n",
        "files": [
          {
            "config_key": "com.emulator.fpse64.biospath",
            "description": "SCPH-1001, DTL-H1201, DTL-H3001 (v2.2 12-04-95 A)",
            "hle_fallback": true,
            "md5": "924e392ed05558ffdb115408c263dccf",
            "name": "scph1001.bin",
            "note": "The only image the code identifies, and it identifies it by a checksum of its own rather than by a hash it spells out: the 524288 bytes summed as signed bytes, accepted at 85958. The md5 and sha1 here are the dump that reproduces that sum. Selecting a BIOS by hand takes any .bin of exactly 524288 bytes, so the other images of the group fill the slot without being recognised by name or by sum.",
            "path": "bios/scph1001.bin",
            "required": false,
            "sha1": "10155d8d6e6e832d6ea66db9bc098321fb5e8ebf",
            "size": 524288,
            "source_ref": "Main.java:24466-24487, Main.java:9945-9952, Main.java:30177-30192, Main.java:5392-5396, libfpse.so 0x70e20-0x70ed0",
            "system": "sony-playstation",
            "validation": [
              "size"
            ],
            "variant_group": "psx-bios"
          },
          {
            "bundled": true,
            "description": "FONTX2 font the core draws Japanese text with",
            "md5": "040d9dcbad83388c14d2628ac69ce88b",
            "name": "kanji.rom",
            "note": "Header FONTX2X11. Unpacked into bios/ at first start and left alone afterwards, so a replacement stays. The core appends the name to the root and its bios/ component, opens the result read only and carries on when the file is absent.",
            "path": "bios/kanji.rom",
            "required": false,
            "sha1": "915880f8bb04de39fd5132b92dfb99872f54fa47",
            "size": 238586,
            "source_ref": "Main.java:27334, Main.java:33974-33977, libfpse.so 0x71074-0x710b4, libfpse.so 0x95ce0-0x95ce8",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "software renderer plugin",
            "name": "libsoft1.so",
            "note": "Named by System.loadLibrary(\"soft1\") outside any catch and listed in DT_NEEDED by the core. Also holds the VR background loader.",
            "required": true,
            "source_ref": "Main.java:27302, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "sound plugin",
            "name": "libspuplugin.so",
            "note": "Named by System.loadLibrary(\"spuplugin\") outside any catch and listed in DT_NEEDED.",
            "required": true,
            "source_ref": "Main.java:27301, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "aliases": [
              "libopengl1.so"
            ],
            "bundled": true,
            "category": "game_data",
            "description": "OpenGL renderer plugin",
            "name": "libopengl.so",
            "note": "Named by System.loadLibrary(\"opengl\") outside any catch and listed in DT_NEEDED. A plugin chosen from the .so browser is copied over libopengl1.so under the root.",
            "required": true,
            "source_ref": "Main.java:27304, Main.java:9985, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "NFS client plugin, for discs read from a network share",
            "name": "libnfsplugin.so",
            "note": "Named by System.loadLibrary(\"nfsplugin\") outside any catch and listed in DT_NEEDED. Backs the isnfsbios and copyfromnfs entry points.",
            "required": true,
            "source_ref": "Main.java:27303, Main.java:25670, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SDL audio backend",
            "name": "libsdl.so",
            "note": "Named by System.loadLibrary(\"sdl\") from a static block that catches UnsatisfiedLinkError, and listed in DT_NEEDED, so the core will not link without it.",
            "required": true,
            "source_ref": "Main.java:25134, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "NEON colour conversion routines",
            "name": "libneon.so",
            "note": "Named by System.loadLibrary(\"neon\") from the same static block and listed in DT_NEEDED.",
            "required": true,
            "source_ref": "Main.java:25135, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "archive extractor for .zip, .rar, .7z, .ape and .ecm images",
            "name": "libuncompress.so",
            "note": "Named by System.loadLibrary(\"uncompress\") outside any catch, and the only one of the plugins the core does not list in DT_NEEDED.",
            "required": true,
            "source_ref": "Main.java:27300, Main.java:25408, libfpse.so readelf -d",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "vertex shader read whole and handed to the OpenGL renderer",
            "name": "<shader>.vsh",
            "note": "The Shaders setting walks the directory and reads the selected pair, passing the bytes to setVSH. The packaged set is copied out of assets once storage access is granted, and a pair dropped in by hand joins the list.",
            "path": "FPse64/shaders/<shader>.vsh",
            "required": false,
            "source_ref": "Main.java:25962-25975, Main.java:35655-35669, Main.java:35829-35845",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "fragment shader read whole and handed to the OpenGL renderer",
            "name": "<shader>.fsh",
            "note": "Read from the same directory as the vertex shader of the same name and passed to setFSH.",
            "path": "FPse64/shaders/<shader>.fsh",
            "required": false,
            "source_ref": "Main.java:25983-25996, Main.java:35677-35691, Main.java:35829-35845",
            "unsourceable": "ships inside the paid application package"
          },
          {
            "category": "game_data",
            "description": "background image the software renderer draws behind the VR view",
            "name": "vrback.raw",
            "note": "Opened read only at the root of shared storage and read as 640 by 512 sixteen bit pixels. Not carried by the package: the application downloads fpse.net/vrback.zip, extracts it at that root and deletes the archive. The distributed file is 655364 bytes.",
            "path": "vrback.raw",
            "required": false,
            "source_ref": "libsoft1.so 0x5fda8-0x5fdb8, libsoft1.so 0x5fa3c-0x5fa50, Main.java:12555-12585"
          },
          {
            "category": "game_data",
            "description": "cheat codes for one title",
            "name": "<game>.txt",
            "note": "The path is pushed into the core as string slots 140, 141 and 143, keyed by the licence string of the running disc. A file chosen through a browser listing .txt is copied there, and the cheat search writes its results to the same name.",
            "path": "FPse64/cheats/<game>.txt",
            "required": false,
            "source_ref": "Main.java:21973-21975, Main.java:10319-10357, Main.java:26918, Main.java:28219-28226",
            "unsourceable": "cheat codes fetched per title from the developer site or written by the user"
          },
          {
            "category": "game_data",
            "description": "OpenGL option mask for one title",
            "name": "<game>.txt",
            "note": "Read as a single integer and applied through setOptionGL, keyed by the licence string. Distributed as fpse.net/o/ogl.zip, which the application extracts into that directory, and rewritten there when the options are changed by hand.",
            "path": "FPse64/ogl/<game>.txt",
            "required": false,
            "source_ref": "Main.java:29309-29322, Main.java:18286-18294, Main.java:16605-16644",
            "unsourceable": "per title OpenGL option value distributed by the developer"
          },
          {
            "category": "game_data",
            "description": "external overlay pad skin",
            "name": "<skin>.ini",
            "note": "Selected through a browser listing .ini files. The default set unpacks from the package as skin/pad.ini with its button and stick artwork, and a pack downloaded from the developer arrives as padtemp.zip and is extracted into the same directory.",
            "path": "skin/<skin>.ini",
            "required": false,
            "source_ref": "Main.java:21943-21947, Main.java:27355, Main.java:11014",
            "unsourceable": "overlay pad artwork published by other users"
          },
          {
            "description": "PlayStation library executable loaded after the BIOS resources",
            "name": "LibPS.exe",
            "note": "Loaded by bare name during \"Loading files...\" when the matching option bit is set, reporting \"LibPS.exe found and loaded.\" on success and continuing untouched when the loader returns -1. Not carried by the package, and the core never chdirs, so it resolves against the working directory of the process.",
            "required": false,
            "source_ref": "libfpse.so 0x95de8-0x95e1c, libfpse.so .rodata 0x1ba534",
            "system": "sony-playstation"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation emulator for Android, closed source, sold on Google Play as package\ncom.emulator.fpse64 and named FPse64 until the rename. The build read here is\n1.13, versionCode 245, minSdk 23, targetSdk 33, activity\ncom.emulator.fpse64.Main. Google signs the package through Play App Signing,\nCN=Android O=Google Inc. issued 2020-05-02, sha256\n5df4c204abac4d2a10c4b8f497689e28c2bfb5dc44a56081ebb4a5e1c2f1d27f, and that\nsignature block travels inside the copy read here: the repackager kept the\noriginal apk as assets/SignatureKiller/origin.apk, whose MANIFEST.MF carries\nthe sha256 of all 1278 entries of the distributed build. 1274 match byte for\nbyte, among them every native library and every resource; AndroidManifest.xml,\nclasses.dex and resources.arsc differ, stamp-cert-sha256 is dropped and one\nclass, bin/mt/signature/KillerApplication, is added. Native code and resources\nare therefore the distributed ones and the java below is the application's own,\nminus that injection. A second copy, apkvision 1.8, is signed with the Android\ntest key and ships three of the eight libraries its own core links against; it\nis read only to confirm that the preference key, the two size tests and the\nchecksum constant below are the application's and not the repackager's.\nref: com.emulator.fpse64 1.13 assets/SignatureKiller/origin.apk\n     META-INF/GOOGPLAY.RSA, META-INF/MANIFEST.MF\n\nTwo roots hold everything. The private files directory of the package is the\none the core is given, and bios, plugin, cfg and skin are created under it\nright after the libraries load; the emulator resolves its own paths against it.\nThe second is a directory named FPse64 at the root of shared storage, holding\nmemcards, cheats, shaders, ogl, sbi, sstates, titles, icons, videos and\nfilelist.txt. Paths below are relative to the first root unless they name the\nsecond.\nref: Main.java:36420, Main.java:3004, Main.java:27329-27332,\n     Main.java:27458-27459, Main.java:30411-30413\n\nExactly one BIOS image is ever loaded and its full path is a setting rather\nthan a name the code looks for. The Load Bios browser keeps .bin files and\nlists only those of exactly 524288 bytes, the chosen path is written to the\npreference com.emulator.fpse64.biospath and pushed into the core as string\nslot 6, and the stored path is re-checked at every start: a file that no longer\nexists or is not exactly 524288 bytes clears the preference and the session\nruns on HLE. Slot 6 receives the empty string whenever the path is empty, the\nBIOS switch is off or the launching intent carried bios=0, which is the\ndocumented way to ask for HLE; the shortcuts the application pins carry that\nsame extra. On the core side the value is opened as given, then retried below\nbios/ under the root, so a bare name resolves there; a hit is read as one block\nof 0x80000 bytes after \"Loading '%s'...\", and a miss reports \"Can't load\nbiosfile '%s', switching to HLE\", sets the HLE bit and writes\n\"CEX-3000/1001/1002 by K.S.\", \"System ROM Version 2.2 12/04/95 A\" and the Sony\ncopyright line into BIOS memory, so no image is needed on its own. The FAQ on\nthe emulator's own site states that a file named scph1001.bin is recommended\nand is not distributed with the emulator.\nref: Main.java:1169, Main.java:21925-21927, Main.java:25833-25835,\n     Main.java:9943-9977, Main.java:30177-30192, Main.java:5392-5396,\n     Main.java:36446-36451, Main.java:28751-28754,\n     libfpse.so 0x70e20-0x70f20, fpsece.net/faq.html\n\nAutomatic detection recognises one dump and does it on content. Scanning\nstorage, FPseNG keeps files whose lowercased name ends in .bin and whose length\nis exactly 524288, reads all 524288 bytes, sums them as signed bytes and\naccepts the file when the total is 85958, writing the path to the preference\nand turning the BIOS on. The same constant answers over NFS through isnfsbios.\nRecomputed over the collection, that sum resolves to a single image, the\nv2.2 12/04/95 A dump listed below, and to no other. The HLE path impersonates\nthe same revision: its identification strings sit in .rodata beside \"HLE\nenabled.\" and the library carries no 512 KB image of its own.\nref: Main.java:24466-24487, Main.java:24491, Main.java:25670,\n     libfpse.so .rodata 0x1b8d81-0x1b8dfb\n\nEmulation is split across libraries the core links against. libfpse.so lists\nlibopengl, libsoft1, libspuplugin, libneon, libsdl and libnfsplugin in\nDT_NEEDED, and Main names uncompress, spuplugin, soft1, nfsplugin and opengl\nbefore fpse; sdl and neon are named earlier from a static block that swallows\nUnsatisfiedLinkError, the rest are not guarded. All eight ship in the package\nfor arm64-v8a and no other ABI. Eighteen constants naming nine plugins296\narchives on fpse.net and fpsece.net survive in the class and nothing reads\nthem, and the two archive extractors keep a branch counting eight .so members\nthat no caller reaches. What getfile.php still answers, once per versionCode\nand keyed by ABI as type p64, is a blob handed to setnfspos and summed into a\npreference, not a library anything writes to disk. An OpenGL plugin picked by\nhand from the .so browser is copied over libopengl1.so under the root.\nlibGLESv2, libjnigraphics, liblog, libstdc++, libdl, libm and libc are the\nAndroid runtime and are not files anyone supplies.\nref: Main.java:25134-25137, Main.java:27300-27312, Main.java:9985,\n     Main.java:1116-1133, Main.java:8496, Main.java:13854,\n     Main.java:23615-23621, libfpse.so readelf -d\n\nResources unpack through helpers that differ in one respect. The guarded one\nwrites only when the target is absent, so bios/kanji.rom, fpse.ini and the\nwhole skin set survive being replaced by hand, and the same rule puts\nslot1.mcd and slot2.mcd under FPse64/memcards on shared storage. The\nunguarded one truncates, so gamelist.ini is rewritten from the package at every\nstart and a copy put there does not last. The shipped shaders are copied out of\nassets into FPse64/shaders once storage access is granted.\nref: Main.java:33974-33977, Main.java:34054-34057, Main.java:34750-34753,\n     Main.java:27334, Main.java:27346-27347, Main.java:27463,\n     Main.java:35829-35845\n\nWhat the application fetches for itself comes from the developer's servers:\ncheat files from fpse.net/c/, per title OpenGL option files packed as\nfpse.net/o/ogl.zip, covers from fpse.net/i64/, titles from fpse.net/t/, game\nnotes from fpse.net/games64/, overlay pad skins from fpse.net/s/ as\npadtemp.zip extracted into skin/, and vrback.zip extracted at the root of\nshared storage. Files named after a game identifier and ending in .sbi are\ndownloaded into FPse64/sbi for the titles of one internal list; no library and\nno java path reads them back, and the string \".sbi\" appears in none of the\neight libraries.\nref: Main.java:10505-10507, Main.java:16605, Main.java:16644,\n     Main.java:11468, Main.java:11827, l0.java:82-89, Main.java:10846,\n     Main.java:11014, Main.java:12555-12585, Main.java:15415-15430,\n     Main.java:15489\n",
        "profiled_date": "2026-08-11",
        "source": "https://play.google.com/store/apps/details?id=com.emulator.fpse64",
        "systems": [
          "sony-playstation"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "freechaf",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "GIT",
        "cores": [
          "freechaf"
        ],
        "display_name": "Fairchild - ChannelF (FreeChaF)",
        "emulator": "FreeChaF",
        "files": [
          {
            "hle_fallback": true,
            "name": "sl31253.bin",
            "note": "Channel F PSU1 ROM (original). Fallback if sl90025.bin is missing.",
            "priority": 2,
            "required": false,
            "source_ref": "src/libretro.c:192",
            "system": "fairchild-channelf"
          },
          {
            "hle_fallback": true,
            "name": "sl31254.bin",
            "note": "Channel F PSU2 ROM. Always loaded at address 0x400.",
            "required": false,
            "source_ref": "src/libretro.c:202",
            "system": "fairchild-channelf"
          },
          {
            "hle_fallback": true,
            "name": "sl90025.bin",
            "note": "Channel F II PSU1 ROM. Tried first, preferred over sl31253.bin.",
            "priority": 1,
            "required": false,
            "source_ref": "src/libretro.c:186",
            "system": "fairchild-channelf"
          }
        ],
        "notes": "FreeChaF is a Fairchild Channel F emulator written for libretro.\n\nBIOS loading is in src/libretro.c:186-208. The core first tries to load\nsl90025.bin (Channel F II PSU1) at address 0x000. If that fails, it falls\nback to sl31253.bin (original Channel F PSU1) at the same address. PSU2\n(sl31254.bin) is always loaded at address 0x400.\n\nMemory layout from src/memory.h:27-30:\n  0x000-0x3FF  PSU1 ROM (sl31253 or sl90025)\n  0x400-0x7FF  PSU2 ROM (sl31254)\n  0x800-0x1FFF cartridge ROM\n  0x2000+      VRAM\n\nIf either PSU ROM fails to load, the core switches to experimental HLE\n(high-level emulation) for that PSU. A warning message is shown to the\nuser recommending real BIOS files. HLE state is tracked per-PSU via\nhle_state.psu1_hle and hle_state.psu2_hle (src/channelf_hle.c).\n\nThe .info file declares all three firmware files as required (opt=false),\nbut the core does not abort on missing BIOS -- it falls back to HLE.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "MEMORY_loadSysROM_libretro() reads the file and copies it into\nMemory[] at the given address offset. PSU1 is loaded at 0x000,\nPSU2 at 0x400. The loader caps file size to (MEMORY_SIZE - address)\nto prevent overflow. MEMORY_RAMStart is advanced past the loaded\nROM to protect it from writes.\n",
            "source_ref": "src/memory.h:27-29, src/memory.c:29-61",
            "target": "0x000-0x7FF in 64K memory space"
          },
          "hle_fallback": {
            "note": "When BIOS files are missing, FreeChaF uses HLE to emulate the\nPSU routines in software. This is marked as experimental and may\ncause compatibility issues with some games. Each PSU can\nindependently fall back to HLE.\n",
            "source_ref": "src/channelf_hle.c"
          },
          "load_priority": {
            "note": "PSU1 loading order: sl90025.bin (Channel F II) first, then\nsl31253.bin (original Channel F) as fallback. If both fail,\nHLE is used. sl90025.bin is the preferred BIOS as it includes\nChannel F II improvements.\n",
            "source_ref": "src/libretro.c:186-198"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FreeChaF",
        "source_commit": "76c7a84f1f7e80f3e6f2bba96fe100cb24e99124",
        "systems": [
          "fairchild-channelf"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "freeintv",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "2018.1.5",
        "cores": [
          "freeintv"
        ],
        "display_name": "Mattel - Intellivision (FreeIntv)",
        "emulator": "FreeIntv",
        "files": [
          {
            "name": "exec.bin",
            "note": "Executive ROM. Big-endian 16-bit words loaded at 0x1000-0x1FFF.",
            "required": true,
            "size": 8192,
            "source_ref": "src/intv.c:47-71, src/libretro.c:1169",
            "system": "intellivision"
          },
          {
            "name": "grom.bin",
            "note": "Graphics ROM. Raw bytes loaded at 0x3000-0x37FF.",
            "required": true,
            "size": 2048,
            "source_ref": "src/intv.c:73-98, src/libretro.c:1173",
            "system": "intellivision"
          }
        ],
        "notes": "Written for libretro by David Richardson. Intellivoice SP0256 emulation\ncontributed by Joe Zbiciak (jzIntv), mask ROM embedded in source\n(src/ivoice.c:337-510, 4097-byte static array). No external ivoice ROM.\n\nBIOS loading in retro_init() (src/libretro.c:1166-1174). Paths joined\ndirectly to system directory, no subdirectory.\n\nloadExec() reads exec.bin as big-endian 16-bit words into 0x1000-0x1FFF.\nloadGrom() reads grom.bin as raw bytes into 0x3000-0x37FF.\n\nBoth files required for operation. Without them, the OSD shows\n\"PUT GROM/EXEC IN SYSTEM DIRECTORY\" and games do not run.\n\nNo hash or size validation on either file.\n\nNo ECS support. No ecs.bin loading code in the source.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/FreeIntv",
        "source_commit": "428915baf2bfc032fc03e645f4f8f9c6c3144979",
        "systems": [
          "intellivision"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "freeintv_ts_overlay",
      "profile": {
        "alias_of": "freeintv",
        "bios_identical_to": "freeintv",
        "core_classification": "alias",
        "core_version": "1.2",
        "cores": [
          "freeintv",
          "freeintvtsoverlay"
        ],
        "data_directories": [
          {
            "destination": "freeintv_overlays",
            "ref": "freeintv-overlays"
          }
        ],
        "display_name": "Mattel - Intellivision (FreeIntvTSOverlay)",
        "emulator": "FreeIntv (Touchscreen Overlay)",
        "files": [
          {
            "md5": "62e761035cb657903761800f4437b8af",
            "name": "exec.bin",
            "note": "Executive ROM.",
            "required": true,
            "size": 8192,
            "source_ref": "src/intv.c:47-71, src/libretro.c:1169",
            "system": "intellivision"
          },
          {
            "md5": "0cd5946c6473e42e8e4c2137785e427f",
            "name": "grom.bin",
            "note": "Graphics ROM.",
            "required": true,
            "size": 2048,
            "source_ref": "src/intv.c:73-98, src/libretro.c:1173",
            "system": "intellivision"
          }
        ],
        "notes": "Alias of FreeIntv. The jcarr71/FreeIntvTSOverlay fork is 100% identical\nto libretro/FreeIntv (zero diff). Jason Carr's overlay work was merged\nupstream. The Makefile produces freeintv_libretro (TARGET_NAME = freeintv),\nand library_name is \"freeintv\" (src/libretro.c:1413).\n\nThe FreeIntvTSOverlay_libretro.info in libretro-core-info has errors:\nwrong overlay directory (claims FreeIntvTS_Overlays, code uses\nfreeintv_overlays), wrong dimensions (claims 300x670, code uses 370x600),\nphantom external PNG files (controller_base.png, default.png,\nbutton_swapscreen.png are either embedded in C headers or nonexistent),\nand firmware1 key typos (uses firmware0_path/firmware0_opt).\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/jcarr71/FreeIntvTSOverlay",
        "systems": [
          "intellivision"
        ],
        "type": "alias",
        "upstream": "https://github.com/libretro/FreeIntv"
      }
    },
    {
      "id": "freej2me",
      "profile": {
        "core_classification": "official_port",
        "core_version": "GIT",
        "cores": [
          "freej2me"
        ],
        "display_name": "Mobile - J2ME (FreeJ2ME)",
        "emulator": "FreeJ2ME",
        "files": [
          {
            "description": "FreeJ2ME libretro Java application",
            "name": "freej2me-lr.jar",
            "note": "Not a BIOS dump. Java emulator loaded by the native core at startup via execvp('java', '-jar', path). Built from source via 'ant'. Must be in the system directory root.",
            "required": true,
            "source_ref": "src/libretro/freej2me_libretro.c:483-486 (GET_SYSTEM_DIRECTORY + fill_pathname_join + java -jar)",
            "system": "j2me"
          }
        ],
        "notes": "The native core is a C bridge that spawns a Java process running\nfreej2me-lr.jar, which handles all J2ME emulation. Communication\nhappens over pipes (Linux) or named pipes (Windows). A Java runtime\n(JRE/JDK 8+) must be installed on the host. The jar is built from\nsource via Apache Ant (build.xml). Same repo hosts standalone AWT\nand SDL2 frontends alongside the libretro frontend.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/hex007/freej2me",
        "source_commit": "b1c4cf13e012938f9d5270621fddea60e5554858",
        "systems": [
          "j2me"
        ],
        "type": "libretro",
        "upstream": "https://github.com/hex007/freej2me"
      }
    },
    {
      "id": "frodo",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v4.2",
        "cores": [
          "frodo"
        ],
        "display_name": "Commodore - C64 (Frodo)",
        "emulator": "Frodo",
        "files": [
          {
            "description": "C64 BASIC V2 ROM",
            "hle_fallback": true,
            "name": "Basic ROM",
            "note": "Embedded as builtin_basic_rom[] in Basic_ROM.h. External file never loaded in practice (DATADIR is empty, path is bare filename in cwd).",
            "required": false,
            "size": 8192,
            "source_ref": "Src/main.cpp:71,77,100-102",
            "system": "commodore-c64"
          },
          {
            "description": "C64 Kernal ROM",
            "hle_fallback": true,
            "name": "Kernal ROM",
            "note": "Embedded as builtin_kernal_rom[] in Kernal_ROM.h. Patched at runtime for fast reset and 1541 IEC traps.",
            "required": false,
            "size": 8192,
            "source_ref": "Src/main.cpp:72,78,104-106",
            "system": "commodore-c64"
          },
          {
            "description": "C64 Character Generator ROM",
            "hle_fallback": true,
            "name": "Char ROM",
            "note": "Embedded as builtin_char_rom[] in Char_ROM.h. Used by VIC-II for text/bitmap rendering.",
            "required": false,
            "size": 4096,
            "source_ref": "Src/main.cpp:73,79,108-110",
            "system": "commodore-c64"
          },
          {
            "description": "Commodore 1541 floppy drive ROM",
            "hle_fallback": true,
            "name": "1541 ROM",
            "note": "Embedded as builtin_drive_rom[] in 1541_ROM.h. Patched at runtime to disable checksum and trap disk I/O.",
            "required": false,
            "size": 16384,
            "source_ref": "Src/main.cpp:74,80,112-114",
            "system": "commodore-c64"
          }
        ],
        "notes": "Frodo is a Commodore 64 emulator by Christian Bauer (Frodo V4.2), ported\nto libretro. It emulates the C64 (MOS 6510, VIC-II, SID, CIA x2) and an\noptional 1541 floppy drive.\n\nAll four ROMs are embedded directly in the core binary as compiled-in\nbyte arrays (Basic_ROM.h, Kernal_ROM.h, Char_ROM.h, 1541_ROM.h). No\nexternal BIOS files are required for normal operation.\n\nThe core attempts to load external ROM files from the current working\ndirectory (DATADIR is empty in the libretro build) at startup via\nload_rom_files() in main.cpp. If any file fails to open or has the wrong\nsize, the embedded ROM is used as fallback via memcpy(). The filenames\nare hardcoded with spaces, no subdirectory prefix.\n\nROM loading order in load_rom_files():\n1. \"Basic ROM\"  (8192 bytes, BASIC_ROM_SIZE 0x2000) -> TheC64->Basic\n2. \"Kernal ROM\" (8192 bytes, KERNAL_ROM_SIZE 0x2000) -> TheC64->Kernal\n3. \"Char ROM\"   (4096 bytes, CHAR_ROM_SIZE 0x1000) -> TheC64->Char\n4. \"1541 ROM\"   (16384 bytes, DRIVE_ROM_SIZE 0x4000) -> TheC64->ROM1541\n\nThe core does NOT construct paths relative to retro_system_directory for\nROM loading. The system directory variable is fetched in retro_init() but\nonly used for the save directory fallback, not for ROM path construction.\nDATADIR defaults to \"\" (empty string) when not defined by the build\nsystem, so the filenames resolve to bare names in the cwd. In practice,\nthe external ROM loading path is effectively unused in the libretro build\nsince the cwd is unpredictable and the filenames contain spaces.\n\nThe Kernal ROM is patched at runtime by PatchKernal() in C64.cpp for\nfast reset (addresses 0x1D84-0x1D85) and IEC bus replacement when 1541\nprocessor emulation is enabled (multiple addresses in the 0x0D00-0x0E00\nrange are patched with 0xF2 trap opcodes).\n\nThe 1541 drive ROM is also patched in PatchKernal(): ROM checksum\nverification is disabled (0x2AE4-0x2AE9 NOPed), DOS idle loop is\ntrapped (0x2C9B), and write sector / format track operations are\nintercepted (0x3594-0x3598, 0x3B0C-0x3B0D).\n\nSource: Src/main.cpp:67-115 (ROM defines, load_rom, load_rom_files),\nSrc/C64.h:33-37 (ROM size constants), Src/C64.cpp:221-285 (PatchKernal),\nSrc/C64.cpp:734-746 (Run init, saves original kernal bytes, calls PatchKernal),\nSrc/Basic_ROM.h, Src/Kernal_ROM.h, Src/Char_ROM.h, Src/1541_ROM.h\n(embedded ROM arrays)\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/frodo-libretro",
        "source_commit": "29dd1864b89d903ed93f1d86d85636ef9e194359",
        "systems": [
          "commodore-c64"
        ],
        "type": "libretro",
        "upstream": "https://github.com/cebix/frodo4"
      }
    },
    {
      "id": "fsuae",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v5.0.7",
        "cores": [
          "fsuae"
        ],
        "display_name": "Commodore - Amiga (FS-UAE)",
        "emulator": "FS-UAE",
        "files": [
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-130.rom",
            "note": "Amiga 500 Kickstart 1.3 r34.5. Default model ROM.",
            "required": false,
            "sha1": "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
            "size": 262144,
            "source_ref": "rommgr.cpp:150-151 (id=6, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-204.rom",
            "note": "Amiga 500+ Kickstart 2.04 r37.175.",
            "required": false,
            "sha1": "c5839f5cb98a7a8947065c3ed2f14f5f42e334a1",
            "size": 524288,
            "source_ref": "rommgr.cpp:158-159 (id=7, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-205.rom",
            "note": "Amiga 600 Kickstart 2.05 r37.350.",
            "required": false,
            "sha1": "02843c4253bbd29aba535b0aa3bd9a85034ecde4",
            "size": 524288,
            "source_ref": "rommgr.cpp:164-165 (id=10, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-120.rom",
            "note": "Amiga 1000 Kickstart 1.2 r33.180.",
            "required": false,
            "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
            "size": 262144,
            "source_ref": "rommgr.cpp:148-149 (id=5, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-310-a1200.rom",
            "note": "Amiga 1200 Kickstart 3.1 r40.68.",
            "required": false,
            "sha1": "e21545723fe8374e91342617604f1b3d703094f1",
            "size": 524288,
            "source_ref": "rommgr.cpp:185-186 (id=15, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-310-a3000.rom",
            "note": "Amiga 3000 Kickstart 3.1 r40.68.",
            "required": false,
            "sha1": "f8e210d72b4c4853e0c9b85d223ba20e3d1b36ee",
            "size": 524288,
            "source_ref": "rommgr.cpp:189-190 (id=61, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-310-a4000.rom",
            "note": "Amiga 4000 Kickstart 3.1 r40.68.",
            "required": false,
            "sha1": "5fe04842d04a489720f0f4bb0e46948199406f49",
            "size": 524288,
            "source_ref": "rommgr.cpp:195-196 (id=16, ROMTYPE_KICK)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "both",
            "name": "amiga-os-310-cd32.rom",
            "note": "Amiga CD32 Kickstart 3.1 r40.60.",
            "required": false,
            "sha1": "3525be8887f79b5929e017b42380a79edfee542d",
            "size": 524288,
            "source_ref": "rommgr.cpp:312-313 (id=18, ROMTYPE_KICKCD32)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "mode": "both",
            "name": "amiga-ext-310-cd32.rom",
            "note": "CD32 extended ROM r40.60. Required for CD32 mode.",
            "required": false,
            "sha1": "5bef3d628ce59cc02a66e6e4ae0da48f60e78f7f",
            "size": 524288,
            "source_ref": "rommgr.cpp:314-315 (id=19, ROMTYPE_EXTCD32)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "mode": "both",
            "name": "cd32fmv.rom",
            "note": "CD32 Full Motion Video cartridge ROM v40.30. Also accepts v40.22 (391777-01).",
            "required": false,
            "sha1": "03ca81c7a7b259cf64bc9582863eca0f6529f435",
            "size": 262144,
            "source_ref": "rommgr.cpp:323-326 (id=23/74, ROMTYPE_CD32CART)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "mode": "both",
            "name": "amiga-ext-130-cdtv.rom",
            "note": "CDTV extended ROM v1.0. Required for CDTV mode. Also accepts v2.30 and v2.7.",
            "required": false,
            "sha1": "7ba40ffa17e500ed9fed041f3424bd81d9c907be",
            "size": 262144,
            "source_ref": "rommgr.cpp:328-329 (id=20, ROMTYPE_EXTCDTV)",
            "system": "amiga",
            "validation": [
              "sha1"
            ]
          },
          {
            "mode": "both",
            "name": "rom.key",
            "note": "Cloanto Amiga Forever decryption key. Enables encrypted ROM loading.",
            "required": false,
            "source_ref": "rommgr.cpp:119-124 (ROMTYPE_KEY), rommgr.cpp:1397-1412 (addkeydir)",
            "system": "amiga"
          }
        ],
        "notes": "FS-UAE is an Amiga emulator by Frode Solheim, based on UAE/WinUAE.\n\nStandalone: scans --kickstarts_dir for .rom/.bin files (default: Documents/FS-UAE/Kickstarts/).\nBatocera overrides to bios/amiga/ via --kickstarts_dir (fsuaePaths.py:8, fsuaeGenerator.py:68).\nLibretro port: scans save_dir/fsuae/Kickstarts/ (frozen at v2.7.15).\nIdentification by SHA-1 checksum, not filename (rommgr.cpp:92-151, romservice.py:78-91).\nAROS kickstart (1 MB) compiled into binary as fallback for all models (rommgr.cpp:112).\nrom.key searched in kickstart dir and multiple fallback paths (rommgr.cpp:1397-1498).\n\nSupported models: A1000, A500, A500+, A600, A1200, A3000, A4000, A4000T, CD32, CDTV.\nDefault model is A500. Each model auto-selects its kickstart via quickstart\nmechanism (cfgfile.cpp:9468-9517 for A500, cfgfile.cpp:9732-9791 for dispatch).\n\nROM database shared between standalone and libretro (same WinUAE-derived rommgr.cpp).\nUpstream v5.0.7 has a larger database (332 vs ~200 ROM IDs in libretro port).\nAlso supports Arcadia, ALG, freezer cartridges, SCSI/CPU board ROMs when configured.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/libretro/libretro-fsuae",
        "source_commit": "06e3030a46a6063aa0f7028c269d972f06c46d5d",
        "systems": [
          "amiga"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/FrodeSolheim/fs-uae"
      }
    },
    {
      "id": "fuse",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.6.0",
        "cores": [
          "fuse"
        ],
        "display_name": "Sinclair - ZX Spectrum (Fuse)",
        "emulator": "Fuse",
        "files": [
          {
            "hle_fallback": true,
            "md5": "4c42a2f075212361c3117015b107ff68",
            "name": "fuse/48.rom",
            "note": "Spectrum 48K ROM. Also used for 16K and 48K NTSC. Embedded in core.",
            "required": false,
            "sha1": "5ea7c2b824672e914525d1d5c419d71b84a426a2",
            "size": 16384,
            "source_ref": "fuse/settings.c:216-217, fuse/machines/spec48.c:76",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "b4d2692115a9f2924df92a3cbfb358fb",
            "name": "fuse/128-0.rom",
            "note": "Spectrum 128K ROM 0 (editor). Embedded in core.",
            "required": false,
            "sha1": "4f4b11ec22326280bdb96e3baf9db4b4cb1d02c5",
            "size": 16384,
            "source_ref": "fuse/settings.c:214, fuse/machines/spec128.c:70",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "6e09e5d3c4aef166601669feaaadc01c",
            "name": "fuse/128-1.rom",
            "note": "Spectrum 128K ROM 1 (48 BASIC). Embedded in core.",
            "required": false,
            "sha1": "80080644289ed93d71a1103992a154cc9802b2fa",
            "size": 16384,
            "source_ref": "fuse/settings.c:215, fuse/machines/spec128.c:73",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "4ed7af4636308b8a48d7a35e6c5b546b",
            "name": "fuse/plus2-0.rom",
            "note": "Spectrum +2 ROM 0. Embedded in core.",
            "required": false,
            "sha1": "72703f9a3e734f3c23ec34c0727aae4ccbef9a91",
            "size": 16384,
            "source_ref": "fuse/settings.c:237, fuse/machines/specplus2.c:70",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "b3db95931cc844efaeb82db9c171b9f3",
            "name": "fuse/plus2-1.rom",
            "note": "Spectrum +2 ROM 1. Embedded in core.",
            "required": false,
            "sha1": "de8b0d2d0379cfe7c39322a086ca6da68c7f23cb",
            "size": 16384,
            "source_ref": "fuse/settings.c:238, fuse/machines/specplus2.c:73",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "9833b8b73384dd5fa3678377ff00a2bb",
            "name": "fuse/plus3-0.rom",
            "note": "Spectrum +3 ROM 0. Also used for +2A. Embedded in core.",
            "required": false,
            "sha1": "e319ed08b4d53a5e421a75ea00ea02039ba6555b",
            "size": 16384,
            "source_ref": "fuse/settings.c:239, fuse/settings.c:243, fuse/machines/specplus3.c:197",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "0f711ceb5ab801b4701989982e0f334c",
            "name": "fuse/plus3-1.rom",
            "note": "Spectrum +3 ROM 1. Also used for +2A. Embedded in core.",
            "required": false,
            "sha1": "c9969fc36095a59787554026a9adc3b87678c794",
            "size": 16384,
            "source_ref": "fuse/settings.c:240, fuse/settings.c:244, fuse/machines/specplus3.c:200",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "3b6dd659d5e4ec97f0e2f7878152c987",
            "name": "fuse/plus3-2.rom",
            "note": "Spectrum +3 ROM 2. Also used for +2A. Embedded in core.",
            "required": false,
            "sha1": "22e50c6ba4157a3f6a821bd9937cd26e292775c6",
            "size": 16384,
            "source_ref": "fuse/settings.c:241, fuse/settings.c:245, fuse/machines/specplus3.c:203",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "a148bcc575e51389e84fdf5d555c3196",
            "name": "fuse/plus3-3.rom",
            "note": "Spectrum +3 ROM 3. Also used for +2A. Embedded in core.",
            "required": false,
            "sha1": "65f031caa8148a5493afe42c41f4929deab26b4e",
            "size": 16384,
            "source_ref": "fuse/settings.c:242, fuse/settings.c:246, fuse/machines/specplus3.c:206",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "bc123f625e245c225f92ef05933ed134",
            "name": "fuse/plus3e-0.rom",
            "note": "Spectrum +3e ROM 0. Embedded in core.",
            "required": false,
            "sha1": "649fbd233490bf58b35350b0123d36caaaa011eb",
            "size": 16384,
            "source_ref": "fuse/settings.c:247, fuse/machines/specplus3e.c:70",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "617364264c587d20c9fc4746c29679f2",
            "name": "fuse/plus3e-1.rom",
            "note": "Spectrum +3e ROM 1. Embedded in core.",
            "required": false,
            "sha1": "f12198108cbb14de4f03c6695bc16d08c85ee214",
            "size": 16384,
            "source_ref": "fuse/settings.c:248, fuse/machines/specplus3e.c:73",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "c363e95dcd0a90e6e7f847e6e47e0179",
            "name": "fuse/plus3e-2.rom",
            "note": "Spectrum +3e ROM 2. Embedded in core.",
            "required": false,
            "sha1": "773633dce5ba323a9e00d9d0f9e4d8c295df7c87",
            "size": 16384,
            "source_ref": "fuse/settings.c:249, fuse/machines/specplus3e.c:76",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "a148bcc575e51389e84fdf5d555c3196",
            "name": "fuse/plus3e-3.rom",
            "note": "Spectrum +3e ROM 3. Same as plus3-3.rom. Embedded in core.",
            "required": false,
            "sha1": "65f031caa8148a5493afe42c41f4929deab26b4e",
            "size": 16384,
            "source_ref": "fuse/settings.c:250, fuse/machines/specplus3e.c:79",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "fb3f86eb1e5a695d9c50c124e7cfb875",
            "name": "fuse/se-0.rom",
            "note": "Spectrum SE ROM 0. Embedded in core.",
            "required": false,
            "sha1": "8608328d7dd66602a4846f046b24fed500f7d828",
            "size": 16384,
            "source_ref": "fuse/settings.c:257, fuse/machines/spec_se.c:89",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "88de4a3129086f34bb9ca559acc51e6c",
            "name": "fuse/se-1.rom",
            "note": "Spectrum SE ROM 1. Embedded in core.",
            "required": false,
            "sha1": "3be5de57dd3bd0a9d15c57cabe9179afe2906a52",
            "size": 16384,
            "source_ref": "fuse/settings.c:258, fuse/machines/spec_se.c:92",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "9dd7ecf784a6c04265c073c236f5fadb",
            "name": "fuse/tc2048.rom",
            "note": "Timex TC2048 ROM. Embedded in core.",
            "required": false,
            "sha1": "febb2d495b6eda7cdcb4074935d6e9d9f328972d",
            "size": 16384,
            "source_ref": "fuse/settings.c:260, fuse/machines/tc2048.c:80",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "55d462fccc6c536037404ef4ced08bec",
            "name": "fuse/tc2068-0.rom",
            "note": "Timex TC2068 ROM 0. Also used for TS2068. Embedded in core.",
            "required": false,
            "sha1": "1446cb2780a9dedf640404a639fa3ae518b2d8aa",
            "size": 16384,
            "source_ref": "fuse/settings.c:261, fuse/settings.c:263, fuse/machines/tc2068.c:138",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "md5": "575d203c6e15e679fba0b73f854ec7a2",
            "name": "fuse/tc2068-1.rom",
            "note": "Timex TC2068 ROM 1 (EXROM). Also used for TS2068. Embedded in core.",
            "required": false,
            "sha1": "7e265a2c1f621ed365ea23bdcafdedbc79c1299c",
            "size": 8192,
            "source_ref": "fuse/settings.c:262, fuse/settings.c:264, fuse/machines/tc2068.c:141",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/128p-0.rom",
            "note": "Pentagon 128K/512K/1024 ROM 0. Required for Pentagon machines.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:226, fuse/settings.c:230, fuse/settings.c:234, fuse/machines/pentagon.c:135",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/128p-1.rom",
            "note": "Pentagon 128K/512K/1024 ROM 1. Required for Pentagon machines.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:227, fuse/settings.c:231, fuse/settings.c:235, fuse/machines/pentagon.c:138",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/trdos.rom",
            "note": "TR-DOS ROM (Beta 128 disk interface). Used by Pentagon and Scorpion.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:228, fuse/settings.c:232, fuse/settings.c:236, fuse/machines/pentagon.c:141",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/gluck.rom",
            "note": "Gluck ROM. Required for Pentagon 512K and 1024.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:229, fuse/settings.c:233, fuse/machines/pentagon512.c:82",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/256s-0.rom",
            "note": "Scorpion 256K ROM 0. Required for Scorpion machine.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:252, fuse/machines/scorpion.c:76",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/256s-1.rom",
            "note": "Scorpion 256K ROM 1. Required for Scorpion machine.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:253, fuse/machines/scorpion.c:79",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/256s-2.rom",
            "note": "Scorpion 256K ROM 2. Required for Scorpion machine.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:254, fuse/machines/scorpion.c:82",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/256s-3.rom",
            "note": "Scorpion 256K ROM 3 (TR-DOS). Required for Scorpion machine.",
            "required": true,
            "size": 16384,
            "source_ref": "fuse/settings.c:255, fuse/machines/scorpion.c:85",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/if1-2.rom",
            "note": "Interface 1 ROM (edition 2). Loaded by peripherals/if1.c:403.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:221, fuse/peripherals/if1.c:404",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "78e61a2a02121873c1756b21fd1398b1",
            "name": "fuse/disciple.rom",
            "note": "DISCiPLE disk interface ROM. Bundled in repo but not in mem_entries[].",
            "required": false,
            "sha1": "9a75ed4b293f968985be4c9aa893cd88276d1ced",
            "size": 8192,
            "source_ref": "fuse/settings.c:220, fuse/peripherals/disk/disciple.c:279",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "42e5de16fb5e50082bb954ec7ce45851",
            "name": "fuse/plusd.rom",
            "note": "+D disk interface ROM. Bundled in repo but not in mem_entries[].",
            "required": false,
            "sha1": "6b841dc5797ef7eb219ad455cd1e434ca3b9d30d",
            "size": 8192,
            "source_ref": "fuse/settings.c:251, fuse/peripherals/disk/plusd.c:239",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/didaktik80.rom",
            "note": "Didaktik 80 disk interface ROM. Not embedded.",
            "required": false,
            "size": 14336,
            "source_ref": "fuse/settings.c:219, fuse/peripherals/disk/didaktik.c:236",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/opus.rom",
            "note": "Opus Discovery disk interface ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:225, fuse/peripherals/disk/opus.c:210",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/mf1.rom",
            "note": "Multiface 1 ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:222, fuse/peripherals/multiface.c:224",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/mf128.rom",
            "note": "Multiface 128 ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:223, fuse/peripherals/multiface.c:225",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/mf3.rom",
            "note": "Multiface 3 ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:224, fuse/peripherals/multiface.c:226",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "md5": "c54aa8f374b0971f51546c29d5d1eba1",
            "name": "fuse/speccyboot-1.4.rom",
            "note": "SpeccyBoot ethernet ROM. Bundled in repo but not in mem_entries[].",
            "required": false,
            "sha1": "16af6f052b38a027dd49ba6e96e3a59d16b62672",
            "size": 8192,
            "source_ref": "fuse/settings.c:259, fuse/peripherals/speccyboot.c:148",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/ttx2000s.rom",
            "note": "TTX2000S teletext adapter ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:265, fuse/peripherals/ttx2000s.c:198",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          },
          {
            "name": "fuse/usource.rom",
            "note": "Currah uSource ROM. Not embedded.",
            "required": false,
            "size": 8192,
            "source_ref": "fuse/settings.c:266, fuse/peripherals/usource.c:129",
            "system": "sinclair-zxspectrum",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Fuse (Free Unix Spectrum Emulator) ported to libretro. Emulates the ZX\nSpectrum family: 16K, 48K, 48K NTSC, 128K, +2, +2A, +3, +3e, SE, Timex\nTC2048, TC2068, TS2068, Pentagon 128K/512K/1024, and Scorpion 256K.\n\nROM loading is in src/compat/file.c:91-118. The core first checks an\ninternal table of embedded ROMs (mem_entries[]). If the ROM filename is\nnot found there, it falls back to the filesystem at\n{system_dir}/fuse/{rom_filename} (file.c:160-175).\n\nEmbedded ROMs cover 48K-family, 128K, +2, +3, +3e, SE, TC2048, TC2068.\nPentagon, Scorpion, and peripheral ROMs are NOT embedded and must be\nplaced in {system_dir}/fuse/ by the user.\n\nDefault ROM filenames are set in fuse/settings.c:209-260. Each machine\ntype loads its ROMs during reset via machine_load_rom() calls in\nfuse/machines/*.c files. All ROMs are size-validated at load time\n(fuse/machine.c:289).\n\nThe +2A reuses the +3 ROMs (plus3-0/1/2/3.rom) per settings.c:234-237.\nThe TS2068 reuses TC2068 ROMs (tc2068-0/1.rom) per settings.c:257-258.\nSpectrum 16K uses 48.rom per settings.c:211.\n\nUpstream FUSE 1.7.0 has SP0256 speech chip (sp0256-al2.rom) and Currah\nuSpeech (uspeech.rom) peripherals not ported to libretro.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "ROM resolution order in compat_file_open():\n1. Check mem_entries[] (18 embedded ROMs compiled as .h arrays)\n2. If not found, try {system_dir}/fuse/{filename} on filesystem\nThe path is constructed by concatenating system_dir + \"/fuse\" + path\nwhere path includes the leading slash from fuse's internal path.\n",
            "source_ref": "src/compat/file.c:55-89, 129-223"
          },
          "embedded_roms": {
            "note": "18 ROMs embedded in the binary via .h headers generated from .rom files:\n48.rom, 128-0.rom, 128-1.rom, plus2-0.rom, plus2-1.rom,\nplus3-0/1/2/3.rom, plus3e-0/1/2/3.rom, se-0.rom, se-1.rom,\ntc2048.rom, tc2068-0.rom, tc2068-1.rom.\ndisciple.rom, plusd.rom, speccyboot-1.4.rom are present in the repo\nfuse/roms/ directory but NOT in mem_entries[], so they are loaded\nfrom the filesystem only.\n",
            "source_ref": "src/compat/file.c:55-73"
          },
          "machine_rom_map": {
            "note": "Spectrum 16K:       48.rom (1 ROM)\nSpectrum 48K:       48.rom (1 ROM)\nSpectrum 48K NTSC:  48.rom (1 ROM)\nSpectrum 128K:      128-0.rom, 128-1.rom (2 ROMs)\nSpectrum +2:        plus2-0.rom, plus2-1.rom (2 ROMs)\nSpectrum +2A:       plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)\nSpectrum +3:        plus3-0.rom, plus3-1.rom, plus3-2.rom, plus3-3.rom (4 ROMs)\nSpectrum +3e:       plus3e-0/1/2/3.rom (4 ROMs)\nSpectrum SE:        se-0.rom, se-1.rom (2 ROMs)\nTimex TC2048:       tc2048.rom (1 ROM)\nTimex TC2068:       tc2068-0.rom, tc2068-1.rom (2 ROMs)\nTimex TS2068:       tc2068-0.rom, tc2068-1.rom (2 ROMs, same files)\nPentagon 128K:      128p-0.rom, 128p-1.rom, trdos.rom (3 ROMs)\nPentagon 512K:      128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)\nPentagon 1024:      128p-0.rom, 128p-1.rom, trdos.rom, gluck.rom (4 ROMs)\nScorpion 256K:      256s-0.rom, 256s-1.rom, 256s-2.rom, 256s-3.rom (4 ROMs)\n",
            "source_ref": "fuse/settings.c:209-260, fuse/machines/*.c"
          },
          "rom_copyright": {
            "note": "Most ROMs are copyright Amstrad. Amstrad allows free distribution but\nretains copyright. Selling ROMs standalone is not permitted. SE ROMs\nare GPLv2+. DISCiPLE/+D ROMs are copyright Datel, distribution allowed.\nSpeccyBoot ROM is MIT licensed.\n",
            "source_ref": "fuse/roms/README.copyright"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/fuse-libretro",
        "source_commit": "000a8ae51a5141d75c109a22150e37ba06d57910",
        "systems": [
          "sinclair-zxspectrum"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/fuse-emulator/"
      }
    },
    {
      "id": "future-pinball",
      "profile": {
        "analysis": {
          "named_but_not_read": {
            "entries": [
              {
                "note": "Passed to the toolbar builder, which calls CreateToolbarEx with hBMInst zero and a bitmap handle held in a global as wBMID. The module has no resource under that name and neither syscall trace shows an open for it, although both traces reach the main window.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00438ff5, 0x00448ba0, 0x00432240-0x00432290",
                "what": "skin\\toolbar.bmp"
              },
              {
                "note": "Searched for inside a feed URL and skipped past to recover the table name, with the literal opps as the fallback. Not a path being built.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00439e40-0x00439e79",
                "what": "tables\\ in lower case"
              },
              {
                "note": "A second extension accepted beside .fpl in the library dialogs. No file with it ships and nothing opens one by name.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004414d0",
                "what": ".jlb"
              }
            ],
            "note": "String literals that survive a path scan without ever reaching a file"
          },
          "shipped_with_the_binary": {
            "entries": [
              {
                "note": "DmdDisplayDemo.fpt, LightSequencerDemo.fpt, Ramp-VUK-Demo.fpt and SegmentDisplayDemo.fpt. The directory itself is the default table path and the last prefix the external script resolver tries.",
                "source_ref": "FuturePinballSetup_v1.9.1.20101231.exe app/Tables",
                "what": "Tables\\, four demonstration tables"
              },
              {
                "note": "Named st_<id>_<n>_<n>.jpg from the entries of fpLatestTables.xml and fetched with the same libcurl path, so the set changes with the feed.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x0043d60f",
                "what": "Feeds\\, 385 table screenshots"
              }
            ],
            "note": "Present in the release and read by the program, but named at runtime rather than by a literal in the code, so there is no fixed filename to record."
          },
          "user_supplied_paths": {
            "entries": [
              {
                "note": "LoadExternalScript takes whatever name the table's script passes. The bare attempt resolves against the working directory, which is the table's own folder. No Scripts directory ships.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004797c0-0x00479905, 0x00478be0",
                "what": "external table scripts, tried bare then under Scripts\\ then Tables\\"
              },
              {
                "note": "Built as the prefix, the table name and the .fpRAM extension. Written from play, so it is save data rather than something to obtain. The installer creates the directory empty.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x0043aa80, 0x00475602, 0x00475892",
                "what": "fpRAM\\<table>.fpRAM, per table persistent state"
              },
              {
                "note": "Each site only fills the initial directory of a GetOpenFileName or GetSaveFileName call in the DMD font and model import and export dialogs, so nothing is read until the user picks a file. DmdFonts ships empty and Models is not created at all. Fonts carry .dmdf and models .fpm, both authored rather than distributed.",
                "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00443595, 0x00443efc, 0x00516ba8, 0x00516d31, 0x00441fc8, 0x004429bb, 0x004317fa",
                "what": "DmdFonts\\ and Models\\, editor working directories"
              }
            ],
            "note": "Named by a table or written by the program, with no fixed filename"
          }
        },
        "core_classification": "game_engine",
        "core_version": "1.9.1.20101231",
        "cores": [
          "fpinball",
          "future-pinball"
        ],
        "display_name": "Future Pinball",
        "emulator": "future-pinball",
        "files": [
          {
            "bundled": true,
            "description": "Newton Game Dynamics, the rigid body solver under the ball physics",
            "name": "Newton.dll",
            "note": "83 functions are bound from it, the largest third party surface in the binary. The process does not start without it.",
            "required": true,
            "size": 446464,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "FMOD 3 audio engine",
            "name": "fmod.dll",
            "note": "22 functions bound, FSOUND_Init through the sample and stream calls. Every one of those calls passes FSOUND_LOADMEMORY, so it decodes the table's own buffers rather than reading files.",
            "required": true,
            "size": 162816,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory",
            "system": "fpinball"
          },
          {
            "aliases": [
              "DevIL.dll"
            ],
            "bundled": true,
            "description": "DevIL image decoder",
            "name": "devil.dll",
            "note": "8 functions bound, ilInit through ilLoadL. Spelled DevIL.dll in the import descriptors and shipped lowercase, which the case insensitive loader treats as one name.",
            "required": true,
            "size": 269312,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory",
            "system": "fpinball"
          },
          {
            "aliases": [
              "ILU.dll"
            ],
            "bundled": true,
            "description": "DevIL image utility library, scaling and canvas resize",
            "name": "ilu.dll",
            "note": "4 functions bound: iluInit, iluScale, iluEnlargeCanvas and iluImageParameter, used to fit imported artwork to texture dimensions.",
            "required": true,
            "size": 27648,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory",
            "system": "fpinball"
          },
          {
            "aliases": [
              "ILUT.dll"
            ],
            "bundled": true,
            "description": "DevIL toolkit layer, image to Windows bitmap conversion",
            "name": "ilut.dll",
            "note": "3 functions bound: ilutRenderer, ilutConvertToHBitmap and ilutGetBmpInfo, which produce the preview bitmaps the editor's manager windows draw.",
            "required": true,
            "size": 16384,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "HTTP client for the table feed",
            "name": "libcurl.dll",
            "note": "Only four functions are bound, curl_easy_init, setopt, perform and cleanup, and the single use is fetching the table list from http://www.pinsimdb.org/fpreleases/backend_xml.php under the user agent FuturePinball-agent/1.0. The binding is static all the same, so the process still refuses to start without the file.",
            "required": true,
            "size": 626688,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 import directory, .text:0x0043dc70",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Scintilla, the editing control behind the table script editor",
            "name": "SciLexer.dll",
            "note": "The one library taken with LoadLibraryA rather than the import directory. A null return puts up \"The Scintilla DLL could not be loaded.\", stores a null handle and falls through to the rest of startup, so the program runs and only the script editor is lost.",
            "required": false,
            "size": 407552,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x0042c501-0x0042c528",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "260 pinball part models, the library the manual tells tables to link",
            "name": "fpModels.fpl",
            "note": "Models cannot be authored outside the development team, so a table that wants a bumper cap or a flipper bat either embeds a copy or links here, and the Model Manager documents linking as the recommended choice. Absent, the table still loads and every model it linked is missing.",
            "path": "Libraries/fpModels.fpl",
            "required": false,
            "size": 5166080,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf, Future Pinball Manual.chm ModelManager.html",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "90 textures for the standard table objects",
            "name": "fpTextures.fpl",
            "note": "Carries the surface art the built in parts expect, bulbs, triggers, plungers and the rest. Resolved the same way as every other library.",
            "path": "Libraries/fpTextures.fpl",
            "required": false,
            "size": 3495424,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf, Future Pinball Manual.chm TextureManager.html",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "82 ramp models, keyed by profile, width and height",
            "name": "fpRamps.fpl",
            "note": "Storage names encode the shape and the dimensions, ramp-pool-t1_w30_h20 and so on, with a left and a right variant of each.",
            "path": "Libraries/fpRamps.fpl",
            "required": false,
            "size": 2813440,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "20 machine sounds, ball release, bumpers, coin in and the rest",
            "name": "fpSounds.fpl",
            "path": "Libraries/fpSounds.fpl",
            "required": false,
            "size": 170496,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf, Future Pinball Manual.chm SoundManager.html",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "11 sphere maps giving metal and plastic parts their reflections",
            "name": "fpSphereMaps.fpl",
            "note": "Storage names are bracketed, [chrome-silver], [chrome-gold] and similar, which is how a material references one.",
            "path": "Libraries/fpSphereMaps.fpl",
            "required": false,
            "size": 223744,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "6 dot matrix fonts, named for their cell size",
            "name": "fpDmdFonts.fpl",
            "note": "dmd05x05p through dmd08x13p. A DMD display element with no font draws nothing.",
            "path": "Libraries/fpDmdFonts.fpl",
            "required": false,
            "size": 58880,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf, Future Pinball Manual.chm FontManager.html",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "3 playfield images, including the plunger cutout template",
            "name": "fpPlayfields.fpl",
            "path": "Libraries/fpPlayfields.fpl",
            "required": false,
            "size": 364032,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Script library, holding the one sample script the manual quotes",
            "name": "fpScripts.fpl",
            "note": "The manual's worked example is ExecuteGlobal LoadExternalScript(\"fpScripts.fpl\\myscript\"), which is the branch taken when a reference carries the .fpl extension. What ships is a single storage named testscript.",
            "path": "Libraries/fpScripts.fpl",
            "required": false,
            "size": 4096,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00478d20, Future Pinball Manual.chm GlobalScript.html",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Template opened by File then New",
            "name": "NewTable.fpt",
            "note": "The install directory is copied into the default table path buffer and this name appended, then the result goes through the ordinary table open. It is a full table with a playfield and a plunger, not an empty document.",
            "required": false,
            "size": 226816,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00448ea9-0x00448edb",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Development guide, 79 topics",
            "name": "Future Pinball Manual.chm",
            "note": "Opened with ShellExecuteA on the install directory plus this path when the help command carries id 0x8043. It is the only description of the library link mechanism and of LoadExternalScript.",
            "path": "Help/Future Pinball Manual.chm",
            "required": false,
            "size": 8992653,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x00478477-0x004784c4",
            "system": "fpinball"
          },
          {
            "description": "Microsoft Windows Script 5.6 documentation, the VBScript reference",
            "name": "Script56.chm",
            "note": "The script editor's help falls to this path for every command id other than 0x8043, again through ShellExecuteA against the install directory. No Future Pinball release ships it: table scripts are VBScript and this is Microsoft's own reference for the language, expected to be dropped into Help beside the manual.",
            "path": "Help/Script56.chm",
            "required": false,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x004784a3-0x004784c4",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Cached table list from pinsimdb.org",
            "name": "fpLatestTables.xml",
            "note": "libcurl writes it, CreateFileA with OPEN_EXISTING reads it back and DeleteFileA drops it when the panel refreshes. The code builds the path as feeds\\ against a directory the installer creates as Feeds. A snapshot ships with the release, so the panel has something to show before any fetch.",
            "path": "Feeds/fpLatestTables.xml",
            "required": false,
            "size": 752639,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x0043dc70-0x0043dc99, 0x0043e776-0x0043e79c",
            "system": "fpinball"
          },
          {
            "description": "NaturalPoint TrackIR client library, head tracking",
            "name": "NPClient.dll",
            "note": "The directory is read from HKCU\\Software\\NaturalPoint\\NATURALPOINT\\NPClient Location, this name appended and the result given to LoadLibraryA; NP_GetSignature and the rest are then bound with GetProcAddress. A null handle jumps past all tracking setup. It comes from a TrackIR install, not from any Future Pinball distribution, which is why no path is given here.",
            "required": false,
            "source_ref": "Future Pinball.exe 1.9.1.20101231 .text:0x0045f1b8-0x0045f1f8",
            "system": "fpinball"
          }
        ],
        "mode": "standalone",
        "notes": "Closed-source Windows pinball simulator and table editor written by Chris\nLeathley for BSP Software Design Solutions. Development stopped with\nv1.9.1.20101231, still served from futurepinball.com. Rendering is OpenGL\n(88 imports from opengl32 and 4 from glu32); ddraw is loaded by name only to\ncall DirectDrawCreateEx while enumerating display modes. Physics come from\nNewton Game Dynamics, audio from FMOD 3, image decoding from DevIL and the\nscript editor from Scintilla. The binary registers its own type library at\nstartup through LoadTypeLib and RegisterTypeLib on its own path, which is the\nregistration RetroBat checks under TypeLib\\{FB22A459-4AD0-4CB3-B959-15158F7139F5}\nbefore deciding to relaunch elevated.\nref: Future Pinball.exe 1.9.1.20101231 import directory, .text:0x0042c7a2-0x0042c82e\n\nThe release is named 1.9.1.20101231 but the executable inside it carries\nFileVersion 1.9.2008.1225 in its version resource and prints\n\"Version 1.9.1.20091231\" in its own banner.\nref: Future Pinball.exe 1.9.1.20101231 .rsrc version, .text:0x0043d288-0x0043d298\n\nEvery relative path below hangs off one root. At startup GetModuleFileNameA\nfills a buffer, the code scans back to the last backslash and terminates the\nstring just after it, and that install directory with its trailing separator\nis kept for the life of the process.\nref: Future Pinball.exe 1.9.1.20101231 .text:0x00432af0-0x00432b49\n\nA table is an OLE compound document with the .fpt extension and it carries\nits own media. Every FMOD load passes FSOUND_LOADMEMORY (mode 0x8130 for\nsamples, 0x4000a130 for streams) and images go through ilLoadL, the memory\nlump entry point, never ilLoadImage. So sounds, music and textures are read\nout of the table file and no external media is opened while a table plays.\nref: Future Pinball.exe 1.9.1.20101231 .text:0x00457ede,0x00457f6f,0x00457fe6,0x0045805b,0x004417f6\n\nWhat a table can pull from outside itself is a resource library. Libraries\nare .fpl files, also OLE compound documents, holding models, textures, sounds,\nDMD fonts and scripts under one storage per item. The Texture, Sound, Model\nand DMD Font managers each offer Import, which copies the item into the table,\nand Link, which records the library name and the item name instead; the manual\nrecommends always linking to the shipped model library. A linked library is\nopened by StgOpenStorage on the name as written, which resolves against the\ntable's own folder, and on failure against the install directory plus\n\"Libraries\\\". Both failing raises \"Unabled to Open Library - '<name>'\" followed\nby \"There will be some functions missing from the game.\" as a warning box, and\nthe program carries on.\nref: Future Pinball.exe 1.9.1.20101231 .text:0x004e6cf0-0x004e6ebf, .rsrc string 149-150,\nFuture Pinball Manual.chm LibraryResourceManager.html, ModelManager.html, TextureManager.html,\nSoundManager.html, FontManager.html\n\nA table script reaches outside itself through LoadExternalScript, whose result\nis handed to VBScript's ExecuteGlobal. When the reference ends in .fpl the\nscript is pulled from that library, otherwise the name is tried as given\nagainst the working directory, then under the install directory with the\n\"Scripts\\\" prefix, then with \"Tables\\\", and a miss reports\n\"Unable to load external script\". No Scripts directory ships, so what it holds\nis whatever a given table asks for.\nref: Future Pinball.exe 1.9.1.20101231 .text:0x004797c0-0x00479905, 0x00478be0-0x00478c66,\n0x00478d20, Future Pinball Manual.chm GlobalScript.html\n\nSettings live in the registry under HKCU\\Software\\Future Pinball, split into\nGamePlayer, GamePlayer\\Joypads and Editor keys; there is no ini file.\nRetroBat writes resolution, aspect ratio, camera, render preset and the whole\njoypad map there before launching. Per table state is written to\nfpRAM\\<table>.fpRAM beside the program. Nothing in the program verifies a size\nor a hash on any file it opens, so the figures recorded below are those of the\n1.9.1.20101231 release and are informative.\nref: Future Pinball.exe 1.9.1.20101231 .text:0x0043aa80,0x00475602,0x00475892,\nretrobat emulatorLauncher/Generators/Fpinball.Generator.cs:326-491\n\nFront ends drive it with the documented switches /Open \"<table>\", /Play, /Exit\nand /ArcadeRender. ES-DE declares it for Windows only, as FUTURE-PINBALL\nfinding \"Future Pinball.exe\" and as FUTURE-PINBALL-FPLOADER finding\n\"BAM\\FPLoader.exe\", both invoked with /Exit /Play /Open; the fpinball system\nis a placeholder on its six other platforms. RetroBat maps the emulator keys\nfpinball and bam to one generator, one install folder and the same\n\"Future Pinball.exe\" presence check, swapping only the launched binary, and\noptionally starts dmdext against DmdDevice.ini to mirror the DMD. Batocera ran\nit in a wine bottle on x86_64 and dropped it for Visual Pinball. BAM is\nravarcade's loader: FPLoader.exe starts the same executable with BAM.dll\ninjected, and it names none of its own files from inside Future Pinball.\nref: es-de resources/systems/windows/es_find_rules.xml:438-461,\nes-de resources/systems/windows/es_systems.xml, Future Pinball Manual.chm CommandLine.html,\nretrobat emulatorLauncher/Generators/Fpinball.Generator.cs:109-181,\nbatocera-linux batocera-Changelog.md:214\n",
        "profiled_date": "2026-08-11",
        "source": "https://futurepinball.com/",
        "systems": [
          "fpinball"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "future-pinball-fploader",
      "profile": {
        "analysis": {
          "named_but_not_obtainable": {
            "entries": [
              {
                "note": "fopen_s with rb then fread, guarded by two globals and reached only after glGetFloatv has read the modelview and projection matrices. The path is absolute and points at a directory no install creates.",
                "source_ref": "BAM.dll 1.5-408 .text:0x100cff69-0x100cffa5",
                "what": "c:\\games\\ppmm.bin"
              }
            ],
            "note": "A literal the code opens that no distribution can provide"
          },
          "platform_components": {
            "entries": [
              {
                "note": "Visual C++ 2015 or later runtime. Neither distribution carries it.",
                "source_ref": "BAM.dll, renderingengine.dll import directories",
                "what": "MSVCP140.dll, VCRUNTIME140.dll, CONCRT140.dll and the api-ms-win-crt set"
              },
              {
                "note": "Visual C++ 2010 and 2013 runtimes, for the older plugins.",
                "source_ref": "PostFX.dll, TrackIR.dll, DesktopKinect.dll, PinballHighScore.dll import directories",
                "what": "MSVCR100.dll, MSVCR120.dll and MSVCP120.dll"
              },
              {
                "note": "Windows components.",
                "source_ref": "BAM.dll, renderingengine.dll, plugin import directories",
                "what": "opengl32, glu32, dinput8, hid, avicap32, avifil32, msvfw32, d3d11, dxgi"
              }
            ],
            "note": "Named in import directories but supplied by Windows or by a Microsoft redistributable, so they are prerequisites rather than payload."
          },
          "shipped_but_not_loaded": {
            "entries": [
              {
                "note": "No shipped binary imports it and neither BAM.dll nor renderingengine.dll names it in any string; both carry their own zlib.",
                "source_ref": "BAM.dll, renderingengine.dll and every plugin import directory",
                "what": "zlib.dll in BAM-OpenVR.zip"
              },
              {
                "note": "The zlib licence the loader source carries, copied into the install.",
                "source_ref": "bam-setup.exe payload",
                "what": "License.txt, 3741 bytes"
              }
            ],
            "note": "Present in a distribution with no code path that opens it"
          },
          "written_not_read": {
            "entries": [
              {
                "note": "Built as cfg\\\\<table> then finished with the extension. Saved from the menu and read back on the next launch of the same table.",
                "source_ref": "BAM.dll 1.5-408 .text:0x10025e59, 0x100319b9, 0x10032bdb",
                "what": "cfg\\<table>.cfg and cfg\\<table>.seq, per table settings and camera sequences"
              },
              {
                "note": "Checked with GetFileAttributesA and rebuilt when absent. Holds shadowmaps.txt and one <name>-shadows.tga per light, written through the rendering engine.",
                "source_ref": "BAM.dll 1.5-408 .text:0x10105c18-0x1010697f",
                "what": "Cache\\<table>-shadows.zip, precomputed shadow maps"
              },
              {
                "note": "fopen_s with wb, fwrite, fclose. No read site exists.",
                "source_ref": "BAM.dll 1.5-408 .text:0x10077b80-0x10077bd7",
                "what": "set3points.dat, the three point calibration of the screen corners"
              },
              {
                "note": "The crash log is written from the fault handler installed at load time; the other two only when the matching switch is on the command line.",
                "source_ref": "BAM.dll 1.5-408 .text:0x1007a45b, 0x1007ae0a, 0x100d4318-0x100d4391",
                "what": "BAM_debug.log, BAM_CRASH.log and OpenGLdbg.log"
              }
            ],
            "note": "Opened only for writing, so they are output rather than something to obtain. All of them sit in the BAM directory."
          }
        },
        "core_classification": "enhanced_fork",
        "core_version": "1.5-408",
        "cores": [
          "future-pinball-fploader",
          "bam"
        ],
        "display_name": "Future Pinball (BAM)",
        "emulator": "future-pinball-fploader",
        "files": [
          {
            "bundled": true,
            "description": "The mod, injected into Future Pinball and holding every feature",
            "name": "BAM.dll",
            "note": "Taken from the loader's directory, else from C:\\Games\\Future Pinball\\BAM\\. Neither present ends the loader with a message box.",
            "required": true,
            "size": 8266240,
            "source_ref": "BAM_FPloader FPLoader.cpp:45, 166-182",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Rendering engine and asset loader behind BAM",
            "name": "renderingengine.dll",
            "note": "Bound statically by BAM.dll, so the injected LoadLibraryA fails without it. The loader adds its own directory to %PATH% for this file alone.",
            "required": true,
            "size": 8791552,
            "source_ref": "BAM.dll 1.5-408 import directory, BAM_FPloader FPLoader.cpp:249-257",
            "system": "fpinball"
          },
          {
            "description": "The program BAM starts and modifies",
            "name": "Future Pinball.exe",
            "note": "Probed with GetFileAttributesA at four locations, /FPEXE first. Absent, the loader stops before creating any process. The size is that of release 1.9.1.20101231.",
            "required": true,
            "size": 28547584,
            "source_ref": "BAM_FPloader FPLoader.cpp:41, 46, 184-240",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking calibration host",
            "name": "BAM-Tracker.exe",
            "note": "Imports BAM.dll and runs it outside the game. BAM.dll lowercases the host command line and looks for this name to know it is hosted by the tracker rather than by Future Pinball.",
            "required": false,
            "size": 207104,
            "source_ref": "BAM-Tracker.exe import directory, BAM.dll 1.5-408 .text:0x1008320e",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Converts models to the .fpm form tables import",
            "name": "ModelImporter.exe",
            "note": "Bound to renderingengine.dll for the Assimp side. Its open dialog accepts .fpm, .obj, .ms3d, .md5mesh and .fbx.",
            "required": false,
            "size": 4553472,
            "source_ref": "ModelImporter.exe import directory, .rdata dialog filter",
            "system": "fpinball"
          },
          {
            "aliases": [
              "Keyboard.cfg"
            ],
            "description": "Key bindings and screenshot paths, the one text config",
            "name": "bam.cfg",
            "note": "Keyboard.cfg is the older name and is renamed on sight. 9999 in a key slot leaves the function unbound.",
            "required": false,
            "size": 316,
            "source_ref": "BAM.dll 1.5-408 .text:0x100c3960-0x100c3a97",
            "system": "fpinball"
          },
          {
            "description": "Global camera, lighting, physics and rendering settings",
            "name": "default.cfg",
            "note": "A binary block of the same shape as a per table cfg. Saving it reports \"default.cfg saved\".",
            "required": false,
            "size": 3072,
            "source_ref": "BAM.dll 1.5-408 .text:0x100326ba-0x100371bc",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Camera animation sequences used when a table brings none",
            "name": "default.seq",
            "note": "Read as text. Every line is a comment to Future Pinball's own parser and carries a position, a scale, two angles and a duration.",
            "required": false,
            "size": 1284,
            "source_ref": "BAM.dll 1.5-408 .text:0x10025e40-0x1002608f",
            "system": "fpinball"
          },
          {
            "description": "Physics values applied when a table specifies none",
            "name": "default.xml",
            "note": "Same document shape as the presets under XML\\. The save path produces one by extracting resource 464 of type XML from Future Pinball, 6264 bytes, so no copy ships.",
            "required": false,
            "source_ref": "BAM.dll 1.5-408 .text:0x100ae843-0x100ae8a7, 0x10037130-0x100371de",
            "system": "fpinball"
          },
          {
            "category": "game_data",
            "description": "Texture pack applied to every table",
            "name": "default.zip",
            "note": "Holds BMP/<id>.bmp entries keyed by Future Pinball resource id, the form the ball packs and the Zendonius packs use.",
            "required": false,
            "source_ref": "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990",
            "system": "fpinball"
          },
          {
            "description": "List of physics documents offered in the presets menu",
            "name": "XML_Presets.txt",
            "note": "Read whole and split on \"%d: %s\" lines. The menu entry Add current XML appends to it, which is how the files under XML\\ become reachable.",
            "required": false,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbd8a",
            "system": "fpinball"
          },
          {
            "description": "Physical measurements of the cabinet and the screen",
            "name": "Reality.dat",
            "note": "Read at startup and rewritten from the Reality submenu. Head tracking and stereo geometry are computed from it.",
            "required": false,
            "size": 920,
            "source_ref": "BAM.dll 1.5-408 .text:0x10031bbb, 0x10031ebe",
            "system": "fpinball"
          },
          {
            "description": "WiiMote identifiers kept for the WiiMote camera mode",
            "name": "WiiMoteCams.dat",
            "required": false,
            "size": 16,
            "source_ref": "BAM.dll 1.5-408 .text:0x10031d22, 0x10032f9f",
            "system": "fpinball"
          },
          {
            "description": "Dimensions of the printed board used to calibrate cameras",
            "name": "CalibrationBoardData.cfg",
            "required": false,
            "size": 272,
            "source_ref": "BAM.dll 1.5-408 .text:0x10031ad8, 0x10032d4b",
            "system": "fpinball"
          },
          {
            "description": "Result of the two camera calibration pass",
            "name": "stereoCalibrationData.cfg",
            "required": false,
            "size": 1160,
            "source_ref": "BAM.dll 1.5-408 .text:0x10031c75, 0x10032de3",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Ball texture showing the rotation axes",
            "name": "axis.zip",
            "path": "Balls/axis.zip",
            "required": false,
            "size": 480842,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Baseball ball texture",
            "name": "Baseball.zip",
            "path": "Balls/Baseball.zip",
            "required": false,
            "size": 248548,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Basketball ball texture",
            "name": "Basketball 1.zip",
            "path": "Balls/Basketball 1.zip",
            "required": false,
            "size": 148883,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Second basketball ball texture",
            "name": "Basketball 2.zip",
            "path": "Balls/Basketball 2.zip",
            "required": false,
            "size": 74296,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Black cue ball texture",
            "name": "Cue Black.zip",
            "path": "Balls/Cue Black.zip",
            "required": false,
            "size": 548084,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "White cue ball texture",
            "name": "Cue White.zip",
            "path": "Balls/Cue White.zip",
            "required": false,
            "size": 554040,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Globe ball texture, three BMP resources",
            "name": "earth.zip",
            "path": "Balls/earth.zip",
            "required": false,
            "size": 728508,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "EyeToy ball texture",
            "name": "EYETOY.zip",
            "path": "Balls/EYETOY.zip",
            "required": false,
            "size": 373860,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fireball ball texture",
            "name": "Fireball.zip",
            "path": "Balls/Fireball.zip",
            "required": false,
            "size": 240337,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Knight ball texture",
            "name": "Knight.zip",
            "path": "Balls/Knight.zip",
            "required": false,
            "size": 421287,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Latitude and longitude grid ball texture",
            "name": "latlong.zip",
            "path": "Balls/latlong.zip",
            "required": false,
            "size": 1066167,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Soccer ball texture",
            "name": "Soccer Ball 1.zip",
            "path": "Balls/Soccer Ball 1.zip",
            "required": false,
            "size": 54397,
            "source_ref": "BAM.dll 1.5-408 .text:0x1002d513-0x1002d52d",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 1.0 preset",
            "name": "fp-p1.0.xml",
            "path": "XML/fp-p1.0.xml",
            "required": false,
            "size": 6290,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.0 preset",
            "name": "fp-p2.0.xml",
            "path": "XML/fp-p2.0.xml",
            "required": false,
            "size": 6267,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.1 preset",
            "name": "fp-p2.1.xml",
            "path": "XML/fp-p2.1.xml",
            "required": false,
            "size": 6267,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.2 preset",
            "name": "fp-p2.2.xml",
            "path": "XML/fp-p2.2.xml",
            "required": false,
            "size": 6267,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.3 preset, first variant",
            "name": "fp-p2.3 Version 1.xml",
            "path": "XML/fp-p2.3 Version 1.xml",
            "required": false,
            "size": 6278,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.3 preset, second variant",
            "name": "fp-p2.3 Version 2.xml",
            "path": "XML/fp-p2.3 Version 2.xml",
            "required": false,
            "size": 6278,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.4 preset",
            "name": "fp-p2.4.xml",
            "path": "XML/fp-p2.4.xml",
            "required": false,
            "size": 6267,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.5 preset",
            "name": "fp-p2.5.xml",
            "path": "XML/fp-p2.5.xml",
            "required": false,
            "size": 6315,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.5 preset with the slamtilt rubber values",
            "name": "fp-p2.5 slamtilt rubbers.xml",
            "path": "XML/fp-p2.5 slamtilt rubbers.xml",
            "required": false,
            "size": 6335,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.6 preset",
            "name": "fp-p2.6.xml",
            "path": "XML/fp-p2.6.xml",
            "required": false,
            "size": 6315,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Physics 2.7 preset",
            "name": "fp-p2.7.xml",
            "path": "XML/fp-p2.7.xml",
            "required": false,
            "size": 6314,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Zendonius physics preset",
            "name": "Zendonius_v1.0.xml",
            "path": "XML/Zendonius_v1.0.xml",
            "required": false,
            "size": 6333,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Zendonius physics preset, second revision",
            "name": "Zendonius_v1.1.xml",
            "path": "XML/Zendonius_v1.1.xml",
            "required": false,
            "size": 6333,
            "source_ref": "BAM.dll 1.5-408 .text:0x100fba6a-0x100fbb73",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Texture pack for the Zendonius preset, resources 315 to 464",
            "name": "zedonius_v1_0.zip",
            "path": "XML/zedonius_v1_0.zip",
            "required": false,
            "size": 862294,
            "source_ref": "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Texture pack for the second Zendonius revision",
            "name": "zedonius_v1_1.zip",
            "path": "XML/zedonius_v1_1.zip",
            "required": false,
            "size": 862287,
            "source_ref": "BAM.dll 1.5-408 .text:0x100ae8ec-0x100ae990",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from any webcam, desktop geometry",
            "name": "DesktopCam.dll",
            "note": "Bound to AVICAP32 and MSVFW32 and reads the cascade files below.",
            "path": "plugins/DesktopCam.dll",
            "required": false,
            "size": 3388680,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from any webcam, cabinet geometry",
            "name": "Simple Cam.dll",
            "path": "plugins/Simple Cam.dll",
            "required": false,
            "size": 3262728,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from a PlayStation Eye",
            "name": "PS3Eye.dll",
            "note": "Bound to CLEyeMulticam.dll, which comes from the CL-Eye SDK.",
            "path": "plugins/PS3Eye.dll",
            "required": false,
            "size": 1699080,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "PlayStation Eye tracking with desktop geometry",
            "name": "DesktopPS3Eye.dll",
            "path": "plugins/DesktopPS3Eye.dll",
            "required": false,
            "size": 1813768,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Two PlayStation Eye cameras tracking an infrared marker",
            "name": "HT-PS3Eyes.dll",
            "note": "Keeps its calibration in HT-PS3Eyes.dat and HT-PS3Eyes-FixCamExport.dat beside itself, both produced by the calibration pass.",
            "path": "plugins/HT-PS3Eyes.dll",
            "required": false,
            "size": 1432272,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from a Kinect for Xbox 360",
            "name": "Kinect.dll",
            "note": "Bound to Kinect10.dll and FaceTrackLib.dll.",
            "path": "plugins/Kinect.dll",
            "required": false,
            "size": 2792144,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Kinect tracking with desktop geometry",
            "name": "DesktopKinect.dll",
            "path": "plugins/DesktopKinect.dll",
            "required": false,
            "size": 31952,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from a Kinect for Windows v2",
            "name": "Kinect2.dll",
            "note": "Bound to Kinect20.dll.",
            "path": "plugins/Kinect2.dll",
            "required": false,
            "size": 2791632,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Microsoft face tracking library used by the Kinect plugins",
            "name": "FaceTrackLib.dll",
            "path": "plugins/FaceTrackLib.dll",
            "required": false,
            "size": 920272,
            "source_ref": "DesktopKinect.dll, Kinect.dll import directories",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Model data for the face tracking library",
            "name": "FaceTrackData.dll",
            "path": "plugins/FaceTrackData.dll",
            "required": false,
            "size": 10650832,
            "source_ref": "FaceTrackLib.dll .rdata, wide literal FaceTrackData.dll",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from a FreeTrack server",
            "name": "FreeTrack.dll",
            "path": "plugins/FreeTrack.dll",
            "required": false,
            "size": 95440,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Head tracking from a NaturalPoint TrackIR",
            "name": "TrackIR.dll",
            "note": "Matches the name NPClient with strstr and pairs LoadLibraryA with GetProcAddress on it. The plugin imports no registry function, so the client library is resolved as a plain module name.",
            "path": "plugins/TrackIR.dll",
            "required": false,
            "size": 20176,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, TrackIR.dll .text:0x100018c7",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Bloom and the unfinished ambient occlusion pass",
            "name": "PostFX.dll",
            "note": "Named in BAM.dll and compared against the enumerated file names, so it is the one plugin the mod knows by name. Its nine GLSL programs are TEXT resources inside the plugin, read with FindResourceA. Two builds circulate under this name, the 39632 bytes of bam-setup.exe and 191240 bytes in BAM-OpenVR.zip.",
            "path": "plugins/PostFX.dll",
            "required": false,
            "size": 39632,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf5ff, BAM_Plugins PostFX/PostFX.cpp:41-45",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Records high scores across tables",
            "name": "PinballHighScore.dll",
            "path": "plugins/PinballHighScore.dll",
            "required": false,
            "size": 918224,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Settings block the high score plugin reads and writes",
            "name": "PinballHighScore.cfg",
            "path": "plugins/PinballHighScore.cfg",
            "required": false,
            "size": 1016,
            "source_ref": "BAM_Plugins Common/BAM.h:136-157",
            "system": "fpinball"
          },
          {
            "description": "Score database the plugin opens by name",
            "name": "PinballHighScore.db",
            "note": "Only BAM-OpenVR.zip carries a copy; the plugin creates one otherwise.",
            "path": "plugins/PinballHighScore.db",
            "required": false,
            "size": 45056,
            "source_ref": "PinballHighScore.dll .rdata",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "PuPCOM script object drawing PinUP Player video onto table textures",
            "name": "PuPPlugin.dll",
            "note": "Takes BAM_GetTextureId and BAM_ReplaceTexture from the plugin API.",
            "path": "plugins/PuPPlugin.dll",
            "required": false,
            "size": 240216,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, PuPPlugin.dll .rdata IPuPCOM, PuPVideo",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Gives a table script the COM objects the cabinet stack exposes",
            "name": "icom.dll",
            "note": "Matches created objects against PinUpPlayer, Vpinmame, B2S, PUPDMDControl, UltraDMD, PinSSF and DirectOutput.",
            "path": "plugins/icom.dll",
            "required": false,
            "size": 67280,
            "source_ref": "BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c, icom.dll .rdata ProgID pattern",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Renders the table to an OpenVR headset",
            "name": "OpenVR.dll",
            "note": "Ships only in BAM-OpenVR.zip, which ES-DE also looks for as BAM-OpenVR\\.",
            "path": "plugins/OpenVR.dll",
            "required": false,
            "size": 419328,
            "source_ref": "BAM_Plugins OpenVR/main.cpp, BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "description": "Valve OpenVR runtime interface",
            "name": "openvr_api.dll",
            "path": "plugins/openvr_api.dll",
            "required": false,
            "size": 620760,
            "source_ref": "OpenVR.dll import directory",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "OpenCV Haar cascade for frontal faces",
            "name": "haarcascade_frontalface_alt.xml",
            "path": "plugins/haarcascades/haarcascade_frontalface_alt.xml",
            "required": false,
            "size": 919871,
            "source_ref": "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Second OpenCV Haar cascade for frontal faces",
            "name": "haarcascade_frontalface_default.xml",
            "path": "plugins/haarcascades/haarcascade_frontalface_default.xml",
            "required": false,
            "size": 1254733,
            "source_ref": "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata",
            "system": "fpinball"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "OpenCV local binary pattern cascade for frontal faces",
            "name": "lbpcascade_frontalface.xml",
            "path": "plugins/lbpcascades/lbpcascade_frontalface.xml",
            "required": false,
            "size": 51856,
            "source_ref": "DesktopCam.dll, PS3Eye.dll, Simple Cam.dll .rdata",
            "system": "fpinball"
          },
          {
            "description": "OpenCV 2.4.10 FFmpeg bridge, video files as a camera source",
            "name": "opencv_ffmpeg2410.dll",
            "note": "LoadLibraryA followed by GetProcAddress on cvCreateFileCapture_FFMPEG, cvGrabFrame_FFMPEG and the rest. A null handle leaves the entry points unbound and only the file source is lost.",
            "required": false,
            "source_ref": "BAM.dll 1.5-408 .text:0x102a6013-0x102a605b",
            "system": "fpinball"
          },
          {
            "description": "CL-Eye Platform SDK driver interface for the PlayStation Eye",
            "name": "CLEyeMulticam.dll",
            "required": false,
            "source_ref": "PS3Eye.dll, DesktopPS3Eye.dll, HT-PS3Eyes.dll import directories",
            "system": "fpinball"
          },
          {
            "description": "Kinect for Windows SDK 1.x runtime",
            "name": "Kinect10.dll",
            "required": false,
            "source_ref": "Kinect.dll, DesktopKinect.dll, FaceTrackLib.dll import directories",
            "system": "fpinball"
          },
          {
            "description": "Kinect for Windows SDK 2.0 runtime",
            "name": "Kinect20.dll",
            "required": false,
            "source_ref": "Kinect2.dll import directory",
            "system": "fpinball"
          },
          {
            "description": "NaturalPoint TrackIR client library",
            "name": "NPClient.dll",
            "note": "Comes from a TrackIR install rather than from any BAM distribution, which is why no path is given here.",
            "required": false,
            "source_ref": "TrackIR.dll .rdata",
            "system": "fpinball"
          }
        ],
        "mode": "standalone",
        "notes": "BAM, Better Arcade Mode, by Rafal Janicki. FPLoader.exe starts\nFuture Pinball.exe suspended, writes the BAM.dll path into the new process\nwith VirtualAllocEx and WriteProcessMemory, runs LoadLibraryA on it through\nCreateRemoteThread, waits for that thread and resumes the main one. Everything\nelse lives in BAM.dll, which detours the running program. The loader is\npublished as source; the shipped FPLoader.exe carries the same .text and\n.rdata as the build committed to that repository and differs only by an\nAuthenticode blob, 9472 bytes against 5384.\nref: BAM_FPloader FPLoader.cpp:259-305, FPLoader.exe .text sha1\nd5ca74154fe97002, PE timestamp 2016-04-25 19:17:12\n\nBAM.dll is searched in the loader's own directory first, then in\nC:\\Games\\Future Pinball\\BAM\\. Both missing puts up \"Couldn't locate BAM.dll.\"\nand returns -1. Future Pinball.exe comes from /FPEXE if that switch names an\nexisting file, otherwise from one level above the loader, then from the\nloader's directory, then from C:\\Games\\Future Pinball\\; the same failure path\nreports \"Couldn't locate Future Pinball.exe.\". Before the process is created\nthe loader prepends its own directory to %PATH% so the system resolves\nrenderingengine.dll from there while the working directory is the game\ndirectory. /STAYINRAM keeps the loader alive until the game thread ends; the\nrest of the command line is handed to Future Pinball untouched, which is how\n/Open, /Play, /Exit and /ArcadeRender reach it.\nref: BAM_FPloader FPLoader.cpp:40-48, 87-111, 166-240, 249-257\n\nBAM.dll is closed source. Its version resource reads 1.5.408 and its debug\ntags name BAM.cpp, dllmain.cpp, BallManager.cpp, RenderEngine.cpp,\nplugin.cpp, pbo.cpp, stereo3d.cpp and debug.cpp. Twenty five entry points are\ndetoured in one pass: CreateFileA, CreateFileW, ReadFile, WriteFile,\nCloseHandle, GetFileSize, DeleteFileA, FindResourceA, LoadResource,\nLockResource, SizeofResource, CoCreateInstance, StgOpenStorage,\nGetOpenFileNameA, ChooseColorA, GetDlgItem, SendMessageA, ShowWindow,\nSwapBuffers, ChoosePixelFormat, SetPixelFormat, wglCreateContext,\nwglDeleteContext, wglMakeCurrent and wglGetProcAddress, with glFrustum,\nglTexImage2D and wglChoosePixelFormatARB taken separately. That is how BAM\nsees the program's own resource and file traffic and can answer it. Newton is\nreached through GetModuleHandleA on the copy Future Pinball already imported\nfollowed by GetProcAddress on 83 entry points; no second copy is loaded.\nref: BAM.dll 1.5-408 .text:0x10082a75-0x10082f3d, 0x100831b3-0x100831d9,\n0x1002ab92-0x1002abeb, .rsrc version, debug tags Routed_glTexImage2D and\nRouted_wglChoosePixelFormatARB\n\nEvery path BAM builds hangs off the directory holding BAM.dll. The module\nhandle saved at load time goes through GetModuleFileNameA, the result is cut\nat the last separator, and one of two format strings finishes the job:\n\"%s\\%s.%s\" for a name and an extension, \"%s\\%s\" for the cfg subdirectory.\nSettings for a table are cfg\\<table>.cfg and cfg\\<table>.seq, with default.cfg\nand default.seq as the fallbacks.\nref: BAM.dll 1.5-408 .text:0x10025e40-0x1002605a, 0x100319a0-0x10031d48,\n0x10032bdb-0x10032f23\n\nKeys are the one text file. bam.cfg is read with fopen_s and parsed as\n\"%s = %s\" lines over the names Menu, Menu2, Left, Right, Up, Down, Enter,\nSnapshot, 3DSwitch, SaveXML, SnapShotPath, SnapShotBackboxPath, HeadTracking,\nForceArcadeMode, SwitchToNextBall, SwitchToPrevBall, RoomOnOff, Cam, Overlay,\nBallShadows and OverlayAspectFix. A Keyboard.cfg found beside it is renamed to\nbam.cfg first. RetroBat rewrites the two SnapShotPath lines before launching.\nref: BAM.dll 1.5-408 .text:0x100c3960-0x100c3a97, .rdata:0x10654208-0x10654324,\nretrobat emulatorLauncher/Generators/Fpinball.Generator.cs:183-209\n\nA ball or a room is a zip of BMP/<id>.bmp entries named for the resource ids\nFuture Pinball itself uses: the program carries 29 resources of type BMP and\nevery id the shipped packs contain is one of them, 452 being the ball.\nballs\\*.zip is walked with FindFirstFileA and each hit becomes a choice in the\nmenu; default.zip in the BAM directory is applied without being chosen. The\nrouted FindResourceA answers the nine SHADERS resources the same way, while\nthe single XML resource, id 464, is read straight from the program by the save\npath and is what the presets under XML\\ are edited copies of. The 83 GLSL\nprograms BAM renders with are\nresources of type TEXT inside BAM.dll, so no shader file is read from disk.\nref: BAM.dll 1.5-408 .text:0x1002d4f3-0x1002d52d, 0x100ae8ec-0x100ae990,\n0x10037130-0x100371de, 0x1007e83b-0x1007e896, .rsrc TEXT,\nFuture Pinball.exe 1.9.1.20101231 .rsrc BMP, SHADERS, XML\n\nPlugins are loaded by changing the working directory to plugins\\, walking\n*.dll with FindFirstFileA, calling LoadLibraryA on each and binding\nBAM_PluginStart and BAM_PluginStop. A plugin keeps its settings by writing a\nraw structure to <its own name>.cfg in that working directory, which is why\nthe cfg files beside the plugins carry no text.\nref: BAM.dll 1.5-408 .text:0x100cf400-0x100cf75c,\nBAM_Plugins Common/BAM.h:116-157\n\nrenderingengine.dll is bound in BAM.dll's import directory through\nFindProgram, SetModuleWithResources, LoadFileToMemory and SaveFileFromMemory,\nso the loader resolves it before any BAM code runs. It carries Assimp, zlib,\nlibpng and libjpeg, reads the zip packs and writes the per table shadow cache\nunder Cache\\.\nref: BAM.dll 1.5-408 import directory, .text:0x10105c18-0x1010697f\n\nES-DE declares the emulator as FUTURE-PINBALL-FPLOADER for Windows only,\nfinding FPLoader.exe under BAM\\, BAM-OpenVR\\ or BAM-OpenVR-OC\\, and invokes it\nwith /Exit /Play /Open in the background. RetroBat reaches the same binary\nunder the emulator or core key bam, through the generator it shares with\nFuture Pinball. Two distributions are served: bam-setup.exe carries the\nloader, the mod, the renderer, the tools, the plugins, the ball packs and the\nphysics presets, while BAM-OpenVR.zip carries the OpenVR plugin and the\nsettings files the other package leaves for the first save to create.\nref: es-de resources/systems/windows/es_find_rules.xml:448-461,\nes-de resources/systems/windows/es_systems.xml:764,\nretrobat emulatorLauncher/Generators/Fpinball.Generator.cs:131-135\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/ravarcade/BAM_FPloader",
        "source_commit": "e13007994011ae57dd9d9f48674c1f774183914b",
        "systems": [
          "fpinball"
        ],
        "type": "standalone",
        "upstream": "https://www.ravarcade.pl/"
      }
    },
    {
      "id": "galaksija",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v0.1",
        "cores": [
          "galaksija"
        ],
        "display_name": "Elektronika Inženjering - Galaksija (Galaksija)",
        "emulator": "galaksija",
        "files": [
          {
            "hle_fallback": true,
            "name": "CHRGEN.BIN",
            "note": "Character generator ROM. Defines the 128-character bitmap font (8x13 pixels each). The core has this embedded compressed in rom.c and only loads the external file if all firmware files are present in the system directory.\n",
            "path": "galaksija/CHRGEN.BIN",
            "required": false,
            "size": 2048,
            "source_ref": "src/rom.h:5, src/libretro.c:95-99, src/external/galaksija-emulator/src/init.c:55-67",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "ROM1.BIN",
            "note": "System ROM / BASIC interpreter. Mapped at 0x0000-0x0FFF. Contains the Galaksija BASIC language and boot routines. Embedded in rom.c as fallback.\n",
            "path": "galaksija/ROM1.BIN",
            "required": false,
            "size": 4096,
            "source_ref": "src/rom.h:8, src/libretro.c:101-105, src/external/galaksija-emulator/src/init.c:69-81",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "ROM2.BIN",
            "note": "Math extension ROM. Mapped at 0x1000-0x1FFF. Adds floating-point math functions (SIN, COS, TG, SQR, LN, EXP, POW, etc). Optional even when loading from disk -- missing ROM2 only triggers a warning. Embedded in rom.c as fallback.\n",
            "path": "galaksija/ROM2.BIN",
            "required": false,
            "size": 4096,
            "source_ref": "src/rom.h:11, src/libretro.c:107-110, src/external/galaksija-emulator/src/init.c:83-92",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": {
          "embedded_firmware": "All three ROMs (CHRGEN.BIN, ROM1.BIN, ROM2.BIN) are embedded as compressed blobs in src/rom.c using RLE compression. The core works out of the box without any external firmware files. External files only serve as overrides for users who want alternative ROM versions (e.g. different BASIC revisions or character sets).\n",
          "firmware_override_logic": "The override is all-or-nothing for CHRGEN.BIN and ROM1.BIN. If either file is missing from galaksija/, the core ignores all external firmware and uses embedded copies. ROM2.BIN is handled separately and can be absent even when loading from disk.\n",
          "license": "The emulator code and included firmware are public domain. External dependencies (libz80, libretro-common, tinyfiledialogs) have separate licenses (GPL2, MIT).\n"
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/galaxy-libretro",
        "source_commit": "4e197680d2dc9f8159d3a5565fcc4bbdd0e905ea",
        "systems": [
          "galaksija"
        ],
        "type": "libretro",
        "upstream": "https://github.com/nikp123/Galaksija-Emulator"
      }
    },
    {
      "id": "gam4980",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "0.2",
        "cores": [
          "gam4980"
        ],
        "display_name": "GAM4980",
        "emulator": "GAM4980",
        "files": [
          {
            "name": "gam4980/8.BIN",
            "note": "Font ROM (2 MB). Loaded at 0x800000.",
            "required": true,
            "size": 2097152,
            "source_ref": "libretro.c:716-718",
            "system": "bbk-longman-4980"
          },
          {
            "name": "gam4980/E.BIN",
            "note": "OS ROM (2 MB). Loaded at 0xE00000.",
            "required": true,
            "size": 2097152,
            "source_ref": "libretro.c:720-722",
            "system": "bbk-longman-4980"
          }
        ],
        "notes": "Place 8.BIN and E.BIN in the RetroArch system/gam4980/ subdirectory.\nBoth files must be 2 MB dumps from a BBK Longman 4980 dictionary:\n  8.BIN - font ROM, dumped from address range 0x800000-0x9FFFFF\n  E.BIN - OS ROM, dumped from address range 0xE00000-0xFFFFFF\nGame files use the .gam extension.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "sys.rom_8 and sys.rom_e are flat 2 MB arrays. The CPU accesses them\nthrough bank-switched memory (PA() macro resolves virtual to physical\naddress). rom_8_vread and rom_e_vread handle indirect reads via\nthe banking system.\n",
            "source_ref": "libretro.c:109-110, 300-305",
            "target": "0x800000-0x9FFFFF (font), 0xE00000-0xFFFFFF (OS) in banked address space"
          },
          "load_path": {
            "note": "retro_init() builds the path as {system_directory}/gam4980/ and\npasses it to sys_init(). Files must be named exactly 8.BIN and\nE.BIN (case sensitive on Linux). No .info firmware declarations\nexist, so RetroArch won't warn about missing files at scan time.\n",
            "source_ref": "libretro.c:1173-1175"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/ThisBoringWorld/gam4980",
        "source_commit": "2fbed643f61c6bde758f179c93d6f0595ef0a7e6",
        "systems": [
          "bbk-longman-4980"
        ],
        "type": "libretro",
        "upstream": "https://codeberg.org/iyzsong/gam4980"
      }
    },
    {
      "id": "gambatte",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.5.0",
        "cores": [
          "gambatte"
        ],
        "display_name": "Nintendo - Game Boy / Color (Gambatte)",
        "emulator": "Gambatte",
        "files": [
          {
            "description": "Original Game Boy (DMG-01) boot ROM",
            "hle_fallback": true,
            "name": "gb_bios.bin",
            "note": "Mapped at 0x0000-0x00FF, swapped out when register 0xFF50 is written.",
            "required": false,
            "size": 256,
            "source_ref": "libgambatte/libretro/libretro.cpp:1303-1363 (get_bootloader_from_file), libgambatte/src/bootloader.cpp:20-55 (load)",
            "system": "nintendo-gb",
            "validation": {
              "core": [
                "size"
              ],
              "upstream": [
                "size",
                "crc32"
              ]
            }
          },
          {
            "description": "Game Boy Color (CGB-001) boot ROM",
            "hle_fallback": true,
            "name": "gbc_bios.bin",
            "note": "Mapped at 0x0000-0x08FF with cartridge data preserved at 0x0100-0x01FF. Also used for GBA mode with a patch at 0xF2. Presence required for FORCE_CGB flag when hw mode is GBC or GBA.",
            "required": false,
            "size": 2304,
            "source_ref": "libgambatte/libretro/libretro.cpp:1303-1363 (get_bootloader_from_file), libgambatte/src/bootloader.cpp:20-55 (load)",
            "system": "nintendo-gbc",
            "validation": {
              "core": [
                "size"
              ],
              "upstream": [
                "size",
                "crc32"
              ]
            }
          }
        ],
        "notes": "Accuracy-focused GB/GBC emulator. No BIOS required for normal operation;\nbuilt-in HLE boot sequence skips the Nintendo logo animation.\n\nCore option gambatte_gb_bootloader (default: enabled) enables loading\nofficial boot ROMs from the system directory for the real startup animation.\nIf missing, emulation works without them.\n\nBoot ROM selection by hardware mode:\n- DMG: gb_bios.bin (256 bytes)\n- CGB or GBA: gbc_bios.bin (2304 bytes)\n\nIn GBA mode the core patches the CGB boot ROM at 0xF2 to fake GBA\ndetection (ld b,0x01), enabling GBA-enhanced features in compatible\nGBC games.\n\nThe upstream standalone supports SGB boot ROM loading; the libretro\nport does not implement this.\n\nCustom palette files (palettes/*.pal) are user-created colorization\nconfigs loaded when GB Colorization is set to \"custom\". These are\nuser-generated content, not distributable files.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/gambatte-libretro",
        "source_commit": "96174369b3c30d9fc57c926fa3379c273dc6a9a5",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sinamas/gambatte"
      }
    },
    {
      "id": "gargoyle",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2026.1",
        "cores": [
          "gargoyle"
        ],
        "display_name": "Interactive Fiction (Gargoyle)",
        "emulator": "Gargoyle",
        "exclusion_note": "TADS character mapping files are not loaded by this build. The Glk port reports utf-8 and asc7dflt as the local character sets, both built-in tables, and its os_gen_charmap_filename() returns an empty name, so the automatic .tcp lookup never runs; cmap_load() only fires for a path given with -ctab. The agil.cfg read by AGiliTy lives in os_dos.c and os_dos16.c, while the build compiles os_glk.c. ref: tads/glk/osmisc.c:69-72,316-334, tads/tads2/cmap.c:290-315, tads/tads2/trd.c:513-517, terps/CMakeLists.txt:111-119\n",
        "files": [
          {
            "description": "Gargoyle Mono regular (Go Mono)",
            "name": "Gargoyle-Mono.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:491 (make_entry monor), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Mono bold (Go Mono)",
            "name": "Gargoyle-Mono-Bold.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:492 (make_entry monob), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Mono italic (Go Mono)",
            "name": "Gargoyle-Mono-Italic.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:493 (make_entry monoi), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Mono bold italic (Go Mono)",
            "name": "Gargoyle-Mono-Bold-Italic.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:494 (make_entry monoz), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Serif regular (Charis SIL)",
            "name": "Gargoyle-Serif.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:495 (make_entry propr), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Serif bold (Charis SIL)",
            "name": "Gargoyle-Serif-Bold.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:496 (make_entry propb), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Serif italic (Charis SIL)",
            "name": "Gargoyle-Serif-Italic.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:497 (make_entry propi), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "Gargoyle Serif bold italic (Charis SIL)",
            "name": "Gargoyle-Serif-Bold-Italic.ttf",
            "required": true,
            "source_ref": "garglk/draw.cpp:498 (make_entry propz), garglk/draw.cpp:300-350 (make_font, winabort)"
          },
          {
            "description": "GNU Unifont, Basic Multilingual Plane glyph fallback",
            "name": "unifont.otf",
            "note": "Covers glyphs missing from the text fonts. Loaded directly rather than through the system font mechanism, so it is not installed system-wide.\n",
            "required": false,
            "source_ref": "garglk/draw.cpp:352-375 (make_substitution_fonts), garglk/draw.cpp:476-478"
          },
          {
            "description": "GNU Unifont, planes above the BMP",
            "name": "unifont_upper.otf",
            "required": false,
            "source_ref": "garglk/draw.cpp:352-375 (make_substitution_fonts), garglk/draw.cpp:476-478"
          },
          {
            "description": "Blue color theme",
            "name": "Blue.json",
            "path": "themes/Blue.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:524"
          },
          {
            "description": "Breeze Darker color theme",
            "name": "Breeze Darker.json",
            "path": "themes/Breeze Darker.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:525"
          },
          {
            "description": "Lectrote Dark color theme",
            "name": "Lectrote Dark.json",
            "path": "themes/Lectrote Dark.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:526"
          },
          {
            "description": "Lectrote Sepia color theme",
            "name": "Lectrote Sepia.json",
            "path": "themes/Lectrote Sepia.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:527"
          },
          {
            "description": "Lectrote Slate color theme",
            "name": "Lectrote Slate.json",
            "path": "themes/Lectrote Slate.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:528"
          },
          {
            "description": "Pencil color theme",
            "name": "Pencil.json",
            "path": "themes/Pencil.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:529"
          },
          {
            "description": "Zoom color theme",
            "name": "Zoom.json",
            "path": "themes/Zoom.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:304-316, garglk/CMakeLists.txt:530"
          },
          {
            "description": "Dark color theme",
            "name": "dark.json",
            "note": "Also compiled in as the built-in dark theme.",
            "path": "themes/dark.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:268-282, garglk/theme.cpp:304-316, garglk/CMakeLists.txt:80-85, garglk/CMakeLists.txt:531"
          },
          {
            "description": "Light color theme",
            "name": "light.json",
            "note": "Also compiled in as the built-in light theme.",
            "path": "themes/light.json",
            "required": false,
            "source_ref": "garglk/theme.cpp:268-282, garglk/theme.cpp:304-316, garglk/CMakeLists.txt:87-92, garglk/CMakeLists.txt:532"
          }
        ],
        "mode": "standalone",
        "notes": "Interactive fiction player built on the Glk library implementation garglk,\nshipping one interpreter binary per story format. The gargoyle binary reads\nthe first 32 bytes of the file, matches it against a magic-number table,\nfalls back to the extension, and executes the matching interpreter.\nref: launcher.cpp:100-177 (probe, extensions, interpreters), 379-419 (rungame)\n\nFormats and the interpreter each one runs: Adrift 4 (scare), Adrift 5\n(FrankenDrift), AdvSys (advsys), AGT (agility), Alan 2 (alan2), Alan 3\n(alan3), Glulx (git), Hugo (hugo), JACL (jacl), Level 9 (level9), Magnetic\nScrolls (magnetic), Scott Adams Graphic Adventures Plus (plus), Scott Adams\n(scott), TADS 2 and 3 (tadsr), TaylorMade (taylor), Z-machine (bocfel).\nBlorb files are unwrapped first and dispatched on the Exec chunk type.\nref: launcher.cpp:45-60 (interpreter names), 276-328 (runblorb)\n\nAdrift 5 needs the FrankenDrift runner, a .NET build option that is off by\ndefault, including in the official AppImage. Without it the launcher reports\nthat Adrift 5 is unsupported and stops.\nref: CMakeLists.txt:63 (WITH_FRANKENDRIFT), gargoyle-appimage.sh:14,\n     launcher.cpp:160-162,202-206\n\nEvery glyph is drawn through FreeType rather than by the operating system,\nso a font file has to be reachable. The default config asks for the families\n\"Gargoyle Mono\" and \"Gargoyle Serif\"; if fontconfig cannot resolve them, the\ninterpreter loads the shipped TTF files by name from the data directory,\nthen the executable directory, then the working directory, and calls\nwinabort() when all three miss.\nref: garglk.h:661-662 (defaults), garglk.ini:195,198, fontfc.cpp:83-154\n     (fontconfig lookup), draw.cpp:260-287 (path fallbacks), 300-350\n     (make_font, abort), 490-498 (file names)\n\nGargoyle Serif is Charis SIL and Gargoyle Mono is Go Mono, both renamed so\nthey can be installed system-wide without clashing. Font embedding was\ndropped because the OFL and the GPL do not mix, which is why the files are\nloaded from disk.\nref: fonts/README\n\nData directory by platform: /usr/share/gargoyle on Unix,\n<binary>/../share/gargoyle for the AppImage, the install directory on\nWindows, and the bundle Resources directory on macOS. Fonts sit at its root\nand themes in its themes subdirectory. macOS keeps the eight Gargoyle faces\nin Resources/Fonts and Unifont in Resources; the Windows installer also\nregisters the eight faces as system fonts.\nref: sysqt.cpp:898-942, sysmac.mm:986-1003, garglk/CMakeLists.txt:136,144,\n     510-534, gargoyle_osx.sh:120-121,207-209, installer.nsi:89-90,200-207\n\nThemes are read from every *.json in the theme directories, which are the\nQt application data locations plus the executable directory on Windows and\nthe data directory for the AppImage. A parse failure is reported and the\nfile skipped. The light and dark themes are also compiled into the binary,\nso the on-disk copies of those two replace identical entries.\nref: theme.cpp:266-319, sysqt.cpp:920-942, garglk/CMakeLists.txt:80-92\n\ngarglk.ini is not distributed: the default config is compiled in as a string\nand written to the highest-priority user location on demand. Installing a\nsystem copy is an off-by-default build option.\nref: config.cpp:399-449, garglk/CMakeLists.txt:14 (INSTALL_GARGLKINI),\n     garglk/CMakeLists.txt:60-78 (vtk_encode_string)\n\nMIDI in Blorb resources goes through FluidSynth, which needs a SoundFont.\nGargoyle names none: the soundfont list is empty unless the user sets it in\ngarglk.ini or the build hardcodes one, and the fallback is whatever\nFluidSynth reports as its own default.\nref: config.cpp:245-249,787-795, snddecode.cpp:373-395,\n     garglk/CMakeLists.txt:57 (DEFAULT_SOUNDFONT), INSTALL.md:137-141\n\nStory files are content. Formats that carry companion data read it from the\nstory file's own name or directory, so it travels with the game: Level 9\ngraphics as PICTURE.DAT, Magnetic Scrolls graphics and hints as .gfx and\n.hnt, Alan 3 resources as .a3r, TADS resources as .t3r, and the extra disk\nsides the Scott Adams, Plus and TaylorMade interpreters read from C64,\nAtari 8-bit and Apple II images.\nref: level9/Glk/glk.c:6415-6450, magnetic/Glk/glk.c:5758-5855,\n     terps/CMakeLists.txt:69,73,359,404,500 (c64diskimage, unp64)\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/garglk/garglk",
        "source_commit": "5717fbf3f9d6f2341773d0cc03f19d96c463af72",
        "systems": [
          "adrift",
          "advsys",
          "agt",
          "alan",
          "glulx",
          "hugo",
          "jacl",
          "level9",
          "magnetic-scrolls",
          "scott-adams",
          "scott-adams-plus",
          "tads",
          "taylormade",
          "zmachine"
        ],
        "type": "standalone",
        "upstream": "https://github.com/garglk/garglk"
      }
    },
    {
      "id": "gba-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "gba-emu",
          "GBA.emu",
          "GBA-EMU"
        ],
        "display_name": "Nintendo - Game Boy Advance (GBA.emu)",
        "emulator": "GBA.emu",
        "files": [
          {
            "agnostic": true,
            "description": "Game Boy Advance BIOS",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "Picked by the user from any path, under any name ending in .bin or .rom. The only test is the length, and a file of another length aborts the load rather than falling back.",
            "required": false,
            "size": 16384,
            "source_ref": "GBA.emu/src/main/Main.cc:190-197 (read and size check), GBA.emu/src/core/gba/gba.cpp:3758-3778 (second check, copy, useBios), GBA.emu/src/main/EmuMenuViews.cc:485-510 (picker and extension filter)",
            "system": "nintendo-gba",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "MotocrossChallenge.7z"
            ],
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game, listed under Bundled Content",
            "name": "Motocross Challenge.7z",
            "note": "Opened from the application bundle by the name the build gives it, the Linux build dropping the space.",
            "required": false,
            "source_ref": "GBA.emu/src/main/AppMeta.cc:32-33 (names), EmuFramework/src/gui/BundledGamesView.cc:41,47 (open and load)",
            "system": "nintendo-gba"
          }
        ],
        "mode": "standalone",
        "notes": "Android and Linux member of the EX Emulator series by Robert Broglia,\npublished as com.explusalpha.GbaEmu (GBA.emu/metadata/conf.mk:2,6,7) and\nreached by ES-DE through its GBA-EMU find rule. VBA-M components are vendored\nunder GBA.emu/src/core (GBA.emu/metadata/conf.mk:8,\nGBA.emu/src/main/AppMeta.cc:26) and driven by the app's own GBASys, video,\nsound and IO layers. The build defines C_CORE, FINAL_VERSION, NO_PNG, NO_LINK\nand NO_DEBUGGER (GBA.emu/CMakeLists.txt:14). Content is read from .gba and .mb\nfiles, a .mb name sending the image to work RAM instead of the ROM area\n(GBA.emu/metadata/conf.mk:5, GBA.emu/src/main/AppMeta.cc:31,\nGBA.emu/src/main/Main.cc:182-183, GBA.emu/src/main/VbamApi.cc:211-246).\n\nThe BIOS is the one file the user supplies and it carries no name of its own.\nThe picker takes any .bin or .rom and stores the chosen URI in biosPath\n(GBA.emu/src/main/EmuMenuViews.cc:485-510, GBA.emu/src/main/system.ccm:88,\nGBA.emu/src/main/options.cc:50,79). loadContent reads the file whole and\nthrows unless it is exactly 16384 bytes (GBA.emu/src/main/Main.cc:190-197),\nthe length CPUInit tests again before copying it and setting useBios\n(GBA.emu/src/core/gba/gba.cpp:3758-3778). Nothing else about the file is\nexamined: CPUIsGBABios, the extension test upstream passes to utilLoad, has no\ncaller here (GBA.emu/src/core/gba/gba.cpp:1655-1675; upstream\nsrc/core/gba/gba.cpp:4975-4986).\n\nWithout a file the app runs on the built-in myROM stub copied into the BIOS\narea (GBA.emu/src/core/gba/gba.cpp:131-305,3776-3778) and on the service call\nimplementations of gbaBios.cpp; useBios decides only whether an SWI enters\nBIOS code or the HLE routine, and which register reset a boot performs\n(GBA.emu/src/core/gba/gba.cpp:2525-2545,4104-4112). Two settings gate the\nread: the per-content Use BIOS tristate defaults to Auto, which follows the\nglobal Default Use BIOS switch, itself off until the user turns it on\n(GBA.emu/src/main/system.ccm:107-108,165-174,\nGBA.emu/src/main/EmuMenuViews.cc:387-395).\n\nThe 473 entry override table is byte-identical to VBA-M's\nsrc/libretro/gba-over.inc, and its bios column is dropped on arrival:\nsetGameSpecificSettings takes save type, save size, RTC and mirroring and\nnothing more (GBA.emu/src/main/gba-over.inc:1,\nGBA.emu/src/main/Main.cc:283-319), so BIOS use never follows from the game.\n\nPer content the app writes and reads files named after the ROM: .sav backup\nmemory created full of 0xFF (GBA.emu/src/main/Main.cc:98-108), .gqs states\n(GBA.emu/src/main/system.ccm:128), and a .clt cheat list it saves itself under\nthe cheats path (GBA.emu/src/main/Cheats.cc:210-235,\nGBA.emu/src/core/gba/gbaCheats.cpp:2738,2755). Under the patches path it\napplies the first of .ips, .ups or .ppf that opens\n(GBA.emu/src/main/Main.cc:147-178). ui.png, gpOverlay.png and the shader\nsources are drawn by the framework from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:58-73,\nEmuFramework/src/VideoImageEffect.cc:164-172).\n\nVBA-M's own file entry points reach nothing in this build. CPULoadRom, the\nbattery, state, GSA snapshot and eeprom import functions and the EmulatedSystem\ntable sit inside #if 0 blocks (GBA.emu/src/core/gba/gba.cpp:1301-1614,\n1885-2134,4803-4869); CPUExportEepromFile and cheatsImportGSACodeFile keep no\ncaller (GBA.emu/src/core/gba/gba.cpp:1276,\nGBA.emu/src/core/gba/gbaCheats.cpp:2081); and utilOpenFile, the call all of\nthem open files with, is implemented by no source in the build\n(GBA.emu/src/CMakeLists.txt:6-36, GBA.emu/src/main/VbamApi.cc:279-321). The\ne-Reader reads no dotcode either, the tree carrying its header alone and the\nthree entry points being stubbed (GBA.emu/src/core/gba/internal/gbaEreader.h,\nGBA.emu/src/main/VbamApi.cc:109-113).\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "nintendo-gba"
        ],
        "type": "standalone",
        "upstream": "https://github.com/visualboyadvance-m/visualboyadvance-m",
        "upstream_commit": "fbd043dea0920a2356c44e1458a160455403c640"
      }
    },
    {
      "id": "gbc-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "gbc-emu",
          "GBC.emu",
          "GBC-EMU"
        ],
        "display_name": "Nintendo - Game Boy / Color (GBC.emu)",
        "emulator": "GBC.emu",
        "files": [],
        "mode": "standalone",
        "notes": "Member of the EX Emulator series by Robert Broglia, which targets Android and\nLinux (README.md:3-4,12-13) and keeps iOS and Pandora build shortcuts in the\ntree (GBC.emu/ios.mk, GBC.emu/pandora.mk). Published as\ncom.explusalpha.GbcEmu (GBC.emu/metadata/conf.mk:2,4,6,7) and reached by\nES-DE through its GBC-EMU find rule. Gambatte components are\nvendored under GBC.emu/src/libgambatte (GBC.emu/metadata/conf.mk:8,\nGBC.emu/src/main/AppMeta.cc:26) and driven by the app's own video, audio,\ninput and save layers, with the OSD compiled out\n(GBC.emu/CMakeLists.txt:14-19). Content is read from .gb, .gbc and .dmg files\n(GBC.emu/metadata/conf.mk:5, GBC.emu/src/main/AppMeta.cc:30); an archive is\nopened by the framework, which keeps the first entry passing that same filter\n(EmuFramework/src/EmuSystem.cc:392-419).\n\nThe content image is the only one the app loads. GB::load hands the buffer to\nCartridge::loadROM and starts the machine from the register, memory and\npalette values setInitState writes, the path a reset takes as well\n(GBC.emu/src/libgambatte/src/gambatte.cpp:83-121,\nGBC.emu/src/libgambatte/src/mem/cartridge.cpp:557-669,\nGBC.emu/src/libgambatte/src/initstate.cpp:1151). The vendored API carries no\nboot ROM entry point (GBC.emu/src/libgambatte/include/gambatte.h:38-211) and\nno menu offers a path for one, the file path view adding a cheats directory\nto the stock save and screenshot entries\n(GBC.emu/src/main/EmuMenuViews.cc:187-212,\nEmuFramework/src/gui/FilePathOptionView.cc:159-163). Gambatte's own file\nlayer is left out of the build (GBC.emu/src/CMakeLists.txt:13-39).\n\nDMG content is colored from tables held in the binary: 13 palettes and a\ntitle-keyed list matched against the ROM header\n(GBC.emu/src/main/Main.cc:41-57,155-161, GBC.emu/src/main/Palette.cc:352,359,\n466-474, GBC.emu/src/main/EmuMenuViews.cc:74-96). Report Hardware as GBA\npasses GBA_CGB to the load call (GBC.emu/src/main/Main.cc:150,\nGBC.emu/src/main/system.ccm:113).\n\nPer content the app writes and reads back files named after the ROM: a .sav\nsized to the cartridge SRAM bank and created full of 0xFF\n(GBC.emu/src/main/Main.cc:86-94,105-112, EmuFramework/src/EmuApp.cc:842-849),\na four byte .rtc base time for cartridges carrying a clock\n(GBC.emu/src/main/Main.cc:95-102,113-124), .gqs states\n(GBC.emu/src/main/Main.cc:66-69), a .gbcht cheat list under the cheats path\n(GBC.emu/src/main/Cheats.cc:70-113) and GbcEmu.config\n(GBC.emu/src/main/AppMeta.cc:27). Gambatte's own save file code sits inside\nan #if 0 block and its two entry points are defined as no-ops by the app\n(GBC.emu/src/libgambatte/src/mem/cartridge.cpp:671-715,\nGBC.emu/src/main/Main.cc:308-313).\n\nui.png, gpOverlay.png and the shader sources are drawn from the application\nbundle (EmuFramework/include/emuframework/AssetManager.hh:61-65,\nEmuFramework/src/AssetManager.cc:58-65,\nEmuFramework/src/VideoImageEffect.cc:163-173). The app declares no bundled\ncontent, the framework definition defaulting to an empty span\n(EmuFramework/src/AppMeta.cc:40,\nEmuFramework/include/emuframework/AppMeta.hh:66-68).\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "standalone",
        "upstream": "https://github.com/sinamas/gambatte"
      }
    },
    {
      "id": "gearboy",
      "profile": {
        "core_classification": "official_port",
        "core_version": "3.4.1",
        "cores": [
          "gearboy"
        ],
        "display_name": "Nintendo - Game Boy / Color (Gearboy)",
        "emulator": "Gearboy",
        "files": [
          {
            "description": "Game Boy DMG bootrom",
            "hle_fallback": true,
            "name": "dmg_boot.bin",
            "required": false,
            "size": 256,
            "source_ref": "platforms/libretro/libretro.cpp:828, platforms/libretro/libretro.cpp:359, platforms/libretro/libretro.cpp:359",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Boy Color bootrom",
            "hle_fallback": true,
            "name": "cgb_boot.bin",
            "required": false,
            "size": 2304,
            "source_ref": "platforms/libretro/libretro.cpp:829, platforms/libretro/libretro.cpp:360, platforms/libretro/libretro.cpp:360",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Gearboy is a Game Boy / Game Boy Color emulator by drhelius (Ignacio Sanchez).\nThe buildbot builds from drhelius/Gearboy (upstream), not from libretro/Gearboy\n(abandoned fork frozen at v2.6.0 from 2018).\nBootrom loading is gated behind core options (disabled by default).\nWithout bootroms, the core HLE-skips the boot animation.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/drhelius/Gearboy",
        "source_commit": "5cb627121bc01e9704545d436f8393453bbc479f",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/drhelius/Gearboy"
      }
    },
    {
      "id": "gearcoleco",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.0.0",
        "cores": [
          "gearcoleco"
        ],
        "display_name": "Coleco - ColecoVision (Gearcoleco)",
        "emulator": "Gearcoleco",
        "files": [
          {
            "aliases": [
              "coleco.rom"
            ],
            "name": "colecovision.rom",
            "required": true,
            "size": 8192,
            "source_ref": "platforms/libretro/libretro.cpp:446-468, src/Memory.cpp:202-255",
            "system": "colecovision",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "ColecoVision emulator by Ignacio Sanchez (drhelius). Official port\nmaintained by the upstream author. The ColecoVision BIOS ROM is required.\nWithout it, the core renders a static placeholder image (kNoBiosImage from\nno_bios.h) and games do not execute.\n\nThe libretro wrapper (libretro.cpp:293-306) tries \"colecovision.rom\" first,\nthen falls back to \"coleco.rom\". Both resolve to the same LoadBios() call\nin Memory.cpp:228-259 which validates size == 0x2000 (8192 bytes) only.\nNo hash check is performed.\n\nOn reset, BIOS byte at offset 0x69 is patched for region selection:\n0x3C for NTSC, 0x32 for PAL (Memory.cpp:178-181).\n\nSGM (Super Game Module) expanded RAM requires no additional BIOS files.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/drhelius/Gearcoleco",
        "source_commit": "ca4d13bae91e402d0dce29ed98d6bee2b41b1922",
        "systems": [
          "colecovision"
        ],
        "type": "libretro",
        "upstream": "https://github.com/drhelius/Gearcoleco"
      }
    },
    {
      "id": "geargrafx",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.6.0",
        "cores": [
          "geargrafx"
        ],
        "display_name": "NEC - PC Engine / SuperGrafx / CD (Geargrafx)",
        "emulator": "Geargrafx",
        "files": [
          {
            "description": "Super CD-ROM System Card 3.0",
            "name": "syscard3.pce",
            "note": "Default BIOS for CD-ROM games (cdrom_bios Auto or System Card 3). game_db.h recognizes Japan (CRC32 6D9A73EF) and USA (CRC32 2B5B75FE) variants under the same filename.\n",
            "required": true,
            "size": 262144,
            "source_ref": "platforms/libretro/libretro.cpp:581, platforms/libretro/libretro.cpp:599-601, src/media.cpp:339-436, src/defines.h:52, src/game_db.h:50, src/game_db.h:52",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "CD-ROM System Card 2.0",
            "name": "syscard2.pce",
            "note": "cdrom_bios = 'System Card 2'. For older CD-ROM2 titles. game_db.h recognizes three variants: v2.0 Japan (CRC32 52520BC6), v2.1 Japan (CRC32 283B74E0), and USA (CRC32 FF2A5EC3).\n",
            "required": false,
            "size": 262144,
            "source_ref": "platforms/libretro/libretro.cpp:580, platforms/libretro/libretro.cpp:590-591, src/media.cpp:339-436, src/game_db.h:48-49, src/game_db.h:51",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "CD-ROM System Card 1.0 (Japan)",
            "name": "syscard1.pce",
            "note": "cdrom_bios = 'System Card 1'. Very early CD-ROM2 games only. CRC32 3F9F95A4.\n",
            "required": false,
            "size": 262144,
            "source_ref": "platforms/libretro/libretro.cpp:579, platforms/libretro/libretro.cpp:587-588, src/media.cpp:339-436, src/game_db.h:47",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "Game Express CD Card",
            "name": "gexpress.pce",
            "note": "Always loaded alongside the selected System Card BIOS (libretro.cpp:618). Required for Game Express CD-ROM titles. game_db.h recognizes Blue Version (CRC32 51A12D90) and Green Version (CRC32 16AAF05A).\n",
            "required": false,
            "size": 32768,
            "source_ref": "platforms/libretro/libretro.cpp:582, platforms/libretro/libretro.cpp:596-597, platforms/libretro/libretro.cpp:481-482, src/media.cpp:339-436, src/defines.h:53, src/game_db.h:53-54",
            "validation": [
              "size",
              "crc32"
            ]
          }
        ],
        "notes": "Geargrafx is a PC Engine / TurboGrafx-16 / SuperGrafx / CD-ROM emulator by\nIgnacio Sanchez (drhelius). HuCard games run without BIOS.\n\nCD-ROM games require a System Card BIOS from the system directory. The core\noption \"geargrafx_cdrom_bios\" selects which card: Auto (default, maps to\nsyscard3.pce), System Card 1, System Card 2, System Card 3, or Game Express.\nload_bios() in libretro.cpp builds \"{system_directory}/{filename}\" and calls\ncore->LoadBios(path, true) for the syscard, then always attempts to load\ngexpress.pce via core->LoadBios(path, false).\n\nLoadBios() in media.cpp reads the file, strips a 512-byte header if present,\ncomputes CRC32, and checks it against k_game_database entries flagged with\nGG_GAMEDB_BIOS_SYSCARD or GG_GAMEDB_BIOS_GAME_EXPRESS. If the CRC32 is not\nfound, the BIOS is marked as \"Unknown\" and invalid, but loading still proceeds.\nSize is checked against expected constants and logged if wrong, but not enforced.\n\nGame Express CD-ROM games are auto-detected via CRC32 lookup in game_db.h\n(GG_GAMEDB_GAME_EXPRESS flag). Arcade Card games are also detected from\ngame_db.h and enable extra 0x30000 bytes of Card RAM for Super CD-ROM mode.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/drhelius/Geargrafx",
        "source_commit": "b6a81478b54e27af7076b57fd6a8974a1c3f7137",
        "systems": [
          "nec-pc-engine",
          "nec-supergrafx",
          "nec-pc-engine-cd"
        ],
        "type": "libretro",
        "upstream": "https://github.com/drhelius/Geargrafx",
        "valid_bios_crc32": {
          "game_express": [
            {
              "crc32": "51A12D90",
              "name": "Game Express Card Blue Version (J)"
            },
            {
              "crc32": "16AAF05A",
              "name": "Game Express Card Green Version (J)"
            }
          ],
          "syscard": [
            {
              "crc32": "3F9F95A4",
              "name": "CD-ROM System Card 1.0 (J)"
            },
            {
              "crc32": "52520BC6",
              "name": "CD-ROM System Card 2.0 (J)"
            },
            {
              "crc32": "283B74E0",
              "name": "CD-ROM System Card 2.1 (J)"
            },
            {
              "crc32": "6D9A73EF",
              "name": "Super CD-ROM System 3.0 (J)"
            },
            {
              "crc32": "FF2A5EC3",
              "name": "TurboGrafx CD System Card 2.0 (USA)"
            },
            {
              "crc32": "2B5B75FE",
              "name": "TurboGrafx CD Super System 3.0 (USA)"
            }
          ]
        }
      }
    },
    {
      "id": "gearlynx",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.0.0",
        "cores": [
          "gearlynx"
        ],
        "display_name": "Atari - Lynx (GearLynx)",
        "emulator": "Gearlynx",
        "files": [
          {
            "crc32": "0d973c9d",
            "description": "Atari Lynx boot ROM",
            "md5": "fcd403db69f54290b51035d82f835e7b",
            "name": "lynxboot.img",
            "note": "512-byte boot ROM validated by CRC32 after load. Invalid CRC logs a warning but still works. Missing or wrong-size file blocks emulation entirely (no HLE fallback).",
            "region": [
              "world"
            ],
            "required": true,
            "sha1": "e4ed47fae31693e016b081c6bda48da5b70d7ccb",
            "size": 512,
            "source_ref": "platforms/libretro/libretro.cpp:160-202 (load_bootroms), src/media.cpp:504-546 (LoadBios), src/defines.h:52 (GLYNX_BIOS_SIZE=0x200), src/game_db.h:38 (GLYNX_DB_BIOS_CRC=0x0D973C9D), src/gearlynx_core_inline.h:33-37 (no-bios guard)",
            "validation": [
              "size",
              "crc32"
            ]
          }
        ],
        "notes": "Gearlynx is an Atari Lynx emulator by Ignacio Sanchez (drhelius).\nThe libretro core loads lynxboot.img from the system directory at\nretro_load_game time (libretro.cpp:105-129, function load_bootroms).\nPath is built as: system_directory + \"/lynxboot.img\", no subdirectory.\n\nLoadBios in media.cpp:504 reads exactly 512 bytes (GLYNX_BIOS_SIZE\n= 0x200, defines.h:52). If the file size is not 0x200, the load is\nrejected with BIOS_LOAD_INVALID_SIZE. After loading, bytes at offset\n0x1F8 and 0x1F9 are patched (RAM/MAPCTL registers), then CRC32 is\ncomputed and compared against GLYNX_DB_BIOS_CRC (0x0D973C9D,\ngame_db.h:47). An invalid CRC triggers a warning log but the BIOS\nis still marked as loaded (m_is_bios_loaded = true).\n\nNo HLE fallback. If the BIOS is not loaded (IsBiosLoaded() returns\nfalse), RunToVBlank in\ngearlynx_core_inline.h:31-37 renders a static \"no bios\" image\nand returns false, refusing to emulate. The BIOS is required for\nany ROM to run. Homebrew (.o, BS93 format) bypasses the normal\nboot sequence via PrepareForHomebrew() but still requires the BIOS\nto be loaded for the emulation loop to execute.\n\nROM extensions: .lnx, .lyx, .o\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/drhelius/Gearlynx",
        "source_commit": "fe628a44b0391daff414b74b5f353d6f3b66a673",
        "systems": [
          "atari-lynx"
        ],
        "type": "libretro",
        "verification": "existence"
      }
    },
    {
      "id": "gearsystem",
      "profile": {
        "core_classification": "official_port",
        "core_version": "3.2.0",
        "cores": [
          "gearsystem"
        ],
        "display_name": "Sega - MS/GG/SG-1000 (Gearsystem)",
        "emulator": "Gearsystem",
        "files": [
          {
            "name": "bios.sms",
            "required": false,
            "source_ref": "platforms/libretro/libretro.cpp:534, platforms/libretro/libretro.cpp:537 (load_bootroms)",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios.gg",
            "required": false,
            "source_ref": "platforms/libretro/libretro.cpp:814, platforms/libretro/libretro.cpp:537 (load_bootroms)",
            "system": "sega-gamegear"
          }
        ],
        "notes": "Gearsystem is a Sega Master System / Game Gear / SG-1000 emulator by\nIgnacio Sanchez (drhelius). No BIOS is required for normal operation.\n\nThe core supports optional boot ROMs for Master System and Game Gear,\ncontrolled by core options \"gearsystem_bios_sms\" and \"gearsystem_bios_gg\"\n(both disabled by default). Boot ROMs are loaded in load_bootroms()\nfrom the system directory with fixed filenames.\n\nSG-1000 and Game Gear in SMS mode have no BIOS support.\nIsBootromEnabled() returns false for both cases.\n\nWhen enabled, the boot ROM executes as on original hardware, which may\ncause invalid ROMs to lock or fail to boot entirely.\n",
        "platform_details": {
          "gamegear": {
            "bios_filename": "bios.gg",
            "note": "Boot ROM loaded via LoadBootromGG() -> LoadBootroom(path, true).\nRaw binary read, stored in m_pBootromGG. Same bank computation.\nSupports standard GG BIOS and Majesco 1KB variant.\n",
            "source_ref": "src/Memory.cpp:230-235"
          },
          "mastersystem": {
            "bios_filename": "bios.sms",
            "note": "Boot ROM loaded via LoadBootromSMS() -> LoadBootroom(path, false).\nRaw binary read, stored in m_pBootromSMS. Bank count computed as\nPow2Ceil(size / 0x4000). Memory mapping controlled by port 3E bit 3.\n",
            "source_ref": "src/Memory.cpp:223-228"
          },
          "sg1000": {
            "bios_filename": null,
            "note": "No BIOS support. Memory.cpp:379 returns false from IsBootromEnabled()\nwhen IsSG1000() or IsGameGearInSMSMode() is true.\n"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/drhelius/Gearsystem",
        "source_commit": "d547ae361bf242f25c45260aad29d4adc26e672a",
        "systems": [
          "sega-mastersystem",
          "sega-gamegear",
          "sega-sg1000"
        ],
        "type": "libretro",
        "upstream": "https://github.com/drhelius/Gearsystem"
      }
    },
    {
      "id": "genesis_plus_gx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.7.4",
        "cores": [
          "genesis_plus_gx",
          "genesisplusgx",
          "genesisplusgx-expanded",
          "genplus"
        ],
        "display_name": "Sega - MS/GG/MD/CD (Genesis Plus GX)",
        "emulator": "Genesis Plus GX",
        "files": [
          {
            "name": "bios_CD_U.bin",
            "note": "Sega CD (NTSC-U) boot ROM. Loaded for REGION_USA.",
            "region": [
              "north-america"
            ],
            "required": true,
            "source_ref": "core/loadrom.c:409",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_E.bin",
            "note": "Mega CD (PAL) boot ROM. Loaded for REGION_EUROPE.",
            "region": [
              "europe"
            ],
            "required": true,
            "source_ref": "core/loadrom.c:412",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_J.bin",
            "note": "Mega CD (NTSC-J) boot ROM. Loaded for default/Japan region.",
            "region": [
              "japan"
            ],
            "required": true,
            "source_ref": "core/loadrom.c:415",
            "system": "sega-megacd"
          },
          {
            "name": "bios_U.sms",
            "note": "Master System (NTSC-U) boot ROM. Snail maze game built in.",
            "region": [
              "north-america"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:511",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios_E.sms",
            "note": "Master System (PAL) boot ROM. Snail maze / Sonic built in.",
            "region": [
              "europe"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:514",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios_J.sms",
            "note": "Master System (NTSC-J) boot ROM.",
            "region": [
              "japan"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:517",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios.gg",
            "note": "Game Gear boot ROM (Majesco 1KB or standard). Shows startup logo.",
            "required": false,
            "source_ref": "core/loadrom.c:480",
            "system": "sega-gamegear"
          },
          {
            "name": "bios_MD.bin",
            "note": "Mega Drive TMSS boot ROM. Shows 'Produced by or under license' screen.",
            "required": false,
            "source_ref": "libretro/libretro.c:3780",
            "system": "sega-megadrive"
          },
          {
            "name": "ggenie.bin",
            "note": "Game Genie ROM. Loaded when Game Genie lock-on is enabled.",
            "required": false,
            "source_ref": "core/cart_hw/ggenie.c:64, libretro/libretro.c:3516",
            "system": "sega-megadrive"
          },
          {
            "name": "areplay.bin",
            "note": "Action Replay (Pro) ROM. Loaded when Action Replay lock-on is enabled.",
            "required": false,
            "source_ref": "core/cart_hw/areplay.c:64, libretro/libretro.c:3517",
            "system": "sega-megadrive"
          },
          {
            "name": "sk.bin",
            "note": "Sonic & Knuckles ROM. Required for S&K lock-on feature.",
            "required": false,
            "size": 2097152,
            "source_ref": "core/cart_hw/md_cart.c:867",
            "system": "sega-megadrive",
            "validation": [
              "size"
            ]
          },
          {
            "name": "sk2chip.bin",
            "note": "Sonic & Knuckles UPMEM ROM. Used by Sonic 2 & Knuckles lock-on.",
            "required": false,
            "size": 262144,
            "source_ref": "core/cart_hw/md_cart.c:873",
            "system": "sega-megadrive",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Genesis Plus GX is a Sega 8/16-bit emulator covering SG-1000, Master System,\nGame Gear, Mega Drive/Genesis, and Mega CD/Sega CD.\n\nBIOS loading is handled by load_bios() in core/loadrom.c. The libretro port\nresolves filenames from the system directory in libretro/libretro.c:3516-3527.\n\nMega CD BIOS is required to boot CD images (load fails without it).\nMaster System, Game Gear, and Mega Drive BIOS files are optional boot ROMs\ngated behind the \"genesis_plus_gx_bios\" core option (config.bios).\nLock-on ROMs (Game Genie, Action Replay, Sonic & Knuckles) are optional\nand loaded only when the corresponding lock-on feature is enabled.\n",
        "platform_details": {
          "gamegear": {
            "bios_max_size": 4194304,
            "note": "Handles 1KB Majesco GG BIOS (mapped to $0000-$03FF) and\nstandard larger BIOS ROMs.\n",
            "source_ref": "core/loadrom.c:467-489"
          },
          "mastersystem": {
            "bios_max_size": 4194304,
            "note": "BIOS ROM loaded into cart.rom + 0x400000. SEGA mapper assumed\nfor ROMs larger than 48KB, otherwise no mapper.\nRegion selected based on current region_code setting.\n",
            "source_ref": "core/loadrom.c:504-527"
          },
          "megacd": {
            "bootrom_size": 131072,
            "note": "CD boot ROM region is auto-detected from disc image header.\nHardware model detected from boot ROM string at offset 0x120:\n  WONDER-MEGA BOOT -> Wondermega\n  WONDERMEGA2 BOOT -> Wondermega M2 / X'Eye\n  CDX BOOT ROM     -> CDX / Multi-Mega\n",
            "source_ref": "core/cd_hw/scd.h:73"
          },
          "megadrive": {
            "note": "TMSS boot ROM validated by checking \"GENESIS OS\" at offset 0x120.\nOnly loaded when genesis_plus_gx_bios core option is enabled.\n",
            "source_ref": "libretro/libretro.c:3648-3666",
            "tmss_rom_size": 2048
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/Genesis-Plus-GX",
        "source_commit": "84fcf2ec8e6b8d901c2fec55c884f285f93a1679",
        "systems": [
          "sega-megadrive",
          "sega-megacd",
          "sega-mastersystem",
          "sega-gamegear",
          "sega-sg1000",
          "sega-pico"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ekeeke/Genesis-Plus-GX"
      }
    },
    {
      "id": "genesis_plus_gx_wide",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v1.7.4",
        "cores": [
          "genesis_plus_gx_wide",
          "genesisplusgxwide",
          "genesisplusgx-wide"
        ],
        "display_name": "Sega - MS/GG/MD/CD (Genesis Plus GX Wide)",
        "emulator": "Genesis Plus GX Wide",
        "files": [
          {
            "name": "bios_CD_U.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "core/loadrom.c:408",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_E.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "core/loadrom.c:411",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "core/loadrom.c:414",
            "system": "sega-megacd"
          },
          {
            "name": "bios_U.sms",
            "region": [
              "north-america"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:512",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios_E.sms",
            "region": [
              "europe"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:515",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios_J.sms",
            "region": [
              "japan"
            ],
            "required": false,
            "source_ref": "core/loadrom.c:518",
            "system": "sega-mastersystem"
          },
          {
            "name": "bios.gg",
            "required": false,
            "source_ref": "core/loadrom.c:481",
            "system": "sega-gamegear"
          },
          {
            "name": "bios_MD.bin",
            "required": false,
            "size": 2048,
            "source_ref": "libretro/libretro.c:3939",
            "system": "sega-megadrive"
          },
          {
            "name": "ggenie.bin",
            "required": false,
            "size": 32768,
            "source_ref": "core/cart_hw/ggenie.c:64, libretro/libretro.c:3803",
            "system": "sega-megadrive"
          },
          {
            "name": "areplay.bin",
            "required": false,
            "size": 65536,
            "source_ref": "core/cart_hw/areplay.c:64, libretro/libretro.c:3804",
            "system": "sega-megadrive"
          },
          {
            "name": "sk.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "core/cart_hw/md_cart.c:750",
            "system": "sega-megadrive",
            "validation": [
              "size"
            ]
          },
          {
            "name": "sk2chip.bin",
            "required": false,
            "size": 262144,
            "source_ref": "core/cart_hw/md_cart.c:756",
            "system": "sega-megadrive",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Widescreen hack of Genesis Plus GX by heyjoeway. Adds automatic\nwidescreen rendering to Mega Drive games. BIOS loading identical to\nstandard Genesis Plus GX (libretro.c:3547-3558).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/Genesis-Plus-GX-Wide",
        "source_commit": "b7ad005431f5f0b55e559f6d598d1ed2479bf13b",
        "systems": [
          "sega-megadrive",
          "sega-megacd",
          "sega-mastersystem",
          "sega-gamegear",
          "sega-sg1000",
          "sega-pico"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ekeeke/Genesis-Plus-GX"
      }
    },
    {
      "id": "geolith",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.4.1",
        "cores": [
          "geolith"
        ],
        "display_name": "SNK - Neo Geo AES/MVS (Geolith)",
        "emulator": "Geolith",
        "files": [
          {
            "md5": "ad9585c72130c56f04ae26aae87c289d",
            "name": "aes.zip",
            "note": "Neo Geo AES System ROMs. Opened when System Type is AES (default).",
            "required": true,
            "source_ref": "libretro/libretro.c:1231-1234, jg.c:213-214",
            "system": "snk-neogeo-aes"
          },
          {
            "md5": "00dad01abdbf8ea9e79ad2fe11bdb182",
            "name": "neogeo.zip",
            "note": "Neo Geo MVS System ROMs. Opened for MVS and Universe BIOS modes.",
            "required": true,
            "source_ref": "libretro/libretro.c:1231-1234, jg.c:215-216",
            "system": "snk-neogeo-mvs"
          },
          {
            "md5": "006a881532f2caffc3fe9fb5593f2ed5",
            "name": "neocd.zip",
            "note": "Neo Geo CD Front/Top Loader System ROMs. Opened only when CD System is front or top loader.",
            "required": false,
            "source_ref": "libretro/libretro.c:1222-1229, jg.c:217-218",
            "system": "snk-neogeo-cd"
          },
          {
            "md5": "b31a246b69493c35194fe0bac120dc37",
            "name": "neocdz.zip",
            "note": "Neo Geo CDZ System ROMs. Opened for CDZ (default) and CD Universe BIOS; also supplies 000-lo.lo to Front/Top Loader mode.",
            "required": true,
            "source_ref": "libretro/libretro.c:1222-1248, jg.c:219-220",
            "system": "snk-neogeo-cd"
          },
          {
            "md5": "0e369df30a70e45547cef9e4078dc511",
            "name": "irrmaze.zip",
            "note": "The Irritating Maze auxiliary BIOS. Loaded in MVS mode for trackball support; on failure the game runs without trackball.",
            "required": false,
            "source_ref": "libretro/libretro.c:1300-1311, jg.c:221-222",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "aes.zip",
            "crc32": "d27a71f1",
            "name": "neo-epo.bin",
            "note": "AES 68K BIOS, non-Japan regions. Default for Region USA.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:178-181",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "aes.zip",
            "crc32": "16d0c132",
            "name": "neo-po.bin",
            "note": "AES 68K BIOS, Japan region.",
            "required": false,
            "size": 131072,
            "source_ref": "src/geo.c:178-181",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "aes.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:234-243",
            "system": "snk-neogeo-aes"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "e72943de",
            "name": "sp-u2.sp1",
            "note": "MVS 68K BIOS, USA. Default for Region USA.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:183-198",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "dff6d41f",
            "name": "japan-j3.bin",
            "note": "MVS 68K BIOS, Japan.",
            "required": false,
            "size": 131072,
            "source_ref": "src/geo.c:183-198",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "03cc9f6a",
            "name": "sp-45.sp1",
            "note": "MVS 68K BIOS, Asia.",
            "required": false,
            "size": 524288,
            "source_ref": "src/geo.c:183-198",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "9036d879",
            "name": "sp-s2.sp1",
            "note": "MVS 68K BIOS, Europe.",
            "required": false,
            "size": 131072,
            "source_ref": "src/geo.c:183-198",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "a7aab458",
            "name": "uni-bios_4_0.rom",
            "note": "Universe BIOS 4.0, loaded when System Type is Universe BIOS. Emulated hardware type set by the geolith_unibios_hw option.",
            "required": false,
            "size": 131072,
            "source_ref": "src/geo.c:200-203",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:234-243",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "c2ea0cfd",
            "name": "sfix.sfix",
            "note": "System FIX layer tiles. Loaded for MVS and Universe BIOS modes.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:245-255",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neogeo.zip",
            "crc32": "94416d67",
            "name": "sm1.sm1",
            "note": "Z80 sound BIOS. Loaded for MVS and Universe BIOS modes.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:257-267",
            "system": "snk-neogeo-mvs"
          },
          {
            "archive": "neocd.zip",
            "name": "front-sp1.bin",
            "note": "Neo Geo CD Front Loader 68K BIOS.",
            "required": false,
            "source_ref": "src/geo.c:204-207",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocd.zip",
            "name": "top-sp1.bin",
            "note": "Neo Geo CD Top Loader 68K BIOS.",
            "required": false,
            "source_ref": "src/geo.c:208-211",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocd.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table. Extraction is attempted but absence is tolerated in Front/Top Loader mode; the copy in neocdz.zip is used instead.",
            "required": false,
            "size": 131072,
            "source_ref": "src/geo.c:234-243",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "name": "neocd.bin",
            "note": "Neo Geo CDZ 68K BIOS. Default for CD content.",
            "required": true,
            "source_ref": "src/geo.c:212-215",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "name": "uni-bioscd33.rom",
            "note": "Universe BIOS CD 3.3, loaded when CD System is CD Universe BIOS.",
            "required": false,
            "source_ref": "src/geo.c:216-219",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "neocdz.zip",
            "crc32": "5a86cff2",
            "name": "000-lo.lo",
            "note": "Zoom lookup table. Read from neocdz.zip in every CD mode, including Front/Top Loader.",
            "required": true,
            "size": 131072,
            "source_ref": "src/geo.c:234-243, 273-285, libretro/libretro.c:1241-1248",
            "system": "snk-neogeo-cd"
          },
          {
            "archive": "irrmaze.zip",
            "name": "236-bios.sp1",
            "note": "The Irritating Maze auxiliary 68K BIOS, replaces the MVS BIOS to enable trackball input.",
            "required": false,
            "source_ref": "src/geo.c:286-299, libretro/libretro.c:1300-1311",
            "system": "snk-neogeo-mvs"
          }
        ],
        "notes": "Geolith emulates the Neo Geo AES, MVS, CD, and CDZ. Cartridge systems use\n.NEO format ROMs; CD systems use .cue or .chd disc images. System ROMs come\nfrom MAME-format ZIP archives in the system directory.\n\nCartridge content opens aes.zip (System Type = AES, default) or neogeo.zip\n(MVS and Universe BIOS) (libretro/libretro.c:1231-1234). CD content opens\nneocd.zip (Front/Top Loader) or neocdz.zip (CDZ, default, and CD Universe\nBIOS) (libretro/libretro.c:1222-1230); Front/Top Loader additionally reads\n000-lo.lo from neocdz.zip, so neocdz.zip is needed in every CD mode\n(libretro/libretro.c:1241-1248). The Irritating Maze in MVS mode loads\n236-bios.sp1 from irrmaze.zip for trackball support; without it the game\nruns but the trackball does not work (libretro/libretro.c:1300-1311).\n\nInside the opened archive, members are extracted by exact filename\n(src/geo.c:174-271). One 68K BIOS is selected by system type and region\n(defaults: System Type AES, Region USA):\n  - AES Japan:          neo-po.bin\n  - AES other regions:  neo-epo.bin\n  - MVS USA:            sp-u2.sp1\n  - MVS Japan:          japan-j3.bin\n  - MVS Asia:           sp-45.sp1\n  - MVS Europe:         sp-s2.sp1\n  - Universe BIOS:      uni-bios_4_0.rom\n  - CD Front Loader:    front-sp1.bin\n  - CD Top Loader:      top-sp1.bin\n  - CDZ:                neocd.bin\n  - CD Universe BIOS:   uni-bioscd33.rom\n000-lo.lo is required in every mode; only the Front/Top Loader tolerates\nits absence from neocd.zip because it comes from neocdz.zip instead\n(src/geo.c:234-243, 273-285). sfix.sfix and sm1.sm1 are required for MVS\nand Universe BIOS modes only (src/geo.c:245-267).\n\nThe core performs no hash or size validation on System ROMs. CD BIOS family\ndetection and the optional CD speed hack patches use byte patterns and\napply only when the 68K BIOS is at least 512 KiB (src/geo_cd.c:1837-1859,\n1904-1924). Upstream declares the expected archive MD5s through the Jolly\nGood API BIOS list (jg.c:212-223); the md5 fields on the archives below\nare copied from it.\n",
        "profiled_date": "2026-08-07",
        "source": "https://github.com/libretro/geolith-libretro",
        "source_commit": "d0297113924848c60866e980a420d14ca7208d56",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "snk-neogeo-cd"
        ],
        "type": "libretro",
        "upstream": "https://gitlab.com/jgemu/geolith",
        "upstream_commit": "7ed2ef95a446ffb9bf17b6536d24c108310c94da"
      }
    },
    {
      "id": "gme",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "Git",
        "cores": [
          "gme"
        ],
        "display_name": "Game Music Emu",
        "emulator": "Game Music Emu",
        "files": [],
        "notes": "Libretro wrapper around Blargg's Game Music Emu library. Plays chiptune music files: NSF/NSFE (NES), SPC (SNES), GBS (Game Boy), VGM/VGZ (Sega), HES (PC Engine), AY (ZX Spectrum), SAP (Atari), KSS (MSX), GYM (Genesis). Loads music files as content.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-gme",
        "source_commit": "495431b0f5951b9428253064370ac1272994c657",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libgme/game-music-emu"
      }
    },
    {
      "id": "gong",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1.0",
        "cores": [
          "gong"
        ],
        "display_name": "Gong",
        "emulator": "Gong",
        "files": [],
        "notes": "Pong clone. Self-contained single-file core, all rendering programmatic. Original code by Dan Zaidan, ported to libretro by Brad Parker.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/gong",
        "source_commit": "11d98233f9bba2dec60cae555b196684fd9d2aa5",
        "systems": [],
        "type": "game",
        "upstream": "https://danzaidan.itch.io/"
      }
    },
    {
      "id": "gopher2600",
      "profile": {
        "core_classification": "other",
        "core_version": "v0.57.0",
        "cores": [
          "gopher2600"
        ],
        "display_name": "Atari - 2600 (Gopher2600)",
        "emulator": "Gopher2600",
        "files": [
          {
            "aliases": [
              "Supercharger.BIOS.bin",
              "Supercharger_BIOS.bin",
              "supercharger_bios.bin",
              "SUPERCHARGER_BIOS.bin"
            ],
            "description": "Starpath Supercharger BIOS, required to load a tape held as WAV or MP3",
            "hle_fallback": true,
            "md5": "4565c1a7abce773e53c75b35414adefd",
            "name": "Supercharger BIOS.bin",
            "required": false,
            "size": 2048,
            "source_ref": "hardware/memory/cartridge/supercharger/bios.go:30-36,45,53-116,141",
            "system": "atari-2600",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "aliases": [
              "Supercharger_BIOS_PAL.bin",
              "SUPERCHARGER_BIOS_PAL.bin"
            ],
            "description": "PAL Supercharger BIOS, selected when the loader resolves a PAL specification",
            "hle_fallback": true,
            "md5": "4a8c743396b8ad69d97e6fd3dd3e3132",
            "name": "Supercharger BIOS PAL.bin",
            "required": false,
            "size": 2048,
            "source_ref": "hardware/memory/cartridge/supercharger/bios.go:38-42,46,56-59,141",
            "system": "atari-2600",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "description": "Schweber chip image, the load that turns the Supercharger into the demo unit",
            "md5": "0a98bc3d53a0965de87fc77377b5a0db",
            "name": "Schweber OQ.bin",
            "note": "Recognised by the MD5 of the 256 bytes at 0x300, so the name is the one the dump carries rather than one the code fixes. The carousel ROMs are only read once this image has been accepted.",
            "required": false,
            "size": 2048,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit.go:56-78, hardware/memory/cartridge/supercharger/supercharger.go:107,115, hardware/memory/cartridge/fingerprint.go:333",
            "system": "atari-2600",
            "validation": [
              "md5"
            ]
          },
          {
            "description": "Demo unit carousel ROM 1, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 1P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 2, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 2P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 3, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 3P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 4, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 4P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 5, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 5P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 6, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 6P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 7, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 7P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Demo unit carousel ROM 8, read from the directory of the loaded image",
            "name": "Starpath Demonstration Unit 8P.bin",
            "required": false,
            "size": 8192,
            "source_ref": "hardware/memory/cartridge/supercharger/demounit_controller.go:37-46,178-200",
            "system": "atari-2600",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Stella cartridge properties database, keyed by cartridge MD5",
            "name": "stella.pro",
            "required": false,
            "source_ref": "properties/properties.go:28,48-58; debugger/debugger.go:356",
            "system": "atari-2600"
          }
        ],
        "mode": "standalone",
        "notes": "Atari 2600 emulator written in Go. The 6507, TIA and RIOT are emulated in\nsoftware and the console needs no ROM of its own, so a plain cartridge boots\nwith nothing supplied.\n\nSupercharger emulation is the only path that reads a BIOS. NewSupercharger\nbranches three ways (supercharger.go:93-119). A tape held as WAV or MP3 sets\nLoader.IsSoundData and calls loadBIOS, and the error is returned, so the\ncartridge fails to attach without the file. A demo unit image calls loadBIOS\nand substitutes fastloadOnlyBIOS() on failure. Everything else, including the\nusual Supercharger BIN, takes fastloadOnlyBIOS() without ever looking for the\nfile: a 2048 byte stub holding a touch of the tape load register and the CPU\njump table (bios.go:151-166).\n\nloadBIOS reads the current working directory, then the directory holding the\ntape or BIN, then the configuration directory (bios.go:53-116). Each candidate\nname is tried in turn and the content is gated on MD5 before the caller checks\nthe 2048 byte length, so a file under the right name with the wrong content is\nrefused. ReqSpec selects the PAL table and the PAL hash (bios.go:56-59);\nReqSpec comes from the television specification, the stella.pro entry or the\nfilename (cartridgeloader/loader.go:194-201).\n\nThe demo unit is recognised by MD5 of the 256 bytes at 0x300 of the loaded\nimage (demounit.go:58,78). When that image carries more than 2048 bytes it\nholds the Schweber chip and the carousel together; otherwise the eight ROMs\nare read from the directory of the loaded file (demounit_controller.go:\n178-200). A read error or a length other than 8192 logs and returns nil, and\nthe peripheral is left unplugged.\n\nstella.pro is Stella's cartridge properties database, read from the\nconfiguration directory (properties.go:28,48-58). It is loaded by\nNewDebugger (debugger.go:356), which drives play as well as debug\n(gopher2600.go:261,307,326), so it applies to the plain `gopher2600 <rom>`\ninvocation. A missing file is logged and start-up continues; the ROM selector\nthen falls back to the filename and no television specification is inferred\nfrom the cartridge name.\n\nThe ROM selector also reads a Named_Boxarts directory from the configuration\ndirectory, listing it at start-up and fuzzy matching the cartridge name\nagainst the entries before reading one image (win_rom_select.go:92,127-138,\n678-689). It holds the box art of the libretro-thumbnails Atari 2600 set,\npinned upstream at commit 4ea759821724d6c7bcf2f46020d79fc4270ed2f6\n(win_rom_select.go:91). Its content is whatever the user copies in and no\nname is fixed by the code, so it carries no file entry here.\n\nFonts, shaders, bevels, the CPU instruction table and the Movie Cart core are\ncompiled in with go:embed. The remaining paths under the configuration\ndirectory are written by the emulator or authored by hand: preferences,\ndebugger_imgui.ini, managerState, managerHotkeys, savekey, fa2_nvram,\nelf_nvram, regression, patches and setupDB. ARM map files and DWARF sources\nare read from a project build tree beside the ROM. AtariVox speech calls the\nfestival binary as a process, with the path taken from preferences\n(atarivox_preferences.go:51).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/JetSetIlly/Gopher2600",
        "source_commit": "6bfd0abeb61ff109e3e354efad8274da1ac629d6",
        "systems": [
          "atari-2600"
        ],
        "type": "standalone",
        "upstream": "https://github.com/JetSetIlly/Gopher2600"
      }
    },
    {
      "id": "gopher64",
      "profile": {
        "core_classification": "other",
        "core_version": "v1.1.34",
        "cores": [
          "gopher64"
        ],
        "display_name": "Nintendo - Nintendo 64 (gopher64)",
        "emulator": "gopher64",
        "files": [],
        "mode": "standalone",
        "notes": "Nintendo 64 emulator written in Rust by Logan McNaughton, with parallel-rdp\ndriving the RDP and rcheevos providing RetroAchievements. Portions of the\nemulation are adapted from mupen64plus and ares. ES-DE and RetroBat both run\nthe release binary, RetroBat in portable mode.\n\nThe boot chain reads no file. Both PIF ROMs are compiled in as 1984 byte\narrays, the size of the PIF ROM window (src/device/pif/rom.rs:1,90;\nsrc/device/pif.rs:7). reset_pif installs the PAL image when the cartridge\ncountry code is one of DFIPSUXY and the NTSC image otherwise\n(src/device/pif.rs:252-257, src/device/cart/rom.rs:137-143), and the VR4300\nruns IPL1 and IPL2 out of that array: reads below the PIF RAM offset are\nserved from it and writes there panic (src/device/pif.rs:31-58). The CIC needs\nno file either. set_cic hashes the cartridge IPL3 region with SHA-256 and maps\nthe six known digests to a seed byte, with the 6102 seed as the fallback\n(src/device/cart/rom.rs:147-175).\n\n64DD is not emulated, so no IPL image is involved.\n\nA Transfer Pak port reads two files whose paths come from the configuration,\ngb_rom_path and gb_ram_path, and attaches them when both are set\n(src/lib.rs:194-200). The pair is a Game Boy cartridge and its save, supplied\nby the player: the loader takes the ROM as is and only inspects the tail of\nthe RAM for MBC3 clock state (src/device/controller/gbcart.rs:37-75), then\nwrites the RAM back on shutdown (src/lib.rs:276-288). The code fixes no name,\nsize or hash for either, so neither carries a file entry here.\n\nThe SC64 SD card image is created rather than obtained: an empty save is\nresized to 64 MB and FAT formatted on first access\n(src/device/cart/sc64.rs:4,34-38). Cartridges come from argv, plain or as the\nfirst matching entry of a zip or 7z archive (src/device.rs:188-256).\n\nEverything else under the configuration, data and cache directories is written\nby the emulator: config.json and cheats.json (src/ui/config.rs:99-111,134-146),\nretroachievements.json (src/lib.rs:209; src/retroachievements.rs:37,61),\nice_config.json from the netplay server response (src/ui/netplay.rs:713-716,\nsrc/netplay.rs:419), the eeprom, sram, flash, mempak, sdcard and romsave saves\nand the savestates (src/ui/storage.rs:212-232; src/savestates.rs:179,236). For\na netplay launch the GUI serialises the cheats to the cache directory, passes\nthem to a re-exec of itself through the hidden --cheats flag and deletes the\nfile afterwards (src/ui/gui.rs:583-593,600-615,630; src/lib.rs:141-147).\nportable.txt is tested for existence only, to move those three directories\nbeside the executable (src/ui.rs:164-178).\n\nCompiled-in data: the cheat database (src/cheats.rs:31), the No-Intro\nNintendo 64 export that names entries in the ROM browser\n(src/ui/gui.rs:688-690), the RobotoMono face handed to SDL_ttf from memory\n(src/ui/video.rs:109, src/ui/input_profile.rs:99), the parallel-rdp SPIR-V\nmodules (parallel-rdp/spirv.hpp and parallel-rdp/spirv_crt.hpp, used at\nparallel-rdp/interface.cpp:4-5,615) and the Slint translations bundled at\nbuild time (build.rs:11).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/gopher64/gopher64",
        "source_commit": "efe78e544a96ac6724a2c2651d8f0a62044e7467",
        "systems": [
          "nintendo-64"
        ],
        "type": "standalone",
        "upstream": "https://github.com/gopher64/gopher64"
      }
    },
    {
      "id": "gpsp",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "gpsp"
        ],
        "display_name": "Nintendo - Game Boy Advance (gpSP)",
        "emulator": "gpSP",
        "files": [
          {
            "description": "Official GBA BIOS",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "Built-in open-source BIOS used as fallback. Real BIOS needed for full SWI accuracy and boot animation.",
            "required": false,
            "size": 16384,
            "source_ref": "libretro/libretro.c:1214, gba_memory.c:2568-2580",
            "system": "nintendo-gba"
          }
        ],
        "notes": "gpSP is a Game Boy Advance emulator originally by Exophase, forked by\nnotaz for GP2X/Pandora, now maintained by davidgfnet for libretro.\nShips a built-in open-source BIOS (bios/open_gba_bios.bin) compiled\nfrom bios/source/ that covers most games.\n\nThe core option gpsp_bios controls BIOS selection:\n  auto     (default) - try official gba_bios.bin, fall back to built-in\n  builtin  - always use the built-in open-source BIOS\n  official - try gba_bios.bin, warn and fall back to built-in if missing\n\nBIOS loading path (libretro/libretro.c:1200-1236):\n  1. Resolve system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY)\n  2. Append \"/gba_bios.bin\"\n  3. load_bios() reads 0x4000 (16 KB) into bios_rom[]\n  4. Sanity check: bios_rom[0] must be 0x18 (ARM branch opcode)\n  5. On failure, memcpy open_gba_bios_rom[] as fallback\n\nThe official BIOS improves compatibility for games that rely on\nprecise SWI behavior or BIOS checksum verification.\n\nUpstream (notaz/Exophase) required the official BIOS with no fallback.\nThe built-in open-source BIOS is a davidgfnet/libretro addition.\n",
        "platform_details": {
          "gba": {
            "bios_size": 16384,
            "hle_bios": true,
            "note": "The built-in BIOS (open_gba_bios_rom, 16 KB) is an open-source\nreimplementation compiled from bios/source/. It implements most\nSWI calls (SoftReset, RegisterRamReset, Halt, VBlankIntrWait,\narithmetic, decompression, sound, multiboot).\n\nNo hash or checksum verification is performed. The only check\nis bios_rom[0] == 0x18 (ARM branch at reset vector).\n\nThe bios_type enum (main.h:56-61) defines three modes:\n  auto_detect  - try official first, fall back to built-in\n  builtin_bios - skip file load entirely, use open_gba_bios_rom\n  official_bios - try file, warn on failure, still fall back\n",
            "source_ref": "libretro/libretro.c:1200-1236, bios/source/core.s"
          }
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/gpsp",
        "source_commit": "5b6e751f4abf368509146cd143c949c1946ac1ae",
        "systems": [
          "nintendo-gba"
        ],
        "type": "libretro",
        "upstream": "https://github.com/davidgfnet/gpsp"
      }
    },
    {
      "id": "groovymame",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "0.288",
        "cores": [
          "groovymame"
        ],
        "display_name": "Arcade (GroovyMAME)",
        "emulator": "GroovyMAME",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "03cc9f6a",
                "name": "sp-45.sp1",
                "sha1": "cdf1f49e3ff2bac528c21ed28449cf35b7957dc1",
                "size": 524288
              },
              {
                "crc32": "91b64be3",
                "name": "sp-s3.sp1",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "name": "sp-u2.sp1",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "62f021f4",
                "name": "sp1-u2",
                "sha1": "62d372269e1b3161c64ae21123655a0a22ffd1bb",
                "size": 131072
              },
              {
                "crc32": "1179a30f",
                "name": "sp1-u4.bin",
                "sha1": "866817f47aa84d903d0b819d61f6ef356893d16a",
                "size": 131072
              },
              {
                "crc32": "2025b7a2",
                "name": "sp1-u3.bin",
                "sha1": "73d774746196f377111cd7aa051cc8bb5dd948b3",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "name": "sp-j2.sp1",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "dff6d41f",
                "name": "japan-j3.bin",
                "sha1": "e92910e20092577a4523a6b39d578a71d4de7085",
                "size": 131072
              },
              {
                "crc32": "fbc6d469",
                "name": "sp1-j3.bin",
                "sha1": "46b2b409b5b68869e367b40c846373623edb632a",
                "size": 131072
              },
              {
                "crc32": "486cb450",
                "name": "sp-j3.sp1",
                "sha1": "52c21ea817928904b80745a8c8d15cbad61e1dc1",
                "size": 524288
              },
              {
                "crc32": "162f0ebe",
                "name": "sp-1v1_3db8c.bin",
                "sha1": "fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271",
                "size": 131072
              },
              {
                "crc32": "a7aab458",
                "name": "uni-bios_4_0.rom",
                "sha1": "938a0bda7d9a357240718c2cec319878d36b8f72",
                "size": 131072
              },
              {
                "crc32": "24858466",
                "name": "uni-bios_3_3.rom",
                "sha1": "0ad92efb0c2338426635e0159d1f60b4473d0785",
                "size": 131072
              },
              {
                "crc32": "a4e8b9b3",
                "name": "uni-bios_3_2.rom",
                "sha1": "c92f18c3f1edda543d264ecd0ea915240e7c8258",
                "size": 131072
              },
              {
                "crc32": "0c58093f",
                "name": "uni-bios_3_1.rom",
                "sha1": "29329a3448c2505e1ff45ffa75e61e9693165153",
                "size": 131072
              },
              {
                "crc32": "a97c89a9",
                "name": "uni-bios_3_0.rom",
                "sha1": "97a5eff3b119062f10e31ad6f04fe4b90d366e7f",
                "size": 131072
              },
              {
                "crc32": "27664eb5",
                "name": "uni-bios_2_3.rom",
                "sha1": "5b02900a3ccf3df168bdcfc98458136fd2b92ac0",
                "size": 131072
              },
              {
                "crc32": "601720ae",
                "name": "uni-bios_2_3o.rom",
                "sha1": "1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9",
                "size": 131072
              },
              {
                "crc32": "2d50996a",
                "name": "uni-bios_2_2.rom",
                "sha1": "5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c",
                "size": 131072
              },
              {
                "crc32": "8dabf76b",
                "name": "uni-bios_2_1.rom",
                "sha1": "c23732c4491d966cf0373c65c83c7a4e88f0082c",
                "size": 131072
              },
              {
                "crc32": "0c12c2ad",
                "name": "uni-bios_2_0.rom",
                "sha1": "37bcd4d30f3892078b46841d895a6eff16dc921e",
                "size": 131072
              },
              {
                "crc32": "b24b44a0",
                "name": "uni-bios_1_3.rom",
                "sha1": "eca8851d30557b97c309a0d9f4a9d20e5b14af4e",
                "size": 131072
              },
              {
                "crc32": "4fa698e9",
                "name": "uni-bios_1_2.rom",
                "sha1": "682e13ec1c42beaa2d04473967840c88fd52c75a",
                "size": 131072
              },
              {
                "crc32": "e19d3ce9",
                "name": "uni-bios_1_2o.rom",
                "sha1": "af88ef837f44a3af2d7144bb46a37c8512b67770",
                "size": 131072
              },
              {
                "crc32": "5dda0d84",
                "name": "uni-bios_1_1.rom",
                "sha1": "4153d533c02926a2577e49c32657214781ff29b7",
                "size": 131072
              },
              {
                "crc32": "0ce453a0",
                "name": "uni-bios_1_0.rom",
                "sha1": "3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "5a86cff2",
                "name": "000-lo.lo",
                "sha1": "5992277debadeb64d1c1c64b0a92d9293eaf7e4a",
                "size": 131072
              },
              {
                "crc32": "c2ea0cfd",
                "name": "sfix.sfix",
                "sha1": "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3",
                "size": 131072
              }
            ],
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/neogeo/neogeo.cpp:2432",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "78c15fa2",
                "name": "pgm_p02s.u20",
                "sha1": "885a6558e022602cc6f482ac9667ba9f61e75092",
                "size": 131072
              },
              {
                "crc32": "e42b166e",
                "name": "pgm_p01s.u20",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/igs/pgm.cpp:5545",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.ic27",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "4599ad13",
                "name": "epr-21576c.ic27",
                "sha1": "7e730e9452a792d76f210c33a955d385538682c7",
                "size": 2097152
              },
              {
                "crc32": "755a6e07",
                "name": "epr-21576b.ic27",
                "sha1": "7e8b8ccfc063144d89668e7224dcd8a36c54f3b3",
                "size": 2097152
              },
              {
                "crc32": "cedfe439",
                "name": "epr-21576a.ic27",
                "sha1": "f27798bf3d890863ef0c1d9dcb4e7782249dca27",
                "size": 2097152
              },
              {
                "crc32": "9dad3495",
                "name": "epr-21576.ic27",
                "sha1": "5fb66f9a2b68d120f059c72758e65d34f461044a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "628a27fd",
                "name": "epr-21578f.ic27",
                "sha1": "dae7add616b1a2478f00608823e88c3b82a0e78f",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.ic27",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "6c9aad83",
                "name": "epr-21578a.ic27",
                "sha1": "555918de76d8dbee2a97d8a95297ef694b3e803f",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.ic27",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "969dc491",
                "name": "epr-21577a.ic27",
                "sha1": "581d1eae328b87b67508a7586ffc60cee256f70f",
                "size": 2097152
              },
              {
                "crc32": "33513691",
                "name": "epr-21579d.ic27",
                "sha1": "b1d8c7c516e1471a788fcf7a02a794ad2f05aeeb",
                "size": 2097152
              },
              {
                "crc32": "71f9c918",
                "name": "epr-21579.ic27",
                "sha1": "d15af8b947f41eea7c203b565cd403e3f37a2017",
                "size": 2097152
              },
              {
                "crc32": "7a50fab9",
                "name": "boot_rom_64b8.ic606",
                "sha1": "ef79f448e0bf735d1264ad4f051d24178822110f",
                "size": 524288
              },
              {
                "crc32": "de7cfdb0",
                "name": "develop110.ic27",
                "sha1": "da16800edc4d49f70481c124d487f544c2fa8ce7",
                "size": 2097152
              },
              {
                "crc32": "309a196a",
                "name": "develop.ic27",
                "sha1": "409b50371feb648f10efd6b7ac420bf08d9a3b5a",
                "size": 2097152
              },
              {
                "crc32": "58e17c23",
                "name": "zukinver0930.ic25",
                "sha1": "19330f906accf1b859f56bbcedc2edff73747599",
                "size": 2097152
              },
              {
                "crc32": "cce01f1f",
                "name": "epr-21576h_multi.ic27",
                "sha1": "cca17119ad13e3a4ef7cb6902a37b65d6a844aee",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "d3d57af8",
                "name": "epr-21336a.ic27",
                "sha1": "0eb72c2a20ad8b86d442b77760eab5e89521d469",
                "size": 2097152
              },
              {
                "crc32": "5b28f868",
                "name": "naomi_boot_2491.ic27",
                "sha1": "d101f58c69d9835e87a969688e43dc9b699b89d0",
                "size": 2097152
              },
              {
                "crc32": "46dbe90f",
                "name": "epr-21580a.ic27",
                "sha1": "822b2ea8e254ea3ce66f0ea67e80a8c7e1125ec9",
                "size": 2097152
              },
              {
                "crc32": "7c9fea46",
                "name": "315-6188.ic31",
                "sha1": "f77c07ae65dfed18c1c4c632c8945be21d02ddaf",
                "size": 8244
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10917",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "297ea6ed",
                "name": "epr-23605c.ic27",
                "sha1": "cfbfe57c80e6ee86a101fa83aec0a01e00c0f42a",
                "size": 2097152
              },
              {
                "crc32": "3a3242d4",
                "name": "epr-23605b.ic27",
                "sha1": "aaca4df51ef91d926f8191d372f3dfe1d20d9484",
                "size": 2097152
              },
              {
                "crc32": "7bc3fc2d",
                "name": "epr-23605a.ic27",
                "sha1": "a4a9531a7c66ff30046908cf71f6c7b6fb59c392",
                "size": 2097152
              },
              {
                "crc32": "5731e446",
                "name": "epr-23605.ic27",
                "sha1": "787b0844fc408cf124c12405c095c59948709ea6",
                "size": 2097152
              },
              {
                "crc32": "6ef1dd8e",
                "name": "epr-23608c.ic27",
                "sha1": "25ef957ec1c58fdaff5e89102002bca6c38832c5",
                "size": 2097152
              },
              {
                "crc32": "a554b1e3",
                "name": "epr-23608b.ic27",
                "sha1": "343b727a3619d1c75a9b6d4cc156a9050447f155",
                "size": 2097152
              },
              {
                "crc32": "e8f884d1",
                "name": "epr-23608a.ic27",
                "sha1": "28f4de747bb3cf860b9ebf897322fbc5d7c1e156",
                "size": 2097152
              },
              {
                "crc32": "929cc3a6",
                "name": "epr-23608.ic27",
                "sha1": "47d00c818de23f733a4a33b1bbc72eb8aa729246",
                "size": 2097152
              },
              {
                "crc32": "750e254b",
                "name": "epr-23607c.ic27",
                "sha1": "81d0b1a076c274c6bd7c53b65e7b80e14fe039e1",
                "size": 2097152
              },
              {
                "crc32": "f308c5e9",
                "name": "epr-23607b.ic27",
                "sha1": "5470ab1cee6afecbd8ca8cf40f8fbe4ec2cb1471",
                "size": 2097152
              },
              {
                "crc32": "2b55add2",
                "name": "epr-23607.ic27",
                "sha1": "547de5f97d3183c8cd069c4fa3c09f13d8b637d9",
                "size": 2097152
              },
              {
                "crc32": "99e3751f",
                "name": "epr-23609b.ic27",
                "sha1": "8a244f75595c49d2a37a42ab96b6bab35163ca0e",
                "size": 2097152
              },
              {
                "crc32": "de8e1267",
                "name": "epr-23610b.ic27",
                "sha1": "0b3a36446c308fcbfe3647df45c848091e8797f1",
                "size": 2097152
              },
              {
                "crc32": "353fdbcd",
                "name": "epr-23605c_multi.ic27",
                "sha1": "a8b7dce572b74e02e65cb949b2c366c87625157f",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10922",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10923",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "719b2b0b",
                "name": "bios0.ic23",
                "sha1": "b4c1a26bc8906d5275eb28c701dff2b9365bcdfa",
                "size": 131072
              },
              {
                "crc32": "d3e80a9f",
                "name": "bios1.ic23",
                "sha1": "33024f9d51c04884c2b44ce146f340e7a857b959",
                "size": 131072
              },
              {
                "crc32": "82a105f0",
                "name": "fpr-24363.ic48",
                "sha1": "5128fe2ddcced77332bdcab691c09958051fa564",
                "size": 131072
              }
            ],
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/dc_atomiswave.cpp:1480",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "065f8500",
                "name": "epr-21331.ic27",
                "sha1": "49a3881e8d76f952ef5e887200d77b4a415d47fe",
                "size": 2097152
              },
              {
                "crc32": "9e3bfa1b",
                "name": "epr-21330.ic27",
                "sha1": "b539d38c767b0551b8e7956c1ff795de8bbe2fbc",
                "size": 2097152
              },
              {
                "crc32": "d99e5b9b",
                "name": "epr-21329.ic27",
                "sha1": "453ffb41b6197cac6d12e7814bb1d7281ccf1659",
                "size": 2097152
              },
              {
                "crc32": "bd6ce0ec",
                "name": "epr-21332.ic27",
                "sha1": "3d1ce5cb6978afe57967d8b53bc969259dd64749",
                "size": 2097152
              },
              {
                "crc32": "ea74e967",
                "name": "hotd2biosproto.ic27",
                "sha1": "e4d037480eb6555d335a8ab9cd6c56122335586d",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "hod2bios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10918"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "12ed7c66",
                "name": "epr-21864.ic27",
                "sha1": "046be66e92eae766f3e05594aa837fc8888534ed",
                "size": 2097152
              },
              {
                "crc32": "0615a4d1",
                "name": "epr-21863.ic27",
                "sha1": "2c6986580b84278af75f396229fdd587bebc1768",
                "size": 2097152
              },
              {
                "crc32": "1f630716",
                "name": "epr-21862.ic27",
                "sha1": "8d157809770467c3e7618c6299f3b96b5f10518c",
                "size": 2097152
              },
              {
                "crc32": "05128861",
                "name": "epr-21864p.ic27",
                "sha1": "5bdb320d84015b8429527a8eb4524958031862aa",
                "size": 2097152
              },
              {
                "crc32": "f0cd4aaa",
                "name": "epr-21862p.ic27",
                "sha1": "9a9157992bf7a104c096efcdb8b02ceece186cbb",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355dlx.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10919"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62483677",
                "name": "epr-22851.ic27",
                "sha1": "3e3bcacf5f972c376b569f45307ee7fd0b5031b7",
                "size": 2097152
              },
              {
                "crc32": "28aa539d",
                "name": "epr-22850.ic27",
                "sha1": "14485368656af80504b212da620179c49f84c1a2",
                "size": 2097152
              },
              {
                "crc32": "121e009c",
                "name": "epr-22849.ic27",
                "sha1": "3beb91f660e60590491b209b6be8584b05a90548",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355bios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10920"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a77c6b1c",
                "name": "epr-21802.ic27",
                "sha1": "bd50a6bb8fa9bac121b076e21ea048a83a240a48",
                "size": 2097152
              },
              {
                "crc32": "a21bef24",
                "name": "epr-21801.ic27",
                "sha1": "c6c6ed09772b63a9a84ef0678fc1b7527484038a",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "airlbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10921"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f688ae60",
                "name": "epr-23603.ic8",
                "sha1": "1a31b6b1a4257fcb6ac6a91e67dd798f91505f48",
                "size": 524288
              },
              {
                "crc32": "59ed40f4",
                "name": "epr-20091.ic8",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "d0e0889d",
                "name": "epr-19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "name": "epr-17951a.ic8",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "3e23c81f",
                "name": "epr-17740a.ic8",
                "sha1": "f9b282fd27693e9891843597b2e1823da3d23c7b",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "name": "epr-17740.ic8",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "name": "epr-17954a.ic8",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "name": "epr-17952a.ic8",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "4166c663",
                "name": "epr-17741a.ic8",
                "sha1": "cc41d30de06160083d77e0dc5d69e61fec7fdcb5",
                "size": 524288
              },
              {
                "crc32": "e09d1f60",
                "name": "epr-19854.ic8",
                "sha1": "b55cdcb45b2a5b0b35e352cf7625f0bd659084df",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "name": "epr-17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "02daf123",
                "name": "epr-17742a.ic8",
                "sha1": "23185beb1ce9c09b8719e57d1adb7b28c8141fd5",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              },
              {
                "crc32": "15432ae2",
                "name": "stvbios.nv",
                "sha1": "7d9364d546f3d3f839ec36be148076f8d26a65a6",
                "size": 128
              }
            ],
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/stv.cpp:3949",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "10dd9b76",
                "description": "6.0.0010 alternate version",
                "name": "6.0.0010a.bin",
                "sha1": "1fdf1f921bc395846a7c3180fbdbc4ca287a9670",
                "size": 1048576
              },
              {
                "crc32": "5ffdfbf8",
                "description": "6.0.0009",
                "name": "6.0.0009.bin",
                "sha1": "605bc4967b749b4e6d13fc2ebb845ba956a259a7",
                "size": 1048576
              },
              {
                "crc32": "ea2bf888",
                "description": "6.0.0010",
                "name": "6.0.0010.bin",
                "sha1": "c9c5b6f0d4f4f36620939b15dd2f128a74347e37",
                "size": 1048576
              },
              {
                "crc32": "c3b021a4",
                "name": "fpr-24370b.ic6",
                "sha1": "1b6938a50fe0e4ae813864649eb103838c399ac0",
                "size": 4194304
              },
              {
                "crc32": "f78d14d7",
                "name": "vid_bios.u504",
                "sha1": "f129787e487984edd23bf344f2e9500c85052275",
                "size": 65536
              }
            ],
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/lindbergh.cpp:639",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ca7df0de",
                "name": "epr-24236a.ic50",
                "sha1": "504c74d5fc96c53ef9f7753e9e37fb8b39cb628c",
                "size": 2097152
              },
              {
                "crc32": "25f2ef00",
                "name": "epr-24328.ic50",
                "sha1": "e58dec9f171e52b3ded213b3fcd9a0de8a438076",
                "size": 2097152
              },
              {
                "crc32": "03ec3805",
                "name": "epr-24328a.ic50",
                "sha1": "a8fbaea826ca257be0b2b86952f247254929e046",
                "size": 2097152
              },
              {
                "crc32": "e1e3c009",
                "name": "mb_serial.ic57",
                "sha1": "66bc636c527389c3338f631d78c788b4bd4e93be",
                "size": 128
              },
              {
                "crc32": "77cc5a6c",
                "name": "net_eeprom.ic74s",
                "sha1": "cbfba546256b70bce6c6fd0030d7e2e410a25526",
                "size": 512
              },
              {
                "crc32": "a738ea1c",
                "name": "net_firm_119.ic72",
                "sha1": "d25187a973a7e166e70334f964363adf2be87257",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24208a.ic72",
                "sha1": "3c32ddfb3c40be66b9fb2ba35fbfd5b534bb3da0",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24329.ic72",
                "sha1": "d0d062a4089a2d3404df45eb015faaf7eee9b8c2",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407.ic72",
                "sha1": "fbcc3d119b47a6da4d194e3fe4a98126c7049edf",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407_123.ic72",
                "sha1": "3f5a2fb03bbb1bd9af9fe32ad76a224c97aa9b7a",
                "size": 2097152
              },
              {
                "crc32": "4186d7ab",
                "name": "mb_eeprom_us.ic54s",
                "sha1": "fc23da69a511a7643b6a066161bcfc3cdeeacf04",
                "size": 128
              },
              {
                "crc32": "947ddfad",
                "name": "mb_eeprom_exp.ic54s",
                "sha1": "832a3db097af680d1d0eb9451b4650565f0cf8c7",
                "size": 128
              }
            ],
            "name": "segasp.zip",
            "required": true,
            "source_ref": "src/mame/sega/segasp.cpp:1273"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2aa906a7",
                "name": "epr-23400a.ic94",
                "sha1": "098c9909b123ed6c338ac874f2ee90e3b2da4c02",
                "size": 2097152
              },
              {
                "crc32": "3d557104",
                "name": "epr-23400.ic94",
                "sha1": "d39879f5a1acbd54ad8ee4fbd412f870c9ff4aa5",
                "size": 2097152
              },
              {
                "crc32": "d96298b6",
                "name": "epr-21904.ic94",
                "sha1": "d10d837bc7d68eb7125c34beffe21a91305627b0",
                "size": 2097152
              },
              {
                "crc32": "7cbf2fb6",
                "name": "prot_bot.ic94",
                "sha1": "7384e3c9314add7d61f93c9edd9fb7788d08f423",
                "size": 2097152
              },
              {
                "crc32": "737dc714",
                "name": "93c46.ic115",
                "sha1": "852a90319ac2e787b94a4fc769424b79afbaaf9d",
                "size": 128
              },
              {
                "bad_dump": true,
                "crc32": "194c6c18",
                "name": "x76f100.ic85",
                "sha1": "6c2de7dae32bef855d9bc556568c3a170f54caa5",
                "size": 132
              }
            ],
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/sega/hikaru.cpp:1482",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "66232714",
                "name": "chihiro_xbox_bios.bin",
                "sha1": "b700b0041af8f84835e45d1d1250247bf7077188",
                "size": 524288
              },
              {
                "crc32": "13034372",
                "name": "fpr-23887_29lv160te.ic4",
                "sha1": "77197fba2781ed1d81402c48bd743adb26d3161a",
                "size": 2097152
              },
              {
                "crc32": "a4fcab0b",
                "name": "fpr21042_m29w160et.bin",
                "sha1": "a13cf9c5cdfe8605d82150b7573652f419b30197",
                "size": 2097152
              },
              {
                "crc32": "488624ea",
                "name": "315-6351a_epc1pc8.ic2",
                "sha1": "1a607337a186415ae90b48934ce2aae81639d4de",
                "size": 130817
              },
              {
                "crc32": "cfc5e06f",
                "name": "ic10_g24lc64.bin",
                "sha1": "3ababd4334d8d57abb22dd98bd2d347df39648d9",
                "size": 8192
              },
              {
                "crc32": "8dc8374e",
                "name": "ic11_24lc024.bin",
                "sha1": "cc03a0650bfac4bf6cb66e414bbef121cba53efe",
                "size": 128
              },
              {
                "crc32": "7742ab62",
                "name": "pc20_g24lc64.bin",
                "sha1": "82dad6e2a75bab4a4840dc6939462f1fb9b95101",
                "size": 8192
              }
            ],
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/sega/chihiro.cpp:2614",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d1883221",
                "name": "triforce_bootrom.bin",
                "sha1": "c3cb7227e4dbc2af861e76d00cb59726105a2e4c",
                "size": 2097152
              }
            ],
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/sega/triforce.cpp:1308",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ea8901d9",
                "name": "epr10894a.20",
                "sha1": "43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c",
                "size": 16384
              }
            ],
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/sega/shtzone.cpp:378"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c3c74dc5",
                "description": "IPL Ver. 5.0",
                "name": "vm1211l01.u2",
                "sha1": "07352e6dba7514214e778ba39e1ca773e4698858",
                "size": 524288
              },
              {
                "crc32": "c8c6d25f",
                "description": "IPL Ver. 4.0",
                "name": "mt201l04.u012",
                "sha1": "5be39fa72b65f2e455ccc146dbab58d24ab46505",
                "size": 524288
              },
              {
                "crc32": "21b2ccbd",
                "description": "IPL Ver. 1.0",
                "name": "vm1201l01.u012",
                "sha1": "c3ceea196e5c1c6a9e03cf3a22e9f25f0099a38e",
                "size": 524288
              }
            ],
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/sigma/sammymdl.cpp:1027"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              },
              {
                "bad_dump": true,
                "crc32": "d8289e31",
                "name": "315-5661.ic7",
                "sha1": "a0e9134d9e8043a3660a2ce122cfd5d7f76773b9",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "fd5c4fb3",
                "name": "315-5653.ic56",
                "sha1": "6b2ba657836f3031d77602526416200e31d41a6e",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "55c6cddb",
                "name": "315-5651.ic8",
                "sha1": "e1a968305ca7ea17e9021b31506ca087b84a8ab1",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "825ea316",
                "name": "315-5349a.ic54",
                "sha1": "f49edb6a3f9349330f7ff525ef60517ed276a663",
                "size": 260
              },
              {
                "bad_dump": true,
                "crc32": "4a2d27d1",
                "name": "315-5655.ic34",
                "sha1": "ba79183e4b522d1b57a46a56fc7d9b85de24df36",
                "size": 260
              }
            ],
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/sega/megaplay.cpp:1016",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "description": "Ver 1",
                "name": "epr-12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              },
              {
                "crc32": "07c3f423",
                "description": "Ver 0 Rev A",
                "name": "epr-12263a.20",
                "sha1": "50c28bbc2d4349c820d988ae3f20aae3f808545f",
                "size": 32768
              },
              {
                "crc32": "ca26c87a",
                "description": "Ver 0 Rev B",
                "name": "epr-12263b.20",
                "sha1": "987a18bede6e54cd73c4434426eb6c302a37cdc5",
                "size": 32768
              },
              {
                "crc32": "884e4aa5",
                "description": "Ver 0 Rev B (alt?)",
                "name": "epr-12604a.20",
                "sha1": "c9008c431a937c084fb475273093ca0b434b5f47",
                "size": 32768
              }
            ],
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/sega/megatech.cpp:1442",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2292585c",
                "name": "ism2006v00.u1",
                "sha1": "97ba0e0f0be832a5114d95151e519bc027f6675b",
                "size": 131072
              }
            ],
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/sega/segas16b_isgsm.cpp:608"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b19f490",
                "name": "system_y2_m25p40.u801",
                "sha1": "b6a0482926d02fb5bb9a2c05ffdba6a2347fe658",
                "size": 524288
              }
            ],
            "name": "systemy2.zip",
            "required": true,
            "source_ref": "src/mame/sega/y2.cpp:141"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3d33ac34",
                "name": "v0a-.7e",
                "sha1": "909d59e7a993affd10224402b4370e82a5f5545c",
                "size": 4096
              },
              {
                "crc32": "23d929b7",
                "name": "v0b-.7e",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "9f505709",
                "name": "v0c-.7e",
                "sha1": "a9c661ba5a0d3fa5e935fb9c10fa63e2d9809981",
                "size": 4096
              },
              {
                "crc32": "1e0c22b1",
                "name": "v0d-.7e",
                "sha1": "5fec8fef500bbebc13d0173406afc55235d3affb",
                "size": 4096
              },
              {
                "crc32": "2541e34b",
                "name": "dsp-3_p0-a.m9",
                "sha1": "4f983513dbae1350c83a433dea77a4465748b9c6",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b67a91d9",
                "name": "dsp-3_p0-b.m9",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "c76c4057",
                "name": "dsp-3_p0-c.m9",
                "sha1": "4093d4ac44feff595e34f361ed1ed84113c9225e",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "4b7d72bc",
                "name": "dsp-3_p0-d.m9",
                "sha1": "a70c5ba88404dafee2cc717071c4a249f67ab645",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "a6df18fd",
                "name": "cassmcu.1c",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              }
            ],
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/dataeast/decocass.cpp:2131",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "name": "pch1-c__8t_e-2.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "123ffa37",
                "name": "pch1-c_8te.8t",
                "sha1": "3bef754a5a85a8498bb6222ddf5cb9021f264db5",
                "size": 16384
              },
              {
                "crc32": "0be8ceb4",
                "name": "pck1-c_fix.8t",
                "sha1": "45b127a537370226e6b30be2b5a92ad05673ca7f",
                "size": 16384
              },
              {
                "crc32": "88a8f87e",
                "name": "pch1-c__8t_e-1.8t",
                "sha1": "d1d7ffe68d2e7aa2faf8ad41a7ec8421265ede42",
                "size": 16384
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "83ebc7a3",
                "name": "pch1-c_8m.8m",
                "sha1": "a7c607138f4f9b96ab5d3a82c47895f77672e296",
                "size": 8192
              },
              {
                "crc32": "90e1b80c",
                "name": "pch1-c_8p-8p",
                "sha1": "c4f4b135b2a11743518aaa0554c365b4a8cf299a",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "name": "pch1-c-6f.82s129an.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "name": "pch1-c-6e.82s129an.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "name": "pch1-c-6d.82s129an.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              },
              {
                "crc32": "48de65dc",
                "name": "rp2c0x.pal",
                "sha1": "d10acafc8da9ff479c270ec01180cca61efe62f5",
                "size": 192
              }
            ],
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/playch10.cpp:2982",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e06cb58f",
                "description": "Nintendo Super System (Single Cart BIOS)",
                "name": "nss-ic14.02.ic14",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              },
              {
                "crc32": "a8e202b3",
                "description": "Nintendo Super System (Multi Cart BIOS)",
                "name": "nss-c.ic14",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "ac385b53",
                "description": "Nintendo Super System (Single Cart BIOS v3, hack?)",
                "name": "nss-v3.ic14",
                "sha1": "e3942f9d508c3c8074c3c3941376c37ca68b8e54",
                "size": 32768
              }
            ],
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/nss.cpp:1099",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e31b5580",
                "description": "SFCBox BIOS Version 2.00",
                "name": "krom2.00.ic1",
                "sha1": "4a6a34a9a94c8249c3b441c2516bdd03e198c458",
                "size": 131072
              },
              {
                "crc32": "c9010002",
                "description": "SFCBox BIOS Version 1.00",
                "name": "krom1.ic1",
                "sha1": "f4c74086a83b728b1c1af3a021a60efa80eff5a4",
                "size": 65536
              },
              {
                "crc32": "ad3ec05c",
                "name": "atrom-4s-0.rom5",
                "sha1": "a3d336db585fe02a37c323422d9db6a33fd489a6",
                "size": 524288
              }
            ],
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/sfcbox.cpp:586",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ec82be9",
                "name": "pifdata.bin",
                "sha1": "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd",
                "size": 2048
              },
              {
                "crc32": "e7f2a005",
                "name": "normpnt.rom",
                "sha1": "c27b4a364a24daeee6e99fd286753fd6216362b4",
                "size": 128
              },
              {
                "crc32": "4f2ae525",
                "name": "normslp.rom",
                "sha1": "eab43f8cc52c8551d9cff6fced18ef80eaba6f05",
                "size": 128
              }
            ],
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/aleck64.cpp:1417"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "description": "Magnavox CD-i 200",
                "name": "cdi200.rom",
                "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "description": "Philips CD-i 220 F2",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "688cda63",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              }
            ],
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/philips/cdi.cpp:922",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d3837ae4",
                "name": "391640-03.u6a",
                "sha1": "06807db3181637455f4d46582d9972afec8956d9",
                "size": 1048576
              }
            ],
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/amiga/cubo.cpp:1435",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b2e41a2",
                "name": "r27v1602f.7d",
                "sha1": "f0a74bbcaf801f3fd0b7002ebd0118564aae3528",
                "size": 2097152
              }
            ],
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1716",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b2a8eeb6",
                "name": "r27v1602f.8g",
                "sha1": "bc4fb4e1e53adbd92385f1726bd69663ff870f1e",
                "size": 2097152
              }
            ],
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1761",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "11812ef8",
                "description": "Standard",
                "name": "700a01.22g",
                "sha1": "e1284add4aaddd5337bd7f4e27614460d52b5b48",
                "size": 524288
              },
              {
                "crc32": "39ebb0ca",
                "description": "Found on Gacha Gachamp",
                "name": "700a01,gchgchmp.22g",
                "sha1": "9aab8c637dd2be84d79007e52f108abe92bf29dd",
                "size": 524288
              },
              {
                "crc32": "6cf852af",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "700b01.22g",
                "sha1": "a2421d0a494892c0e71003c96995ce8f945064dd",
                "size": 524288
              },
              {
                "crc32": "131e0359",
                "description": "Standard",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "131e0359",
                "description": "Found on Gacha Gachamp",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "508b057d",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "h8b01.bin",
                "sha1": "779177e6312ef272483eeb64a5e84bbae6e301f2",
                "size": 64
              }
            ],
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/konami/ksys573.cpp:6470",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigx.cpp:4193"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigv.cpp:1444",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "233e5159",
                "name": "941b01.u25",
                "sha1": "66ff268d5bf78fbfa48cdc3e1b08f8956cfd6cfb",
                "size": 262144
              },
              {
                "crc32": "df6f88d6",
                "name": "941a01.u25",
                "sha1": "2bc10e4fbec36573aa8b6878492d37665f074d87",
                "size": 262144
              },
              {
                "crc32": "f1511505",
                "name": "ds2430.u3",
                "sha1": "ed7cd9b2763b3e377df9663943160f9871f65105",
                "size": 40
              }
            ],
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/konami/viper.cpp:3269"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "81498f73",
                "name": "863a03.7b",
                "sha1": "3599b40a5872eab3a00d345287635355fcb25a71",
                "size": 524288
              },
              {
                "crc32": "6f42a09e",
                "name": "863a05.2x",
                "sha1": "cab5209f90f47b9ee6e721479913ad74e3ba84b1",
                "size": 524288
              }
            ],
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/konami/twinkle.cpp:1360",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f0774fc2",
                "name": "boot.bin",
                "sha1": "84fade54e025f170d983200a86c1ed96ef1a9ed3",
                "size": 480
              },
              {
                "crc32": "85c2afc5",
                "name": "400b03.8g",
                "sha1": "387842d02d50d0d78a27270e7267af19555b9e63",
                "size": 8192
              },
              {
                "crc32": "5827b1e8",
                "name": "400a1.2b",
                "sha1": "fa8cf5f868cfb08bce203baaebb6c4055ee2a000",
                "size": 256
              },
              {
                "crc32": "2f44f970",
                "name": "400a2.1b",
                "sha1": "7ab46f9d5d587665782cefc623b8de0124a6d38a",
                "size": 256
              }
            ],
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/konami/nemesis.cpp:3269"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "36122a98",
                "name": "2v02s502_ifu.u190",
                "sha1": "3d2c40c9d504358d890364e26c9562e40314d8a4",
                "size": 524288
              }
            ],
            "name": "konendev.zip",
            "required": true,
            "source_ref": "src/mame/konami/konendev.cpp:909"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "98de405e",
                "name": "b22a01.u42",
                "sha1": "4bc268a996825c1bdf6ae277d331fe7bdc0cc00c",
                "size": 524288
              }
            ],
            "name": "kpython.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython.cpp:376"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "79d60546",
                "name": "ps2-0190j-20030822.bin",
                "sha1": "0ea98a25a32145dda514de2f0d4bfbbd806bd00c",
                "size": 4194304
              }
            ],
            "name": "kpython2.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython2.cpp:1918"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "description": "japan",
                "name": "m534002c-13.ic353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              },
              {
                "crc32": "f20f7fe5",
                "description": "english (debug)",
                "name": "msm27c402zb.ic353",
                "sha1": "9aac7d3b3d0cc0bbbe4056164b73078dce41d91c",
                "size": 524288
              },
              {
                "crc32": "bb7ba033",
                "name": "cp01.ic652",
                "sha1": "966f3aee5d00e1312c455f855915d621e6cb0672",
                "size": 8
              }
            ],
            "name": "coh1000c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5967",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "m534002c-59.ic353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              },
              {
                "crc32": "7808fcef",
                "name": "cp10.ic652",
                "sha1": "3c3fb8227b05dace042dc1429b9f2355b1a15638",
                "size": 8
              }
            ],
            "name": "coh3002c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6053",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              }
            ],
            "name": "coh1000t.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5987"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "m534002c-15.ic353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              },
              {
                "crc32": "c425eaf5",
                "name": "ac01.ic652",
                "sha1": "decf77ab50f7f58c641c3214a11647924f3a8998",
                "size": 8
              }
            ],
            "name": "coh1000a.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6013"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "msm27c402zb.ic353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              },
              {
                "crc32": "1cac067e",
                "name": "tw01.ic652",
                "sha1": "8e87941bfb374172628c8a37647e3a66b7166aa8",
                "size": 8
              }
            ],
            "name": "coh1000w.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6022"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "m534002c-17.ic353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              },
              {
                "crc32": "181668b3",
                "name": "at01.ic652",
                "sha1": "8d2fe1facb4473cc20b4b477aaf881f9280939cf",
                "size": 8
              }
            ],
            "name": "coh1001l.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6026"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ff165f3",
                "name": "coh-1002v.ic353",
                "sha1": "8f59314c1093446b9bcb06d232244da6df78e206",
                "size": 524288
              },
              {
                "crc32": "1ce271df",
                "name": "kn01.ic652",
                "sha1": "b01479dc75a4a8a86bee7ac7cd10af2bda332544",
                "size": 8
              }
            ],
            "name": "coh1002v.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6030"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "m27c402cz-54.ic353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              },
              {
                "crc32": "a7dd922e",
                "name": "et01.ic652",
                "sha1": "1069c1d9015028a51a1b314cfacb014ea90aa425",
                "size": 8
              }
            ],
            "name": "coh1002e.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6036"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "m534002c-61.ic353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              },
              {
                "crc32": "50dc8322",
                "name": "mg01.ic652",
                "sha1": "cef4011c6c06d6fce546e1db5d9fbae155eabf57",
                "size": 8
              }
            ],
            "name": "coh1002m.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6087"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "03967fa7",
                "name": "m534002c-60.ic353",
                "sha1": "0e17fec2286e4e25deb23d40e41ce0986f373d49",
                "size": 524288
              },
              {
                "crc32": "235510b1",
                "name": "tt10.ic652",
                "sha1": "2cc02113207a8f0b078152d31ce6503411750e70",
                "size": 8
              },
              {
                "crc32": "6bb167b3",
                "name": "tt16.u17",
                "sha1": "9dcba08f10775a9adf2b1f382c947460edd3d239",
                "size": 8
              },
              {
                "crc32": "c48c8236",
                "name": "flash.u30",
                "sha1": "c6dad60266ce2ff635696bc0d91903c543273559",
                "size": 2097152
              },
              {
                "crc32": "cd15cc30",
                "description": "G NET BIOS v1 flasher",
                "name": "f35-01_m27c800_v1.bin",
                "sha1": "78361f46fa7186d5058937c86c66247a86b1257f",
                "size": 1048576
              },
              {
                "crc32": "6225ec11",
                "description": "G NET BIOS v2 flasher",
                "name": "f35-01_m27c800.bin",
                "sha1": "047852d456b6ff85f8e640887caa03cf3e63ffad",
                "size": 1048576
              },
              {
                "crc32": "6367aedf",
                "description": "MB2009",
                "name": "f35-01_m27c800_modbios_mb-2009_dump_by_aje_fr.bin",
                "sha1": "8400775e0c974c8b017e26ef9339144cad457c63",
                "size": 1048576
              },
              {
                "crc32": "f98ae118",
                "description": "MB2011",
                "name": "f35-01_m27c800_modbios_mb-2011.bin",
                "sha1": "c6918dfbb6fcf686dde4b731e84f740177ab31f0",
                "size": 1048576
              }
            ],
            "name": "coh3002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1349"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              },
              {
                "crc32": "2989b6eb",
                "name": "tt99.u17",
                "sha1": "89981ec68d30729c27d31f820cbfd0c23ed14a03",
                "size": 8
              },
              {
                "crc32": "9100dbf2",
                "name": "flash.u30",
                "sha1": "9ce888bd2a7e575c8ca71d978cb85de22afb5660",
                "size": 2097152
              }
            ],
            "name": "coh1002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1350"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6ad9b006",
                "name": "e68-05-1.ic6",
                "sha1": "f05a0ae26b6abaeda9c7944aee96c72b08fff7a5",
                "size": 524288
              },
              {
                "crc32": "c7c2dc6b",
                "name": "e68-04-1.ic5",
                "sha1": "bf88c818166c285130c5c73d6982f009da26e143",
                "size": 524288
              }
            ],
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/taito/taitotz.cpp:3014"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "name": "sknse2.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              },
              {
                "crc32": "b8d3190c",
                "name": "supernova_modbios-japan.u10",
                "sha1": "62c9a4a075fd944e89fe95c6b46046101eb6de1c",
                "size": 524288
              },
              {
                "crc32": "1d90517c",
                "name": "supernova-modbios-korea.u10",
                "sha1": "463962ffe19880135f0d95a7beda79e27448e872",
                "size": 524288
              }
            ],
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/kaneko/suprnova.cpp:2133",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "note": "no ROM entries in the set",
            "required": false,
            "source_ref": "src/mame/seta/macs.cpp:776"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "name": "am_macs_os_low.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "name": "am_macs_os_hi.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              },
              {
                "crc32": "669096c1",
                "name": "sx011-01.bin",
                "sha1": "36f55a2e4865bdf0506746a4df51bfb1944f905e",
                "size": 343
              }
            ],
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:775"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "58242cee",
                "description": "Panasonic FZ-10 R.E.A.L. 3DO Interactive Multiplayer",
                "name": "panafz10.bin",
                "sha1": "3c912300775d1ad730dc35757e279c274c0acaad",
                "size": 1048576
              },
              {
                "crc32": "b6f5028b",
                "description": "Goldstar 3DO Interactive Multiplayer v1.01m",
                "name": "goldstar.bin",
                "sha1": "c4a2e5336f77fb5f743de1eea2cda43675ee2de7",
                "size": 1048576
              },
              {
                "crc32": "c8c8ff89",
                "description": "Panasonic FZ-1 R.E.A.L. 3DO Interactive Multiplayer",
                "name": "panafz1.bin",
                "sha1": "34bf189111295f74d7b7dfc1f304d98b8d36325a",
                "size": 1048576
              },
              {
                "crc32": "d5cbc509",
                "description": "Sanyo TRY 3DO Interactive Multiplayer",
                "name": "sanyotry.bin",
                "sha1": "b01c53da256dde43ffec4ad3fc3adfa8d635e943",
                "size": 1048576
              }
            ],
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:565",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b832da9a",
                "name": "saot_rom2.bin",
                "sha1": "520d3d1b5897800af47f92efd2444a26b7a7dead",
                "size": 524288
              }
            ],
            "name": "alg3do.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "ab5948d6",
                "name": "bios_us.bin",
                "sha1": "f8b940c1ae5ce2d3b2cd0c9bfaf6e5b063cec06e",
                "size": 524288
              },
              {
                "crc32": "bbf07ec6",
                "name": "bios_export.bin",
                "sha1": "5656aa077f6a6d43953f15b5123eea102a9d5313",
                "size": 524288
              },
              {
                "crc32": "ac953e2e",
                "name": "bios_korea.bin",
                "sha1": "f502188ef252b7c9d04934c4b525730a116de48b",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              },
              {
                "crc32": "b70df21f",
                "name": "tmp87ph40an.bin",
                "sha1": "5b742e8a0bbf4c0ae4f4398d34c7058fb24acc92",
                "size": 32768
              },
              {
                "crc32": "78b7020d",
                "name": "lvs-ioj-br9020f.u2",
                "sha1": "2b8549532ef5e1e8102dbe71af55fdfb27ccbba6",
                "size": 256
              },
              {
                "crc32": "af9f4287",
                "name": "lvs-igx-br9020f.u3",
                "sha1": "6df0e35c77dbfee2fab7ff490dcd651db420e367",
                "size": 256
              },
              {
                "crc32": "dabec5d2",
                "name": "lvs-jam-br9020f.u3",
                "sha1": "19c5be89c57387d6ea563b3dc55674d0692af98e",
                "size": 256
              }
            ],
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/snk/hng64.cpp:3241",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "name": "315093-01.u2",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "name": "scpa_01-hi_v3.0.u12",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "name": "scpa_01-lo_v3.0.u16",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "79450b4b",
                "name": "scpa_01-hi_v2.20.u12",
                "sha1": "a1e508a89fc62e1c4994064f2786f491b1dc8bc6",
                "size": 65536
              },
              {
                "crc32": "d2825511",
                "name": "scpa_01-lo_v2.20.u16",
                "sha1": "747a37c6073224472bf261ae376ac9abfbe07554",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "name": "scpa_01-hi_v2.11.u12",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "name": "scpa_01-lo_v2.11.u16",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              },
              {
                "crc32": "0b486a85",
                "name": "gcp_v311_1-hi.u16",
                "sha1": "b406f1db5abf28d9072b7940989ffd176aeee5cb",
                "size": 65536
              },
              {
                "crc32": "80e8e863",
                "name": "gcp_v311_1-lo.u11",
                "sha1": "ab04dfcda7544f4ed9b67771cd8aefe0300c6d4b",
                "size": 65536
              },
              {
                "crc32": "d20a4d7f",
                "name": "gcp_v311_2-hi.u17",
                "sha1": "1dc0a79efa946333149f68ddac046fd44b5f2abe",
                "size": 65536
              },
              {
                "crc32": "5bf4c74c",
                "name": "gcp_v311_2-lo.u12",
                "sha1": "1f7b17170accdf9e448c1a5d8bc430aa2d1d931b",
                "size": 65536
              },
              {
                "crc32": "69295167",
                "name": "gcp_v400_1-hi.u16",
                "sha1": "855f53abbb9dc15e5518e16c5c2dfe4134d07306",
                "size": 65536
              },
              {
                "crc32": "504c2171",
                "name": "gcp_v400_1-lo.u11",
                "sha1": "a93367f520afb86c97c0a191714b72823c95cdd2",
                "size": 65536
              },
              {
                "crc32": "13fb4e2d",
                "name": "gcp_v400_2-hi.u17",
                "sha1": "3eef07aecc3a201ae0b20634c7fd0c87c89fd7f1",
                "size": 65536
              },
              {
                "crc32": "a5cc4515",
                "name": "gcp_v400_2-lo.u12",
                "sha1": "80070521476e92323a6baa6e55928ca5b751a332",
                "size": 65536
              }
            ],
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/arsystems.cpp:1011"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c4f0f55f",
                "description": "Kickstart 1.3 (34.5)",
                "name": "315093-02.u2",
                "sha1": "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
                "size": 262144
              }
            ],
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/alg.cpp:923"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "88d0be26",
                "name": "136032.205.l13",
                "sha1": "d124045eccc562ff0423b23a240e27ad740fa0c9",
                "size": 16384
              },
              {
                "crc32": "3c79ef05",
                "name": "136032.206.l12",
                "sha1": "20fdca7131478e1ee12691bdafd2d5bb74cbd16f",
                "size": 16384
              },
              {
                "crc32": "79021d3c",
                "name": "136032.105.l13",
                "sha1": "85febd34bcb166fc3326b5e5e4e80e157b660a08",
                "size": 16384
              },
              {
                "crc32": "76ee86c4",
                "name": "136032.106.l12",
                "sha1": "cbcd424510435a04e9041967a13781fd19b0f2c4",
                "size": 16384
              },
              {
                "crc32": "195c54ad",
                "name": "136032.114.j11",
                "sha1": "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7",
                "size": 16384
              },
              {
                "crc32": "7275b4dc",
                "name": "136032.115.j10",
                "sha1": "0896ab37ea832a1335046353612c1b4c86d8d040",
                "size": 16384
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.107.b2",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              }
            ],
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/atari/atarisy1.cpp:2669"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/atari/maxaflex.cpp:450"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "description": "AMG0110B PCB",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              },
              {
                "crc32": "1e8175c8",
                "description": "AMG0110D PCB",
                "name": "mx27l1000-alt.u14",
                "sha1": "f60c016be2ff11e47b2192acddb92676043af501",
                "size": 131072
              }
            ],
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/misc/crystal.cpp:847"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e8e8dc75",
                "name": "setchip v4.04.09.u7",
                "sha1": "201fe95256459ce34fdb6f7498135ab5016d07f3",
                "size": 524288
              },
              {
                "crc32": "ff7a9035",
                "name": "setchip v4.04.09.u11",
                "sha1": "4352c4336e61947c555fdc80c61f944076f64b64",
                "size": 524288
              },
              {
                "crc32": "e8e8dc75",
                "name": "clear_mk5_u_7_ck_eb68.u7",
                "sha1": "201fe95256459ce34fdb6f7498135ab5016d07f3",
                "size": 524288
              },
              {
                "crc32": "4cf70173",
                "name": "clear_mk5_u_11_ck_3a6f.u11",
                "sha1": "f3dda0f188c035a36954048b449b9b96787709f2",
                "size": 524288
              },
              {
                "crc32": "7c4b7fe4",
                "name": "setchip v4.04.08.u7",
                "sha1": "39dd39c794c0cb6abc1b7503650643a8131468d1",
                "size": 524288
              },
              {
                "crc32": "d3234a28",
                "name": "setchip v4.04.08.u11",
                "sha1": "8ff112ee4aadf1d359ca8ffe0cfa9c7400aa0595",
                "size": 524288
              },
              {
                "crc32": "e7b39a73",
                "name": "setchip v4.04.05.u7",
                "sha1": "e826d717a0871383394e15634896fcb2e2bdeb75",
                "size": 524288
              },
              {
                "crc32": "2fc9b2a0",
                "name": "setchip v4.04.05.u11",
                "sha1": "89191f02c4ec8089e26989430806650d14e13e5a",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "1d564c2c",
                "name": "setchip v4.04.01 cs 1358.u7",
                "sha1": "2e47917138c682393a61676da6fccba90463229a",
                "size": 524288
              },
              {
                "crc32": "199bacff",
                "name": "setchip v4.04.01 cs ed54.u11",
                "sha1": "a2ef556b42d505af077a2db983caebdd611d98fd",
                "size": 524288
              },
              {
                "crc32": "2453137e",
                "name": "setchip v4.04.00.u7",
                "sha1": "b59998e75ae3924da16faf47b9cfe9afd60d810c",
                "size": 524288
              },
              {
                "crc32": "82dfa12a",
                "name": "setchip v4.04.00.u11",
                "sha1": "86fd0f0ad8d5d1bc503392a40bbcdadb055b2765",
                "size": 524288
              },
              {
                "crc32": "5cf56036",
                "name": "setchip v4.03.07.u7",
                "sha1": "ff11deb6f76627f4fb5a7ec789e4071887e3eae9",
                "size": 524288
              },
              {
                "crc32": "637de9b9",
                "name": "setchip v4.03.07.u11",
                "sha1": "4b5c974fd4c1d1a21f83bdc03d8bc5013d4a40ea",
                "size": 524288
              },
              {
                "crc32": "5a254b22",
                "name": "setchip v4.02.04.u7",
                "sha1": "8444f237b392df2a3cb42ea349e7af32f47dd544",
                "size": 524288
              },
              {
                "crc32": "def36617",
                "name": "setchip v4.02.04.u11",
                "sha1": "c7ba5b08e884a8fb36c9fb51c08e243e32c81f89",
                "size": 524288
              },
              {
                "crc32": "41275334",
                "name": "setchip v4.02.04_alt.u7",
                "sha1": "d4a63dbc77c2c44f6a9c72b389bd270f2137997f",
                "size": 524288
              },
              {
                "crc32": "254e8b03",
                "name": "setchip v4.02.04_alt.u11",
                "sha1": "0ed9723258d3f86b21bf132cbe2fd0bae978cd5e",
                "size": 524288
              },
              {
                "crc32": "16c2828d",
                "name": "setchip v1.0.u7",
                "sha1": "87218a76bb2791bce27b4b8ab341ba73cbbf6ffe",
                "size": 524288
              },
              {
                "crc32": "a969f12b",
                "name": "setchip v1.0.u11",
                "sha1": "fc6d234ce1f5c6b5aceb97b73aad60144352023b",
                "size": 524288
              },
              {
                "crc32": "1f269234",
                "name": "a562837.u36",
                "sha1": "29940dd50fb55c632935f62ff44ca724379c7a43",
                "size": 343
              },
              {
                "crc32": "f2f3c40a",
                "name": "a562838.u65",
                "sha1": "b795dfa5cc4e8127c3f3a0906664910d1325ec92",
                "size": 343
              },
              {
                "crc32": "941d4cdb",
                "name": "a562840.u22",
                "sha1": "1ca091fba69e92f262dbb3d40f515703c8981793",
                "size": 343
              }
            ],
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/acorn/aristmk5.cpp:2631"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e97afedf",
                "name": "24013001_right.u83",
                "sha1": "10ca3b015afaff5d7812f0f5207b2535602136a5",
                "size": 2097152
              },
              {
                "crc32": "06ae7e07",
                "name": "24013001_left.u70",
                "sha1": "39a45575b66906d73b519988d1001c99b05c5f34",
                "size": 2097152
              },
              {
                "crc32": "757618f2",
                "name": "21012901_right.u83",
                "sha1": "43f9a3e7d544979f8c6974945914d9e099b02abd",
                "size": 2097152
              },
              {
                "crc32": "0d271470",
                "name": "21012901_left.u70",
                "sha1": "5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479",
                "size": 2097152
              },
              {
                "crc32": "5b20a96c",
                "name": "19012801_right.u83",
                "sha1": "5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926",
                "size": 2097152
              },
              {
                "crc32": "b03bd17c",
                "name": "19012801_left.u70",
                "sha1": "f281e80f6dda5b727ed71d2deebe3b0ff548773f",
                "size": 2097152
              },
              {
                "crc32": "e627dbfa",
                "name": "13012001_right.u83",
                "sha1": "4fedbe0975ceb7dc0ebebf18a7708d78984db9b7",
                "size": 2097152
              },
              {
                "crc32": "38e8f659",
                "name": "13012001_left.u70",
                "sha1": "88c6acba99b0aca023c6f4d27c061c231490e9e0",
                "size": 2097152
              },
              {
                "crc32": "73dcb11c",
                "name": "11011901_right.u83",
                "sha1": "69ae4f32a0c9141b2a82ff3935b0cd20333d2964",
                "size": 2097152
              },
              {
                "crc32": "d3dd2210",
                "name": "11011901_left.u70",
                "sha1": "3548f8cc39859d3f44a55f6bae48966a2d48e0eb",
                "size": 2097152
              },
              {
                "crc32": "de4c3aed",
                "name": "11011501_right.u83",
                "sha1": "21596a2edd20eb7de7a4ec8900a270b09c8f326f",
                "size": 2097152
              },
              {
                "crc32": "c5cc3461",
                "name": "11011501_left.u70",
                "sha1": "5b43c4cb6110a6ccf67cd0f3789253f6872b20c4",
                "size": 2097152
              },
              {
                "crc32": "8a853f80",
                "name": "09011001_right.u83",
                "sha1": "9a75498f7b02c81a483b4e1c158f35f0ee4c0112",
                "size": 2097152
              },
              {
                "crc32": "229c2e63",
                "name": "09011001_left.u70",
                "sha1": "91fd2b1acb69efe073647e93db9f11042add2feb",
                "size": 2097152
              },
              {
                "crc32": "8c148c11",
                "name": "07010801_right.u83",
                "sha1": "5ff3be18455b4f04675fec8d5b9d881295c65e23",
                "size": 2097152
              },
              {
                "crc32": "8e92af68",
                "name": "07010801_left.u70",
                "sha1": "00d2bb655b7964a9652896741210ec534df0b0d2",
                "size": 2097152
              },
              {
                "crc32": "c12eac11",
                "name": "05010601_right.u83",
                "sha1": "683b9ddc323865ace7dca37d13b55de6e42759a5",
                "size": 1048576
              },
              {
                "crc32": "b3e6b4a0",
                "name": "05010601_left.u70",
                "sha1": "3bf398c9257579f8e51ce716d6ebfa74fa510273",
                "size": 1048576
              },
              {
                "crc32": "3daefb7a",
                "name": "04010501_right.u83",
                "sha1": "411471713219f4bab5ccf5fe7a12a6c138c8c550",
                "size": 1048576
              },
              {
                "crc32": "21182775",
                "name": "04010501_left.u70",
                "sha1": "7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a",
                "size": 1048576
              },
              {
                "crc32": "a34a9f16",
                "name": "03010301.u84",
                "sha1": "b8750e6ceb1715da8e5ac2f0183254e29a042641",
                "size": 1048576
              },
              {
                "crc32": "d793440a",
                "name": "03010301.u71",
                "sha1": "dced4c04bde13293af77a9a1f4c5c606e3758de0",
                "size": 1048576
              },
              {
                "crc32": "c8580554",
                "name": "03010301.u83",
                "sha1": "58b8bfff2f8d298c4e3be2b01900800c45fa7ad7",
                "size": 1048576
              },
              {
                "crc32": "5ae69121",
                "name": "03010301.u70",
                "sha1": "36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b",
                "size": 1048576
              },
              {
                "crc32": "0920930f",
                "name": "02010201.u84",
                "sha1": "771b0f62442d1c75b1bb59ad82365b7ab8747173",
                "size": 1048576
              },
              {
                "crc32": "24d5614a",
                "name": "02010201.u71",
                "sha1": "fdcf3826dccc72b74b66379b1411cf211d5a1670",
                "size": 1048576
              },
              {
                "crc32": "5f64a20c",
                "name": "02010201.u83",
                "sha1": "397404ab6d2a1aa3c1fc77bb9421fef7079b65a5",
                "size": 1048576
              },
              {
                "crc32": "9b2db442",
                "name": "02010201.u70",
                "sha1": "d512398a2d9257bd385dc50d61c63cd1a47300ba",
                "size": 1048576
              },
              {
                "crc32": "183e3836",
                "name": "02010114.u84",
                "sha1": "4c802d0cd010bc007acb3a83e37aaa29b2d13d87",
                "size": 1048576
              },
              {
                "crc32": "8f83c3dd",
                "name": "02010114.u71",
                "sha1": "a5f9d80b4b515b24299d0241e1665cfd9da8bab7",
                "size": 1048576
              },
              {
                "crc32": "945104d7",
                "name": "02010114.u83",
                "sha1": "e372d0cf889c72b5d001b26fe4a925a28486537f",
                "size": 1048576
              },
              {
                "crc32": "3ba4379f",
                "name": "02010114.u70",
                "sha1": "84367f12c4c9224d2ab9cae83ae8727de338408c",
                "size": 1048576
              },
              {
                "crc32": "2ecd8da8",
                "name": "25012805_right.u83",
                "sha1": "389e9668b2ba4fffed5d2721b2ce70d502fb9f67",
                "size": 2097152
              },
              {
                "crc32": "996f32ce",
                "name": "25012805_left.u70",
                "sha1": "cf21bef745986fcbd298167453c7b8e5945ce602",
                "size": 2097152
              },
              {
                "crc32": "045b82ad",
                "name": "20012605_right.u83",
                "sha1": "b8e4f9f826970d83ae5fd2f2898de12ad1bf2d24",
                "size": 2097152
              },
              {
                "crc32": "87331111",
                "name": "20012605_left.u70",
                "sha1": "6cdc2d81f68de23af18a975a6f27ddec246be405",
                "size": 2097152
              },
              {
                "crc32": "e436c1f5",
                "name": "20012305_right.u83",
                "sha1": "62ee529cc971fd76aa2ccc15778e3f0c40e3e47f",
                "size": 2097152
              },
              {
                "crc32": "ea8961cc",
                "name": "20012305_left.u70",
                "sha1": "0ebc7c3b94a6e01ee984af4711043130d9670bd3",
                "size": 2097152
              },
              {
                "crc32": "2bec5b74",
                "name": "14011605_right.u83",
                "sha1": "854733cada75e632f01f7096d4740ed4941a3d5b",
                "size": 2097152
              },
              {
                "crc32": "cd26d4f0",
                "name": "14011605_left.u70",
                "sha1": "40822714abf08aeb08d827dbd8cd099f86803754",
                "size": 2097152
              },
              {
                "crc32": "ca6bc86c",
                "name": "04041205_right.u83",
                "sha1": "69fe7fc35694e4cd7f861bff4ec3a6165a81df6e",
                "size": 1048576
              },
              {
                "crc32": "dfb9a119",
                "name": "04041205_left.u70",
                "sha1": "814a5a7877392aec4e4871d7f0e19d2fbd717409",
                "size": 1048576
              },
              {
                "crc32": "bce3d97f",
                "name": "03130334_right.u83",
                "sha1": "da36377cc1465022a2434703adee63bf48c71a9c",
                "size": 2097152
              },
              {
                "crc32": "02175fde",
                "name": "03130334_left.u70",
                "sha1": "4e9a9e1e803a0c84b06aec99dc3147dd7a919eee",
                "size": 2097152
              },
              {
                "crc32": "cf5a9d1e",
                "name": "01040505.u84",
                "sha1": "0ebba478fc883831d70b0fa95f43e5f93b07ae9e",
                "size": 1048576
              },
              {
                "crc32": "f56ea77e",
                "name": "01040505.u71",
                "sha1": "319be1bee66a289e2c1f6beec07758f79aa0cf16",
                "size": 1048576
              },
              {
                "crc32": "90f32169",
                "name": "01040505.u83",
                "sha1": "228be8b4a9eb6b2acf7f7a7561bd194009936026",
                "size": 1048576
              },
              {
                "crc32": "b9ddea66",
                "name": "01040505.u70",
                "sha1": "f4bfdeada39a3f0094d6468b7374a34f88f5df7f",
                "size": 1048576
              },
              {
                "crc32": "b4b3c6a5",
                "name": "03030708_right.u83",
                "sha1": "5747f98a6eaa5c24a23d1d76a28b33a3bfbbfd1f",
                "size": 1048576
              },
              {
                "crc32": "4e5ad823",
                "name": "03030708_left.u70",
                "sha1": "77ab1c29c6172cfdcef776222a72b2b44114d4da",
                "size": 1048576
              },
              {
                "crc32": "01d13b89",
                "name": "14011913_right.u83",
                "sha1": "b1013366d0803dfbec5a5f90f6a5cea862de0513",
                "size": 2097152
              },
              {
                "crc32": "9a4cefdf",
                "name": "14011913_left.u70",
                "sha1": "6c15bc565ede8af19361d60ee1e6657a8055c92c",
                "size": 2097152
              },
              {
                "crc32": "7e3f61f6",
                "name": "14010152_right.u83",
                "sha1": "1e27d72c35b0c633187159ef434f22398df28882",
                "size": 2097152
              },
              {
                "crc32": "2716e1ef",
                "name": "14010152_left.u70",
                "sha1": "81fe1ae4f9cd1bcb24795ce85913ee22ed0fabcd",
                "size": 2097152
              },
              {
                "crc32": "7a8619a5",
                "name": "02061013_right.u83",
                "sha1": "bd03ddb68817c1660b009e102ccf69e5b603b875",
                "size": 1048576
              },
              {
                "crc32": "e70a7007",
                "name": "02061013_left.u70",
                "sha1": "0935f924866162d9c0fbdbb99391cbf730a04b76",
                "size": 1048576
              },
              {
                "crc32": "31068c41",
                "name": "02060913_right.u83",
                "sha1": "962da0079495a64f7ffb34be643892c272017cc9",
                "size": 1048576
              },
              {
                "crc32": "d6a6713c",
                "name": "02060913_left.u70",
                "sha1": "0f3bb2746f1a6fa6a587fd50827299408a3b28d2",
                "size": 1048576
              },
              {
                "crc32": "bf21a975",
                "name": "15011025_right.u83",
                "sha1": "a251b1a7342387300689cd50fe4ce7975b903ac5",
                "size": 2097152
              },
              {
                "crc32": "c02e14b0",
                "name": "15011025_left.u70",
                "sha1": "6bf98927813519dfe60e582dbe5be3ccd87f7c91",
                "size": 2097152
              },
              {
                "crc32": "eddeff13",
                "name": "24010467_right.u83",
                "sha1": "77ccbcf40aeb7305eb13d6d24efafd09955f1eac",
                "size": 2097152
              },
              {
                "crc32": "9093d820",
                "name": "24010467_left.u70",
                "sha1": "05bb14895e3077d277a1d0822036d08f359c0307",
                "size": 2097152
              },
              {
                "crc32": "2dae8ca0",
                "name": "01.04.11_right.u83",
                "sha1": "7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0",
                "size": 2097152
              },
              {
                "crc32": "787f2b07",
                "name": "01.04.11_left.u70",
                "sha1": "2548289e44f4b935346b759afb5383bdbac04c3e",
                "size": 2097152
              },
              {
                "crc32": "82ce2fcc",
                "name": "01.04.10_right.u83",
                "sha1": "4c8fb3db084a67e99d1420b3f895a06ce9ef5ec2",
                "size": 2097152
              },
              {
                "crc32": "9d9d52c1",
                "name": "01.04.10_left.u70",
                "sha1": "b957220cdbedd516c219d1bfc28807ce466df93f",
                "size": 2097152
              },
              {
                "crc32": "95333304",
                "name": "01.04.08_right.u83",
                "sha1": "7afe49d6c5e4d6820f349778557daa88c5366a51",
                "size": 2097152
              },
              {
                "crc32": "0dfcad10",
                "name": "01.04.08_left.u70",
                "sha1": "53798be000304aed38909f5fd8470a68bedd8229",
                "size": 2097152
              },
              {
                "crc32": "23c28e22",
                "name": "01.04.07_right.u83",
                "sha1": "98f24a1f86232b6c2c288a61ec7d60c867f192e5",
                "size": 2097152
              },
              {
                "crc32": "acfb0fe0",
                "name": "01.04.07_left.u70",
                "sha1": "b1a772d7978e6ff4406a5bb39a71cb3f89608e72",
                "size": 2097152
              },
              {
                "crc32": "e57ba02d",
                "name": "01.04.04_right.u83",
                "sha1": "8e29403e6b619eeab41dc171221720bc7820ccdc",
                "size": 2097152
              },
              {
                "crc32": "b984a92c",
                "name": "01.04.04_left.u70",
                "sha1": "90f7a61302caee40195c08565bdac856a3234c1d",
                "size": 2097152
              },
              {
                "crc32": "1582714b",
                "name": "01.03.17_right.u83",
                "sha1": "92d0a15314ffe526159bef9a364898dd1ebdfde7",
                "size": 2097152
              },
              {
                "crc32": "a88193dc",
                "name": "01.03.17_left.u70",
                "sha1": "c9e1d483edaecd318d2e5fc8a54e84516c93e0ca",
                "size": 2097152
              },
              {
                "crc32": "889ffd82",
                "name": "01.03.14_right.u83",
                "sha1": "9c98c9cdcf5f7d05095f11006418133029e9f0f8",
                "size": 2097152
              },
              {
                "crc32": "7138fec4",
                "name": "01.03.14_left.u70",
                "sha1": "f81331d1875ac574d3e6c98be218ff25c6c7be5a",
                "size": 2097152
              },
              {
                "crc32": "2ebccc4e",
                "name": "01.03.07_right.u83",
                "sha1": "9342724e4451e9ab24ceae208284b50abd4f0be3",
                "size": 2097152
              },
              {
                "crc32": "a3632da4",
                "name": "01.03.07_left.u70",
                "sha1": "1c96a88e86095b81801ab88e36a4cdfa4b893265",
                "size": 2097152
              },
              {
                "crc32": "bd48ca55",
                "name": "01.03.06_right.u83",
                "sha1": "8fb1576cbeb1c64c358880714740195d2e73e03e",
                "size": 2097152
              },
              {
                "crc32": "2f9d9a29",
                "name": "01.03.06_left.u70",
                "sha1": "fdebfaca9a579d7249379f19aef22fbfd66bf943",
                "size": 2097152
              },
              {
                "crc32": "2c7f1ec3",
                "name": "01.03.05_right.u83",
                "sha1": "d03167f43ed6f9596080d91472695829378cef0a",
                "size": 2097152
              },
              {
                "crc32": "0095e3f9",
                "name": "01.03.05_left.u70",
                "sha1": "d2e8786158b1ab0a614aab21cf1d14cbc04754af",
                "size": 2097152
              },
              {
                "crc32": "2255e263",
                "name": "01.03.03e_right.u83",
                "sha1": "5e9e093aaa17172f47a14c3baf7f6f0f73b19398",
                "size": 2097152
              },
              {
                "crc32": "ea50729a",
                "name": "01.03.03e_left.u70",
                "sha1": "14b5a71bfb91ac366ddcb5f77fb54127808f8163",
                "size": 2097152
              },
              {
                "crc32": "253415f4",
                "name": "01.03.03a_right.u83",
                "sha1": "50dc77ad87bc6be1932dda2fd4865602c8c49729",
                "size": 2097152
              },
              {
                "crc32": "4ab5dd40",
                "name": "01.03.03a_left.u70",
                "sha1": "a6812cc624e6a98ea7b0697e2797fe10ba8e303e",
                "size": 2097152
              },
              {
                "crc32": "aaaeac8c",
                "name": "01.02.08_right.u2",
                "sha1": "a565e5fcb4f55f31e7d36be40eec234248a66efd",
                "size": 1048576
              },
              {
                "crc32": "f29fd1bf",
                "name": "01.02.08_left.u3",
                "sha1": "33e043d2616e10a1c7a0936c3d208f9bcc2ca6f3",
                "size": 1048576
              },
              {
                "crc32": "e920e940",
                "name": "01.02.02_right.u2",
                "sha1": "52e28d4765a3e953bb70dc4ed13d96d4180be996",
                "size": 1048576
              },
              {
                "crc32": "1d0f4093",
                "name": "01.02.02_left.u3",
                "sha1": "17d6328dba9826b58f39393ca2f2daac1b7161ef",
                "size": 1048576
              },
              {
                "crc32": "6f5f5ef1",
                "name": "06.03.04_right.u2",
                "sha1": "70a43fba4de47ed8dcf38b25eafd5873f3428e72",
                "size": 1048576
              },
              {
                "crc32": "7034f26b",
                "name": "06.03.04_left.u3",
                "sha1": "7be78f23bec38d05240cdfe1186ec0c8291f5a1c",
                "size": 1048576
              },
              {
                "crc32": "98763498",
                "name": "06.03.03_right.u2",
                "sha1": "246e95cc12eb34f946b2f4938c59217718f6d841",
                "size": 1048576
              },
              {
                "crc32": "a6924238",
                "name": "06.03.03_left.u3",
                "sha1": "b71ab39bf9c1fdbab556028138749e8c040ec83c",
                "size": 1048576
              },
              {
                "crc32": "e4001f60",
                "name": "06.02.20_right.u83",
                "sha1": "5da34efb1ac0f7c84a48e09363d20cfecda4bcf1",
                "size": 1048576
              },
              {
                "crc32": "199ed3b9",
                "name": "06.02.20_left.u70",
                "sha1": "e3ee81ffd713f09e35a10c38e4f59282e2c5cd30",
                "size": 1048576
              },
              {
                "crc32": "1cf5a853",
                "name": "06.02.04_right.u2",
                "sha1": "64d17efcce702df7a0b0e151293199478e25226d",
                "size": 1048576
              },
              {
                "crc32": "117b75f2",
                "name": "06.02.04_left.u3",
                "sha1": "2129286853d3c50b8a943b71334d4ef6b98adc05",
                "size": 1048576
              },
              {
                "crc32": "58730ed3",
                "name": "gambs2m_01.05.07.u3",
                "sha1": "6e9c9d7960fe0ef083ff824287a99d9c0b9f5e6a",
                "size": 131072
              }
            ],
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk6.cpp:6639"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f2fea07e",
                "name": "mk7-bios_590176_01_1.00.7.u1",
                "sha1": "285038473fbe3a5708045e2f8b14562f3c24b203",
                "size": 1048576
              }
            ],
            "name": "aristmk7.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk7.cpp:233"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e4fb64fb",
                "name": "6530-009.u5",
                "sha1": "a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20",
                "size": 1024
              },
              {
                "crc32": "dca980dd",
                "name": "6530-010.u6",
                "sha1": "3817d75413854d889fc1ce4fd6a51d820d1e0534",
                "size": 1024
              },
              {
                "crc32": "13f42789",
                "name": "6530-011.u3",
                "sha1": "baa0f73fda08a3c5d6f1423fb329e4febb07ef97",
                "size": 1024
              }
            ],
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/pinball/allied.cpp:775"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ed0d518b",
                "name": "a-110.u12",
                "sha1": "8f3ca8792ad907c660d9149a1aa3a3528c7573e3",
                "size": 2048
              },
              {
                "crc32": "a223f2e8",
                "name": "b1-110.u13",
                "sha1": "767e15e19e11399935c890c1d1034dccf1ad7f92",
                "size": 2048
              }
            ],
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gp_1.cpp:577"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "614a3bd9",
                "name": "a1752cf.u5",
                "sha1": "febca18fb6f96037ca82e515dd161dfcb0e4c776",
                "size": 2048
              },
              {
                "crc32": "4cd312dd",
                "name": "a1753ce.u4",
                "sha1": "31245daa9972ef8652caee69986585bb8239e86e",
                "size": 2048
              }
            ],
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gts1.cpp:1074"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d0c4695d",
                "name": "a2361.b1",
                "sha1": "4846adb3f6c292626840ba5255ffc5e788a69301",
                "size": 1024
              },
              {
                "crc32": "39a70611",
                "name": "a2362.b2",
                "sha1": "8545e168a5f256150bcff12d1e6d8efffd08c3cd",
                "size": 1024
              }
            ],
            "name": "recel.zip",
            "required": true,
            "source_ref": "src/mame/pinball/recel.cpp:547"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "248910ed",
                "description": "BIOS47 (Acorp 694XT/694XT1)",
                "name": "bios47.bin",
                "sha1": "2901c94fb003e5eaea7e91127ad1f7953826a248",
                "size": 262144
              },
              {
                "crc32": "90074f2b",
                "description": "BIOS46 (Acorp 694XT/694XT1)",
                "name": "bios46.bin",
                "sha1": "08fdabad6114ede03a15ce51dec775080585b650",
                "size": 262144
              },
              {
                "crc32": "790d5db0",
                "description": "BIOS45 (Acorp 694XT/694XT1)",
                "name": "bios45.bin",
                "sha1": "6bbfb35275eb0c7bb740ff9b1e299042d4c5952a",
                "size": 262144
              },
              {
                "crc32": "a4b2703e",
                "description": "BIOS44 (Acorp 694XT/694XT1)",
                "name": "bios44.bin",
                "sha1": "9baa5e3aaaf120054979039e42bf1bca2a50616e",
                "size": 262144
              },
              {
                "crc32": "820c057e",
                "description": "BIOS42 (Acorp 694XT/694XT1)",
                "name": "bios42.bin",
                "sha1": "b553961c1bbb6b4afa366eb0dba7ed29ca148f5e",
                "size": 262144
              },
              {
                "crc32": "0940aebd",
                "description": "BIOS41 (Acorp 694XT/694XT1)",
                "name": "bios41.bin",
                "sha1": "38c8645eed9e17ef8e2cd0856f929697ce13df74",
                "size": 262144
              },
              {
                "crc32": "c5ed7d4f",
                "description": "BIOS40 (Acorp 694XT/694XT1)",
                "name": "bios40.bin",
                "sha1": "9fcffb385b5d68bf8cf87615ffee781f38f5fb74",
                "size": 262144
              },
              {
                "crc32": "e7541a28",
                "description": "BIOS39 (unknown motherboard)",
                "name": "bios39.bin",
                "sha1": "dad1aff2cb142d65e7c8736064dce8004451ea4b",
                "size": 262144
              },
              {
                "crc32": "cb49085b",
                "description": "BIOS38 (unknown motherboard)",
                "name": "bios38.bin",
                "sha1": "867b95ebef8fd53dad5b71cd4430ede08cf03540",
                "size": 262144
              },
              {
                "crc32": "9f35e2d2",
                "description": "BIOS37 (unknown motherboard)",
                "name": "bios37.bin",
                "sha1": "83026fc9fc72f795bc3229af98099b409c9bdc81",
                "size": 262144
              },
              {
                "crc32": "83ca05e9",
                "description": "BIOS36 (unknown motherboard)",
                "name": "bios36.bin",
                "sha1": "9d06677907c88481a167e52cc149995cfef0ff40",
                "size": 262144
              },
              {
                "crc32": "d5a2f966",
                "description": "BIOS35 (unknown motherboard)",
                "name": "bios35.bin",
                "sha1": "4f4c9688501814bc00b4cde58ac590b6e961816e",
                "size": 262144
              },
              {
                "crc32": "400702fe",
                "description": "BIOS34 (unknown motherboard)",
                "name": "bios34.bin",
                "sha1": "63a9e04d2ea3d4ace3e5c9f11cc62d0131bc4af0",
                "size": 262144
              },
              {
                "crc32": "96658274",
                "description": "BIOS33 (Soyo SY-7IZB+)",
                "name": "bios33.bin",
                "sha1": "1a5fc83cf84a4c774abc055688fa0c32c3784086",
                "size": 262144
              },
              {
                "crc32": "63318d8a",
                "description": "BIOS32 (Soyo SY-7IZB+)",
                "name": "bios32.bin",
                "sha1": "1194a30a65186f2d0a9e11742d51232598c16011",
                "size": 262144
              },
              {
                "crc32": "5121b267",
                "description": "BIOS31 (Soyo SY-7IZB+)",
                "name": "bios31.bin",
                "sha1": "97e51ed4d53d19ed69db1faba5395b46a1edb6b0",
                "size": 262144
              },
              {
                "crc32": "c6e30fb1",
                "description": "BIOS30 (Soyo SY-7IZB+)",
                "name": "bios30.bin",
                "sha1": "1d9a900a5383bf58b66a2e9f7fb34c61397dd327",
                "size": 262144
              },
              {
                "crc32": "ddbd94f4",
                "description": "BIOS29 (Soyo SY-5EAS)",
                "name": "bios29.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              },
              {
                "crc32": "ddbd94f4",
                "description": "TEST (Soyo SY-5EAS)",
                "name": "test.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              }
            ],
            "name": "slvrball.zip",
            "required": true,
            "source_ref": "src/mame/misc/silverball.cpp:258"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "67374715",
                "name": "va1b102.u2",
                "sha1": "8767cbd81614c2686a1adb70159f909e8ffd634d",
                "size": 131072
              },
              {
                "crc32": "b92a83c8",
                "name": "va1b101.u2",
                "sha1": "bd6d9adaa74cf7512478838d1bd5a79dbd0c4aa1",
                "size": 131072
              },
              {
                "crc32": "36135792",
                "name": "va1a101.u2",
                "sha1": "1b9c50bd02df8227b228b35cc485efd5a13ec639",
                "size": 131072
              }
            ],
            "name": "nichidvd.zip",
            "required": true,
            "source_ref": "src/mame/nichibutsu/hrdvd.cpp:1012"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "86c4a4f0",
                "name": "magnet-master-vid-e03.bin",
                "sha1": "6db1a006b2e0b2a7cc9748ade881debb098b6757",
                "size": 8192
              }
            ],
            "name": "cedmag.zip",
            "required": true,
            "source_ref": "src/mame/efo/cedar_magnet.cpp:1166"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e0fc1a16",
                "description": "Eagle 40MB bootrom 2.09",
                "name": "eagle_u15_v209.u15",
                "sha1": "c9524f7ee6b95bd484a3b75bcbe2243cb273f84c",
                "size": 1048576
              },
              {
                "crc32": "772f2864",
                "description": "Eagle 40MB bootrom 2.08",
                "name": "eagle_u15_v208.u15",
                "sha1": "085063a4e34f29ebe3814823cd2c6323a050da36",
                "size": 1048576
              },
              {
                "crc32": "f02e5523",
                "description": "Eagle 40MB bootrom 2.04",
                "name": "eagle_u15_v204.u15",
                "sha1": "b979cf72a6992f1ecad9695a08c8d51e315ab537",
                "size": 1048576
              },
              {
                "crc32": "e180442b",
                "description": "Eagle 40MB bootrom 2.01",
                "name": "eagle_u15_v201.u15",
                "sha1": "4f50821fed5bcd786d989520aa2559d6c416fb1f",
                "size": 1048576
              },
              {
                "crc32": "97a01fc9",
                "description": "Eagle 40MB bootrom 1.07",
                "name": "golf_fore_u15_v107.u15",
                "sha1": "a421dbf4d097b2f50cc005d3cd0d63e562e03df8",
                "size": 1048576
              },
              {
                "crc32": "9c79b7ad",
                "description": "Eagle 40MB bootrom 1.06a",
                "name": "golf_fore_u15_v106a.u15",
                "sha1": "ccf1c86e79d65bee30f399e0fa33a7839570d93b",
                "size": 1048576
              },
              {
                "crc32": "56bc193d",
                "description": "Eagle 40MB bootrom 1.06",
                "name": "golf_fore_u15_v106.u15",
                "sha1": "e531d208ef27f777d0784414885f390d1be654b9",
                "size": 1048576
              },
              {
                "crc32": "3870dbe0",
                "description": "Eagle 40MB bootrom 1.05",
                "name": "golf_fore_u15_v105.u15",
                "sha1": "09be2d86c7259cd81d945c757044b167a76f30db",
                "size": 1048576
              },
              {
                "crc32": "c35f4cf2",
                "description": "Eagle bootrom 1.03",
                "name": "golf_fore_u15_v103.u15",
                "sha1": "45301c18c7f8f78754c8ad60ea4d2da5a7dc55fb",
                "size": 1048576
              },
              {
                "crc32": "1fd39e73",
                "description": "BBH 8meg bootrom 1.02",
                "name": "bbh_u15_v102.u15",
                "sha1": "d1ac758f94defc5c55c62594b3999a406dd9ef1f",
                "size": 1048576
              },
              {
                "crc32": "4c000c5e",
                "description": "Eagle bootrom 1.02",
                "name": "golf_fore_u15_v102.u15",
                "sha1": "4fd5ea2a0874759b621c9cd52cee55d282443e5d",
                "size": 1048576
              },
              {
                "crc32": "2600bc2b",
                "description": "Eagle bootrom 1.01",
                "name": "golf_fore_u15_v101.u15",
                "sha1": "c4b89e69c51e4a3bb1874407c4d30b6caed4f396",
                "size": 1048576
              },
              {
                "crc32": "62c4af8a",
                "name": "17s20lpc_sb4.u26",
                "sha1": "6eca277b9c66a401990599e98fdca64a9e38cc9a",
                "size": 32768
              },
              {
                "crc32": "c88b9d42",
                "name": "17s20lpc_sb5.u26",
                "sha1": "b912d0fc50ecdc6a198c626f6e1644e8405fac6e",
                "size": 32768
              },
              {
                "crc32": "f5cf3187",
                "name": "17s50a_red1.u26",
                "sha1": "83b4a14de9959e5a776d97d424945d43501bda7f",
                "size": 131072
              },
              {
                "crc32": "9d1e1ace",
                "name": "e2-card1.u22.jed",
                "sha1": "287d6a30e9f32137ef4eba54f0effa092c97a6eb",
                "size": 3025
              },
              {
                "crc32": "4f1ff45a",
                "name": "e2-res3.u117.jed",
                "sha1": "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff",
                "size": 3025
              }
            ],
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/itech/iteagle.cpp:756"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c6c32f1a",
                "name": "hmc86304_bios_v208.u7",
                "sha1": "a07ade7f0567e1978cd8cee73c6a5d7b5e5f947f",
                "size": 32768
              },
              {
                "crc32": "811d3639",
                "name": "amibios_486dx_isa_bios.u32",
                "sha1": "a64d6026c16ac8c79f22b2c241f149402449fafb",
                "size": 65536
              },
              {
                "crc32": "8354d059",
                "name": "ver_151_03_u16.u16",
                "sha1": "a88df7cc259c1c39316cc3bff9e08aa4e8d3d2c0",
                "size": 131072
              },
              {
                "crc32": "ace4081d",
                "name": "ver_151_03_u17.u17",
                "sha1": "f57287ded53f8d127bcdc9e34b8adb356fe55e5e",
                "size": 131072
              },
              {
                "crc32": "9a6b553a",
                "name": "wfc062_212.u62",
                "sha1": "7045f733446866ee3171e175e1b22d9384fda1b5",
                "size": 32768
              },
              {
                "crc32": "528142eb",
                "name": "wi01p006.u6",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "528142eb",
                "name": "wi01p026.u26",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "a2ad9cf8",
                "name": "wi01p044.u44",
                "sha1": "67d44807f7346baf87c15d35c27458b0a7d5de89",
                "size": 2194
              },
              {
                "crc32": "e2a13df7",
                "name": "wi01p045.u45",
                "sha1": "eaa5ee3a92d11f0722934cb6d3443ead903dc78f",
                "size": 2194
              },
              {
                "crc32": "4c22fba5",
                "name": "wi01p046.u46",
                "sha1": "6fabc7a0790f8b883b83fa6fe5f1ee1302d284e2",
                "size": 2194
              },
              {
                "crc32": "7cb0931f",
                "name": "wi01p050.u50",
                "sha1": "394c100b33e5b8d1b2f4979399ad0791af39da28",
                "size": 2194
              },
              {
                "crc32": "d2eb2493",
                "name": "wi01p053.u53",
                "sha1": "a66b4733da0f4f0869839630063c52a733f5ea8c",
                "size": 2194
              },
              {
                "crc32": "96d3506e",
                "name": "wi01p054.u54",
                "sha1": "682ba8a7a17176ff41047cd9a9cfefdc2dc0fd64",
                "size": 2194
              },
              {
                "crc32": "8bf57db4",
                "name": "wi01p056.u56",
                "sha1": "1a5315397b1903c36d7450e873603584db8a00e8",
                "size": 2194
              },
              {
                "crc32": "882f6405",
                "name": "wi01p058.u58",
                "sha1": "e3b7c278f4ee9e0e11741d9ed7c5b32978a3d185",
                "size": 2194
              },
              {
                "crc32": "a97cff8e",
                "name": "wi01p067.u67",
                "sha1": "78451a4bffecd4e1655e7a89971e28b47f5c8829",
                "size": 2194
              },
              {
                "crc32": "3d1adb17",
                "name": "wi01p075.u75",
                "sha1": "b1af8c069de3df3c757e211b372f535b513c6326",
                "size": 2194
              },
              {
                "crc32": "3d3ad152",
                "name": "wi01p079.u79",
                "sha1": "a769bc80514873c2f238e6c8842c5b23596b4a42",
                "size": 2194
              },
              {
                "crc32": "657a4495",
                "name": "wi01p080.u80",
                "sha1": "c5bbd5e5f065a99f9f3d7ce89ca833779c338da5",
                "size": 2194
              },
              {
                "crc32": "b9958131",
                "name": "wi01p048.u48",
                "sha1": "058203eefb1645a446ff3ff4a170a673ad65076c",
                "size": 2706
              },
              {
                "crc32": "820d245a",
                "name": "wi01p049.u49",
                "sha1": "8690e6eb46617c3dc78e1b233970a9318101101c",
                "size": 2706
              },
              {
                "crc32": "4322291e",
                "name": "wi01p070.u70",
                "sha1": "e8751b585a4fb3f371e67616abf48c9d23847b77",
                "size": 2706
              },
              {
                "crc32": "fe77b66b",
                "name": "wi01p072.u72",
                "sha1": "aa13619346a566613f0fa9e3723419f65ffd3ea8",
                "size": 2706
              },
              {
                "crc32": "e02fe7c1",
                "name": "wi01p073.u73",
                "sha1": "ca22b30391453daae943007a0c04b5a28a958c18",
                "size": 2706
              },
              {
                "crc32": "fca2823c",
                "name": "wi01p074.u74",
                "sha1": "6628f1ba3827a3d333ed88c5f20ca94a1439c75e",
                "size": 2706
              },
              {
                "crc32": "902731aa",
                "name": "wi01p083.u83",
                "sha1": "862c2e6fb75fbd712aeaf9eb3b8a84210332fa66",
                "size": 2706
              },
              {
                "crc32": "f996657e",
                "name": "wi01p092.u92",
                "sha1": "01c2c774a9d5f4bcb78742cd606864eff512bfce",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p000.u23",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p001.u32",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p002.u22",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p003.u31",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p004.u6",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p005.u14",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p006.u5",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p007.u13",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "7c421890",
                "name": "wi02p008.u51",
                "sha1": "49d0ab674a8cb4e18ae5ba570132111ed3ccd546",
                "size": 2194
              },
              {
                "crc32": "ff63d60c",
                "name": "wi02p009.u49",
                "sha1": "8ee8629cc24cd18b944ffab3830ed474a1189179",
                "size": 2194
              },
              {
                "crc32": "68f48053",
                "name": "wi02p010.u72",
                "sha1": "17ae9f5caa4b2f4ff700ce44294d3d2881bd4e62",
                "size": 2194
              },
              {
                "crc32": "78701d0f",
                "name": "wi02p011.u88",
                "sha1": "089d5df945638cb811caa963430f5d6658c68947",
                "size": 2194
              },
              {
                "crc32": "1c489ff9",
                "name": "wi02p012.u85",
                "sha1": "a0e1c00c9a5dd870b84f869070961d25724cea92",
                "size": 2194
              },
              {
                "crc32": "19de958f",
                "name": "wi02p013.u86",
                "sha1": "a160f6b0e2a7e42457b470dbcf9415feaad880aa",
                "size": 2194
              },
              {
                "crc32": "845e4d48",
                "name": "wi02p014.u82",
                "sha1": "6aaeabad0e86fe480773b4b51ca4f7c1c8935993",
                "size": 2194
              },
              {
                "crc32": "a10d1876",
                "name": "wi02p015.u74",
                "sha1": "4091fa0a3abb2baeabcc6b250342cf29829af21a",
                "size": 2194
              },
              {
                "crc32": "d84b58c2",
                "name": "wi02p016.u52",
                "sha1": "087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399",
                "size": 2194
              }
            ],
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/misc/su2000.cpp:302"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1fd27e22",
                "description": "V4-60",
                "name": "v4-60.ic29",
                "sha1": "b103d365eac3fa447c2e9addddf6974b4403ed41",
                "size": 32768
              },
              {
                "crc32": "87cf66c1",
                "description": "V4-55",
                "name": "v4-55.ic29",
                "sha1": "d6b42137be7a07a0e299c2d922328a6a9a2b7b8f",
                "size": 32768
              },
              {
                "crc32": "125e7a6e",
                "description": "V4-54",
                "name": "v4-54.ic29",
                "sha1": "6f03c49acaad4feb9c2187f84fc1cb5451d0eb2b",
                "size": 32768
              },
              {
                "crc32": "bccb53c9",
                "description": "V4-53",
                "name": "v4-53.ic29",
                "sha1": "a27113d70cf348c7eafa39fc7a76f55f63723ad7",
                "size": 32768
              },
              {
                "crc32": "ffd7b0fe",
                "description": "V4-52",
                "name": "v4-52.ic29",
                "sha1": "d1804865c91e925a01b05cf441e8458a3db23f50",
                "size": 32768
              },
              {
                "crc32": "2de0b946",
                "description": "V4-51",
                "name": "v4-51.ic29",
                "sha1": "c13051453aff3a2329f18ebade75c69aa3b1c28d",
                "size": 32768
              },
              {
                "crc32": "88da23f3",
                "description": "V4-43",
                "name": "v4-43.ic29",
                "sha1": "9d24faa116129783e55c7f79a4a08902a236d5a6",
                "size": 32768
              },
              {
                "crc32": "0372606d",
                "description": "V4-42",
                "name": "v4-42.ic29",
                "sha1": "8c6a63865b0b4951ea032725cf022d353115b93b",
                "size": 32768
              },
              {
                "crc32": "ba6290cc",
                "description": "V4-40",
                "name": "v4-40.ic29",
                "sha1": "92b0e9f55791e892ec209de4fadd80faef370622",
                "size": 32768
              },
              {
                "crc32": "36012f88",
                "description": "VT-20",
                "name": "vt_2.0.bin",
                "sha1": "5bd42fb51aa48ff65e704ea06a9181bb87ed2137",
                "size": 32768
              },
              {
                "crc32": "27abbc36",
                "description": "VT-11",
                "name": "vt_1.1.bin",
                "sha1": "881ea7802b9e241473bc8ced0472e0f1851c9886",
                "size": 32768
              }
            ],
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/pce/tourvis.cpp:448"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e996bc18",
                "name": "vid.p1",
                "sha1": "49798165640627eb31024319353da04380787b10",
                "size": 65536
              }
            ],
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/barcrest/mpu4vid.cpp:8696"
          },
          {
            "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": "a2b5546b",
                "description": "mk3 v1.0",
                "name": "mk3_1.0_bios.u22",
                "sha1": "d99d29615e2b9c8784e03d4270cf7bb6569f389d",
                "size": 131072
              },
              {
                "crc32": "4540c23f",
                "description": "mk3 v1.1",
                "name": "mk3_1.1_bios.u22",
                "sha1": "bba697dbe234e4f14c23aac126ea36df216f8c93",
                "size": 131072
              },
              {
                "crc32": "5911e31a",
                "name": "piu10.u8",
                "sha1": "295723b9b7da9e55b5dd5586b23b06355f4837ef",
                "size": 2097152
              },
              {
                "crc32": "9c436cfa",
                "name": "piu10.u9",
                "sha1": "480ea52e74721d1963ced41be5c482b7b913ccd2",
                "size": 2097152
              }
            ],
            "name": "pumpitup.zip",
            "required": true,
            "source_ref": "src/mame/misc/xtom3d.cpp:996"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ebc77f3a",
                "name": "astro.bin",
                "sha1": "b902c941997c9d150a560435bf517c6a28137ecc",
                "size": 8192
              }
            ],
            "name": "astrocde.zip",
            "required": true,
            "source_ref": "src/mame/midway/astrohome.cpp:295",
            "system": "astrocde"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d7c517ba",
                "name": "ballyhlc.bin",
                "sha1": "6b2bef5d970e54ed204549f58ba6d197a8bfd3cc",
                "size": 8192
              }
            ],
            "name": "astrocdl.zip",
            "required": true,
            "source_ref": "src/mame/midway/astrohome.cpp:296",
            "system": "astrocde"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6eb53e79",
                "name": "bioswhit.bin",
                "sha1": "d84341feec1a0a0e8aa6151b649bc3cf6ef69fbf",
                "size": 8192
              }
            ],
            "name": "astrocdw.zip",
            "required": true,
            "source_ref": "src/mame/midway/astrohome.cpp:297",
            "system": "astrocde"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e1c11fb0",
                "name": "341s0632-2.bin",
                "sha1": "141d18c36a617ab9dce668445440d34354be0672",
                "size": 4096
              },
              {
                "crc32": "2d541944",
                "name": "344s0047.bin",
                "sha1": "5a5a77c8ec45632aea1a57cd9c9257f7f6e44668",
                "size": 16384
              },
              {
                "crc32": "8d410067",
                "name": "341-0728",
                "sha1": "c0f4704233ead14cb8e1e8a68fbd7063c56afd27",
                "size": 131072
              },
              {
                "crc32": "18190283",
                "name": "341-0748",
                "sha1": "c70576869deec92ca82c78438b1d5c686eac7480",
                "size": 65536
              }
            ],
            "name": "apple2gs.zip",
            "required": true,
            "source_ref": "src/mame/apple/apple2gs.cpp:4004",
            "system": "apple2gs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8c57ff9f",
                "name": "hd6437021.lsi302",
                "sha1": "17542ef275ea8ebeaaddd00d304232c3c355ea25",
                "size": 32768
              },
              {
                "crc32": "8f51fa17",
                "name": "hn62434fa.lsi352",
                "sha1": "99f50be06b083fdb07e08f30b0b26d9037afc869",
                "size": 524288
              }
            ],
            "name": "casloopy.zip",
            "required": true,
            "source_ref": "src/mame/casio/casloopy.cpp:2105",
            "system": "casio-loopy"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f31f297",
                "name": "hn613128pc64.bin",
                "sha1": "94b5f54dd7bce321e377fdaaf592acd3870cf621",
                "size": 16384
              }
            ],
            "name": "pv2000.zip",
            "required": true,
            "source_ref": "src/mame/casio/pv2000.cpp:427",
            "system": "casio-pv2000"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3aa93ef3",
                "name": "os7.u2",
                "sha1": "45bedc4cbdeac66c7df59e9e599195c778d86a92",
                "size": 8192
              },
              {
                "crc32": "565b364a",
                "name": "alf @1 rev 57 e3d5.u8",
                "sha1": "ebdafad6e268e7ed1674c1fb89607622748a5b36",
                "size": 8192
              },
              {
                "crc32": "44a1cff4",
                "name": "alf @2 rev 57 ae6a.u20",
                "sha1": "661cdf36d9699d6c21c5f9e205ebc41c707359dd",
                "size": 8192
              },
              {
                "crc32": "77657b90",
                "name": "alf @3 rev 57 8534.u21",
                "sha1": "d25d32ab6c8fafbc21b4b925b3e644fa26d111f7",
                "size": 8192
              },
              {
                "crc32": "ef6403c5",
                "name": "eos 6 rev 57 08dd.u22",
                "sha1": "28c7616cd02e4286f9b4c1c4a8b8850832b49fcb",
                "size": 8192
              },
              {
                "bad_dump": true,
                "crc32": "58d86a2a",
                "name": "wp_r80.rom",
                "sha1": "d4aec4efe1431e56fe52d83baf9118542c525255",
                "size": 32768
              },
              {
                "crc32": "035a7a3d",
                "name": "master rev a 174b.u6",
                "sha1": "0426e6eaf18c2be9fe08066570c214ab5951ee14",
                "size": 2048
              }
            ],
            "name": "adam.zip",
            "required": true,
            "source_ref": "src/mame/coleco/adam.cpp:1137",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ef204746",
                "name": "keyboard.u2",
                "sha1": "83162ffc75847328a05429135b728a63efb05b93",
                "size": 2048
              }
            ],
            "name": "adam_kb.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/kb.cpp:33",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e8db783b",
                "name": "printer.u2",
                "sha1": "32b40679749ad0317c2c9ee9ca619fad6d850ce7",
                "size": 2048
              }
            ],
            "name": "adam_prn.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/printer.cpp:33",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6b9ea1cf",
                "name": "tape rev a 8865.u24",
                "sha1": "b970f11e8f443fa130fba02ad1f60da51bf89673",
                "size": 2048
              }
            ],
            "name": "adam_ddp.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/ddp.cpp:35",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4b0b7143",
                "name": "adam disk u10 ad 31 rev a 09-27-84.u10",
                "sha1": "1cb68891c3af80e99efad7e309136ca37244f060",
                "size": 4096
              }
            ],
            "name": "adam_fdc.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/fdc.cpp:65",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "dcd865b3",
                "description": "Minh Ta?",
                "name": "320ta.u10",
                "sha1": "dde583e0d18ce4406e9ea44ab34d083e73ee30e2",
                "size": 4096
              },
              {
                "crc32": "5df49f15",
                "description": "DBL",
                "name": "dbl2-4.u10",
                "sha1": "43d5710e4fb05f520e813869a049585b41ada86b",
                "size": 4096
              },
              {
                "crc32": "fed4006c",
                "description": "PMHD",
                "name": "pmhdfdc.u10",
                "sha1": "bc8dd00dd5cde9500a4cd7dc1e4d74330184472a",
                "size": 4096
              }
            ],
            "name": "adam_fdc_320kb.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/fdc.cpp:76",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5f248557",
                "name": "a720dipi 7607 mmsg =c= 1988.u10",
                "sha1": "15b3aaebba38af84f6a1a6ccdf840ca3d58635da",
                "size": 4096
              }
            ],
            "name": "adam_fdc_a720dipi.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/fdc.cpp:92",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f952c88",
                "name": "fastpack 720a,t.u10",
                "sha1": "e593a89d7c6e7ea99e7ce376ffa2732d7b646d49",
                "size": 4096
              }
            ],
            "name": "adam_fdc_fp720at.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/fdc.cpp:103",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2efec8c0",
                "name": "1440k micro innovations hd-dd.u10",
                "sha1": "f6df22339c93dca938b65d0cbe23abcad89ec230",
                "size": 4096
              }
            ],
            "name": "adam_fdc_mihddd.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/fdc.cpp:114",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4ba30352",
                "name": "spi.bin",
                "sha1": "99fe5aebd505a208bea6beec5d7322b15426e9c1",
                "size": 2048
              }
            ],
            "name": "adam_spi.zip",
            "required": true,
            "source_ref": "src/devices/bus/adamnet/spi.cpp:25",
            "system": "coleco-adam"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "279e33d1",
                "name": "ins8048-11kdp_n.u5",
                "sha1": "bf7b0663e9125c9bfb950232eab627d9dbda8460",
                "size": 1024
              },
              {
                "crc32": "81e95975",
                "name": "cop411l-kcn_n.u8",
                "sha1": "8b6f8c30dd3e9d8e43f1ea20fba2361b383790eb",
                "size": 512
              }
            ],
            "name": "advision.zip",
            "required": true,
            "source_ref": "src/mame/entex/advision.cpp:471",
            "system": "entex-advision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "cc6ac840",
                "description": "Standard",
                "name": "apf_4000.rom",
                "sha1": "1110a234bcad99bd0894ad44c591389d16376ca4",
                "size": 2048
              },
              {
                "crc32": "3bd8640a",
                "description": "Trash II",
                "name": "trash-ii.bin",
                "sha1": "da4cd8163990adbc5acd3eab604b41e1066bb832",
                "size": 4096
              },
              {
                "crc32": "f320aba6",
                "description": "Mod BIOS",
                "name": "mod_bios.bin",
                "sha1": "9442349fca8b001a5765e2fe8b84db4ece7886c1",
                "size": 4096
              }
            ],
            "name": "apfm1000.zip",
            "required": true,
            "source_ref": "src/mame/apf/apf.cpp:642",
            "system": "apf-m1000"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5471aaf8",
                "name": "9h0-0008.bios.ic1",
                "sha1": "33d756b6c64afb0fa377b3f85ab74505e9ae2f9c",
                "size": 131072
              },
              {
                "crc32": "ed336d29",
                "name": "9h0-0008.midipcm.ic1",
                "sha1": "4af7b7cf7fc4fe8b7a514cde91f930a582742509",
                "size": 32768
              }
            ],
            "name": "beena.zip",
            "required": true,
            "source_ref": "src/mame/sega/sega_beena.cpp:2264",
            "system": "sega-beena"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a194ea53",
                "name": "ipl.rom",
                "sha1": "ba39e73e6eb7cbb8906fff1f81a98964cd62af0d",
                "size": 8192
              }
            ],
            "name": "rx78.zip",
            "required": true,
            "source_ref": "src/mame/bandai/rx78.cpp:577",
            "system": "bandai-rx78"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62402ac9",
                "name": "mpr-7689.ic5",
                "sha1": "bf52d22b119d54410dad4949b0687bb0edf3e143",
                "size": 131072
              },
              {
                "crc32": "c8b6a539",
                "name": "e000 8_24.ic3",
                "sha1": "cbf8473d1e3d8037ea98e9ca8b9aafdc8d16ff23",
                "size": 65536
              },
              {
                "crc32": "64d6cd8c",
                "name": "f000 7_21.ic4",
                "sha1": "68c130048f16d6a0abe1978e84440931470222d9",
                "size": 65536
              },
              {
                "crc32": "d1aea002",
                "name": "mpr-7619.ic14",
                "sha1": "c8d5408bba65b17301f19cf9ebd2b635d642525a",
                "size": 131072
              },
              {
                "crc32": "e042754b",
                "name": "mpr-7620.ic15",
                "sha1": "02aede7a3e2fda9cbca621b530afa4520cf16610",
                "size": 131072
              }
            ],
            "name": "segaai.zip",
            "required": true,
            "source_ref": "src/mame/sega/segaai.cpp:743",
            "system": "sega-ai"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ef2dabc0",
                "name": "ai-snd-2002-cecb.bin",
                "sha1": "b60cd9f6f46b6c77dba8610df6fd83368569e713",
                "size": 65536
              }
            ],
            "name": "segaai_soundbox.zip",
            "required": true,
            "source_ref": "src/devices/bus/segaai/soundbox.cpp:152",
            "system": "sega-ai"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "56feec44",
                "description": "Set1",
                "name": "lynx48-1.ic46",
                "sha1": "7ded5184561168e159a30fa8e9d3fde5e52aa91a",
                "size": 8192
              },
              {
                "crc32": "d894562e",
                "description": "Set1",
                "name": "lynx48-2.ic45",
                "sha1": "c08a78ecb4eb05baa4c52488fce3648cd2688744",
                "size": 8192
              },
              {
                "crc32": "a933e577",
                "description": "Set2",
                "name": "lynx4811.ic46",
                "sha1": "c7b30a28d99b38dbe63a1314c78e3e614287143b",
                "size": 8192
              },
              {
                "crc32": "3d3fdd0e",
                "description": "Set2",
                "name": "lynx4812.ic45",
                "sha1": "259d124f05367a96f891790f9418cc9c7798e2f8",
                "size": 8192
              }
            ],
            "name": "lynx48k.zip",
            "required": true,
            "source_ref": "src/mame/camputers/camplynx.cpp:1033",
            "system": "camplynx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f86c5514",
                "name": "lynx9646.ic46",
                "sha1": "77a4af7557382003d697d08f364839e2dc28f063",
                "size": 8192
              },
              {
                "crc32": "f596b9a3",
                "name": "lynx9645.ic45",
                "sha1": "3fca46bd68422d34c6cd801dd904507e52bd8846",
                "size": 8192
              },
              {
                "crc32": "4b96b0de",
                "description": "Original",
                "name": "lynx9644.ic44",
                "sha1": "c372a8d26399b9b45e615b674d61ccda76491b8b",
                "size": 4096
              },
              {
                "crc32": "698d3de9",
                "description": "Scorpion",
                "name": "skorprom.ic44",
                "sha1": "c707bdcecef79774c2a8a23d1f3e9ba382cb9304",
                "size": 8192
              },
              {
                "crc32": "795c22ea",
                "description": "Danish",
                "name": "danish96k3.ic44",
                "sha1": "0a57394cd986c5b338b38d514e894bace7f6e47b",
                "size": 8192
              },
              {
                "crc32": "011e106a",
                "name": "dosrom.rom",
                "sha1": "e77f0ca99790551a7122945f3194516b2390fb69",
                "size": 8192
              }
            ],
            "name": "lynx96k.zip",
            "required": true,
            "source_ref": "src/mame/camputers/camplynx.cpp:1034",
            "system": "camplynx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "65d292ce",
                "name": "lynx128-1.ic1",
                "sha1": "36567c2fbd9cf72f758e8cb80c21cb4d82040752",
                "size": 8192
              },
              {
                "crc32": "23288773",
                "name": "lynx128-2.ic2",
                "sha1": "e12a7ebea3fae5eb375c03e848dbb81070d9d189",
                "size": 8192
              },
              {
                "crc32": "9827b9e9",
                "name": "lynx128-3.ic3",
                "sha1": "1092367b2af51c72ce9be367179240d692aeb131",
                "size": 8192
              },
              {
                "crc32": "011e106a",
                "name": "dosrom.rom",
                "sha1": "e77f0ca99790551a7122945f3194516b2390fb69",
                "size": 8192
              }
            ],
            "name": "lynx128k.zip",
            "required": true,
            "source_ref": "src/mame/camputers/camplynx.cpp:1035",
            "system": "camplynx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c3c590c6",
                "name": "crvision.u20",
                "sha1": "5ac620c529e4965efb5560fe824854a44c983757",
                "size": 2048
              }
            ],
            "name": "crvision.zip",
            "required": true,
            "source_ref": "src/mame/vtech/crvision.cpp:966",
            "system": "crvision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "05602697",
                "name": "funboot.rom",
                "sha1": "c280b20c8074ba9abb4be4338b538361dfae517f",
                "size": 2048
              }
            ],
            "name": "fnvision.zip",
            "required": true,
            "source_ref": "src/mame/vtech/crvision.cpp:967",
            "system": "crvision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4dc35c39",
                "name": "laser2001.rom",
                "sha1": "c12e098c14ac0724869053df2b63277a3e413802",
                "size": 16384
              }
            ],
            "name": "lasr2001.zip",
            "required": true,
            "source_ref": "src/mame/vtech/crvision.cpp:973",
            "system": "crvision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "702f4cf5",
                "name": "01",
                "sha1": "cd14ee74e787d24b76c166de484dae24206e219b",
                "size": 8192
              },
              {
                "crc32": "46489d88",
                "name": "23",
                "sha1": "467f5bcd62d0b4117c443e13373df8f3c45df7b2",
                "size": 8192
              }
            ],
            "name": "manager.zip",
            "required": true,
            "source_ref": "src/mame/vtech/crvision.cpp:975",
            "system": "crvision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "613de12c",
                "description": "BASIC V2.0",
                "name": "vtechv20.u12",
                "sha1": "f216c266bc09b0dbdbad720796e5ea9bc7d91e53",
                "size": 16384
              },
              {
                "crc32": "f7df980f",
                "description": "BASIC V2.1 (hack)",
                "name": "vtechv21.u12",
                "sha1": "5ba14a7a2eedca331b033901080fa5d205e245ea",
                "size": 16384
              }
            ],
            "name": "laser310.zip",
            "required": true,
            "source_ref": "src/mame/vtech/vtech1.cpp:628",
            "system": "laser310"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "80f5aa20",
                "name": "27-00817-000-000.u1",
                "sha1": "4fd1ff7f78b5dd2582d5de6f30633e4e4f34ca8f",
                "size": 262144
              },
              {
                "crc32": "edc1fb3f",
                "name": "speech_eng_internal.bin",
                "sha1": "78b4631fc3b1c038e14911047f9edd6c4e8bae58",
                "size": 8192
              },
              {
                "crc32": "888e3ddd",
                "name": "speech_eng_vsm1.bin",
                "sha1": "33af6a21ba6d826071c9d48557b1c9012752570b",
                "size": 16384
              },
              {
                "crc32": "de4ac89d",
                "name": "speech_eng_vsm2.bin",
                "sha1": "3dfa853b02df756a9b72def94a39310992ee11c7",
                "size": 16384
              },
              {
                "crc32": "972384aa",
                "name": "speech_eng_vsm3.bin",
                "sha1": "ffcb1d633ca6bffc7f481ec505da447e5b847f16",
                "size": 16384
              }
            ],
            "name": "socrates.zip",
            "required": true,
            "source_ref": "src/mame/vtech/socrates.cpp:1663",
            "system": "vtech-socrates"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "387fbc24",
                "description": "v103",
                "name": "vsmile_v103.bin",
                "sha1": "5f2fd211b6ff3a6f5121b14adc6bbf4f49e89f33",
                "size": 2097152
              },
              {
                "crc32": "0cd0bdf5",
                "description": "v102",
                "name": "vsmile_v102.bin",
                "sha1": "5c8d1eada1b6b545555b8d2b09325d7127681af8",
                "size": 2097152
              },
              {
                "crc32": "205c5296",
                "description": "v100",
                "name": "vsmile_v100.bin",
                "sha1": "7fbcf761b5885c8b1524607aabaf364b4559c8cc",
                "size": 2097152
              }
            ],
            "name": "vsmile.zip",
            "required": true,
            "source_ref": "src/mame/vtech/vsmile.cpp:403",
            "system": "vtech-vsmile"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "07090415",
                "description": "DEFAULT",
                "name": "gamate_bios_umc.bin",
                "sha1": "ea449dc607601f9a68d855ad6ab53800d2e99297",
                "size": 4096
              },
              {
                "crc32": "03a5f3a7",
                "description": "NEWER",
                "name": "gamate_bios_bit.bin",
                "sha1": "4e9dfbfe916ca485530ef4221593ab68738e2217",
                "size": 4096
              }
            ],
            "name": "gamate.zip",
            "required": true,
            "source_ref": "src/mame/bitcorp/gamate.cpp:240",
            "system": "gamate"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ee1ea65d",
                "name": "egpcboot.bin",
                "sha1": "9c7731b5ead721d2cc7f7e2655c5fed9e56db8b0",
                "size": 4096
              }
            ],
            "name": "gamepock.zip",
            "required": true,
            "source_ref": "src/mame/epoch/gamepock.cpp:262",
            "system": "gamepock"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "05cc45e5",
                "name": "d78c11agf_e19.u1",
                "sha1": "05d73638dea9657ccc2791c0202d9074a4782c1e",
                "size": 4096
              }
            ],
            "name": "gmaster.zip",
            "required": true,
            "source_ref": "src/mame/handheld/gmaster.cpp:275",
            "system": "hartung-game-master"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a0cec361",
                "name": "internal.bin",
                "sha1": "03368237e8fed4a8724f3b4a1596cf4b17c96d33",
                "size": 4096
              },
              {
                "crc32": "e235a589",
                "name": "external.bin",
                "sha1": "97f782e72d738f4d7b861363266bf46b438d9b50",
                "size": 262144
              }
            ],
            "name": "gamecom.zip",
            "required": true,
            "source_ref": "src/mame/tiger/gamecom.cpp:302",
            "system": "tiger-game-com"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b1e35643",
                "description": "Firmware 1.5.7 (English)",
                "name": "gp32157e.bin",
                "sha1": "1566bc2a27980602e9eb501cf8b2d62939bfd1e5",
                "size": 524288
              },
              {
                "crc32": "d9925ac9",
                "description": "Firmware 1.0.0 (Korean)",
                "name": "gp32100k.bin",
                "sha1": "3604d0d7210ed72eddd3e3e0c108f1102508423c",
                "size": 524288
              },
              {
                "crc32": "667fb1c8",
                "description": "Firmware 1.5.6 (Korean)",
                "name": "gp32156k.bin",
                "sha1": "d179ab8e96411272b6a1d683e59da752067f9da8",
                "size": 524288
              },
              {
                "crc32": "4548a840",
                "description": "Firmware 1.6.6 (European)",
                "name": "gp32166m.bin",
                "sha1": "1ad0cab0af28fb45c182e5e8c87ead2aaa4fffe1",
                "size": 524288
              },
              {
                "crc32": "7ddaaaeb",
                "description": "Mr. Spiv Multi Firmware V2",
                "name": "gp32mfv2.bin",
                "sha1": "5a85278f721beb3b00125db5c912d1dc552c5897",
                "size": 524288
              },
              {
                "crc32": "eeec10d8",
                "name": "x2c32.jed",
                "sha1": "34c4b1b865511517a5de1fa352228d95cda387c5",
                "size": 15291
              }
            ],
            "name": "gp32.zip",
            "required": true,
            "source_ref": "src/mame/gamepark/gp32.cpp:1727",
            "system": "gamepark-gp32"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "bad_dump": true,
                "crc32": "87c98494",
                "name": "fbasic300.rom",
                "sha1": "d7e3603b0a2442c7632dad45f9704d9ad71968f5",
                "size": 31744
              },
              {
                "bad_dump": true,
                "crc32": "24cec93f",
                "name": "subsys_c.rom",
                "sha1": "50b7283db6fe1342c6063fc94046283f4feddc1c",
                "size": 10240
              },
              {
                "bad_dump": true,
                "crc32": "c70f0c74",
                "name": "boot_bas.rom",
                "sha1": "53b63a301cba7e3030e79c59a4d4291eab6e64b0",
                "size": 512
              },
              {
                "bad_dump": true,
                "crc32": "bf441864",
                "name": "boot_dos_a.rom",
                "sha1": "616c17155f84fb0e3731a31ef0eb0cbb664a5600",
                "size": 512
              },
              {
                "crc32": "62402ac9",
                "name": "kanji.rom",
                "sha1": "bf52d22b119d54410dad4949b0687bb0edf3e143",
                "size": 131072
              }
            ],
            "name": "fm7.zip",
            "required": true,
            "source_ref": "src/mame/fujitsu/fm7.cpp:2294",
            "system": "fm7"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "785cb06c",
                "name": "initiate.rom",
                "sha1": "b65987e98a9564a82c85eadb86f0204eee5a5c93",
                "size": 8192
              },
              {
                "bad_dump": true,
                "crc32": "a96d19b6",
                "name": "fbasic30.rom",
                "sha1": "8d5f0cfe7e0d39bf2ab7e4c798a13004769c28b2",
                "size": 31744
              },
              {
                "bad_dump": true,
                "crc32": "24cec93f",
                "name": "subsys_c.rom",
                "sha1": "50b7283db6fe1342c6063fc94046283f4feddc1c",
                "size": 10240
              },
              {
                "crc32": "e8014fbb",
                "name": "subsys_a.rom",
                "sha1": "038cb0b42aee9e933b20fccd6f19942e2f476c83",
                "size": 8192
              },
              {
                "crc32": "9be69fac",
                "name": "subsys_b.rom",
                "sha1": "0305bdd44e7d9b7b6a17675aff0a3330a08d21a8",
                "size": 8192
              },
              {
                "crc32": "e9f16c42",
                "name": "subsyscg.rom",
                "sha1": "8ab466b1546d023ba54987790a79e9815d2b7bb2",
                "size": 8192
              },
              {
                "crc32": "62402ac9",
                "name": "kanji.rom",
                "sha1": "bf52d22b119d54410dad4949b0687bb0edf3e143",
                "size": 131072
              }
            ],
            "name": "fm77av.zip",
            "required": true,
            "source_ref": "src/mame/fujitsu/fm7.cpp:2296",
            "system": "fm7"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "bad_dump": true,
                "crc32": "a96d19b6",
                "name": "fbasic302.rom",
                "sha1": "8d5f0cfe7e0d39bf2ab7e4c798a13004769c28b2",
                "size": 31744
              },
              {
                "bad_dump": true,
                "crc32": "24cec93f",
                "name": "subsys_c.rom",
                "sha1": "50b7283db6fe1342c6063fc94046283f4feddc1c",
                "size": 10240
              },
              {
                "bad_dump": true,
                "crc32": "c70f0c74",
                "name": "boot_bas.rom",
                "sha1": "53b63a301cba7e3030e79c59a4d4291eab6e64b0",
                "size": 512
              },
              {
                "bad_dump": true,
                "crc32": "198614ff",
                "name": "boot_dos.rom",
                "sha1": "037e5881bd3fed472a210ee894a6446965a8d2ef",
                "size": 512
              },
              {
                "crc32": "62402ac9",
                "name": "kanji.rom",
                "sha1": "bf52d22b119d54410dad4949b0687bb0edf3e143",
                "size": 131072
              }
            ],
            "name": "fmnew7.zip",
            "required": true,
            "source_ref": "src/mame/fujitsu/fm7.cpp:2295",
            "system": "fm7"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1640ff7e",
                "description": "Monitor 1.1 r2674",
                "name": "mon11_2674.bin",
                "sha1": "8199643749fb40fb8be05e9f311c75620ca939b1",
                "size": 4096
              },
              {
                "crc32": "910fc930",
                "description": "Monitor 1.0 r2569",
                "name": "mon10_2569.bin",
                "sha1": "a4f6bbe5def0268cc49ee7045616a39017dd8052",
                "size": 4096
              },
              {
                "crc32": "07b92002",
                "description": "Monitor 1.1 r2569",
                "name": "mon11_2569.bin",
                "sha1": "3c434601120870c888944ecd9ade5186432ddbc2",
                "size": 4096
              },
              {
                "crc32": "f3ee23c8",
                "description": "Monitor 1.1 r2669",
                "name": "mon11_2669.bin",
                "sha1": "3ac96935668f5e53799c90db5140393c2ef9ce36",
                "size": 4096
              },
              {
                "crc32": "5f5f688a",
                "description": "Monitor 2.2 r2856",
                "name": "mon22_2856.bin",
                "sha1": "3719eecc347e158dd027ea7aa8a068cdafc00d9b",
                "size": 4096
              },
              {
                "crc32": "a47b0308",
                "description": "Monitor 2.2B r2856",
                "name": "mon22b_2856.bin",
                "sha1": "f215e51aa8df6aed99c10f3df6a3589cb9f63d46",
                "size": 4096
              },
              {
                "crc32": "0e024222",
                "description": "Monitor 2.3 r2601",
                "name": "mon23_2601.bin",
                "sha1": "9950cba08996931b9d5a3368b44c7309638b4e08",
                "size": 4096
              },
              {
                "crc32": "248e62c9",
                "description": "Monitor 2.3A r2569",
                "name": "mon23a_2569.bin",
                "sha1": "adbde27e69b38b29ff89bacf28d0240a8e5d90f3",
                "size": 4096
              },
              {
                "crc32": "5a25144b",
                "name": "6571.bin",
                "sha1": "7b9fee0c8ef2605b85d12b6d9fe8feb82418c63a",
                "size": 2048
              }
            ],
            "name": "pegasus.zip",
            "required": true,
            "source_ref": "src/mame/ausnz/pegasus.cpp:575",
            "system": "pegasus"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ee8890ae",
                "name": "40026.ic701",
                "sha1": "91679cc5e07464ac55ef9a10f7095b2438223332",
                "size": 1024
              },
              {
                "crc32": "25260958",
                "name": "40027.ic801",
                "sha1": "210e7e25228c79d2920679f217d68e4f14055825",
                "size": 1024
              }
            ],
            "name": "pcw8256.zip",
            "required": true,
            "source_ref": "src/mame/amstrad/pcw.cpp:1460",
            "system": "pcw"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a64d450a",
                "name": "40103.ic109",
                "sha1": "ebbf0ef19d39912c1c127c748514dd299915f88b",
                "size": 8192
              },
              {
                "crc32": "25260958",
                "name": "40027.ic801",
                "sha1": "210e7e25228c79d2920679f217d68e4f14055825",
                "size": 1024
              }
            ],
            "name": "pcw9512.zip",
            "required": true,
            "source_ref": "src/mame/amstrad/pcw.cpp:1462",
            "system": "pcw"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "364e3f74",
                "name": "p513bk0b.bin",
                "sha1": "04260ef1e65e482c9c49d25ace40e22487d6aab9",
                "size": 524288
              },
              {
                "crc32": "e18239c4",
                "name": "p513bk1b.bin",
                "sha1": "a0262109e10a07a11eca43371be9978fff060bc5",
                "size": 524288
              }
            ],
            "name": "vis.zip",
            "required": true,
            "source_ref": "src/mame/trs/vis.cpp:1120",
            "system": "tandy-vis"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "70d06dff",
                "name": "level1.rom",
                "sha1": "20d75478fbf42214381e05b14f57072f3970f765",
                "size": 4096
              },
              {
                "crc32": "0033f2b9",
                "name": "mcm6670p.z29",
                "sha1": "0d2cd4197d54e2e872b515bbfdaa98efe502eda7",
                "size": 1024
              }
            ],
            "name": "trs80.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:680",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "37c59db2",
                "description": "Radio Shack Level II Basic",
                "name": "rom-a.z1",
                "sha1": "e8f8f6a4460a6f6755873580be6ff70cebe14969",
                "size": 4096
              },
              {
                "crc32": "05818718",
                "description": "Radio Shack Level II Basic",
                "name": "rom-b.z2",
                "sha1": "43c538ca77623af6417474ca5b95fb94205500c1",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "description": "Radio Shack Level II Basic",
                "name": "rom-c.z3",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "be46faf5",
                "description": "R/S L2 Basic",
                "name": "rom-a_alt.z1",
                "sha1": "0e63fc11e207bfd5288118be5d263e7428cc128b",
                "size": 4096
              },
              {
                "crc32": "6c791c2d",
                "description": "R/S L2 Basic",
                "name": "rom-b_alt.z2",
                "sha1": "2a38e0a248f6619d38f1a108eea7b95761cf2aee",
                "size": 4096
              },
              {
                "crc32": "55b3ad13",
                "description": "R/S L2 Basic",
                "name": "rom-c_alt.z3",
                "sha1": "6279f6a68f927ea8628458b278616736f0b3c339",
                "size": 4096
              },
              {
                "crc32": "0033f2b9",
                "name": "mcm6670p.z29",
                "sha1": "0d2cd4197d54e2e872b515bbfdaa98efe502eda7",
                "size": 1024
              }
            ],
            "name": "trs80l2.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:681",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f5214de",
                "name": "3001.z10",
                "sha1": "d8c052be5a2d0ec74433043684791d0554bf203b",
                "size": 4096
              },
              {
                "crc32": "46e88fbf",
                "name": "3002.z11",
                "sha1": "a3ca32757f269e09316e1e91ba1502774e2f5155",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "name": "3003.z12",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "8f2ac112",
                "name": "tcs-ext.z13",
                "sha1": "be0c2a5fb9cb01173c4da6dc8c71ca5975f441bb",
                "size": 2048
              },
              {
                "crc32": "150c5f1f",
                "name": "tcs-ext.z25",
                "sha1": "afbce73ab0360108b32e75eb75a3966eb5c503e7",
                "size": 2048
              }
            ],
            "name": "eg3003.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:682",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f5214de",
                "name": "3001.z10",
                "sha1": "d8c052be5a2d0ec74433043684791d0554bf203b",
                "size": 4096
              },
              {
                "crc32": "46e88fbf",
                "name": "3002.z11",
                "sha1": "a3ca32757f269e09316e1e91ba1502774e2f5155",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "name": "3003.z12",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "2a851e33",
                "name": "sys80.z13",
                "sha1": "dad21ec60973eb66e499fe0ecbd469118826a715",
                "size": 2048
              },
              {
                "crc32": "0033f2b9",
                "name": "2513.z25",
                "sha1": "0d2cd4197d54e2e872b515bbfdaa98efe502eda7",
                "size": 1024
              }
            ],
            "name": "sys80.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:683",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f5214de",
                "name": "3001.z10",
                "sha1": "d8c052be5a2d0ec74433043684791d0554bf203b",
                "size": 4096
              },
              {
                "crc32": "46e88fbf",
                "name": "3002.z11",
                "sha1": "a3ca32757f269e09316e1e91ba1502774e2f5155",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "name": "3003.z12",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "2a851e33",
                "name": "sys80.z13",
                "sha1": "dad21ec60973eb66e499fe0ecbd469118826a715",
                "size": 2048
              },
              {
                "crc32": "e8c59d4f",
                "name": "ht1080z.z25",
                "sha1": "a15f30a543e53d3e30927a2e5b766fcf80f0ae31",
                "size": 2048
              }
            ],
            "name": "ht1080z.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:685",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8f5214de",
                "name": "3001.z10",
                "sha1": "d8c052be5a2d0ec74433043684791d0554bf203b",
                "size": 4096
              },
              {
                "crc32": "46e88fbf",
                "name": "3002.z11",
                "sha1": "a3ca32757f269e09316e1e91ba1502774e2f5155",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "name": "3003.z12",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "07415ac6",
                "name": "ht1080z2.z13",
                "sha1": "b08746b187946e78c4971295c0aefc4e3de97115",
                "size": 2048
              },
              {
                "crc32": "6728f0ab",
                "name": "ht1080z2.z25",
                "sha1": "1ba949f8596f1976546f99a3fdcd3beb7aded2c5",
                "size": 2048
              }
            ],
            "name": "ht1080z2.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:686",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "59ec132e",
                "name": "3001_64.z10",
                "sha1": "232c04827e494ea49931d7ab9a5b87b76c81aef1",
                "size": 4096
              },
              {
                "crc32": "a7a73e8c",
                "name": "3002_64.z11",
                "sha1": "6e0f232b8666744328853cef6bb72b8e44b4c184",
                "size": 4096
              },
              {
                "crc32": "306e5d66",
                "name": "3003.z12",
                "sha1": "1e1abcfb5b02d4567cf6a81ffc35318723442369",
                "size": 4096
              },
              {
                "crc32": "fc12bd28",
                "name": "ht108064.z13",
                "sha1": "0da93a311f99ec7a1e77486afe800a937778e73b",
                "size": 2048
              },
              {
                "crc32": "e76b73a4",
                "name": "ht108064.z25",
                "sha1": "6361ee9667bf59d50059d09b0baf8672fdb2e8af",
                "size": 2048
              }
            ],
            "name": "ht108064.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80.cpp:687",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ec0c6daa",
                "description": "Level 2 bios, RomC Rev C",
                "name": "8041364.u104",
                "sha1": "257cea6b9b46912d4681251019ec2b84f1b95fc8",
                "size": 8192
              },
              {
                "crc32": "ed4ee921",
                "description": "Level 2 bios, RomC Rev C",
                "name": "8040332.u105",
                "sha1": "ec0a19d4b72f71e51965de63250009c3c4e4cab3",
                "size": 4096
              },
              {
                "crc32": "c8f79433",
                "description": "Level 2 bios, RomC Rev C",
                "name": "8040316c.u106",
                "sha1": "6f395bba822d39d3cd2b73c8ea25aab4c4c26da7",
                "size": 2048
              },
              {
                "crc32": "ec0c6daa",
                "description": "Level 2 bios, RomC Rev B",
                "name": "8041364.u104",
                "sha1": "257cea6b9b46912d4681251019ec2b84f1b95fc8",
                "size": 8192
              },
              {
                "crc32": "ed4ee921",
                "description": "Level 2 bios, RomC Rev B",
                "name": "8040332.u105",
                "sha1": "ec0a19d4b72f71e51965de63250009c3c4e4cab3",
                "size": 4096
              },
              {
                "crc32": "84a5702d",
                "description": "Level 2 bios, RomC Rev B",
                "name": "8040316b.u106",
                "sha1": "297dca756a9d3c6fd13e0fa6f93d172ff795b520",
                "size": 2048
              },
              {
                "crc32": "ec0c6daa",
                "description": "Level 2 bios, Network III v2 (student)",
                "name": "8041364.u104",
                "sha1": "257cea6b9b46912d4681251019ec2b84f1b95fc8",
                "size": 8192
              },
              {
                "crc32": "ed4ee921",
                "description": "Level 2 bios, Network III v2 (student)",
                "name": "8040332.u105",
                "sha1": "ec0a19d4b72f71e51965de63250009c3c4e4cab3",
                "size": 4096
              },
              {
                "crc32": "7d38720a",
                "description": "Level 2 bios, Network III v2 (student)",
                "name": "276a.u106",
                "sha1": "bef621e5ae2a8c1f9e7f6325b7841f5ab8ab7e6a",
                "size": 2048
              },
              {
                "crc32": "6418d641",
                "description": "Level 1 bios",
                "name": "8040032.u104",
                "sha1": "f823ab6ceb102588d27e5f5c751e31175289291c",
                "size": 4096
              },
              {
                "crc32": "444c8b60",
                "name": "8044316a.u36",
                "sha1": "c52ee41439bd5e57c3b113ebfd61c951e2af4446",
                "size": 2048
              }
            ],
            "name": "trs80m3.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80m3.cpp:569",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "bad_dump": true,
                "crc32": "1a92d54d",
                "name": "trs80m4.rom",
                "sha1": "752555fdd0ff23abc9f35c6e03d9d9b4c0e9677b",
                "size": 14336
              },
              {
                "crc32": "444c8b60",
                "name": "8044316a.u36",
                "sha1": "c52ee41439bd5e57c3b113ebfd61c951e2af4446",
                "size": 2048
              }
            ],
            "name": "trs80m4.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80m3.cpp:570",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3a738aa9",
                "description": "Level 2 bios, gate array machine",
                "name": "8075332.u69",
                "sha1": "6393396eaa10a84b9e9f0cf5930aba73defc5c52",
                "size": 4096
              },
              {
                "crc32": "7ff336f4",
                "description": "Disk loader hack",
                "name": "trs80m4p_loader_hack.rom",
                "sha1": "41184f5240b4b54f3804f5a22b4d78bbba52ed1d",
                "size": 504
              },
              {
                "crc32": "1ac44bea",
                "name": "8049007.u103",
                "sha1": "c9426ab2b2aa5380dc97a7b9c048ccd1bbde92ca",
                "size": 2048
              }
            ],
            "name": "trs80m4p.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80m3.cpp:571",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c2fc1b92",
                "name": "s_8407_cn62516n_cp500a_prologica_83.ci111",
                "sha1": "0eb07baee80f1ee1f28a609eb63a9245dcb68adb",
                "size": 16384
              },
              {
                "crc32": "c2fc1b92",
                "name": "s_8407_cn62516n_cp500a_prologica_83.ci111",
                "sha1": "0eb07baee80f1ee1f28a609eb63a9245dcb68adb",
                "size": 16384
              },
              {
                "crc32": "1765931e",
                "name": "100.105.ci36",
                "sha1": "49176ceea6cc003efa04fad2f31829b9432fe10f",
                "size": 2048
              }
            ],
            "name": "cp500.zip",
            "required": true,
            "source_ref": "src/mame/trs/trs80m3.cpp:572",
            "system": "trs80"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ee859c5f",
                "name": "994a_rom_hb.u610",
                "sha1": "a45245707c3dccea902b718554a882d214a82504",
                "size": 4096
              },
              {
                "crc32": "37859301",
                "name": "994a_rom_lb.u611",
                "sha1": "f4e774fd5913b387a763f1b8de5524c54b255434",
                "size": 4096
              },
              {
                "crc32": "2445a5e8",
                "name": "994a_grom0.u500",
                "sha1": "ea15d8b0ac52112dc0d5f4ab9a79ac8ca1cc1bbc",
                "size": 6144
              },
              {
                "crc32": "b8f367ab",
                "name": "994a_grom1.u501",
                "sha1": "3ecead4b83ec525084c70b6123d4053f8a80e1f7",
                "size": 6144
              },
              {
                "crc32": "e0bb5341",
                "name": "994a_grom2.u502",
                "sha1": "e255f0d65d69b927cecb8fcfac7a4c17d585ea96",
                "size": 6144
              }
            ],
            "name": "ti99_4a.zip",
            "required": true,
            "source_ref": "src/mame/ti/ti99_4x.cpp:1207",
            "system": "ti99"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f58b571",
                "name": "cd2325a.u2a",
                "sha1": "0ef4f178716b575a1c0c970c56af8a8d97561ffe",
                "size": 16384
              },
              {
                "crc32": "65d00401",
                "name": "cd2326a.u2b",
                "sha1": "a367242c2c96cebf0e2bf21862f3f6734b2b3020",
                "size": 16384
              }
            ],
            "name": "ti99_speech.zip",
            "required": true,
            "source_ref": "src/devices/bus/ti99/sidecar/speechsyn.cpp:242",
            "system": "ti99"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "702c38ba",
                "name": "tutor1.bin",
                "sha1": "ce60607c3038895e31915d41bb5cf71cb8522d7a",
                "size": 32768
              },
              {
                "crc32": "05f228f5",
                "name": "tutor2.bin",
                "sha1": "46a14a45f6f9e2c30663a2b87ce60c42768a78d0",
                "size": 16384
              }
            ],
            "name": "tutor.zip",
            "required": true,
            "source_ref": "src/mame/tomy/tutor.cpp:820",
            "system": "tutor"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6f4a0ea",
                "description": "BASIC v1.1",
                "name": "vg5k11.bin",
                "sha1": "58eccce33cc21fc17bc83921018f531b8001eda3",
                "size": 16384
              },
              {
                "bad_dump": true,
                "crc32": "57983260",
                "description": "BASIC v1.0",
                "name": "vg5k10.bin",
                "sha1": "5ad1787a6a597b5c3eedb7c3704b649faa9be4ca",
                "size": 16384
              },
              {
                "bad_dump": true,
                "crc32": "b2f49eb3",
                "name": "charset.rom",
                "sha1": "d0ef530be33bfc296314e7152302d95fdf9520fc",
                "size": 8192
              }
            ],
            "name": "vg5k.zip",
            "required": true,
            "source_ref": "src/mame/philips/vg5k.cpp:479",
            "system": "philips-vg5k"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d6cf5ef5",
                "name": "dl-1425.bin",
                "sha1": "555f50fe5cdf127619da7d854c03f4a244a0c501",
                "size": 8192
              }
            ],
            "name": "qsound.zip",
            "required": true,
            "source_ref": "src/devices/sound/qsound.cpp:121"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6f582d01",
                "name": "ym2413_instruments.bin",
                "sha1": "bb5537717e0b34849456b5ca7d405403dc3f8fda",
                "size": 144
              }
            ],
            "name": "ym2413.zip",
            "required": true,
            "source_ref": "src/devices/sound/ymopl.cpp:218"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "23c9e0d8",
                "name": "ym2608_adpcm_rom.bin",
                "sha1": "50b6c3e288eaa12ad275d4f323267bb72b0445df",
                "size": 8192
              }
            ],
            "name": "ym2608.zip",
            "required": true,
            "source_ref": "src/devices/sound/ymopn.cpp:76"
          },
          {
            "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:2904"
          },
          {
            "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:2906"
          },
          {
            "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:2907"
          },
          {
            "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:2910"
          },
          {
            "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:2913"
          },
          {
            "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:2916"
          },
          {
            "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:2922"
          },
          {
            "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:2925"
          },
          {
            "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:2927"
          },
          {
            "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:2930"
          },
          {
            "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:2933"
          },
          {
            "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:2936"
          },
          {
            "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:2939"
          },
          {
            "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:2946"
          },
          {
            "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": "e51ff184",
                "name": "galaxy_u2__v1.90_12-01-98.u2",
                "sha1": "aaa795f2c15ec29b3ceeb5c917b643db0dbb7083",
                "size": 1048576
              },
              {
                "crc32": "c6d7bc6d",
                "name": "galaxy_u1__v1.90_12-01-98.u1",
                "sha1": "93c032f9aa38cbbdda59a8a25ff9f38f7ad9c760",
                "size": 1048576
              },
              {
                "crc32": "73cff284",
                "name": "galaxy_u2__v1.80_10-15-98.u2",
                "sha1": "e6f7d92999cdb478c21c3b65a04eade84299ac12",
                "size": 1048576
              },
              {
                "crc32": "e3ae423c",
                "name": "galaxy_u1__v1.80_10-15-98.u1",
                "sha1": "66d1964845a99a5ed4b19b4135b55cde6b5fe295",
                "size": 1048576
              },
              {
                "crc32": "d1c3dbb3",
                "name": "galaxy_u2__v1.71_7-8-98.u2",
                "sha1": "ebe74ed7f2d8c4abcd6743b9d9c77cc347efc444",
                "size": 1048576
              },
              {
                "crc32": "604415c8",
                "name": "galaxy_u1__v1.71_7-8-98.u1",
                "sha1": "6c67c3be1aca03d009b6244e3bd911caaa2ca666",
                "size": 1048576
              }
            ],
            "name": "galgames.zip",
            "required": true,
            "source_ref": "src/mame/ces/galgames.cpp:1301"
          },
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, read from the working directory then from the plugin directory, where a copy ships",
            "path": "hiscore.dat",
            "required": false,
            "source_ref": "plugins/hiscore/init.lua:105,152-155"
          },
          {
            "aliases": [
              "cheat.zip"
            ],
            "category": "game_data",
            "name": "cheat.7z",
            "note": "per-game XML cheats read from cheatpath, archive opened by emu_file::attempt_zipped",
            "path": "cheat.7z",
            "required": false,
            "source_ref": "plugins/cheat/init.lua:99"
          },
          {
            "category": "game_data",
            "name": "history.xml",
            "note": "system and software history shown in the UI info viewer",
            "path": "history/history.xml",
            "required": false,
            "source_ref": "plugins/data/data_history.lua:5"
          },
          {
            "category": "game_data",
            "name": "mameinfo.dat",
            "note": "driver notes shown in the UI info viewer",
            "path": "history/mameinfo.dat",
            "required": false,
            "source_ref": "plugins/data/data_mameinfo.lua:6"
          },
          {
            "category": "game_data",
            "name": "messinfo.dat",
            "note": "computer and console driver notes shown in the UI info viewer",
            "path": "history/messinfo.dat",
            "required": false,
            "source_ref": "plugins/data/data_messinfo.lua:6"
          },
          {
            "category": "game_data",
            "name": "command.dat",
            "note": "move lists for fighting games, button glyphs converted on load",
            "path": "history/command.dat",
            "required": false,
            "source_ref": "plugins/data/data_command.lua:13"
          },
          {
            "category": "game_data",
            "name": "gameinit.dat",
            "note": "initial setup instructions per machine",
            "path": "history/gameinit.dat",
            "required": false,
            "source_ref": "plugins/data/data_gameinit.lua:5"
          },
          {
            "category": "game_data",
            "name": "sysinfo.dat",
            "note": "console and computer background information",
            "path": "history/sysinfo.dat",
            "required": false,
            "source_ref": "plugins/data/data_sysinfo.lua:5"
          },
          {
            "category": "game_data",
            "name": "story.dat",
            "note": "Mameinfo story file of game trivia",
            "path": "history/story.dat",
            "required": false,
            "source_ref": "plugins/data/data_story.lua:5"
          },
          {
            "category": "game_data",
            "name": "scores3.htm",
            "note": "MARP high score tables from replay.marpirc.net",
            "path": "history/scores3.htm",
            "required": false,
            "source_ref": "plugins/data/data_marp.lua:8"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "notes": "MAME fork adding Switchres 2.2.2 for CRT modeline generation, frame delay\nand low latency vsync. Branch groovymame0288, BARE_BUILD_VERSION 0.288\n(makefile:1508). TARGET := mame with no SUBTARGET override (makefile:274-282),\nso the build carries the full machine set.\n\nsrc/mame and src/devices are byte identical to mamedev/mame tag mame0288,\nso ROM requirements are MAME 0.288's. The fork's changes sit in src/osd and\n3rdparty/switchres and pull in no external data file: monitor presets are\ncompiled in (3rdparty/switchres/monitor.cpp:124-145), and switchres.ini plus\ndisplay#.ini are optional user configuration read only when the switchres_ini\noption is set (src/osd/modules/switchres/switchres_module.cpp:166,173).\n\n161 ROM sets: 78 carry MACHINE_IS_BIOS_ROOT, 67 are system ROM sets for\ncartridge and tape machines, 16 are device ROMs. Device archives are named\nafter the device shortname from DEFINE_DEVICE_TYPE, not the ROM_START label,\nbecause device_t::searchpath() puts shortname() first (src/emu/device.cpp:150):\nsegaai_soundbox.zip holds ROM_START(soundbox).\n\nrequired follows romload.cpp:547-566. A missing ROM increments m_errors and\naborts with EMU_ERR_MISSING_FILES (romload.cpp:667), except when it is\nROM_OPTIONAL or NO_DUMP, which only warn and let the machine run. mac2bios is\nthe one set with no good dump known, so it warns rather than aborts.\n\nROM sets load from rompath. Data files use their own search paths:\nhistorypath \"history;dats;.\" (src/frontend/mame/ui/moptions.cpp:24),\ncheatpath \"cheat\" and pluginspath \"plugins\" (src/emu/emuopts.cpp:51,53).\nemu_file::attempt_zipped() rewrites each directory component to <dir>.zip\nthen <dir>.7z (src/emu/fileio.cpp:713-743), so the cheat collection is read\nfrom cheat.7z or cheat.zip without unpacking.\n\nThe data plugin reads history.xml, not the legacy history.dat, whose stale\ndatabase table it drops on startup (plugins/data/data_history.lua:5,10-13).\n\nBatocera builds its mame package from this fork\n(package/batocera/emulators/mame/mame.mk:8).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/antonioginer/GroovyMAME",
        "source_commit": "e3fa130578a12f332f5e403d52a0be1e0395103e",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-lindbergh",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "konami-twinkle",
          "panasonic-3do",
          "hyper-neogeo64",
          "apple2gs",
          "apf-m1000",
          "bally-astrocade",
          "coleco-adam",
          "crvision",
          "entex-advision",
          "sega-ai",
          "sega-beena",
          "bandai-rx78",
          "camplynx",
          "tiger-game-com",
          "gamepark-gp32",
          "gamate",
          "gamepock",
          "hartung-game-master",
          "fm7",
          "laser310",
          "vtech-socrates",
          "vtech-vsmile",
          "casio-loopy",
          "casio-pv1000",
          "casio-pv2000",
          "pegasus",
          "pcw",
          "interton-vc4000",
          "philips-vg5k",
          "ti99",
          "tutor",
          "tandy-vis",
          "trs80",
          "vgmplay"
        ],
        "type": "standalone",
        "upstream": "https://github.com/mamedev/mame"
      }
    },
    {
      "id": "gsplus",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "KEGS 1.38",
        "cores": [
          "gsplus"
        ],
        "display_name": "Apple - Apple IIGS (GSplus)",
        "emulator": "GSplus",
        "files": [
          {
            "aliases": [
              "ROM.01",
              "ROM.03",
              "APPLE2GS.ROM",
              "APPLE2GS.ROM2",
              "xgs.rom",
              "XGS.ROM",
              "Rom03gd",
              "342-0077-b"
            ],
            "description": "Apple IIGS system ROM",
            "name": "ROM",
            "note": "Accepted sizes: 32768 (Apple //e), 131072 (ROM 01), 262144 (ROM 03)",
            "required": true,
            "source_ref": "gsplus/src/config.c:131,403-406,1092-1149",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "controller.rom",
              "disk.rom",
              "DISK.ROM",
              "diskII.prom"
            ],
            "description": "Disk II controller PROM (slot 6)",
            "hle_fallback": true,
            "name": "c600.rom",
            "note": "Built-in PROM generated from XOR diffs against main ROM",
            "required": false,
            "size": 256,
            "source_ref": "gsplus/src/config.c:414-415,1168-1220",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Fork of KEGS (Kent's Emulated GS) by digarok. Cross-platform Apple IIGS\nemulator supporting ROM 01 (128K), ROM 03 (256K), and Apple //e (32K) ROMs.\nROM version determined by file size at load time.\n\nBatocera configgen (gsplusGenerator.py) sets g_cfg_rom_path to bios/ROM.03\nby default (configurable via gsplus_bios_filename system setting).\n\nBuilt-in Disk II controller PROM derived via XOR diffs from main ROM.\nBuilt-in HD SmartPort PROM (slot 7) hardcoded in source.\nBuilt-in character font (kegsfont.h), optional ROMX-compatible charrom\nloadable via config UI.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/digarok/gsplus",
        "source_commit": "47389939d652bb1e773f8dc686d8b0403ea3760f",
        "systems": [
          "apple-iigs",
          "apple-iie"
        ],
        "type": "standalone",
        "upstream": "https://kegs.sourceforge.net/"
      }
    },
    {
      "id": "gw",
      "profile": {
        "analysis": {
          "content_format": {
            "archive_type": "tar v7 + bzip2",
            "decompression": "gwrom.c using bundled bzip2 library",
            "extension": ".mgw",
            "source_ref": "gwrom/gwrom.h:21-27"
          },
          "filesystem_access": false,
          "game_engine": {
            "language": "Lua (bundled lua 5.3)",
            "rendering": "retroluxury (retroluxury/)",
            "resolution": "128x128 base, variable via gwlua_set_fb/gwlua_zoom",
            "runtime": "gwlua (gwlua/)"
          },
          "system_directory_used": false
        },
        "core_classification": "pure_libretro",
        "core_version": "Git",
        "cores": [
          "gw"
        ],
        "display_name": "Handheld Electronic (GW)",
        "emulator": "Game & Watch",
        "files": [],
        "notes": "gw-libretro runs Game & Watch simulators converted from MADrigal's Pascal\nsource code via pas2lua. Each game is a self-contained .mgw archive (bzip2\ncompressed tar v7) containing Lua scripts, sprites, and sound data.\n\nretro_get_system_info (libretro.c:187-194) sets valid_extensions to \"mgw\",\nneed_fullpath to false, and block_extract to false. The core reads content\nentirely from the retro_game_info buffer passed by the frontend.\n\nretro_load_game (libretro.c:256-310) passes the content buffer to\ngwrom_init() which decompresses and parses the tar archive in memory.\ngwlua_create() then initializes the Lua VM from the archive entries.\n\nThe core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, never opens\nfiles from the filesystem, and has no firmware or BIOS dependencies.\nAll game data is bundled in the .mgw content files available from\nlibretro's buildbot (bot.libretro.com/assets/cores/HandheldElectronicGame/).\n\nNo external BIOS or firmware files are needed.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/gw-libretro",
        "source_commit": "435e5cfd4bf6aea03a84259e9b8dba3daf3ff5bd",
        "systems": [
          "handheld-electronic"
        ],
        "type": "libretro",
        "upstream": "http://www.madrigaldesign.it/sim/"
      }
    },
    {
      "id": "hakux",
      "profile": {
        "author": "rfandango",
        "core_classification": "community_fork",
        "core_version": "0.3.1",
        "cores": [
          "hakux"
        ],
        "display_name": "Microsoft - Xbox (hakuX)",
        "emulator": "hakuX",
        "exclusion_note": "Three file loads present in the tree are not reached by this build and are not listed. hw/xbox/chihiro.c falls back to the media board ROM fpr21042_m29w160et.bin when no path is given, and maps a media board filesystem image beside it, but the whole driver is filtered out of the source list, so no Chihiro machine exists here. X1_Covers.xml ships in the assets and no code opens it, the library reading X1_Covers.txt instead. ref: hw/xbox/chihiro.c:191-253, 279-284,\n     android/app/src/main/cpp/CMakeLists.txt:468,\n     android/app/src/main/java/com/rfandango/haku_x/GameLibraryActivity.kt:403\n",
        "files": [
          {
            "config_key": "sys.files.bootrom_path",
            "description": "MCPX southbridge boot ROM",
            "name": "mcpx_1.0.bin",
            "note": "Copied under the fixed name mcpx.bin from whatever .bin, .rom or .img file the wizard is pointed at, and named by bootrom_path in the config. A size other than 512 bytes empties the setting and the machine property is left off; when the property is set the loader checks the size again and ends the process rather than continue. The bytes are read over the last 512 of the flash image and the region stays writable so early retail kernels keep their cache quirk.",
            "path": "x1box/mcpx.bin",
            "required": true,
            "size": 512,
            "source_ref": "system/vl.c:2998-3022, hw/xbox/xbox.c:144-172, android/app/src/main/java/com/rfandango/haku_x/SetupWizardActivity.kt:53-74, android/app/src/main/cpp/xemu_android.cpp:669, 748-760",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "sys.files.flashrom_path",
            "description": "Xbox flash ROM",
            "name": "Complex_4627.bin",
            "note": "Copied under the fixed name flash.bin and passed as -bios. A path that cannot be opened queues an error and clears autostart, so nothing runs without it. The image is mapped at 0xFF000000 and mirrored to the top of the address space; a size that is zero or not a multiple of 64 KB, or a short read, falls back to 256 KB filled with 0xFF. A retail image cannot launch unsigned code, so a debug or modified image is what boots a title.",
            "path": "x1box/flash.bin",
            "required": true,
            "size_note": "Any non-zero multiple of 65536; 256 KB is assumed when the image cannot be read.",
            "size_options": [
              262144,
              524288,
              1048576
            ],
            "source_ref": "system/vl.c:3057-3072, hw/xbox/xbox.c:65-124, android/app/src/main/java/com/rfandango/haku_x/SetupWizardActivity.kt:76-97, android/app/src/main/cpp/xemu_android.cpp:670, 761-773",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "sys.files.hdd_path",
            "description": "Xbox hard disk image",
            "name": "xbox_hdd.qcow2",
            "note": "Copied under the fixed name hdd.img, in qcow2 or raw form, and attached as index 0 with locked=on and cache=writethrough. An empty setting attaches no drive at all and an unopenable one only queues a message, but the launcher refuses to leave the wizard until the file resolves. The formatter builds FATX partitions inside an image that already exists and needs at least 0x1DD156000 bytes for the retail layout; it never creates the image. A qcow2 with a backing file is reported at load because the sectors it did not modify are read from that other file.",
            "path": "x1box/hdd.img",
            "required": true,
            "source_ref": "system/vl.c:3078-3092, android/app/src/main/java/com/rfandango/haku_x/SetupWizardActivity.kt:99-120, android/app/src/main/java/com/rfandango/haku_x/XboxHddFormatter.kt:7-29, 47-79, android/app/src/main/cpp/xemu_android.cpp:176-184, 671-672, 774-795"
          },
          {
            "config_key": "sys.files.eeprom_path",
            "description": "Xbox EEPROM image",
            "name": "eeprom.bin",
            "note": "Always pointed at x1box/eeprom.bin, a path the wizard never asks for. Generated as XBOX_EEPROM_VERSION_R1 when it does not exist, so a dump is needed only to carry over a console serial, region or HDD key. It is attached through the smbus-storage device; a size other than 256 bytes, or a generation that fails, clears autostart. Preparing Insignia and the EEPROM editor write to it in place.",
            "path": "x1box/eeprom.bin",
            "required": false,
            "size": 256,
            "source_ref": "system/vl.c:2921-2964, 3045-3055, android/app/src/main/cpp/xemu_android.cpp:671, 711, android/app/src/main/java/com/rfandango/haku_x/SettingsActivity.kt:1264-1267",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Retail dashboard boot executable",
            "load_from": "hdd_image",
            "name": "xboxdash.xbe",
            "note": "Imported to the root of partition C from the C directory of a user dashboard tree. The import treats this name as the boot entry: when it is absent the best scoring .xbe of the tree is copied to it, and the retail boot counts as ready only once the name exists. The start path of the emulator never reads partition C, and preparing Insignia finishes with a warning when the name is missing.",
            "path": "C/xboxdash.xbe",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1796-1797, 1842-1843, 1864-1893, android/app/src/main/java/com/rfandango/haku_x/SettingsActivity.kt:2523-2563, 2584-2620"
          },
          {
            "description": "Retail dashboard executable kept beside the boot copy",
            "load_from": "hdd_image",
            "name": "msdash.xbe",
            "note": "Probed at the root of partition C and imported with the rest of the tree. Its presence beside the boot XBE is one of the marks the status line reads to call a dashboard install complete.",
            "path": "C/msdash.xbe",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1798-1799, 1844-1845, android/app/src/main/java/com/rfandango/haku_x/XboxInsigniaHelper.kt:13, 42-50"
          },
          {
            "description": "Dashboard typeface",
            "load_from": "hdd_image",
            "name": "xbox.xtf",
            "note": "Probed at the root of partition C and imported with the rest of the tree, alongside the xodash, audio, fonts and xboxdashdata.* directories the root scan looks for.",
            "path": "C/xbox.xtf",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1800-1801, 1846-1847, 1786-1794, android/app/src/main/java/com/rfandango/haku_x/XboxInsigniaHelper.kt:14-16"
          },
          {
            "description": "Replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Imported through a picker into gpu_drivers under the external files directory, renamed after the name field of the meta.json it carries, then unpacked whole into gpu_driver in internal storage. The minApi field is compared against the device before the archive is kept. Loading is offered only when /dev/kgsl-3d0 exists, and clearing the install directory returns the app to the system driver.",
            "required": false,
            "source_ref": "android/app/src/main/java/com/rfandango/haku_x/GpuDriverHelper.kt:19-35, 37-70, 72-99, 101-104, 138-165",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          },
          {
            "description": "Replacement texture",
            "name": "<content hash>.png",
            "note": "Taken from a folder of per-title subdirectories, copied into texture_replace in internal storage, and read back by the Vulkan renderer from the subdirectory named after the title id of the running XBE in eight hexadecimal digits. A name is kept only when the stem is sixteen hexadecimal digits, which is the content hash of the texture it replaces; each PNG is decoded to a .raw sidecar carrying width and height and mapped from there. Off unless the setting is on and the folder is set.",
            "required": false,
            "source_ref": "hw/xbox/nv2a/pgraph/vk/texture_replace.c:227-320, 331-377, 388-435, android/app/src/main/java/com/rfandango/haku_x/GameLibraryActivity.kt:904-990, android/app/src/main/java/com/rfandango/haku_x/MainActivity.kt:105-113",
            "unsourceable": "texture pack authored per title against the hashes one dump produces"
          },
          {
            "bundled": true,
            "description": "SDL controller mapping database",
            "name": "gamecontrollerdb.txt",
            "note": "Read from the assets of the package at startup and handed to SDL as a memory stream. The asset manager reads inside the archive and the path is a constant, so there is no search order and nothing outside the package replaces this copy; an added pad mapping goes in through controller_map.txt instead. The revision shipped here is 589031 bytes and is not the one other releases carry under this name.",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_android.cpp:193-268",
            "unsourceable": "opened through the asset manager inside the package, so no file on disk reaches this load"
          },
          {
            "bundled": true,
            "description": "Cover art index for the game library",
            "name": "X1_Covers.txt",
            "note": "Read from the assets and turned into a lookup from normalised game name to a URL under the X1_Covers repository, which the library fetches and caches per title. Only lines ending in .png are kept.",
            "required": false,
            "source_ref": "android/app/src/main/java/com/rfandango/haku_x/GameLibraryActivity.kt:59, 398-430"
          },
          {
            "description": "Extra SDL controller mappings",
            "load_from": "internal_storage",
            "name": "controller_map.txt",
            "note": "SDL builds this path from the internal storage directory of the package when SDL_GAMECONTROLLERCONFIG_FILE is unset, which it is here, and reads it while the game controller subsystem starts, after the mappings compiled in and before the ones the environment carries. It is the one mapping file a user can add without rebuilding the package. The SDL2 tree in thirdparty is what the build compiles, the local checkout taking precedence over the release archive CMake would otherwise fetch.",
            "required": false,
            "source_ref": "thirdparty/SDL2/src/joystick/SDL_gamecontroller.c:1873-1884, 1890-1916, android/app/src/main/cpp/CMakeLists.txt:26-34"
          }
        ],
        "mode": "standalone",
        "notes": "Original Xbox emulator for Android, package com.rfandango.haku_x, arm64-v8a,\ntuned for Adreno. A Kotlin front end carries the launcher, setup wizard, game\nlibrary and settings, and drives a whole xemu tree built through CMake against\nSDL2 and QEMU 10.2.0, the tree branching off the day before xemu moved to SDL3.\nThe imgui interface under ui/xui is filtered out of the source list and the\nHUD, monitor and snapshot entry points are stubbed, so that front end is the\nonly interface. ES-DE starts .LauncherActivity with an intent VIEW whose data\nURI becomes the disc slot before emulation opens.\nref: QEMU_VERSION,\n     android/README.md:36-39,\n     android/app/build.gradle.kts:33-34,\n     android/app/src/main/AndroidManifest.xml:13-30,\n     android/app/src/main/cpp/CMakeLists.txt:423-424,\n     android/app/src/main/cpp/xemu_hud_stub.c,\n     android/app/src/main/cpp/monitor_stub.c,\n     android/app/src/main/cpp/xemu_snapshots_stub.c,\n     android/app/src/main/java/com/rfandango/haku_x/LauncherActivity.kt:94-104\n\nThe wizard asks for three files through the Storage Access Framework and\ncopies each into x1box under the external files directory of the package,\nrenamed mcpx.bin, flash.bin and hdd.img. The pickers keep .bin, .rom and .img\nfor the two ROMs and .qcow2 and .img for the disk, and each step stays blocked\nuntil its copy lands. Those three paths, the eeprom the wizard never asks for\nand the disc are written to x1box/xemu.toml under sys.files, and the launcher\nsends the user back through the wizard whenever one of them stops resolving.\nref: android/app/src/main/java/com/rfandango/haku_x/SetupWizardActivity.kt:49-51,\n     53-120, 249-255, 350-378,\n     android/app/src/main/java/com/rfandango/haku_x/LauncherActivity.kt:31-92,\n     android/app/src/main/cpp/xemu_android.cpp:669-673, 709-711, 748-820\n\nThe flash image is the only one whose absence stops the run: it is passed as\n-bios and a path that cannot be opened clears autostart. Its size must be a\nnon-zero multiple of 64 KB, otherwise 256 KB of 0xFF is mapped in its place.\nThe MCPX image must be exactly 512 bytes, another size clears the path with an\nerror, and the machine property is checked a second time and ends the process\nwhen it disagrees; the bytes are overlaid on the last 512 of the mirrored flash\nregion. The EEPROM must be 256 bytes and is generated as\nXBOX_EEPROM_VERSION_R1 when the path does not exist. An empty disk path\nattaches no drive at index 0 at all, while the disc drive at index 1 is always\nattached and simply carries no media when no image is picked.\nref: system/vl.c:2921-2964, 2998-3022, 3057-3072, 3078-3092, 3094-3113,\n     hw/xbox/xbox.c:65-104, 144-166\n\nSettings imports a dashboard tree from a ZIP or a folder into the FATX\npartitions of the configured disk image, C at 0x8CA80000 and E at 0xABE80000,\nmoving the entries it overwrites to a backup folder first. A source that has\nneither a C nor an E directory goes to C whole. The tree is searched for a boot\nXBE beforehand and the best candidate is copied to C/xboxdash.xbe when that\nname is missing, xboxdash.xbe, default.xbe, evoxdash.xbe, avalaunch.xbe,\nunleashx.xbe, xbmc.xbe and nexgen.xbe scoring in that order. The status line\nprobes C for xboxdash.xbe, msdash.xbe, xbox.xtf and the directories xodash,\naudio, fonts and xboxdashdata.*, and calls the install complete when the boot\nXBE sits beside at least one of the others.\nref: android/app/src/main/cpp/xemu_fatx_import.c:51-54, 1704-1730, 1763-1862,\n     1864-1927,\n     android/app/src/main/java/com/rfandango/haku_x/XboxInsigniaHelper.kt:10-53,\n     android/app/src/main/java/com/rfandango/haku_x/SettingsActivity.kt:2523-2620,\n     2661-2708\n\nPreparing Insignia networking turns the NAT backend on and writes the DNS\n46.101.64.175 into the config sector of the disk image and into the EEPROM at\n0xAC. Registration boots a Setup Assistant image the user picks, which is put\nin the disc slot like any other game.\nref: android/app/src/main/java/com/rfandango/haku_x/XboxInsigniaHelper.kt:7-8,\n     56-86,\n     android/app/src/main/java/com/rfandango/haku_x/XboxEepromEditor.kt:17,\n     android/app/src/main/java/com/rfandango/haku_x/SettingsActivity.kt:1764-1766,\n     1830-1847\n\nThe disk tools format an image that is already configured and never create one:\na retail layout needs at least 0x1DD156000 bytes and the extended F and G\nlayouts need room past that boundary. The EEPROM editor rewrites language,\nvideo standard, resolution flags, aspect ratio and refresh rate in place, and\nrecomputes both checksums.\nref: android/app/src/main/java/com/rfandango/haku_x/XboxHddFormatter.kt:7-29,\n     47-79,\n     android/app/src/main/java/com/rfandango/haku_x/XboxEepromEditor.kt:9-38,\n     android/app/src/main/cpp/xemu_hdd_tools_jni.c:932-983\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/rfandango/hakuX",
        "source_commit": "e64e336d27dc8a56b67f441ec36bfddc1379cb6e",
        "systems": [
          "microsoft-xbox"
        ],
        "type": "standalone",
        "upstream": "https://github.com/xemu-project/xemu",
        "upstream_commit": "26fcbe54f17e496bdf530dad9f237e74e2f943fc"
      }
    },
    {
      "id": "handy",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.95",
        "cores": [
          "handy"
        ],
        "display_name": "Atari - Lynx (Handy)",
        "emulator": "Handy",
        "files": [
          {
            "crc32": "0d973c9d",
            "description": "Atari Lynx boot ROM (Mikie internal 512B ROM)",
            "hle_fallback": true,
            "name": "lynxboot.img",
            "note": "Validated by CRC32 at load time. If invalid or missing, core uses HLE fallback (system.cpp:303-361 HLE_BIOS_* functions, system.cpp:406-428 trap writes).",
            "required": false,
            "size": 512,
            "source_ref": "lynx/rom.h:48-49 (ROM_SIZE=0x200, ROM_CRC32=0x0D973C9D), lynx/rom.cpp:76-129 (CRom constructor), libretro/libretro.cpp:1231-1258 (bios path + CSystem init)",
            "system": "atari-lynx",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "description": "Epyx Howard bootloader for headerless cartridges",
            "name": "howard.o",
            "note": "Loaded only for headerless carts (no LNX/BS93 header). Resolved relative to the BIOS file path (system directory). Passed to CRam for execution. Most commercial games have headers and skip this entirely.",
            "required": false,
            "source_ref": "lynx/system.cpp:197-238 (CartHeaderLess check, howard.o load via fill_pathname_resolve_relative)",
            "system": "atari-lynx"
          }
        ],
        "notes": "Handy is an Atari Lynx emulator by K. Wilkins (Handy 0.95, 2007).\nThe core loads lynxboot.img from the system directory and validates\nit by CRC32 (0x0D973C9D). If the file is missing or the CRC does\nnot match, the core falls back to an internal HLE BIOS that\nreplicates the boot sequence in software (ram clear, cart loader\ndecrypt, jump to $0200).\n\nThe HLE path intercepts CPU calls to ROM addresses FE00, FE19, FE4A\nand FF80 via a Mikie register write trap (address 0xFD97). When\nuseEmu is true (no valid BIOS loaded), CRom initialises mRomData\nwith a default fill byte (0x88) plus reset vectors pointing to\nthe HLE entry points.\n\nUpstream Handy 0.95 requires the BIOS (throws CLynxException) and\nvalidates by checking the first 16 bytes against a hardcoded\nsignature. The libretro port added the HLE fallback and switched\nto full CRC32 validation.\n\nFor headerless cartridges (no LNX/BS93 header), the core loads\nhoward.o from the system directory. This is the Epyx development\nkit bootloader used to bootstrap raw/headerless ROMs into memory.\nUpstream requires howard.o for headerless carts (throws exception);\nthe libretro port makes it optional (logs error, continues).\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/libretro-handy",
        "source_commit": "bc55d462f0b2d6b073ea93dc552ebd73cec60fd1",
        "systems": [
          "atari-lynx"
        ],
        "type": "libretro",
        "upstream": "https://handy.sourceforge.net/"
      }
    },
    {
      "id": "hatari",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "1.8",
        "cores": [
          "hatari",
          "hatarib"
        ],
        "display_name": "Atari - ST/STE/TT/Falcon (Hatari)",
        "emulator": "Hatari",
        "files": [
          {
            "name": "tos.img",
            "note": "TOS ROM image. Any valid version (1.00 through 4.04) or EmuTOS works. The core auto-detects version from the ROM header and adjusts machine type. Default location is system/tos.img, additional images go in system/hatari/tos/.\n",
            "path": "tos.img",
            "required": true,
            "source_ref": "src/tos.c:575-696, libretro/libretro.c:390-413"
          },
          {
            "max_size": 131076,
            "name": "cartridge ROM",
            "note": "External cartridge image. Loaded to address 0xFA0000. STC format images (0x20004 bytes) have a 4-byte header that is stripped. Mutually exclusive with GEMDOS hard disk emulation and extended VDI.\n",
            "path": null,
            "required": false,
            "source_ref": "src/cart.c:53-88",
            "validation": [
              "size"
            ]
          },
          {
            "name": "BOOT.ST",
            "note": "Floppy image used for GEMDOS HD bootstrapping with .gem files. Libretro port addition (not in upstream Hatari).\n",
            "path": "hatari/BOOT.ST",
            "required": false,
            "source_ref": "libretro/libretro.c:1669"
          }
        ],
        "logo": "https://raw.githubusercontent.com/hatari/hatari/main/share/icons/hicolor/scalable/apps/hatari.svg",
        "notes": {
          "emutos_note": "EmuTOS is a free open-source TOS replacement that works with all machine types. Hatari detects it via the 'ETOS' signature at ROM offset 0x2c and skips machine-type enforcement and ROM patches.\n",
          "gemdos_boot_note": "When using GEMDOS hard disk mode with .gem files, the core also loads system/hatari/BOOT.ST as a floppy image for bootstrapping.\n",
          "libretro_path_note": "The libretro core checks system/tos.img first for backward compatibility, then scans system/hatari/tos/ for additional TOS images exposed as core options.\n"
        },
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/hatari",
        "source_commit": "92e2874e664be40e1b51b97e0ff925a1aa917f22",
        "systems": [
          "atari-st",
          "atari-ste",
          "atari-tt",
          "atari-falcon"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/hatari/hatari"
      }
    },
    {
      "id": "hbmame",
      "profile": {
        "author": "Robbbert",
        "based_on": "MAME 0.220",
        "core_classification": "enhanced_fork",
        "core_version": "Git",
        "cores": [
          "hbmame"
        ],
        "display_name": "Arcade (HBMAME)",
        "emulator": "HBMAME (Homebrew MAME)",
        "exclusion_note": "BIOS ROMs are inside parent ROM set ZIPs (neogeo.zip, etc.) following MAME convention. No standalone system directory files.",
        "files": [],
        "game_count": 8511,
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "notes": "Fork of MAME 0.220 preserving homebrew and hacked arcade games. Builds as\nTARGET=hbmame with 191 driver files covering 8511 game entries. Drivers are\nhack/homebrew variants of CPS1, CPS2, CPS3, Neo Geo, Pac-Man, Galaxian, etc.\n\nBIOS handling is identical to MAME. Neo Geo drivers reuse the standard\nneogeo.zip BIOS set via unmodified NEO_BIOS macros (neogeo.h). No other\nHBMAME driver defines ROM_SYSTEM_BIOS entries. BIOS files are expected as\nMAME-format ZIP archives in the ROM search path.\n\nData directories (artwork, cheat, hash, ini, samples) can be placed in\n{system_dir}/mame/ but are optional and game-specific.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/hbmame-libretro",
        "source_commit": "8cd20238f85126adac06d4e419c8f712142e62cd",
        "systems": [
          "arcade"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Robbbert/hbmame"
      }
    },
    {
      "id": "higan_sfc",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v105 (Super Famicom Accuracy)",
        "cores": [
          "higan_sfc"
        ],
        "display_name": "Nintendo - SNES / Famicom (higan Accuracy)",
        "emulator": "higan (SFC Accuracy)",
        "files": [
          {
            "name": "dsp1.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:457-502",
            "system": "nintendo-snes"
          },
          {
            "name": "cx4.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:405-454",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:362-402",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "required": false,
            "source_ref": "nSide/sfc/cartridge/load.cpp:362-402",
            "system": "nintendo-snes"
          },
          {
            "name": "SGB1.sfc/sgb1.boot.rom",
            "required": false,
            "source_ref": "nSide/gb/system/system.cpp:54-65",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB1.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB2.sfc/sgb2.boot.rom",
            "required": false,
            "source_ref": "nSide/gb/system/system.cpp:54-65",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB2.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215",
            "system": "nintendo-sgb"
          }
        ],
        "notes": "Fork of higan v106 by hex-usr, renamed at byuu's request. Dot-based\nPPU profile (cycle-accurate, most demanding). Current nSide source\nblocks accuracy build (#error at libretro.cpp:39, libretro-sfc.cpp:8).\nCore is orphaned from an older nSide revision.\nCoprocessor firmware loaded via icarus manifest system from system_dir.\nFile names follow icarus convention: {identifier}.{content}.rom.\nSGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories,\nwith fallback to SGB.sfc/ and Super GameBoy.sfc/.\nSPC700 IPL ROM (ipl.rom, 64 bytes) compiled into binary.\nAccuracy and balanced cartridge loading code is identical.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/nSide",
        "source_commit": "5e965d0db4c0d05e7e8fb6449035538781c73473",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb"
        ],
        "type": "libretro",
        "upstream": "https://github.com/byuu/higan"
      }
    },
    {
      "id": "higan_sfc_balanced",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v105 (Super Famicom Balanced)",
        "cores": [
          "higan_sfc_balanced"
        ],
        "display_name": "Nintendo - SNES / Famicom (nSide Balanced)",
        "emulator": "nSide (SFC Balanced)",
        "files": [
          {
            "name": "dsp1.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp1b.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp2.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp3.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "dsp4.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:457-501",
            "system": "nintendo-snes"
          },
          {
            "name": "cx4.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:405-454",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st010.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st011.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:504-548",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.data.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:362-402",
            "system": "nintendo-snes"
          },
          {
            "name": "st018.program.rom",
            "required": false,
            "source_ref": "nSide/sfc-balanced/cartridge/load.cpp:362-402",
            "system": "nintendo-snes"
          },
          {
            "name": "SGB1.sfc/sgb1.boot.rom",
            "required": false,
            "source_ref": "nSide/gb/system/system.cpp:54-65",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB1.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB2.sfc/sgb2.boot.rom",
            "required": false,
            "source_ref": "nSide/gb/system/system.cpp:54-65",
            "system": "nintendo-sgb"
          },
          {
            "name": "SGB2.sfc/program.rom",
            "required": false,
            "source_ref": "nSide/target-libretro/libretro-sfc.cpp:179-215",
            "system": "nintendo-sgb"
          }
        ],
        "notes": "Fork of higan v106 by hex-usr, renamed at byuu's request. Balanced\nPPU profile (scanline-precision, faster than dot-based accuracy).\nCoprocessor firmware loaded via icarus manifest system from system_dir.\nFile names follow icarus convention: {identifier}.{content}.rom.\nSGB emulation loads from SGB1.sfc/ or SGB2.sfc/ subdirectories,\nwith fallback to SGB.sfc/ and Super GameBoy.sfc/.\n",
        "profiled_date": "2026-03-23",
        "source": "https://github.com/libretro/nSide",
        "source_commit": "5e965d0db4c0d05e7e8fb6449035538781c73473",
        "systems": [
          "nintendo-snes",
          "nintendo-sgb"
        ],
        "type": "libretro",
        "upstream": "https://gitlab.com/higan/higan"
      }
    },
    {
      "id": "holani",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.9.9",
        "cores": [
          "holani"
        ],
        "display_name": "Atari - Lynx (Holani)",
        "emulator": "Holani",
        "files": [
          {
            "description": "Atari Lynx boot ROM",
            "hle_fallback": true,
            "name": "lynxboot.img",
            "required": false,
            "size": 512,
            "source_ref": "src/lib.rs:110-124 (bios load), src/rom.rs:72-79 (size validation)",
            "system": "atari-lynx",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Holani is a cycle-stepped Atari Lynx emulator written in Rust by LLeny.\nThe libretro port (holani-retro) loads lynxboot.img from the system\ndirectory at retro_load_game time (lib.rs:110-124). Path is built as\nsystem_directory + \"/lynxboot.img\", no subdirectory.\n\nThe core library (holani/src/rom.rs) embeds a free boot ROM from\nhttps://bjoern.spruck.net/lynx/ as FREE_BOOTROM (512 bytes), used as\nthe default when no external ROM is loaded (Rom::default()). The\nlibretro wrapper attempts to load the real lynxboot.img, but if the\nfile is missing or the system directory is invalid, Lynx::new() already\nhas the free boot ROM initialized. No hash validation on the external\nfile; Rom::from_slice() only checks length == 512.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/LLeny/holani-retro",
        "source_commit": "19b974f77247a937369adf48280d2b34a5a66245",
        "systems": [
          "atari-lynx"
        ],
        "type": "libretro",
        "upstream": "https://github.com/LLeny/holani",
        "verification": "existence"
      }
    },
    {
      "id": "hypseus-singe",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "v3.0.0",
        "cores": [
          "hypseus-singe",
          "hypseus"
        ],
        "display_name": "Arcade (Hypseus Singe)",
        "emulator": "Hypseus Singe",
        "files": [
          {
            "category": "game_data",
            "name": "gamecontrollerdb.txt",
            "note": "SDL gamepad mappings, read under -gamepad when present. Not shipped with the emulator",
            "required": false,
            "source_ref": "src/io/input.cpp:981-996",
            "system": "arcade-laserdisc"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "427522d0",
                "name": "sa_a3_u1.bin",
                "size": 8192
              },
              {
                "crc32": "18d0262d",
                "name": "sa_a3_u2.bin",
                "size": 8192
              },
              {
                "crc32": "4646832d",
                "name": "sa_a3_u3.bin",
                "size": 8192
              },
              {
                "crc32": "57db2a79",
                "name": "sa_a3_u4.bin",
                "size": 8192
              },
              {
                "crc32": "85cbcdc4",
                "name": "sa_a3_u5.bin",
                "size": 8192
              }
            ],
            "name": "ace.zip",
            "note": "Space Ace rev A3. Loaded by ace, ace_a, ace_a2",
            "required": true,
            "source_ref": "src/game/lair.cpp:292",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "de93a213",
                "name": "ace91.bin",
                "size": 65536
              }
            ],
            "name": "ace91.zip",
            "note": "Space Ace '91",
            "required": true,
            "source_ref": "src/game/lair2.cpp:154",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "27dd0486",
                "name": "sa91euro1.3.bin",
                "size": 65536
              }
            ],
            "name": "ace91_euro.zip",
            "note": "Space Ace '91 Euro",
            "required": true,
            "source_ref": "src/game/lair2.cpp:157",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8eb1889e",
                "name": "sa_a_u1.bin",
                "size": 8192
              }
            ],
            "name": "ace_a.zip",
            "note": "Space Ace rev A",
            "required": true,
            "source_ref": "src/game/lair.cpp:323",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "71b39e27",
                "name": "sa_a2_u1.bin",
                "size": 8192
              }
            ],
            "name": "ace_a2.zip",
            "note": "Space Ace rev A2",
            "required": true,
            "source_ref": "src/game/lair.cpp:312",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a8c14612",
                "name": "sa_u33a.bin",
                "size": 8192
              },
              {
                "crc32": "41264d46",
                "name": "sa_u45a.bin",
                "size": 8192
              },
              {
                "crc32": "bc1c70cf",
                "name": "sa_u46a.bin",
                "size": 8192
              },
              {
                "crc32": "ff3f77c7",
                "name": "sa_u47a.bin",
                "size": 8192
              },
              {
                "crc32": "8c83ac81",
                "name": "sa_u48a.bin",
                "size": 8192
              },
              {
                "crc32": "03b58fc3",
                "name": "sa_u49a.bin",
                "size": 8192
              }
            ],
            "name": "aceeuro.zip",
            "note": "Space Ace PAL",
            "required": true,
            "source_ref": "src/game/laireuro.cpp:106",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8716aeb5",
                "name": "5279",
                "size": 512
              },
              {
                "crc32": "583af1ff",
                "name": "5280",
                "size": 2048
              },
              {
                "crc32": "7b5c820c",
                "name": "5281",
                "size": 2048
              },
              {
                "crc32": "eec6db27",
                "name": "5284",
                "size": 16384
              },
              {
                "crc32": "820e154e",
                "name": "5285",
                "size": 16384
              },
              {
                "crc32": "8eb1c28e",
                "name": "5286",
                "size": 16384
              },
              {
                "crc32": "94ca5f9a",
                "name": "5338",
                "size": 16384
              },
              {
                "crc32": "0f24baaa",
                "name": "5473c",
                "size": 16384
              },
              {
                "crc32": "5d44603d",
                "name": "5474a",
                "size": 16384
              },
              {
                "crc32": "0c872a9b",
                "name": "pr-5275.bin",
                "size": 32
              },
              {
                "crc32": "91267e8a",
                "name": "pr-5276.bin",
                "size": 32
              },
              {
                "crc32": "bf2c33ab",
                "name": "pr-5277.bin",
                "size": 256
              },
              {
                "crc32": "e81613da",
                "name": "pr-5278.bin",
                "size": 256
              }
            ],
            "name": "astron.zip",
            "note": "Astron Belt. Loaded by astron, astronp, blazer, cobraab, galaxy, galaxyp",
            "required": true,
            "source_ref": "src/game/astron.cpp:97",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "fd0dcfc9",
                "name": "abp-ic03.bin",
                "size": 16384
              },
              {
                "crc32": "a3746393",
                "name": "abp-ic10.bin",
                "size": 16384
              }
            ],
            "name": "astronp.zip",
            "note": "Astron Belt, alternate program ROMs",
            "required": true,
            "source_ref": "src/game/astron.cpp:97",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0226f881",
                "name": "bl_hit_4f.bin",
                "size": 32
              },
              {
                "crc32": "4c287f37",
                "name": "bl_hit_6a.bin",
                "size": 8192
              },
              {
                "crc32": "a135e444",
                "name": "bl_hit_7a.bin",
                "size": 8192
              },
              {
                "crc32": "44c3441e",
                "name": "bl_hit_9c.bin",
                "size": 8192
              }
            ],
            "name": "badlandp.zip",
            "note": "Badlands, prototype board",
            "required": true,
            "source_ref": "src/game/badlands.cpp:125",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a44776d6",
                "name": "badlands.a13",
                "size": 8192
              },
              {
                "crc32": "82cb4614",
                "name": "badlands.a14",
                "size": 8192
              },
              {
                "crc32": "6757be8d",
                "name": "badlands.c4",
                "size": 32
              },
              {
                "crc32": "590209fe",
                "name": "badlands.c8",
                "size": 8192
              }
            ],
            "name": "badlands.zip",
            "note": "Badlands",
            "required": true,
            "source_ref": "src/game/badlands.cpp:94",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "124a3a36",
                "name": "an00-3",
                "size": 8192
              },
              {
                "crc32": "15f8921d",
                "name": "an01",
                "size": 8192
              },
              {
                "crc32": "98ce4ca0",
                "name": "an02-3",
                "size": 8192
              },
              {
                "crc32": "79438d80",
                "name": "an03-3",
                "size": 8192
              },
              {
                "crc32": "935b2b0a",
                "name": "an04-3",
                "size": 8192
              },
              {
                "crc32": "c917a283",
                "name": "an05-3",
                "size": 8192
              },
              {
                "crc32": "cbbcd730",
                "name": "an06",
                "size": 8192
              },
              {
                "crc32": "6b8ad735",
                "name": "an07",
                "size": 8192
              },
              {
                "crc32": "b5518391",
                "name": "an08",
                "size": 8192
              },
              {
                "crc32": "b7375fd7",
                "name": "an09",
                "size": 8192
              },
              {
                "crc32": "e429305d",
                "name": "an0a",
                "size": 8192
              },
              {
                "crc32": "09e4b780",
                "name": "an0b",
                "size": 8192
              },
              {
                "crc32": "0c127207",
                "name": "an0c",
                "size": 8192
              }
            ],
            "name": "bega.zip",
            "note": "Bega's Battle ver. 3. Loaded by bega, begar1",
            "required": true,
            "source_ref": "src/game/bega.cpp:121",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "184297f3",
                "name": "an00",
                "size": 8192
              },
              {
                "crc32": "84d13c20",
                "name": "an02",
                "size": 8192
              },
              {
                "crc32": "d2d85cdf",
                "name": "an03",
                "size": 8192
              },
              {
                "crc32": "670966fe",
                "name": "an04",
                "size": 8192
              },
              {
                "crc32": "91a05549",
                "name": "an05",
                "size": 8192
              }
            ],
            "name": "begar1.zip",
            "note": "Bega's Battle rev 1",
            "required": true,
            "source_ref": "src/game/bega.cpp:156",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c06e41bb",
                "name": "epr-5590.bin",
                "size": 16384
              },
              {
                "crc32": "b179d18c",
                "name": "epr-5591.bin",
                "size": 16384
              }
            ],
            "name": "blazer.zip",
            "note": "Star Blazer",
            "required": true,
            "source_ref": "src/game/astron.cpp:143",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a86ec38f",
                "name": "cliff_u1.bin",
                "size": 8192
              },
              {
                "crc32": "b8d33b6b",
                "name": "cliff_u2.bin",
                "size": 8192
              },
              {
                "crc32": "75a64cd2",
                "name": "cliff_u3.bin",
                "size": 8192
              },
              {
                "crc32": "906b2af1",
                "name": "cliff_u4.bin",
                "size": 8192
              },
              {
                "crc32": "5922e710",
                "name": "cliff_u5.bin",
                "size": 8192
              }
            ],
            "name": "cliff.zip",
            "note": "Cliff Hanger",
            "required": true,
            "source_ref": "src/game/cliff.cpp:107",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8a3dff2c",
                "name": "cliff-0X_u0.bin",
                "size": 8192
              },
              {
                "crc32": "ec2c00a9",
                "name": "cliff-0X_u1.bin",
                "size": 8192
              },
              {
                "crc32": "3423c748",
                "name": "cliff-0X_u2.bin",
                "size": 8192
              },
              {
                "crc32": "60a8de46",
                "name": "cliff-0X_u3.bin",
                "size": 8192
              },
              {
                "crc32": "b05438f8",
                "name": "cliff-0X_u4.bin",
                "size": 8192
              }
            ],
            "name": "cliff_ox.zip",
            "note": "Cliff Hanger, 0X set",
            "required": true,
            "source_ref": "src/game/cliff.cpp:193",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "27caa67c",
                "name": "cliff_alt_0.bin",
                "size": 8192
              },
              {
                "crc32": "6e5f1515",
                "name": "cliff_alt_1.bin",
                "size": 8192
              },
              {
                "crc32": "045f895d",
                "name": "cliff_alt_2.bin",
                "size": 8192
              },
              {
                "crc32": "54cdb4a1",
                "name": "cliff_alt_3.bin",
                "size": 8192
              }
            ],
            "name": "cliffalt.zip",
            "note": "Cliff Hanger, alternate set",
            "required": true,
            "source_ref": "src/game/cliff.cpp:152",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "598d57fc",
                "name": "cliff_alt2_0.bin",
                "size": 8192
              },
              {
                "crc32": "7bce618e",
                "name": "cliff_alt2_1.bin",
                "size": 8192
              },
              {
                "crc32": "65d2b984",
                "name": "cliff_alt2_2.bin",
                "size": 8192
              },
              {
                "crc32": "f43a5269",
                "name": "cliff_alt2_3.bin",
                "size": 8192
              }
            ],
            "name": "cliffalt2.zip",
            "note": "Cliff Hanger, second alternate set",
            "required": true,
            "source_ref": "src/game/cliff.cpp:172",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6c0f1f16",
                "name": "au00-2",
                "size": 8192
              },
              {
                "crc32": "523dd8f6",
                "name": "au01-2",
                "size": 8192
              },
              {
                "crc32": "7db11acf",
                "name": "au02-2",
                "size": 8192
              },
              {
                "crc32": "8f0a8fba",
                "name": "au03-2",
                "size": 8192
              },
              {
                "crc32": "ccc94eb0",
                "name": "au06",
                "size": 8192
              },
              {
                "crc32": "d4bf12a5",
                "name": "au07",
                "size": 8192
              },
              {
                "crc32": "63158274",
                "name": "au08",
                "size": 8192
              },
              {
                "crc32": "74e93394",
                "name": "au09",
                "size": 8192
              },
              {
                "crc32": "6aaedcf3",
                "name": "au0a",
                "size": 8192
              },
              {
                "crc32": "92247877",
                "name": "au0b",
                "size": 8192
              },
              {
                "crc32": "d00a2762",
                "name": "au0c",
                "size": 8192
              }
            ],
            "name": "cobra.zip",
            "note": "Cobra Command",
            "required": true,
            "source_ref": "src/game/bega.cpp:189",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "079783c7",
                "name": "ic-1.bin",
                "size": 16384
              },
              {
                "crc32": "5a2e8f4e",
                "name": "ic-11.bin",
                "size": 2048
              },
              {
                "crc32": "4b89d7ed",
                "name": "ic-12.bin",
                "size": 2048
              },
              {
                "crc32": "3547a14c",
                "name": "ic-13.bin",
                "size": 512
              },
              {
                "crc32": "40c0b825",
                "name": "ic-2.bin",
                "size": 8192
              },
              {
                "crc32": "9e12b19c",
                "name": "ic-7.bin",
                "size": 8192
              },
              {
                "crc32": "201041c0",
                "name": "ic-8.bin",
                "size": 8192
              }
            ],
            "name": "cobraab.zip",
            "note": "Cobra Command on Astron Belt hardware",
            "required": true,
            "source_ref": "src/game/astron.cpp:318",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d9ad777",
                "name": "bd00",
                "size": 8192
              },
              {
                "crc32": "1b4db507",
                "name": "bd01",
                "size": 8192
              },
              {
                "crc32": "3d802707",
                "name": "bd02",
                "size": 8192
              },
              {
                "crc32": "f1b9df77",
                "name": "bd03",
                "size": 8192
              },
              {
                "crc32": "33013cc2",
                "name": "bd04",
                "size": 8192
              },
              {
                "crc32": "98412178",
                "name": "bd05",
                "size": 8192
              },
              {
                "crc32": "b1340125",
                "name": "bd06",
                "size": 8192
              },
              {
                "crc32": "584d714a",
                "name": "bd07",
                "size": 8192
              },
              {
                "crc32": "4bc65ab0",
                "name": "lp4-2.pld",
                "size": 554
              },
              {
                "crc32": "02c27aa0",
                "name": "vd0-c.bpr",
                "size": 32
              },
              {
                "crc32": "78449942",
                "name": "vd0-t.bpr",
                "size": 32
              }
            ],
            "name": "cobraconv.zip",
            "note": "Cobra Command conversion board",
            "required": true,
            "source_ref": "src/game/cobraconv.cpp:106",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c19ad038",
                "name": "bh00",
                "size": 8192
              },
              {
                "crc32": "7d86ab08",
                "name": "bh01",
                "size": 8192
              },
              {
                "crc32": "928ef670",
                "name": "bh02",
                "size": 8192
              },
              {
                "crc32": "755cbbf5",
                "name": "bh03",
                "size": 8192
              },
              {
                "crc32": "d8f49994",
                "name": "bh05",
                "size": 8192
              },
              {
                "crc32": "ab6c7cf1",
                "name": "bh06",
                "size": 8192
              },
              {
                "crc32": "f94668d2",
                "name": "bh07",
                "size": 8192
              },
              {
                "crc32": "d6439e2f",
                "name": "bh08",
                "size": 8192
              },
              {
                "crc32": "8c5dfac0",
                "name": "bh09",
                "size": 4096
              },
              {
                "crc32": "8b8da8dc",
                "name": "bh0a",
                "size": 4096
              }
            ],
            "name": "cobram3.zip",
            "note": "Cobra Command on M.A.C.H. 3 hardware",
            "required": true,
            "source_ref": "src/game/mach3.cpp:303",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7d0c9115",
                "name": "branchtest.bin",
                "size": 106
              },
              {
                "crc32": "aefca341",
                "name": "prog1.bin",
                "size": 113
              },
              {
                "crc32": "0c6c8ce9",
                "name": "prog2.bin",
                "size": 113
              },
              {
                "crc32": "c8d0edf6",
                "name": "savage.com",
                "size": 14080
              },
              {
                "crc32": "ecf70fd6",
                "name": "zexall.com",
                "size": 8704
              }
            ],
            "name": "cputest.zip",
            "note": "Z80 CPU test programs, shipped under roms/cputest/ in the emulator source. Loaded by cputest, mcputest",
            "required": true,
            "source_ref": "src/game/multicputest.cpp:61",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9e65b33d",
                "name": "dle11u1l.bin",
                "size": 8192
              },
              {
                "crc32": "f16fa36f",
                "name": "dle11u2l.bin",
                "size": 8192
              },
              {
                "crc32": "b8d07a16",
                "name": "dle11u3l.bin",
                "size": 8192
              },
              {
                "crc32": "20fc79b7",
                "name": "dle11u4l.bin",
                "size": 8192
              },
              {
                "crc32": "4bf84551",
                "description": "verified by CRC32 at boot, lair.cpp:197",
                "name": "readme11.txt"
              }
            ],
            "name": "dle11.zip",
            "note": "Dragon's Lair Enhancement v1.1",
            "required": true,
            "source_ref": "src/game/lair.cpp:178",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0aca15b4",
                "name": "DLE20_U1.bin",
                "size": 8192
              },
              {
                "crc32": "1cea7622",
                "name": "DLE20_U2.bin",
                "size": 8192
              },
              {
                "crc32": "21a7e7ca",
                "name": "DLE20_U3.bin",
                "size": 8192
              },
              {
                "crc32": "4ae26073",
                "name": "DLE20_U4.bin",
                "size": 8192
              },
              {
                "crc32": "51c50010",
                "description": "verified by CRC32 at boot, lair.cpp:261",
                "name": "readme20.txt"
              }
            ],
            "name": "dle20.zip",
            "note": "Dragon's Lair Enhancement v2.0",
            "required": true,
            "source_ref": "src/game/lair.cpp:242",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4f8af481",
                "name": "DLE21_U1.bin",
                "size": 8192
              },
              {
                "crc32": "5fca04c5",
                "name": "DLE21_U2.bin",
                "size": 8192
              },
              {
                "crc32": "c14f36b3",
                "name": "DLE21_U3.bin",
                "size": 8192
              },
              {
                "crc32": "a68f0d21",
                "description": "verified by CRC32 at boot, lair.cpp:268",
                "name": "readme21.txt"
              }
            ],
            "name": "dle21.zip",
            "note": "Dragon's Lair Enhancement v2.1",
            "required": true,
            "source_ref": "src/game/lair.cpp:224",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "abde5e4b",
                "name": "c5_h.bin",
                "size": 256
              },
              {
                "crc32": "7157ba22",
                "name": "c6_v.bin",
                "size": 256
              },
              {
                "crc32": "0e3b6e62",
                "name": "f8_is2.bin",
                "size": 8192
              },
              {
                "crc32": "114c912b",
                "name": "h8_is1.bin",
                "size": 8192
              },
              {
                "crc32": "1e9f795f",
                "name": "j1_rgb.bin",
                "size": 512
              },
              {
                "crc32": "a936ef01",
                "name": "k3_c.bin",
                "size": 4096
              },
              {
                "crc32": "9366dde7",
                "name": "l3_b.bin",
                "size": 4096
              },
              {
                "crc32": "a04736d8",
                "name": "m3_a.bin",
                "size": 4096
              }
            ],
            "name": "esh.zip",
            "note": "Esh's Aurunmilla. Loaded by esh, eshalt, eshalt2, eshfix7, eshfix7alt, eshfix7alt2",
            "required": true,
            "source_ref": "src/game/esh.cpp:96",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7a562f49",
                "name": "f8_alt1.bin",
                "size": 8192
              }
            ],
            "name": "eshalt.zip",
            "note": "Esh's Aurunmilla, alternate set 1",
            "required": true,
            "source_ref": "src/game/esh.cpp:124",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d27d363",
                "name": "h8_alt2.bin",
                "size": 8192
              }
            ],
            "name": "eshalt2.zip",
            "note": "Esh's Aurunmilla, alternate set 2. Loaded by eshalt2, eshfix7alt2",
            "required": true,
            "source_ref": "src/game/esh.cpp:146",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f05561d",
                "name": "f8_is2-fixed.bin",
                "size": 8192
              }
            ],
            "name": "eshfix7.zip",
            "note": "Esh's Aurunmilla, stage 7 fix",
            "required": true,
            "source_ref": "src/game/esh.cpp:168-183",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6b681736",
                "name": "f8_is2-fixed-alt.bin",
                "size": 8192
              }
            ],
            "name": "eshfix7alt.zip",
            "note": "Esh's Aurunmilla, stage 7 fix for alternate set 1",
            "required": true,
            "source_ref": "src/game/esh.cpp:190",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f05561d",
                "name": "f8_is2-fixed.bin",
                "size": 8192
              }
            ],
            "name": "eshfix7alt2.zip",
            "note": "Esh's Aurunmilla, stage 7 fix for alternate set 2",
            "required": true,
            "source_ref": "src/game/esh.cpp:212-227",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "91bba45a",
                "name": "136026.101",
                "size": 16384
              },
              {
                "crc32": "5f1e423d",
                "name": "136026.102",
                "size": 16384
              },
              {
                "crc32": "83f1d4ed",
                "name": "136026.105",
                "size": 16384
              },
              {
                "crc32": "c5d8d417",
                "name": "136026.106",
                "size": 16384
              },
              {
                "crc32": "7639270c",
                "name": "136026.109",
                "size": 16384
              },
              {
                "crc32": "f3102944",
                "name": "136026.110",
                "size": 16384
              },
              {
                "crc32": "8a230bb5",
                "name": "136026.111",
                "size": 16384
              },
              {
                "crc32": "8a32f9f1",
                "name": "136026.125",
                "size": 8192
              }
            ],
            "name": "firefox.zip",
            "note": "Firefox. Main program, four ROM banks and character graphics. Loaded by firefox, firefoxa",
            "required": true,
            "source_ref": "src/game/firefox.cpp:142",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "name": "136026.127",
                "size": 8192
              },
              {
                "name": "136026.201",
                "size": 16384
              },
              {
                "name": "136026.205",
                "size": 16384
              },
              {
                "name": "136026.209",
                "size": 16384
              },
              {
                "name": "136026.210",
                "size": 16384
              },
              {
                "name": "136026.211",
                "size": 16384
              }
            ],
            "name": "firefoxa.zip",
            "note": "Firefox alternate program and banks. Driver passes crc32 0, so no CRC check",
            "required": true,
            "source_ref": "src/game/firefox.cpp:170",
            "system": "arcade-laserdisc",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d13715f8",
                "name": "gr5592.bin",
                "size": 16384
              },
              {
                "crc32": "b0a557aa",
                "name": "gr5593.bin",
                "size": 16384
              },
              {
                "crc32": "4403ef5a",
                "name": "gr5594.bin",
                "size": 16384
              },
              {
                "crc32": "ccbaec4f",
                "name": "gr5595.bin",
                "size": 16384
              },
              {
                "crc32": "b16bdfe4",
                "name": "gr5611.bin",
                "size": 16384
              },
              {
                "crc32": "e312d080",
                "name": "gr5612.bin",
                "size": 16384
              },
              {
                "crc32": "398f6b23",
                "name": "gr5633.bin",
                "size": 16384
              },
              {
                "crc32": "2c5be1b7",
                "name": "gr5634.bin",
                "size": 16384
              }
            ],
            "name": "galaxy.zip",
            "note": "Galaxy Ranger. Loaded by blazer, galaxy, galaxyp",
            "required": true,
            "source_ref": "src/game/astron.cpp:143",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6617e702",
                "name": "epr-5613.bin",
                "size": 16384
              },
              {
                "crc32": "73ad8932",
                "name": "epr-5614.bin",
                "size": 16384
              }
            ],
            "name": "galaxyp.zip",
            "note": "Galaxy Ranger, alternate program ROMs",
            "required": true,
            "source_ref": "src/game/astron.cpp:191",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "name": "gpw_5501.bin",
                "size": 256
              },
              {
                "name": "gpw_6146.bin",
                "size": 32
              },
              {
                "name": "gpw_6147.bin",
                "size": 256
              },
              {
                "name": "gpw_6148.bin",
                "size": 4096
              },
              {
                "name": "gpw_6149.bin",
                "size": 16384
              },
              {
                "name": "gpw_6150.bin",
                "size": 16384
              },
              {
                "name": "gpw_6151.bin",
                "size": 16384
              },
              {
                "name": "gpw_6152.bin",
                "size": 16384
              },
              {
                "name": "gpw_6153.bin",
                "size": 16384
              },
              {
                "name": "gpw_6154.bin",
                "size": 16384
              },
              {
                "name": "gpw_6155.bin",
                "size": 16384
              },
              {
                "name": "gpw_6156.bin",
                "size": 16384
              },
              {
                "name": "gpw_6157.bin",
                "size": 16384
              },
              {
                "name": "gpw_6158.bin",
                "size": 16384
              },
              {
                "name": "gpw_6162a.bin",
                "size": 16384
              },
              {
                "name": "gpw_6163.bin",
                "size": 16384
              },
              {
                "name": "gpw_6164.bin",
                "size": 16384
              }
            ],
            "name": "gpworld.zip",
            "note": "GP World. Driver passes crc32 0, so no CRC check",
            "required": true,
            "source_ref": "src/game/gpworld.cpp:101",
            "system": "arcade-laserdisc",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d8efddea",
                "name": "gtg.rm0",
                "size": 8192
              },
              {
                "crc32": "69953d38",
                "name": "gtg.rm1",
                "size": 8192
              },
              {
                "crc32": "b043e205",
                "name": "gtg.rm2",
                "size": 8192
              },
              {
                "crc32": "ec305f5e",
                "name": "gtg.rm3",
                "size": 8192
              },
              {
                "crc32": "9e4c8aa2",
                "name": "gtg.rm4",
                "size": 8192
              }
            ],
            "name": "gtg.zip",
            "note": "Goal to Go",
            "required": true,
            "source_ref": "src/game/cliff.cpp:131",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ebb81f9",
                "name": "blue6d.bot",
                "size": 256
              },
              {
                "crc32": "7d8c845c",
                "name": "green6c.bot",
                "size": 256
              },
              {
                "crc32": "5c52f844",
                "name": "red6b.bot",
                "size": 256
              },
              {
                "crc32": "4f34fb1d",
                "name": "rom1.top",
                "size": 8192
              },
              {
                "crc32": "165cbc57",
                "name": "rom11.bot",
                "size": 8192
              },
              {
                "crc32": "5d643381",
                "name": "rom2.top",
                "size": 8192
              },
              {
                "crc32": "ce5a2b09",
                "name": "rom3.top",
                "size": 8192
              },
              {
                "crc32": "7c2cb1f1",
                "name": "rom4.top",
                "size": 8192
              },
              {
                "crc32": "354377f6",
                "name": "rom5.top",
                "size": 8192
              },
              {
                "crc32": "0319bf40",
                "name": "rom6.top",
                "size": 8192
              },
              {
                "crc32": "1447ce3a",
                "name": "rom7.bot",
                "size": 8192
              },
              {
                "crc32": "e9c9e490",
                "name": "rom8.bot",
                "size": 8192
              },
              {
                "crc32": "9d79acb6",
                "name": "rom9.bot",
                "size": 8192
              }
            ],
            "name": "interstellar.zip",
            "note": "Interstellar",
            "required": true,
            "source_ref": "src/game/interstellar.cpp:165",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f5ea3b9d",
                "name": "dl_f2_u1.bin",
                "size": 8192
              },
              {
                "crc32": "dcc1dff2",
                "name": "dl_f2_u2.bin",
                "size": 8192
              },
              {
                "crc32": "ab514e5b",
                "name": "dl_f2_u3.bin",
                "size": 8192
              },
              {
                "crc32": "f5ec23d2",
                "name": "dl_f2_u4.bin",
                "size": 8192
              }
            ],
            "name": "lair.zip",
            "note": "Dragon's Lair rev F2. Loaded by lair, lair_f",
            "required": true,
            "source_ref": "src/game/lair.cpp:117",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e9453a1b",
                "name": "dl2_319.bin",
                "size": 65536
              }
            ],
            "name": "lair2.zip",
            "note": "Dragon's Lair 2 v3.19",
            "required": true,
            "source_ref": "src/game/lair2.cpp:138",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9f2660a3",
                "name": "dl2_211.bin",
                "size": 65536
              }
            ],
            "name": "lair2_211.zip",
            "note": "Dragon's Lair 2 v2.11",
            "required": true,
            "source_ref": "src/game/lair2.cpp:109",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "dec4f2e3",
                "name": "dl2_300.bin",
                "size": 65536
              }
            ],
            "name": "lair2_300.zip",
            "note": "Dragon's Lair 2 v3.00",
            "required": true,
            "source_ref": "src/game/lair2.cpp:113",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "af92b612",
                "name": "dl2_314.bin",
                "size": 65536
              }
            ],
            "name": "lair2_314.zip",
            "note": "Dragon's Lair 2 v3.14",
            "required": true,
            "source_ref": "src/game/lair2.cpp:117",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "13ec0600",
                "name": "dl2_315.bin",
                "size": 65536
              }
            ],
            "name": "lair2_315.zip",
            "note": "Dragon's Lair 2 v3.15",
            "required": true,
            "source_ref": "src/game/lair2.cpp:121",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d68f1b13",
                "name": "lair2_316_euro.bin",
                "size": 65536
              }
            ],
            "name": "lair2_316_euro.zip",
            "note": "Dragon's Lair 2 v3.16 Euro",
            "required": true,
            "source_ref": "src/game/lair2.cpp:142",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "64706492",
                "name": "dl2_318.bin",
                "size": 65536
              }
            ],
            "name": "lair2_318.zip",
            "note": "Dragon's Lair 2 v3.18",
            "required": true,
            "source_ref": "src/game/lair2.cpp:134",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "cc23ad9f",
                "name": "dl2euro3.19.bin",
                "size": 65536
              }
            ],
            "name": "lair2_319_euro.zip",
            "note": "Dragon's Lair 2 v3.19 Euro",
            "required": true,
            "source_ref": "src/game/lair2.cpp:146",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4b9a811d",
                "name": "lair2_319_span.bin",
                "size": 65536
              }
            ],
            "name": "lair2_319_span.zip",
            "note": "Dragon's Lair 2 v3.19 Spanish",
            "required": true,
            "source_ref": "src/game/lair2.cpp:150",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d76e83ec",
                "name": "dl_a_u1.bin",
                "size": 8192
              },
              {
                "crc32": "a6a723d8",
                "name": "dl_a_u2.bin",
                "size": 8192
              },
              {
                "crc32": "52c59014",
                "name": "dl_a_u3.bin",
                "size": 8192
              },
              {
                "crc32": "924d12f2",
                "name": "dl_a_u4.bin",
                "size": 8192
              },
              {
                "crc32": "6ec2f9c1",
                "name": "dl_a_u5.bin",
                "size": 8192
              }
            ],
            "name": "lair_a.zip",
            "note": "Dragon's Lair rev A. Loaded by lair_a, lair_b, lair_c",
            "required": true,
            "source_ref": "src/game/lair.cpp:399",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6751103d",
                "name": "dl_b_u2.bin",
                "size": 8192
              }
            ],
            "name": "lair_b.zip",
            "note": "Dragon's Lair rev B. Loaded by lair_b, lair_c",
            "required": true,
            "source_ref": "src/game/lair.cpp:425",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "cebfe26a",
                "name": "dl_c_u1.bin",
                "size": 8192
              }
            ],
            "name": "lair_c.zip",
            "note": "Dragon's Lair rev C",
            "required": true,
            "source_ref": "src/game/lair.cpp:437",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5ab120",
                "name": "dl_d_u1.bin",
                "size": 8192
              },
              {
                "crc32": "93ebfffb",
                "name": "dl_d_u2.bin",
                "size": 8192
              },
              {
                "crc32": "22e6591f",
                "name": "dl_d_u3.bin",
                "size": 8192
              },
              {
                "crc32": "5f7212cb",
                "name": "dl_d_u4.bin",
                "size": 8192
              },
              {
                "crc32": "2b469c89",
                "name": "dl_d_u5.bin",
                "size": 8192
              }
            ],
            "name": "lair_d.zip",
            "note": "Dragon's Lair rev D",
            "required": true,
            "source_ref": "src/game/lair.cpp:450",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "329b354a",
                "name": "elu45_d2.bin",
                "size": 8192
              }
            ],
            "name": "lair_d2.zip",
            "note": "Dragon's Lair PAL, third set",
            "required": true,
            "source_ref": "src/game/laireuro.cpp:672",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "02980426",
                "name": "dl_e_u1.bin",
                "size": 8192
              },
              {
                "crc32": "979d4c97",
                "name": "dl_e_u2.bin",
                "size": 8192
              },
              {
                "crc32": "897bf075",
                "name": "dl_e_u3.bin",
                "size": 8192
              },
              {
                "crc32": "4ebffba5",
                "name": "dl_e_u4.bin",
                "size": 8192
              }
            ],
            "name": "lair_e.zip",
            "note": "Dragon's Lair rev E",
            "required": true,
            "source_ref": "src/game/lair.cpp:149",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "06fc6941",
                "name": "dl_f_u1.bin",
                "size": 8192
              },
              {
                "crc32": "a817324e",
                "name": "dl_f_u4.bin",
                "size": 8192
              }
            ],
            "name": "lair_f.zip",
            "note": "Dragon's Lair rev F",
            "required": true,
            "source_ref": "src/game/lair.cpp:139",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2ed85958",
                "name": "lair_ita_45.bin",
                "size": 8192
              },
              {
                "crc32": "0c0b3011",
                "name": "lair_ita_48.bin",
                "size": 8192
              }
            ],
            "name": "lair_ita.zip",
            "note": "Dragon's Lair PAL, Italian version",
            "required": true,
            "source_ref": "src/game/laireuro.cpp:655",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a1856eac",
                "name": "dl_n1_u1.bin",
                "size": 8192
              },
              {
                "crc32": "1b34406f",
                "name": "dl_n1_u2.bin",
                "size": 8192
              },
              {
                "crc32": "cf3f4d3c",
                "name": "dl_n1_u3.bin",
                "size": 8192
              },
              {
                "crc32": "a98880c5",
                "name": "dl_n1_u4.bin",
                "size": 8192
              },
              {
                "crc32": "17b7336b",
                "name": "dl_n1_u5.bin",
                "size": 8192
              }
            ],
            "name": "lair_n1.zip",
            "note": "Dragon's Lair NTSC prototype, machine serial number 1",
            "required": true,
            "source_ref": "src/game/lair.cpp:462",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ea6d5498",
                "name": "dl_x_u1.bin",
                "size": 8192
              },
              {
                "crc32": "ffe84a95",
                "name": "dl_x_u2.bin",
                "size": 8192
              },
              {
                "crc32": "6363fd84",
                "name": "dl_x_u3.bin",
                "size": 8192
              },
              {
                "crc32": "84cabb86",
                "name": "dl_x_u4.bin",
                "size": 8192
              },
              {
                "crc32": "8cc8f073",
                "name": "dl_x_u5.bin",
                "size": 8192
              }
            ],
            "name": "lair_x.zip",
            "note": "Dragon's Lair NTSC, early set of unknown revision",
            "required": true,
            "source_ref": "src/game/lair.cpp:475",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e7506d96",
                "name": "elu33.bin",
                "size": 8192
              },
              {
                "crc32": "4d3a9eac",
                "name": "elu45.bin",
                "size": 8192
              },
              {
                "crc32": "8479612b",
                "name": "elu46.bin",
                "size": 8192
              },
              {
                "crc32": "6a66f6b4",
                "name": "elu47.bin",
                "size": 8192
              },
              {
                "crc32": "36575106",
                "name": "elu48.bin",
                "size": 8192
              }
            ],
            "name": "laireuro.zip",
            "note": "Dragon's Lair PAL. Loaded by lair_d2, lair_ita, laireuro",
            "required": true,
            "source_ref": "src/game/laireuro.cpp:84",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "name": "A02_29.bin",
                "size": 8192
              },
              {
                "name": "a02_01.bin",
                "size": 8192
              },
              {
                "name": "a02_02.bin",
                "size": 8192
              },
              {
                "name": "a02_03.bin",
                "size": 8192
              },
              {
                "name": "a02_04.bin",
                "size": 8192
              },
              {
                "name": "a02_14.bin",
                "size": 8192
              },
              {
                "name": "a02_15.bin",
                "size": 8192
              },
              {
                "name": "a02_16.bin",
                "size": 8192
              },
              {
                "name": "a02_17.bin",
                "size": 8192
              }
            ],
            "name": "lgp.zip",
            "note": "Program and character ROMs. Driver passes crc32 0, so no CRC check",
            "required": true,
            "source_ref": "src/game/lgp.cpp:93",
            "system": "arcade-laserdisc",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6e29212",
                "name": "m3drom1.bin",
                "size": 4096
              },
              {
                "crc32": "70c12bf4",
                "name": "m3rom0.bin",
                "size": 8192
              },
              {
                "crc32": "3b0ba80b",
                "name": "m3rom1.bin",
                "size": 8192
              },
              {
                "crc32": "fbdfb03d",
                "name": "m3rom2.bin",
                "size": 8192
              },
              {
                "crc32": "b1b045af",
                "name": "m3rom3.bin",
                "size": 8192
              },
              {
                "crc32": "8bfd5a44",
                "name": "m3rom4.bin",
                "size": 8192
              },
              {
                "crc32": "a2a9f8e5",
                "name": "m3target.bin",
                "size": 971776
              },
              {
                "crc32": "eddf8872",
                "name": "m3yrom1.bin",
                "size": 4096
              },
              {
                "crc32": "ea2f5257",
                "name": "mach3bg0.bin",
                "size": 4096
              },
              {
                "crc32": "f543e4ce",
                "name": "mach3bg1.bin",
                "size": 4096
              },
              {
                "crc32": "0bae12a5",
                "name": "mach3fg0.bin",
                "size": 8192
              },
              {
                "crc32": "9b88767b",
                "name": "mach3fg1.bin",
                "size": 8192
              },
              {
                "crc32": "2a59e99e",
                "name": "mach3fg2.bin",
                "size": 8192
              },
              {
                "crc32": "472128b4",
                "name": "mach3fg3.bin",
                "size": 8192
              }
            ],
            "name": "mach3.zip",
            "note": "M.A.C.H. 3",
            "required": true,
            "source_ref": "src/game/mach3.cpp:229",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "084d6ae2",
                "name": "00.bin",
                "size": 8192
              },
              {
                "crc32": "e4733c49",
                "name": "01.bin",
                "size": 8192
              },
              {
                "crc32": "6c20335d",
                "name": "02.bin",
                "size": 8192
              },
              {
                "crc32": "d1ff5ffb",
                "name": "03-06.bin",
                "size": 8192
              },
              {
                "crc32": "da2c84d9",
                "name": "04-07.bin",
                "size": 8192
              },
              {
                "crc32": "4608b516",
                "name": "05-08.bin",
                "size": 8192
              }
            ],
            "name": "roadblaster.zip",
            "note": "Road Blaster",
            "required": true,
            "source_ref": "src/game/bega.cpp:223",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "cbc5e425",
                "name": "sae10_u1.bin",
                "size": 8192
              },
              {
                "crc32": "71a26f47",
                "name": "sae10_u2.bin",
                "size": 8192
              },
              {
                "crc32": "bac5cdd8",
                "name": "sae10_u3.bin",
                "size": 8192
              },
              {
                "crc32": "e18380f9",
                "name": "sae10_u4.bin",
                "size": 8192
              },
              {
                "crc32": "8a536cb0",
                "name": "sae10_u5.bin",
                "size": 8192
              },
              {
                "crc32": "ca4e20e6",
                "description": "verified by CRC32 at boot, lair.cpp:373",
                "name": "readme.txt"
              }
            ],
            "name": "sae.zip",
            "note": "Space Ace Enhancement",
            "required": true,
            "source_ref": "src/game/lair.cpp:345",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5fb0e440",
                "name": "sdq-char.bin",
                "size": 8192
              },
              {
                "crc32": "96701569",
                "name": "sdq-cprm.bin",
                "size": 32
              },
              {
                "crc32": "96b931e2",
                "name": "sdq-prog.bin",
                "size": 16384
              }
            ],
            "name": "sdq.zip",
            "note": "Super Don Quix-ote. Loaded by sdq, sdqshort, sdqshortalt",
            "required": true,
            "source_ref": "src/game/superd.cpp:196",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0f4d4832",
                "name": "sdq_c45.rom",
                "size": 16384
              }
            ],
            "name": "sdqshort.zip",
            "note": "Super Don Quix-ote, short scenes set",
            "required": true,
            "source_ref": "src/game/superd.cpp:214",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b12ce1f8",
                "name": "sdq_c45alt.rom",
                "size": 16384
              }
            ],
            "name": "sdqshortalt.zip",
            "note": "Super Don Quix-ote, alternate short scenes set",
            "required": true,
            "source_ref": "src/game/superd.cpp:234",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "name": "TT061891.BIN",
                "size": 262144
              }
            ],
            "name": "timetrav.zip",
            "note": "Single 256 KB program ROM. Driver passes crc32 0, so no CRC check",
            "required": true,
            "source_ref": "src/game/timetrav.cpp:64",
            "system": "arcade-laserdisc",
            "validation": [
              "size"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6748e6b3",
                "name": "tq_cop.bin",
                "size": 1024
              },
              {
                "crc32": "e8e7f566",
                "name": "tq_u1.bin",
                "size": 8192
              },
              {
                "crc32": "82df5d89",
                "name": "tq_u33.bin",
                "size": 32768
              }
            ],
            "name": "tq.zip",
            "note": "Thayer's Quest. Loaded by tq, tq_alt, tq_swear",
            "required": true,
            "source_ref": "src/game/thayers.cpp:97",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "33817e25",
                "name": "tq_u1.bin",
                "size": 8192
              }
            ],
            "name": "tq_alt.zip",
            "note": "Thayer's Quest, alternate program ROM",
            "required": true,
            "source_ref": "src/game/thayers.cpp:253",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7be981df",
                "name": "tq_u33_mod.bin",
                "size": 32768
              }
            ],
            "name": "tq_swear.zip",
            "note": "Thayer's Quest, JnK's swearing hack",
            "required": true,
            "source_ref": "src/game/thayers.cpp:264",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8a0de09f",
                "name": "usvs.bg0",
                "size": 4096
              },
              {
                "crc32": "6fb64d3c",
                "name": "usvs.bg1",
                "size": 4096
              },
              {
                "crc32": "7734e53f",
                "name": "usvs.fg0",
                "size": 16384
              },
              {
                "crc32": "a2057430",
                "name": "usvs.fg1",
                "size": 16384
              },
              {
                "crc32": "d3990707",
                "name": "usvs.fg2",
                "size": 16384
              },
              {
                "crc32": "98703015",
                "name": "usvs.fg3",
                "size": 16384
              },
              {
                "crc32": "30cf6bd9",
                "name": "usvs.rm0",
                "size": 8192
              },
              {
                "crc32": "697bc989",
                "name": "usvs.rm1",
                "size": 8192
              },
              {
                "crc32": "36770716",
                "name": "usvs.rm2",
                "size": 8192
              },
              {
                "crc32": "6f32a671",
                "name": "usvs.rm3",
                "size": 8192
              },
              {
                "crc32": "0d7a4072",
                "name": "usvs.rm4",
                "size": 8192
              },
              {
                "crc32": "c0b5cab0",
                "name": "usvsdrom.1",
                "size": 8192
              },
              {
                "crc32": "c3d245ca",
                "name": "usvsyrom.1",
                "size": 8192
              }
            ],
            "name": "uvt.zip",
            "note": "Us vs Them",
            "required": true,
            "source_ref": "src/game/mach3.cpp:261",
            "system": "arcade-laserdisc",
            "validation": [
              "size",
              "crc32"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Fork of Matt Ownby's Daphne by DirtBagXon, rebuilt on SDL3, with Singe Lua\nscripting for fan-made American Laser Games conversions. Platforms invoke it\nas hypseus-singe (Batocera, RetroBat, ES-DE find rule HYPSEUS-SINGE) against\nthe hypseus.bin binary.\n\nEach Daphne game loads its own arcade ROM set. game::load_roms() walks the\ndriver rom_def table and opens roms/<set>.zip, locating each member by name\ncase-insensitively; a member missing from the archive falls back to a loose\nfile at roms/<set>/<member> (game.cpp:636-768). The set name is the rom_def\ndir field when set, otherwise the driver shortgamename, so a variant can pull\nmembers out of another game's archive. roms/ resolves under -romdir when\ngiven, otherwise under the home directory, with the application directory as\nfallback (homedir.cpp:97-108, 145-157).\n\nMember size is enforced: load_rom and load_compressed_rom only report success\nwhen the byte count read equals rom_def.size (game.cpp:857, 906). CRC32 is\ncomputed and compared but a mismatch only logs a warning (game.cpp:708-726),\nand a driver that passes crc32 0 skips the comparison entirely\n(game.cpp:712-716). A member that cannot be read at all aborts startup with\n\"Could not load ROM images! You must supply these.\" (hypseus.cpp:205-260).\nHashing is per member, never over the archive.\n\nThe Dragon's Lair Enhancement and Space Ace Enhancement sets carry an extra\nreadme member checked by exact CRC32 through verify_required_file(); a\nmissing or altered readme calls set_quitflag() and the game does not run\n(game.cpp:773-837, lair.cpp:197-205, 261-275, 373-380).\n\nSinge games are not covered by rom_def. The Lua script, framefile and video\narrive with the content and are passed on the command line (-script, -zlua,\n-framefile); singe_utils.cpp:35-42 only exposes the roms path to scripts.\n\nThe emulator asset tree ships in the source distribution and packagers\ninstall it beside the binary (Batocera copies pics, fonts, sound and the\ndoc .ini files to /usr/share/hypseus-singe). It is read from the working\ndirectory, not from a system directory:\n  pics/ - led0.bmp through led17.bmp (LED_RANGE, video.h:71), player1.bmp,\n    player2.bmp, lives.bmp, credits.bmp, time.bmp, ldp1450font.bmp, one of\n    overlayleds1.bmp or overlayleds2.bmp, cadet.bmp, captain.bmp,\n    spaceace.bmp, offcadet.bmp, offcaptain.bmp, offspaceace.bmp, oncadet.bmp,\n    oncaptain.bmp, onspaceace.bmp, annunon.png, annunoff.png. load_bmps()\n    returns false if any is absent and startup ends on \"Video initialization\n    failed!\" (video.cpp:1020-1074, hypseus.cpp:201). tqkeys.png is read for\n    the Thayer's Quest key overlay (video.cpp:632-635). A bezel directory,\n    default bezels/, takes precedence for the bmp and png entries.\n  fonts/ - default.ttf plus daphne.ttf for legacy overlay and Singe games or\n    digital.ttf otherwise; a font that fails to open calls set_quitflag()\n    (video.cpp:271-293, splash.cpp:45).\n  sound/ - the per-game wav samples named by each driver, plus grumble.wav\n    loaded for every game. load_waves() failure fails sound::init() and\n    startup ends on \"Sound initialization failed!\" (sound.cpp:254-307,\n    sound.cpp:156-186, hypseus.cpp:202). Under -nosound the branch is\n    skipped and init returns true (sound.cpp:143, 193-196).\n  doc/ - hypinput.ini, or hypinput_gamepad.ini under -gamepad. An\n    unreadable file falls back to the compiled-in keymap (input.cpp:72,\n    340-350, 1879).\n\nmidi/soundfont.sf2 ships in the tree but no code path reads it in v3.0.0.\nmidi/SOUNDFONTS.txt records that the SDL3 migration dropped the environment\nvariable convention the SDL2 build relied on. pics/ConsoleFont.bmp is\nlikewise unreferenced. starrider.cpp:99 keeps its ROM table in a\ncommented-out load_roms, so the driver loads nothing.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/DirtBagXon/hypseus-singe",
        "source_commit": "cda87965fe0a031d027b2253c6715d37cca6b56a",
        "systems": [
          "arcade-laserdisc"
        ],
        "type": "standalone",
        "upstream": "https://github.com/mirror/daphne-emu"
      }
    },
    {
      "id": "idtech4a++",
      "profile": {
        "author": "glKarin",
        "core_classification": "game_engine",
        "core_version": "1.1.0harmattan72",
        "cores": [
          "idtech4a++",
          "idtech4amm",
          "diii4a"
        ],
        "display_name": "id Tech engine collection (idTech4A++)",
        "emulator": "idTech4A++",
        "exclusion_note": "The retail game data is not listed. Every engine here loads it by globbing the base folder rather than by name, `.pk4` for the idTech 4 lineage, `.resources` for DOOM 3 BFG, the four container suffixes for Yamagi, `*.gro` for Serious Sam, and what it gates on is a `default.cfg` that lives inside those archives rather than beside them. The names that do appear in the code are the forty-nine the DOOM engine accepts as an IWAD, read from `iwadinfo.txt` in `game_support.pk3`, the four the launcher offers as selectable UZDOOM data files, and the five extensions ECWolf reports when no Wolfenstein data is found; all of them are game content, held here the same way the PrBoom and boom3 profiles hold theirs, in the notes. `stdout.txt` and `stderr.txt` are opened for writing by the engine and read back only to show the last run log, and an `idtech4amm.version` stamp is written beside each extracted resource. ref: doom3/neo/framework/FileSystem.cpp:2052, 3397-3399,\n     Q3E/src/main/jni/quake2/yquake2/src/common/filesystem.c:1801-1850,\n     Q3E/src/main/jni/serioussam/SamTFE/Sources/Engine/Base/Stream.cpp:212-247,\n     Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:766,\n     Q3E/src/main/jni/q3e/q3emisc.c:23-25,\n     idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:2899, 2916,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:697-703\n",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "UZDOOM engine resource archive",
            "md5": "d3f231863ee2973dbc9291e853d1eb4a",
            "name": "uzdoom.pk3",
            "note": "Named by BASEWAD and searched before anything else; a miss ends the process with \"Cannot find uzdoom.pk3\". Carries the hex font, the widget resources and the script definitions the engine needs before a game is chosen. Copied out of the apk with the rest of the UZDOOM resource directory.",
            "path": "uzdoom/uzdoom.pk3",
            "required": true,
            "sha1": "dd2364da2cc8b49e32330ba9abff80727b4ea0a0",
            "size": 3007398,
            "source_ref": "Q3E/src/main/jni/zdoom/src/version.h:100, Q3E/src/main/jni/zdoom/src/d_main.cpp:3707-3713, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:94-103"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "UZDOOM IWAD definitions and per-game filters",
            "md5": "64d976172bae64edb10e542f14f2de9f",
            "name": "game_support.pk3",
            "note": "Named by OPTIONALWAD and opened as the second file of the IWAD manager. It holds the IWADINFO lump, so without it no IWAD is recognised and startup ends on \"Cannot find a game IWAD\" even when the WAD is in place. Also carries the per-game filter trees keyed by IWAD identity.",
            "path": "uzdoom/game_support.pk3",
            "required": true,
            "sha1": "cccab57d1d1b84601fa0c52a74f55bf7b36f4e1c",
            "size": 2382047,
            "source_ref": "Q3E/src/main/jni/zdoom/src/version.h:102, Q3E/src/main/jni/zdoom/src/d_main.cpp:3744-3746, Q3E/src/main/jni/zdoom/src/d_iwad.cpp:321-342, 738"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Widescreen replacements for the stock graphics",
            "md5": "8ebf4d4a7b950f156c6c277ed9244aac",
            "name": "game_widescreen_gfx.pk3",
            "note": "Searched by name and loaded only when the startup dialog leaves widescreen graphics enabled.",
            "path": "uzdoom/game_widescreen_gfx.pk3",
            "required": false,
            "sha1": "9ff11fca19550b189cc8e7d4cafc9897d57cd472",
            "size": 5565936,
            "source_ref": "Q3E/src/main/jni/zdoom/src/d_main.cpp:2083"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Dynamic light definitions",
            "md5": "5e5977e018d3ef2dfda2607b0b3e57ae",
            "name": "lights.pk3",
            "note": "Searched by name on the user choice recorded at first start, and offered a second time as a launcher switch that appends it to the file list.",
            "path": "uzdoom/lights.pk3",
            "required": false,
            "sha1": "19ad73cae23b5d9f3890ae29542a2d3e611bda00",
            "size": 24030,
            "source_ref": "Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2075, Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1138, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:558"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Brightmap definitions",
            "md5": "302fd7cffd2b197c5c68778f877d3086",
            "name": "brightmaps.pk3",
            "note": "Loaded on the same choice and the same launcher switch as the light definitions.",
            "path": "uzdoom/brightmaps.pk3",
            "required": false,
            "sha1": "ccb1fb093dc128da46a5060ba319c5bd5790e074",
            "size": 246181,
            "source_ref": "Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2081, Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1140, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:565"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SoundFont for the MIDI devices",
            "md5": "f306ebc541a428d296cd3b7ee996d872",
            "name": "uzdoom.sf2",
            "note": "Collected by scanning a `soundfonts` directory added to the search paths of the config file; every .sf2 and zipped GUS patch set found there becomes a menu entry.",
            "path": "uzdoom/soundfonts/uzdoom.sf2",
            "required": false,
            "sha1": "4394193fb95c1e59916efe9ac3a47952ab5002f5",
            "size": 3299098,
            "source_ref": "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:220, 258, Q3E/src/main/jni/zdoom/src/common/audio/music/i_soundfont.cpp:335-370"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "OPL3 instrument bank",
            "md5": "29570afc6ccea3d9ef7d2734f02e6cab",
            "name": "GENMIDI.GS.wopl",
            "note": "Collected from an `fm_banks` directory added to the search paths beside the soundfont directory, for the OPL synthesiser.",
            "path": "uzdoom/fm_banks/GENMIDI.GS.wopl",
            "required": false,
            "sha1": "538d220d87b86b997f539265eb12a6c319e17a1c",
            "size": 118767,
            "source_ref": "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221, 259"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "OPN2 instrument bank",
            "md5": "4978fd39a6d78de1cf1021e24424f822",
            "name": "gs-by-papiezak-and-sneakernets.wopn",
            "note": "Collected from the same `fm_banks` directory, for the OPN2 synthesiser.",
            "path": "uzdoom/fm_banks/gs-by-papiezak-and-sneakernets.wopn",
            "required": false,
            "sha1": "eaca5d7a9fe1db6094990be0d8916b7f97920db1",
            "size": 274864,
            "source_ref": "Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221, 259"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "ECWolf engine resource archive",
            "md5": "d9dcd91db4a0bc45ba12a01ad1828be8",
            "name": "ecwolf.pk3",
            "note": "Named by MAIN_PK3 and passed to the game selector with the program directory; failing to open it ends the process with \"Could not open ecwolf.pk3!\". It holds the IWADINFO rules that identify which Wolfenstein data set is present, the palettes and the actor definitions. This build reads it from disk after extraction, unlike the libretro core which compiles it in.",
            "path": "ecwolf/ecwolf.pk3",
            "required": true,
            "sha1": "d327b48f83d9b95c5a49597145d96be80be3eade",
            "size": 185013,
            "source_ref": "Q3E/src/main/jni/ecwolf/src/version.h:12, Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:604, Q3E/src/main/jni/ecwolf/src/wl_main.cpp:1294-1307, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:186-195"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "The Dark Mod GLSL shader set rewritten for OpenGL ES",
            "md5": "3155df291027d253e2596db3fca1ac4a",
            "name": "glprogs.pk4",
            "note": "Unpacked into the standalone directory as `glslprogs/`, the tree the renderer compiles its programs from. Version-stamped with the engine release so a Dark Mod update replaces it.",
            "required": true,
            "sha1": "2651f1eff1785999918c08600f079e1ad4a206e7",
            "size": 98396,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "DOOM 3 BFG shader set rewritten for OpenGL ES",
            "md5": "7edee35e1e53475d9557c1026877ae7c",
            "name": "renderprogs.pk4",
            "note": "Unpacked into `base/renderprogs/` beside the game resources. The shipped BFG data carries the desktop HLSL set, which this build cannot use.",
            "required": true,
            "sha1": "ab89141b5772de1df43831e64c53aece28c2e6f6",
            "size": 223453,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:72-81, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:768-787, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:393"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Skin Deep shader set rewritten for OpenGL ES",
            "md5": "b94d15df5bf72a4c4510c834ef404ebb",
            "name": "glsl.pk4",
            "note": "Unpacked into `base/glsl/` and stamped with the game version.",
            "required": true,
            "sha1": "87f0f5ec3db3855c4453a9031ce695d39d0eaa44",
            "size": 51642,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:197-206, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:726-745, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:399"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "ETQW shader set and megatexture patches",
            "md5": "2f5c49dca4993da5911d632d3962c1f3",
            "name": "zzz_etqwbase.pk4",
            "note": "Unpacked into the ETQW base folder. The name sorts last so the entries override the ones the retail archives carry.",
            "required": true,
            "sha1": "0d4dee46085ced0fd117030a13533d903265301c",
            "size": 136061,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:208-217, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:747-766, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:400"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "ET: Legacy mod archive matching the built engine",
            "md5": "ea838df0911a68b5f22f5010d37867f5",
            "name": "legacy_v2.83.2.pk3",
            "note": "Copied into the `legacy` folder, the mod the engine runs by default; the retail Enemy Territory data in `etmain` stays the user's to supply. The file name is built from the engine version, so a Legacy update lands under a new name.",
            "path": "etw/legacy/legacy_v2.83.2.pk3",
            "required": true,
            "sha1": "f156945f70545e37fb5ee33a95ee97204a7f60b7",
            "size": 30993701,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:175-184, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:845-868, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:397"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Xash3D touch controls, fonts and controller database",
            "md5": "1a65bf279b969c017a34497d183e5544",
            "name": "extras.pk3",
            "note": "Mounted ahead of every game directory from the path in XASH3D_EXTRAS_PAK1. It carries the touch-control textures the mobile build draws and the gamecontrollerdb.txt the SDL joystick layer reads through the virtual filesystem.",
            "path": "xash/extras.pk3",
            "required": true,
            "sha1": "971249b94cb62fbca2f42c8ab7a7d29d30e5b368",
            "size": 1491748,
            "source_ref": "Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1376-1378, Q3E/src/main/jni/xash3d/xash3d-fwgs/engine/platform/sdl2/joy_sdl2.c:346, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:142-151"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Counter-Strike 1.6 client resources for Xash3D",
            "md5": "15bf94e95c94c301f92270b6775b9a3d",
            "name": "cs16client-extras.pk3",
            "note": "Extracted right after the base extras and mounted the same way, for the cs16 and cs16_yapb server classes the launcher offers.",
            "path": "xash/cs16client-extras.pk3",
            "required": false,
            "sha1": "ab0c9f66e9e9be4af96c20d5ce3a9d684eeff2c2",
            "size": 12976942,
            "source_ref": "Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1380-1382, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:153-162, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:815-843, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:412"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Source engine fonts and platform archive",
            "md5": "15944b9068602a6d36905be035e9e547",
            "name": "extras.zip",
            "note": "Unpacked into `files/` under the Source standalone directory. It carries the DejaVu, Droid Sans Fallback, Itim and Liberation faces the engine substitutes for the Windows fonts, and extras_dir.vpk.",
            "required": true,
            "sha1": "388bfce5ba834f5ed329a0fa9864b0b75840e951",
            "size": 15081926,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:164-173, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:895-919, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:396"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Stupid Angry Bot definitions for DOOM 3 multiplayer",
            "md5": "494bd9601fc82752cc6c6d14cf684d8e",
            "name": "d3_sabot_a7.pk4",
            "note": "Extracted on request into the current mod folder under a name prefixed to sort last. It holds the defs, scripts and multiplayer AAS files the bot commands need. A second entry repacks only the `maps/` tree into zzz_idTech4Amm_d3_sabot_a7_aas.pk4 for users who already have the mod.",
            "path": "doom3/base/zzz_idTech4Amm_d3_sabot_a7.pk4",
            "required": false,
            "sha1": "8179522bcd5abc4c5a3194bf49f6821738644500",
            "size": 2399406,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:48-58, 129-140, README.md:256-259"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Stupid Angry Bot definitions for Quake 4 multiplayer",
            "md5": "710997decddd8ace044d028fe79b52e9",
            "name": "q4_sabot_a9.pk4",
            "note": "The Quake 4 counterpart, extracted the same way, with the same maps-only variant written as zzz_idTech4Amm_q4_sabot_a9_aas.pk4.",
            "path": "quake4/q4base/zzz_idTech4Amm_q4_sabot_a9.pk4",
            "required": false,
            "sha1": "a3af9251c6a2b4b8d02108bd7b91919aace929dd",
            "size": 21143072,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:36-46, 116-127, README.md:256-259"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Rivensin patch restoring the original DOOM 3 levels",
            "md5": "214e3daebf5d11e40cd06ca5e1b02971",
            "name": "play_original_doom3_level.pk4",
            "note": "Extracted on request into the `rivensin` mod folder, the one patch tied to a named mod rather than to whichever mod is selected.",
            "path": "doom3/rivensin/zzz_idTech4Amm_play_original_doom3_level.pk4",
            "required": false,
            "sha1": "de368e97ca86f489c1f10ea148e0812913c25c7d",
            "size": 16866,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:60-70"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Chinese text and fonts for DOOM 3, taken from the BFG release",
            "md5": "4fa638d0accdd696149d83f3579d185e",
            "name": "doom3_chinese_translation_doom3bfg.pk4",
            "note": "Copied into the DOOM 3 base folder on request. It pairs with the wide-character language and BFG font support compiled into the engine.",
            "path": "doom3/base/doom3_chinese_translation_doom3bfg.pk4",
            "required": false,
            "sha1": "8c06159ab1012b271d39d624b45c55c2360dc443",
            "size": 5138117,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:105-114, README.md:37, 168-169"
          },
          {
            "bundled": true,
            "description": "Button image themes carried in the apk",
            "md5": "9f6f5073fda93251f7a48a91a6d4c5d1",
            "name": "controls_theme.zipak",
            "note": "Read in place from the assets, never extracted. Archives with this suffix are folded into the search path wherever they are found, and the `controls_theme/` folders inside become named entries in the theme chooser; this one carries the cs16-client and source-engine sets.",
            "required": false,
            "sha1": "5be92df9e74843bc6071e3627f4fd876d499a490",
            "size": 3133490,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230, Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:44, 102, 113-129, Q3E/src/main/java/com/n0n3m4/q3e/karin/KFileDescriptor.java:56, 102"
          },
          {
            "bundled": true,
            "description": "Default on-screen button images, 52 files",
            "name": "btn_jump.png",
            "note": "Read from the assets root when the theme is the built-in one. The set covers the alphabet, the digits and the named actions the games bind, and any of the 52 names can be replaced by putting a file of the same name in one of the external search paths.",
            "required": false,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:348-370, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:167-177"
          },
          {
            "bundled": true,
            "description": "Virtual keyboard layout",
            "md5": "ef9b27699a627334930f6d4252b644d5",
            "name": "generic.json",
            "note": "Read straight from the assets when the on-screen keyboard is built, without going through the external search path, so nothing outside the archive replaces it.",
            "path": "keyboard/generic.json",
            "required": false,
            "sha1": "839c05a60c231d409f90b477bf2001c28f10b1bb",
            "size": 10278,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EKeyboard.java:74"
          },
          {
            "description": "Console script the engine runs at startup",
            "name": "autoexec.cfg",
            "note": "Executed by the id-derived engines from the mod folder and from the base folder. The launcher lists both positions next to the config file each game writes for itself, DoomConfig.cfg, Quake4Config.cfg, preyconfig.cfg, q3config.cfg, wolfconfig.cfg, Darkmod.cfg, uzdoom.ini and the rest, and opens any of them in its editor. The config files are written by the engines; this one only ever comes from the user.",
            "required": false,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:722-836, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:63-88, idTech4Amm/src/main/java/com/karin/idTech4Amm/ConfigEditorActivity.java:103"
          },
          {
            "description": "Blurb shown for a mod in the chooser",
            "name": "description.txt",
            "note": "Read from the root of a mod folder when the mod list is built and shown under the folder name with its size. The control theme chooser reads a file of the same name from a theme folder, there with an optional language suffix.",
            "required": false,
            "source_ref": "idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/ChooseGameModFunc.java:242-251, Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:330-341"
          },
          {
            "description": "Extra SDL controller mappings",
            "load_from": "internal_storage",
            "name": "controller_map.txt",
            "note": "SDL builds this path from the internal storage directory of the package when SDL_GAMECONTROLLERCONFIG_FILE is unset, which it is here, and reads it while the game controller subsystem starts, after the compiled-in mappings and before the ones the environment carries. It reaches the six games the app runs on SDL, Xash3D, Source, ECWolf, Skin Deep, Quadrilateral Cowboy and Icarus; the other engines take input from the Q3E frontend instead. The SDL2 tree under deplibs is what the build compiles, version 2.32.5.",
            "required": false,
            "source_ref": "Q3E/src/main/jni/deplibs/SDL2/src/joystick/SDL_gamecontroller.c:1873-1884, 1890-1916, Q3E/src/main/jni/deplibs/SDL2/include/SDL_version.h:59-61, Q3E/src/main/jni/CMakeLists.txt:90-102, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:430, 454-461"
          },
          {
            "description": "Button images of a user theme",
            "name": "controls_theme/<name>/btn_jump.png",
            "note": "A folder under `controls_theme/` in any search path, or inside a `.zipak` there, appears in the chooser under its own name and its images replace the built-in ones. A `description.txt` beside them, optionally suffixed with a language tag, supplies the name, author and description the chooser shows.",
            "required": false,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:305-345, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:136-179"
          },
          {
            "aliases": [
              "gamearm.so"
            ],
            "description": "External idTech 4 mod game library",
            "name": "gameaarch64.so",
            "note": "Looked for in the mod folder of DOOM 3, Quake 4, Prey or ETQW when the external-library preference is on, copied to a private cache and named to the engine through harm_fs_gameLibPath. The suffix follows the running architecture, gameaarch64.so on arm64 and gamearm.so on armv7. Without it the engine keeps the game code built into the apk. The launcher also accepts a full path to any libxxxxx.so instead.",
            "required": false,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:342-372, 429-434, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/AddExternalLibraryFunc.java:71-86, README.md:229-233, 241-251",
            "unsourceable": "compiled per mod against the published SDK, with no released binary to collect"
          },
          {
            "aliases": [
              "client.so",
              "menu.so"
            ],
            "description": "External Xash3D game libraries",
            "name": "server.so",
            "note": "Read from `lib/<arch>/` inside the Xash3D mod folder when the external-library preference is on, copied to the private cache and passed as the dll, clientlib and menulib parameters with gamelibdir pointing at the cache. The three default names are used unless the command line names others, and any further libraries in the folder are copied alongside.",
            "required": false,
            "source_ref": "Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:373-414, 445-475",
            "unsourceable": "compiled per mod from hlsdk-portable, with no released binary to collect"
          }
        ],
        "mode": "standalone",
        "notes": "Android package com.karin.idTech4Amm, arm64-v8a and armeabi-v7a, Android 4.4+,\nGPLv3, forked from n0n3m4's DIII4A. A Java launcher picks a game and a command\nline, then loads one of twenty-six engine libraries into the Q3E frontend,\nwhich owns the GL surface, the on-screen controls and the audio path. Another\napplication starts a game directly through com.n0n3m4.q3e.Q3EMain with a `game`\nextra carrying the game token and a `command` extra carrying an argument vector\nthat begins with `game.arm`.\nref: README.md:13-26, 237-251,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:8-33, 91-116, 303,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:9,\n     idTech4Amm/build.gradle:13-14, 23\n\nGame data lives under a working directory, `/sdcard/diii4a` unless the\npreference names another, and each game reads a base folder inside it. With the\nstandalone-directory preference on, which is the default, the base folder sits\nunder a per-game subdirectory; with it off, games that are not marked always\nstandalone read the base folder directly under the working directory. The Dark\nMod, UZDOOM, FTEQW, ECWolf, Xash3D, Source and both Serious Sam entries are\nalways standalone and keep their subdirectory either way.\nref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:89, 106, 233-254,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:147-202, 421,\n     443-461\n\nEngine, standalone directory and base folder per game, in registration order:\nDOOM 3 (dante, doom3/base), Quake 4 (dante, quake4/q4base), Prey 2006 (dante,\nprey/preybase), Enemy Territory: QUAKE Wars (Splash Damage idTech4,\netqw/etqwbase), DOOM 3 BFG (RBDOOM-3-BFG 1.4.0, doom3bfg/base), The Dark Mod\n2.14 (darkmod), Skin Deep 1.0.4 (skindeep/base), Quadrilateral Cowboy\n1.0.2602252 (qc/base), Icarus Starship Command Simulator 1.0.9 (icarus/base),\nQuake III Arena (ioquake3 1.36, quake3/baseq3), Return to Castle Wolfenstein\n(iortcw 1.51d, rtcw/main), Wolfenstein: Enemy Territory (ET: Legacy 2.83.2,\netw/etmain), Jedi Academy (OpenJK 1.0.1.1, openja/base), Jedi Outcast (OpenJK\n1.0.1.1, openjo/base), Medal of Honor: Allied Assault (OpenMOHAA 0.82.1,\nopenmohaa/main), Urban Terror (Q3-UT4 4.3.4, urt/q3ut4), RealRTCW 5.43\n(realrtcw/Main), Quake II (Yamagi 8.60, quake2/baseq2), Quake (Darkplaces,\nquake1/darkplaces/id1), UZDOOM 4.14.3 (uzdoom), Wolfenstein 3D (ECWolf 1.4.2,\necwolf), FTEQW 1.05 (fteqw), Xash3D 0.21 (xash/valve), Source Engine 1.16\n(srceng/hl2), Serious Sam TFE 1.10.7 (serioussamtfe) and Serious Sam TSE 1.10.7\n(serioussamtse). Every one is built in this configuration; the F-Droid flavour\nleaves out Xash3D and Source, and the idtech flavour leaves out those two and\nSerious Sam. DOOM 3 BFG carries a second library for its Vulkan renderer.\nref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EGame.java:17-291,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:204-230,\n     Q3E/src/main/jni/CMakeLists.txt:33-60, 137-266\n\nThe retail data is what the user brings, and no engine here names its archives\none by one. The idTech 4 lineage lists `.pk4` in the game directory, DOOM 3 BFG\nlists `.resources`, Yamagi walks `pak0` through `pak99` for each of its four\ncontainer suffixes and then globs the rest, and Serious Sam globs `*.gro`. What\nevery id-derived engine does gate on is `default.cfg` inside those archives: an\nempty read is a fatal error, and only the Splash Damage build is compiled past\nthe check. UZDOOM ends with \"Cannot find a game IWAD\" when no known IWAD is\npresent, and ECWolf with \"Can not find base game data. (*.wl6, *.wl1, *.sdm,\n*.sod, *.n3d)\". The launcher carries a store or homepage link per game and mod\nso the data can be bought or downloaded.\nref: doom3/neo/framework/FileSystem.cpp:2052, 2503, 3392-3400,\n     Q3E/src/main/jni/doom3bfg/neo/framework/FileSystem.cpp:3001, 3173,\n     Q3E/src/main/jni/darkmod/framework/FileSystem.cpp:2650-2657,\n     Q3E/src/main/jni/quake3/code/qcommon/files.c:4161-4165,\n     Q3E/src/main/jni/rtcw/SP/code/qcommon/files.c:4340-4344,\n     Q3E/src/main/jni/jk/code/qcommon/files.cpp:3020,\n     Q3E/src/main/jni/openmohaa/code/qcommon/files.cpp:4011,\n     Q3E/src/main/jni/quake2/yquake2/src/common/filesystem.c:1801-1850,\n     Q3E/src/main/jni/zdoom/src/d_iwad.cpp:738,\n     Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:766,\n     idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/GameResourceUrl.java:14-118\n\nThe Quake III lineage keeps id's release checksums for `baseq3` pak0 through\npak8 and `missionpack` pak0 through pak3, and an archive whose value disagrees\nonly draws a console warning telling the user to re-copy from the CD or\nre-install the point release. Those numbers are a block checksum over the CRCs\nof the archive members, not a hash of the file, so they identify a release\nrather than validate a download.\nref: Q3E/src/main/jni/quake3/code/qcommon/files.c:178-197, 3572-3690,\n     Q3E/src/main/jni/quake3/code/qcommon/qcommon.h:592-593\n\nUZDOOM reads the IWAD names it will accept from `iwadinfo.txt` inside\n`game_support.pk3`: the DOOM, DOOM II, Final DOOM, BFG and KEX re-releases,\nFreedoom, Heretic, Hexen, Strife, Blasphemer, Chex Quest, Action Doom 2, HacX,\nHarmony, Square, Delaweare and Return of the Triad, forty-nine names. The\nlauncher itself names four of them as selectable data files, DOOM.WAD,\nDOOM2.WAD, freedoom1.wad and freedoom2.wad, because UZDOOM and ECWolf are the\ntwo games whose data is a file rather than a folder.\nref: Q3E/src/main/jni/zdoom/src/d_iwad.cpp:287-297, 321-342,\n     Q3E/src/main/jni/zdoom/src/version.h:100-102,\n     idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/Game.java:69-72,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:710-713\n\nStarting a game extracts that game's bundled resources first. A text file named\n`idtech4amm.version` is written beside them and compared on the next run, so an\nengine update replaces the copy and a user edit survives otherwise. The Dark\nMod, DOOM 3 BFG, UZDOOM, Xash3D, Source, Enemy Territory, ECWolf, Skin Deep and\nETQW are covered by this path; the bot, Rivensin and translation archives are\nextracted on request from the launcher instead.\nref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EMain.java:167,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:624-703, 921-940,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResource.java:12-47,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:32-218\n\nOn-screen button images are read through a search path built from the working\ndirectory, the external files directory of the package, its internal data\ndirectory and the assets of the apk, plus every `.zipak` archive found in the\nfirst three. A file of the same name in any of them replaces the built-in\nimage, and a folder under `controls_theme/` becomes a named theme in the\nchooser, described by a `description.txt` that may be suffixed with a language\ntag.\nref: Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:66-96,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:236-241, 305-345,\n     Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230,\n     idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:149-179\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/glKarin/com.n0n3m4.diii4a",
        "source_commit": "683afc7aa181ec4b7ee69424ce9fdb1a8fac5ba9",
        "systems": [
          "doom",
          "doom3",
          "doom3-bfg",
          "quake",
          "quake2",
          "quake3",
          "quake4",
          "prey",
          "wolfenstein3d",
          "return-to-castle-wolfenstein",
          "wolfenstein-enemy-territory",
          "realrtcw",
          "the-dark-mod",
          "jedi-academy",
          "jedi-outcast",
          "medal-of-honor-allied-assault",
          "urban-terror",
          "enemy-territory-quake-wars",
          "skin-deep",
          "quadrilateral-cowboy",
          "icarus-starship-command-simulator",
          "hexen2",
          "half-life",
          "half-life-2",
          "serious-sam"
        ],
        "type": "standalone",
        "upstream": "https://github.com/glKarin/com.n0n3m4.diii4a"
      }
    },
    {
      "id": "imageviewer",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1.0",
        "cores": [
          "imageviewer"
        ],
        "display_name": "Imageviewer",
        "emulator": "Image Viewer",
        "files": [],
        "notes": "Built-in RetroArch core for displaying image files (PNG, JPEG, BMP,\nTGA). Uses stb_image for decoding. Supports slideshow mode.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/RetroArch/tree/master/cores/libretro-imageviewer",
        "source_commit": "82c5e3be066e6d60f47a51c74ab6425ad41e1982",
        "systems": [],
        "type": "libretro"
      }
    },
    {
      "id": "ines",
      "profile": {
        "author": "Marat Fayzullin (Garage Research)",
        "core_classification": "other",
        "core_version": "6.1.4",
        "cores": [
          "ines"
        ],
        "display_name": "Nintendo - NES / Famicom (iNES)",
        "emulator": "iNES",
        "exclusion_note": "Left out are the files iNES writes and reads back itself, which are emulator state rather than anything a user obtains: <game>.sav holding battery backed cartridge RAM, <game>.sta and the desktop builds' DEFAULT.STA holding saved emulation state, and LOG.MID, the soundtrack the emulator records when the MIDI log is toggled on. libOpenSLES.so is left out as the Android audio library the system provides, dlopen'd by name from InitAudio and the only other literal filename in the binary. The twenty palettes under Palettes/ in the Windows and Ubuntu distributions are left out as the shipped candidates for iNES.pal, which the emulator never opens under those names; four of them are the VS System chip palettes, RP2C04-001, RP2C04-002, RP2C04-003 and RP2C05-004, and they reach the emulator through the palette entries above rather than a path of their own. Neither the VS System nor the FamilyBASIC keyboards need a file: DISKSYS.ROM is the only image the binary names. ref: libmain.so LoadNES 0x3bb49, 0x3bd52, libmain.so InitAudio 0x12cfc,\n     iNES61-Ubuntu-x86-bin ines DEFAULT.STA, iNES61-Windows-bin.zip Palettes/\n",
        "files": [
          {
            "description": "Famicom Disk System BIOS",
            "min_size": 8192,
            "name": "DISKSYS.ROM",
            "note": "Opened by bare name, so it resolves against the working directory and then against the home directory. Read as 0x2000 bytes into RAM at 0xE000; a missing file reports NOT FOUND and a short read FAILED, and either aborts the disk load. Only the length of that read is checked, so a longer file passes on its first 8192 bytes and no hash is compared. The open is gzip transparent, so a compressed copy answers too.",
            "required": true,
            "source_ref": "libmain.so LoadFDS 0x3bdd0-0x3c245 (open 0x3bf97, read 0x3bfc5-0x3bff7), iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9",
            "system": "nintendo-fds",
            "validation": [
              "size"
            ]
          },
          {
            "description": "startup colour palette",
            "name": "iNES.pal",
            "note": "Built as <HomeDir>/iNES.pal and loaded at startup when present, otherwise the built-in palette stands. Exactly 192 bytes is read as 64 RGB triples, any other length as text. No single file answers to this name: the desktop distribution ships twenty palettes under other names for the user to copy over.",
            "required": false,
            "source_ref": "libmain.so Application 0x39739-0x39795, StartNES 0x3a685-0x3a694, LoadPAL 0x3a870-0x3a930",
            "system": "nintendo-nes",
            "unsourceable": "any 64 colour palette the user picks, under the one name the code builds"
          },
          {
            "bundled": true,
            "category": "game_data",
            "crc32": "2e03cb7f",
            "description": "sample ROM image started when no game is given",
            "md5": "c1db31a2aa8a12432705fc8bd3c1156a",
            "name": "CART.NES",
            "note": "The only entry in assets/memfs.mp3, which MainActivity reads whole and jniStart mounts as an in-memory filesystem. A 16 byte header plus one 16 KB PRG bank and one 8 KB CHR bank. Application passes this name to StartNES when it is invoked without a ROM, so launching through ES-DE never reaches it.",
            "required": false,
            "sha1": "486eede1bb748d95efc8a2a3d46ef1a530100559",
            "size": 24592,
            "source_ref": "MainActivity.java:2246-2257, libmain.so 0x11ca6-0x11ccc, libmain.so Application 0x39887-0x3989c",
            "system": "nintendo-nes"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "title database keyed by system and CRC32",
            "name": "names.dat",
            "note": "Parsed from assets as lines of key colon title, keys reading NES-4C629A95. 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": 21390,
            "source_ref": "FileInfo.java:260-295"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "cheat database read by the Cheatopedia browser",
            "name": "ROOT.chts",
            "note": "Looked up in the package assets first, then through the home directory, its subdirectories and Downloads, with <HomeDir>/Cheats as the default cheat directory. Include lines pull further sets through the same lookup; the package carries seven of them, battle-toads, dragon-warrior, dragon-warrior-2, fceu, final-fantasy-2, final-fantasy-3 and super-mario-brothers.",
            "required": false,
            "size": 27447,
            "source_ref": "Cheatopedia.java:339, 448, 505-520, CheatHelper.java:14-24"
          },
          {
            "category": "game_data",
            "description": "IPS patch applied to the loaded ROM",
            "name": "<game>.ips",
            "note": "Named from the ROM path by MakeFileName and applied by ApplyIPS when present. A patch chosen by hand goes through the same call in LoadFile.",
            "required": false,
            "source_ref": "libmain.so LoadNES 0x3bc43 (ApplyIPS 0x3bc93), LoadFile 0x3acf8",
            "unsourceable": "a patch the user supplies for one title"
          },
          {
            "category": "game_data",
            "description": "cheat codes for one title",
            "name": "<game>.cht",
            "note": "Named from the ROM path by MakeFileName and read by LoadCHT when present. Distinct from the .chts sets of the Cheatopedia browser. The menu handler reaches the same loader for a file picked by hand.",
            "required": false,
            "source_ref": "libmain.so LoadNES 0x3bcdc (LoadCHT 0x3bcec), Joystick 0x39e7f",
            "unsourceable": "cheat codes the user writes or collects per title"
          },
          {
            "category": "game_data",
            "description": "colour palette for one title",
            "name": "<game>.pal",
            "note": "Named from the ROM path by MakeFileName and read by LoadPAL when present, taking precedence over the startup palette for that game.",
            "required": false,
            "source_ref": "libmain.so LoadNES 0x3bd2b",
            "unsourceable": "any 64 colour palette the user picks for one title"
          }
        ],
        "mode": "standalone",
        "notes": "NES and Famicom emulator by Marat Fayzullin, covering cartridges, the Famicom\nDisk System and the VS System. The build read here is the free Android APK the\nauthor publishes himself, package com.fms.ines versionName 6.1.4 versionCode\n6104, apk md5 d0e1b93b09d4b58294efd4e1509e25ca, signed CN=Marat Fayzullin\nO=Garage Research issued 2011, sha256\nd09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848; the two\ndownload paths on that site serve the same bytes. Google Play carries the\nemulator as com.fms.ines.free, the package ES-DE launches, and inside VGBAnext\nas com.fms.ng, the author recording that Play removed the original com.fms.ines\nlisting over its built-in cheats. The native libraries keep their symbol\ntables, so the 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. The\nfree iNES 6.1 builds for Windows and Ubuntu were read beside it and open the\nsame files under the same names. No source has ever been published: the author\nreleases ColEm and fMSX as source archives, while every iNES download on the\nsame site, from 0.7 for AIX and SunOS through 6.1, is a binary package.\nref: iNES-Android-6104.apk META-INF/CERT.RSA, https://fms.komkon.org/iNES/,\n     iNES61-Windows-bin.zip, iNES61-Ubuntu-x86-bin.tgz\n\nOne directory holds everything the emulator reads. MainActivity hands\nEMULib.k() to jniStart, which copies it into the buffer GetHomeDir returns and\npasses that same buffer to SetPrivateDir. Every open goes through mopen, which\ncalls OpenRealFile: the name is tried as given and again as\n<PrivateDir>/<basename>, and when both open the larger of the two is kept. That\ndirectory is <ExternalStorage> joined with the application label up to its first\nspace, so iNES, falling back to getExternalFilesDirs(null) when the path is not\na writable directory. mopen layers gzdopen over the result, so any of these\nfiles also opens gzipped, and a content:// name is routed to the Android storage\nframework instead.\nref: MainActivity.java:2257, EMULib.java:1328, EMULib.java:408,\n     EMULib.java:474-505, EMULib.java:682, libmain.so 0x1212a-0x1218c,\n     libmain.so OpenRealFile 0x32070-0x32285, libmain.so mopen 0x322b0-0x323f2\n\nDISKSYS.ROM is the only filename compiled into the emulator. LoadFDS reads the\ndisk image first, taking a bare *NINTENDO-HVC* header or the 16 byte FDS wrapper\nahead of it, then opens DISKSYS.ROM and reads 0x2000 bytes into RAM at 0xE000. A\nfailed open leaves the status at NOT FOUND and a short read at FAILED, and\neither makes LoadFDS return zero, so the disk never starts. Nothing about the\nimage is checked past the length of that read. Cartridge titles never reach this\npath.\nref: libmain.so LoadFDS 0x3bdd0-0x3c245, open 0x3bf97, read 0x3bfc5-0x3bff7,\n     iNES61-Ubuntu-x86-bin ines 0x38165-0x381a9\n\nThe startup palette is <HomeDir>/iNES.pal, assembled in Application from\nGetHomeDir and held in PalName, which StartNES loads when it is set. LoadPAL\nreads the first 256 bytes: exactly 192 is taken as 64 RGB triples fed to\nSetColor one at a time, anything else is parsed as text. A missing file leaves\nthe built-in palette in place. The desktop distribution ships twenty candidates\nunder Palettes/ to copy into that single name, the Android package none.\nref: libmain.so Application 0x39739-0x39795, StartNES 0x3a685-0x3a694,\n     LoadPAL 0x3a870-0x3a930, iNES61-Windows-bin.zip Palettes/\n\nLoadNES derives five companion names from the ROM path through MakeFileName:\n.sav, .ips, .cht, .pal and .sta. Started with no ROM name at all, Application\nsubstitutes CART.NES.\nref: libmain.so LoadNES 0x3bb49, 0x3bc43, 0x3bcdc, 0x3bd2b, 0x3bd52,\n     libmain.so Application 0x39887-0x3989c\n\nThree package resources are read at runtime. assets/memfs.mp3 is passed whole to\njniStart and mounted as an in-memory filesystem carrying one entry, CART.NES.\nassets/names.dat fills the title lookup and is then extended by\n<HomeDir>/names.dat, whose entries win on collision. assets/ROOT.chts opens the\ncheat browser, its Include lines pulling further sets through the same lookup,\nwhich falls back to <HomeDir>/Cheats and to the home directory itself.\nref: MainActivity.java:2246-2257, libmain.so 0x11ca6-0x11ccc,\n     FileInfo.java:260-295, Cheatopedia.java:339, 448, 505-520,\n     CheatHelper.java:14-24\n",
        "profiled_date": "2026-08-11",
        "source": "https://fms.komkon.org/iNES/iNES-Android-6104.apk",
        "systems": [
          "nintendo-nes",
          "nintendo-fds"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "infinity",
      "profile": {
        "author": "GuoPing He",
        "based_on": "fake-08 by jtothebell",
        "core_classification": "community_fork",
        "core_version": "5",
        "cores": [
          "infinity"
        ],
        "display_name": "PICO-8 (Infinity)",
        "emulator": "Infinity",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vulkan vertex shader module",
            "md5": "541e16aa5651699bb085c954ec1b043e",
            "name": "common.vert.spv",
            "note": "Opened first whenever the Vulkan backend starts, whatever the display filter. Bytes from versionCode 404.",
            "path": "assets/shaders/common.vert.spv",
            "required": false,
            "sha1": "20815dcbfaff559ec0faf0f890ad473a3b784ed0",
            "size": 748,
            "source_ref": "libinfinity.so arm64 0xa7078, 0x9c780-0x9c78c",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vulkan fragment shader module, unfiltered output",
            "md5": "8437c4e750da7183dffc7b98f9938377",
            "name": "none.frag.spv",
            "note": "Chosen for any display filter value other than 1 and 2, the stored default being 0. Bytes from versionCode 404.",
            "path": "assets/shaders/none.frag.spv",
            "required": false,
            "sha1": "f3aae57c3f776d35ddf2690679221c05745dcc8b",
            "size": 580,
            "source_ref": "libinfinity.so arm64 0xa6f04-0xa6f40, 0xa7090-0xa7098, 0x9c7ec-0x9c828",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vulkan fragment shader module, CRT filter",
            "md5": "c4878a2aaee2e3c26d3d4aeeeaa3ac25",
            "name": "crt.frag.spv",
            "note": "Chosen when the display filter is 1. Bytes from versionCode 404.",
            "path": "assets/shaders/crt.frag.spv",
            "required": false,
            "sha1": "92822c268c59f60fe9a4098768be599006f7f1ab",
            "size": 1864,
            "source_ref": "libinfinity.so arm64 0xa6f34-0xa6f40, 0xa7090-0xa7098, 0x9c7ec-0x9c828",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vulkan fragment shader module, LCD filter",
            "md5": "76f36cbe69708d631ae356bcd49274b2",
            "name": "lcd.frag.spv",
            "note": "Chosen when the display filter is 2. Bytes from versionCode 404.",
            "path": "assets/shaders/lcd.frag.spv",
            "required": false,
            "sha1": "1a3c0aa0b93cc1ee4690b2c0d593497d003b6165",
            "size": 1700,
            "source_ref": "libinfinity.so arm64 0xa6f10-0xa6f30, 0xa7090-0xa7098, 0x9c7ec-0x9c828",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Built-in cart, 7x7 Demake",
            "md5": "1d6416a591c99b03c58b41f0dd5537b0",
            "name": "7x7demake.p8.png",
            "note": "Held as a file:///android_asset URI and prepended to the library when the built-in carts switch is on, the loader taking the path after the scheme and reading it from the assets.",
            "path": "assets/7x7demake.p8.png",
            "required": false,
            "sha1": "35ec298b803b29b6bee6d89f46507c50a3461b35",
            "size": 7443,
            "source_ref": "qd.java:15-17, pg0.java:50, ok0.java:139-142",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Built-in cart, Infinity Tic Tac Toe",
            "md5": "4f508068de9190c06775bfb4e47e2654",
            "name": "tictactoe.p8.png",
            "note": "Second entry of the same table, loaded the same way.",
            "path": "assets/tictactoe.p8.png",
            "required": false,
            "sha1": "5a7d0bd289e971a4ea6dfb09704b56252b85fe01",
            "size": 7537,
            "source_ref": "qd.java:18-20, pg0.java:50, ok0.java:139-142",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Licence text shown for fake-08",
            "md5": "a382a7e446335d3ea20f85a21a5846ec",
            "name": "fake-08.md",
            "note": "First of four names paired with the library names fake-08, coil, okio and DocumentFileCompat, each read from the assets when its entry is opened.",
            "path": "assets/fake-08.md",
            "required": false,
            "sha1": "6d7e23241be0a110bc59110773963f678e199c32",
            "size": 5543,
            "source_ref": "ry0.java:14-15, yq0.java:125",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Licence text shown for coil",
            "md5": "06f4dfd96b1e7f0b6d5cc7f7163c7904",
            "name": "coil.txt",
            "path": "assets/coil.txt",
            "required": false,
            "sha1": "14d28015d8a8c902d219b6a24d2241aa061dda09",
            "size": 11347,
            "source_ref": "ry0.java:14-15, yq0.java:125",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Licence text shown for okio",
            "md5": "3b83ef96387f14655fc854ddc3c6bd57",
            "name": "okio.txt",
            "path": "assets/okio.txt",
            "required": false,
            "sha1": "2b8b815229aa8a61e483fb4ba0588b8b6c491890",
            "size": 11358,
            "source_ref": "ry0.java:14-15, yq0.java:125",
            "system": "pico8"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Licence text shown for DocumentFileCompat",
            "md5": "86d3f3a95c324c9479bd8986968f4327",
            "name": "dfc.txt",
            "path": "assets/dfc.txt",
            "required": false,
            "sha1": "7df059597099bb7dcf25d2a9aedfaf4465f72d8d",
            "size": 11357,
            "source_ref": "ry0.java:14-15, yq0.java:125",
            "system": "pico8"
          }
        ],
        "mode": "standalone",
        "notes": "Android package me.dt2dev.infinity, closed source, free with ads on Google Play.\nTwo builds are read here, versionCode 501 (versionName 5, minSdk 32, targetSdk 37,\nxapk sha256 d0040583814a634c9aa2ff56b8245f1eb94f33ee0785c264bccfa5188cd3a273) and\nversionCode 404 (minSdk 30), both carrying lib/arm64-v8a, the Play app signing\ncertificate sha256\neb7b3dd469cf44ab614abda7a367c20de540014a37bb2b915dffecf5f3268da2 and the Play\ndistribution source stamp.\n\nThe engine is fake-08 compiled into libinfinity.so and driven through a nine\nmethod JNI bridge. Its Lua blobs are upstream: the settings cart is byte identical\nto fake-08 814991a and the default cart differs only where VER_STR is spliced, the\nAndroid build leaving that macro undefined so the boot cart reports v0.0.0.0. The\nglobal Lua glue is patched in five places, all in the pause menu, where \"exit to\nmenu\" and \"exit to settings\" give way to a single \"quit game\" calling the native\n__quitgame, navigation wraps around and the menu holds eight items instead of\nnine. No menu entry reaches the cart browser or the settings cart any more, the\nCompose interface listing the library instead.\nref: Fake8.java:27-44, 60, 95,\n     libinfinity.so arm64 .rodata DefaultCart / FakoSettings / p8GlobalLuaFunctions\n     blobs, symbol __quitgame\n\nA cart never reaches the engine as a path. Java reads the bytes into a direct\nByteBuffer, from the application assets for a built-in cart or through the content\nresolver for anything else, then hands the buffer to nativeStart with the save\nstate name <cart>.ss and the application's internal files directory, where a cdata\nsubdirectory holds the <id>.p8d.txt cart data files. No storage permission is\ndeclared: the cart library is a directory tree granted through the storage access\nframework, and the only write outside internal storage is the .nomedia file that\nthe \"Show Carts in Photos\" switch creates or deletes there.\nref: pg0.java:50-92, ok0.java:139-146, yk0.java:54-63,\n     libinfinity.so arm64 .rodata \".p8d.txt\"\n\nES-DE targets me.dt2dev.infinity/.SchemeActivity with a VIEW intent on its own\ncontent provider. The activity reads the display name from the provider, accepts\nit only when it ends in .p8 or .p8.png, strips that extension and forwards\ninfinity://game with cart_uri, filename, save_state=false and assets=false to\nMainActivity. The manifest filter announces the content scheme with the image/png\ntype, which an explicit component bypasses.\nref: SchemeActivity.java:25-84, AndroidManifest.xml activity me.dt2dev.infinity.SchemeActivity\n\nTwo graphics backends. OpenGL ES is the default and carries its three fragment\nprograms as GLSL string literals inside the library. Vulkan, offered as beta,\nreads SPIR-V modules from the application assets instead, one vertex module plus\none fragment module chosen by the display filter. Version 501 ships no shader\nasset at all, version 404 ships the four listed below, and both libraries name\nthem; the loader takes no null check between AAssetManager_open and\nAAsset_getLength. The manifest requires only abi and density splits, so no asset\npack can deliver them separately.\nref: vh.java:381 graphics_backend default 0, vh.java:297 display_filter default 0,\n     libinfinity.so arm64 0xa6ee0-0xa7098, 0x9c72c-0x9c828\n",
        "profiled_date": "2026-08-11",
        "source": "https://play.google.com/store/apps/details?id=me.dt2dev.infinity",
        "systems": [
          "pico8"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "iratajaguar",
      "profile": {
        "author": "Maxim Grishin (Altmer)",
        "core_classification": "other",
        "core_version": "1.0.7",
        "cores": [
          "iratajaguar"
        ],
        "display_name": "Atari - Jaguar (IrataJaguar)",
        "emulator": "IrataJaguar",
        "exclusion_note": "Left out are the files the emulator writes and reads back itself, which are state rather than anything a user obtains: configs.xml, the dump library holding the scanned paths with their sizes and hashes, settings.ini, the savestates under .states that the game list offers as Continue and Auto entries, the NM93 EEPROM image behind the cartridge save, and test.txt, written and deleted to decide whether a chosen directory is writable. The on-screen control graphics are APK raw resources handed to the core through setImageRes as pixel buffers, not files opened from storage, and the character glyphs are compiled into the library. No CD image or CD BIOS applies: platformJaguar declares only the CARTRIDGE and BIOS elements and no CD extension, and the only CD adapter in the core belongs to the 3DO platform, so Atari Jaguar CD is out of scope for this emulator. ref: libphoenixcore.so 0xb5663-0xb5774, MainActivity.java:189-199, 218-237,\n     607-610, platformJaguar::getConfig 0x8ce080, dumpAdapter3DOcd 0x52b550\n",
        "files": [
          {
            "description": "Atari Jaguar boot ROM",
            "name": "[BIOS] Atari Jaguar (World).j64",
            "note": "The emulator spells no filename for it. Any file the directory scan reaches whose first twelve bytes are 00 00 00 00 00 E0 00 08 41 F9 00 F0 is taken as the BIOS, so more than one boot ROM revision answers; the name carried here is the catalogue name of the retail dump, crc32 FB731AAA, under the extension the BIOS data element declares. Read into a 1 MB window at 0xE00000 and byte swapped, and its first eight bytes are copied over DRAM 0 to give the 68000 its reset vector. A longer file is read up to that bound rather than rejected.",
            "required": true,
            "source_ref": "dumpAdapterJaguarROM::dumpAdapterJaguarROM 0x8d3c20 (memcmp 0x8d4259-0x8d426f), bios_sign 0x99d7a0, platformJaguar::getConfig 0x8ce197-0x8ce209, platformJaguar::platformJaguar 0x8d0bc7-0x8d0c2e",
            "system": "atari-jaguar",
            "validation": [
              "signature"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Atari Jaguar emulator for Android, the Android build of Maxim Grishin's Phoenix\nEmu Project. The native library is libphoenixcore.so and reports\nPhoenixEmuProject core 2.8.21; the same core carries the author's desktop builds\nand his three other Android emulators, Real3DOPlayer, NumPadPlayer and\nGearMasterPlayer. The build read here is the free package the author publishes\nhimself, IrataJaguar_free_1.0.7.zip holding app-release.apk md5\na3e019d32203908d49e8220a79d8b570, package ru.vastness.altmer.iratajaguar\nversionName 1.0.7, minSdk and targetSdk 23, signed CN=MAXIM GRISHIN\nO=AltmerSoft L=Tula C=RU issued 2017-06-12, sha256\nf268dda6844e4f6013731f7ec7adbbb89a22cf06c9753e85c184b889dc81a758. No source has\nbeen published. The Android slices are stripped, so the readings below were\ntaken against the desktop 2.8.JAG build from the same site, which keeps its\nsymbol table, and each was confirmed against the Android x86_64 slice; the\narm64-v8a, armeabi-v7a and x86 slices carry the same signature bytes at 0x9f7e8,\n0x83988 and 0xba848.\nref: app-release.apk META-INF/CERT.RSA, AndroidManifest.xml,\n     http://www.arts-union.ru/node/23, ph28jag-lin-x64.zip PhoenixEmuProject\n\nOne directory holds the cartridges and the BIOS together. MainActivity walks the\nexternal storage roots for a subdirectory named jaguar and offers the first one\nit finds, the settings tab lets the user pick another, and the choice is kept in\nthe preference dumps. countGames scans that directory for the extensions bin,\nrom, jag, cof and j64 and hands every candidate to the library, which caches what\nit found in configs.xml under the private storage path as Library/CARTRIDGE and\nLibrary/BIOS entries carrying path, size, fast-md5, md5 and sh1. Those hashes are\nthe cache key; nothing compares them against a known value. nameOfBios returns\nthe single BIOS the library holds and the game list shows it as its first row,\nshifting the game indices by one.\nref: MainActivity.java:257-273, 382-392, 447, 517, 99-100, 557-561,\n     libphoenixcore.so countGames 0x8a1e0-0x8a5e6 (extensions 0x8a2ed-0x8a4b5),\n     libphoenixcore.so 0xa4600-0xa4d4f (BIOS branch 0xa478f, entry write 0xa483e)\n\nThe BIOS is recognised by content, not by name. platformJaguar::getConfig\ndeclares two data elements, CARTRIDGE taking jag, cof and j64 and BIOS taking\nj64, and createDumpAdapter builds dumpAdapterJaguarROM with its bios flag set for\neverything that is not the CARTRIDGE element. That constructor reads the first\n0x2000 bytes and compares the first twelve against bios_sign, 00 00 00 00 00 E0\n00 08 41 F9 00 F0, the 68000 reset vector a Jaguar boot ROM opens with: stack\npointer zero, program counter 00E00008, then the LEA that follows it. Every\ncandidate is tried as BIOS before cartridge. Nothing past those twelve bytes is\nexamined, so no length and no hash gates the file.\nref: platformJaguar::getConfig 0x8ce080 (CARTRIDGE 0x8ce082, extensions\n     0x8ce115-0x8ce147, BIOS 0x8ce197, extension 0x8ce1f2),\n     dumpLibrary::createDumpAdapter 0x4f9600 (0x4fa37e-0x4fa402 cartridge,\n     0x4fa4e7-0x4fa4fc bios flag set), dumpAdapterJaguarROM::dumpAdapterJaguarROM\n     0x8d3c20 (read 0x8d3c88, memcmp 0x8d4259-0x8d426f), bios_sign 0x99d7a0,\n     libphoenixcore.so 0x48162-0x482c3\n\nA cartridge does not boot without it. The platform constructor gives the BIOS\n1 MB at 0xE00000 and the cartridge 8 MB at 0x800000, zeroes both, then pulls each\nthrough the frontend by data element index, 0 for the cartridge and 1 for the\nBIOS, byte swapping what comes back. When the BIOS read returns bytes and the\ncartridge is not an executable image, the first eight bytes of the BIOS are\ncopied over DRAM 0, which is where cpu68K::Reset fetches the supervisor stack\npointer and the program counter. Without a BIOS those eight bytes stay zero and\nthe 68000 starts at 0 in cleared DRAM. The two images that skip it carry their\nown entry point: a JAGR header at offset 0x1c, whose body the constructor copies\ninto DRAM itself, and a COFF image whose first word is 0x0150, the cof extension\nthe config declares. Neither is a cartridge dump. There is no HLE path, and\nplatform3DO::noBios has no platformJaguar counterpart in the same binary.\nref: platformJaguar::platformJaguar 0x8d03d0 (buffers zeroed 0x8d0a35-0x8d0a8b,\n     cartridge 0x8d0aa7, BIOS 0x8d0bc7-0x8d0be1, reset vector copy\n     0x8d0c0b-0x8d0c2e, JAGR 0x8d0aec-0x8d0b74, COFF 0x8d0b98 and 0x8d16b9),\n     cpu68K::Reset 0x8c9e90, platformJaguar::read32_cpu 0x8cc1a0\n     (BIOS window 0x8cc1d4-0x8cc286), platformJaguar::read16 0x8cbdc0\n\nA launcher can bypass the scan. MainActivity reads the intent extras rom and bios\nand passes them to the core as ext-rom and ext-bios, the paths used in place of\nthe library, and switches to the reduced layout when either is present.\nEmulatorActivity, the activity registered for android.intent.action.VIEW, takes\nonly lunchMode and lockOrient and replays whatever the library already holds.\nref: MainActivity.java:480-481, 421-424, EmulatorActivity.java:33-35, 45,\n     AndroidManifest.xml, libphoenixcore.so nativeOnCreate 0x8b2a2-0x8b562\n",
        "profiled_date": "2026-08-11",
        "source": "http://www.arts-union.ru/node/23",
        "systems": [
          "atari-jaguar"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "ishiiruka",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "Git",
        "cores": [
          "ishiiruka"
        ],
        "data_directories": [
          {
            "destination": "Sys",
            "ref": "dolphin-sys",
            "source_ref": "Source/Core/Common/CommonPaths.h:130-131"
          }
        ],
        "display_name": "Nintendo - GameCube / Wii (Ishiiruka)",
        "emulator": "Ishiiruka",
        "files": [
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/ConfigManager.cpp:876-883, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:105"
          },
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube PAL boot ROM",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:185"
          },
          {
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "GameCube NTSC-J boot ROM",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:187"
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "name": "dsp_rom.bin",
            "note": "DSP instruction ROM for LLE audio. Free replacement included",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:112, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:142-150, Source/Core/Core/DSP/DSPCore.cpp:48,67",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "name": "dsp_coef.bin",
            "note": "DSP coefficient ROM for LLE audio and HLE polyphase resampling. Free replacement included",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:113, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:143-153, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:43-72, Source/Core/Core/DSP/DSPCore.cpp:48,68",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "name": "font_western.bin",
            "note": "Windows-1252 font for GC/Wii text rendering. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_western.bin",
            "required": false,
            "size": 9589,
            "source_ref": "Source/Core/Common/CommonPaths.h:109, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:123,193-227"
          },
          {
            "hle_fallback": true,
            "name": "font_japanese.bin",
            "note": "Shift-JIS font for Japanese text. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_japanese.bin",
            "required": false,
            "size": 303693,
            "source_ref": "Source/Core/Common/CommonPaths.h:110, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:122,193-227"
          },
          {
            "hle_fallback": true,
            "name": "codehandler.bin",
            "note": "Gecko/Ocarina cheat code handler. Shipped with Ishiiruka in Sys/",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:127, Source/Core/Core/GeckoCode.cpp:86"
          },
          {
            "hle_fallback": true,
            "name": "SYSCONF",
            "note": "Wii system configuration. Auto-generated, can be imported from NAND backup",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:59,95, Source/Core/Common/SysConf.cpp:40"
          },
          {
            "hle_fallback": true,
            "name": "setting.txt",
            "note": "Wii region/language settings. Auto-generated during Wii boot emulation",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:125, Source/Core/Core/Boot/Boot_BS2Emu.cpp:229-266"
          },
          {
            "hle_fallback": true,
            "name": "sd.raw",
            "note": "Virtual SD card image for Wii homebrew. Auto-created (128MB) if not present",
            "path": "Wii/sd.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:122, Source/Core/Core/IOS/SDIO/SDIOSlot0.cpp:63-73"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "nand.bin",
            "note": "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:29-47"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "keys.bin",
            "note": "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import",
            "path": null,
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:23-24,82-93"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "clientca.pem",
            "note": "SSL client certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:199-264"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "clientcakey.pem",
            "note": "SSL client private key. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientcakey.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:235"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "rootca.pem",
            "note": "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/rootca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:236"
          }
        ],
        "notes": {
          "data_dir_note": "Standalone builds use \"ishiiruka\" as DOLPHIN_DATA_DIR (CommonPaths.h:24,27), but the libretro core overrides this to use \"dolphin-emu\" paths (Boot.cpp:46,49).\n",
          "data_dir_standalone": "ishiiruka",
          "dolphin_fork": true,
          "dsp_rom_note": "DSP ROMs verified at load time via Adler32 hash. Official Nintendo hashes: irom=0x66f334fe, drom=0xf3b93527. Free replacement ROMs (v0.1 through v0.4) shipped in Sys/GC/.\n",
          "font_note": "Fonts loaded from three sources: IPL dump, standalone files in Sys/GC/, or bundled free alternatives. Free alternatives have different padding metrics than original Nintendo fonts.\n",
          "fork_base": "Dolphin 5.0-era",
          "fork_differences": "Dolphin fork with custom GPU backends, async shader compilation, post-processing. BIOS/firmware handling identical to upstream Dolphin of the same era. No GBA link support (no mGBA integration). No Realtek Bluetooth firmware support.\n",
          "hle_available": true,
          "hle_note": "HLE covers GameCube IPL (boot ROM), DSP, and Wii system functions.\n",
          "ipl_regions": [
            "USA",
            "EUR",
            "JAP"
          ],
          "library_name": "Ishiiruka",
          "libretro_path": "system/dolphin-emu/",
          "nand_note": "Wii NAND content managed internally. BootMii NAND backup (nand.bin + optional keys.bin) import supported in standalone mode only.\n",
          "valid_extensions": "elf|dol|gcm|iso|tgc|wbfs|ciso|gcz|wad"
        },
        "pack_structure": {
          "libretro": "dolphin-emu",
          "standalone": ""
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/ishiiruka",
        "source_commit": "f228bde5fbf4861ba749a229803addcd6238663f",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/Tinob/Ishiiruka"
      }
    },
    {
      "id": "izapple2",
      "profile": {
        "analysis": {
          "embedded_resources": {
            "card_firmware": [
              {
                "filename": "Apple Disk II 16 Sector Interface Card ROM P5 - 341-0027.bin",
                "md5": "2020aa1413ff77fe29353f3ee72dc295",
                "sha1": "d4181c9f046aafc3fb326b381baac809d9e38d16",
                "size": 256
              },
              {
                "filename": "Apple Disk II 16 Sector Interface Card ROM P6 - 341-0028.bin",
                "md5": "5f1be0c1cdff26f5956eef9643911886",
                "sha1": "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4",
                "size": 256
              },
              {
                "filename": "Apple Disk II 13 Sector Interface Card ROM P5 - 341-0009.bin",
                "md5": "4f80448507cf43ab40c17ac08d89e278",
                "sha1": "afd060e6f35faf3bb0146fa889fc787adf56330a",
                "size": 256
              },
              {
                "filename": "Apple Disk II 13 Sector Interface Card ROM P6 - 341-0010.bin",
                "md5": "897b0edef70b440133c99f65a507ebb6",
                "sha1": "e3d6d1c30653572b49ecc2dc54ce073978411a04",
                "size": 256
              },
              {
                "filename": "Apple II Parallel Printer Interface Card ROM fixed.bin",
                "md5": "275a06e8fec1e53a8315df54d1719822",
                "sha1": "6392019fdb1498149d00a3cd98b1723b3f245847",
                "size": 256
              },
              {
                "filename": "Apple II Interface 341-0271-A ROM 2716 for 5MB Profile.bin",
                "md5": "82015e7e3462116e2d1aa1d35d4f52b1",
                "sha1": "d9d4a7a2c14232c3872f9bbf55aff1b31f9a1cb5",
                "size": 2048
              },
              {
                "filename": "Apple II Interface 341-0299-B ROM 2716 for 10MB Profile.bin",
                "md5": "e841f266fcc2e2452b26c73c4fb93eb0",
                "sha1": "81750f023f964c2f3781d687cee5b1ea5b49d4ea",
                "size": 2048
              },
              {
                "filename": "MemoryExpansionCard-341-0344a.bin",
                "md5": "a434738170b38589261bf93f3027a528",
                "sha1": "6e823a1fa40ed37eeddcef23f5df24da2ea1463e",
                "size": 4096
              },
              {
                "filename": "ramfactor_rom_14.bin",
                "md5": "e3f6a5c1ff75d278362a08403f8b1fec",
                "sha1": "32cb02a6a915dd3962bfa1f0184a94253e03ba6b",
                "size": 8192
              },
              {
                "filename": "ThunderclockPlusROM.bin",
                "md5": "138b1f7e30953fcaa58fcbf562c15001",
                "sha1": "60f434f5325899d7ea257a6e56e6f53eae65146a",
                "size": 2048
              },
              {
                "filename": "Videx Videoterm ROM 2.4.bin",
                "md5": "acdb3732b38ddaee5ad357e08eea7676",
                "sha1": "bb653836e84850ce3197f461d4e19355f738cfbf",
                "size": 1024
              },
              {
                "filename": "videx_ultraterm_frm_b537.bin",
                "md5": "72972c464ecd229db27e03da1c92c332",
                "sha1": "b4acd1775c08ae43996ab4edf6d8e28f4736346b",
                "size": 4096
              },
              {
                "filename": "SwyftCard ROM.bin",
                "md5": "95a5579c1229944dd4841a1fb34e9e47",
                "sha1": "1554bd03c536789f0ff7d1ef6c992265e311935d",
                "size": 16384
              },
              {
                "filename": "ApplesoftInteger.BIN",
                "md5": "a7bae7a0a70cb4019c5145060e6a3451",
                "sha1": "b929f27b15de61391e28c18951e8d17dd8fd9435",
                "size": 65536
              },
              {
                "filename": "MultiRom(SP boot)-Prog aid-28C256.BIN",
                "md5": "ecf5aa6f46a85ace61eb5cec505a908d",
                "sha1": "fb69c1f4551626749e7cfcfa5e2c27af7f195b8d",
                "size": 32768
              },
              {
                "filename": "Apple2CardFirmware.bin",
                "md5": "76e795393f308a0788f2f95a67431b9a",
                "sha1": "b8b0458e8b0c3b406e03f5e8096cbc5cebd127b0",
                "size": 512
              },
              {
                "filename": "Apple2CardFirmwareImproved.bin",
                "md5": "d2cf1b181b1934f9533c6d8b9d02f44c",
                "sha1": "5e2737d233f5769df654d2d5aa96d24f2fd85671",
                "size": 512
              }
            ],
            "character_roms": [
              {
                "filename": "Apple2rev7CharGen.rom",
                "md5": "9ac0dc8c4d0002eb45b0b84be0bde5ec",
                "sha1": "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659",
                "size": 2048
              },
              {
                "filename": "Apple IIe Video Unenhanced.bin",
                "md5": "2fbc2be2a84ea742de37be9925c7d7cd",
                "sha1": "58ad0008df72896a18601e090ee0d58155ffa5be",
                "size": 4096
              },
              {
                "filename": "Apple IIe Video Enhanced.bin",
                "md5": "9123fff3442c0e688cc6816be88dd4ab",
                "sha1": "b2b5d87f52693817fc747df087a4aa1ddcdb1f10",
                "size": 4096
              },
              {
                "filename": "BASE64A_ROM7_CharGen.BIN",
                "md5": "0b144915453e5fa9d1f4a4cb85438eb7",
                "sha1": "d3827e22f377b681de1f8b18d8e57c66ca85cf38",
                "size": 4096
              },
              {
                "filename": "D29_basis_cg_2532.rom.BIN",
                "md5": "37a23661f21e4945aef680ac94f4d435",
                "sha1": "e6e4e357b3834a143df9e5834abfb4a9139457d4",
                "size": 4096
              },
              {
                "filename": "ROMXce Production 1Mb Text ROM V5.bin",
                "md5": "3e9255b76fcd20a84d4a40e99904c15d",
                "sha1": "12b5596ffeb3ee334d43c1d8031ea3c0b1e2429c",
                "size": 131072
              },
              {
                "filename": "80ColumnP109.BIN",
                "md5": "e564b4bb5728cc7b5f2c4c56330f7ad5",
                "sha1": "b1fad3f20e84c3063f25ba66555a1624563fff6b",
                "size": 1024
              },
              {
                "filename": "80ColumnP110.BIN",
                "md5": "ce6630f0a1f3ba08127a2e82facc7a25",
                "sha1": "aefae76fb07740d042cf294f01424efa7cc7a199",
                "size": 2048
              },
              {
                "filename": "videx_ultraterm_chs_7859.bin",
                "md5": "1d77cc5edd8ea1330745efbb9bb4c902",
                "sha1": "3517fa9e7a39573f1cb159b3161d6939dec199ba",
                "size": 4096
              }
            ],
            "count": 59,
            "diskettes": [
              {
                "filename": "dos33.dsk",
                "md5": "b13de32fd7a97d817744bf2dd71d5479",
                "sha1": "63392d078a159342b12667d0fdfea7a01a961978",
                "size": 143360
              },
              {
                "filename": "dos32.nib",
                "md5": "082e79bb10fa5dcf07b2e49f689f5439",
                "sha1": "3549a3a7d990d5b258f56fdc765258cb2ffb81ff",
                "size": 232960
              },
              {
                "filename": "ProDOS_2_4_3.po",
                "md5": "0577bdbb9c082787d00d50c830a75d67",
                "sha1": "4bd80c2220b48cdcdcbe3876529a34b9a18efe5f",
                "size": 143360
              },
              {
                "filename": "cpm_2.20B_56K.po",
                "md5": "c2c24f49d7c736e6317f6fe45d8f7468",
                "sha1": "cbd86f70ad822af826ae5039955997d722ae9d6a",
                "size": 143360
              },
              {
                "filename": "CPM3.1_Disk_1.dsk",
                "md5": "e28e1efa972cf4789aec6f29e9e08013",
                "sha1": "0305c74cf24b618b29047bf6b624e607071c954b",
                "size": 143360
              },
              {
                "filename": "CPM3.1_Disk_2.dsk",
                "md5": "5c5e948e7636c2b1e11735661788e24d",
                "sha1": "daecdcd23366029b066fc28694c924c958acab26",
                "size": 143360
              },
              {
                "filename": "cpm65.po",
                "md5": "685800279db9ee7131bb284061c8a007",
                "sha1": "88fbea7f89ce2171afa10e86c825511913603ad7",
                "size": 143360
              },
              {
                "filename": "A2DeskTop-1.4-en_800k.2mg",
                "md5": "304a4585cefc808f9b7b9e585e6dc9c2",
                "sha1": "88ccfe5fffbcc3d170d9c864cfcbbe9debc98cf7",
                "size": 819264
              },
              {
                "filename": "Card Cat 1.7.dsk",
                "md5": "d9aeb6dcd25cbe06f1e0a5e39ae7d23f",
                "sha1": "8dd11509479d37e9f46a29cb120eb0a1028b2c0d",
                "size": 143360
              },
              {
                "filename": "Videx Ultraterm Utilities.dsk",
                "md5": "81306cc573bf67153ca8d3f93a4528aa",
                "sha1": "76f6d461e959f75be9cfcbbbf6479bdc8af6d176",
                "size": 143360
              },
              {
                "filename": "SwyftWare_-_SwyftCard_Tutorial.woz",
                "md5": "9ab515de46831b4b1274cae01c14b621",
                "sha1": "c27a1e4ad98be52ce6dbfef801d8083578084569",
                "size": 101807
              },
              {
                "filename": "audit.dsk",
                "md5": "917056239add083b76d5d72f8264cdda",
                "sha1": "489cea555cdbe0957a9d31b7ae29b013a1a2525c",
                "size": 143360
              },
              {
                "filename": "Apple II Pascal 1.3 APPLE0_ 680-0282-A.dsk",
                "md5": "8f01fb2ab2826adf336061c102a7b94d",
                "sha1": "58023a7e41623250213b9ab60b47798dcab00031",
                "size": 143360
              },
              {
                "filename": "Apple II Pascal 1.3 APPLE1_ 680-0283-A.dsk",
                "md5": "4f328d449cb9d34da866bfd9caad7efb",
                "sha1": "8bbf47dce65ab672928ac16fe31e883afcf36f8a",
                "size": 143360
              },
              {
                "filename": "Apple II Pascal 1.3 APPLE2_ 680-0284-A.dsk",
                "md5": "41ed020ea6b1d4c682d9f92cf3b7c770",
                "sha1": "f46b04bda181cb0b6c79088d0f9efa8dd5b1db83",
                "size": 143360
              },
              {
                "filename": "Apple II Pascal 1.3 APPLE3_ 680-0290-A.dsk",
                "md5": "88c0f98953b4c7c1cb42ea1d745c518e",
                "sha1": "10d2187111a1ccab8ed5b8141db81329e3e30768",
                "size": 143360
              }
            ],
            "main_roms": [
              {
                "filename": "341-000x_integer.rom",
                "md5": "894e6980cadd7bb3178b1ac8a15798df",
                "sha1": "102fbf7dea8b8d6de5de1c484ff45e7b5dfb28d5",
                "size": 8192
              },
              {
                "filename": "Apple2_Plus.rom",
                "md5": "572b3005a4fa49bc54917b069b82c1ab",
                "sha1": "33a24f5489ba9195b44be77d9afb2252594cb5c7",
                "size": 12288
              },
              {
                "filename": "Apple2e.rom",
                "md5": "346bc782c6a08a531c460e33bc03daf4",
                "sha1": "61fa9254628e5bb7236fb474006116d67684d747",
                "size": 16384
              },
              {
                "filename": "Apple2e_Enhanced.rom",
                "md5": "38063e08c778503fc03ecebb979769e9",
                "sha1": "b8ea90abe135a0031065e01697c4a3a20d51198b",
                "size": 16384
              },
              {
                "filename": "wozaniam_integer.rom",
                "md5": "2f52e3571b952c0c6a7111bbe7d40b06",
                "sha1": "5f7b851dbcab1df8f1883d2112f6ab1d16109f24",
                "size": 32768
              }
            ],
            "main_roms_clones": [
              {
                "filename": "BASE64A_D0.BIN",
                "md5": "3be17e122814854eef489aa18fb2a18b",
                "sha1": "bd68bc9144483faff473e66a12eddd31fe369b68",
                "size": 4096
              },
              {
                "filename": "BASE64A_D8.BIN",
                "md5": "85fe91818dc1a6104a632f667d5d50ae",
                "sha1": "8f19accf1d531779940be3f3c12af8277a3c412f",
                "size": 4096
              },
              {
                "filename": "BASE64A_E0.BIN",
                "md5": "1713e0a1013ac7f219de68a03e24acb7",
                "sha1": "f698da38f4f48bb9db73a71f85e6e350eb645c51",
                "size": 4096
              },
              {
                "filename": "BASE64A_E8.BIN",
                "md5": "9fc4cef642511e173a85e155e0dd17a6",
                "sha1": "9fbf0faf5df19d7d2e6bfd4bacd12eccc3fc4cf9",
                "size": 4096
              },
              {
                "filename": "BASE64A_F0.BIN",
                "md5": "620957f7d52e44dbc8cfe0432d1c75d6",
                "sha1": "e397c2c154917a62866059b9c54b2c7796463a12",
                "size": 4096
              },
              {
                "filename": "BASE64A_F8.BIN",
                "md5": "20cf7dcd355196f77c4e490cb27d7050",
                "sha1": "6141c21c5d6a06729355083e3e36c6af72e534f2",
                "size": 8192
              },
              {
                "filename": "Basis108_D83_D0.BIN",
                "md5": "4324e16f31623b3d6b06b0e6509407cb",
                "sha1": "7901203845adab588850ae35f81e4ee2a2248686",
                "size": 4096
              },
              {
                "filename": "Basis108_D70_D8.BIN",
                "md5": "64bd9f89b1aeb32de7783fb3f8f7466f",
                "sha1": "b2a418818e4130859afd6c08b5695328a3edd2c5",
                "size": 4096
              },
              {
                "filename": "Basis108_D56_E0.BIN",
                "md5": "e376cc43d22035a851703163551d033d",
                "sha1": "938884eb3ebd0870f99df33ee7a03e93cd625ab4",
                "size": 4096
              },
              {
                "filename": "Basis108_D40_E8.BIN",
                "md5": "ca3491a23265be503eefd52dbf6debaa",
                "sha1": "380ffcf0dba008f0bc43a483931e98034b1d0d52",
                "size": 4096
              },
              {
                "filename": "Basis108_D39_F0.BIN",
                "md5": "ff63fbda7a4cccf29236d3255fbe8bd5",
                "sha1": "b5ffc9b3552b13b2f577a42196addae71289203d",
                "size": 4096
              },
              {
                "filename": "Basis108_D25_F8.BIN",
                "md5": "242d0c2562d280843a16ebc70a8b30bc",
                "sha1": "66b7eadfdb938cda0de01dbeab1b74aa88bd096c",
                "size": 4096
              }
            ],
            "mechanism": "//go:embed resources, served by LoadResource on the <internal>/ prefix",
            "source_ref": "resources.go:25-26,55-70"
          }
        },
        "core_classification": "embedded_hle",
        "core_version": "v2.4.0",
        "cores": [
          "izapple2"
        ],
        "display_name": "Apple - Apple II (izapple2)",
        "emulator": "izapple2",
        "files": [
          {
            "description": "ProDOS ROM Drive card image, a 1 MB solid state disk by Terence Boldt",
            "name": "ProDOS_2.4.3_TJ.po",
            "note": "Fetched from https://github.com/Alex-Kw/ProDOS-ROM-Drive-Images/raw/main/ProDOS_2.4.3_TJ.po when the card is added with no image parameter. The card slot ROM is read at offset 0x300. No size or hash check.",
            "required": false,
            "source_ref": "cardProDOSRomDrive.go:31,39,46"
          },
          {
            "description": "ProDOS ROM Card 3 image, a 4 MB ROM card by Ralle Palaveev",
            "name": "ProDOS-ROMCARD3_4MB_A2D.v1.4_v37.po",
            "note": "Fetched from https://github.com/rallepalaveev/ProDOS-Romcard3/raw/main/ProDOS-ROMCARD3_4MB_A2D.v1.4_v37.po when the card is added with no image parameter. The card slot ROM is read at offset 0x200. Rejected unless exactly 4 MB.",
            "required": false,
            "size": 4194304,
            "source_ref": "cardProDOSRomCard3.go:29,37,42-44,48",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Apple II emulator written in Go by Ivan Izaguirre. Boards: Apple ][ and ][+\nwith 48 KB, Apple IIe and //e enhanced with 128 KB, and two clones, the Copam\nBase 64A and the Basis 108 (setup.go:36-58).\n\nEvery ROM the machine needs is compiled into the binary. The whole resources\ndirectory is embedded with //go:embed (resources.go:25-26) and the 17 machine\nconfigs with //go:embed configs/*.cfg (configuration.go:51-52). LoadResource\nroutes a name by its prefix: <internal>/ reads the embedded filesystem,\nhttp:// and https:// fetch over the network, anything else is a path on disk\n(resources.go:55-88). The shipped configs name main ROM, character ROM and\nboot diskette as <internal>/ paths, so the emulator starts into DOS 3.3 with\nno file on disk. The base64a and basis108 configs set rom: <custom>, which\ndispatches to loadMultiPageRom over six embedded PROM dumps each\n(setup.go:189-199, boardBase64a.go:7-16, boardBasis108.go:28-37).\n\nTwo of the 27 registered cards name an image the emulator downloads instead\nof carrying: prodosromdrive and prodosromcard3 (cardBuilder.go:85-86). Both\nread the card slot ROM out of that image, so neither card has a boot ROM\nwithout it. No shipped model uses either card, they are reached with -sN.\nprodosnvramdrive is left out of the factory (cardBuilder.go:87).\n\n-rom and -charrom replace the embedded main and character ROM with a file of\nthe user's choosing, and every disk, hard disk and cassette parameter takes\nuser media and defaults to empty.\n\nSeven frontends besides the core: a2sdl, a2sdl3, a2fyne, a2ebiten, a2wasm,\nconsole and headless. ES-DE runs a2sdl, built as izapple2sdl_linux_amd64 or\nizapple2sdl_windows_amd64.exe, and passes the image as a positional argument.\nThe libretro core in frontend/a2libretro builds from source only, is absent\nfrom the buildbot and the RetroArch online updater (doc/libretro.md), and its\nizapple2_libretro.info declares firmware_count = 0. It exposes the machine as\na model option and no card configuration, so the two card images cannot be\nreached through it.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/ivanizag/izapple2",
        "source_commit": "01deea8a97b19ac782a1d11fe1e8d07f07b6c835",
        "systems": [
          "apple-ii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/ivanizag/izapple2"
      }
    },
    {
      "id": "j2me-loader",
      "profile": {
        "author": "Nikita Shakarun",
        "core_classification": "community_fork",
        "core_version": "1.8.2",
        "cores": [
          "j2me-loader",
          "J2ME-LOADER"
        ],
        "display_name": "Mobile - J2ME (J2ME Loader)",
        "emulator": "J2ME Loader",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "Typeface for the virtual keyboard and overlays",
            "name": "Roboto-Regular.ttf",
            "note": "Built into a Typeface at CanvasWrapper construction, which is a field initializer of Canvas and therefore runs for every MIDlet that opens one. Drives the key captions, the soft bar and the FPS counter.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/CanvasWrapper.java:36, app/src/main/java/javax/microedition/lcdui/Canvas.java:141, app/src/main/java/javax/microedition/lcdui/keyboard/VirtualKeyboard.java:908, app/src/main/java/javax/microedition/lcdui/overlay/FpsCounter.java:48",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Default microedition system properties",
            "name": "system.props",
            "note": "Read from assets/defaults when a profile is created and again when the config screen or updateSystemProperties fills the field. Each line becomes a System.setProperty pair at MIDlet startup, carrying microedition.configuration, microedition.platform, the JSR version strings and the vendor identity values.",
            "required": true,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:198, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:185, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:609, app/src/main/java/javax/microedition/shell/MicroLoader.java:247-252",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for the screen blitter",
            "name": "simple.vsh",
            "note": "Compiled when the GL surface is created and no user shader is selected. Graphics mode 1 is the default, so this is the standard display path. Also compiled as the Simple program of the Mascot Capsule renderer.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:35, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:61, app/src/main/java/javax/microedition/lcdui/Canvas.java:782, app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:180, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:212",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for the screen blitter",
            "name": "simple.fsh",
            "note": "Paired with simple.vsh. createProgram returning -1 raises RuntimeException at surface creation.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:36, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:62-66, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:213",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for untextured Mascot Capsule geometry",
            "name": "color.vsh",
            "note": "Program.create builds the tex, color, simple and sprite programs together the first time the Mascot Capsule renderer initializes, so all four pairs are read on the first micro3d frame.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:153, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for untextured Mascot Capsule geometry",
            "name": "color.fsh",
            "note": "Carries the sphere map, toon threshold and primitive colour uniforms of the Color program.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:154, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:155-161",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for textured Mascot Capsule geometry",
            "name": "tex.vsh",
            "note": "Built by Program.create alongside the other three pairs.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:229, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for textured Mascot Capsule geometry",
            "name": "tex.fsh",
            "note": "Carries the texture size, transparency and sphere map uniforms of the Tex program.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:230, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:231-235",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for Mascot Capsule sprites",
            "name": "sprite.vsh",
            "note": "Built by Program.create alongside the other three pairs.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:310, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:53-58",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for Mascot Capsule sprites",
            "name": "sprite.fsh",
            "note": "Carries the texture size, transparency and colour key uniforms of the Sprite program.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:311, app/src/main/java/com/mascotcapsule/micro3d/v3/Program.java:312-315",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "JSR-184 M3G engine",
            "name": "libjavam3g.so",
            "note": "Named by System.loadLibrary(\"javam3g\") outside any catch, the first time the toolkit reports the UI thread available. Built by ndkBuild from the m3g sources against GLES 1.1.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/m3g/Platform.java:66-72, app/src/main/cpp/Android.mk:3-15",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Mascot Capsule vertex and buffer routines",
            "name": "libmicro3d.so",
            "note": "Loaded from the static initializer of Utils, so the first Mascot Capsule call brings it in. Holds fillBuffer, glReadPixels and the bone transform.",
            "required": true,
            "source_ref": "app/src/main/java/com/mascotcapsule/micro3d/v3/Utils.java:149-159, app/src/main/cpp/Android.mk:28-34",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "X.509 certificate for the crash report endpoint",
            "name": "appcenter.cer",
            "note": "Read into a trust store only when a crash report is sent from Android 4.1 through 4.4, where TLSv1.2 is forced. A read or certificate failure falls back to the default socket factory.",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/crashes/TLSSocketFactory.java:41-63, app/src/main/java/ru/playsoftware/j2meloader/crashes/AppCenterSender.java:56-60",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Third party licence text of the about screen",
            "name": "licenses.html",
            "note": "Read when the licences dialog is opened and shown as HTML. Emulation never touches it.",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/info/LicensesDialogFragment.java:35",
            "system": "j2me"
          },
          {
            "category": "game_data",
            "description": "Shader descriptor read from the emulator directory",
            "name": "<shader>.ini",
            "note": "The config screen creates the shaders directory, lists every file ending in .ini and parses it as sections opened by a bracketed name, keeping the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingMaxValue groups are also read, which is the PPSSPP post-processing descriptor format.",
            "path": "shaders/<shader>.ini",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:336-367, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-207, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:207-212",
            "system": "j2me",
            "unsourceable": "user authored, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Vertex shader named by a descriptor",
            "name": "<shader>.vsh",
            "note": "Read whole from the shaders directory when the selected filter names it, then compiled in place of the built-in blitter. An unreadable file yields an empty string, the program fails to build and the bundled default is used after a toast.",
            "path": "shaders/<shader>.vsh",
            "required": false,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58, app/src/main/java/javax/microedition/shell/MicroLoader.java:270-273, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:196-205",
            "system": "j2me",
            "unsourceable": "user authored, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Fragment shader named by a descriptor",
            "name": "<shader>.fsh",
            "note": "Paired with the vertex file of the same descriptor. Four float uniforms from the descriptor settings are pushed to it at surface creation.",
            "path": "shaders/<shader>.fsh",
            "required": false,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:45-58, app/src/main/java/javax/microedition/lcdui/Canvas.java:791-793",
            "system": "j2me",
            "unsourceable": "user authored, no canonical file"
          }
        ],
        "mode": "standalone",
        "notes": "MIDP/CLDC runtime for Android, package ru.playsoftware.j2meloader. A MIDlet is\nconverted to Dalvik bytecode on import and runs against the javax.microedition\nclasses compiled into the app, so no device firmware is read. The vendor\nextension trees (Nokia, Siemens, Samsung, Motorola, Sony Ericsson, Sprint,\nVodafone, KDDI, JBlend, Mascot Capsule) are Java sources in the same package.\nA fork of NaikSoftware/J2meLoader with an independent history: the 2016\nancestor carries no assets directory and none of the loading code cited below.\nref: app/src/main/java/ru/woesss/j2me/installer/AppInstaller.java:292,\n     app/src/main/java/javax/microedition/shell/AppClassLoader.java:38\n\nThe working directory holds converted/, configs/, templates/, data/, fs/c and\nfs/e, all written by the app. fs/c and fs/e are the JSR-75 drives, data/ is RMS\nstorage, converted/ holds converted.dex and res.jar per MIDlet. Nothing there\nis user-supplied.\nref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:41-53,\n     app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:146-152\n\nThe shader and property assets are read through ContextHolder.getAssetAsString,\nwhich rethrows an IOException as RuntimeException instead of degrading, so an\nabsent asset ends the code path that reads it. Roboto-Regular.ttf goes through\nTypeface.createFromAsset and appcenter.cer through the asset manager directly.\nref: app/src/main/java/javax/microedition/util/ContextHolder.java:179-193\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/nikita36078/J2ME-Loader",
        "source_commit": "9b0fa48a0a0d1e61376c0b9af28b3d2caec0a4cc",
        "systems": [
          "j2me"
        ],
        "type": "standalone",
        "upstream": "https://github.com/nikita36078/J2ME-Loader"
      }
    },
    {
      "id": "jaxe",
      "profile": {
        "core_classification": "official_port",
        "core_version": "GIT",
        "cores": [
          "jaxe"
        ],
        "display_name": "CHIP-8/S-CHIP/XO-CHIP (JAXE)",
        "emulator": "JAXE",
        "files": [],
        "notes": "JAXE is a CHIP-8, SCHIP, and XO-CHIP emulator by Kurtis Dinelle,\nported to libretro. Supports .ch8, .sc8, .xo8, and .hc8 ROMs.\n\nNo external BIOS or font files required. The core has firmware_count = 0\nin jaxe_libretro.info and never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIR.\n\nFont data is hardcoded in chip8_load_font() at src/chip8.c:118-168.\nThe standard 4x5 hex font (0-F, 80 bytes) is loaded at address 0x000,\nand the SCHIP 8x10 big hex font (0-F, 160 bytes) follows immediately\nafter at address 0x050. Both are written directly into chip8->RAM[]\nduring chip8_reset() -> chip8_load_font().\n\nMemory layout from include/chip8.h:42-45:\n  0x000-0x04F  standard font (NUM_FONT_BYTES = 80)\n  0x050-0x0EF  big font (NUM_BIG_FONT_BYTES = 160)\n  0x0F0-0x0FF  stack (STACK_SIZE = 16)\n  0x100-0x10F  audio buffer (AUDIO_BUF_SIZE = 16)\n  0x200+       program ROM (PC_START_ADDR_DEFAULT)\n\nThe fonts/dbgfont.ttf file in the repo is only used by the standalone\nbuild (src/main.c:19) for the SDL debugger overlay, not by the\nlibretro core.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "All font/sprite data is compiled into the binary. The standard\nCHIP-8 hex font (5 bytes per character, 16 characters) and the\nSCHIP big hex font (10 bytes per character, 16 characters) are\nstored as a static array in chip8_load_font() and copied into\nRAM on every reset. No file I/O is performed for BIOS or fonts.\n",
            "source_ref": "jaxe_libretro.info:17, src/chip8.c:118-168",
            "target": "none"
          }
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/kurtjd/jaxe",
        "source_commit": "e8e90e3d683bb560df5882f0ad62ed28f96a541a",
        "systems": [
          "chip8"
        ],
        "type": "libretro",
        "upstream": "https://github.com/kurtjd/jaxe"
      }
    },
    {
      "id": "jgenesis",
      "profile": {
        "core_classification": "other",
        "core_version": "0.14.0",
        "cores": [
          "jgenesis"
        ],
        "display_name": "Multi-System (jgenesis)",
        "emulator": "jgenesis",
        "files": [
          {
            "description": "Sega CD BIOS (US)",
            "mode": "standalone",
            "name": "bios_CD_U.bin",
            "note": "Selected when the disc region is Americas, and for every region when per_region_bios is off.",
            "region": [
              "north-america"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:41-51 (read), :256-262 (bios_path_for_region), backend/segacd-core/src/api.rs:77-79 (BIOS_LEN check)",
            "system": "sega-megacd",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Mega CD BIOS (Europe)",
            "mode": "standalone",
            "name": "bios_CD_E.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:256-262 (eu_bios_path), backend/segacd-core/src/api.rs:77-79",
            "system": "sega-megacd",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Mega CD BIOS (Japan)",
            "mode": "standalone",
            "name": "bios_CD_J.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/genesis.rs:256-262 (jp_bios_path), backend/segacd-core/src/api.rs:77-79",
            "system": "sega-megacd",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Boy Advance BIOS",
            "mode": "standalone",
            "name": "gba_bios.bin",
            "note": "Every GBA load fails without it. skip_bios_animation only skips the intro, the BIOS is still mapped and read for SWI calls.",
            "required": true,
            "size": 16384,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/gba.rs:29-33 (GbaNoBios), backend/gba-core/src/memory.rs:10,102-107 (BIOS_ROM_LEN check)",
            "system": "nintendo-gba",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "SNES_dsp1.rom"
            ],
            "description": "NEC uPD77C25 firmware for DSP-1",
            "mode": "standalone",
            "name": "dsp1.rom",
            "note": "0x1800 program plus 0x800 data. Also used by DSP-1B titles, which have no separate slot. Layout is sliced at a fixed offset, size is not checked.",
            "required": true,
            "size": 8192,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:336-353 (MissingDsp1Rom), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38,382-390",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_dsp2.rom"
            ],
            "description": "NEC uPD77C25 firmware for DSP-2",
            "mode": "standalone",
            "name": "dsp2.rom",
            "required": true,
            "size": 8192,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:340-342 (MissingDsp2Rom), :929 (Dungeon Master CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_dsp3.rom"
            ],
            "description": "NEC uPD77C25 firmware for DSP-3",
            "mode": "standalone",
            "name": "dsp3.rom",
            "required": true,
            "size": 8192,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:343-345 (MissingDsp3Rom), :931 (SD Gundam GX CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_dsp4.rom"
            ],
            "description": "NEC uPD77C25 firmware for DSP-4",
            "mode": "standalone",
            "name": "dsp4.rom",
            "required": true,
            "size": 8192,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:346-348 (MissingDsp4Rom), :933 (Top Gear 3000 CRC32 match), backend/snes-coprocessors/src/upd77c25.rs:382-390",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st010.rom"
            ],
            "description": "NEC uPD96050 firmware for ST010",
            "mode": "standalone",
            "name": "st010.rom",
            "note": "0xC000 program plus 0x1000 data. Used by F1 ROC II.",
            "required": true,
            "size": 53248,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:294-305 (MissingSt010Rom), :938-943 (variant detection), backend/snes-coprocessors/src/upd77c25.rs:28-31,35-38",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st011.rom"
            ],
            "description": "NEC uPD96050 firmware for ST011",
            "mode": "standalone",
            "name": "st011.rom",
            "required": true,
            "size": 53248,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:298-300 (MissingSt011Rom), :938-943 (Hayazashi Nidan Morita Shougi CRC32 match)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st018.rom"
            ],
            "description": "ARM firmware for ST018",
            "min_size": 163840,
            "mode": "standalone",
            "name": "st018.rom",
            "note": "0x20000 program plus 0x8000 data. Used by Hayazashi Nidan Morita Shougi 2. Files larger than the expected length are accepted, shorter ones are rejected.",
            "required": true,
            "source_ref": "backend/snes-core/src/memory/cartridge.rs:310-320 (MissingSt018Rom), backend/snes-coprocessors/src/st018.rs:18-22,346-352 (TOTAL_ROM_LEN check)",
            "system": "nintendo-snes",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Master System BIOS",
            "mode": "standalone",
            "name": "bios.sms",
            "note": "Read only when sms_boot_from_bios is enabled or the emulator runs without a cartridge, both off by default. One slot accepts any regional dump, no size or content check.",
            "required": false,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/smsgg.rs:27-33,50-56,74-80,112-122, backend/smsgg-core/src/memory.rs:101-106,148-168",
            "system": "sega-mastersystem"
          },
          {
            "description": "Game Gear BIOS",
            "mode": "standalone",
            "name": "bios.gg",
            "note": "Read only when gg_boot_from_bios is enabled or the emulator runs without a cartridge, both off by default.",
            "required": false,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/smsgg.rs:27-33,50-56,74-80,112-122",
            "system": "sega-gamegear"
          },
          {
            "description": "Game Boy boot ROM",
            "mode": "standalone",
            "name": "dmg_boot.bin",
            "note": "Loaded only when dmg_boot_rom is enabled, off by default. Without it the CPU starts post-boot.",
            "required": false,
            "size": 256,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/gb.rs:29-33,77-89, backend/gb-core/src/memory.rs:9,45-63 (DMG_BOOT_ROM_LEN check)",
            "system": "nintendo-gb",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Boy Color boot ROM",
            "max_size": 2304,
            "min_size": 2048,
            "mode": "standalone",
            "name": "cgb_boot.bin",
            "note": "Loaded only when cgb_boot_rom is enabled, off by default. 2304 bytes is taken as is, 2048 bytes gets the filler page inserted.",
            "required": false,
            "source_ref": "frontend/jgenesis-native-driver/src/mainloop/gb.rs:34-38,77-89, backend/gb-core/src/memory.rs:10,45-63,168 (CGB_BOOT_ROM_LEN check and pad_cgb_boot_rom)",
            "system": "nintendo-gbc",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "nespalette.pal"
            ],
            "description": "External NES color palette",
            "max_size": 1536,
            "min_size": 192,
            "mode": "standalone",
            "name": "nes.pal",
            "note": "1536 bytes gives 512 colors, 192 bytes gives 64 colors extrapolated to 512. Smaller files are rejected and the built-in palette stays in use.",
            "required": false,
            "source_ref": "config/nes-config/src/lib.rs:92-109 (NesPalette::read_from), frontend/jgenesis-gui/src/app/nes.rs:407-417",
            "system": "nintendo-nes",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Multi-system emulator written in Rust by James Groth. One binary covers\nthirteen hardware modes: Master System, Game Gear, SG-1000, Genesis, Sega CD,\n32X, Sega CD 32X, NES, SNES, Game Boy, Game Boy Color, Game Boy Advance and\nPC Engine (frontend/jgenesis-native-driver/src/extensions.rs:172-186).\n\nNo path is hardcoded. Every BIOS, boot ROM and coprocessor ROM is an\nOption<PathBuf> in the config, defaulting to None and set through a file\ndialog or the TOML config file (frontend/jgenesis-native-driver/src/config.rs\n:76-78,95-99,146-159,191-193,205). The emulator identifies these files by\nsize and layout, never by name or hash, so the names below are the ones the\ndumps circulate under rather than strings read from the source. RetroBat\nwrites bios_CD_U/E/J.bin and gba_bios.bin into the TOML directly\n(emulatorLauncher/Generators/Jgenesis.Generator.cs:226-229,283-294).\n\nSega CD selects the BIOS by disc region and per_region_bios defaults to true,\nso the US, European and Japanese images are each reachable\n(frontend/jgenesis-native-driver/src/mainloop/genesis.rs:233-262,\nfrontend/jgenesis-native-config/src/genesis.rs:115). Setting \"Use US BIOS for\nall regions\" collapses all three onto the US slot.\n\nSNES coprocessor ROMs use the merged layout, program ROM followed by data ROM\nin one file, not the split .program.rom / .data.rom pair. Program ROM\nendianness is auto-detected from the first four opcodes, so either byte order\nof a given dump loads (backend/snes-coprocessors/src/upd77c25.rs:382-390,405-419).\nThere is one DSP slot for DSP-1: guess_dsp_variant only returns Dsp1, Dsp2,\nDsp3 or Dsp4, and DSP-1B titles fall through to the DSP-1 slot\n(backend/snes-core/src/memory/cartridge.rs:926-936). None of the seven chips\nhas an HLE implementation, so an affected game refuses to load when its slot\nis empty.\n\n32X needs no user file. The two SH-2 boot ROMs and the 68000 vector table are\ncompiled into the binary (backend/s32x-core/src/bootrom.rs:3-6). A Sega CD\nBIOS is only consulted when the hardware mode is Sega CD or Sega CD 32X.\n\nNES, SG-1000 and PC Engine need no BIOS. PC Engine has no CD-ROM² support, so\nno System Card is involved. CX4, SA-1, S-DD1, SPC7110, Super FX, OBC1 and the\nS-RTC are emulated from cartridge data alone and take no firmware file.\n\nWritten by the emulator, not obtained: save files, save states, the per-game\ncheats TOML in its own serde format (frontend/jgenesis-native-config/src/lib.rs\n:215,244-275) and the config file itself. The GUI exports a palette to\nnespalette.pal (frontend/jgenesis-gui/src/app/nes.rs:428-430). portable.txt is\ntested for existence only, to keep the settings beside the executable\n(frontend/jgenesis-native-config/src/paths.rs:57-64).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/jsgroth/jgenesis",
        "source_commit": "aba5813336765825e3e96b3059cfe49173c4faa5",
        "systems": [
          "sega-megadrive",
          "sega-megacd",
          "sega-32x",
          "sega-mastersystem",
          "sega-gamegear",
          "sega-sg1000",
          "nintendo-nes",
          "nintendo-snes",
          "nintendo-gb",
          "nintendo-gbc",
          "nintendo-gba",
          "nec-pc-engine"
        ],
        "type": "standalone",
        "upstream": "https://github.com/jsgroth/jgenesis"
      }
    },
    {
      "id": "jl-mod",
      "profile": {
        "author": "Yury Kharchenko",
        "core_classification": "community_fork",
        "core_version": "0.87.1",
        "cores": [
          "jl-mod",
          "JL-MOD"
        ],
        "display_name": "Mobile - J2ME (JL-Mod)",
        "emulator": "JL-Mod",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "Default microedition system properties",
            "name": "system.props",
            "note": "Read from assets/defaults when a profile is created, when the config screen has no stored value and when updateSystemProperties fills the field. Each line becomes a System.setProperty and MidletSystem.setProperty pair at MIDlet startup, carrying microedition.configuration, microedition.platform, the JSR version strings and the vendor identity values.",
            "required": true,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:211, app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:644, app/src/main/java/ru/playsoftware/j2meloader/config/ProfilesManager.java:189, app/src/main/java/javax/microedition/shell/MicroLoader.java:246-252",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for the screen blitter",
            "name": "simple.vsh",
            "note": "Compiled when the GL surface is created and no user shader is selected. Graphics mode 1 is the default, so this is the standard display path. Also compiled as the Simple program of the Mascot Capsule renderer.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:34, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:58, app/src/main/java/javax/microedition/lcdui/Canvas.java:744, app/src/main/java/ru/playsoftware/j2meloader/config/ProfileModel.java:193, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:216",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for the screen blitter",
            "name": "simple.fsh",
            "note": "Paired with simple.vsh. createProgram returning -1 raises RuntimeException at surface creation.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:35, app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:59-63, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:217",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for untextured Mascot Capsule geometry",
            "name": "color.vsh",
            "note": "Program.create builds the tex, color, simple and sprite programs together the first time the Mascot Capsule renderer draws, so all four pairs are read on the first micro3d frame.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:150, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-58, app/src/main/java/ru/woesss/j2me/micro3d/Render.java:156",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for untextured Mascot Capsule geometry",
            "name": "color.fsh",
            "note": "Carries the sphere map, toon threshold and primitive colour uniforms of the Color program.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:151, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:162-178",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for textured Mascot Capsule geometry",
            "name": "tex.vsh",
            "note": "Built by Program.create alongside the other three pairs.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:233, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-58",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for textured Mascot Capsule geometry",
            "name": "tex.fsh",
            "note": "Carries the texture size, sphere map and toon uniforms of the Tex program.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:234, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:253-271",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for Mascot Capsule sprites",
            "name": "sprite.vsh",
            "note": "Built by Program.create alongside the other three pairs.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:313, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:53-58",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for Mascot Capsule sprites",
            "name": "sprite.fsh",
            "note": "Carries the texture size and colour key uniforms of the Sprite program.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Program.java:314, app/src/main/java/ru/woesss/j2me/micro3d/Program.java:330-337",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Vertex shader for the Nokia M3D renderer",
            "name": "m3d.vsh",
            "note": "Compiled when a MIDlet first binds a com.nokia.mid.m3d context. Carries the position, texture coordinate and matrix inputs.",
            "required": true,
            "source_ref": "app/src/main/java/com/nokia/mid/m3d/ShaderProgram.java:28, app/src/main/java/com/nokia/mid/m3d/ShaderProgram.java:38, app/src/main/java/com/nokia/mid/m3d/M3D.java:132",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Fragment shader for the Nokia M3D renderer",
            "name": "m3d.fsh",
            "note": "Paired with m3d.vsh. A link failure raises RuntimeException in the constructor.",
            "required": true,
            "source_ref": "app/src/main/java/com/nokia/mid/m3d/ShaderProgram.java:29, app/src/main/java/com/nokia/mid/m3d/ShaderProgram.java:39-76",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Binary class patches applied during MIDlet conversion",
            "name": "patches.bin",
            "note": "Index of class CRC32 to patch offset, read by the static field initializer of AndroidProducer and again for each matching class the dexer instruments. A read failure outside end of file is rethrown as RuntimeException, which breaks class initialization and therefore every conversion. Patch entries are applied by the SRC/EXT/FWD/BWD opcode stream of BinaryPatcher.",
            "required": true,
            "source_ref": "dexlib/src/main/java/org/microemu/android/asm/AndroidProducer.java:41, dexlib/src/main/java/org/microemu/android/asm/AndroidProducer.java:62-90, dexlib/src/main/java/com/android/dx/command/dexer/Main.java:468, dexlib/src/main/java/org/microemu/android/asm/BinaryPatcher.java:49-71",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Third party licence text of the about screen",
            "name": "licenses.html",
            "note": "Read when the licences dialog is opened and shown as HTML. Emulation never touches it.",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/info/LicensesDialogFragment.java:35",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "X.509 certificate for the crash report endpoint",
            "name": "appcenter.cer",
            "note": "Named as an ACRA certificate path only when the crash sender is configured on Android 4.1 through 4.4, where TLSv1.2 is forced. Every other release uses the default socket factory.",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/crashes/AppCenterSender.java:68-75",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "NDK C++ runtime for the native modules",
            "name": "libc++_shared.so",
            "note": "Named ahead of every other native library, in the static initializers of GLESUtils and micro3d Utils, in the M3G toolkit init and in both synthesizer classes.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/gles/GLESUtils.java:31, app/src/main/java/ru/woesss/j2me/micro3d/Utils.java:103, app/src/main/java/javax/microedition/m3g/Platform.java:86, app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:70, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:70",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "GLES blit routines for the Nokia M3D and Mexa OpenGL surfaces",
            "name": "libgles_utils.so",
            "note": "Loaded from the static initializer of GLESUtils, so the first blit brings it in. Holds the GLES1 and GLES2 bitmap blits.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/gles/GLESUtils.java:30-33, app/src/main/java/com/nokia/mid/m3d/M3D.java:323, app/src/main/java/com/mexa/opgl/OpglGraphics.java:493, app/src/main/cpp/gles_utils/Android.mk:5-11",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "JSR-184 M3G engine",
            "name": "libjavam3g.so",
            "note": "Named by System.loadLibrary outside any catch, the first time the toolkit reports the UI thread available. Built by ndkBuild from the m3g sources against GLES 1.1.",
            "required": true,
            "source_ref": "app/src/main/java/javax/microedition/m3g/Platform.java:85-89, app/src/main/java/javax/microedition/m3g/Interface.java:314, app/src/main/cpp/m3g/Android.mk:5-15",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Mascot Capsule vertex and buffer routines",
            "name": "libmicro3d.so",
            "note": "Loaded from the static initializer of Utils, so the first Mascot Capsule call brings it in. Holds fillBuffer, glReadPixels and the bone transform.",
            "required": true,
            "source_ref": "app/src/main/java/ru/woesss/j2me/micro3d/Utils.java:97-105, app/src/main/cpp/micro3d/Android.mk:5-10",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Audio output stream of the sound bank synthesizers",
            "name": "liboboe.so",
            "note": "Named by both synthesizer classes ahead of their own libraries. Reached only when a sound bank is selected, and SynthPluginFactory catches the load failure and falls back to the Android synthesizer.",
            "required": false,
            "source_ref": "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:71, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:71, app/src/main/java/ru/woesss/j2me/mmapi/synth/SynthPluginFactory.java:40-53",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Shared player and listener code of the synthesizer plugins",
            "name": "libmmapi_common.so",
            "note": "Named by both synthesizer classes ahead of their own libraries. Same fallback as liboboe.so.",
            "required": false,
            "source_ref": "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:72, app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:72, app/src/main/cpp/mmapi_common/Android.mk:5-12",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Sonivox EAS synthesizer",
            "name": "libmmapi_eas.so",
            "note": "Loaded from the static initializer of LibEAS when a sound bank is selected. Links the sonivox wavetable engine statically and reads the bank as a DLS collection. A failure leaves the TinySoundFont plugin or the Android synthesizer.",
            "required": false,
            "source_ref": "app/src/main/java/ru/woesss/j2me/mmapi/synth/eas/LibEAS.java:69-74, app/src/main/cpp/mmapi_eas/Android.mk:5-22, app/src/main/cpp/sonivox/Android.mk:134",
            "system": "j2me"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "TinySoundFont synthesizer",
            "name": "libmmapi_tsf.so",
            "note": "Loaded from the static initializer of LibTSF when a sound bank is selected. Reads the bank as a SoundFont and plays standard MIDI files. A failure leaves the EAS plugin or the Android synthesizer.",
            "required": false,
            "source_ref": "app/src/main/java/ru/woesss/j2me/mmapi/synth/tsf/LibTSF.java:69-74, app/src/main/cpp/mmapi_tsf/Android.mk:5-11",
            "system": "j2me"
          },
          {
            "category": "game_data",
            "description": "DLS sound bank for MIDI playback",
            "name": "<soundbank>.dls",
            "note": "The config screen lists every regular file in the sound banks directory with no extension filter, and the selected name is kept as a path when the file exists. EAS_LoadDLSCollection reads it with the header search flag off; a rejected file throws and the plugin is skipped.",
            "path": "soundbanks/<soundbank>.dls",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:318-337, app/src/main/java/javax/microedition/shell/MicroLoader.java:272-274, app/src/main/cpp/mmapi_eas/eas_player.cpp:112-126",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          },
          {
            "category": "game_data",
            "description": "SoundFont sound bank for MIDI playback",
            "name": "<soundbank>.sf2",
            "note": "Same selection path as the DLS bank. tsf_load_filename parses it, and a null result throws IllegalArgumentException so the plugin is skipped. Only standard MIDI files are played through this synthesizer.",
            "path": "soundbanks/<soundbank>.sf2",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:318-337, app/src/main/cpp/mmapi_tsf/tsf_player.cpp:87-94, app/src/main/cpp/mmapi_tsf/tsf_player_jni.cpp:15-27",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Background image drawn behind the virtual screen",
            "name": "<skin>",
            "note": "Any image format Android can decode. Decoded twice, once for bounds and once downsampled to the display, and an undecodable file leaves the layer unset. A rectangular area filled with transparent black is taken as the screen placement.",
            "path": "skins/<skin>",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:297-316, app/src/main/java/javax/microedition/lcdui/skin/SkinLayer.java:81-111, app/src/main/java/javax/microedition/shell/MicroLoader.java:276-278",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Shader descriptor read from the emulator directory",
            "name": "<shader>.ini",
            "note": "The config screen creates the shaders directory, keeps every file ending in .ini and parses it as sections opened by a bracketed name, retaining the entries that name both a Vertex and a Fragment file. Name, Author, OutputResolution, Upscaling and four SettingName/SettingDefaultValue/SettingMinValue/SettingStep groups are also read, which is the PPSSPP post-processing descriptor format.",
            "path": "shaders/<shader>.ini",
            "required": false,
            "source_ref": "app/src/main/java/ru/playsoftware/j2meloader/config/ConfigActivity.java:403-464, app/src/main/java/ru/playsoftware/j2meloader/config/ShaderInfo.java:101-207",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Vertex shader named by a descriptor",
            "name": "<shader>.vsh",
            "note": "Read whole from the shaders directory when the selected filter names it, then compiled in place of the built-in blitter. An unreadable file yields an empty string, the program fails to build and the bundled default is used after a toast.",
            "path": "shaders/<shader>.vsh",
            "required": false,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:44-56, app/src/main/java/javax/microedition/shell/MicroLoader.java:263-266, app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:152-160",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          },
          {
            "category": "game_data",
            "description": "Fragment shader named by a descriptor",
            "name": "<shader>.fsh",
            "note": "Paired with the vertex file of the same descriptor. Four float uniforms from the descriptor settings are pushed to it at surface creation.",
            "path": "shaders/<shader>.fsh",
            "required": false,
            "source_ref": "app/src/main/java/javax/microedition/lcdui/graphics/ShaderProgram.java:44-56, app/src/main/java/javax/microedition/lcdui/Canvas.java:753-754",
            "system": "j2me",
            "unsourceable": "user supplied, no canonical file"
          }
        ],
        "mode": "standalone",
        "notes": "MIDP/CLDC runtime for Android, package ru.woesss.j2meloader. A .jar, .jad or\n.kjx is instrumented and converted to Dalvik bytecode at install time, then\nruns against the javax.microedition classes compiled into the app, so no\ndevice firmware is read. Two build flavors share the sources: emulator, the\npublished application, and midlet, which packs a single ported J2ME\napplication and is the only one reading MIDLET-META-INF/MANIFEST.MF.\nref: app/src/main/java/ru/woesss/j2me/installer/AppInstaller.java:127-146,\n     app/build.gradle.kts:67-93,\n     app/src/main/java/javax/microedition/shell/MicroLoader.java:127-146\n\nThree 3D stacks are compiled in, each with its own shaders and native code:\nJSR-184 M3G on GLES 1.1 (libjavam3g.so), Mascot Capsule v3 (libmicro3d.so with\nthe tex, color, simple and sprite programs) and Nokia M3D (libgles_utils.so\nwith the m3d pair). MIDI playback goes to the Android synthesizer unless a\nsound bank is selected, which routes it to Sonivox EAS or TinySoundFont, both\ndriven by Oboe.\nref: app/src/main/cpp/Android.mk:1,\n     app/src/main/java/ru/woesss/j2me/mmapi/synth/SynthPluginFactory.java:34-52\n\nAssets are read through ContextHolder.getAssetAsString, which rethrows an\nIOException as RuntimeException instead of degrading, so an absent asset ends\nthe code path that reads it.\nref: app/src/main/java/javax/microedition/util/ContextHolder.java:178-192\n\nThe working directory holds converted/, configs/, templates/ and data/, all\nwritten by the app, plus shaders/, soundbanks/ and skins/, created empty at\nfirst run and read from. data/ carries the RMS record stores and backs the\nJSR-75 c: drive.\nref: app/src/main/java/ru/playsoftware/j2meloader/config/Config.java:41-58,\n     app/src/main/java/ru/playsoftware/j2meloader/util/FileUtils.java:162-171,\n     app/src/main/java/javax/microedition/shell/MicroLoader.java:221-227\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/woesss/JL-Mod",
        "source_commit": "f723a190c0bdb44b31c3bc0ead6f8665c7ea517d",
        "systems": [
          "j2me"
        ],
        "type": "standalone",
        "upstream": "https://github.com/nikita36078/J2ME-Loader"
      }
    },
    {
      "id": "jollycv",
      "profile": {
        "core_classification": "official_port",
        "core_version": "2.0.0",
        "cores": [
          "jollycv"
        ],
        "display_name": "ColecoVision/CreatiVision/My Vision (JollyCV)",
        "emulator": "JollyCV",
        "files": [
          {
            "name": "coleco.rom",
            "note": "Mapped at 0x0000-0x1FFF. Replaced by SGM lower RAM when Super Game Module is active. Must be exactly 8192 bytes.",
            "required": true,
            "size": 8192,
            "source_ref": "libretro/libretro.c:701, src/jcv_coleco.c:402-406",
            "system": "colecovision",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VTech CreatiVision BIOS ROM",
            "name": "bioscv.rom",
            "note": "Mapped at 0xF800-0xFFFF. Must be exactly 2048 bytes.",
            "required": true,
            "size": 2048,
            "source_ref": "libretro/libretro.c:711, src/jcv_crvision.c:315-318",
            "system": "creativision",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "JollyCV is a multi-system emulator by Rupert Carmichael supporting\nColecoVision (with Super Game Module), CreatiVision, and My Vision.\n\nBIOS handling depends on the detected system type (set via core option\nor auto-detected from ROM database via jcv_process_hash/jcv_get_dbflags):\n\n- ColecoVision (JCV_SYS_COLECO): loads \"coleco.rom\" from system dir.\n  BIOS is mapped at 0x0000-0x1FFF. Size must be exactly 8192 bytes\n  (SIZE_CVBIOS = SIZE_8K = 0x2000). Load fails if size mismatches.\n  Without the BIOS, ColecoVision games will not run (load returns false).\n\n- CreatiVision (JCV_SYS_CRVISION): loads \"bioscv.rom\" from system dir.\n  BIOS is mapped at 0xF800-0xFFFF. Size must be exactly 2048 bytes\n  (SIZE_CRVBIOS = SIZE_2K = 0x800). Without the BIOS, CreatiVision\n  games will not run.\n\n- My Vision (JCV_SYS_MYVISION): no BIOS required.\n\nThe libretro port constructs paths via snprintf(\"%s%c%s\", sysdir, pss,\nfilename) in libretro.c:699-711. jcv_bios_load_file() opens the file,\nreads it fully, then delegates to jcv_coleco_bios_load() or\njcv_crvision_bios_load() which validate size before copying.\n\nColecoVision cartridge header bytes at offset 0x0000-0x0001 control\nboot behavior: 0xAA55 shows the BIOS title screen, 0x55AA jumps\ndirectly to the game code vector.\n\nThe core includes a built-in ROM database with MD5 hashes (gamedb.h)\nfor game-specific flags, but this is for game compatibility, not BIOS\nverification.\n",
        "platform_details": {
          "colecovision": {
            "bios_filename": "coleco.rom",
            "bios_size": 8192,
            "memory_map": "0x0000-0x1FFF",
            "source_ref": "src/jcv_coleco.c:269-281"
          },
          "creativision": {
            "bios_filename": "bioscv.rom",
            "bios_size": 2048,
            "memory_map": "0xF800-0xFFFF",
            "source_ref": "src/jcv_crvision.c:315-337, 441"
          },
          "myvision": {
            "bios_required": false,
            "note": "No BIOS needed. My Vision games run without any system ROM."
          }
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/jollycv",
        "source_commit": "eb14292005d51e2bef954cb75145981037ee9988",
        "systems": [
          "colecovision",
          "creativision",
          "myvision"
        ],
        "type": "libretro",
        "upstream": "https://gitlab.com/jgemu/jollycv"
      }
    },
    {
      "id": "jumpnbump",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v0.1",
        "cores": [
          "jumpnbump"
        ],
        "display_name": "Jump 'n Bump",
        "emulator": "Jump 'n Bump",
        "files": [],
        "notes": "Libretro port of Jump 'n Bump, a multiplayer bunny-stomping platformer\noriginally by Brainchild Design (1998). Released as freeware under GPL.\n\nThe core loads a .dat archive file as content via retro_load_game().\nAll game resources (sprites, sounds, levels, fonts, music) are packed\ninside the .dat file. No system directory files, BIOS, or firmware\nrequired. The .dat file is built from the data/ directory by the\njnbpack tool in the upstream repo.\n\nExtra levels are available from brainchilddesign.com as additional\n.dat files.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/jumpnbump-libretro",
        "source_commit": "4e68831f5576075c45c147f86865812afb816139",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/fabiangreffrath/jumpnbump"
      }
    },
    {
      "id": "kegs",
      "profile": {
        "core_classification": "other",
        "core_version": "1.38",
        "cores": [
          "kegs"
        ],
        "display_name": "Apple - Apple IIGS (KEGS)",
        "emulator": "KEGS",
        "files": [
          {
            "aliases": [
              "ROM.01",
              "ROM.03",
              "APPLE2GS.ROM",
              "APPLE2GS.ROM2",
              "xgs.rom",
              "XGS.ROM",
              "Rom03gd",
              "342-0077-b"
            ],
            "description": "Apple IIGS system ROM",
            "name": "ROM",
            "note": "Accepted sizes are 32768 (Apple //e), 131072 (ROM 01) and 262144 (ROM 03). -rom on the command line and the g_cfg_rom_path config line both replace the first search name (config.c:1465-1467). A 32 KB //e ROM has to carry the Disk II PROM at offset 0x600, which KEGS reads into slot 6.\n",
            "required": true,
            "source_ref": "config.c:135,407-410,1096-1161",
            "validation": [
              "size"
            ]
          },
          {
            "aliases": [
              "controller.rom",
              "disk.rom",
              "DISK.ROM",
              "diskII.prom"
            ],
            "description": "Disk II controller PROM for slot 6",
            "hle_fallback": true,
            "min_size": 256,
            "name": "c600.rom",
            "note": "Replaces the built-in PROM. The first 256 bytes are read into slot 6 and a shorter file is rejected.\n",
            "required": false,
            "source_ref": "config.c:418-419,1192-1224",
            "validation": [
              "size"
            ]
          },
          {
            "description": "ROMX-compatible character ROM",
            "hle_fallback": true,
            "min_size": 4096,
            "name": "<charrom>",
            "note": "Picked through the F4 config panel, which stores the path in g_cfg_charrom_path; there is no default name. KEGS reads 4096 bytes at 0x1000 times the selected font number and replaces the built-in text font with them. The 32 fonts it lists span a 131072-byte image.\n",
            "required": false,
            "source_ref": "config.c:136-137,259-276,1070-1093",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Apple IIGS emulator by Kent Dickey, shipped as one zip holding the sources\nand the KEGSMAC, kegswin.exe and xkegs binaries.\n\nThe system ROM is the only file needed to boot. config_load_roms takes the\nfirst name that stats across g_kegs_default_paths (config.c:149-151), which\ncovers the current directory, $HOME, $HOME/Library/KEGS, the executable\ndirectory and a Mac bundle Resources directory. g_cfg_rom_path is tried\nfirst, then the fixed list (config.c:407-410,1105-1109). ROM size selects\nthe machine, 32 KB for an Apple //e, 128 KB for a ROM 01 IIGS and 256 KB\nfor a ROM 03 IIGS, and any other size is refused (config.c:1136-1153).\nWithout a ROM, KEGS raises its config panel instead of starting\n(config.c:1110-1115).\n\nThree ROMs are compiled in. Slot 7 gets the SmartPort PROM literal\ng_rom_c700[] (config.c:463,1165-1169). Slot 6 gets a Disk II PROM rebuilt\nat load time, XORed out of the IIGS ROM through g_rom_c600_rom01_diffs[]\n(config.c:428,1177-1183) or copied from offset 0x600 of a //e ROM\n(config.c:1172-1176); the IIGS control panel reaches it by setting slot 6\nto \"Your Card\". Text uses g_font_array[] from kegsfont.h (video.c:272-273,\nprepared at sim65816.c:667).\n\nSlots 1 to 5 and slot 7 carry empty name lists (config.c:413-417,420), so\nslot 6 is the only slot that reads a card ROM from disk.\n\nconfig.kegs carries the disk assignments and the battery RAM, and KEGS\ncreates it when none is found (config.c:638-672).\n",
        "profiled_date": "2026-08-08",
        "source": "https://kegs.sourceforge.net/",
        "systems": [
          "apple-iigs",
          "apple-ii"
        ],
        "type": "standalone",
        "upstream": "https://kegs.sourceforge.net/"
      }
    },
    {
      "id": "kemulator",
      "profile": {
        "author": "shinovon",
        "core_classification": "community_fork",
        "core_version": "2.21.5",
        "cores": [
          "kemulator",
          "KEMULATOR"
        ],
        "display_name": "Mobile - J2ME (KEmulator nnmod)",
        "emulator": "KEmulator nnmod",
        "files": [
          {
            "description": "Yamaha MA-7 SMAF sequencer library",
            "name": "M7_EmuSmw7.dll",
            "note": "First branch of the MMFPlayer probe, taken only when M7_EmuHw.dll sits beside it and the caller did not pass notMmf. Selects MODE_MA7, the only mode carrying phrase audio tracks. Distributed with the SoftBank MEXA emulator.",
            "required": false,
            "source_ref": "src/media/emulator/media/mmf/MMFPlayer.java:19-23, src/media/emulator/media/mmf/MaDll.java:186",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "description": "Yamaha MA-7 SMAF hardware layer",
            "name": "M7_EmuHw.dll",
            "note": "Tested for existence next to M7_EmuSmw7.dll; the MA-7 branch is skipped unless both are present. Loaded by the Windows loader as a dependency of the sequencer library, which is the path handed to Native.load.",
            "required": false,
            "source_ref": "src/media/emulator/media/mmf/MMFPlayer.java:21",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "description": "Yamaha MA-5 SMAF sequencer library",
            "name": "M5_EmuSmw5.dll",
            "note": "Second branch of the probe, taken when the MA-7 pair is absent or the caller passed notMmf and M5_EmuHw.dll sits beside it. Selects MODE_MA5, whose init walks a 1024-byte allocation to an address ending in 0x81 before calling MaSound_EmuInitialize.",
            "required": false,
            "source_ref": "src/media/emulator/media/mmf/MMFPlayer.java:24-27, src/media/emulator/media/mmf/MaDll.java:184, src/media/emulator/media/mmf/MaDll.java:231-241",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "description": "Yamaha MA-5 SMAF hardware layer",
            "name": "M5_EmuHw.dll",
            "note": "Tested for existence next to M5_EmuSmw5.dll; the MA-5 branch is skipped unless both are present.",
            "required": false,
            "source_ref": "src/media/emulator/media/mmf/MMFPlayer.java:25",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "description": "Yamaha MA-3 SMAF emulator",
            "md5": "c1625f6c2fbf66e2e838c6bc74ffe641",
            "name": "ma3smwemu.dll",
            "note": "Last branch of the probe and the only one satisfied by a single file. Selects MODE_MA3, whose init calls MaSound_Initialize directly. Present in a stock install, so .mmf playback needs nothing from the user on the 32-bit Windows build.",
            "required": false,
            "sha1": "b566d111ccd3e303d21ab5c4cd1519dc238a4fce",
            "size": 724992,
            "source_ref": "src/media/emulator/media/mmf/MMFPlayer.java:28-30, src/media/emulator/media/mmf/MaDll.java:182, src/media/emulator/media/mmf/MaDll.java:227-230",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "description": "SWERVE M3G native engine",
            "md5": "9fcb2bd1f36d1e8d94f8e4e2650914c9",
            "name": "jsr184client.dll",
            "note": "Loaded from the executable's directory by the static initializers of the SWERVE javax.microedition.m3g classes, with a System.loadLibrary fallback on the library path. Reached only when the 3D engine setting is SWERVE, the LWJGL engine being the default.",
            "required": false,
            "sha1": "ed9a60d56ddcc91514b033c16f2062638c3e6eeb",
            "size": 405504,
            "source_ref": "m3g_swerve/src/javax/microedition/m3g/Graphics3D.java:275, m3g_swerve/src/javax/microedition/m3g/Loader.java:378, src/main/emulator/i.java:6-14",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "description": "Mascot Capsule V3 JNI bridge",
            "md5": "60045cd91e30880c731c9fea8c712093",
            "name": "java_micro3d_v3_32.dll",
            "note": "System.loadLibrary from the static initializers of the com.mascotcapsule.micro3d.v3 classes, reached only when the Mascot Capsule engine setting is DLL. Its import table names micro3d_v3_32.dll.",
            "required": false,
            "sha1": "b1d6aef4559bb46af27eebda50fe06e0de659966",
            "size": 27648,
            "source_ref": "micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:162-165, micro3d_dll/src/com/mascotcapsule/micro3d/v3/Graphics3D.java:279",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "description": "Mascot Capsule V3 renderer",
            "md5": "d5ab04740801208b92fa3de7252a75d8",
            "name": "micro3d_v3_32.dll",
            "note": "Pulled in by the Windows loader when java_micro3d_v3_32.dll loads; no Java code names it.",
            "required": false,
            "sha1": "f59e0d445aafe2503c6e5249ca07df4b89626f8f",
            "size": 475136,
            "source_ref": "micro3d_dll/src/com/mascotcapsule/micro3d/v3/Figure.java:163",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "aliases": [
              "amrdecoder_64.dll",
              "amrdecoder_arm64.dll",
              "libamrdecoder.so",
              "libamrdecoder_64.so",
              "libamrdecoder_arm32.so",
              "libamrdecoder_arm64.so",
              "libamrdecoder.dylib",
              "libamrdecoder_arm64.dylib"
            ],
            "bundled": true,
            "description": "opencore-amr decoder for AMR audio",
            "name": "amrdecoder.dll",
            "note": "System.load on a name composed from os.name and os.arch, resolved against the executable's directory. The 32-bit Windows build asks for amrdecoder.dll unconditionally. A load failure is printed and swallowed.",
            "required": false,
            "source_ref": "win/src/main/emulator/EmulatorPlatform.java:91-97, x64/src/main/emulator/EmulatorPlatform.java:173-212",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Series 60 typeface",
            "name": "s60snr.ttf",
            "note": "Read from /res inside the jar the first time a FontAWT is built for the Series 60 face, then cached and derived per style and size.",
            "required": false,
            "source_ref": "src/main/emulator/graphics2D/awt/FontAWT.java:20-28",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Nokia typeface",
            "name": "Nokia.ttf",
            "note": "Read from /res inside the jar the first time a FontAWT is built for the Nokia face.",
            "required": false,
            "source_ref": "src/main/emulator/graphics2D/awt/FontAWT.java:29-37",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Device presets: screen sizes, key maps, platform identities",
            "name": "presets.xml",
            "note": "Devices.load reads the PresetsPath setting, /res/presets.xml by default, as a jar resource and falls back to a disk read when the resource is absent, which is how a user-supplied preset file is picked up.",
            "required": false,
            "source_ref": "src/main/emulator/Settings.java:133, src/main/emulator/Devices.java:25-50, src/main/emulator/Emulator.java:641",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "UI strings, English",
            "name": "en.txt",
            "note": "Read from the lang directory next to the executable at startup and kept as the fallback bundle; the language setting names a sibling in the same directory. Every lookup that misses both bundles falls back to the string built into the call site.",
            "required": false,
            "source_ref": "src/main/emulator/UILocale.java:11-48",
            "system": "j2me",
            "validation": [
              "existence"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "MIDP/CLDC runtime running on the host JVM, developed from decompiled KEmulator\n1.0.3. MIDlet bytecode executes against the javax.microedition classes compiled\ninto the application, so no device firmware is read.\n\nYamaha SMAF audio is the one thing the user supplies. MMFPlayer.initialize()\nprobes the directory holding the executable for a hardware emulator library in\na fixed order, MA-7 then MA-5 then MA-3, and keeps the first complete set. MA-3\nships with the emulator, so .mmf playback works on a stock install and the MA-5\nand MA-7 libraries raise the chip generation: MA-5 adds 32 PCM channels, MA-7\nadds DSP effects and is the only mode where supportsAudioTracks() is true,\nwhich the MEXA phrase audio track API reads to size its track array.\nref: src/media/emulator/media/mmf/MMFPlayer.java:11-40,\n     src/media/emulator/media/mmf/MaDll.java:862-864,\n     src/media/emulator/media/mmf/PhrasePlayerImpl.java:20-26\n\nThe probe is 32-bit Windows only. isX64() returns before any file is touched,\nso the x64 build loads none of these. The MIDI-through-MA path passes\nnotMmf=true, which skips the MA-7 branch and leaves MA-5 or MA-3.\nref: src/media/emulator/media/mmf/MMFPlayer.java:15-17,\n     src/media/javax/microedition/media/PlayerImpl.java:206-211,\n     win/src/main/emulator/EmulatorPlatform.java:9-11,\n     x64/src/main/emulator/EmulatorPlatform.java:9-11\n\nEvery caller degrades when the probe fails. PlayerImpl.midi() breaks out of the\nma block and falls back to MidiSystem; PlayerImpl.mmf(), SmafPlayer, AudioClip\nand PhrasePlayerImpl each throw and lose SMAF audio alone. Only the file's\nexistence is tested, then the path goes to Native.load, so the code reads no\nsize and no hash.\nref: src/media/javax/microedition/media/PlayerImpl.java:212-249,\n     src/oem/com/jblend/media/smaf/SmafPlayer.java:91,\n     src/oem/com/samsung/util/AudioClip.java:61,\n     src/media/emulator/media/mmf/MaDll.java:181-190\n\nThe 3D and Mascot Capsule backends default to their OpenGL implementations, so\nthe two shipped native libraries below load only when the user selects the\nSWERVE M3G engine or the Mascot Capsule DLL engine.\nref: src/main/emulator/Settings.java:20-21,\n     win/src/main/emulator/EmulatorPlatform.java:41-80\n\nTwo settings hold user-chosen paths with no fixed filename. SoundfontPath takes\nany .sf2 or .dls and is empty by default, leaving useCustomSoundfont() false and\nthe JVM default soundbank in place. VlcDir points at a VLC installation that\nvlcj scans for libvlc.\nref: src/media/emulator/media/EmulatorMIDI.java:26-36,\n     src/main/emulator/ui/swt/Property.java:1864-1905\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/shinovon/KEmulator",
        "source_commit": "4230a6af24e8e5d60e00e760750cfd9f195f0bd5",
        "systems": [
          "j2me"
        ],
        "type": "standalone",
        "upstream": "https://github.com/shinovon/KEmulator",
        "verification": "existence"
      }
    },
    {
      "id": "kenji-nx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.1.0-pr.2",
        "cores": [
          "kenji-nx",
          "kenjinx",
          "KENJI-NX"
        ],
        "display_name": "Nintendo - Switch (Kenji-NX)",
        "emulator": "Kenji-NX",
        "files": [
          {
            "description": "Production key set for NCA decryption",
            "name": "prod.keys",
            "note": "Read from the system directory under the data root, and additionally from ~/.switch when the launch mode is UserProfile, which Android never is. The four key files are looked up independently, so each is optional to the reader, but an empty header key stops NCA header decryption outright and no encrypted content loads. The desktop importer accepts a .keys file or a zip of them and rejects any line that is not \"name = value\" in lowercase hexadecimal; the Android importer accepts the name prod.keys only and copies it straight into the system directory.",
            "path": "system/prod.keys",
            "required": true,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:231-266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:500-537,681-684,1082-1118, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt:254-301"
          },
          {
            "description": "Per-title key set mapping rights id to title key",
            "name": "title.keys",
            "note": "Read beside prod.keys and passed to the same key file reader. Tickets found in a container are imported into the key set at load time, so a title shipping its own ticket does not need an entry here. The importer validates each line as two 32-character hexadecimal fields.",
            "path": "system/title.keys",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:241,250-253,266,269-297, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1086,1100-1102"
          },
          {
            "description": "Console-unique key set",
            "name": "console.keys",
            "note": "Read beside prod.keys and passed to the same key file reader as the console-specific set. Validated as \"name = value\" lines like prod.keys.",
            "path": "system/console.keys",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:242,255-258,266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1103-1105"
          },
          {
            "description": "Development-unit key set",
            "name": "dev.keys",
            "note": "Read beside prod.keys and handed to the key file reader as the development set, alongside the production one rather than instead of it. Validated as \"name = value\" lines.",
            "path": "system/dev.keys",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:243,260-263,266, src/Ryujinx.HLE/FileSystem/ContentManager.cs:1104-1105"
          },
          {
            "aliases": [
              "<firmware>.xci"
            ],
            "description": "Switch system firmware package",
            "name": "<firmware>.zip",
            "note": "Chosen through a file picker and read whole at install time, by path on desktop and by file descriptor on Android. A zip is walked entry by entry and an xci is opened at its update partition; a directory of NCAs is also accepted on desktop. Each NCA is decrypted with the key set to read its title id and content type, the package is rejected when it carries archives that belong to no system title, and the version string comes out of title 0100000000000809. The NCAs are then registered under bis/system/Contents/registered and read from there, never as loose files. No digest of the package itself is compared against anything.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:431-498,675-749,751-1045, src/LibKenjinx/Android/JniExportedMethods.cs:459-495, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/SettingsViewModel.kt:308-364",
            "storage": "large_file"
          },
          {
            "description": "Amiibo master keys used to decrypt tag dumps",
            "name": "key_retail.bin",
            "note": "Read from the system directory under the data root and split into two 80-byte master keys, the data key then the tag key, each being a 16-byte HMAC key, a 14-byte type string, a reserved byte, a magic size byte, 16 magic bytes and a 32-byte XOR pad. Any total other than 160 bytes throws and the scan fails. The desktop window hides its amiibo-from-dump entry when the file is absent. Only the desktop scan path decrypts a dump; the Android slots hand the raw bytes to the tag buffer instead.",
            "path": "system/key_retail.bin",
            "required": false,
            "size": 160,
            "source_ref": "src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs:22-44,331-336, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboDecryptor.cs:10-16, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboMasterKey.cs:15-39, src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs:385,2243",
            "validation": [
              "size"
            ]
          },
          {
            "category": "game_data",
            "description": "SDL gamepad mapping database",
            "name": "SDL_GameControllerDB.txt",
            "note": "Read from the data root and handed to SDL_AddGamepadMappingsFromFile when the SDL3 driver starts, which happens on the desktop build only. Guarded by an existence test, and SDL carries its own built-in mappings, so a missing file costs only the extra pad definitions.",
            "path": "SDL_GameControllerDB.txt",
            "required": false,
            "source_ref": "src/Ryujinx.SDL3.Common/SDL3Driver.cs:100-105, src/Ryujinx.Input.SDL3/SDL3GamepadDriver.cs:53, src/Ryujinx.Audio.Backends.SDL3/SDL3HardwareDeviceDriver.cs:36, src/Ryujinx/UI/Windows/MainWindow.axaml.cs:110"
          },
          {
            "description": "Amiibo tag dump",
            "name": "<amiibo>.bin",
            "note": "Read whole from wherever the picker points. The desktop path decrypts it with key_retail.bin, accepts 532 bytes by padding to the 540 of 135 pages of 4, and writes the tag back when a game edits its application area. The Android slots read the bytes through the content resolver and buffer them for the NFP service, which takes the figure id from offset 0x1DC without decrypting anything.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/HOS/Horizon.cs:355-363, src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs:22-44,151-283, src/LibKenjinx/LibKenjinx.cs:700-729, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/views/GameViews.kt:328-349",
            "unsourceable": "dump of one physical amiibo figure, tied to the tag it was read from and never distributed generically"
          },
          {
            "description": "Override for one built-in root certificate",
            "name": "<CaCertificateId>.der",
            "note": "Looked up under system/ssl by the enumeration name of the certificate being read out of the firmware certificate store, and substituted for the store entry when the file exists. The store itself comes from title 0100000000000800, so the absence of an override changes nothing.",
            "path": "system/ssl/",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs:25,91-112,114-180",
            "unsourceable": "replacement certificate the user picks for one certificate authority, with no canonical artefact behind the name"
          },
          {
            "description": "Replacement Vulkan driver for the Android build",
            "name": "<driver>.zip",
            "note": "Imported through a picker filtered on application/zip and unpacked into a folder named after the archive under drivers in the data root. A folder is offered only when it holds a meta.json naming a libraryName that resolves to a file present beside it; the chosen path is remembered in a file named selected. At renderer start the folder is copied into internal storage, because the external filesystem cannot carry an executable mapping, loaded through the rootless Adreno driver loader, and the resulting handle is passed to the Vulkan loader. An empty selection uses the system loader.",
            "path": "drivers/",
            "required": false,
            "source_ref": "src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/VulkanDriverViewModel.kt:13-167, src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/MainViewModel.kt:202-243, src/LibKenjinx/Android/JniExportedMethods.cs:532-555, src/LibKenjinx/VulkanLoader.cs:27-29",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          }
        ],
        "firmware_titles": [
          {
            "content": [
              "file"
            ],
            "id": "0100000000000809",
            "name": "System version",
            "note": "Version string reported for the installed firmware, and the value the installer returns after verifying a package.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:32,1047-1080"
          },
          {
            "content": [
              "binaryList.txt",
              "zoneinfo/"
            ],
            "id": "010000000000080E",
            "name": "TimeZoneBinary",
            "note": "Location list and zone rules. Without it the location cache holds UTC alone and the time zone manager is marked initialised without rules.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs:24,62-86,88-119"
          },
          {
            "content": [
              "nintendo_ext_003.bfttf"
            ],
            "id": "0100000000000810",
            "name": "FontNintendoExtended",
            "note": "Shared font, XOR-decoded from BFTTF into the shared memory the pl:u service exposes.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:73,93, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125,159-180"
          },
          {
            "content": [
              "nintendo_udsg-r_std_003.bfttf"
            ],
            "id": "0100000000000811",
            "name": "FontStandard",
            "note": "Shared font. A missing font title throws InvalidSystemResourceException, so a title that asks for shared fonts stops there.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:68,88, src/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs:63-125"
          },
          {
            "content": [
              "nintendo_udsg-r_ko_003.bfttf"
            ],
            "id": "0100000000000812",
            "name": "FontKorean",
            "note": "Shared font.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:71,91"
          },
          {
            "content": [
              "nintendo_udjxh-db_zh-tw_003.bfttf"
            ],
            "id": "0100000000000813",
            "name": "FontChineseTraditional",
            "note": "Shared font.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:70,92"
          },
          {
            "content": [
              "nintendo_udsg-r_org_zh-cn_003.bfttf",
              "nintendo_udsg-r_ext_zh-cn_003.bfttf"
            ],
            "id": "0100000000000814",
            "name": "FontChineseSimplified",
            "note": "Shared fonts. One title carries both the base and the extended simplified faces.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/ContentManager.cs:69-70,89-90"
          },
          {
            "content": [
              "ssl_TrustedCerts.bdf",
              "ssl_TrustedCerts.tcf"
            ],
            "id": "0100000000000800",
            "name": "Certificate store",
            "note": "Trusted root certificates for the ssl service, the .tcf name being the one used up to firmware 2.3.0. Absent, the service logs and serves nothing.",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs:25,114-180"
          }
        ],
        "mode": "standalone",
        "notes": "Nintendo Switch emulator in C#, a fork of the Ryujinx line maintained by\nKeatonTheBot. Two builds come out of one repository: the desktop Avalonia\nfront end on master, and the Android app on libryujinx_bionic, which carries\nthe whole desktop tree plus src/KenjinxAndroid and src/LibKenjinx. That branch\nis the one read here, since master has no Android code at all. The Android\npackage is org.kenjinx.android and ES-DE launches it with the action\norg.kenjinx.android.LAUNCH_GAME and the ROM in EXTRA_bootPath.\nref: README.md:15-24, src/KenjinxAndroid/app/build.gradle:11-15,\n     src/KenjinxAndroid/app/src/main/AndroidManifest.xml:8,69\n\nEvery external file hangs off one data root. AppDataManager.Initialize takes a\nbase path, keeps a portable directory next to the binary when one exists and\notherwise falls back to %APPDATA%/Ryujinx, the default directory name being\nstill Ryujinx. Android hands it getExternalFilesDir(null), which differs from\nthe user profile path and already exists, so the launch mode is Custom and the\n~/.switch fallback that ReloadKeySet consults in UserProfile mode never fires\nthere. games, profiles and system are created under the root on every start.\nref: src/Ryujinx.Common/Configuration/AppDataManager.cs:11-17,47,50-104,223-230,\n     src/LibKenjinx/LibKenjinx.cs:54-95,\n     src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/MainActivity.kt:264-298\n\nFirmware is installed rather than placed. ContentManager takes a directory, a\nzip or an xci with an update partition, verifies each NCA against the key set\nand refuses a package carrying unrelated archives, then registers the contents\nunder bis/system/Contents/registered. Android passes a file descriptor instead\nof a path but reaches the same two methods. Nothing gates the launch on it:\nhomebrew NRO goes through ProcessLoader without touching the key set, and the\nfailure is deferred to the first service that needs a system archive.\nref: src/Ryujinx.HLE/FileSystem/ContentManager.cs:431-498,675-749,893-903,\n     src/LibKenjinx/Android/JniExportedMethods.cs:459-495,\n     src/Ryujinx.HLE/Loaders/Processes/ProcessLoader.cs:189-205\n\nTwo read paths belong to the desktop build alone, because the Android build\ndrops LibKenjinx.Native.cs and wires those subsystems differently.\nSDL_GameControllerDB.txt is read by SDL3Driver, whose only callers are the\nSDL3 audio, gamepad and keyboard drivers; on Android JnaDeviceInitialize\nbuilds an OpenALHardwareDeviceDriver and InitializeInput builds a\nVirtualGamepadDriver, so SDL3 never initialises. Amiibo diverge the same way:\nthe desktop scan decrypts a dump through AmiiboBinReader and therefore needs\nkey_retail.bin, while the Android entry buffers the raw tag in\nKenjinxAmiiboShim and INfp reads the figure id straight out of offset 0x1DC.\nref: src/LibKenjinx/LibKenjinx.csproj:11-13,\n     src/LibKenjinx/Android/JniExportedMethods.cs:347-348,1046-1060,\n     src/LibKenjinx/LibKenjinx.Input.cs:28-39,\n     src/Ryujinx.HLE/Kenjinx/AmiiboBridge.cs:10-44,\n     src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/KenjinxAmiiboShim.cs:15-41,\n     src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/NfpManager/INfp.cs:149-166,257-279\n\nConfig.json, Profiles.json, updates.json, dlc.json, mods.json, metadata.json\nand system/amiibo/<amiibo id>.json are written by the emulator itself, and\nsystem/amiibo/Amiibo.json is a catalogue the desktop window downloads from\nAmiiboAPI and rewrites. None of them is user supplied. The Android app keeps\nits own settings in Android shared preferences.\nref: src/Ryujinx.HLE/HOS/Services/Nfc/Nfp/VirtualAmiibo.cs:198-243,\n     src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs:61-63,\n     src/Ryujinx.Common/ReleaseInformation.cs:14-19,\n     src/KenjinxAndroid/app/src/main/java/org/kenjinx/android/viewmodels/QuickSettings.kt:92\n\nDistribution moved off GitHub: Kenji-NX/Android-Releases returns HTTP 451\nunder the Nintendo notice of 2026-02-12, and both the source and the builds\nare served by the Forgejo instance, which is where ES-DE points as well.\nref: https://github.com/github/dmca/blob/master/2026/02/2026-02-12-nintendo.md,\n     tmp/es-de/ANDROID.md:470-474\n",
        "profiled_date": "2026-08-11",
        "source": "https://git.ryujinx.app/projects/Kenji-NX",
        "source_branch": "libryujinx_bionic",
        "source_commit": "8d7d8f344cb01257c5bc59bb02a74bb89ab9bb5f",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://git.ryujinx.app/projects/Ryubing"
      }
    },
    {
      "id": "kronos",
      "profile": {
        "archive_prefix": "kronos",
        "core_classification": "official_port",
        "core_version": "v2.6.0",
        "cores": [
          "kronos"
        ],
        "display_name": "Sega - Saturn/ST-V (Kronos)",
        "emulator": "Kronos",
        "files": [
          {
            "name": "saturn_bios.bin",
            "note": "Primary Saturn BIOS. Any region accepted. Searched in kronos/ subdir first.",
            "path": "kronos/saturn_bios.bin",
            "priority": 1,
            "required": true,
            "size": 524288,
            "source_ref": "libretro.c:1619-1623",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "sega_101.bin",
            "note": "Saturn BIOS v1.01 (Japan). Fallback if saturn_bios.bin missing.",
            "priority": 2,
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "libretro.c:1627",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "mpr-17933.bin",
            "note": "Saturn BIOS (NA/EU). Last fallback for Saturn mode.",
            "priority": 3,
            "region": [
              "north-america",
              "europe"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "libretro.c:1631",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "stvbios.zip",
            "note": "MAME-style ZIP containing ST-V region BIOS EPROMs. Searched in kronos/ subdir first.",
            "required": true,
            "source_ref": "libretro.c:1608-1617, ctrl/src/stv.c:112-136",
            "system": "sega-stv"
          },
          {
            "archive": "stvbios.zip",
            "crc32": "f688ae60",
            "name": "epr-23603.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:120",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "59ed40f4",
            "name": "epr-20091.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:121",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "d0e0889d",
            "name": "epr-19730.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:122",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "2672f9d8",
            "name": "epr-17951a.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:123",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "3e23c81f",
            "name": "epr-17740a.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:124",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "5c5aa63d",
            "name": "epr-17740.ic8",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:125",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "f7722da3",
            "name": "epr-17954a.ic8",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:126",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "d1be2adf",
            "name": "epr-17952a.ic8",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:127",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "4166c663",
            "name": "epr-17741a.ic8",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:128",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "e09d1f60",
            "name": "epr-19854.ic8",
            "region": [
              "taiwan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:129",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "a4c47570",
            "name": "epr-17953a.ic8",
            "region": [
              "taiwan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:130",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "02daf123",
            "name": "epr-17742a.ic8",
            "region": [
              "taiwan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:131",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "3dfeda92",
            "name": "stv110.bin",
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:132",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "archive": "stvbios.zip",
            "crc32": "728dbca3",
            "name": "stv1061.bin",
            "required": false,
            "size": 524288,
            "source_ref": "stv.c:133",
            "system": "sega-stv",
            "validation": [
              "crc32"
            ]
          },
          {
            "name": "mpr-18811-mx.ic1",
            "note": "ROM cartridge for The King of Fighters '95. Auto-detected via game DB.",
            "required": false,
            "size": 2097152,
            "source_ref": "utils/src/db.c:43-44, yabause/src/cs0.c:1207-1216",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "name": "mpr-19367-mx.ic1",
            "note": "ROM cartridge for Ultraman: Hikari no Kyojin Densetsu. Auto-detected via game DB.",
            "required": false,
            "size": 2097152,
            "source_ref": "utils/src/db.c:45, yabause/src/cs0.c:1207-1216",
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Kronos is a Sega Saturn and ST-V arcade emulator by FCare, forked from\nYabause. Requires OpenGL 4.3 compute shaders.\n\nSaturn BIOS search order:\n  1. {system}/kronos/saturn_bios.bin\n  2. {system}/saturn_bios.bin\n  3. {system}/sega_101.bin\n  4. {system}/mpr-17933.bin\nFirst file found wins. Real BIOS required (HLE deprecated, only available\nvia kronos_force_hle_bios core option for debugging).\n\nST-V BIOS: {system}/kronos/stvbios.zip or {system}/stvbios.zip\nMAME-style ZIP containing region-specific EPROMs. Kronos picks the best\nmatch by game region and kronos_stv_favorite_region core option (EU/US/JP/TW).\n\nROM cartridges for KOF95 and Ultraman are auto-detected via game database\n(db.c) and loaded from system_dir when the corresponding game is running.\n\nBIOS loading: libretro.c retro_load_game() lines 1601-1727.\nSTV blob table: ctrl/src/stv.c BiosList lines 112-136.\nROM cartridge DB: utils/src/db.c lines 43-45.\n\nStandalone supports MPEG card ROM loading (Video CD card); disabled in\nlibretro port (mpegpath = NULL in libretro.c:1578).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/yabause",
        "source_commit": "65af22e96beb6d9b0b9a50a81a39c86a6d604c1c",
        "systems": [
          "sega-saturn",
          "sega-stv"
        ],
        "type": "libretro",
        "upstream": "https://github.com/FCare/Kronos"
      }
    },
    {
      "id": "lexaloffle",
      "profile": {
        "cores": [
          "lexaloffle",
          "pico-8"
        ],
        "display_name": "Lexaloffle - PICO-8 / Voxatron",
        "emulator": "Lexaloffle",
        "files": [
          {
            "description": "PICO-8 main executable (statically linked)",
            "name": "pico8",
            "note": "Configgen checks existence and executable permission",
            "path": "pico-8/pico8",
            "required": true,
            "source_ref": "lexaloffleGenerator.py:17,36,48-49",
            "system": "pico8"
          },
          {
            "description": "PICO-8 dynamically linked executable",
            "name": "pico8_dyn",
            "note": "Alternative to pico8. Requires system SDL2. Some platforms prefer this variant.",
            "path": "pico-8/pico8_dyn",
            "required": false,
            "source_ref": "lexaloffleGenerator.py:17,36",
            "system": "pico8"
          },
          {
            "description": "PICO-8 data file (boot sequence, themes, demo carts)",
            "name": "pico8.dat",
            "note": "POD format. Loaded by pico8/pico8_dyn from same directory at startup.",
            "path": "pico-8/pico8.dat",
            "required": true,
            "system": "pico8"
          },
          {
            "description": "Voxatron main executable",
            "name": "vox",
            "note": "Configgen checks existence and executable permission. x86_64 only.",
            "path": "voxatron/vox",
            "required": true,
            "source_ref": "lexaloffleGenerator.py:20,42,48-49",
            "system": "voxatron"
          },
          {
            "description": "Voxatron dynamically linked executable",
            "name": "vox_dyn",
            "note": "Alternative to vox. Requires system SDL2.",
            "path": "voxatron/vox_dyn",
            "required": false,
            "source_ref": "lexaloffleGenerator.py:20,42",
            "system": "voxatron"
          },
          {
            "description": "Voxatron data file",
            "name": "vox.dat",
            "note": "Loaded by vox/vox_dyn from same directory at startup.",
            "path": "voxatron/vox.dat",
            "required": true,
            "system": "voxatron"
          },
          {
            "description": "Looking Glass holographic display support library",
            "name": "libHoloPlayCore.so",
            "note": "Compile-time linked dependency. LD_LIBRARY_PATH set to bios/voxatron/ by configgen.",
            "path": "voxatron/libHoloPlayCore.so",
            "required": true,
            "source_ref": "lexaloffleGenerator.py:89",
            "system": "voxatron"
          }
        ],
        "notes": "Commercial fantasy consoles by Lexaloffle Games LLP. Closed-source binaries\ndistributed as ZIP archives from lexaloffle.com (requires purchase).\n\nBatocera configgen (lexaloffleGenerator.py) handles both systems via a single\ngenerator. PICO-8: binary at bios/pico-8/pico8. Voxatron: binary at\nbios/voxatron/vox. Generator checks binary existence and executable permission,\nraises BatoceraException if missing. LD_LIBRARY_PATH set to the BIOS directory\nfor shared library resolution.\n\nEach distribution ships a statically linked binary (pico8/vox) and a dynamically\nlinked variant (pico8_dyn/vox_dyn). Batocera uses the static binary. The .dat\nfile is loaded at startup and contains boot sequence, themes, and internal data.\n\nPICO-8 supports x86_64 and ARM (Raspberry Pi). Voxatron x86_64 only.\nVoxatron depends on libHoloPlayCore.so (Looking Glass SDK), compile-time linked.\n",
        "profiled_date": "2026-03-26",
        "systems": [
          "pico8",
          "voxatron"
        ],
        "type": "standalone",
        "upstream": "https://www.lexaloffle.com/"
      }
    },
    {
      "id": "lightspark",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.9.0",
        "cores": [
          "lightspark"
        ],
        "display_name": "Adobe Flash (Lightspark)",
        "emulator": "lightspark",
        "files": [],
        "mode": "standalone",
        "notes": "Open source implementation of the Flash player, playing SWF files of any\nActionScript version, as a standalone application or as a browser plugin. The\nActionScript built-in classes are implemented in C++ under src/scripting/flash,\nso no external class library is read. ES-DE runs the binary as\n`lightspark --fullscreen <rom>`, Batocera as\n`lightspark -fs -s local-with-networking <rom>` off a 0.8.7 pin.\n\nStartup reads nothing. The two GLSL shaders sit in the tree as\nsrc/lightspark.frag and src/lightspark.vert but the preprocessor pulls them\ninto string literals, \"directly include shader source to avoid filesystem\naccess\" (src/backends/rendering.cpp:1042-1045,1062-1065), which is also how\n0.8.7 builds them. The face given to nanoVG for text is Roboto Medium, decoded\nat runtime from a base85 array in the binary (src/launcher.cpp:1567,\nsrc/platforms/engineutils.cpp:500-502), and the launcher icon face is embedded\nthe same way (src/launcher.cpp:1094-1096,1333).\nresources/openfonticons/OpenFontIcons.ttf and resources/ErrorConstants.xml are\nbuild inputs, the second feeding the errorconstants.{h,cpp} generator\n(tools/errorgen:20).\n\nFonts named by the content go through fontconfig, which answers with whatever\nface the host has installed: FcFontMatch then FcPatternGetString(FC_FILE) hands\na path straight to nvgCreateFont (src/backends/cachedsurface.cpp:135-156). No\nname, path, size or hash is fixed anywhere, README:27-30 marks fontconfig\nitself optional, and an unmatched family leaves nanoVGFontID at -1 and falls\nback to the embedded face.\n\ndataFileRead is the only reader of LS_DATADIR and has no callers, at this\ncommit and at 0.8.7 (src/parsing/textfile.cpp:74-106). fontPath holds\n\"TimesNewRoman.ttf\" on Windows (src/backends/rendering.cpp:102) but reaches\nonly cairo_select_font_face, which takes a family name rather than a path, and\nonly under ENABLE_CAIRO (src/backends/rendering.cpp:1277), left FALSE by\nCMakeLists.txt.\n\nFiles the player writes rather than expects: lightspark.conf, an INI carrying\nthe cache directory and prefix whose absence leaves the hardcoded defaults\n(src/backends/config.cpp:82-115), launcher.xml holding the recent entries\n(src/launcher.cpp:1299-1310), and .sol SharedObjects under the data directory\n(src/platforms/engineutils.cpp:849-914). application.xml, extension.xml and the\nlibrary.swf files under META-INF/AIR/extensions belong to the AIR package being\nrun (src/main.cpp:149, src/platforms/engineutils.cpp:785-800), and\ncrossdomain.xml is fetched from remote hosts\n(src/backends/security.cpp:353,1025).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/lightspark/lightspark",
        "source_commit": "d51ab60193b7baa56b2f6ec55f9a7789f99f6ee9",
        "systems": [
          "flash"
        ],
        "type": "standalone",
        "upstream": "https://github.com/lightspark/lightspark"
      }
    },
    {
      "id": "lime3ds",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2119.1",
        "cores": [
          "lime3ds",
          "lime3ds-gui",
          "lime-qt"
        ],
        "display_name": "Nintendo - 3DS (Lime3DS)",
        "emulator": "Lime3DS",
        "files": [
          {
            "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:206-309, src/common/common_paths.h:68",
            "system": "nintendo-3ds"
          },
          {
            "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:135-204, src/core/hw/rsa/rsa.cpp:49-80",
            "system": "nintendo-3ds",
            "validation": [
              "size"
            ]
          },
          {
            "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/core/hle/service/apt/apt.cpp:276-291",
            "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"
          },
          {
            "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",
            "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",
            "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": "Fork of Citra, discontinued at 2119.1. Data dir: lime3ds-emu on Linux,\nLime3DS on Windows and macOS, with citra-emu and Citra kept as legacy\nlocations. External files live in sysdata/ and nand/.\nref: src/common/common_paths.h:18-32, src/common/file_util.cpp:834-835\n\nInitKeys reads boot9.bin then aes_keys.txt. Encrypted content needs one of\nthe two files.\nref: src/core/hw/aes/key.cpp:313-322\n\nSystem archives (shared font, Mii data, country list, bad word list) have\nopen-source replacements embedded in the binary.\nref: src/core/file_sys/archive_ncch.cpp:144-170\n\nThe embedded shared font only covers title low ID 0x00014002. CHN, KOR and\nTWN resolve to 0x00014102, 0x00014202 and 0x00014302, which fall through to\nshared_font.bin and then to ErrorSystemFiles.\nref: src/core/hle/service/apt/apt.cpp:213, src/core/hle/service/apt/apt.cpp:284-290\n\nClCertA is decrypted from the NAND archive with the KeySlot 0x0D normal key,\nand HTTPS requests stay unauthenticated when either is unavailable.\nref: src/core/hle/service/http/http_c.cpp:1963-1999\n\nSystem titles are downloaded and installed in-app from the Nintendo CDN, so\nthe NAND title tree is not user-supplied.\nref: src/core/nus_download.cpp:13, src/core/hle/service/am/am.cpp:536\n\nDumpKeys.gm9, a GodMode9 script producing aes_keys.txt and seeddb.bin, ships\nin the tree.\nref: dist/dumpkeys/README.md\n\nsector0x96.bin is defined but read by no code path.\nref: src/common/common_paths.h:70\n\nmcu.dat holds per-installation MCU state that the emulator writes itself when\nthe file is absent.\nref: src/core/hle/service/cfg/cfg.cpp:734-756\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/Lime3DS/lime3ds-archive",
        "source_commit": "c9dbb5bb40d90dfa6a2b085d152ae6ecf915b2f9",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Lime3DS/lime3ds-archive"
      }
    },
    {
      "id": "linapple",
      "profile": {
        "analysis": {
          "debugger_scripts": [
            {
              "filename": "DebuggerAutoRun.txt",
              "note": "Run once through CmdOutputRun when the debugger first initialises, with g_bReportMissingScripts cleared so absence is silent. Holds debugger commands written by the user and has no counterpart in the source tree.\n",
              "source_ref": "src/Debugger/Debug.cpp:8745-8755"
            }
          ],
          "embedded_roms": {
            "character_generators": {
              "accepted_geometry": "128x128, or 128x256 for the Euro ROMs carrying a second language",
              "images": [
                {
                  "filename": "charset40.png",
                  "md5": "c6029ef4d4fa272083769673bdcf2b6c",
                  "sha1": "d79aa8af6446c3637401cb75ffdda92fdf7f3853",
                  "size": 2745,
                  "used_for": "Apple //e and Enhanced //e, English (US)"
                },
                {
                  "filename": "charset40_IIplus.png",
                  "md5": "2104f293d5df7137fdd579ea405da847",
                  "sha1": "bc9aa5cbadfcffe82b5b20ce954555b9d07fa260",
                  "size": 1956,
                  "used_for": "Apple ][ and Apple ][+"
                },
                {
                  "filename": "charset40_british.png",
                  "md5": "aa001ec528e3c6c472d02cbb09c5b365",
                  "sha1": "ac363e069b40658f86ccd1e2d57438db732dbc84",
                  "size": 5300,
                  "used_for": "English (UK)"
                },
                {
                  "filename": "charset40_french.png",
                  "md5": "f163ec67c91501b604ca349afef93fc3",
                  "sha1": "5b454a2e7194863df3a997cc21e7ea6d61eb61d7",
                  "size": 5330,
                  "used_for": "French (FR)"
                },
                {
                  "filename": "charset40_german.png",
                  "md5": "4d8ab9d3f15ee19d9e62c1f163df7e48",
                  "sha1": "f86bd5238604247e04d616850f244b489daef18d",
                  "size": 5290,
                  "used_for": "German (DE)"
                }
              ],
              "mechanism": "PNG converted to XPM by the Makefile, included at Video.cpp:43-47",
              "selection": "machine type, then g_KeyboardLanguage (Video.cpp:1264-1291)"
            },
            "extraction": "hashes computed from the decoded hex-escape literals",
            "mechanism": "C string literals compiled into the binary, installed with memcpy",
            "peripheral_firmware": [
              {
                "device": "Parallel printer card",
                "md5": "5902996f16dc78fc013f6e1db14805b3",
                "sha1": "c75c751589cbcc1ad4ab4f63676af7abadd86f5b",
                "size": 256,
                "slot": 1,
                "source_ref": "src/ParallelPrinter.cpp:33,61-65",
                "symbol": "Parallel_bin"
              },
              {
                "device": "Super Serial Card",
                "md5": "67c0d61ab0911183faf05270f881a97e",
                "note": "Slot firmware taken from offset 0x700, full 2 KB kept as expansion ROM",
                "sha1": "6dab633470c6bc4cb3e81d09fda46597caf8ee57",
                "size": 2048,
                "slot": 2,
                "source_ref": "src/SerialComms.cpp:53,774-794",
                "symbol": "SSC_rom"
              },
              {
                "device": "Mouse interface card",
                "md5": "22563ab338024dac7b03510371d49c57",
                "note": "Installed only when g_Slot4 is CT_MouseInterface",
                "sha1": "3a9d881a8a8d30f55b9719aceebbcf717f829d6f",
                "size": 2048,
                "slot": 4,
                "source_ref": "src/MouseInterface.cpp:39,207-224",
                "symbol": "MouseInterface_rom"
              },
              {
                "device": "Disk II controller, 16 sector",
                "md5": "2020aa1413ff77fe29353f3ee72dc295",
                "note": "Three bytes at $C64C are patched after the copy to drop a wait routine",
                "sha1": "d4181c9f046aafc3fb326b381baac809d9e38d16",
                "size": 256,
                "slot": 6,
                "source_ref": "src/Disk.cpp:44,832-846",
                "symbol": "Disk2_rom"
              },
              {
                "device": "Hard disk controller",
                "md5": "9e5b56c2daf2a10bd8fd76db60273e08",
                "note": "Installed only when the hard disk is enabled. Differs from the firmware carried by current AppleWin",
                "sha1": "b2430836d5fedb11ae9a680f14dedef0d41ed92e",
                "size": 256,
                "slot": 7,
                "source_ref": "src/Harddisk.cpp:108,279-288",
                "symbol": "Hddrvr_dat"
              }
            ],
            "system_roms": [
              {
                "machine": "Apple ][",
                "machine_type": "A2TYPE_APPLE2",
                "md5": "3c406514b9806a7c57ee65fb0b0c39b4",
                "sha1": "09288be705464b608ff190519ab008d3dfcd1b05",
                "size": 12288,
                "source_ref": "inc/resource.h:3; Memory.cpp:1015-1018",
                "symbol": "Apple2_rom"
              },
              {
                "machine": "Apple ][+",
                "machine_type": "A2TYPE_APPLE2PLUS",
                "md5": "572b3005a4fa49bc54917b069b82c1ab",
                "sha1": "33a24f5489ba9195b44be77d9afb2252594cb5c7",
                "size": 12288,
                "source_ref": "inc/resource.h:774; Memory.cpp:1019-1022",
                "symbol": "Apple2plus_rom"
              },
              {
                "machine": "Apple //e",
                "machine_type": "A2TYPE_APPLE2E",
                "md5": "346bc782c6a08a531c460e33bc03daf4",
                "note": "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000",
                "sha1": "61fa9254628e5bb7236fb474006116d67684d747",
                "size": 16384,
                "source_ref": "inc/resource.h:1545; Memory.cpp:1023-1026",
                "symbol": "Apple2e_rom"
              },
              {
                "machine": "Enhanced Apple //e",
                "machine_type": "A2TYPE_APPLE2EEHANCED",
                "md5": "38063e08c778503fc03ecebb979769e9",
                "note": "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000",
                "sha1": "b8ea90abe135a0031065e01697c4a3a20d51198b",
                "size": 16384,
                "source_ref": "inc/resource.h:2573; Memory.cpp:1027-1030",
                "symbol": "Apple2eEnhanced_rom"
              }
            ]
          },
          "generated_files": {
            "note": "Produced by the emulator, none is user-supplied",
            "written_and_read_back": [
              "LinAppleDebugger.cfg"
            ],
            "written_only": [
              "AppleWin.log",
              "Profile.txt",
              "Trace.txt",
              "AppleWin_Text40.txt",
              "AppleWin_Text80.txt",
              "save states",
              "printer spool file",
              "FTP directory cache"
            ]
          },
          "symbol_tables": {
            "loaded_on_command": [
              "A2_ASM.SYM",
              "A2_USER2.SYM",
              "A2_SRC1.SYM",
              "A2_SRC2.SYM",
              "A2_DOS33.SYM",
              "A2_PRODOS.SYM"
            ],
            "lookup": "g_sProgramDir + filename, and g_sProgramDir is never assigned",
            "note": "Only APPLE2E.SYM and A2_BASIC.SYM are distributed with the emulator and copied to the build output by the Makefile (:98-99,205-206). The user slots and the remaining tables have no shipped counterpart.\n",
            "preloaded_at_init": [
              "APPLE2E.SYM",
              "A2_BASIC.SYM",
              "A2_USER1.SYM"
            ],
            "source_ref": "src/Debugger/Debugger_Symbols.cpp:48-58"
          },
          "unused_resources": [
            {
              "filename": "font.bmp",
              "reason": "Asset_LoadBMP (asset.cpp:37-51) has no call sites and is not declared in asset.h"
            },
            {
              "filename": "icon.bmp",
              "reason": "Asset_LoadBMP (asset.cpp:37-51) has no call sites and is not declared in asset.h"
            },
            {
              "filename": "fixedsys-excelsior-regular.ttf",
              "reason": "no TTF symbol in the tree and no SDL_ttf in the Makefile link line"
            }
          ]
        },
        "core_classification": "community_fork",
        "core_version": "2.3.0",
        "cores": [
          "linapple"
        ],
        "display_name": "Apple - Apple II (LinApple)",
        "emulator": "LinApple",
        "files": [
          {
            "description": "Boot floppy inserted into slot 6 drive 1 at startup",
            "max_size": 143364,
            "min_size": 143105,
            "name": "Master.dsk",
            "note": "Inserted only when the Slot 6 Autoload preference is off; when it is on, the two configured disk images are loaded instead. Asset_FindMasterDisk prints a warning and returns 255 when no search path holds the file, and the emulator starts with an empty drive. No hash or content check is performed. DoDetect also accepts the discrete sizes 143403 and 143488 for DOS-order images. LinApple and Batocera ship different images under this name, both 143360 bytes.\n",
            "required": false,
            "source_ref": "src/asset.cpp:33, src/asset.cpp:101-128, src/Applewin.cpp:626-633, src/DiskImage.cpp:424-427",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Debugger symbol table for the main ROM",
            "name": "APPLE2E.SYM",
            "note": "Preloaded into the Main table when the debugger initialises. Parsed as text lines of address and symbol name, with no size or hash check.\n",
            "required": false,
            "source_ref": "src/Debugger/Debugger_Symbols.cpp:49, src/Debugger/Debugger_Symbols.cpp:553-584, src/Debugger/Debugger_Symbols.cpp:751-767, src/Debugger/Debug.cpp:8679-8680"
          },
          {
            "description": "Debugger symbol table for Applesoft BASIC",
            "name": "A2_BASIC.SYM",
            "note": "Preloaded into the Basic table when the debugger initialises. Parsed as text lines of address and symbol name, with no size or hash check.\n",
            "required": false,
            "source_ref": "src/Debugger/Debugger_Symbols.cpp:50, src/Debugger/Debugger_Symbols.cpp:553-584, src/Debugger/Debugger_Symbols.cpp:751-767, src/Debugger/Debug.cpp:8682-8683"
          }
        ],
        "mode": "standalone",
        "notes": "SDL port of AppleWin for Linux. The tree was taken off SourceForge by\nmaxolasersquad, forked further by several users, and now sits under the\nlinappleii namespace (README.md:8-22). Machine types are Apple ][,\nApple ][+, Apple //e and Enhanced Apple //e.\n\nEvery ROM is compiled into the binary as a C string literal. MemInitialize\npicks one of four system ROM arrays by g_Apple2Type and copies it into\nmemrom, splitting off the first 4 KB as internal Cx ROM for the two //e\ntypes (Memory.cpp:1012-1052). The four IDR_APPLE2*_ROM macros defined just\nabove that switch hold .rom filenames and are never referenced. Peripheral\nfirmware is embedded the same way and installed by MemInitialize: parallel\nprinter in slot 1, Super Serial Card in slot 2, mouse in slot 4, Disk II in\nslot 6, hard disk in slot 7 (Memory.cpp:1057-1062). Slot 4 is filled only\nwhen g_Slot4 is CT_MouseInterface, slot 7 only when the hard disk is\nenabled (Harddisk.cpp:279-281).\n\nCharacter generators are res/charset40*.png, converted to XPM arrays by the\nMakefile and included at Video.cpp:43-47. One of five is chosen from the\nmachine type and g_KeyboardLanguage (Video.cpp:1264-1291). The window icon,\nstatus font and splash screen are XPM arrays as well (asset.cpp:29-31,61-75).\n\nMaster.dsk is the only data file the emulator searches for. Path::FindDataFile\nwalks ~/.local/share/linapple, the XDG config directory, the executable\ndirectory, the compiled-in ASSET_DIR and the two share paths\n(Util_Path.h:43-68). ImageOpen rejects an image that no format detector\nclaims, and for a .dsk the detector that runs first is DoDetect, which gates\non file size (DiskImage.cpp:424-427,977-1034).\n\nThe debugger reads its symbol tables through g_sProgramDir, a buffer declared\nempty at Applewin.cpp:87 and never assigned anywhere in the tree, so the\nnames resolve against the working directory. g_sFileNameSymbols lists nine\ntables (Debugger_Symbols.cpp:48-58) and DebugInitialize preloads three with\nmissing-file reporting suppressed (Debug.cpp:8676-8696); the other six load\nfrom the matching SYM command. A table that is absent leaves the debugger\nrunning without its symbols (Debugger_Symbols.cpp:576-584).\n\nlinapple.conf carries preferences only, and is searched over ./, the XDG\nconfig and data directories, every $XDG_CONFIG_DIRS entry and /etc\n(Applewin.cpp:803-815). Each accessor returns a compiled-in default when a\nkey is missing (Registry.cpp:87-116), and Configuration::Save is compiled\nout unless REGISTRY_WRITEABLE is defined (Registry.cpp:63-85).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/linappleii/linapple",
        "source_commit": "b7a26b46773996130a602b9ac7ac2ebeae5c0b11",
        "systems": [
          "apple-ii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/AppleWin/AppleWin"
      }
    },
    {
      "id": "lindbergh-loader",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "2.1.4",
        "cores": [
          "lindbergh-loader"
        ],
        "display_name": "Sega - Lindbergh (Lindbergh Loader)",
        "emulator": "Lindbergh Loader",
        "files": [
          {
            "description": "NVIDIA Cg 2.0.0.12 runtime used to recompile the game shaders",
            "name": "libCg2.so",
            "note": "Searched at LIBCG_PATH, /app/lib32/libCg2.so, $APP_IMG_ROOT/usr/lib32/ libCg2.so, then ./libCg.so and $LINDBERGH_LOADER_CURRENT_DIR/libCg.so. The loader reads 8 bytes at offset 0x226d84 and requires exactly \"2.0.0.12\"; a missing file, a different version string or a failed dlopen of cgCreateContext, cgCreateProgram, cgGetProgramString, cgDestroyContext or cgDestroyProgram each call exit(EXIT_FAILURE). Upstream vendors the build as libs/libCg.so and both installers rename it to libCg2.so so it can sit beside the Cg 3.1 library of the same original name that the games link.",
            "required": true,
            "source_ref": "src/lindbergh/shaderPatches.c:1028-1108, src/lindbergh/shaderPatches.c:1110-1170",
            "system": "sega-lindbergh",
            "validation": [
              "signature"
            ]
          },
          {
            "description": "NVIDIA Cg 3.1 OpenGL runtime linked by the game binaries",
            "name": "libCgGL.so",
            "note": "Resolved by the dynamic linker for the game ELF through the LD_LIBRARY_PATH the launcher builds, not opened by loader code. Upstream takes it from Cg-3.1_April2012_x86.tgz and ships it in libs/Cg-3.1.zip. Game dumps generally carry their own copy in the game directory, so the Batocera generator only writes one when the file is absent or differs.",
            "required": true,
            "source_ref": "src/lindbergh/lindbergh.c:336-378, scripts/flatpak/com.github.lindberghloader.yml:181-189",
            "system": "sega-lindbergh"
          },
          {
            "description": "NVIDIA Cg 3.1 runtime linked by the game binaries",
            "name": "libCg.so",
            "note": "Same origin and mechanism as libCgGL.so, and a different build from the 2.0.0.12 library the shader recompiler loads. Batocera keeps the two Cg generations apart as libCg.so.harley and libCg.so.other and copies the matching pair into the ROM directory per game, overwriting the dump's own copy for the titles where it renders shadows and textures incorrectly.",
            "required": true,
            "source_ref": "src/lindbergh/lindbergh.c:336-378, scripts/flatpak/com.github.lindberghloader.yml:181-189",
            "system": "sega-lindbergh"
          },
          {
            "description": "OpenSSL 0.9.7 crypto library linked by the networked games",
            "name": "libcrypto.so.0.9.7",
            "note": "Vendored as libs/libcrypto.so.0.9.7 and installed into the runtime library directory by both the AppImage and Flatpak builds. Resolved by the dynamic linker for the game ELF.",
            "required": false,
            "source_ref": "src/lindbergh/lindbergh.c:336-378, scripts/flatpak/com.github.lindberghloader.yml:244",
            "system": "sega-lindbergh"
          },
          {
            "description": "OpenSSL 0.9.7 TLS library linked by the networked games",
            "name": "libssl.so.0.9.7",
            "note": "Vendored as libs/libssl.so.0.9.7, paired with libcrypto.so.0.9.7.",
            "required": false,
            "source_ref": "src/lindbergh/lindbergh.c:336-378, scripts/flatpak/com.github.lindberghloader.yml:245",
            "system": "sega-lindbergh"
          },
          {
            "description": "OpenAL runtime preloaded for Quiz Answer x Answer",
            "name": "libopenal.so.0",
            "note": "When the ELF is q2satl_lind the launcher looks the file up through findPreloadLibrary and appends it to LD_PRELOAD. Absence prints \"You might not get sound because libopenal.so.0 was not found\" and the game still runs. Vendored as libs/libopenal.so.0.",
            "required": false,
            "source_ref": "src/lindbergh/lindbergh.c:22, src/lindbergh/lindbergh.c:315-328, src/lindbergh/lindbergh.c:882-890",
            "system": "sega-lindbergh"
          },
          {
            "description": "Sega Lindbergh boot and hardware check program, version 2.4",
            "name": "segaboot",
            "note": "Run as \"segaboot -t\" under -s or --segaboot. A 32-bit x86 Linux ELF. 0x38d56318 identifies Segaboot 2.4 and 0xa518b18b the build carrying symbols, but neither is a whole-file checksum and neither belongs in a hash field: src/lindbergh/hook.c computes them as CRC-32 over 0x4000 bytes starting 10 bytes into program header index 2, guarded by p_type == PT_LOAD and p_flags == 5. Declaring one as crc32 gives verify.py a value it can never reproduce. The comparison drives identification only: an unknown CRC logs a warning and startup continues. SEGABOOT 0x0027 and SEGABOOT_2_6 0x0030 in src/lindbergh/config.h are placeholders, not checksums, and no table entry uses them.",
            "required": false,
            "source_ref": "src/lindbergh/lindbergh.c:696-698, src/lindbergh/lindbergh.c:892-895, src/lindbergh/hook.c:1625-1632, src/lindbergh/config.h:57-58, src/lindbergh/gameData.c:51-52",
            "system": "sega-lindbergh",
            "unsourceable": "Lives at /usr/sbin/segaboot on the board's hard disk, which no dump project covers. The /usr partition images that circulate are encrypted and no key is public."
          },
          {
            "description": "Lindbergh boot logo, read from /usr/lib/boot on the original system",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "logo.tga",
            "note": "Read from the game directory only when DISABLE_BUILTIN_LOGOS is set. Otherwise the logoLL array in resources/logo.h answers the read.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:655-667, src/lindbergh/hook.c:888-900",
            "system": "sega-lindbergh"
          },
          {
            "description": "Lindbergh Red boot logo, read from /usr/lib/boot on the original system",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "logo_red.tga",
            "note": "Read from the game directory only when DISABLE_BUILTIN_LOGOS is set. Otherwise the logoLLRed array in resources/logo.h answers the read.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:669-681, src/lindbergh/hook.c:874-886",
            "system": "sega-lindbergh"
          },
          {
            "description": "Sega Kaku Gothic console font texture",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "SEGA_KakuGothic-DB-Roman_12.tga",
            "note": "Read from the game directory only when DISABLE_BUILTIN_FONT is set. The built-in is one shared 128x256 atlas (fontTGA) and one metrics table (fontABC) answering all four font paths, so it substitutes for the Sega originals rather than reproducing either of them. The .abc is the metrics sidecar of the .tga atlas, named for the GDI ABC width triple. Header of 28 bytes: renderOffset, renderHeight, atlas width, atlas height, lineHeight, then firstSymbol and lastSymbol as uint16 and a uint32 symbol count; then one 24-byte record per glyph, four float32 giving the normalised UV rectangle followed by leftMargin, width, rightMargin and a pad as uint16. Field names come from JayFoxRox/lindbergh-tools Utilities/src/font.c, written against a real LucidaConsole_12.abc rather than against this substitute. The built-in itself is Liberation Mono Bold rasterised at 18 px: 95 of its 96 glyphs are byte-identical to that rendering, cropped at the UV rectangles its own metrics declare. Liberation carries a 2010 and 2012 digitisation copyright, so it cannot be a 2005 Sega asset. Otherwise the fontTGA array in resources/font.h answers the read.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:718-730, src/lindbergh/hook.c:902-914",
            "system": "sega-lindbergh"
          },
          {
            "description": "Sega Kaku Gothic console font metrics",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "SEGA_KakuGothic-DB-Roman_12.abc",
            "note": "Read from the game directory only when DISABLE_BUILTIN_FONT is set. The built-in is one shared 128x256 atlas (fontTGA) and one metrics table (fontABC) answering all four font paths, so it substitutes for the Sega originals rather than reproducing either of them. The .abc is the metrics sidecar of the .tga atlas, named for the GDI ABC width triple. Header of 28 bytes: renderOffset, renderHeight, atlas width, atlas height, lineHeight, then firstSymbol and lastSymbol as uint16 and a uint32 symbol count; then one 24-byte record per glyph, four float32 giving the normalised UV rectangle followed by leftMargin, width, rightMargin and a pad as uint16. Field names come from JayFoxRox/lindbergh-tools Utilities/src/font.c, written against a real LucidaConsole_12.abc rather than against this substitute. The built-in itself is Liberation Mono Bold rasterised at 18 px: 95 of its 96 glyphs are byte-identical to that rendering, cropped at the UV rectangles its own metrics declare. Liberation carries a 2010 and 2012 digitisation copyright, so it cannot be a 2005 Sega asset. Otherwise the fontABC array in resources/font.h answers the read, with ftell returning fontABClen.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:732-744, src/lindbergh/hook.c:916-928",
            "system": "sega-lindbergh"
          },
          {
            "description": "Lucida Console font texture",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "LucidaConsole_12.tga",
            "note": "Read from the game directory only when DISABLE_BUILTIN_FONT is set. The built-in is one shared 128x256 atlas (fontTGA) and one metrics table (fontABC) answering all four font paths, so it substitutes for the Sega originals rather than reproducing either of them. The .abc is the metrics sidecar of the .tga atlas, named for the GDI ABC width triple. Header of 28 bytes: renderOffset, renderHeight, atlas width, atlas height, lineHeight, then firstSymbol and lastSymbol as uint16 and a uint32 symbol count; then one 24-byte record per glyph, four float32 giving the normalised UV rectangle followed by leftMargin, width, rightMargin and a pad as uint16. Field names come from JayFoxRox/lindbergh-tools Utilities/src/font.c, written against a real LucidaConsole_12.abc rather than against this substitute. The built-in itself is Liberation Mono Bold rasterised at 18 px: 95 of its 96 glyphs are byte-identical to that rendering, cropped at the UV rectangles its own metrics declare. Liberation carries a 2010 and 2012 digitisation copyright, so it cannot be a 2005 Sega asset. Otherwise the fontTGA array in resources/font.h answers the read.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:683-695",
            "system": "sega-lindbergh"
          },
          {
            "description": "Lucida Console font metrics",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "LucidaConsole_12.abc",
            "note": "Read from the game directory only when DISABLE_BUILTIN_FONT is set. The built-in is one shared 128x256 atlas (fontTGA) and one metrics table (fontABC) answering all four font paths, so it substitutes for the Sega originals rather than reproducing either of them. The .abc is the metrics sidecar of the .tga atlas, named for the GDI ABC width triple. Header of 28 bytes: renderOffset, renderHeight, atlas width, atlas height, lineHeight, then firstSymbol and lastSymbol as uint16 and a uint32 symbol count; then one 24-byte record per glyph, four float32 giving the normalised UV rectangle followed by leftMargin, width, rightMargin and a pad as uint16. Field names come from JayFoxRox/lindbergh-tools Utilities/src/font.c, written against a real LucidaConsole_12.abc rather than against this substitute. The built-in itself is Liberation Mono Bold rasterised at 18 px: 95 of its 96 glyphs are byte-identical to that rendering, cropped at the UV rectangles its own metrics declare. Liberation carries a 2010 and 2012 digitisation copyright, so it cannot be a 2005 Sega asset. Otherwise the fontABC array in resources/font.h answers the read.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:697-709",
            "system": "sega-lindbergh"
          },
          {
            "description": "Lindbergh site configuration read by Sega's lxmaster boot supervisor",
            "name": "lindbergrc",
            "note": "An INI file, sections [develop], [terminal], [segaboot] and [keychip]. It is read by Sega's lxmaster boot supervisor, not by the games; the per-title <id>rc files that do ship in game dumps are xinit client scripts, a different thing. The fopen hook rewrites /root/lindbergrc to lindbergrc in the game directory, and the loader neither creates the file nor substitutes for it.",
            "required": false,
            "source_ref": "src/lindbergh/hook.c:650-653",
            "system": "sega-lindbergh",
            "unsourceable": "/root is a symlink to /usr/local/root, so the file sits on the same unpreserved hard-disk partition as segaboot. Nothing canonical exists to reproduce either: every key is a site or unit specific development setting, and a stock production machine ships no lindbergrc at all."
          },
          {
            "category": "game_data",
            "description": "SDL gamepad mappings added on top of the built-in table",
            "name": "gamecontrollerdb.txt",
            "note": "Loaded from the path given by -d or --controllerdb, passed through the LINDBERGH_CONTROLS_DB_PATH environment variable. The built-in mappings in gameControllerMappings.c load first and remain when no file is supplied.",
            "required": false,
            "source_ref": "src/lindbergh/lindbergh.c:415-430, src/lindbergh/lindbergh.c:478, src/lindbergh/sdlInput.c:209-217",
            "system": "sega-lindbergh"
          }
        ],
        "mode": "standalone",
        "notes": "Runs the original Sega Lindbergh game binaries on Linux, built and executed\nas 32-bit x86. The launcher picks the game ELF, exports\nLD_PRELOAD=lindbergh.so and an\nLD_LIBRARY_PATH covering the loader directory, the original directory, the\ngame directory and \".:lib:../lib\", then system()s the ELF\n(src/lindbergh/lindbergh.c:315-378, 874-929). Platforms invoke it as lindbergh-loader\n(Batocera package and generator, RetroBat, ES-DE find rule LINDBERGH-LOADER).\n\nThe Lindbergh hardware is emulated inside lindbergh.so with no external\nfirmware. Hooked open() and fopen() redirect /dev/lbb (baseboard), /dev/i2c/0\n(eeprom), /dev/ttyS0 and /dev/ttyS1 (drive, ride, motion boards and card\nreader), /proc/bus/pci/01/00.0 and /proc/bus/pci/00/1f.0 to /dev/zero and\nanswer from code (src/lindbergh/hook.c:43, 530-615, 641-853). The security board is DIP\nswitches and test/service lines computed in securityBoard.c:98-140, with no\nkeychip dump. eeprom.bin and sram.bin are created on first run and their\ncontents synthesised: eepromSettings.c builds every amSysDataRecord section\nfrom constants and recomputes the CRCs (eeprom.c:33-48, baseBoard.c:60-74,\neepromSettings.c:24-120). Card_01.crd and Card_02.crd are written from a\n56-byte header held in the binary (cardReader.c:227-247). lindbergh.ini and\ncontrols.ini are optional; both fall back to compiled-in defaults and can be\nemitted with --create (config.c:510-516, src/lindbergh/sdlInput.c:790-795).\n\nThe one hard external dependency is the NVIDIA Cg runtime. findLibCg() checks\nLIBCG_PATH from the ini, then /app/lib32/libCg2.so, $APP_IMG_ROOT/usr/lib32/\nlibCg2.so, ./libCg.so and $LINDBERGH_LOADER_CURRENT_DIR/libCg.so, and exits\nwhen none is present (src/lindbergh/shaderPatches.c:1028-1108). Cg 3.1 is a separate\nrequirement: the game ELFs link libCg.so and libCgGL.so, which upstream\nvendors as libs/Cg-3.1.zip and installs into the runtime library directory\n(scripts/appimage/make-appimage.sh,\nscripts/flatpak/com.github.lindberghloader.yml:181-189, 242-245). Batocera\ncopies per-game Cg variants into the ROM directory\n(lindberghGenerator.py:1027-1050).\n\nShaders come from the game dump, not from the loader. cacheModedShaderFiles()\nreads ../fs/shader and /data/Shader relative to the ELF, patches the Cg\nsource and serves the result back through the fopen, fread and ftell hooks\n(shaderCache.c:474-488, 555-678, src/lindbergh/hook.c:778-808, 1140-1212).\n\nBoot logos and console fonts were user-supplied until 2.0.1, which added\nbuilt-in copies compiled into lindbergh.so and served from\nresources/logo.h and resources/font.h. The originals are read only when\nDISABLE_BUILTIN_LOGOS or DISABLE_BUILTIN_FONT is set, from the game\ndirectory (src/lindbergh/hook.c:655-744, 874-926, fread hook at 1159-1181). Batocera\nexposes both switches as ORIGINAL LOGOS and ORIGINAL FONTS.\n\nCustom cursors and crosshairs load from arbitrary ini paths with no default\nname and no built-in image (crossHair.c:142-186, customCursor.c:26-33).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/lindbergh-loader/lindbergh-loader",
        "source_commit": "0af606d845b70339c335785c0eba68b47b78df3c",
        "systems": [
          "sega-lindbergh"
        ],
        "type": "standalone",
        "upstream": "https://github.com/lindbergh-loader/lindbergh-loader"
      }
    },
    {
      "id": "linkboy",
      "profile": {
        "author": "Pixel Respawn LLC",
        "core_classification": "embedded_hle",
        "core_version": "3.11.0",
        "cores": [
          "linkboy",
          "Linkboy",
          "LINKBOY"
        ],
        "display_name": "Nintendo - Game Boy / Color / Advance (Linkboy)",
        "emulator": "Linkboy",
        "files": [
          {
            "config_key": "use-bios",
            "description": "Game Boy Advance BIOS",
            "hle_fallback": true,
            "md5": "a860e8c0b6d573d191e4ec7db1b1e4f6",
            "name": "gba_bios.bin",
            "note": "Read into the 16 KB bios region when use-bios is on. Absent, mismatched in size or short, the region is filled with a replacement bios compiled into the library and zero padded.",
            "path": "firmware/gba_bios.bin",
            "required": false,
            "size": 16384,
            "source_ref": "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x109de8-0x109e64 (size argument 0x4000), loader 0x1c870-0x1ca10",
            "system": "nintendo-gba",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "config_key": "use-bios",
            "description": "Game Boy Color boot ROM",
            "hle_fallback": true,
            "md5": "dbfce9db9deaa2567f6a84fde55f9680",
            "name": "gbc_bios.bin",
            "note": "Read when use-bios is on and the machine is a Game Boy Color. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state.",
            "path": "firmware/gbc_bios.bin",
            "required": false,
            "size": 2304,
            "source_ref": "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f5a0-0x14f5b0 (size argument 0x900), 0x14f638-0x14f654, loader 0x1c870-0x1ca10",
            "system": "nintendo-gbc",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "config_key": "use-bios",
            "description": "Game Boy boot ROM",
            "hle_fallback": true,
            "md5": "32fbbd84168d3482956eb3c5051637f5",
            "name": "gb_bios.bin",
            "note": "Read when use-bios is on and the machine is a Game Boy. Without it the reset routine receives a false boot rom flag and the machine starts from its post boot state.",
            "path": "firmware/gb_bios.bin",
            "required": false,
            "size": 256,
            "source_ref": "Linkboy 3.11.0 cr.java:8, br.java:24-88, liblinkboy.so 0x14f58c-0x14f59c (size argument 0x100), 0x14f638-0x14f654, loader 0x1c870-0x1ca10",
            "system": "nintendo-gb",
            "validation": [
              "size",
              "md5"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Android package com.pixelrespawn.linkboy, closed source, free on Google Play with a\npaid unlock, reached by ES-DE through its LINKBOY find rule. Two Play distribution\nbuilds are read here, 3.11.0 (versionCode 86, minSdk 26, targetSdk 36, xapk sha256\n83b92276d28d71e491ebcbec3fa85cef42ef49d8ee0c6fd1bbe0045bc118f866) and 1.4.2\n(versionCode 12), both carrying the app signing certificate sha256\nfeb643cfdd9c49f58eb325fde3d869cefcf59e45dfadb8e540beca35a7b1c28e and the Play\ndistribution source stamp. Emulation lives in liblinkboy.so behind a JNI bridge;\naddresses below are armeabi-v7a of 3.11.0 and class names are those of its\nobfuscated dex.\n\nFour subsystems are declared: GBA, GBC, GB and SGB (ve0.java:16-21). An SGB\ncartridge runs in GB mode when prefer-sgb is off (wo0.java:62, c51.java:183-185).\n\nThe three firmware images are the only files the emulator reads that it does not\nwrite itself. One table holds their names, sizes and md5 sums (cr.java:8), and the\nfirmware screen reports each as present, mismatched or absent by comparing the\nsize and then the md5 of the whole file (br.java:24-88, yz1.java:39, hr1.java:110).\nSaves, cheats, thumbnails, keymaps and the ips, ups and bps patches picked up next\nto a ROM are written or supplied per game, not fixed files.\n\nAn image is read only while the use-bios preference is on, which is off until set\n(wo0.java:63, a75.java:165-173, c51.java:186,268, w41.java:243). The loader appends\nfirmware/ and the name to the directory handed to setDataDir, the app's external\nfiles directory (c51.java:69, hg3.java:32-38), and opens the result with fopen \"rb\".\nA file whose length is not exactly the expected size is closed and treated as\nabsent, as is a short read; on success the loader returns the crc32 of the bytes\n(liblinkboy.so 0x1c870-0x1ca10, crc32 at 0x1c4cc).\n\nA missing image stops nothing. The GBA path copies a replacement bios compiled into\nthe library over the 16 KB region and zero fills the remainder (0x109de8-0x109e64).\nThe GB and GBC path hands the reset routine a boot rom present flag, false when no\nimage was loaded, and the machine starts from its post boot state\n(0x14f534-0x14f5b8, 0x14f638-0x14f654).\n\nSave states record the crc32 of the image they were made under. Loading a state\nwhose value differs from the running machine re-reads the file and refuses the state\nwhen the crc32 still disagrees (0x10aa40-0x10aa98, 0x14fe00-0x14fe64).\n",
        "profiled_date": "2026-08-11",
        "source": "https://play.google.com/store/apps/details?id=com.pixelrespawn.linkboy",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc",
          "nintendo-gba",
          "nintendo-sgb"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "lowresnx",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v1.2",
        "cores": [
          "lowresnx"
        ],
        "display_name": "LowRes NX",
        "emulator": "LowRes NX",
        "files": [],
        "notes": "LowRes NX is a fantasy console simulating an imaginary 8/16-bit handheld.\nIt runs programs written in a custom BASIC dialect, loaded as .nx files.\nThe libretro port is maintained by the upstream author (timoinutilis) in\nthe same repository.\n\nretro_load_game() copies the .nx source code into memory\n(libretro_main.c:490-493) and compiles it with the built-in interpreter.\nThe boot intro is a string constant embedded in boot_intro.c:26. Default\ncharacters and charsets are compiled-in C arrays. The core never calls\nRETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. No BIOS, firmware, or external\nfiles required.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/timoinutilis/lowres-nx",
        "source_commit": "85c80181d26bb5c2147ebc76bfc48bce9f8d73a8",
        "systems": [
          "lowresnx"
        ],
        "type": "libretro",
        "upstream": "https://github.com/timoinutilis/lowres-nx"
      }
    },
    {
      "id": "lrps2",
      "profile": {
        "bios_directory": "pcsx2/bios/",
        "bios_mode": "agnostic",
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "lrps2",
          "pcsx2"
        ],
        "display_name": "Sony - PlayStation 2 (LRPS2)",
        "emulator": "LRPS2",
        "files": [
          {
            "description": "PS2 BIOS binary",
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "<bios>.bin",
            "note": "Scans pcsx2/bios/ for any file between 4 MB and 8 MB. Validates via romdir structure parsing (RESET + ROMVER entries). User selects BIOS via core option pcsx2_bios. Falls back to first valid BIOS found if configured BIOS is missing.\n",
            "path": "pcsx2/bios/",
            "required": true,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:231-254,267-322",
            "validation": [
              "size"
            ]
          },
          {
            "description": "DVD player ROM",
            "max_size": 4194304,
            "name": "<bios>.rom1",
            "note": "DVD player ROM. Tries <biospath>.rom1 (appended) then <biosbase>.rom1 (extension replaced). Silently skipped if not found.\n",
            "path": "pcsx2/bios/",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:190-211,314"
          },
          {
            "description": "Chinese ROM extension",
            "max_size": 524288,
            "name": "<bios>.rom2",
            "note": "Chinese region ROM extension. Same naming convention as rom1. Only present on Chinese region consoles.\n",
            "path": "pcsx2/bios/",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:190-211,315"
          },
          {
            "description": "NVRAM / EEPROM data",
            "hle_fallback": true,
            "name": "<bios>.nvm",
            "note": "Console EEPROM data (language, timezone, region, iLink ID, OSD settings). Path derived from BIOS path with extension replaced to .nvm. Auto-created with region-appropriate defaults if missing or invalid.\n",
            "path": "pcsx2/bios/",
            "required": false,
            "size": 1024,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:224-267"
          },
          {
            "description": "Mechacon version",
            "hle_fallback": true,
            "name": "<bios>.mec",
            "note": "Mechacon (disc drive controller) version as u32. Auto-created with default 0x00020603 if missing.\n",
            "path": "pcsx2/bios/",
            "required": false,
            "size": 4,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:255-266"
          },
          {
            "description": "game compatibility database",
            "name": "GameIndex.yaml",
            "note": "YAML database of per-game patches, settings overrides, and compatibility fixes. OSD warning shown if missing. Some games may not boot or have issues without it.\n",
            "path": "pcsx2/resources/GameIndex.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:47, pcsx2/GameDatabase.cpp:904"
          },
          {
            "description": "widescreen patches archive",
            "name": "cheats_ws.zip",
            "note": "ZIP archive of per-game widescreen (16:9) patches in pnach format. Only loaded when widescreen patches are enabled via core options. Fallback if no patches found in pcsx2/cheats_ws/ folder.\n",
            "path": "pcsx2/resources/cheats_ws.zip",
            "required": false,
            "source_ref": "pcsx2/VMManager.cpp:357-370"
          },
          {
            "description": "no-interlacing patches archive",
            "name": "cheats_ni.zip",
            "note": "ZIP archive of per-game no-interlacing patches in pnach format. Only loaded when no-interlacing patches are enabled via core options. Fallback if no patches found in pcsx2/cheats_ni/ folder.\n",
            "path": "pcsx2/resources/cheats_ni.zip",
            "required": false,
            "source_ref": "pcsx2/VMManager.cpp:392-405"
          }
        ],
        "notes": "Hard fork of PCSX2 (pre-Qt, 1.7-dev era) ported to libretro. x86_64 only.\nBIOS detection is filename-agnostic: scans pcsx2/bios/ for any file between 4-8 MB\nwith a valid romdir structure (RESET + ROMVER entries). No hash validation.\nCompanion files (.rom1, .rom2, .nvm, .mec) derive paths from the selected BIOS.\nDEV9 (network/HDD) and USB are stubbed in the libretro port.\nWidescreen patches are largely compiled into the core (libretro/patches.cpp).\n.info firmware_count=2 counts the bios folder and GameIndex.yaml.\n.info description mentions EROM.BIN but no EROM loading path exists in the code.\n",
        "profiled_date": "2026-03-25",
        "resources_directory": "pcsx2/resources/",
        "source": "https://github.com/libretro/ps2",
        "source_commit": "60c9c5793efc46ddca70736f30f639a1d22674b8",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "libretro",
        "upstream": "https://github.com/PCSX2/pcsx2"
      }
    },
    {
      "id": "lutro",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v1",
        "cores": [
          "lutro"
        ],
        "display_name": "Lua Engine (Lutro)",
        "emulator": "Lutro",
        "files": [],
        "notes": "Lutro is a Lua game framework for libretro implementing a subset of the\nLÖVE (Love2D) API. Runs .lutro/.lua games. Written for libretro, no\nstandalone upstream.\n\nretro_load_game() calls lutro_load(info->path) to load the game\ndirectory or archive (libretro.c:216). The core exposes\nlove.filesystem.getAppdataDirectory to games as the system_dir\n(filesystem.c:296) but does not load any files from it itself.\nNo BIOS, firmware, or system files required.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-lutro",
        "source_commit": "b84d0605e847e07657a44a1a11374a03a6e8a489",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-lutro"
      }
    },
    {
      "id": "lynx-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "lynx-emu",
          "Lynx.emu",
          "LYNX-EMU"
        ],
        "display_name": "Atari - Lynx (Lynx.emu)",
        "emulator": "Lynx.emu",
        "files": [
          {
            "description": "Atari Lynx boot ROM",
            "has_builtin": true,
            "hle_fallback": true,
            "name": "lynxboot.img",
            "note": "Picked by the user from any path, under any name ending in .img. The length is the only test and a file of another length aborts the load rather than falling back.",
            "required": false,
            "size": 512,
            "source_ref": "Lynx.emu/src/lynx/system.cpp:103 (firmware request), Lynx.emu/src/main/options.cc:150-154 (path comes from the picker), Lynx.emu/src/lynx/rom.cpp:75-95 (open and size test), Lynx.emu/src/main/EmuMenuViews.cc:32-50 (picker and extension filter), Lynx.emu/src/lynx/system.cpp:241-263 (stub boot ROM when absent)",
            "system": "atari-lynx",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Member of the EX Emulator series by Robert Broglia, which targets Android and\nLinux (README.md:3-4,12-13) and keeps iOS and Pandora build shortcuts in the\ntree (Lynx.emu/ios.mk, Lynx.emu/pandora.mk). Published as\ncom.explusalpha.LynxEmu (Lynx.emu/metadata/conf.mk:2,6,7) and reached by ES-DE\nthrough its LYNX-EMU find rule. Mednafen's Lynx module, itself derived from\nHandy by K. Wilkins, is vendored under Lynx.emu/src/lynx\n(Lynx.emu/metadata/conf.mk:8, Lynx.emu/src/main/AppMeta.cc:26) and driven by\nthe app's own video, audio and input layers. The vendored copy declares\nMednafen 1.32.0-UNSTABLE\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167); the upstream\ncomparisons below are against the 1.32.1 release. Content is read from .lnx,\n.lyx and .o files (Lynx.emu/metadata/conf.mk:5,\nLynx.emu/src/main/AppMeta.cc:30), and the module also takes a headerless image\nof 128, 256 or 512 KB, a filetype upstream rejects\n(Lynx.emu/src/lynx/system.cpp:90-91,112; mednafen src/lynx/system.cpp:86-93).\n\nThe boot ROM is the one file the user supplies and it carries no name of its\nown. The picker takes any name ending in .img and stores the chosen URI in\nbiosPath (Lynx.emu/src/main/EmuMenuViews.cc:32-50,\nLynx.emu/src/main/system.ccm:70, Lynx.emu/src/main/options.cc:33,55).\nMDFN_MakeFName returns that URI for MDFNMKF_FIRMWARE and drops the\nlynxboot.img name the module hands it, the name upstream resolves in its\nfirmware directory (Lynx.emu/src/main/options.cc:150-154,\nLynx.emu/src/lynx/system.cpp:103; mednafen src/lynx/system.cpp:101). CRom\nopens the file only when the path is not empty and throws unless it is exactly\n512 bytes (Lynx.emu/src/lynx/rom.cpp:75-95). Upstream has neither test: it\nopens whatever the firmware directory yields and takes 512 bytes or more\n(mednafen src/lynx/rom.cpp:55-74). A path that is set but cannot be opened, or\nthat is the wrong length, aborts the content load rather than falling back\n(EmuFramework/src/shared/mednafen-emuex/StreamImpl.cc:53-63,\nLynx.emu/src/lynx/system.cpp:337-342).\n\nWith no path mValid stays false (Lynx.emu/src/lynx/rom.h:77) and Reset builds a\nstub boot ROM in place: 512 bytes of 0x88, the reset vectors, and STA $FD97 at\n$FE00, $FE19, $FE4A and $FF80 (Lynx.emu/src/lynx/rom.cpp:55-72,\nLynx.emu/src/lynx/rom.h:50, Lynx.emu/src/lynx/system.cpp:241-263). A write to\nthat register from inside the ROM window dispatches to the four HLE routines\n(Lynx.emu/src/lynx/mikie.cpp:1033-1053), which clear RAM, pull the encrypted\nloader blocks off the cartridge shifter, run them through lynx_decrypt and jump\nto $0200 (Lynx.emu/src/lynx/system.cpp:150-208,\nLynx.emu/src/lynx/lynxdec.cpp:265). Neither the stub nor lynxdec.cpp exists\nupstream, where the constructor reaches the throw and Reset carries the\nhomebrew branch alone (mednafen src/lynx/system.cpp:169-177).\n\nNo hash is checked. The module holds no crc32 table, and its only md5 use is\nthe content hash that names saves and states (Lynx.emu/src/lynx/cart.cpp:\n245-264, Lynx.emu/src/lynx/system.cpp:313,319). The custom palette entry\nsurvives in the module table and reaches nothing: Lynx_SetPixelFormat passes an\nempty span where upstream Emulate passes espec->CustomPalette\n(Lynx.emu/src/lynx/system.cpp:352,555,583; mednafen src/lynx/system.cpp:\n267,298), the app calls MDFNGI::Load directly instead of going through the\nMednafen frontend that reads .pal files\n(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-145,\nLynx.emu/src/main/Main.cc:62-65), and the frame spec is value-initialised so\nCustomPalette stays null\n(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:153,\nEmuFramework/src/shared/mednafen/git.h:399). Cheats answer false against\nCheatInfo_Empty (Lynx.emu/src/main/options.cc:126-127,\nLynx.emu/src/lynx/system.cpp:586), no Cheats.cc is in the build\n(Lynx.emu/src/CMakeLists.txt:6-21), and the app declares no bundled content,\nthe framework definition defaulting to an empty span\n(EmuFramework/src/AppMeta.cc:40,\nEmuFramework/include/emuframework/AppMeta.hh:66-68).\n\nMDFN_MakeFName is called once and only for the firmware, so the module asks for\nno save file (Lynx.emu/src/lynx/system.cpp:103). What the app writes is .mca\nstates (Lynx.emu/src/main/system.ccm:86, Lynx.emu/src/main/Main.cc:47-54) and\nLynxEmu.config (Lynx.emu/src/main/AppMeta.cc:27). ui.png, gpOverlay.png and the\nshader sources are drawn by the framework from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-65,\nEmuFramework/src/AssetManager.cc:58-65,\nEmuFramework/src/VideoImageEffect.cc:164-172).\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "atari-lynx"
        ],
        "type": "standalone",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "m2000",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.9.4",
        "cores": [
          "m2000"
        ],
        "display_name": "Philips - P2000T (M2000)",
        "emulator": "M2000",
        "files": [],
        "notes": "M2000 is a Philips P2000T home computer emulator by Dion Olsthoorn,\nbased on the original emulator by Marcel de Kogel (1997). The libretro\nport is maintained by the same author in the same repository.\n\nAll ROMs are embedded in the binary via header files:\n  - monitor_rom (4096 bytes) and basic_nl_rom (16384 bytes) in m2000_roms.h\n  - SAA5050 teletext font in m2000_saa5050.h\n\nretro_init() calls InitP2000(monitor_rom, basic_nl_rom) which copies\nthe embedded arrays into ROM memory (P2000.c:282-311). LoadFont() uses\nthe embedded saa5050_fnt array (m2000_libretro.c:103-161). No system\ndirectory access. The standalone version loads P2000ROM.bin, BASIC.bin\nand Default.fnt from disk, but the libretro port embeds all three.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/p2000t/M2000",
        "source_commit": "fb0c1162de393608d339132d7200b1a4c3b95b72",
        "systems": [
          "philips-p2000t"
        ],
        "type": "libretro",
        "upstream": "https://github.com/p2000t/M2000"
      }
    },
    {
      "id": "m64plus-fz",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.0.335 (beta)",
        "cores": [
          "m64plus-fz",
          "M64PLUS-FZ",
          "org.mupen64plusae.v3.fzurita",
          "org.mupen64plusae.v3.fzurita.pro",
          "org.mupen64plusae.v3.fzurita.amazon"
        ],
        "display_name": "Nintendo - Nintendo 64 (M64Plus FZ)",
        "emulator": "M64Plus FZ",
        "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 with no extension filter 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:599-612,621-623, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:455-484, app/src/main/java/paulscode/android/mupen64plusae/persistent/GlobalPrefs.java:417,715, 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-212, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:221,455-484, 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-212, app/src/main/java/paulscode/android/mupen64plusae/jni/CoreInterface.java:221,455-484, mupen64plus-core/upstream/src/main/main.c:1080-1145",
            "system": "nintendo-64dd",
            "validation": [
              "signature"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Android fork of Mupen64Plus AE, whose paulscode.android.mupen64plusae\nnamespace it keeps, published under three package ids built from one code\nline: org.mupen64plusae.v3.fzurita, the paid .pro and the Amazon .amazon.\nThose flags gate advertising and Google Drive backup and nothing else\n(AppData.java:334-337,\nDataPrefsActivity.java:173-182, GamePrefsActivity.java:288-296), so the three\npackages want the same files. The repository default branch is a 2017 snapshot\nof the parent project; the application is built from fz-master, which carries\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 as a rom path (AndroidManifest.xml:83-96,\nActivityHelper.java:191-198).\n\nCartridge boot needs no boot ROM. The PIF boot sequence is simulated\n(mupen64plus-core device/pif/bootrom_hle.c:48, entered from\ndevice/r4300/interrupt.c:445,496 and main/main.c:1875) and the CIC-NUS-6105\nchallenge is answered by an algorithm rather than a stored table\n(device/pif/n64_cic_nus_6105.c:93). Nothing fills the PIF ROM window from a\nfile.\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\n(CoreService.java:599-612, CoreInterface.java:142,229,455-484). The core\noffers a callback that would name the image per disk region and the front end\nleaves it null (CoreInterface.java:221, main/main.c:1082-1086), so whichever\nimage sits in the slot is the one loaded. A disk is recognised only when its\nsystem data header matches and carries one of three region words, 0xe848d316\nfor Japan, 0x2263ee56 for the United States and 0x00000000 for development\n(RomHeader.java:180-212); 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:621-623), 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:620,625-630). Disk content inside a .zip or .7z is unpacked to\nthe working directory first (CoreInterface.java:486-518).\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:558-568, CoreInterface.java:173-188,219-220,416-453). The core\nrejects a cart under 32 KiB and an unknown type byte at 0x147\n(device/gb/gb_cart.c:994-1008) and fixes no name, size or hash, so neither the\ncart nor its save carries an entry here.\n\nSeven data files ship inside the package and are unpacked on first start into\nthe private files directory, which is also what the core is told is\nSharedDataPath (ExtractAssetsOrCleanupTask.java:63-73, SplashActivity.java:402,\nAppData.java:411-423, NativeConfigFiles.java:112). mupen64plus.ini is the ROM\ndatabase, read by the core (main/rom.c:473-490 from api/frontend.c:106) and by\nthe gallery (SplashActivity.java:447, ScanRomsFragment.java:195,\nGamePrefsActivity.java:244). mupencheat.default is copied over\nProfiles/customCheats.txt into mupencheat.txt and parsed in Java\n(SplashActivity.java:443, CheatUtils.java:88-93, GamePrefsActivity.java:618);\nthe core's own cheat.c opens no file. font.ttf is reached by GLideN64 only\nafter /system/fonts/DroidSans.ttf fails, which it does on current Android\n(TextDrawer.cpp:201-233,235-241, NativeConfigFiles.java:292); the core's OSD,\nthe other upstream reader of that name, is absent from the Android source list\n(mupen64plus-core.mk:24-101). RiceVideoLinux.ini holds rice's per ROM settings\n(rice Config.cpp:38,933-951), Glide64mk2.ini glide64mk2's\n(glide64mk2 Main.cpp:1581-1590), and gln64.conf with gln64rom.conf gln64's\nglobal and per ROM settings (gln64 Config.cpp:245-252,296-300).\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:416-417,\nConfigFile.java:224-230, NativeConfigFiles.java:224). GLideN64 also asks the\ncore for GLideN64.custom.ini in SharedDataPath, where it was never placed, so\nthat native lookup finds nothing (Config_mupenplus.cpp:325-341). The\ntouchscreen skins, the shader files and the controller, touchscreen and\nemulation profile templates are used from the package the same way\n(AppData.java:412,421-423).\n\nOptional content with no canonical artifact: hi-res texture packs under\nCoreConfig/UserData/mupen64plus/hires_texture, imported from a user archive\n(GlobalPrefs.java:472, NativeConfigFiles.java:268, ExtractTexturesFragment.java),\nthe <ROM>_HIRESTEXTURES.htc and .hts caches the plugin builds from them, read\nback for their alpha flag (NativeConfigFiles.java:364-371), customCheats.txt,\ncustom touchscreen skins and cover art (GlobalPrefs.java:484-490), and\nalp_screen.vert with alp_screen.frag, which angrylion-plus opens as working\ndirectory relative paths before falling back to its embedded shaders\n(angrylion-plus output/vdac.c:119-165,245-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,\nscreenshots, the texture dump and cache directories, the GLideN64 shader cache\nand romInfoCache.cfg (GlobalPrefs.java:466-484,\nNativeConfigFiles.java:109-112,276,289).\n\nOne file 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); the\nbuild defines that macro (mupen64plus-rsp-cxd4.mk:8), so the variant compiled\ntakes its settings from the core config API and ignores the filename it is\nhanded (mupen64plus-rsp-cxd4 module.c:83-93,239,637-659).\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/fzurita/mupen64plus-ae",
        "source_branch": "fz-master",
        "source_commit": "f3c381bcc58e4adce897aba323193d3f407e30e3",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "standalone",
        "upstream": "https://github.com/fzurita/mupen64plus-ae"
      }
    },
    {
      "id": "mame",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.289",
        "cores": [
          "mame",
          "imame4all"
        ],
        "display_name": "Arcade (MAME)",
        "emulator": "MAME",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "03cc9f6a",
                "name": "sp-45.sp1",
                "sha1": "cdf1f49e3ff2bac528c21ed28449cf35b7957dc1",
                "size": 524288
              },
              {
                "crc32": "91b64be3",
                "name": "sp-s3.sp1",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "name": "sp-u2.sp1",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "62f021f4",
                "name": "sp1-u2",
                "sha1": "62d372269e1b3161c64ae21123655a0a22ffd1bb",
                "size": 131072
              },
              {
                "crc32": "1179a30f",
                "name": "sp1-u4.bin",
                "sha1": "866817f47aa84d903d0b819d61f6ef356893d16a",
                "size": 131072
              },
              {
                "crc32": "2025b7a2",
                "name": "sp1-u3.bin",
                "sha1": "73d774746196f377111cd7aa051cc8bb5dd948b3",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "name": "sp-j2.sp1",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "dff6d41f",
                "name": "japan-j3.bin",
                "sha1": "e92910e20092577a4523a6b39d578a71d4de7085",
                "size": 131072
              },
              {
                "crc32": "fbc6d469",
                "name": "sp1-j3.bin",
                "sha1": "46b2b409b5b68869e367b40c846373623edb632a",
                "size": 131072
              },
              {
                "crc32": "486cb450",
                "name": "sp-j3.sp1",
                "sha1": "52c21ea817928904b80745a8c8d15cbad61e1dc1",
                "size": 524288
              },
              {
                "crc32": "162f0ebe",
                "name": "sp-1v1_3db8c.bin",
                "sha1": "fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271",
                "size": 131072
              },
              {
                "crc32": "a7aab458",
                "name": "uni-bios_4_0.rom",
                "sha1": "938a0bda7d9a357240718c2cec319878d36b8f72",
                "size": 131072
              },
              {
                "crc32": "24858466",
                "name": "uni-bios_3_3.rom",
                "sha1": "0ad92efb0c2338426635e0159d1f60b4473d0785",
                "size": 131072
              },
              {
                "crc32": "a4e8b9b3",
                "name": "uni-bios_3_2.rom",
                "sha1": "c92f18c3f1edda543d264ecd0ea915240e7c8258",
                "size": 131072
              },
              {
                "crc32": "0c58093f",
                "name": "uni-bios_3_1.rom",
                "sha1": "29329a3448c2505e1ff45ffa75e61e9693165153",
                "size": 131072
              },
              {
                "crc32": "a97c89a9",
                "name": "uni-bios_3_0.rom",
                "sha1": "97a5eff3b119062f10e31ad6f04fe4b90d366e7f",
                "size": 131072
              },
              {
                "crc32": "27664eb5",
                "name": "uni-bios_2_3.rom",
                "sha1": "5b02900a3ccf3df168bdcfc98458136fd2b92ac0",
                "size": 131072
              },
              {
                "crc32": "601720ae",
                "name": "uni-bios_2_3o.rom",
                "sha1": "1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9",
                "size": 131072
              },
              {
                "crc32": "2d50996a",
                "name": "uni-bios_2_2.rom",
                "sha1": "5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c",
                "size": 131072
              },
              {
                "crc32": "8dabf76b",
                "name": "uni-bios_2_1.rom",
                "sha1": "c23732c4491d966cf0373c65c83c7a4e88f0082c",
                "size": 131072
              },
              {
                "crc32": "0c12c2ad",
                "name": "uni-bios_2_0.rom",
                "sha1": "37bcd4d30f3892078b46841d895a6eff16dc921e",
                "size": 131072
              },
              {
                "crc32": "b24b44a0",
                "name": "uni-bios_1_3.rom",
                "sha1": "eca8851d30557b97c309a0d9f4a9d20e5b14af4e",
                "size": 131072
              },
              {
                "crc32": "4fa698e9",
                "name": "uni-bios_1_2.rom",
                "sha1": "682e13ec1c42beaa2d04473967840c88fd52c75a",
                "size": 131072
              },
              {
                "crc32": "e19d3ce9",
                "name": "uni-bios_1_2o.rom",
                "sha1": "af88ef837f44a3af2d7144bb46a37c8512b67770",
                "size": 131072
              },
              {
                "crc32": "5dda0d84",
                "name": "uni-bios_1_1.rom",
                "sha1": "4153d533c02926a2577e49c32657214781ff29b7",
                "size": 131072
              },
              {
                "crc32": "0ce453a0",
                "name": "uni-bios_1_0.rom",
                "sha1": "3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "5a86cff2",
                "name": "000-lo.lo",
                "sha1": "5992277debadeb64d1c1c64b0a92d9293eaf7e4a",
                "size": 131072
              },
              {
                "crc32": "c2ea0cfd",
                "name": "sfix.sfix",
                "sha1": "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3",
                "size": 131072
              }
            ],
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/snk/neogeo.cpp:2428",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "78c15fa2",
                "name": "pgm_p02s.u20",
                "sha1": "885a6558e022602cc6f482ac9667ba9f61e75092",
                "size": 131072
              },
              {
                "crc32": "e42b166e",
                "name": "pgm_p01s.u20",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/igs/pgm.cpp:5545",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.ic27",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "4599ad13",
                "name": "epr-21576c.ic27",
                "sha1": "7e730e9452a792d76f210c33a955d385538682c7",
                "size": 2097152
              },
              {
                "crc32": "755a6e07",
                "name": "epr-21576b.ic27",
                "sha1": "7e8b8ccfc063144d89668e7224dcd8a36c54f3b3",
                "size": 2097152
              },
              {
                "crc32": "cedfe439",
                "name": "epr-21576a.ic27",
                "sha1": "f27798bf3d890863ef0c1d9dcb4e7782249dca27",
                "size": 2097152
              },
              {
                "crc32": "9dad3495",
                "name": "epr-21576.ic27",
                "sha1": "5fb66f9a2b68d120f059c72758e65d34f461044a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "628a27fd",
                "name": "epr-21578f.ic27",
                "sha1": "dae7add616b1a2478f00608823e88c3b82a0e78f",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.ic27",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "6c9aad83",
                "name": "epr-21578a.ic27",
                "sha1": "555918de76d8dbee2a97d8a95297ef694b3e803f",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.ic27",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "969dc491",
                "name": "epr-21577a.ic27",
                "sha1": "581d1eae328b87b67508a7586ffc60cee256f70f",
                "size": 2097152
              },
              {
                "crc32": "33513691",
                "name": "epr-21579d.ic27",
                "sha1": "b1d8c7c516e1471a788fcf7a02a794ad2f05aeeb",
                "size": 2097152
              },
              {
                "crc32": "71f9c918",
                "name": "epr-21579.ic27",
                "sha1": "d15af8b947f41eea7c203b565cd403e3f37a2017",
                "size": 2097152
              },
              {
                "crc32": "7a50fab9",
                "name": "boot_rom_64b8.ic606",
                "sha1": "ef79f448e0bf735d1264ad4f051d24178822110f",
                "size": 524288
              },
              {
                "crc32": "de7cfdb0",
                "name": "develop110.ic27",
                "sha1": "da16800edc4d49f70481c124d487f544c2fa8ce7",
                "size": 2097152
              },
              {
                "crc32": "309a196a",
                "name": "develop.ic27",
                "sha1": "409b50371feb648f10efd6b7ac420bf08d9a3b5a",
                "size": 2097152
              },
              {
                "crc32": "58e17c23",
                "name": "zukinver0930.ic25",
                "sha1": "19330f906accf1b859f56bbcedc2edff73747599",
                "size": 2097152
              },
              {
                "crc32": "cce01f1f",
                "name": "epr-21576h_multi.ic27",
                "sha1": "cca17119ad13e3a4ef7cb6902a37b65d6a844aee",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "d3d57af8",
                "name": "epr-21336a.ic27",
                "sha1": "0eb72c2a20ad8b86d442b77760eab5e89521d469",
                "size": 2097152
              },
              {
                "crc32": "5b28f868",
                "name": "naomi_boot_2491.ic27",
                "sha1": "d101f58c69d9835e87a969688e43dc9b699b89d0",
                "size": 2097152
              },
              {
                "crc32": "46dbe90f",
                "name": "epr-21580a.ic27",
                "sha1": "822b2ea8e254ea3ce66f0ea67e80a8c7e1125ec9",
                "size": 2097152
              },
              {
                "crc32": "7c9fea46",
                "name": "315-6188.ic31",
                "sha1": "f77c07ae65dfed18c1c4c632c8945be21d02ddaf",
                "size": 8244
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10917",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "297ea6ed",
                "name": "epr-23605c.ic27",
                "sha1": "cfbfe57c80e6ee86a101fa83aec0a01e00c0f42a",
                "size": 2097152
              },
              {
                "crc32": "3a3242d4",
                "name": "epr-23605b.ic27",
                "sha1": "aaca4df51ef91d926f8191d372f3dfe1d20d9484",
                "size": 2097152
              },
              {
                "crc32": "7bc3fc2d",
                "name": "epr-23605a.ic27",
                "sha1": "a4a9531a7c66ff30046908cf71f6c7b6fb59c392",
                "size": 2097152
              },
              {
                "crc32": "5731e446",
                "name": "epr-23605.ic27",
                "sha1": "787b0844fc408cf124c12405c095c59948709ea6",
                "size": 2097152
              },
              {
                "crc32": "6ef1dd8e",
                "name": "epr-23608c.ic27",
                "sha1": "25ef957ec1c58fdaff5e89102002bca6c38832c5",
                "size": 2097152
              },
              {
                "crc32": "a554b1e3",
                "name": "epr-23608b.ic27",
                "sha1": "343b727a3619d1c75a9b6d4cc156a9050447f155",
                "size": 2097152
              },
              {
                "crc32": "e8f884d1",
                "name": "epr-23608a.ic27",
                "sha1": "28f4de747bb3cf860b9ebf897322fbc5d7c1e156",
                "size": 2097152
              },
              {
                "crc32": "929cc3a6",
                "name": "epr-23608.ic27",
                "sha1": "47d00c818de23f733a4a33b1bbc72eb8aa729246",
                "size": 2097152
              },
              {
                "crc32": "750e254b",
                "name": "epr-23607c.ic27",
                "sha1": "81d0b1a076c274c6bd7c53b65e7b80e14fe039e1",
                "size": 2097152
              },
              {
                "crc32": "f308c5e9",
                "name": "epr-23607b.ic27",
                "sha1": "5470ab1cee6afecbd8ca8cf40f8fbe4ec2cb1471",
                "size": 2097152
              },
              {
                "crc32": "2b55add2",
                "name": "epr-23607.ic27",
                "sha1": "547de5f97d3183c8cd069c4fa3c09f13d8b637d9",
                "size": 2097152
              },
              {
                "crc32": "99e3751f",
                "name": "epr-23609b.ic27",
                "sha1": "8a244f75595c49d2a37a42ab96b6bab35163ca0e",
                "size": 2097152
              },
              {
                "crc32": "de8e1267",
                "name": "epr-23610b.ic27",
                "sha1": "0b3a36446c308fcbfe3647df45c848091e8797f1",
                "size": 2097152
              },
              {
                "crc32": "353fdbcd",
                "name": "epr-23605c_multi.ic27",
                "sha1": "a8b7dce572b74e02e65cb949b2c366c87625157f",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10922",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10923",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "719b2b0b",
                "name": "bios0.ic23",
                "sha1": "b4c1a26bc8906d5275eb28c701dff2b9365bcdfa",
                "size": 131072
              },
              {
                "crc32": "d3e80a9f",
                "name": "bios1.ic23",
                "sha1": "33024f9d51c04884c2b44ce146f340e7a857b959",
                "size": 131072
              },
              {
                "crc32": "82a105f0",
                "name": "fpr-24363.ic48",
                "sha1": "5128fe2ddcced77332bdcab691c09958051fa564",
                "size": 131072
              }
            ],
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/dc_atomiswave.cpp:1519",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "065f8500",
                "name": "epr-21331.ic27",
                "sha1": "49a3881e8d76f952ef5e887200d77b4a415d47fe",
                "size": 2097152
              },
              {
                "crc32": "9e3bfa1b",
                "name": "epr-21330.ic27",
                "sha1": "b539d38c767b0551b8e7956c1ff795de8bbe2fbc",
                "size": 2097152
              },
              {
                "crc32": "d99e5b9b",
                "name": "epr-21329.ic27",
                "sha1": "453ffb41b6197cac6d12e7814bb1d7281ccf1659",
                "size": 2097152
              },
              {
                "crc32": "bd6ce0ec",
                "name": "epr-21332.ic27",
                "sha1": "3d1ce5cb6978afe57967d8b53bc969259dd64749",
                "size": 2097152
              },
              {
                "crc32": "ea74e967",
                "name": "hotd2biosproto.ic27",
                "sha1": "e4d037480eb6555d335a8ab9cd6c56122335586d",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "hod2bios.zip",
            "note": "game-specific BIOS for House of the Dead 2",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10918"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "12ed7c66",
                "name": "epr-21864.ic27",
                "sha1": "046be66e92eae766f3e05594aa837fc8888534ed",
                "size": 2097152
              },
              {
                "crc32": "0615a4d1",
                "name": "epr-21863.ic27",
                "sha1": "2c6986580b84278af75f396229fdd587bebc1768",
                "size": 2097152
              },
              {
                "crc32": "1f630716",
                "name": "epr-21862.ic27",
                "sha1": "8d157809770467c3e7618c6299f3b96b5f10518c",
                "size": 2097152
              },
              {
                "crc32": "05128861",
                "name": "epr-21864p.ic27",
                "sha1": "5bdb320d84015b8429527a8eb4524958031862aa",
                "size": 2097152
              },
              {
                "crc32": "f0cd4aaa",
                "name": "epr-21862p.ic27",
                "sha1": "9a9157992bf7a104c096efcdb8b02ceece186cbb",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355dlx.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10919"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62483677",
                "name": "epr-22851.ic27",
                "sha1": "3e3bcacf5f972c376b569f45307ee7fd0b5031b7",
                "size": 2097152
              },
              {
                "crc32": "28aa539d",
                "name": "epr-22850.ic27",
                "sha1": "14485368656af80504b212da620179c49f84c1a2",
                "size": 2097152
              },
              {
                "crc32": "121e009c",
                "name": "epr-22849.ic27",
                "sha1": "3beb91f660e60590491b209b6be8584b05a90548",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355bios.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10920"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a77c6b1c",
                "name": "epr-21802.ic27",
                "sha1": "bd50a6bb8fa9bac121b076e21ea048a83a240a48",
                "size": 2097152
              },
              {
                "crc32": "a21bef24",
                "name": "epr-21801.ic27",
                "sha1": "c6c6ed09772b63a9a84ef0678fc1b7527484038a",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "airlbios.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10921"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f688ae60",
                "name": "epr-23603.ic8",
                "sha1": "1a31b6b1a4257fcb6ac6a91e67dd798f91505f48",
                "size": 524288
              },
              {
                "crc32": "59ed40f4",
                "name": "epr-20091.ic8",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "d0e0889d",
                "name": "epr-19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "name": "epr-17951a.ic8",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "3e23c81f",
                "name": "epr-17740a.ic8",
                "sha1": "f9b282fd27693e9891843597b2e1823da3d23c7b",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "name": "epr-17740.ic8",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "name": "epr-17954a.ic8",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "name": "epr-17952a.ic8",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "4166c663",
                "name": "epr-17741a.ic8",
                "sha1": "cc41d30de06160083d77e0dc5d69e61fec7fdcb5",
                "size": 524288
              },
              {
                "crc32": "e09d1f60",
                "name": "epr-19854.ic8",
                "sha1": "b55cdcb45b2a5b0b35e352cf7625f0bd659084df",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "name": "epr-17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "02daf123",
                "name": "epr-17742a.ic8",
                "sha1": "23185beb1ce9c09b8719e57d1adb7b28c8141fd5",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              },
              {
                "crc32": "15432ae2",
                "name": "stvbios.nv",
                "sha1": "7d9364d546f3d3f839ec36be148076f8d26a65a6",
                "size": 128
              }
            ],
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/stv.cpp:4068",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "10dd9b76",
                "description": "6.0.0010 alternate version",
                "name": "6.0.0010a.bin",
                "sha1": "1fdf1f921bc395846a7c3180fbdbc4ca287a9670",
                "size": 1048576
              },
              {
                "crc32": "5ffdfbf8",
                "description": "6.0.0009",
                "name": "6.0.0009.bin",
                "sha1": "605bc4967b749b4e6d13fc2ebb845ba956a259a7",
                "size": 1048576
              },
              {
                "crc32": "ea2bf888",
                "description": "6.0.0010",
                "name": "6.0.0010.bin",
                "sha1": "c9c5b6f0d4f4f36620939b15dd2f128a74347e37",
                "size": 1048576
              },
              {
                "crc32": "c3b021a4",
                "name": "fpr-24370b.ic6",
                "sha1": "1b6938a50fe0e4ae813864649eb103838c399ac0",
                "size": 4194304
              },
              {
                "crc32": "f78d14d7",
                "name": "vid_bios.u504",
                "sha1": "f129787e487984edd23bf344f2e9500c85052275",
                "size": 65536
              }
            ],
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/lindbergh.cpp:639",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ca7df0de",
                "name": "epr-24236a.ic50",
                "sha1": "504c74d5fc96c53ef9f7753e9e37fb8b39cb628c",
                "size": 2097152
              },
              {
                "crc32": "25f2ef00",
                "name": "epr-24328.ic50",
                "sha1": "e58dec9f171e52b3ded213b3fcd9a0de8a438076",
                "size": 2097152
              },
              {
                "crc32": "03ec3805",
                "name": "epr-24328a.ic50",
                "sha1": "a8fbaea826ca257be0b2b86952f247254929e046",
                "size": 2097152
              },
              {
                "crc32": "e1e3c009",
                "name": "mb_serial.ic57",
                "sha1": "66bc636c527389c3338f631d78c788b4bd4e93be",
                "size": 128
              },
              {
                "crc32": "77cc5a6c",
                "name": "net_eeprom.ic74s",
                "sha1": "cbfba546256b70bce6c6fd0030d7e2e410a25526",
                "size": 512
              },
              {
                "crc32": "a738ea1c",
                "name": "net_firm_119.ic72",
                "sha1": "d25187a973a7e166e70334f964363adf2be87257",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24208a.ic72",
                "sha1": "3c32ddfb3c40be66b9fb2ba35fbfd5b534bb3da0",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24329.ic72",
                "sha1": "d0d062a4089a2d3404df45eb015faaf7eee9b8c2",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407.ic72",
                "sha1": "fbcc3d119b47a6da4d194e3fe4a98126c7049edf",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407_123.ic72",
                "sha1": "3f5a2fb03bbb1bd9af9fe32ad76a224c97aa9b7a",
                "size": 2097152
              },
              {
                "crc32": "4186d7ab",
                "name": "mb_eeprom_us.ic54s",
                "sha1": "fc23da69a511a7643b6a066161bcfc3cdeeacf04",
                "size": 128
              },
              {
                "crc32": "947ddfad",
                "name": "mb_eeprom_exp.ic54s",
                "sha1": "832a3db097af680d1d0eb9451b4650565f0cf8c7",
                "size": 128
              }
            ],
            "name": "segasp.zip",
            "required": true,
            "source_ref": "src/mame/sega/segasp.cpp:1273"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2aa906a7",
                "name": "epr-23400a.ic94",
                "sha1": "098c9909b123ed6c338ac874f2ee90e3b2da4c02",
                "size": 2097152
              },
              {
                "crc32": "3d557104",
                "name": "epr-23400.ic94",
                "sha1": "d39879f5a1acbd54ad8ee4fbd412f870c9ff4aa5",
                "size": 2097152
              },
              {
                "crc32": "d96298b6",
                "name": "epr-21904.ic94",
                "sha1": "d10d837bc7d68eb7125c34beffe21a91305627b0",
                "size": 2097152
              },
              {
                "crc32": "7cbf2fb6",
                "name": "prot_bot.ic94",
                "sha1": "7384e3c9314add7d61f93c9edd9fb7788d08f423",
                "size": 2097152
              },
              {
                "crc32": "737dc714",
                "name": "93c46.ic115",
                "sha1": "852a90319ac2e787b94a4fc769424b79afbaaf9d",
                "size": 128
              },
              {
                "bad_dump": true,
                "crc32": "194c6c18",
                "name": "x76f100.ic85",
                "sha1": "6c2de7dae32bef855d9bc556568c3a170f54caa5",
                "size": 132
              }
            ],
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/sega/hikaru.cpp:1482",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "66232714",
                "name": "chihiro_xbox_bios.bin",
                "sha1": "b700b0041af8f84835e45d1d1250247bf7077188",
                "size": 524288
              },
              {
                "crc32": "13034372",
                "name": "fpr-23887_29lv160te.ic4",
                "sha1": "77197fba2781ed1d81402c48bd743adb26d3161a",
                "size": 2097152
              },
              {
                "crc32": "a4fcab0b",
                "name": "fpr21042_m29w160et.bin",
                "sha1": "a13cf9c5cdfe8605d82150b7573652f419b30197",
                "size": 2097152
              },
              {
                "crc32": "488624ea",
                "name": "315-6351a_epc1pc8.ic2",
                "sha1": "1a607337a186415ae90b48934ce2aae81639d4de",
                "size": 130817
              },
              {
                "crc32": "cfc5e06f",
                "name": "ic10_g24lc64.bin",
                "sha1": "3ababd4334d8d57abb22dd98bd2d347df39648d9",
                "size": 8192
              },
              {
                "crc32": "8dc8374e",
                "name": "ic11_24lc024.bin",
                "sha1": "cc03a0650bfac4bf6cb66e414bbef121cba53efe",
                "size": 128
              },
              {
                "crc32": "7742ab62",
                "name": "pc20_g24lc64.bin",
                "sha1": "82dad6e2a75bab4a4840dc6939462f1fb9b95101",
                "size": 8192
              }
            ],
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/sega/chihiro.cpp:2614",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d1883221",
                "name": "triforce_bootrom.bin",
                "sha1": "c3cb7227e4dbc2af861e76d00cb59726105a2e4c",
                "size": 2097152
              }
            ],
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/sega/triforce.cpp:1310",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ea8901d9",
                "name": "epr10894a.20",
                "sha1": "43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c",
                "size": 16384
              }
            ],
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/sega/shtzone.cpp:376"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c3c74dc5",
                "description": "IPL Ver. 5.0",
                "name": "vm1211l01.u2",
                "sha1": "07352e6dba7514214e778ba39e1ca773e4698858",
                "size": 524288
              },
              {
                "crc32": "c8c6d25f",
                "description": "IPL Ver. 4.0",
                "name": "mt201l04.u012",
                "sha1": "5be39fa72b65f2e455ccc146dbab58d24ab46505",
                "size": 524288
              },
              {
                "crc32": "21b2ccbd",
                "description": "IPL Ver. 1.0",
                "name": "vm1201l01.u012",
                "sha1": "c3ceea196e5c1c6a9e03cf3a22e9f25f0099a38e",
                "size": 524288
              }
            ],
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/sigma/sammymdl.cpp:1025"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              },
              {
                "bad_dump": true,
                "crc32": "d8289e31",
                "name": "315-5661.ic7",
                "sha1": "a0e9134d9e8043a3660a2ce122cfd5d7f76773b9",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "fd5c4fb3",
                "name": "315-5653.ic56",
                "sha1": "6b2ba657836f3031d77602526416200e31d41a6e",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "55c6cddb",
                "name": "315-5651.ic8",
                "sha1": "e1a968305ca7ea17e9021b31506ca087b84a8ab1",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "825ea316",
                "name": "315-5349a.ic54",
                "sha1": "f49edb6a3f9349330f7ff525ef60517ed276a663",
                "size": 260
              },
              {
                "bad_dump": true,
                "crc32": "4a2d27d1",
                "name": "315-5655.ic34",
                "sha1": "ba79183e4b522d1b57a46a56fc7d9b85de24df36",
                "size": 260
              }
            ],
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/sega/megaplay.cpp:1018",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "description": "Ver 1",
                "name": "epr-12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              },
              {
                "crc32": "07c3f423",
                "description": "Ver 0 Rev A",
                "name": "epr-12263a.20",
                "sha1": "50c28bbc2d4349c820d988ae3f20aae3f808545f",
                "size": 32768
              },
              {
                "crc32": "ca26c87a",
                "description": "Ver 0 Rev B",
                "name": "epr-12263b.20",
                "sha1": "987a18bede6e54cd73c4434426eb6c302a37cdc5",
                "size": 32768
              },
              {
                "crc32": "884e4aa5",
                "description": "Ver 0 Rev B (alt?)",
                "name": "epr-12604a.20",
                "sha1": "c9008c431a937c084fb475273093ca0b434b5f47",
                "size": 32768
              }
            ],
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/sega/megatech.cpp:1430",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2292585c",
                "name": "ism2006v00.u1",
                "sha1": "97ba0e0f0be832a5114d95151e519bc027f6675b",
                "size": 131072
              }
            ],
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/sega/segas16b_isgsm.cpp:608"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b19f490",
                "name": "system_y2_m25p40.u801",
                "sha1": "b6a0482926d02fb5bb9a2c05ffdba6a2347fe658",
                "size": 524288
              }
            ],
            "name": "systemy2.zip",
            "required": true,
            "source_ref": "src/mame/sega/y2.cpp:141"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3d33ac34",
                "name": "v0a-.7e",
                "sha1": "909d59e7a993affd10224402b4370e82a5f5545c",
                "size": 4096
              },
              {
                "crc32": "23d929b7",
                "name": "v0b-.7e",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "9f505709",
                "name": "v0c-.7e",
                "sha1": "a9c661ba5a0d3fa5e935fb9c10fa63e2d9809981",
                "size": 4096
              },
              {
                "crc32": "1e0c22b1",
                "name": "v0d-.7e",
                "sha1": "5fec8fef500bbebc13d0173406afc55235d3affb",
                "size": 4096
              },
              {
                "crc32": "2541e34b",
                "name": "dsp-3_p0-a.m9",
                "sha1": "4f983513dbae1350c83a433dea77a4465748b9c6",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b67a91d9",
                "name": "dsp-3_p0-b.m9",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "c76c4057",
                "name": "dsp-3_p0-c.m9",
                "sha1": "4093d4ac44feff595e34f361ed1ed84113c9225e",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "4b7d72bc",
                "name": "dsp-3_p0-d.m9",
                "sha1": "a70c5ba88404dafee2cc717071c4a249f67ab645",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "a6df18fd",
                "name": "cassmcu.1c",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              }
            ],
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/dataeast/decocass.cpp:2131",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "name": "pch1-c__8t_e-2.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "123ffa37",
                "name": "pch1-c_8te.8t",
                "sha1": "3bef754a5a85a8498bb6222ddf5cb9021f264db5",
                "size": 16384
              },
              {
                "crc32": "0be8ceb4",
                "name": "pck1-c_fix.8t",
                "sha1": "45b127a537370226e6b30be2b5a92ad05673ca7f",
                "size": 16384
              },
              {
                "crc32": "88a8f87e",
                "name": "pch1-c__8t_e-1.8t",
                "sha1": "d1d7ffe68d2e7aa2faf8ad41a7ec8421265ede42",
                "size": 16384
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "83ebc7a3",
                "name": "pch1-c_8m.8m",
                "sha1": "a7c607138f4f9b96ab5d3a82c47895f77672e296",
                "size": 8192
              },
              {
                "crc32": "90e1b80c",
                "name": "pch1-c_8p-8p",
                "sha1": "c4f4b135b2a11743518aaa0554c365b4a8cf299a",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "name": "pch1-c-6f.82s129an.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "name": "pch1-c-6e.82s129an.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "name": "pch1-c-6d.82s129an.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              },
              {
                "crc32": "48de65dc",
                "name": "rp2c0x.pal",
                "sha1": "d10acafc8da9ff479c270ec01180cca61efe62f5",
                "size": 192
              }
            ],
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/playch10.cpp:2981",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e06cb58f",
                "description": "Nintendo Super System (Single Cart BIOS)",
                "name": "nss-ic14.02.ic14",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              },
              {
                "crc32": "a8e202b3",
                "description": "Nintendo Super System (Multi Cart BIOS)",
                "name": "nss-c.ic14",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "ac385b53",
                "description": "Nintendo Super System (Single Cart BIOS v3, hack?)",
                "name": "nss-v3.ic14",
                "sha1": "e3942f9d508c3c8074c3c3941376c37ca68b8e54",
                "size": 32768
              }
            ],
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/nss.cpp:1099",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e31b5580",
                "description": "SFCBox BIOS Version 2.00",
                "name": "krom2.00.ic1",
                "sha1": "4a6a34a9a94c8249c3b441c2516bdd03e198c458",
                "size": 131072
              },
              {
                "crc32": "c9010002",
                "description": "SFCBox BIOS Version 1.00",
                "name": "krom1.ic1",
                "sha1": "f4c74086a83b728b1c1af3a021a60efa80eff5a4",
                "size": 65536
              },
              {
                "crc32": "ad3ec05c",
                "name": "atrom-4s-0.rom5",
                "sha1": "a3d336db585fe02a37c323422d9db6a33fd489a6",
                "size": 524288
              }
            ],
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/sfcbox.cpp:586",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ec82be9",
                "name": "pifdata.bin",
                "sha1": "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd",
                "size": 2048
              },
              {
                "crc32": "e7f2a005",
                "name": "normpnt.rom",
                "sha1": "c27b4a364a24daeee6e99fd286753fd6216362b4",
                "size": 128
              },
              {
                "crc32": "4f2ae525",
                "name": "normslp.rom",
                "sha1": "eab43f8cc52c8551d9cff6fced18ef80eaba6f05",
                "size": 128
              }
            ],
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/aleck64.cpp:1417"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "description": "Magnavox CD-i 200",
                "name": "cdi200.rom",
                "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "description": "Philips CD-i 220 F2",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "688cda63",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              }
            ],
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/philips/cdi.cpp:922",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d3837ae4",
                "name": "391640-03.u6a",
                "sha1": "06807db3181637455f4d46582d9972afec8956d9",
                "size": 1048576
              }
            ],
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/amiga/cubo.cpp:1435",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b2e41a2",
                "name": "r27v1602f.7d",
                "sha1": "f0a74bbcaf801f3fd0b7002ebd0118564aae3528",
                "size": 2097152
              }
            ],
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1716",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b2a8eeb6",
                "name": "r27v1602f.8g",
                "sha1": "bc4fb4e1e53adbd92385f1726bd69663ff870f1e",
                "size": 2097152
              }
            ],
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1761",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "11812ef8",
                "description": "Standard",
                "name": "700a01.22g",
                "sha1": "e1284add4aaddd5337bd7f4e27614460d52b5b48",
                "size": 524288
              },
              {
                "crc32": "39ebb0ca",
                "description": "Found on Gacha Gachamp",
                "name": "700a01,gchgchmp.22g",
                "sha1": "9aab8c637dd2be84d79007e52f108abe92bf29dd",
                "size": 524288
              },
              {
                "crc32": "6cf852af",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "700b01.22g",
                "sha1": "a2421d0a494892c0e71003c96995ce8f945064dd",
                "size": 524288
              },
              {
                "crc32": "131e0359",
                "description": "Standard",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "131e0359",
                "description": "Found on Gacha Gachamp",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "508b057d",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "h8b01.bin",
                "sha1": "779177e6312ef272483eeb64a5e84bbae6e301f2",
                "size": 64
              }
            ],
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/konami/ksys573.cpp:6415",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigx.cpp:4191"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigv.cpp:1447",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "233e5159",
                "name": "941b01.u25",
                "sha1": "66ff268d5bf78fbfa48cdc3e1b08f8956cfd6cfb",
                "size": 262144
              },
              {
                "crc32": "df6f88d6",
                "name": "941a01.u25",
                "sha1": "2bc10e4fbec36573aa8b6878492d37665f074d87",
                "size": 262144
              },
              {
                "crc32": "f1511505",
                "name": "ds2430.u3",
                "sha1": "ed7cd9b2763b3e377df9663943160f9871f65105",
                "size": 40
              }
            ],
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/konami/viper.cpp:3213"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/konami/twinkle.cpp:1636",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f0774fc2",
                "name": "boot.bin",
                "sha1": "84fade54e025f170d983200a86c1ed96ef1a9ed3",
                "size": 480
              },
              {
                "crc32": "85c2afc5",
                "name": "400b03.8g",
                "sha1": "387842d02d50d0d78a27270e7267af19555b9e63",
                "size": 8192
              },
              {
                "crc32": "5827b1e8",
                "name": "400a1.2b",
                "sha1": "fa8cf5f868cfb08bce203baaebb6c4055ee2a000",
                "size": 256
              },
              {
                "crc32": "2f44f970",
                "name": "400a2.1b",
                "sha1": "7ab46f9d5d587665782cefc623b8de0124a6d38a",
                "size": 256
              }
            ],
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/konami/nemesis.cpp:3140"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "36122a98",
                "name": "2v02s502_ifu.u190",
                "sha1": "3d2c40c9d504358d890364e26c9562e40314d8a4",
                "size": 524288
              }
            ],
            "name": "konendev.zip",
            "required": true,
            "source_ref": "src/mame/konami/konendev.cpp:909"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "98de405e",
                "name": "b22a01.u42",
                "sha1": "4bc268a996825c1bdf6ae277d331fe7bdc0cc00c",
                "size": 524288
              }
            ],
            "name": "kpython.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython.cpp:376"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "79d60546",
                "name": "ps2-0190j-20030822.bin",
                "sha1": "0ea98a25a32145dda514de2f0d4bfbbd806bd00c",
                "size": 4194304
              }
            ],
            "name": "kpython2.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython2.cpp:1918"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "description": "japan",
                "name": "m534002c-13.ic353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              },
              {
                "crc32": "f20f7fe5",
                "description": "english (debug)",
                "name": "msm27c402zb.ic353",
                "sha1": "9aac7d3b3d0cc0bbbe4056164b73078dce41d91c",
                "size": 524288
              },
              {
                "crc32": "bb7ba033",
                "name": "cp01.ic652",
                "sha1": "966f3aee5d00e1312c455f855915d621e6cb0672",
                "size": 8
              }
            ],
            "name": "coh1000c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5969",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "m534002c-59.ic353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              },
              {
                "crc32": "7808fcef",
                "name": "cp10.ic652",
                "sha1": "3c3fb8227b05dace042dc1429b9f2355b1a15638",
                "size": 8
              }
            ],
            "name": "coh3002c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6055",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              }
            ],
            "name": "coh1000t.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5989"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "m534002c-15.ic353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              },
              {
                "crc32": "c425eaf5",
                "name": "ac01.ic652",
                "sha1": "decf77ab50f7f58c641c3214a11647924f3a8998",
                "size": 8
              }
            ],
            "name": "coh1000a.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6015"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "msm27c402zb.ic353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              },
              {
                "crc32": "1cac067e",
                "name": "tw01.ic652",
                "sha1": "8e87941bfb374172628c8a37647e3a66b7166aa8",
                "size": 8
              }
            ],
            "name": "coh1000w.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6024"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "m534002c-17.ic353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              },
              {
                "crc32": "181668b3",
                "name": "at01.ic652",
                "sha1": "8d2fe1facb4473cc20b4b477aaf881f9280939cf",
                "size": 8
              }
            ],
            "name": "coh1001l.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6028"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ff165f3",
                "name": "coh-1002v.ic353",
                "sha1": "8f59314c1093446b9bcb06d232244da6df78e206",
                "size": 524288
              },
              {
                "crc32": "1ce271df",
                "name": "kn01.ic652",
                "sha1": "b01479dc75a4a8a86bee7ac7cd10af2bda332544",
                "size": 8
              }
            ],
            "name": "coh1002v.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6032"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "m27c402cz-54.ic353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              },
              {
                "crc32": "a7dd922e",
                "name": "et01.ic652",
                "sha1": "1069c1d9015028a51a1b314cfacb014ea90aa425",
                "size": 8
              }
            ],
            "name": "coh1002e.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6038"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "m534002c-61.ic353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              },
              {
                "crc32": "50dc8322",
                "name": "mg01.ic652",
                "sha1": "cef4011c6c06d6fce546e1db5d9fbae155eabf57",
                "size": 8
              }
            ],
            "name": "coh1002m.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6089"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "03967fa7",
                "name": "m534002c-60.ic353",
                "sha1": "0e17fec2286e4e25deb23d40e41ce0986f373d49",
                "size": 524288
              },
              {
                "crc32": "235510b1",
                "name": "tt10.ic652",
                "sha1": "2cc02113207a8f0b078152d31ce6503411750e70",
                "size": 8
              },
              {
                "crc32": "6bb167b3",
                "name": "tt16.u17",
                "sha1": "9dcba08f10775a9adf2b1f382c947460edd3d239",
                "size": 8
              },
              {
                "crc32": "c48c8236",
                "name": "flash.u30",
                "sha1": "c6dad60266ce2ff635696bc0d91903c543273559",
                "size": 2097152
              },
              {
                "crc32": "cd15cc30",
                "description": "G NET BIOS v1 flasher",
                "name": "f35-01_m27c800_v1.bin",
                "sha1": "78361f46fa7186d5058937c86c66247a86b1257f",
                "size": 1048576
              },
              {
                "crc32": "6225ec11",
                "description": "G NET BIOS v2 flasher",
                "name": "f35-01_m27c800.bin",
                "sha1": "047852d456b6ff85f8e640887caa03cf3e63ffad",
                "size": 1048576
              },
              {
                "crc32": "6367aedf",
                "description": "MB2009",
                "name": "f35-01_m27c800_modbios_mb-2009_dump_by_aje_fr.bin",
                "sha1": "8400775e0c974c8b017e26ef9339144cad457c63",
                "size": 1048576
              },
              {
                "crc32": "f98ae118",
                "description": "MB2011",
                "name": "f35-01_m27c800_modbios_mb-2011.bin",
                "sha1": "c6918dfbb6fcf686dde4b731e84f740177ab31f0",
                "size": 1048576
              }
            ],
            "name": "coh3002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1341"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              },
              {
                "crc32": "2989b6eb",
                "name": "tt99.u17",
                "sha1": "89981ec68d30729c27d31f820cbfd0c23ed14a03",
                "size": 8
              },
              {
                "crc32": "9100dbf2",
                "name": "flash.u30",
                "sha1": "9ce888bd2a7e575c8ca71d978cb85de22afb5660",
                "size": 2097152
              }
            ],
            "name": "coh1002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1342"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6ad9b006",
                "name": "e68-05-1.ic6",
                "sha1": "f05a0ae26b6abaeda9c7944aee96c72b08fff7a5",
                "size": 524288
              },
              {
                "crc32": "c7c2dc6b",
                "name": "e68-04-1.ic5",
                "sha1": "bf88c818166c285130c5c73d6982f009da26e143",
                "size": 524288
              }
            ],
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/taito/taitotz.cpp:3016"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "name": "sknse2.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              },
              {
                "crc32": "b8d3190c",
                "name": "supernova_modbios-japan.u10",
                "sha1": "62c9a4a075fd944e89fe95c6b46046101eb6de1c",
                "size": 524288
              },
              {
                "crc32": "1d90517c",
                "name": "supernova-modbios-korea.u10",
                "sha1": "463962ffe19880135f0d95a7beda79e27448e872",
                "size": 524288
              }
            ],
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/kaneko/suprnova.cpp:2135",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:776"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "name": "am_macs_os_low.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "name": "am_macs_os_hi.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              },
              {
                "crc32": "669096c1",
                "name": "sx011-01.bin",
                "sha1": "36f55a2e4865bdf0506746a4df51bfb1944f905e",
                "size": 343
              }
            ],
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:775"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "58242cee",
                "description": "Panasonic FZ-10 R.E.A.L. 3DO Interactive Multiplayer",
                "name": "panafz10.bin",
                "sha1": "3c912300775d1ad730dc35757e279c274c0acaad",
                "size": 1048576
              },
              {
                "crc32": "b6f5028b",
                "description": "Goldstar 3DO Interactive Multiplayer v1.01m",
                "name": "goldstar.bin",
                "sha1": "c4a2e5336f77fb5f743de1eea2cda43675ee2de7",
                "size": 1048576
              },
              {
                "crc32": "c8c8ff89",
                "description": "Panasonic FZ-1 R.E.A.L. 3DO Interactive Multiplayer",
                "name": "panafz1.bin",
                "sha1": "34bf189111295f74d7b7dfc1f304d98b8d36325a",
                "size": 1048576
              },
              {
                "crc32": "d5cbc509",
                "description": "Sanyo TRY 3DO Interactive Multiplayer",
                "name": "sanyotry.bin",
                "sha1": "b01c53da256dde43ffec4ad3fc3adfa8d635e943",
                "size": 1048576
              }
            ],
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:565",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b832da9a",
                "name": "saot_rom2.bin",
                "sha1": "520d3d1b5897800af47f92efd2444a26b7a7dead",
                "size": 524288
              }
            ],
            "name": "alg3do.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "ab5948d6",
                "name": "bios_us.bin",
                "sha1": "f8b940c1ae5ce2d3b2cd0c9bfaf6e5b063cec06e",
                "size": 524288
              },
              {
                "crc32": "bbf07ec6",
                "name": "bios_export.bin",
                "sha1": "5656aa077f6a6d43953f15b5123eea102a9d5313",
                "size": 524288
              },
              {
                "crc32": "ac953e2e",
                "name": "bios_korea.bin",
                "sha1": "f502188ef252b7c9d04934c4b525730a116de48b",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              },
              {
                "crc32": "b70df21f",
                "name": "tmp87ph40an.bin",
                "sha1": "5b742e8a0bbf4c0ae4f4398d34c7058fb24acc92",
                "size": 32768
              },
              {
                "crc32": "78b7020d",
                "name": "lvs-ioj-br9020f.u2",
                "sha1": "2b8549532ef5e1e8102dbe71af55fdfb27ccbba6",
                "size": 256
              },
              {
                "crc32": "af9f4287",
                "name": "lvs-igx-br9020f.u3",
                "sha1": "6df0e35c77dbfee2fab7ff490dcd651db420e367",
                "size": 256
              },
              {
                "crc32": "dabec5d2",
                "name": "lvs-jam-br9020f.u3",
                "sha1": "19c5be89c57387d6ea563b3dc55674d0692af98e",
                "size": 256
              }
            ],
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/snk/hng64.cpp:3238",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "name": "315093-01.u2",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "name": "scpa_01-hi_v3.0.u12",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "name": "scpa_01-lo_v3.0.u16",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "79450b4b",
                "name": "scpa_01-hi_v2.20.u12",
                "sha1": "a1e508a89fc62e1c4994064f2786f491b1dc8bc6",
                "size": 65536
              },
              {
                "crc32": "d2825511",
                "name": "scpa_01-lo_v2.20.u16",
                "sha1": "747a37c6073224472bf261ae376ac9abfbe07554",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "name": "scpa_01-hi_v2.11.u12",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "name": "scpa_01-lo_v2.11.u16",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              },
              {
                "crc32": "0b486a85",
                "name": "gcp_v311_1-hi.u16",
                "sha1": "b406f1db5abf28d9072b7940989ffd176aeee5cb",
                "size": 65536
              },
              {
                "crc32": "80e8e863",
                "name": "gcp_v311_1-lo.u11",
                "sha1": "ab04dfcda7544f4ed9b67771cd8aefe0300c6d4b",
                "size": 65536
              },
              {
                "crc32": "d20a4d7f",
                "name": "gcp_v311_2-hi.u17",
                "sha1": "1dc0a79efa946333149f68ddac046fd44b5f2abe",
                "size": 65536
              },
              {
                "crc32": "5bf4c74c",
                "name": "gcp_v311_2-lo.u12",
                "sha1": "1f7b17170accdf9e448c1a5d8bc430aa2d1d931b",
                "size": 65536
              },
              {
                "crc32": "69295167",
                "name": "gcp_v400_1-hi.u16",
                "sha1": "855f53abbb9dc15e5518e16c5c2dfe4134d07306",
                "size": 65536
              },
              {
                "crc32": "504c2171",
                "name": "gcp_v400_1-lo.u11",
                "sha1": "a93367f520afb86c97c0a191714b72823c95cdd2",
                "size": 65536
              },
              {
                "crc32": "13fb4e2d",
                "name": "gcp_v400_2-hi.u17",
                "sha1": "3eef07aecc3a201ae0b20634c7fd0c87c89fd7f1",
                "size": 65536
              },
              {
                "crc32": "a5cc4515",
                "name": "gcp_v400_2-lo.u12",
                "sha1": "80070521476e92323a6baa6e55928ca5b751a332",
                "size": 65536
              }
            ],
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/arsystems.cpp:1011"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c4f0f55f",
                "description": "Kickstart 1.3 (34.5)",
                "name": "315093-02.u2",
                "sha1": "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
                "size": 262144
              }
            ],
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/alg.cpp:923"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "88d0be26",
                "name": "136032.205.l13",
                "sha1": "d124045eccc562ff0423b23a240e27ad740fa0c9",
                "size": 16384
              },
              {
                "crc32": "3c79ef05",
                "name": "136032.206.l12",
                "sha1": "20fdca7131478e1ee12691bdafd2d5bb74cbd16f",
                "size": 16384
              },
              {
                "crc32": "79021d3c",
                "name": "136032.105.l13",
                "sha1": "85febd34bcb166fc3326b5e5e4e80e157b660a08",
                "size": 16384
              },
              {
                "crc32": "76ee86c4",
                "name": "136032.106.l12",
                "sha1": "cbcd424510435a04e9041967a13781fd19b0f2c4",
                "size": 16384
              },
              {
                "crc32": "195c54ad",
                "name": "136032.114.j11",
                "sha1": "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7",
                "size": 16384
              },
              {
                "crc32": "7275b4dc",
                "name": "136032.115.j10",
                "sha1": "0896ab37ea832a1335046353612c1b4c86d8d040",
                "size": 16384
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.107.b2",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              }
            ],
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/atari/atarisy1.cpp:2669"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/atari/maxaflex.cpp:448"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "description": "AMG0110B PCB",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              },
              {
                "crc32": "1e8175c8",
                "description": "AMG0110D PCB",
                "name": "mx27l1000-alt.u14",
                "sha1": "f60c016be2ff11e47b2192acddb92676043af501",
                "size": 131072
              }
            ],
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/misc/crystal.cpp:845"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/ces/galgames.cpp:1288"
          },
          {
            "category": "bios_zip",
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/acorn/aristmk5.cpp:9303"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e97afedf",
                "name": "24013001_right.u83",
                "sha1": "10ca3b015afaff5d7812f0f5207b2535602136a5",
                "size": 2097152
              },
              {
                "crc32": "06ae7e07",
                "name": "24013001_left.u70",
                "sha1": "39a45575b66906d73b519988d1001c99b05c5f34",
                "size": 2097152
              },
              {
                "crc32": "757618f2",
                "name": "21012901_right.u83",
                "sha1": "43f9a3e7d544979f8c6974945914d9e099b02abd",
                "size": 2097152
              },
              {
                "crc32": "0d271470",
                "name": "21012901_left.u70",
                "sha1": "5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479",
                "size": 2097152
              },
              {
                "crc32": "5b20a96c",
                "name": "19012801_right.u83",
                "sha1": "5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926",
                "size": 2097152
              },
              {
                "crc32": "b03bd17c",
                "name": "19012801_left.u70",
                "sha1": "f281e80f6dda5b727ed71d2deebe3b0ff548773f",
                "size": 2097152
              },
              {
                "crc32": "e627dbfa",
                "name": "13012001_right.u83",
                "sha1": "4fedbe0975ceb7dc0ebebf18a7708d78984db9b7",
                "size": 2097152
              },
              {
                "crc32": "38e8f659",
                "name": "13012001_left.u70",
                "sha1": "88c6acba99b0aca023c6f4d27c061c231490e9e0",
                "size": 2097152
              },
              {
                "crc32": "73dcb11c",
                "name": "11011901_right.u83",
                "sha1": "69ae4f32a0c9141b2a82ff3935b0cd20333d2964",
                "size": 2097152
              },
              {
                "crc32": "d3dd2210",
                "name": "11011901_left.u70",
                "sha1": "3548f8cc39859d3f44a55f6bae48966a2d48e0eb",
                "size": 2097152
              },
              {
                "crc32": "de4c3aed",
                "name": "11011501_right.u83",
                "sha1": "21596a2edd20eb7de7a4ec8900a270b09c8f326f",
                "size": 2097152
              },
              {
                "crc32": "c5cc3461",
                "name": "11011501_left.u70",
                "sha1": "5b43c4cb6110a6ccf67cd0f3789253f6872b20c4",
                "size": 2097152
              },
              {
                "crc32": "8a853f80",
                "name": "09011001_right.u83",
                "sha1": "9a75498f7b02c81a483b4e1c158f35f0ee4c0112",
                "size": 2097152
              },
              {
                "crc32": "229c2e63",
                "name": "09011001_left.u70",
                "sha1": "91fd2b1acb69efe073647e93db9f11042add2feb",
                "size": 2097152
              },
              {
                "crc32": "8c148c11",
                "name": "07010801_right.u83",
                "sha1": "5ff3be18455b4f04675fec8d5b9d881295c65e23",
                "size": 2097152
              },
              {
                "crc32": "8e92af68",
                "name": "07010801_left.u70",
                "sha1": "00d2bb655b7964a9652896741210ec534df0b0d2",
                "size": 2097152
              },
              {
                "crc32": "c12eac11",
                "name": "05010601_right.u83",
                "sha1": "683b9ddc323865ace7dca37d13b55de6e42759a5",
                "size": 1048576
              },
              {
                "crc32": "b3e6b4a0",
                "name": "05010601_left.u70",
                "sha1": "3bf398c9257579f8e51ce716d6ebfa74fa510273",
                "size": 1048576
              },
              {
                "crc32": "3daefb7a",
                "name": "04010501_right.u83",
                "sha1": "411471713219f4bab5ccf5fe7a12a6c138c8c550",
                "size": 1048576
              },
              {
                "crc32": "21182775",
                "name": "04010501_left.u70",
                "sha1": "7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a",
                "size": 1048576
              },
              {
                "crc32": "a34a9f16",
                "name": "03010301.u84",
                "sha1": "b8750e6ceb1715da8e5ac2f0183254e29a042641",
                "size": 1048576
              },
              {
                "crc32": "d793440a",
                "name": "03010301.u71",
                "sha1": "dced4c04bde13293af77a9a1f4c5c606e3758de0",
                "size": 1048576
              },
              {
                "crc32": "c8580554",
                "name": "03010301.u83",
                "sha1": "58b8bfff2f8d298c4e3be2b01900800c45fa7ad7",
                "size": 1048576
              },
              {
                "crc32": "5ae69121",
                "name": "03010301.u70",
                "sha1": "36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b",
                "size": 1048576
              },
              {
                "crc32": "0920930f",
                "name": "02010201.u84",
                "sha1": "771b0f62442d1c75b1bb59ad82365b7ab8747173",
                "size": 1048576
              },
              {
                "crc32": "24d5614a",
                "name": "02010201.u71",
                "sha1": "fdcf3826dccc72b74b66379b1411cf211d5a1670",
                "size": 1048576
              },
              {
                "crc32": "5f64a20c",
                "name": "02010201.u83",
                "sha1": "397404ab6d2a1aa3c1fc77bb9421fef7079b65a5",
                "size": 1048576
              },
              {
                "crc32": "9b2db442",
                "name": "02010201.u70",
                "sha1": "d512398a2d9257bd385dc50d61c63cd1a47300ba",
                "size": 1048576
              },
              {
                "crc32": "183e3836",
                "name": "02010114.u84",
                "sha1": "4c802d0cd010bc007acb3a83e37aaa29b2d13d87",
                "size": 1048576
              },
              {
                "crc32": "8f83c3dd",
                "name": "02010114.u71",
                "sha1": "a5f9d80b4b515b24299d0241e1665cfd9da8bab7",
                "size": 1048576
              },
              {
                "crc32": "945104d7",
                "name": "02010114.u83",
                "sha1": "e372d0cf889c72b5d001b26fe4a925a28486537f",
                "size": 1048576
              },
              {
                "crc32": "3ba4379f",
                "name": "02010114.u70",
                "sha1": "84367f12c4c9224d2ab9cae83ae8727de338408c",
                "size": 1048576
              },
              {
                "crc32": "2ecd8da8",
                "name": "25012805_right.u83",
                "sha1": "389e9668b2ba4fffed5d2721b2ce70d502fb9f67",
                "size": 2097152
              },
              {
                "crc32": "996f32ce",
                "name": "25012805_left.u70",
                "sha1": "cf21bef745986fcbd298167453c7b8e5945ce602",
                "size": 2097152
              },
              {
                "crc32": "045b82ad",
                "name": "20012605_right.u83",
                "sha1": "b8e4f9f826970d83ae5fd2f2898de12ad1bf2d24",
                "size": 2097152
              },
              {
                "crc32": "87331111",
                "name": "20012605_left.u70",
                "sha1": "6cdc2d81f68de23af18a975a6f27ddec246be405",
                "size": 2097152
              },
              {
                "crc32": "e436c1f5",
                "name": "20012305_right.u83",
                "sha1": "62ee529cc971fd76aa2ccc15778e3f0c40e3e47f",
                "size": 2097152
              },
              {
                "crc32": "ea8961cc",
                "name": "20012305_left.u70",
                "sha1": "0ebc7c3b94a6e01ee984af4711043130d9670bd3",
                "size": 2097152
              },
              {
                "crc32": "2bec5b74",
                "name": "14011605_right.u83",
                "sha1": "854733cada75e632f01f7096d4740ed4941a3d5b",
                "size": 2097152
              },
              {
                "crc32": "cd26d4f0",
                "name": "14011605_left.u70",
                "sha1": "40822714abf08aeb08d827dbd8cd099f86803754",
                "size": 2097152
              },
              {
                "crc32": "ca6bc86c",
                "name": "04041205_right.u83",
                "sha1": "69fe7fc35694e4cd7f861bff4ec3a6165a81df6e",
                "size": 1048576
              },
              {
                "crc32": "dfb9a119",
                "name": "04041205_left.u70",
                "sha1": "814a5a7877392aec4e4871d7f0e19d2fbd717409",
                "size": 1048576
              },
              {
                "crc32": "bce3d97f",
                "name": "03130334_right.u83",
                "sha1": "da36377cc1465022a2434703adee63bf48c71a9c",
                "size": 2097152
              },
              {
                "crc32": "02175fde",
                "name": "03130334_left.u70",
                "sha1": "4e9a9e1e803a0c84b06aec99dc3147dd7a919eee",
                "size": 2097152
              },
              {
                "crc32": "cf5a9d1e",
                "name": "01040505.u84",
                "sha1": "0ebba478fc883831d70b0fa95f43e5f93b07ae9e",
                "size": 1048576
              },
              {
                "crc32": "f56ea77e",
                "name": "01040505.u71",
                "sha1": "319be1bee66a289e2c1f6beec07758f79aa0cf16",
                "size": 1048576
              },
              {
                "crc32": "90f32169",
                "name": "01040505.u83",
                "sha1": "228be8b4a9eb6b2acf7f7a7561bd194009936026",
                "size": 1048576
              },
              {
                "crc32": "b9ddea66",
                "name": "01040505.u70",
                "sha1": "f4bfdeada39a3f0094d6468b7374a34f88f5df7f",
                "size": 1048576
              },
              {
                "crc32": "b4b3c6a5",
                "name": "03030708_right.u83",
                "sha1": "5747f98a6eaa5c24a23d1d76a28b33a3bfbbfd1f",
                "size": 1048576
              },
              {
                "crc32": "4e5ad823",
                "name": "03030708_left.u70",
                "sha1": "77ab1c29c6172cfdcef776222a72b2b44114d4da",
                "size": 1048576
              },
              {
                "crc32": "01d13b89",
                "name": "14011913_right.u83",
                "sha1": "b1013366d0803dfbec5a5f90f6a5cea862de0513",
                "size": 2097152
              },
              {
                "crc32": "9a4cefdf",
                "name": "14011913_left.u70",
                "sha1": "6c15bc565ede8af19361d60ee1e6657a8055c92c",
                "size": 2097152
              },
              {
                "crc32": "7e3f61f6",
                "name": "14010152_right.u83",
                "sha1": "1e27d72c35b0c633187159ef434f22398df28882",
                "size": 2097152
              },
              {
                "crc32": "2716e1ef",
                "name": "14010152_left.u70",
                "sha1": "81fe1ae4f9cd1bcb24795ce85913ee22ed0fabcd",
                "size": 2097152
              },
              {
                "crc32": "7a8619a5",
                "name": "02061013_right.u83",
                "sha1": "bd03ddb68817c1660b009e102ccf69e5b603b875",
                "size": 1048576
              },
              {
                "crc32": "e70a7007",
                "name": "02061013_left.u70",
                "sha1": "0935f924866162d9c0fbdbb99391cbf730a04b76",
                "size": 1048576
              },
              {
                "crc32": "31068c41",
                "name": "02060913_right.u83",
                "sha1": "962da0079495a64f7ffb34be643892c272017cc9",
                "size": 1048576
              },
              {
                "crc32": "d6a6713c",
                "name": "02060913_left.u70",
                "sha1": "0f3bb2746f1a6fa6a587fd50827299408a3b28d2",
                "size": 1048576
              },
              {
                "crc32": "bf21a975",
                "name": "15011025_right.u83",
                "sha1": "a251b1a7342387300689cd50fe4ce7975b903ac5",
                "size": 2097152
              },
              {
                "crc32": "c02e14b0",
                "name": "15011025_left.u70",
                "sha1": "6bf98927813519dfe60e582dbe5be3ccd87f7c91",
                "size": 2097152
              },
              {
                "crc32": "eddeff13",
                "name": "24010467_right.u83",
                "sha1": "77ccbcf40aeb7305eb13d6d24efafd09955f1eac",
                "size": 2097152
              },
              {
                "crc32": "9093d820",
                "name": "24010467_left.u70",
                "sha1": "05bb14895e3077d277a1d0822036d08f359c0307",
                "size": 2097152
              },
              {
                "crc32": "2dae8ca0",
                "name": "01.04.11_right.u83",
                "sha1": "7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0",
                "size": 2097152
              },
              {
                "crc32": "787f2b07",
                "name": "01.04.11_left.u70",
                "sha1": "2548289e44f4b935346b759afb5383bdbac04c3e",
                "size": 2097152
              },
              {
                "crc32": "82ce2fcc",
                "name": "01.04.10_right.u83",
                "sha1": "4c8fb3db084a67e99d1420b3f895a06ce9ef5ec2",
                "size": 2097152
              },
              {
                "crc32": "9d9d52c1",
                "name": "01.04.10_left.u70",
                "sha1": "b957220cdbedd516c219d1bfc28807ce466df93f",
                "size": 2097152
              },
              {
                "crc32": "95333304",
                "name": "01.04.08_right.u83",
                "sha1": "7afe49d6c5e4d6820f349778557daa88c5366a51",
                "size": 2097152
              },
              {
                "crc32": "0dfcad10",
                "name": "01.04.08_left.u70",
                "sha1": "53798be000304aed38909f5fd8470a68bedd8229",
                "size": 2097152
              },
              {
                "crc32": "23c28e22",
                "name": "01.04.07_right.u83",
                "sha1": "98f24a1f86232b6c2c288a61ec7d60c867f192e5",
                "size": 2097152
              },
              {
                "crc32": "acfb0fe0",
                "name": "01.04.07_left.u70",
                "sha1": "b1a772d7978e6ff4406a5bb39a71cb3f89608e72",
                "size": 2097152
              },
              {
                "crc32": "e57ba02d",
                "name": "01.04.04_right.u83",
                "sha1": "8e29403e6b619eeab41dc171221720bc7820ccdc",
                "size": 2097152
              },
              {
                "crc32": "b984a92c",
                "name": "01.04.04_left.u70",
                "sha1": "90f7a61302caee40195c08565bdac856a3234c1d",
                "size": 2097152
              },
              {
                "crc32": "1582714b",
                "name": "01.03.17_right.u83",
                "sha1": "92d0a15314ffe526159bef9a364898dd1ebdfde7",
                "size": 2097152
              },
              {
                "crc32": "a88193dc",
                "name": "01.03.17_left.u70",
                "sha1": "c9e1d483edaecd318d2e5fc8a54e84516c93e0ca",
                "size": 2097152
              },
              {
                "crc32": "889ffd82",
                "name": "01.03.14_right.u83",
                "sha1": "9c98c9cdcf5f7d05095f11006418133029e9f0f8",
                "size": 2097152
              },
              {
                "crc32": "7138fec4",
                "name": "01.03.14_left.u70",
                "sha1": "f81331d1875ac574d3e6c98be218ff25c6c7be5a",
                "size": 2097152
              },
              {
                "crc32": "2ebccc4e",
                "name": "01.03.07_right.u83",
                "sha1": "9342724e4451e9ab24ceae208284b50abd4f0be3",
                "size": 2097152
              },
              {
                "crc32": "a3632da4",
                "name": "01.03.07_left.u70",
                "sha1": "1c96a88e86095b81801ab88e36a4cdfa4b893265",
                "size": 2097152
              },
              {
                "crc32": "bd48ca55",
                "name": "01.03.06_right.u83",
                "sha1": "8fb1576cbeb1c64c358880714740195d2e73e03e",
                "size": 2097152
              },
              {
                "crc32": "2f9d9a29",
                "name": "01.03.06_left.u70",
                "sha1": "fdebfaca9a579d7249379f19aef22fbfd66bf943",
                "size": 2097152
              },
              {
                "crc32": "2c7f1ec3",
                "name": "01.03.05_right.u83",
                "sha1": "d03167f43ed6f9596080d91472695829378cef0a",
                "size": 2097152
              },
              {
                "crc32": "0095e3f9",
                "name": "01.03.05_left.u70",
                "sha1": "d2e8786158b1ab0a614aab21cf1d14cbc04754af",
                "size": 2097152
              },
              {
                "crc32": "2255e263",
                "name": "01.03.03e_right.u83",
                "sha1": "5e9e093aaa17172f47a14c3baf7f6f0f73b19398",
                "size": 2097152
              },
              {
                "crc32": "ea50729a",
                "name": "01.03.03e_left.u70",
                "sha1": "14b5a71bfb91ac366ddcb5f77fb54127808f8163",
                "size": 2097152
              },
              {
                "crc32": "253415f4",
                "name": "01.03.03a_right.u83",
                "sha1": "50dc77ad87bc6be1932dda2fd4865602c8c49729",
                "size": 2097152
              },
              {
                "crc32": "4ab5dd40",
                "name": "01.03.03a_left.u70",
                "sha1": "a6812cc624e6a98ea7b0697e2797fe10ba8e303e",
                "size": 2097152
              },
              {
                "crc32": "aaaeac8c",
                "name": "01.02.08_right.u2",
                "sha1": "a565e5fcb4f55f31e7d36be40eec234248a66efd",
                "size": 1048576
              },
              {
                "crc32": "f29fd1bf",
                "name": "01.02.08_left.u3",
                "sha1": "33e043d2616e10a1c7a0936c3d208f9bcc2ca6f3",
                "size": 1048576
              },
              {
                "crc32": "e920e940",
                "name": "01.02.02_right.u2",
                "sha1": "52e28d4765a3e953bb70dc4ed13d96d4180be996",
                "size": 1048576
              },
              {
                "crc32": "1d0f4093",
                "name": "01.02.02_left.u3",
                "sha1": "17d6328dba9826b58f39393ca2f2daac1b7161ef",
                "size": 1048576
              },
              {
                "crc32": "6f5f5ef1",
                "name": "06.03.04_right.u2",
                "sha1": "70a43fba4de47ed8dcf38b25eafd5873f3428e72",
                "size": 1048576
              },
              {
                "crc32": "7034f26b",
                "name": "06.03.04_left.u3",
                "sha1": "7be78f23bec38d05240cdfe1186ec0c8291f5a1c",
                "size": 1048576
              },
              {
                "crc32": "98763498",
                "name": "06.03.03_right.u2",
                "sha1": "246e95cc12eb34f946b2f4938c59217718f6d841",
                "size": 1048576
              },
              {
                "crc32": "a6924238",
                "name": "06.03.03_left.u3",
                "sha1": "b71ab39bf9c1fdbab556028138749e8c040ec83c",
                "size": 1048576
              },
              {
                "crc32": "e4001f60",
                "name": "06.02.20_right.u83",
                "sha1": "5da34efb1ac0f7c84a48e09363d20cfecda4bcf1",
                "size": 1048576
              },
              {
                "crc32": "199ed3b9",
                "name": "06.02.20_left.u70",
                "sha1": "e3ee81ffd713f09e35a10c38e4f59282e2c5cd30",
                "size": 1048576
              },
              {
                "crc32": "1cf5a853",
                "name": "06.02.04_right.u2",
                "sha1": "64d17efcce702df7a0b0e151293199478e25226d",
                "size": 1048576
              },
              {
                "crc32": "117b75f2",
                "name": "06.02.04_left.u3",
                "sha1": "2129286853d3c50b8a943b71334d4ef6b98adc05",
                "size": 1048576
              },
              {
                "crc32": "58730ed3",
                "name": "gambs2m_01.05.07.u3",
                "sha1": "6e9c9d7960fe0ef083ff824287a99d9c0b9f5e6a",
                "size": 131072
              }
            ],
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk6.cpp:6639"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f2fea07e",
                "name": "mk7-bios_590176_01_1.00.7.u1",
                "sha1": "285038473fbe3a5708045e2f8b14562f3c24b203",
                "size": 1048576
              }
            ],
            "name": "aristmk7.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk7.cpp:233"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e4fb64fb",
                "name": "6530-009.u5",
                "sha1": "a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20",
                "size": 1024
              },
              {
                "crc32": "dca980dd",
                "name": "6530-010.u6",
                "sha1": "3817d75413854d889fc1ce4fd6a51d820d1e0534",
                "size": 1024
              },
              {
                "crc32": "13f42789",
                "name": "6530-011.u3",
                "sha1": "baa0f73fda08a3c5d6f1423fb329e4febb07ef97",
                "size": 1024
              }
            ],
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/pinball/allied.cpp:772"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ed0d518b",
                "name": "a-110.u12",
                "sha1": "8f3ca8792ad907c660d9149a1aa3a3528c7573e3",
                "size": 2048
              },
              {
                "crc32": "a223f2e8",
                "name": "b1-110.u13",
                "sha1": "767e15e19e11399935c890c1d1034dccf1ad7f92",
                "size": 2048
              }
            ],
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gp_1.cpp:575"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "614a3bd9",
                "name": "a1752cf.u5",
                "sha1": "febca18fb6f96037ca82e515dd161dfcb0e4c776",
                "size": 2048
              },
              {
                "crc32": "4cd312dd",
                "name": "a1753ce.u4",
                "sha1": "31245daa9972ef8652caee69986585bb8239e86e",
                "size": 2048
              }
            ],
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gts1.cpp:1070"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d0c4695d",
                "name": "a2361.b1",
                "sha1": "4846adb3f6c292626840ba5255ffc5e788a69301",
                "size": 1024
              },
              {
                "crc32": "39a70611",
                "name": "a2362.b2",
                "sha1": "8545e168a5f256150bcff12d1e6d8efffd08c3cd",
                "size": 1024
              }
            ],
            "name": "recel.zip",
            "required": true,
            "source_ref": "src/mame/pinball/recel.cpp:546"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "248910ed",
                "description": "BIOS47 (Acorp 694XT/694XT1)",
                "name": "bios47.bin",
                "sha1": "2901c94fb003e5eaea7e91127ad1f7953826a248",
                "size": 262144
              },
              {
                "crc32": "90074f2b",
                "description": "BIOS46 (Acorp 694XT/694XT1)",
                "name": "bios46.bin",
                "sha1": "08fdabad6114ede03a15ce51dec775080585b650",
                "size": 262144
              },
              {
                "crc32": "790d5db0",
                "description": "BIOS45 (Acorp 694XT/694XT1)",
                "name": "bios45.bin",
                "sha1": "6bbfb35275eb0c7bb740ff9b1e299042d4c5952a",
                "size": 262144
              },
              {
                "crc32": "a4b2703e",
                "description": "BIOS44 (Acorp 694XT/694XT1)",
                "name": "bios44.bin",
                "sha1": "9baa5e3aaaf120054979039e42bf1bca2a50616e",
                "size": 262144
              },
              {
                "crc32": "820c057e",
                "description": "BIOS42 (Acorp 694XT/694XT1)",
                "name": "bios42.bin",
                "sha1": "b553961c1bbb6b4afa366eb0dba7ed29ca148f5e",
                "size": 262144
              },
              {
                "crc32": "0940aebd",
                "description": "BIOS41 (Acorp 694XT/694XT1)",
                "name": "bios41.bin",
                "sha1": "38c8645eed9e17ef8e2cd0856f929697ce13df74",
                "size": 262144
              },
              {
                "crc32": "c5ed7d4f",
                "description": "BIOS40 (Acorp 694XT/694XT1)",
                "name": "bios40.bin",
                "sha1": "9fcffb385b5d68bf8cf87615ffee781f38f5fb74",
                "size": 262144
              },
              {
                "crc32": "e7541a28",
                "description": "BIOS39 (unknown motherboard)",
                "name": "bios39.bin",
                "sha1": "dad1aff2cb142d65e7c8736064dce8004451ea4b",
                "size": 262144
              },
              {
                "crc32": "cb49085b",
                "description": "BIOS38 (unknown motherboard)",
                "name": "bios38.bin",
                "sha1": "867b95ebef8fd53dad5b71cd4430ede08cf03540",
                "size": 262144
              },
              {
                "crc32": "9f35e2d2",
                "description": "BIOS37 (unknown motherboard)",
                "name": "bios37.bin",
                "sha1": "83026fc9fc72f795bc3229af98099b409c9bdc81",
                "size": 262144
              },
              {
                "crc32": "83ca05e9",
                "description": "BIOS36 (unknown motherboard)",
                "name": "bios36.bin",
                "sha1": "9d06677907c88481a167e52cc149995cfef0ff40",
                "size": 262144
              },
              {
                "crc32": "d5a2f966",
                "description": "BIOS35 (unknown motherboard)",
                "name": "bios35.bin",
                "sha1": "4f4c9688501814bc00b4cde58ac590b6e961816e",
                "size": 262144
              },
              {
                "crc32": "400702fe",
                "description": "BIOS34 (unknown motherboard)",
                "name": "bios34.bin",
                "sha1": "63a9e04d2ea3d4ace3e5c9f11cc62d0131bc4af0",
                "size": 262144
              },
              {
                "crc32": "96658274",
                "description": "BIOS33 (Soyo SY-7IZB+)",
                "name": "bios33.bin",
                "sha1": "1a5fc83cf84a4c774abc055688fa0c32c3784086",
                "size": 262144
              },
              {
                "crc32": "63318d8a",
                "description": "BIOS32 (Soyo SY-7IZB+)",
                "name": "bios32.bin",
                "sha1": "1194a30a65186f2d0a9e11742d51232598c16011",
                "size": 262144
              },
              {
                "crc32": "5121b267",
                "description": "BIOS31 (Soyo SY-7IZB+)",
                "name": "bios31.bin",
                "sha1": "97e51ed4d53d19ed69db1faba5395b46a1edb6b0",
                "size": 262144
              },
              {
                "crc32": "c6e30fb1",
                "description": "BIOS30 (Soyo SY-7IZB+)",
                "name": "bios30.bin",
                "sha1": "1d9a900a5383bf58b66a2e9f7fb34c61397dd327",
                "size": 262144
              },
              {
                "crc32": "ddbd94f4",
                "description": "BIOS29 (Soyo SY-5EAS)",
                "name": "bios29.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              },
              {
                "crc32": "ddbd94f4",
                "description": "TEST (Soyo SY-5EAS)",
                "name": "test.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              }
            ],
            "name": "slvrball.zip",
            "required": true,
            "source_ref": "src/mame/misc/silverball.cpp:259"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "67374715",
                "name": "va1b102.u2",
                "sha1": "8767cbd81614c2686a1adb70159f909e8ffd634d",
                "size": 131072
              },
              {
                "crc32": "b92a83c8",
                "name": "va1b101.u2",
                "sha1": "bd6d9adaa74cf7512478838d1bd5a79dbd0c4aa1",
                "size": 131072
              },
              {
                "crc32": "36135792",
                "name": "va1a101.u2",
                "sha1": "1b9c50bd02df8227b228b35cc485efd5a13ec639",
                "size": 131072
              }
            ],
            "name": "nichidvd.zip",
            "required": true,
            "source_ref": "src/mame/nichibutsu/hrdvd.cpp:1012"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "86c4a4f0",
                "name": "magnet-master-vid-e03.bin",
                "sha1": "6db1a006b2e0b2a7cc9748ade881debb098b6757",
                "size": 8192
              }
            ],
            "name": "cedmag.zip",
            "required": true,
            "source_ref": "src/mame/efo/cedar_magnet.cpp:1166"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e0fc1a16",
                "description": "Eagle 40MB bootrom 2.09",
                "name": "eagle_u15_v209.u15",
                "sha1": "c9524f7ee6b95bd484a3b75bcbe2243cb273f84c",
                "size": 1048576
              },
              {
                "crc32": "772f2864",
                "description": "Eagle 40MB bootrom 2.08",
                "name": "eagle_u15_v208.u15",
                "sha1": "085063a4e34f29ebe3814823cd2c6323a050da36",
                "size": 1048576
              },
              {
                "crc32": "f02e5523",
                "description": "Eagle 40MB bootrom 2.04",
                "name": "eagle_u15_v204.u15",
                "sha1": "b979cf72a6992f1ecad9695a08c8d51e315ab537",
                "size": 1048576
              },
              {
                "crc32": "e180442b",
                "description": "Eagle 40MB bootrom 2.01",
                "name": "eagle_u15_v201.u15",
                "sha1": "4f50821fed5bcd786d989520aa2559d6c416fb1f",
                "size": 1048576
              },
              {
                "crc32": "97a01fc9",
                "description": "Eagle 40MB bootrom 1.07",
                "name": "golf_fore_u15_v107.u15",
                "sha1": "a421dbf4d097b2f50cc005d3cd0d63e562e03df8",
                "size": 1048576
              },
              {
                "crc32": "9c79b7ad",
                "description": "Eagle 40MB bootrom 1.06a",
                "name": "golf_fore_u15_v106a.u15",
                "sha1": "ccf1c86e79d65bee30f399e0fa33a7839570d93b",
                "size": 1048576
              },
              {
                "crc32": "56bc193d",
                "description": "Eagle 40MB bootrom 1.06",
                "name": "golf_fore_u15_v106.u15",
                "sha1": "e531d208ef27f777d0784414885f390d1be654b9",
                "size": 1048576
              },
              {
                "crc32": "3870dbe0",
                "description": "Eagle 40MB bootrom 1.05",
                "name": "golf_fore_u15_v105.u15",
                "sha1": "09be2d86c7259cd81d945c757044b167a76f30db",
                "size": 1048576
              },
              {
                "crc32": "c35f4cf2",
                "description": "Eagle bootrom 1.03",
                "name": "golf_fore_u15_v103.u15",
                "sha1": "45301c18c7f8f78754c8ad60ea4d2da5a7dc55fb",
                "size": 1048576
              },
              {
                "crc32": "1fd39e73",
                "description": "BBH 8meg bootrom 1.02",
                "name": "bbh_u15_v102.u15",
                "sha1": "d1ac758f94defc5c55c62594b3999a406dd9ef1f",
                "size": 1048576
              },
              {
                "crc32": "4c000c5e",
                "description": "Eagle bootrom 1.02",
                "name": "golf_fore_u15_v102.u15",
                "sha1": "4fd5ea2a0874759b621c9cd52cee55d282443e5d",
                "size": 1048576
              },
              {
                "crc32": "2600bc2b",
                "description": "Eagle bootrom 1.01",
                "name": "golf_fore_u15_v101.u15",
                "sha1": "c4b89e69c51e4a3bb1874407c4d30b6caed4f396",
                "size": 1048576
              },
              {
                "crc32": "62c4af8a",
                "name": "17s20lpc_sb4.u26",
                "sha1": "6eca277b9c66a401990599e98fdca64a9e38cc9a",
                "size": 32768
              },
              {
                "crc32": "c88b9d42",
                "name": "17s20lpc_sb5.u26",
                "sha1": "b912d0fc50ecdc6a198c626f6e1644e8405fac6e",
                "size": 32768
              },
              {
                "crc32": "f5cf3187",
                "name": "17s50a_red1.u26",
                "sha1": "83b4a14de9959e5a776d97d424945d43501bda7f",
                "size": 131072
              },
              {
                "crc32": "9d1e1ace",
                "name": "e2-card1.u22.jed",
                "sha1": "287d6a30e9f32137ef4eba54f0effa092c97a6eb",
                "size": 3025
              },
              {
                "crc32": "4f1ff45a",
                "name": "e2-res3.u117.jed",
                "sha1": "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff",
                "size": 3025
              }
            ],
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/itech/iteagle.cpp:756"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c6c32f1a",
                "name": "hmc86304_bios_v208.u7",
                "sha1": "a07ade7f0567e1978cd8cee73c6a5d7b5e5f947f",
                "size": 32768
              },
              {
                "crc32": "811d3639",
                "name": "amibios_486dx_isa_bios.u32",
                "sha1": "a64d6026c16ac8c79f22b2c241f149402449fafb",
                "size": 65536
              },
              {
                "crc32": "8354d059",
                "name": "ver_151_03_u16.u16",
                "sha1": "a88df7cc259c1c39316cc3bff9e08aa4e8d3d2c0",
                "size": 131072
              },
              {
                "crc32": "ace4081d",
                "name": "ver_151_03_u17.u17",
                "sha1": "f57287ded53f8d127bcdc9e34b8adb356fe55e5e",
                "size": 131072
              },
              {
                "crc32": "9a6b553a",
                "name": "wfc062_212.u62",
                "sha1": "7045f733446866ee3171e175e1b22d9384fda1b5",
                "size": 32768
              },
              {
                "crc32": "528142eb",
                "name": "wi01p006.u6",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "528142eb",
                "name": "wi01p026.u26",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "a2ad9cf8",
                "name": "wi01p044.u44",
                "sha1": "67d44807f7346baf87c15d35c27458b0a7d5de89",
                "size": 2194
              },
              {
                "crc32": "e2a13df7",
                "name": "wi01p045.u45",
                "sha1": "eaa5ee3a92d11f0722934cb6d3443ead903dc78f",
                "size": 2194
              },
              {
                "crc32": "4c22fba5",
                "name": "wi01p046.u46",
                "sha1": "6fabc7a0790f8b883b83fa6fe5f1ee1302d284e2",
                "size": 2194
              },
              {
                "crc32": "7cb0931f",
                "name": "wi01p050.u50",
                "sha1": "394c100b33e5b8d1b2f4979399ad0791af39da28",
                "size": 2194
              },
              {
                "crc32": "d2eb2493",
                "name": "wi01p053.u53",
                "sha1": "a66b4733da0f4f0869839630063c52a733f5ea8c",
                "size": 2194
              },
              {
                "crc32": "96d3506e",
                "name": "wi01p054.u54",
                "sha1": "682ba8a7a17176ff41047cd9a9cfefdc2dc0fd64",
                "size": 2194
              },
              {
                "crc32": "8bf57db4",
                "name": "wi01p056.u56",
                "sha1": "1a5315397b1903c36d7450e873603584db8a00e8",
                "size": 2194
              },
              {
                "crc32": "882f6405",
                "name": "wi01p058.u58",
                "sha1": "e3b7c278f4ee9e0e11741d9ed7c5b32978a3d185",
                "size": 2194
              },
              {
                "crc32": "a97cff8e",
                "name": "wi01p067.u67",
                "sha1": "78451a4bffecd4e1655e7a89971e28b47f5c8829",
                "size": 2194
              },
              {
                "crc32": "3d1adb17",
                "name": "wi01p075.u75",
                "sha1": "b1af8c069de3df3c757e211b372f535b513c6326",
                "size": 2194
              },
              {
                "crc32": "3d3ad152",
                "name": "wi01p079.u79",
                "sha1": "a769bc80514873c2f238e6c8842c5b23596b4a42",
                "size": 2194
              },
              {
                "crc32": "657a4495",
                "name": "wi01p080.u80",
                "sha1": "c5bbd5e5f065a99f9f3d7ce89ca833779c338da5",
                "size": 2194
              },
              {
                "crc32": "b9958131",
                "name": "wi01p048.u48",
                "sha1": "058203eefb1645a446ff3ff4a170a673ad65076c",
                "size": 2706
              },
              {
                "crc32": "820d245a",
                "name": "wi01p049.u49",
                "sha1": "8690e6eb46617c3dc78e1b233970a9318101101c",
                "size": 2706
              },
              {
                "crc32": "4322291e",
                "name": "wi01p070.u70",
                "sha1": "e8751b585a4fb3f371e67616abf48c9d23847b77",
                "size": 2706
              },
              {
                "crc32": "fe77b66b",
                "name": "wi01p072.u72",
                "sha1": "aa13619346a566613f0fa9e3723419f65ffd3ea8",
                "size": 2706
              },
              {
                "crc32": "e02fe7c1",
                "name": "wi01p073.u73",
                "sha1": "ca22b30391453daae943007a0c04b5a28a958c18",
                "size": 2706
              },
              {
                "crc32": "fca2823c",
                "name": "wi01p074.u74",
                "sha1": "6628f1ba3827a3d333ed88c5f20ca94a1439c75e",
                "size": 2706
              },
              {
                "crc32": "902731aa",
                "name": "wi01p083.u83",
                "sha1": "862c2e6fb75fbd712aeaf9eb3b8a84210332fa66",
                "size": 2706
              },
              {
                "crc32": "f996657e",
                "name": "wi01p092.u92",
                "sha1": "01c2c774a9d5f4bcb78742cd606864eff512bfce",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p000.u23",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p001.u32",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p002.u22",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p003.u31",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p004.u6",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p005.u14",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p006.u5",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p007.u13",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "7c421890",
                "name": "wi02p008.u51",
                "sha1": "49d0ab674a8cb4e18ae5ba570132111ed3ccd546",
                "size": 2194
              },
              {
                "crc32": "ff63d60c",
                "name": "wi02p009.u49",
                "sha1": "8ee8629cc24cd18b944ffab3830ed474a1189179",
                "size": 2194
              },
              {
                "crc32": "68f48053",
                "name": "wi02p010.u72",
                "sha1": "17ae9f5caa4b2f4ff700ce44294d3d2881bd4e62",
                "size": 2194
              },
              {
                "crc32": "78701d0f",
                "name": "wi02p011.u88",
                "sha1": "089d5df945638cb811caa963430f5d6658c68947",
                "size": 2194
              },
              {
                "crc32": "1c489ff9",
                "name": "wi02p012.u85",
                "sha1": "a0e1c00c9a5dd870b84f869070961d25724cea92",
                "size": 2194
              },
              {
                "crc32": "19de958f",
                "name": "wi02p013.u86",
                "sha1": "a160f6b0e2a7e42457b470dbcf9415feaad880aa",
                "size": 2194
              },
              {
                "crc32": "845e4d48",
                "name": "wi02p014.u82",
                "sha1": "6aaeabad0e86fe480773b4b51ca4f7c1c8935993",
                "size": 2194
              },
              {
                "crc32": "a10d1876",
                "name": "wi02p015.u74",
                "sha1": "4091fa0a3abb2baeabcc6b250342cf29829af21a",
                "size": 2194
              },
              {
                "crc32": "d84b58c2",
                "name": "wi02p016.u52",
                "sha1": "087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399",
                "size": 2194
              }
            ],
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/misc/su2000.cpp:302"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1fd27e22",
                "description": "V4-60",
                "name": "v4-60.ic29",
                "sha1": "b103d365eac3fa447c2e9addddf6974b4403ed41",
                "size": 32768
              },
              {
                "crc32": "87cf66c1",
                "description": "V4-55",
                "name": "v4-55.ic29",
                "sha1": "d6b42137be7a07a0e299c2d922328a6a9a2b7b8f",
                "size": 32768
              },
              {
                "crc32": "125e7a6e",
                "description": "V4-54",
                "name": "v4-54.ic29",
                "sha1": "6f03c49acaad4feb9c2187f84fc1cb5451d0eb2b",
                "size": 32768
              },
              {
                "crc32": "bccb53c9",
                "description": "V4-53",
                "name": "v4-53.ic29",
                "sha1": "a27113d70cf348c7eafa39fc7a76f55f63723ad7",
                "size": 32768
              },
              {
                "crc32": "ffd7b0fe",
                "description": "V4-52",
                "name": "v4-52.ic29",
                "sha1": "d1804865c91e925a01b05cf441e8458a3db23f50",
                "size": 32768
              },
              {
                "crc32": "2de0b946",
                "description": "V4-51",
                "name": "v4-51.ic29",
                "sha1": "c13051453aff3a2329f18ebade75c69aa3b1c28d",
                "size": 32768
              },
              {
                "crc32": "88da23f3",
                "description": "V4-43",
                "name": "v4-43.ic29",
                "sha1": "9d24faa116129783e55c7f79a4a08902a236d5a6",
                "size": 32768
              },
              {
                "crc32": "0372606d",
                "description": "V4-42",
                "name": "v4-42.ic29",
                "sha1": "8c6a63865b0b4951ea032725cf022d353115b93b",
                "size": 32768
              },
              {
                "crc32": "ba6290cc",
                "description": "V4-40",
                "name": "v4-40.ic29",
                "sha1": "92b0e9f55791e892ec209de4fadd80faef370622",
                "size": 32768
              },
              {
                "crc32": "36012f88",
                "description": "VT-20",
                "name": "vt_2.0.bin",
                "sha1": "5bd42fb51aa48ff65e704ea06a9181bb87ed2137",
                "size": 32768
              },
              {
                "crc32": "27abbc36",
                "description": "VT-11",
                "name": "vt_1.1.bin",
                "sha1": "881ea7802b9e241473bc8ced0472e0f1851c9886",
                "size": 32768
              }
            ],
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/pce/tourvis.cpp:448"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e996bc18",
                "name": "vid.p1",
                "sha1": "49798165640627eb31024319353da04380787b10",
                "size": 65536
              }
            ],
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/barcrest/mpu4vid.cpp:8698"
          },
          {
            "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": "a2b5546b",
                "description": "mk3 v1.0",
                "name": "mk3_1.0_bios.u22",
                "sha1": "d99d29615e2b9c8784e03d4270cf7bb6569f389d",
                "size": 131072
              },
              {
                "crc32": "4540c23f",
                "description": "mk3 v1.1",
                "name": "mk3_1.1_bios.u22",
                "sha1": "bba697dbe234e4f14c23aac126ea36df216f8c93",
                "size": 131072
              },
              {
                "crc32": "5911e31a",
                "name": "piu10.u8",
                "sha1": "295723b9b7da9e55b5dd5586b23b06355f4837ef",
                "size": 2097152
              },
              {
                "crc32": "9c436cfa",
                "name": "piu10.u9",
                "sha1": "480ea52e74721d1963ced41be5c482b7b913ccd2",
                "size": 2097152
              }
            ],
            "name": "pumpitup.zip",
            "required": true,
            "source_ref": "src/mame/misc/xtom3d.cpp:997"
          },
          {
            "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": "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": "cc6ac840",
                "description": "Standard BIOS",
                "name": "apf_4000.rom",
                "size": 2048
              },
              {
                "crc32": "3bd8640a",
                "description": "Trash II BIOS",
                "name": "trash-ii.bin",
                "size": 4096
              },
              {
                "crc32": "f320aba6",
                "description": "Mod BIOS (W. Lunquist 1982)",
                "name": "mod_bios.bin",
                "size": 4096
              }
            ],
            "name": "apfm1000.zip",
            "required": true,
            "source_ref": "src/mame/apf/apf.cpp:613",
            "system": "apf-m1000"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5471aaf8",
                "description": "SoC internal BIOS (ARM7, dumped via JTAG)",
                "name": "9h0-0008.bios.ic1",
                "size": 131072
              },
              {
                "crc32": "ed336d29",
                "description": "SoC MIDI synthesizer PCM data",
                "name": "9h0-0008.midipcm.ic1",
                "size": 32768
              }
            ],
            "name": "beena.zip",
            "required": true,
            "source_ref": "src/mame/sega/sega_beena.cpp:2237-2249",
            "system": "sega-beena"
          },
          {
            "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": "62402ac9",
                "description": "OS ROM with SEGA PROLOG (128KB)",
                "name": "mpr-7689.ic5",
                "size": 131072
              },
              {
                "crc32": "c8b6a539",
                "description": "EPROM bank E000",
                "name": "e000 8_24.ic3",
                "size": 65536
              },
              {
                "crc32": "64d6cd8c",
                "description": "EPROM bank F000",
                "name": "f000 7_21.ic4",
                "size": 65536
              },
              {
                "crc32": "d1aea002",
                "description": "UPD7759 speech ROM bank 0",
                "name": "mpr-7619.ic14",
                "size": 131072
              },
              {
                "crc32": "e042754b",
                "description": "UPD7759 speech ROM bank 1",
                "name": "mpr-7620.ic15",
                "size": 131072
              }
            ],
            "name": "segaai.zip",
            "required": true,
            "source_ref": "src/mame/sega/segaai.cpp:730-739",
            "system": "sega-ai"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ef2dabc0",
                "description": "Sound Box expansion ROM",
                "name": "ai-snd-2002-cecb.bin",
                "size": 65536
              }
            ],
            "name": "segaai_soundbox.zip",
            "note": "Sound Box expansion (AI-2002) with YM2151 FM + music keyboard",
            "required": false,
            "source_ref": "src/devices/bus/segaai/soundbox.cpp:152-155",
            "system": "sega-ai"
          },
          {
            "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": "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": "387fbc24",
                "description": "System ROM v1.03 (default, also used on V.Smile Pocket)",
                "name": "vsmile_v103.bin",
                "size": 2097152
              },
              {
                "crc32": "0cd0bdf5",
                "description": "System ROM v1.02 (found in fat model systems)",
                "name": "vsmile_v102.bin",
                "size": 2097152
              },
              {
                "crc32": "205c5296",
                "description": "System ROM v1.00",
                "name": "vsmile_v100.bin",
                "size": 2097152
              }
            ],
            "name": "vsmile.zip",
            "note": "MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS. Clone: vsmilem (V.Smile Motion).",
            "required": true,
            "source_ref": "src/mame/vtech/vsmile.cpp:364-394",
            "system": "vtech-vsmile",
            "validation": [
              "crc32"
            ]
          },
          {
            "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": "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": "b1e35643",
                "description": "Firmware 1.5.7 (English, default)",
                "name": "gp32157e.bin",
                "size": 524288
              },
              {
                "crc32": "d9925ac9",
                "description": "Firmware 1.0.0 (Korean)",
                "name": "gp32100k.bin",
                "size": 524288
              },
              {
                "crc32": "667fb1c8",
                "description": "Firmware 1.5.6 (Korean)",
                "name": "gp32156k.bin",
                "size": 524288
              },
              {
                "crc32": "4548a840",
                "description": "Firmware 1.6.6 (European)",
                "name": "gp32166m.bin",
                "size": 524288
              },
              {
                "crc32": "7ddaaaeb",
                "description": "Mr. Spiv Multi Firmware V2",
                "name": "gp32mfv2.bin",
                "size": 524288
              },
              {
                "crc32": "eeec10d8",
                "description": "32 Macrocell CoolRunner-II CPLD (JEDEC)",
                "name": "x2c32.jed",
                "size": 15291
              }
            ],
            "name": "gp32.zip",
            "required": true,
            "source_ref": "src/mame/gamepark/gp32.cpp:1710-1727",
            "system": "gamepark-gp32"
          },
          {
            "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": "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": "ee8890ae",
                "description": "i8041 9-pin dot-matrix printer MCU",
                "name": "40026.ic701",
                "size": 1024
              },
              {
                "crc32": "25260958",
                "description": "i8048 keyboard MCU",
                "name": "40027.ic801",
                "size": 1024
              }
            ],
            "name": "pcw8256.zip",
            "note": "Amstrad PCW8256 parent ROM set. Z80-based word processor/computer (1985).\n6 machines: pcw8256 (parent), pcw8512, pcw9256, pcw9512, pcw9512+, pcw10.\nAll MACHINE_NOT_WORKING. No main CPU ROM (boots from CP/M floppy).\nPrinter MCU boot code copied into Z80 RAM at machine_reset.\nClones pcw8512/pcw9256/pcw10 share parent ROMs. pcw9512/pcw9512+ use\nseparate daisywheel printer MCU (pcw9512.zip).\n",
            "required": true,
            "source_ref": "src/mame/amstrad/pcw.cpp:1402",
            "system": "pcw"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a64d450a",
                "description": "i8041 daisywheel printer MCU",
                "name": "40103.ic109",
                "size": 8192
              }
            ],
            "name": "pcw9512.zip",
            "note": "Amstrad PCW9512 clone ROM set. Daisywheel printer variant (1987).\nUses different printer MCU (40103.ic109) than 9-pin models.\nKeyboard MCU (40027.ic801) inherited from parent pcw8256.zip.\n",
            "required": true,
            "source_ref": "src/mame/amstrad/pcw.cpp:1429",
            "system": "pcw"
          },
          {
            "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": "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": "702c38ba",
                "description": "System ROM",
                "name": "tutor1.bin",
                "size": 32768
              },
              {
                "crc32": "05f228f5",
                "description": "BASIC ROM",
                "name": "tutor2.bin",
                "size": 16384
              }
            ],
            "name": "tutor.zip",
            "note": "Tomy Tutor home computer (1983). TMS9995 CPU @10.7MHz, TMS9928A VDP, SN76489AN sound. 3 machines: tutor (parent, US/UK), pyuuta (clone, Japan 1982), pyuutajr (separate parent, handheld 1983). Software list \"tutor\".",
            "required": true,
            "source_ref": "src/mame/tomy/tutor.cpp:796-799",
            "system": "tutor"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6f4a0ea",
                "description": "BASIC v1.1 ROM (default)",
                "name": "vg5k11.bin",
                "size": 16384
              },
              {
                "crc32": "57983260",
                "description": "BASIC v1.0 ROM (BAD_DUMP)",
                "name": "vg5k10.bin",
                "size": 16384
              },
              {
                "crc32": "b2f49eb3",
                "description": "EF9345 character generator (BAD_DUMP, from DCVG5K)",
                "name": "charset.rom",
                "size": 8192
              }
            ],
            "name": "vg5k.zip",
            "note": "Philips VG-5000mu home computer (1984). Z80 @4MHz, EF9345 video, 24KB RAM. AZERTY keyboard. Variants: Radiola VG5000, Schneider VG5000. MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE. Two BASIC ROM versions (v1.0, v1.1). Software list \"vg5k\" (cassettes).",
            "required": true,
            "source_ref": "src/mame/philips/vg5k.cpp:463-472",
            "system": "philips-vg5k"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d6cf5ef5",
                "description": "QSound DSP microcode",
                "name": "dl-1425.bin",
                "size": 24576
              }
            ],
            "name": "qsound.zip",
            "note": "QSound DSP program ROM. Required by qsound_device and qsound_hle_device for Capcom QSound audio (CPS-2, CPS-3, ZN).",
            "required": false,
            "source_ref": "src/devices/sound/qsound.cpp:121-125",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6f582d01",
                "description": "OPLL preset instrument table",
                "name": "ym2413_instruments.bin",
                "size": 144
              }
            ],
            "name": "ym2413.zip",
            "note": "YM2413 (OPLL) instrument ROM table. Required by ym2413_device for FM synthesis preset instruments.",
            "required": false,
            "source_ref": "src/devices/sound/ymopl.cpp:218-223",
            "validation": [
              "crc32"
            ]
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "23c9e0d8",
                "description": "OPNA ADPCM rhythm samples",
                "name": "ym2608_adpcm_rom.bin",
                "size": 8192
              }
            ],
            "name": "ym2608.zip",
            "note": "YM2608 (OPNA) ADPCM rhythm sample ROM. Required by ym2608_device for internal rhythm sound source (bass drum, snare, cymbal, hi-hat, tom, rim shot).",
            "required": false,
            "source_ref": "src/devices/sound/ymopn.cpp:76-91",
            "validation": [
              "crc32"
            ]
          },
          {
            "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": "e51ff184",
                "name": "galaxy_u2__v1.90_12-01-98.u2",
                "sha1": "aaa795f2c15ec29b3ceeb5c917b643db0dbb7083",
                "size": 1048576
              },
              {
                "crc32": "c6d7bc6d",
                "name": "galaxy_u1__v1.90_12-01-98.u1",
                "sha1": "93c032f9aa38cbbdda59a8a25ff9f38f7ad9c760",
                "size": 1048576
              },
              {
                "crc32": "73cff284",
                "name": "galaxy_u2__v1.80_10-15-98.u2",
                "sha1": "e6f7d92999cdb478c21c3b65a04eade84299ac12",
                "size": 1048576
              },
              {
                "crc32": "e3ae423c",
                "name": "galaxy_u1__v1.80_10-15-98.u1",
                "sha1": "66d1964845a99a5ed4b19b4135b55cde6b5fe295",
                "size": 1048576
              },
              {
                "crc32": "d1c3dbb3",
                "name": "galaxy_u2__v1.71_7-8-98.u2",
                "sha1": "ebe74ed7f2d8c4abcd6743b9d9c77cc347efc444",
                "size": 1048576
              },
              {
                "crc32": "604415c8",
                "name": "galaxy_u1__v1.71_7-8-98.u1",
                "sha1": "6c67c3be1aca03d009b6244e3bd911caaa2ca666",
                "size": 1048576
              }
            ],
            "name": "galgames.zip",
            "required": true,
            "source_ref": "src/mame/ces/galgames.cpp:1301"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "notes": "Rolling release tracking mamedev/mame upstream (currently 0.286).\n81 BIOS root sets + 28 system ROM sets + 3 device ROMs (apple2gs, astrocade, adam, advision, apfm1000, beena, camplynx, casloopy, crvision, fm7, gamate, gamecom, gamepock, gmaster, gp32, laser310, pcw, pegasus, pv2000, rx78, segaai, socrates, ti99_4a, trs80, tutor, vg5k, vis, vsmile). romload.cpp\nunmodified. No hiscore support.\nPaths under system_dir/mame/ (artwork, cheat, hash, ini, plugins,\nsamples, crosshair). ROM search: content_dir + system_dir/mame/bios +\nsystem_dir/mame/roms. Cheats via per-game XML files.\n\nBIOS root set names follow current MAME conventions. ZN-based boards\nrenamed from legacy names (cpzn1 → coh1000c, atpsx → coh1000a, etc.).\nFile structure uses vendor-based paths (src/mame/{vendor}/).\n\nTI-99/4A: 6 machines in ti99_4x.cpp — ti99_4 parent (TI-99/4 1979),\nti99_4e clone (Europe), ti99_4a parent (TI-99/4A 1981), ti99_4ae clone\n(Europe), ti99_4qi clone (QI version 1983), ti99_4ev clone (with EVPC\n1994). 5 ROMs per parent set: 3 GROMs (u500-u502) + 2 CPU ROMs\n(u610-u611, 16-bit interleaved). Speech Synthesizer sidecar device\n(speechsyn.cpp) with 2 TMS6100 vocabulary ROMs. Software list\n\"ti99_cart\". Peripheral Expansion Box with optional device ROMs (FDC,\nRS232, HFDC, P-Code, EVPC, etc.) — all PEB devices require user\nconfiguration, none loaded by default.\n\nVGMPlay: virtual driver (src/mame/virtual/vgmplay.cpp) for playing VGM\nmusic files. Standalone MAME only — not included in libretro/mame build.\nUses MAME sound chip devices (QSound, YM2413/OPLL, YM2608/OPNA, etc.).\n\nV.Smile: 2 machines in vsmile.cpp — vsmile parent (V.Smile 2005),\nvsmilem clone (V.Smile Motion 2008). SunPlus SPG24x CPU, 3 BIOS\nalternatives (v100, v102, v103). Clone vsmilem has 2 alternate\nBIOSes. Software lists \"vsmile_cart\", \"vsmilem_cart\". vsmileb.cpp\nis V.Smile Baby (separate parent, MACHINE_NOT_WORKING).\nvsmilepro.cpp is V.Smile Pro (skeleton, MACHINE_NOT_WORKING).\n\nDevice ROMs: sound chip ROM data loaded by MAME device emulation.\nqsound.zip (QSound DSP program), ym2413.zip (OPLL instrument table),\nym2608.zip (OPNA ADPCM rhythm samples). Shared across all drivers\nusing these chips, not specific to vgmplay.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/libretro/mame",
        "source_commit": "c4127c164af8fcf0aea781cc039aaf9b8044696d",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-lindbergh",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "konami-twinkle",
          "panasonic-3do",
          "hyper-neogeo64",
          "apple2gs",
          "apf-m1000",
          "bally-astrocade",
          "coleco-adam",
          "crvision",
          "entex-advision",
          "sega-ai",
          "sega-beena",
          "bandai-rx78",
          "camplynx",
          "tiger-game-com",
          "gamepark-gp32",
          "gamate",
          "gamepock",
          "hartung-game-master",
          "fm7",
          "laser310",
          "vtech-socrates",
          "vtech-vsmile",
          "casio-loopy",
          "casio-pv1000",
          "casio-pv2000",
          "pegasus",
          "pcw",
          "interton-vc4000",
          "philips-vg5k",
          "ti99",
          "tutor",
          "tandy-vis",
          "trs80",
          "vgmplay"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/mamedev/mame",
        "upstream_commit": "728d957663041fbc943806bf151584acd03e2160"
      }
    },
    {
      "id": "mame2000",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.37b5",
        "cores": [
          "mame2000"
        ],
        "display_name": "Arcade (MAME 2000)",
        "emulator": "MAME 2000",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, loaded from ROM directory",
            "required": false,
            "source_ref": "src/hiscore.c:18,252-254"
          },
          {
            "category": "game_data",
            "name": "cheat.dat",
            "note": "cheat definitions, loaded from system_dir/mame2000/cheat/",
            "path": "mame2000/cheat/cheat.dat",
            "required": false,
            "source_ref": "src/cheat.c:210, src/cheat.c:618, src/cheat.c:833"
          },
          {
            "category": "game_data",
            "name": "history.dat",
            "note": "game history database, loaded from ROM directory",
            "required": false,
            "source_ref": "src/datafile.c:52,281,541"
          },
          {
            "category": "game_data",
            "name": "mameinfo.dat",
            "note": "game technical info database, loaded from ROM directory",
            "required": false,
            "source_ref": "src/datafile.c:53,281,568"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "description": "68K BIOS",
                "name": "neo-geo.rom",
                "size": 131072
              },
              {
                "crc32": "97cf998b",
                "description": "Z80 sound BIOS",
                "name": "ng-sm1.rom",
                "size": 131072
              },
              {
                "crc32": "354029fc",
                "description": "fix layer tiles",
                "name": "ng-sfix.rom",
                "size": 131072
              }
            ],
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/drivers/neogeo.c:4499-4508",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "23d929b7",
                "description": "6502 BIOS",
                "name": "rms8.cpu",
                "size": 4096
              },
              {
                "crc32": "b66b2c2a",
                "description": "audio CPU",
                "name": "rms8.snd",
                "size": 2048
              }
            ],
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/drivers/btime.c:1996-2005",
            "system": "deco-cassette"
          }
        ],
        "notes": "Frozen snapshot of MAME 0.37b5 via iMAME4All (David Valdeita). Fastest and\nleast accurate MAME core. Supports ~2000 arcade games from the 0.37b5 ROM set.\n\nBIOS handling follows MAME 0.37b5 conventions. Shared BIOS files are packaged\nas parent ROM ZIPs (e.g. neogeo.zip) and placed in the ROM directory alongside\ngame ROMs. The core searches only the ROM directory for ROMs and BIOS sets.\n\nSamples (per-game WAV files) are loaded from system_dir/mame2000/samples/.\nThey provide sound effects for certain games and are optional.\n\nhiscore.dat, history.dat and mameinfo.dat are loaded from the ROM directory.\ncheat.dat is loaded from system_dir/mame2000/cheat/.\nhiscore.dat and cheat.dat are bundled in the core repo (metadata/).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame2000-libretro",
        "source_commit": "f099ba44c7664906fd7e01cbed89d13a7e32dee1",
        "systems": [
          "snk-neogeo-mvs",
          "deco-cassette"
        ],
        "type": "libretro",
        "upstream": "https://www.mamedev.org"
      }
    },
    {
      "id": "mame2003",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.78",
        "cores": [
          "mame2003"
        ],
        "display_name": "Arcade (MAME 2003)",
        "emulator": "MAME 2003",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, auto-generated if missing",
            "path": "mame2003/hiscore.dat",
            "required": false,
            "source_ref": "src/hiscore.c:14,248"
          },
          {
            "category": "game_data",
            "name": "cheat.dat",
            "note": "cheat definitions, requires cheats core option enabled",
            "path": "mame2003/cheat.dat",
            "required": false,
            "source_ref": "src/cheat.c:383,8249-8255"
          },
          {
            "category": "game_data",
            "name": "history.dat",
            "note": "game history and information database",
            "path": "mame2003/history.dat",
            "required": false,
            "source_ref": "src/datafile.c:327, src/datafile.c:578"
          },
          {
            "category": "game_data",
            "name": "mameinfo.dat",
            "note": "game technical information database",
            "path": "mame2003/mameinfo.dat",
            "required": false,
            "source_ref": "src/datafile.c:327, src/datafile.c:637-641"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "description": "Europe MVS v2, default",
                "name": "sp-s2.sp1"
              },
              {
                "crc32": "c7f2fa45",
                "description": "Europe MVS v1, 4 slot",
                "name": "sp-s.sp1"
              },
              {
                "crc32": "e72943de",
                "description": "US MVS v2, 2 slot",
                "name": "usa_2slt.bin"
              },
              {
                "crc32": "2723a5b5",
                "description": "US MVS v1, 6 slot",
                "name": "sp-e.sp1"
              },
              {
                "crc32": "91b64be3",
                "description": "Asia",
                "name": "asia-s3.rom"
              },
              {
                "crc32": "f0e8f27d",
                "description": "Japan VS v6",
                "name": "vs-bios.rom"
              },
              {
                "crc32": "acede59c",
                "description": "Japan, older",
                "name": "sp-j2.rom"
              },
              {
                "crc32": "97cf998b",
                "description": "Z80 sound BIOS, always required",
                "name": "sm1.sm1",
                "size": 131072
              },
              {
                "crc32": "354029fc",
                "description": "fix layer tiles",
                "name": "sfix.sfx",
                "size": 131072
              },
              {
                "crc32": "e09e253c",
                "description": "Y zoom control",
                "name": "000-lo.lo",
                "size": 65536
              }
            ],
            "name": "neogeo.zip",
            "note": "MVS/AES BIOS, 7 official variants",
            "required": true,
            "source_ref": "src/drivers/neogeo.c:1544-1556,5661-5675",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "68K BIOS",
                "name": "pgm_p01s.rom",
                "size": 131072
              },
              {
                "description": "text tiles",
                "name": "pgm_t01s.rom",
                "size": 2097152
              },
              {
                "description": "samples",
                "name": "pgm_m01s.rom",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/drivers/pgm.c:946",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/drivers/stv.c:4597",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/drivers/segac2.c:4483",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/drivers/segac2.c:4405",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/drivers/decocass.c:1086",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/drivers/playch10.c:1680",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/drivers/nss.c:406",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/drivers/suprnova.c:1668",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/drivers/konamigx.c:3392",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f055a624",
                "description": "sound CPU",
                "name": "5b.bin",
                "size": 2048
              },
              {
                "crc32": "c205bca6",
                "description": "PROM",
                "name": "82s185.10h",
                "size": 2048
              },
              {
                "crc32": "b5221cec",
                "description": "PROM",
                "name": "82s123.10k",
                "size": 32
              }
            ],
            "name": "cvs.zip",
            "required": true,
            "source_ref": "src/drivers/cvs.c:475-482,1350",
            "system": "century-cvs"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "note": "Capcom ZN-1 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1879",
            "system": "zn1-capcom"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "note": "Capcom ZN-2 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1898",
            "system": "zn2-capcom"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "note": "Taito FX-1 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1955",
            "system": "zn1-taito"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "note": "Tecmo TPS BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1936",
            "system": "zn1-tecmo"
          },
          {
            "category": "bios_zip",
            "name": "sncwgltd.zip",
            "note": "Video System KN BIOS (PS1-based). NOT_WORKING",
            "required": false,
            "source_ref": "src/drivers/zn.c:1948",
            "system": "zn1-video-system"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "note": "Acclaim PSX BIOS (PS1-based). NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1925",
            "system": "zn1-acclaim"
          }
        ],
        "notes": "Frozen snapshot of MAME 0.78 (xmame, January 2003). Stock version without\nthe Plus patches. Targets low-end hardware (Raspberry Pi, SBCs).\n\nBIOS ZIPs are loaded from {content_dir}/ (same folder as the game ROM).\n\nData files (hiscore.dat, cheat.dat, history.dat, mameinfo.dat) are loaded\nfrom system_dir/mame2003/. Samples from system_dir/mame2003/samples/.\n\nNeo Geo uses 7 official BIOS variants. Universe BIOS is commented out\nin the stock source (available in mame2003_plus).\n\nROM naming follows MAME 0.78 conventions.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame2003-libretro",
        "source_commit": "6c32fa9fc005d7e924909c6ff4684da9abb00ceb",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-stv",
          "sega-megaplay",
          "sega-megatech",
          "deco-cassette",
          "nintendo-playch10",
          "nintendo-nss",
          "super-kaneko-nova",
          "konami-gx",
          "century-cvs",
          "zn1-capcom",
          "zn2-capcom",
          "zn1-taito",
          "zn1-tecmo",
          "zn1-video-system",
          "zn1-acclaim"
        ],
        "type": "libretro",
        "upstream": "https://www.mamedev.org"
      }
    },
    {
      "id": "mame2003_midway",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.78",
        "cores": [
          "mame2003_midway"
        ],
        "display_name": "Arcade (MAME 2003 Midway)",
        "emulator": "MAME 2003 Midway",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, loaded from system_dir/mame2003/",
            "path": "mame2003/hiscore.dat",
            "required": false,
            "source_ref": "src/hiscore.c:18,225"
          },
          {
            "category": "game_data",
            "name": "cheat.dat",
            "note": "cheat definitions, loaded from system_dir/mame2003/",
            "path": "mame2003/cheat.dat",
            "required": false,
            "source_ref": "src/cheat.c:839,8597-8607"
          },
          {
            "category": "game_data",
            "name": "history.dat",
            "note": "game history database, loaded from system_dir/mame2003/",
            "path": "mame2003/history.dat",
            "required": false,
            "source_ref": "src/datafile.c:51,619-623"
          },
          {
            "category": "game_data",
            "name": "mameinfo.dat",
            "note": "game technical information database, loaded from system_dir/mame2003/",
            "path": "mame2003/mameinfo.dat",
            "required": false,
            "source_ref": "src/datafile.c:52,649-653"
          }
        ],
        "notes": "Stripped-down MAME 0.78 build with only 4 Midway driver files\n(midtunit, midwunit, midxunit, midyunit). Targets RAM-constrained\ndevices that cannot load the full mame2003 core. Supports ~50 games\n(Mortal Kombat series, NBA Jam, Smash TV, Total Carnage, etc.).\n\nNo shared BIOS ZIPs needed — all Midway games are self-contained ROM sets.\n\nUses system_dir/mame2003/ for data files (shared path with mame2003).\nData files are not bundled in this repo.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame2003_midway",
        "source_commit": "52d8432b13fb2be032abccdf465b9fee94078080",
        "systems": [],
        "type": "libretro",
        "upstream": "https://www.mamedev.org"
      }
    },
    {
      "id": "mame2003_plus",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "2003-Plus",
        "cores": [
          "mame2003_plus",
          "mame078plus"
        ],
        "display_name": "Arcade (MAME 2003-Plus)",
        "emulator": "MAME 2003-Plus",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, compiled into binary and spawned on first run",
            "path": "mame2003-plus/hiscore.dat",
            "required": false,
            "source_ref": "src/hiscore.c:15,248"
          },
          {
            "category": "game_data",
            "name": "cheat.dat",
            "note": "cheat definitions, requires cheats core option enabled",
            "path": "mame2003-plus/cheat.dat",
            "required": false,
            "source_ref": "src/cheat.c:383,8249-8255"
          },
          {
            "category": "game_data",
            "name": "history.dat",
            "note": "game history and information database",
            "path": "mame2003-plus/history.dat",
            "required": false,
            "source_ref": "src/datafile.c:327,608"
          },
          {
            "category": "game_data",
            "name": "mameinfo.dat",
            "note": "technical driver information, appended to history display",
            "path": "mame2003-plus/mameinfo.dat",
            "required": false,
            "source_ref": "src/datafile.c:327,638"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Europe MVS v2, default",
                "name": "sp-s2.sp1"
              },
              {
                "description": "Europe MVS v1",
                "name": "sp-s.sp1"
              },
              {
                "description": "US MVS v2",
                "name": "usa_2slt.bin"
              },
              {
                "description": "US MVS v1",
                "name": "sp-e.sp1"
              },
              {
                "description": "Asia MVS v3",
                "name": "asia-s3.rom"
              },
              {
                "description": "Japan MVS v6",
                "name": "vs-bios.rom"
              },
              {
                "description": "Japan MVS v2",
                "name": "sp-j2.sp1"
              },
              {
                "description": "Universe BIOS 4.0, hack",
                "name": "uni-bios_4_0.rom"
              },
              {
                "description": "Universe BIOS 3.3, hack",
                "name": "uni-bios_3_3.rom"
              },
              {
                "description": "Universe BIOS 2.0, hack",
                "name": "uni-bios_2_0.rom"
              },
              {
                "description": "Universe BIOS 1.3, hack",
                "name": "uni-bios_1_3.rom"
              },
              {
                "description": "Universe BIOS 1.1, hack",
                "name": "uni-bios_1_1.rom"
              },
              {
                "description": "Universe BIOS 1.0, hack",
                "name": "uni-bios_1_0.rom"
              },
              {
                "description": "Debug MVS",
                "name": "neodebug.rom"
              },
              {
                "description": "Asia AES",
                "name": "neo-epo.bin"
              },
              {
                "description": "Z80 sound BIOS",
                "name": "mame.sm1",
                "size": 131072
              },
              {
                "description": "fix layer tiles",
                "name": "sfix.sfx",
                "size": 131072
              },
              {
                "description": "Y zoom control",
                "name": "mamelo.lo",
                "size": 65536
              }
            ],
            "name": "neogeo.zip",
            "note": "MVS/AES BIOS, 15 variants including Universe BIOS 4.0",
            "required": true,
            "source_ref": "src/drivers/neogeo.c:1677-1714",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "68K BIOS",
                "name": "pgm_p01s.rom",
                "size": 131072
              },
              {
                "description": "text tiles",
                "name": "pgm_t01s.rom",
                "size": 2097152
              },
              {
                "description": "samples",
                "name": "pgm_m01s.rom",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "note": "PGM system BIOS - 68K program, text tiles, samples",
            "required": true,
            "source_ref": "src/drivers/pgm.c:3459-3468",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan",
                "name": "epr19730.ic8"
              },
              {
                "description": "Japan alt",
                "name": "mp17951a.s"
              },
              {
                "description": "USA",
                "name": "mp17952a.s"
              },
              {
                "description": "Japan alt 2",
                "name": "20091.bin"
              },
              {
                "description": "Taiwan",
                "name": "mp17953a.ic8"
              },
              {
                "description": "Europe",
                "name": "mp17954a.s"
              }
            ],
            "name": "stvbios.zip",
            "note": "ST-V (Saturn-based arcade) BIOS, 6 region variants",
            "required": true,
            "source_ref": "src/drivers/stv.c:3741-3767",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Mega Play BIOS v1",
                "name": "ep15294.ic2"
              },
              {
                "description": "Mega Play BIOS v2",
                "name": "megaplay.bin"
              }
            ],
            "name": "megaplay.zip",
            "note": "Mega Play BIOS, 2 versions",
            "required": true,
            "source_ref": "src/drivers/segac2.c:5794-5804",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Mega Tech BIOS",
                "name": "epr12664.20",
                "size": 32768
              }
            ],
            "name": "megatech.zip",
            "note": "Mega Tech BIOS - menu/instruction screen processor",
            "required": true,
            "source_ref": "src/drivers/segac2.c:5434-5437",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "6502 BIOS variant A",
                "name": "v0a-.7e"
              },
              {
                "description": "6502 BIOS variant B",
                "name": "rms8.cpu"
              },
              {
                "description": "audio CPU",
                "name": "rms8.snd",
                "size": 2048
              },
              {
                "description": "MCU",
                "name": "cass8041.bin",
                "size": 1024
              },
              {
                "description": "PROM",
                "name": "dsp8.3m"
              },
              {
                "description": "PROM",
                "name": "dsp8.10d"
              },
              {
                "description": "DRAM banking PROM",
                "name": "rms8.j3"
              }
            ],
            "name": "decocass.zip",
            "note": "DECO Cassette shared BIOS - 6502 CPU, sound, MCU, PROMs",
            "required": true,
            "source_ref": "src/drivers/decocass.c:696-727",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Z80 BIOS",
                "name": "pch1-c.8t",
                "size": 16384
              },
              {
                "description": "character ROM",
                "name": "pch1-c.8p"
              },
              {
                "description": "character ROM",
                "name": "pch1-c.8m"
              },
              {
                "description": "character ROM",
                "name": "pch1-c.8k"
              },
              {
                "description": "color PROM",
                "name": "82s129.6f"
              },
              {
                "description": "color PROM",
                "name": "82s129.6e"
              },
              {
                "description": "color PROM",
                "name": "82s129.6d"
              }
            ],
            "name": "playch10.zip",
            "note": "PlayChoice-10 BIOS - Z80 main CPU + character ROMs + PROMs",
            "required": true,
            "source_ref": "src/drivers/playch10.c:815-827",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "SPC700 boot ROM",
                "name": "spc700.rom",
                "size": 64
              },
              {
                "description": "NSS BIOS CPU",
                "name": "nss-c.dat",
                "size": 32768
              },
              {
                "description": "NSS BIOS CPU alt",
                "name": "nss-ic14.02",
                "size": 32768
              }
            ],
            "name": "nss.zip",
            "note": "Nintendo Super System BIOS - SPC700 boot ROM + BIOS CPU",
            "required": true,
            "source_ref": "src/drivers/nss.c:260-269",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Japan BIOS",
                "name": "sknsj1.u10",
                "size": 524288
              },
              {
                "description": "Europe BIOS",
                "name": "sknse1.u10",
                "size": 524288
              },
              {
                "description": "Asia BIOS",
                "name": "sknsa1.u10",
                "size": 524288
              },
              {
                "description": "USA BIOS",
                "name": "sknsu1.u10",
                "size": 524288
              }
            ],
            "name": "skns.zip",
            "note": "Super Kaneko Nova System BIOS, 4 region variants",
            "required": true,
            "source_ref": "src/drivers/suprnova.c:1226-1229",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "GX BIOS",
                "name": "300a01.34k",
                "size": 131072
              }
            ],
            "name": "konamigx.zip",
            "note": "Konami System GX BIOS",
            "required": true,
            "source_ref": "src/drivers/konamigx.c:2404",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Capcom ZN-1 BIOS",
                "name": "coh1002c.bin",
                "size": 524288
              }
            ],
            "name": "cpzn1.zip",
            "note": "Capcom ZN-1 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1016-1018",
            "system": "zn1-capcom"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Capcom ZN-2 BIOS",
                "name": "coh3002c.bin",
                "size": 524288
              }
            ],
            "name": "cpzn2.zip",
            "note": "Capcom ZN-2 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1274-1276",
            "system": "zn2-capcom"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Taito FX-1 BIOS",
                "name": "coh1002t.bin",
                "size": 524288
              }
            ],
            "name": "taitofx1.zip",
            "note": "Taito FX-1 BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1579-1581",
            "system": "zn1-taito"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Tecmo TPS BIOS",
                "name": "coh1002m.bin",
                "size": 524288
              }
            ],
            "name": "tps.zip",
            "note": "Tecmo TPS BIOS (PS1-based). Most games NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1466-1468",
            "system": "zn1-tecmo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "KN BIOS",
                "name": "coh1002v.bin",
                "size": 524288
              }
            ],
            "name": "sncwgltd.zip",
            "note": "Video System KN BIOS (PS1-based). NOT_WORKING",
            "required": false,
            "source_ref": "src/drivers/zn.c:1555-1557",
            "system": "zn1-video-system"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Acclaim PSX BIOS",
                "name": "coh1000a.bin",
                "size": 524288
              }
            ],
            "name": "acpsx.zip",
            "note": "Acclaim PSX BIOS (PS1-based). NOT_WORKING",
            "required": true,
            "source_ref": "src/drivers/zn.c:1815-1817",
            "system": "zn1-acclaim"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f055a624",
                "description": "sound CPU",
                "name": "5b.bin",
                "size": 2048
              },
              {
                "crc32": "c205bca6",
                "description": "PROM",
                "name": "82s185.10h",
                "size": 2048
              },
              {
                "crc32": "b5221cec",
                "description": "PROM",
                "name": "82s123.10k",
                "size": 32
              }
            ],
            "name": "cvs.zip",
            "required": true,
            "source_ref": "src/drivers/cvs.c:475-482,1393",
            "system": "century-cvs"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.78 (plus backports)",
        "notes": "MAME 2003-Plus is a libretro port of MAME 0.78 with backported drivers, bug fixes,\nand new game support contributed after the original 0.78 snapshot. It targets\nlow-end hardware (Raspberry Pi, handhelds) while expanding game compatibility\nbeyond stock 0.78.\n\nBIOS handling follows standard MAME conventions. Each arcade board with a shared\nBIOS defines a parent ROM set. Game drivers reference this parent, and the emulator\nmerges the parent ZIP contents at load time.\n\nBIOS ZIPs must be in {content_dir}/ (same folder as the game ROMs).\nThe core resolves parent ROMs by walking the clone_of chain within the\ncontent directory only (osd_get_path returns content_path for FILETYPE_ROM).\n\nROM naming follows MAME 0.78 conventions with some updates from the Plus patches.\nRequires a mame2003-plus-specific romset for full CRC32/SHA1 compatibility.\n\nNeo Geo uses mame.sm1, mamelo.lo, sfix.sfx naming. PGM uses pgm_p01s.rom naming.\nZN-1/ZN-2 boards are present but most games are NOT_WORKING (incomplete PS1\nemulation in the 0.78 codebase). PGM and ST-V have partial support.\n\nData files go in {system_dir}/mame2003-plus/. Samples in samples/ subfolder,\nartwork in artwork/ subfolder (both per-game ZIPs). hiscore.dat is compiled\ninto the binary and auto-generated on first run if absent.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame2003-plus-libretro",
        "source_commit": "d6bf36f65f36853120d7e97cdf4fa3720de66728",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-stv",
          "sega-megaplay",
          "sega-megatech",
          "deco-cassette",
          "nintendo-playch10",
          "nintendo-nss",
          "super-kaneko-nova",
          "konami-gx",
          "zn1-capcom",
          "zn2-capcom",
          "zn1-taito",
          "zn1-tecmo",
          "zn1-video-system",
          "zn1-acclaim",
          "zn1-atlus",
          "century-cvs"
        ],
        "type": "libretro",
        "upstream": "https://www.mamedev.org"
      }
    },
    {
      "id": "mame2009",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.135u4",
        "cores": [
          "mame2009"
        ],
        "display_name": "Arcade (MAME 2009)",
        "emulator": "MAME 2009",
        "files": [
          {
            "category": "bios_zip",
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/neodrvr.c:7833",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.c:4375",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:4499",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:5869",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:5411",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:6254",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:4555",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:4557",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:4561",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/stv.c:3846",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.c:552",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.c:247",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.c:699",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.c:932",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.c:1159",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.c:1384",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.c:1637",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nss.c:593",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c:1685",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.c:3682",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.c:899",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/drivers/viper.c:1049",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:260",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:276",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.c:4664",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4386"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4405"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4484"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4452"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4441"
          },
          {
            "category": "bios_zip",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4507"
          },
          {
            "category": "bios_zip",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4526"
          },
          {
            "category": "bios_zip",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4432"
          },
          {
            "category": "bios_zip",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4474"
          },
          {
            "category": "bios_zip",
            "name": "taitogn.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.c:1294"
          },
          {
            "category": "bios_zip",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/alg.c:778"
          },
          {
            "category": "bios_zip",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.c:541"
          },
          {
            "category": "bios_zip",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.c:2357"
          },
          {
            "category": "bios_zip",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.c:833"
          },
          {
            "category": "bios_zip",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arcadia.c:804"
          },
          {
            "category": "bios_zip",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.c:2411"
          },
          {
            "category": "bios_zip",
            "name": "bctvidbs.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4drvr.c:2070"
          },
          {
            "category": "bios_zip",
            "name": "cd32.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cubocd32.c:1304"
          },
          {
            "category": "bios_zip",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.c:918"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.c:1726"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.c:1126"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:664"
          },
          {
            "category": "bios_zip",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:663"
          }
        ],
        "notes": "Frozen snapshot of MAME 0.135u4 (late 2009). Created for Wii U and\nmoderately low-powered devices. Hosted on r-type's GitHub (not in\nthe libretro org).\n\nBIOS ZIPs are loaded from the content directory (ROM folder).\nCheats use per-game XML files in system_dir/mame2009/cheat/.\nSamples in system_dir/mame2009/samples/.\nArtwork in system_dir/mame2009/artwork/.\nINI config files in system_dir/mame2009/ini/.\n\nNo hiscore.dat, history.dat, or mameinfo.dat support (unlike\nmame2000/mame2003). The hiscore path is disabled in the libretro\nwrapper.\n\n48 BIOS root sets. ROM naming follows MAME 0.135 conventions.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/r-type/mame2009-libretro",
        "source_commit": "45048806fbc0fea82709a75a523f2eda945e0a47",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "nintendo-nss",
          "sega-megaplay",
          "sega-megatech",
          "super-kaneko-nova",
          "konami-gx",
          "konami-gv",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0135u4"
      }
    },
    {
      "id": "mame2010",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.139",
        "cores": [
          "mame2010"
        ],
        "display_name": "Arcade (MAME 2010)",
        "emulator": "MAME 2010",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, embedded in binary by default, external via core option mame-external_hiscore",
            "path": "mame2010/hiscore.dat",
            "required": false,
            "source_ref": "src/emu/hiscore.c:25,353-358"
          },
          {
            "category": "game_data",
            "name": "cheat.zip",
            "note": "per-game XML cheat files in ZIP, cheatpath never initialized in libretro port (non-functional)",
            "path": "mame2010/cheat.zip",
            "required": false,
            "source_ref": "src/emu/cheat.c:1027"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Europe, default",
                "name": "sp-s2.sp1"
              },
              {
                "description": "US, 2 slot",
                "name": "usa_2slt.bin"
              },
              {
                "description": "Asia",
                "name": "asia-s3.rom"
              },
              {
                "description": "Japan VS",
                "name": "vs-bios.rom"
              },
              {
                "description": "MV1C Asia",
                "name": "sp-45.sp1",
                "size": 524288
              },
              {
                "description": "Z80 sound, always required",
                "name": "sm1.sm1"
              },
              {
                "description": "fix tiles, always required",
                "name": "sfix.sfix"
              },
              {
                "description": "zoom table, always required",
                "name": "000-lo.lo"
              }
            ],
            "name": "neogeo.zip",
            "note": "MVS/AES BIOS, 21 variants (11 official + 10 Universe BIOS up to 2.3)",
            "required": true,
            "source_ref": "src/mame/drivers/neodrvr.c:565-614",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "68K BIOS v2, default",
                "name": "pgm_p02s.u20"
              },
              {
                "description": "68K BIOS v1",
                "name": "pgm_p01s.u20"
              },
              {
                "description": "text tiles",
                "name": "pgm_t01s.rom",
                "size": 2097152
              },
              {
                "description": "samples",
                "name": "pgm_m01s.rom",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "note": "PGM system BIOS, 2 program ROM versions + shared tiles/samples",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.c:1525-1533",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "note": "Naomi BIOS, multiple region variants",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "note": "Naomi 2 BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "note": "Naomi GD-ROM BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "note": "Atomiswave BIOS (Sammy)",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "note": "ST-V BIOS, multiple region variants",
            "required": true,
            "source_ref": "src/mame/drivers/stv.c",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "note": "Hikaru BIOS (not working in 0.139)",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.c",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "chihiro.zip",
            "note": "Chihiro BIOS (Xbox-based, not working in 0.139)",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.c",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "name": "triforce.zip",
            "note": "Triforce BIOS (GameCube-based, not working in 0.139)",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.c",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "note": "DECO Cassette BIOS, 4 regions (Japan/USA/UK/Europe) x old/new",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.c",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "note": "PlayChoice-10 BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.c",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "note": "Nintendo Super System BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/nss.c",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "sfcbox.zip",
            "note": "Super Famicom Box BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/sfcbox.c",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "note": "Mega Play BIOS (Mega Drive arcade)",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.c",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "note": "Mega-Tech BIOS (Mega Drive arcade)",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.c",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "cd32.zip",
            "note": "Amiga CD32 BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/cubocd32.c",
            "system": "commodore-cd32"
          },
          {
            "category": "bios_zip",
            "name": "cdi.zip",
            "note": "CD-i BIOS",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.c",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "name": "sys246.zip",
            "note": "Namco System 246 BIOS (PS2-based)",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "name": "sys256.zip",
            "note": "Namco System 256 BIOS (PS2-based)",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "name": "sys573.zip",
            "note": "Namco System 573 BIOS (PSX-based)",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.c",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "name": "kviper.zip",
            "note": "Konami Viper BIOS (3dfx-based, not working in 0.139)",
            "required": true,
            "source_ref": "src/mame/drivers/viper.c",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "taitogn.zip",
            "note": "Taito G-Net BIOS (PSX-based)",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.c",
            "system": "taito-type-x"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "note": "Capcom ZN-1 BIOS (PSX-based)",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "note": "Capcom ZN-2 BIOS (PSX-based)",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "name": "konamigv.zip",
            "note": "Konami GV BIOS (PSX-based)",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.c",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "note": "Super Kaneko Nova System BIOS, 5 regions",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "alg_bios.zip",
            "note": "American Laser Games BIOS (Amiga-based laserdisc)",
            "required": true,
            "source_ref": "src/mame/drivers/alg.c",
            "system": "alg-laserdisc"
          },
          {
            "category": "bios_zip",
            "name": "maxaflex.zip",
            "note": "Exidy Max-A-Flex BIOS (Atari 600XL-based)",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.c",
            "system": "exidy-maxaflex"
          },
          {
            "category": "bios_zip",
            "name": "hng64.zip",
            "note": "Hyper Neo-Geo 64 BIOS (not working in 0.139)",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.c",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.c"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c"
          },
          {
            "category": "bios_zip",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.c"
          },
          {
            "category": "bios_zip",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitotz.c"
          },
          {
            "category": "bios_zip",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arcadia.c"
          },
          {
            "category": "bios_zip",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.c"
          },
          {
            "category": "bios_zip",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.c"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.c"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.c"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c"
          },
          {
            "category": "bios_zip",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c"
          },
          {
            "category": "bios_zip",
            "name": "bctvidbs.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4drvr.c:3116"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.139",
        "notes": "Frozen snapshot of MAME 0.139 (mid-2010). Sourced from mame0139s.zip.\n51 BIOS root sets. Upstream comparison (tag mame0139): BIOS root sets\nidentical, romload.c modified (libretro_content_directory), hiscore.c\nadded (not in upstream), cheat.c modified (cheatpath global).\n\nhiscore.dat is embedded in binary (precompile/hiscore_dat.h). External\nhiscore.dat loadable via core option mame-external_hiscore from\nsystem_dir/mame2010/. cheatpath declared but never initialized in\nlibretro port (cheat loading non-functional). Samples in\nsystem_dir/mame2010/samples/.\n\nROM naming follows MAME 0.139 conventions.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/mame2010-libretro",
        "source_commit": "484456818393505dd4367e6e4c116c573c04a1ec",
        "systems": [
          "snk-neogeo-mvs",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sega-stv",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "sega-model2",
          "commodore-cd32",
          "philips-cdi",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "snk-neogeo-aes",
          "sammy-atomiswave",
          "taito-type-x",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "cave-cv1000"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0139"
      }
    },
    {
      "id": "mame2015",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.160",
        "cores": [
          "mame2015"
        ],
        "display_name": "Arcade (MAME 2015)",
        "emulator": "MAME 2015",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, external file, not embedded",
            "path": "mame2015/hiscore.dat",
            "required": false,
            "source_ref": "src/emu/hiscore.c:335-337"
          },
          {
            "category": "bios_zip",
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/neogeo.c:1529",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.c:4147",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8960",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8965",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8966",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:9275",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "note": "game-specific BIOS for House of the Dead 2",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8961"
          },
          {
            "category": "bios_zip",
            "name": "f355dlx.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8962"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge twin",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8963"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "note": "game-specific BIOS for Airline Pilots deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8964"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/stv.c:3042",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.c:744",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.c:2192",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.c:1021",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/lindbergh.c:569",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.c:1647",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.c:1639",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nss.c:1058",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sfcbox.c:572",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.c:942",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.c:1393",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.c:611",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cubo.c:1362",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:672",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:705",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.c:4678",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/drivers/viper.c:2609",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.c:822",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.c:3775"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.c:1330",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "name": "taitogn.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.c:1081",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitotz.c:2951"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4906"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4800",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4823",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4853"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4862"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4873"
          },
          {
            "category": "bios_zip",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4896"
          },
          {
            "category": "bios_zip",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4935"
          },
          {
            "category": "bios_zip",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4961"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c:1734",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:747"
          },
          {
            "category": "bios_zip",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:746"
          },
          {
            "category": "bios_zip",
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/3do.c:253",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.c:1991",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arcadia.c:963"
          },
          {
            "category": "bios_zip",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/alg.c:772"
          },
          {
            "category": "bios_zip",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.c:1161"
          },
          {
            "category": "bios_zip",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.c:2368"
          },
          {
            "category": "bios_zip",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.c:536"
          },
          {
            "category": "bios_zip",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.c:1134"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.c:1850"
          },
          {
            "category": "bios_zip",
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk5.c:739"
          },
          {
            "category": "bios_zip",
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk6.c:224"
          },
          {
            "category": "bios_zip",
            "name": "mk6nsw11.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk6.c:225"
          },
          {
            "category": "bios_zip",
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/drivers/allied.c:711"
          },
          {
            "category": "bios_zip",
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gp_1.c:531"
          },
          {
            "category": "bios_zip",
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.c:978"
          },
          {
            "category": "bios_zip",
            "name": "gts1s.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.c:981"
          },
          {
            "category": "bios_zip",
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nemesis.c:2707"
          },
          {
            "category": "bios_zip",
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/segas16b.c:7501"
          },
          {
            "category": "bios_zip",
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/drivers/iteagle.c:315"
          },
          {
            "category": "bios_zip",
            "name": "pyson.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pyson.c:251"
          },
          {
            "category": "bios_zip",
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sigmab98.c:2277"
          },
          {
            "category": "bios_zip",
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/drivers/shtzone.c:121"
          },
          {
            "category": "bios_zip",
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/drivers/su2000.c:296"
          },
          {
            "category": "bios_zip",
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tourvis.c:612"
          },
          {
            "category": "bios_zip",
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4vid.c:3655"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.160",
        "notes": "Frozen snapshot of MAME 0.160 (mid-2015). 69 BIOS root sets. Upstream\ncomparison (tag mame0160): BIOS root sets identical, romload.c unmodified.\nhiscore.c added (not in upstream), per-game XML cheat support via\ncheat_path(). Paths under system_dir/mame2015/ (samples, artwork, cheat,\nhash). hiscore.dat loaded via f.open(\"hiscore\", \".dat\") without explicit\nsearch path (libretro-specific path code disabled via #if 0).\n\nROM naming follows MAME 0.160 conventions.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame2015-libretro",
        "source_commit": "283e04b03c121db9be12632d6bad2fc3e8707248",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-lindbergh",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "taito-gnet",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "panasonic-3do",
          "hyper-neogeo64",
          "konami-twinkle"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0160"
      }
    },
    {
      "id": "mame2016",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.174",
        "cores": [
          "mame2016",
          "mess2016"
        ],
        "display_name": "Arcade (MAME 2016)",
        "emulator": "MAME 2016",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "description": "Europe MVS v2, default",
                "name": "sp-s2.sp1"
              },
              {
                "description": "US MVS v2",
                "name": "sp-u2.sp1"
              },
              {
                "description": "Asia MVS v3",
                "name": "asia-s3.rom"
              },
              {
                "description": "Japan MVS v6 VS",
                "name": "vs-bios.rom"
              },
              {
                "description": "MV1C Asia",
                "name": "sp-45.sp1",
                "size": 524288
              },
              {
                "description": "Z80 sound, always required",
                "name": "sm1.sm1"
              },
              {
                "description": "fix tiles, always required",
                "name": "sfix.sfix"
              },
              {
                "description": "zoom table, always required",
                "name": "000-lo.lo"
              },
              {
                "description": "Universe BIOS 3.2, hack",
                "name": "uni-bios_3_2.rom"
              }
            ],
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/neogeo.cpp:2033",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.cpp:4518",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.cpp:9464",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.cpp:9469",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.cpp:9470",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.cpp:9788",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "note": "game-specific BIOS for House of the Dead 2",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.cpp:9465"
          },
          {
            "category": "bios_zip",
            "name": "f355dlx.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.cpp:9466"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge twin",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.cpp:9467"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "note": "game-specific BIOS for Airline Pilots deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.cpp:9468"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/stv.cpp:3404",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/lindbergh.cpp:585",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "name": "segasp.zip",
            "required": true,
            "source_ref": "src/mame/drivers/segasp.cpp:540"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.cpp:752",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.cpp:1487",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.cpp:1027",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sigmab98.cpp:2937"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.cpp:944",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.cpp:1411",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.cpp:1653",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.cpp:1660",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nss.cpp:1062",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sfcbox.cpp:574",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.cpp:1294",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cubo.cpp:1365",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.cpp:1582",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.cpp:1622",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.cpp:4691",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.cpp:3928"
          },
          {
            "category": "bios_zip",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.cpp:848",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/drivers/viper.cpp:2811",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.cpp:1334",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "name": "taitogn.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.cpp:1076",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitotz.cpp:2918"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4986"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4879",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4902",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4932"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4941"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4952"
          },
          {
            "category": "bios_zip",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:4976"
          },
          {
            "category": "bios_zip",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:5015"
          },
          {
            "category": "bios_zip",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.cpp:5041"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.cpp:1785",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.cpp:771"
          },
          {
            "category": "bios_zip",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.cpp:770"
          },
          {
            "category": "bios_zip",
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/3do.cpp:253",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.cpp:1994",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arsystems.cpp:974"
          },
          {
            "category": "bios_zip",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/alg.cpp:783"
          },
          {
            "category": "bios_zip",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.cpp:1166"
          },
          {
            "category": "bios_zip",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.cpp:2483"
          },
          {
            "category": "bios_zip",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.cpp:538"
          },
          {
            "category": "bios_zip",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.cpp:1415"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.cpp:1865"
          },
          {
            "category": "bios_zip",
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk5.cpp:2191"
          },
          {
            "category": "bios_zip",
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk6.cpp:2922"
          },
          {
            "category": "bios_zip",
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/drivers/allied.cpp:711"
          },
          {
            "category": "bios_zip",
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gp_1.cpp:531"
          },
          {
            "category": "bios_zip",
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.cpp:978"
          },
          {
            "category": "bios_zip",
            "name": "gts1s.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.cpp:981"
          },
          {
            "category": "bios_zip",
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nemesis.cpp:2720"
          },
          {
            "category": "bios_zip",
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/segas16b.cpp:9463"
          },
          {
            "category": "bios_zip",
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/drivers/iteagle.cpp:585"
          },
          {
            "category": "bios_zip",
            "name": "pyson.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pyson.cpp:253"
          },
          {
            "category": "bios_zip",
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/drivers/shtzone.cpp:123"
          },
          {
            "category": "bios_zip",
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/drivers/su2000.cpp:269"
          },
          {
            "category": "bios_zip",
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tourvis.cpp:550"
          },
          {
            "category": "bios_zip",
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4vid.cpp:3654"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.174",
        "notes": "Frozen snapshot of MAME 0.174 (mid-2016). 69 BIOS root sets. Upstream\ncomparison (tag mame0174): BIOS root sets identical, romload.cpp unmodified,\nno hiscore.c added. Shallowest libretro fork.\n\nCheats use per-game XML files loaded from system_dir/mame2016/cheat/.\nSamples in system_dir/mame2016/samples/.\nArtwork in system_dir/mame2016/artwork/.\nSoftware list hash XMLs in system_dir/mame2016/hash/ (437 files).\n\nROM naming follows MAME 0.174 conventions.\n",
        "profiled_date": "2026-03-22",
        "source": "https://github.com/libretro/mame2016-libretro",
        "source_commit": "3529f4e2cb8e74c88d83bc9fc9d695f78dc9a975",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-lindbergh",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "taito-gnet",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "panasonic-3do",
          "hyper-neogeo64",
          "konami-twinkle"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0174"
      }
    },
    {
      "id": "mame4droid",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.139u1",
        "cores": [
          "mame4droid",
          "MAME4DROID",
          "com.seleuco.mame4droid"
        ],
        "display_name": "Arcade (MAME4droid)",
        "emulator": "MAME4droid (0.139u1)",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "high score memory ranges per game",
            "name": "hiscore.dat",
            "note": "Opened from the installation root with an empty search path, once per session, when the hiscore setting is on. That setting is off by default on Android. Seeded from the package assets on first run; the hash identifies that drop, the engine reads the file without checking it. Definitions are keyed to the 0.139 driver names, so another MAME generation's file is a different one.",
            "path": "hiscore.dat",
            "required": false,
            "sha1": "c686635c5470e4711dbf817e8196dcb169fdc68d",
            "size": 219154,
            "source_ref": "src/emu/hiscore.c:29,365, src/emu/machine.c:379-382, src/osd/droid-ios/osd-droid.c:89,345"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "per-game XML cheat files",
            "name": "cheat.zip",
            "note": "cheat_list_load opens cheat/<gamename>.xml and fopen_attempt_zipped rewrites the directory component to cheat.zip. Loaded when the cheat setting is on. Seeded from the package assets on first run; the hash identifies that drop, the engine reads members without checking the container.",
            "path": "cheat.zip",
            "required": false,
            "sha1": "a737e925e3b86374da57496e3261d0303889977f",
            "size": 24981772,
            "source_ref": "src/emu/cheat.c:428,1026-1027, src/emu/fileio.c:276-352, src/emu/emuopts.c:48, src/osd/droid-ios/osdmain.c:317"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "game name to category map for the ROM list filter",
            "name": "Category.ini",
            "note": "Read from the installation root with a plain fopen the first time the category filter is used, then sorted for binary search. Seeded from the package assets on first run; the hash identifies that drop, the reader checks nothing.",
            "path": "Category.ini",
            "required": false,
            "sha1": "75d31d949614b7d4e79de676c8a4b1c68b571f0a",
            "size": 86983,
            "source_ref": "src/emu/uimenu.c:4600-4648"
          },
          {
            "category": "game_data",
            "description": "BDF font for the MAME menu overlay",
            "name": "ui.bdf",
            "note": "Opened from fontpath, which defaults to the installation root. A miss falls back to the font compiled into the binary. A successful load writes a ui.bdc cache next to it.",
            "path": "ui.bdf",
            "required": false,
            "source_ref": "src/emu/ui.c:245, src/emu/rendfont.c:139-163,430,453, src/emu/emuopts.c:47"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 1",
            "name": "cross1.png",
            "note": "create_bitmap looks in crosshair/<gamename>/ first, then crosshair/, and falls back to the bitmap compiled into the binary. Loaded only for players whose input has a crosshair axis.",
            "path": "crosshair/cross1.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174, src/emu/emuopts.c:49"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 2",
            "name": "cross2.png",
            "path": "crosshair/cross2.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 3",
            "name": "cross3.png",
            "path": "crosshair/cross3.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 4",
            "name": "cross4.png",
            "path": "crosshair/cross4.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 5",
            "name": "cross5.png",
            "path": "crosshair/cross5.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 6",
            "name": "cross6.png",
            "path": "crosshair/cross6.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 7",
            "name": "cross7.png",
            "path": "crosshair/cross7.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 8",
            "name": "cross8.png",
            "note": "MAX_PLAYERS is 8 in src/emu/inptport.h:29.",
            "path": "crosshair/cross8.png",
            "required": false,
            "source_ref": "src/emu/crsshair.c:169-174, src/emu/inptport.h:29"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "name": "usa_2slt.bin",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "91b64be3",
                "name": "asia-s3.rom",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "name": "sp-j2.sp1",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "03cc9f6a",
                "name": "sp-45.sp1",
                "sha1": "cdf1f49e3ff2bac528c21ed28449cf35b7957dc1",
                "size": 524288
              },
              {
                "crc32": "dff6d41f",
                "name": "japan-j3.bin",
                "sha1": "e92910e20092577a4523a6b39d578a71d4de7085",
                "size": 131072
              },
              {
                "crc32": "162f0ebe",
                "name": "sp-1v1_3db8c.bin",
                "sha1": "fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271",
                "size": 131072
              },
              {
                "crc32": "27664eb5",
                "name": "uni-bios_2_3.rom",
                "sha1": "5b02900a3ccf3df168bdcfc98458136fd2b92ac0",
                "size": 131072
              },
              {
                "crc32": "601720ae",
                "name": "uni-bios_2_3o.rom",
                "sha1": "1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9",
                "size": 131072
              },
              {
                "crc32": "2d50996a",
                "name": "uni-bios_2_2.rom",
                "sha1": "5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c",
                "size": 131072
              },
              {
                "crc32": "8dabf76b",
                "name": "uni-bios_2_1.rom",
                "sha1": "c23732c4491d966cf0373c65c83c7a4e88f0082c",
                "size": 131072
              },
              {
                "crc32": "0c12c2ad",
                "name": "uni-bios_2_0.rom",
                "sha1": "37bcd4d30f3892078b46841d895a6eff16dc921e",
                "size": 131072
              },
              {
                "crc32": "b24b44a0",
                "name": "uni-bios_1_3.rom",
                "sha1": "eca8851d30557b97c309a0d9f4a9d20e5b14af4e",
                "size": 131072
              },
              {
                "crc32": "4fa698e9",
                "name": "uni-bios_1_2.rom",
                "sha1": "682e13ec1c42beaa2d04473967840c88fd52c75a",
                "size": 131072
              },
              {
                "crc32": "e19d3ce9",
                "name": "uni-bios_1_2o.rom",
                "sha1": "af88ef837f44a3af2d7144bb46a37c8512b67770",
                "size": 131072
              },
              {
                "crc32": "5dda0d84",
                "name": "uni-bios_1_1.rom",
                "sha1": "4153d533c02926a2577e49c32657214781ff29b7",
                "size": 131072
              },
              {
                "crc32": "0ce453a0",
                "name": "uni-bios_1_0.rom",
                "sha1": "3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "5a86cff2",
                "name": "000-lo.lo",
                "sha1": "5992277debadeb64d1c1c64b0a92d9293eaf7e4a",
                "size": 131072
              },
              {
                "crc32": "c2ea0cfd",
                "name": "sfix.sfix",
                "sha1": "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3",
                "size": 131072
              }
            ],
            "description": "Neo-Geo",
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/neodrvr.c:8313",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "78c15fa2",
                "name": "pgm_p02s.u20",
                "sha1": "885a6558e022602cc6f482ac9667ba9f61e75092",
                "size": 131072
              },
              {
                "crc32": "e42b166e",
                "name": "pgm_p01s.u20",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "description": "PGM (Polygame Master) System BIOS",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.c:4965",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.ic27",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "crc32": "755a6e07",
                "name": "epr-21576b.ic27",
                "sha1": "7e8b8ccfc063144d89668e7224dcd8a36c54f3b3",
                "size": 2097152
              },
              {
                "crc32": "9dad3495",
                "name": "epr-21576.ic27",
                "sha1": "5fb66f9a2b68d120f059c72758e65d34f461044a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.ic27",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "6c9aad83",
                "name": "epr-21578b.ic27",
                "sha1": "555918de76d8dbee2a97d8a95297ef694b3e803f",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.ic27",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "7a50fab9",
                "name": "dcnaodev.bios",
                "sha1": "ef79f448e0bf735d1264ad4f051d24178822110f",
                "size": 524288
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi Bios",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:4594",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "297ea6ed",
                "name": "epr-23605c.bin",
                "sha1": "cfbfe57c80e6ee86a101fa83aec0a01e00c0f42a",
                "size": 2097152
              },
              {
                "crc32": "3a3242d4",
                "name": "epr-23605b.bin",
                "sha1": "aaca4df51ef91d926f8191d372f3dfe1d20d9484",
                "size": 2097152
              },
              {
                "crc32": "7bc3fc2d",
                "name": "epr-23605a.bin",
                "sha1": "a4a9531a7c66ff30046908cf71f6c7b6fb59c392",
                "size": 2097152
              },
              {
                "crc32": "5731e446",
                "name": "epr-23605.bin",
                "sha1": "787b0844fc408cf124c12405c095c59948709ea6",
                "size": 2097152
              },
              {
                "crc32": "6ef1dd8e",
                "name": "epr-23608c.bin",
                "sha1": "25ef957ec1c58fdaff5e89102002bca6c38832c5",
                "size": 2097152
              },
              {
                "crc32": "a554b1e3",
                "name": "epr-23608b.bin",
                "sha1": "343b727a3619d1c75a9b6d4cc156a9050447f155",
                "size": 2097152
              },
              {
                "crc32": "929cc3a6",
                "name": "epr-23608.bin",
                "sha1": "47d00c818de23f733a4a33b1bbc72eb8aa729246",
                "size": 2097152
              },
              {
                "crc32": "f308c5e9",
                "name": "epr-23607b.bin",
                "sha1": "5470ab1cee6afecbd8ca8cf40f8fbe4ec2cb1471",
                "size": 2097152
              },
              {
                "crc32": "2b55add2",
                "name": "epr-23607.bin",
                "sha1": "547de5f97d3183c8cd069c4fa3c09f13d8b637d9",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi 2 Bios",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:6232",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.bin",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.bin",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.bin",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.bin",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.bin",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.bin",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.bin",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.bin",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.bin",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "bc38bea1",
                "name": "fpr-23489c.ic14",
                "sha1": "b36fcc6902f397d9749e9d02de1bbb7a5e29d468",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi GD-ROM Bios",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:5746",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "bad_dump": true,
                "crc32": "e5693ce3",
                "name": "bios.ic23_l",
                "sha1": "1bde3ed87af64b0f675ebd47f12a53e1fc5709c1",
                "size": 65536
              }
            ],
            "description": "Atomiswave Bios",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:6625",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "065f8500",
                "name": "epr-21331.ic27",
                "sha1": "49a3881e8d76f952ef5e887200d77b4a415d47fe",
                "size": 2097152
              },
              {
                "crc32": "9e3bfa1b",
                "name": "epr-21330.ic27",
                "sha1": "b539d38c767b0551b8e7956c1ff795de8bbe2fbc",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi House of the Dead 2 Bios",
            "name": "hod2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:4654",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62483677",
                "name": "epr-22851.ic27",
                "sha1": "3e3bcacf5f972c376b569f45307ee7fd0b5031b7",
                "size": 2097152
              },
              {
                "crc32": "28aa539d",
                "name": "epr-22850.ic27",
                "sha1": "14485368656af80504b212da620179c49f84c1a2",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi Ferrari F355 Challenge Bios",
            "name": "f355bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:4657",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a77c6b1c",
                "name": "epr-21802.ic27",
                "sha1": "bd50a6bb8fa9bac121b076e21ea048a83a240a48",
                "size": 2097152
              },
              {
                "crc32": "a21bef24",
                "name": "epr-21801.ic27",
                "sha1": "c6c6ed09772b63a9a84ef0678fc1b7527484038a",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "eeprom-naomi-main-default.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              }
            ],
            "description": "Naomi Airline Pilots Deluxe Bios",
            "name": "airlbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:4661",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "59ed40f4",
                "name": "epr-20091.ic8",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "d0e0889d",
                "name": "epr-19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "name": "epr-17951a.ic8",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "3e23c81f",
                "name": "stvb111j.ic8",
                "sha1": "f9b282fd27693e9891843597b2e1823da3d23c7b",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "name": "epr-17740.ic8",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "name": "epr-17954a.ic8",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "name": "epr-17952a.ic8",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "name": "epr-17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "02daf123",
                "name": "stvb111t.ic8",
                "sha1": "23185beb1ce9c09b8719e57d1adb7b28c8141fd5",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              }
            ],
            "description": "ST-V Bios",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/stv.c:4037",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2aa906a7",
                "name": "epr23400a.ic94",
                "sha1": "098c9909b123ed6c338ac874f2ee90e3b2da4c02",
                "size": 2097152
              },
              {
                "crc32": "3d557104",
                "name": "epr-23400.ic94",
                "sha1": "d39879f5a1acbd54ad8ee4fbd412f870c9ff4aa5",
                "size": 2097152
              }
            ],
            "description": "Hikaru Bios",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.c:552",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "66232714",
                "name": "chihiro_xbox_bios.bin",
                "sha1": "b700b0041af8f84835e45d1d1250247bf7077188",
                "size": 524288
              },
              {
                "crc32": "a4fcab0b",
                "name": "fpr21042_m29w160et.bin",
                "sha1": "a13cf9c5cdfe8605d82150b7573652f419b30197",
                "size": 2097152
              },
              {
                "crc32": "cfc5e06f",
                "name": "ic10_g24lc64.bin",
                "sha1": "3ababd4334d8d57abb22dd98bd2d347df39648d9",
                "size": 8192
              },
              {
                "crc32": "8dc8374e",
                "name": "ic11_24lc024.bin",
                "sha1": "cc03a0650bfac4bf6cb66e414bbef121cba53efe",
                "size": 128
              },
              {
                "crc32": "7742ab62",
                "name": "pc20_g24lc64.bin",
                "sha1": "82dad6e2a75bab4a4840dc6939462f1fb9b95101",
                "size": 8192
              },
              {
                "crc32": "a738ea1c",
                "name": "ver1305.bin",
                "sha1": "45d94d0c39be1cb3db9fab6610a88a550adda4e9",
                "size": 2097152
              }
            ],
            "description": "Chihiro Bios",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.c:301",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d1883221",
                "name": "triforce_bootrom.bin",
                "sha1": "c3cb7227e4dbc2af861e76d00cb59726105a2e4c",
                "size": 2097152
              }
            ],
            "description": "Triforce Bios",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.c:667",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              }
            ],
            "description": "Mega Play BIOS",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.c:932",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "name": "epr12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              }
            ],
            "description": "Mega-Tech BIOS",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.c:1172",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "23d929b7",
                "name": "rms8.7e",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "3d33ac34",
                "name": "v0a.7e",
                "sha1": "909d59e7a993affd10224402b4370e82a5f5545c",
                "size": 4096
              },
              {
                "crc32": "b67a91d9",
                "name": "dsp3.p0b",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp3.p1b",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "a6df18fd",
                "name": "cassmcu.1c",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              }
            ],
            "description": "DECO Cassette System",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.c:1413",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "name": "pch1-c.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "name": "pch1-c.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "name": "pch1-c.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "name": "pch1-c.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              },
              {
                "crc32": "48de65dc",
                "name": "rp2c0x.pal",
                "sha1": "d10acafc8da9ff479c270ec01180cca61efe62f5",
                "size": 192
              }
            ],
            "description": "PlayChoice-10 BIOS",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.c:1632",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "44bb3a40",
                "name": "spc700.rom",
                "sha1": "97e352553e94242ae823547cd853eecda55c20f0",
                "size": 64
              },
              {
                "crc32": "4b02d66d",
                "name": "dsp1data.bin",
                "sha1": "1534f4403d2a0f68ba6e35186fe7595d33de34b1",
                "size": 2048
              },
              {
                "crc32": "a8e202b3",
                "name": "nss-c.dat",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "e06cb58f",
                "name": "nss-ic14.02",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              }
            ],
            "description": "Nintendo Super System BIOS",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nss.c:811",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "333bf9a7",
                "name": "grom1-1.bin",
                "sha1": "5d0cd9ca29e5580c3eebe9f136839987c879f979",
                "size": 32768
              },
              {
                "crc32": "ebec4c1c",
                "name": "grom1-3.bin",
                "sha1": "d638ef1486b4c0b3d4d5b666929ca7947e16efad",
                "size": 32768
              },
              {
                "crc32": "ad3ec05c",
                "name": "atrom-4s-0.smc",
                "sha1": "a3d336db585fe02a37c323422d9db6a33fd489a6",
                "size": 524288
              },
              {
                "crc32": "44bb3a40",
                "name": "spc700.rom",
                "sha1": "97e352553e94242ae823547cd853eecda55c20f0",
                "size": 64
              }
            ],
            "description": "Super Famicom Box BIOS",
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sfcbox.c:289",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ec82be9",
                "name": "pifdata.bin",
                "sha1": "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd",
                "size": 2048
              },
              {
                "crc32": "e7f2a005",
                "name": "normpnt.rom",
                "sha1": "c27b4a364a24daeee6e99fd286753fd6216362b4",
                "size": 128
              },
              {
                "crc32": "4f2ae525",
                "name": "normslp.rom",
                "sha1": "eab43f8cc52c8551d9cff6fced18ef80eaba6f05",
                "size": 128
              }
            ],
            "description": "Aleck64 PIF BIOS",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.c:836",
            "system": "nintendo-aleck64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "279683ca",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              }
            ],
            "description": "CD-i (Mono-I) BIOS",
            "name": "cdi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.c:4794",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d3837ae4",
                "name": "391640-03.u6a",
                "sha1": "06807db3181637455f4d46582d9972afec8956d9",
                "size": 1048576
              }
            ],
            "description": "Amiga CD32 Bios",
            "name": "cd32.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cubocd32.c:1318",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b2e41a2",
                "name": "r27v1602f.7d",
                "sha1": "f0a74bbcaf801f3fd0b7002ebd0118564aae3528",
                "size": 2097152
              }
            ],
            "description": "System 246 BIOS",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:308",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b2a8eeb6",
                "name": "r27v1602f.8g",
                "sha1": "bc4fb4e1e53adbd92385f1726bd69663ff870f1e",
                "size": 2097152
              }
            ],
            "description": "System 256 BIOS",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:324",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "11812ef8",
                "name": "700a01.22g",
                "sha1": "e1284add4aaddd5337bd7f4e27614460d52b5b48",
                "size": 524288
              }
            ],
            "description": "System 573 BIOS",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.c:4678",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "description": "System GX",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.c:3832",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "description": "Baby Phoenix/GV System",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.c:877",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "233e5159",
                "name": "941b01.u25",
                "sha1": "66ff268d5bf78fbfa48cdc3e1b08f8956cfd6cfb",
                "size": 262144
              }
            ],
            "description": "Konami Viper BIOS",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/drivers/viper.c:1049",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "81498f73",
                "name": "863a03.7b",
                "sha1": "3599b40a5872eab3a00d345287635355fcb25a71",
                "size": 524288
              },
              {
                "crc32": "6f42a09e",
                "name": "863a05.2x",
                "sha1": "cab5209f90f47b9ee6e721479913ad74e3ba84b1",
                "size": 524288
              }
            ],
            "description": "Twinkle System",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.c:1123",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "name": "coh-1000c.353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              }
            ],
            "description": "ZN1",
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4543",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "coh-3002c.353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              }
            ],
            "description": "ZN2",
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4563",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "coh-1000t.353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              }
            ],
            "description": "Taito FX1",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4644",
            "system": "taito-fx1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "03967fa7",
                "name": "coh-3002t.353",
                "sha1": "0e17fec2286e4e25deb23d40e41ce0986f373d49",
                "size": 524288
              },
              {
                "crc32": "c48c8236",
                "name": "flash.u30",
                "sha1": "c6dad60266ce2ff635696bc0d91903c543273559",
                "size": 2097152
              },
              {
                "crc32": "cae462d3",
                "name": "flashv2.u30",
                "sha1": "f1b10846a8423d9fe021191c5876190857c3d2a4",
                "size": 2097152
              }
            ],
            "description": "Taito GNET",
            "name": "taitogn.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.c:1299",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "coh-1000a.353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              }
            ],
            "description": "Acclaim PSX",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4600",
            "system": "acclaim-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "coh-1000w.353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              }
            ],
            "description": "Atari PSX",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4591",
            "system": "atari-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "coh-1001l.353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              }
            ],
            "description": "Atlus PSX",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4694",
            "system": "atlus-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ff165f3",
                "name": "coh-1002v.353",
                "sha1": "8f59314c1093446b9bcb06d232244da6df78e206",
                "size": 524288
              }
            ],
            "description": "Video System PSX",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4634",
            "system": "videosystem-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "coh-1002e.353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              }
            ],
            "description": "PS Arcade 95",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4668",
            "system": "eighting-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "coh-1002m.353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              }
            ],
            "description": "TPS",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4611",
            "system": "tecmo-tps"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6ad9b006",
                "name": "e68-05-1.ic6",
                "sha1": "f05a0ae26b6abaeda9c7944aee96c72b08fff7a5",
                "size": 524288
              },
              {
                "crc32": "c7c2dc6b",
                "name": "e68-04-1.ic5",
                "sha1": "bf88c818166c285130c5c73d6982f009da26e143",
                "size": 524288
              }
            ],
            "description": "Type Zero BIOS",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitotz.c:188"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "name": "sknse1.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              }
            ],
            "description": "Super Kaneko Nova System BIOS",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c:1686",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              }
            ],
            "description": "Hyper NeoGeo 64 Bios",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.c:2189",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "name": "macsos_l.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "name": "macsos_h.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              }
            ],
            "description": "Multi Amenity Cassette System BIOS",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:739",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "description": "Multi Amenity Cassette System 2 BIOS",
            "name": "mac2bios.zip",
            "note": "Both ROMs, macs2os_l.bin and macs2os_h.bin, are NO_DUMP, so handle_missing_file counts a warning rather than an error and the machine runs. Nothing exists to collect.",
            "required": false,
            "source_ref": "src/mame/drivers/macs.c:740",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "name": "kick12.rom",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "name": "scpav3_0.1h",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "name": "scpav3_0.1l",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "name": "scpa211h",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "name": "scpa211l",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              }
            ],
            "description": "Arcadia System BIOS",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arcadia.c:808",
            "system": "arcadia-systems"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c4f0f55f",
                "name": "kick13.rom",
                "sha1": "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
                "size": 262144
              }
            ],
            "description": "American Laser Games BIOS",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/alg.c:782",
            "system": "alg-laserdisc"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "88d0be26",
                "name": "136032.205.l13",
                "sha1": "d124045eccc562ff0423b23a240e27ad740fa0c9",
                "size": 16384
              },
              {
                "crc32": "3c79ef05",
                "name": "136032.206.l12",
                "sha1": "20fdca7131478e1ee12691bdafd2d5bb74cbd16f",
                "size": 16384
              },
              {
                "crc32": "690b37d3",
                "name": "136032.105.l13",
                "sha1": "547372f1044a3442aa52fcd2b3546540aba59344",
                "size": 16384
              },
              {
                "crc32": "76ee86c4",
                "name": "136032.106.l12",
                "sha1": "cbcd424510435a04e9041967a13781fd19b0f2c4",
                "size": 16384
              },
              {
                "crc32": "195c54ad",
                "name": "136032.114.j11",
                "sha1": "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7",
                "size": 16384
              },
              {
                "crc32": "7275b4dc",
                "name": "136032.115.j10",
                "sha1": "0896ab37ea832a1335046353612c1b4c86d8d040",
                "size": 16384
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "315e4bea",
                "name": "136032.107.b2",
                "sha1": "a00ea23fbdbf075f8f3f184275be83387e8ac82b",
                "size": 8192
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              }
            ],
            "description": "Atari System 1 BIOS",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.c:2399",
            "system": "atari-system1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "description": "Max-A-Flex",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.c:541",
            "system": "exidy-maxaflex"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              }
            ],
            "description": "Crystal System BIOS",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.c:1009",
            "system": "brezzasoft-crystal"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e51ff184",
                "name": "galaxy.u2",
                "sha1": "aaa795f2c15ec29b3ceeb5c917b643db0dbb7083",
                "size": 1048576
              },
              {
                "crc32": "c6d7bc6d",
                "name": "galaxy.u1",
                "sha1": "93c032f9aa38cbbdda59a8a25ff9f38f7ad9c760",
                "size": 1048576
              }
            ],
            "description": "Galaxy Games (BIOS v1.90)",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.c:1813",
            "system": "ces-galaxy-games"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e996bc18",
                "name": "vid.p1",
                "sha1": "49798165640627eb31024319353da04380787b10",
                "size": 65536
              }
            ],
            "description": "MPU4 Video Firmware",
            "name": "bctvidbs.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4drvr.c:3142"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.139u1",
        "notes": "Android port of MAME 0.139u1 by David Valdeita (Seleuco), package\ncom.seleuco.mame4droid. The Java app (seleuco/MAME4droid-0.139u1-,\nversion 1.16.9) loads a prebuilt libMAME4droid.so built from the native\ntree profiled here. src/version.c reads 0.139u1; the 0139u2 and 0139u3\ndiffs ship in the repository unapplied. Romset is 0.139 only.\n\n8846 drivers in mamedriv.c, 51 BIOS root sets. ZN-based boards keep their\n0.139 set names (cpzn1, cpzn2, acpsx, atpsx, atluspsx, vspsx, psarc95,\ntps, taitofx1); later MAME renamed them to coh####.\n\nsetGlobalPath chdirs into the installation directory, /sdcard/MAME4droid\nor /sdcard/Android/data/com.seleuco.mame4droid/files, so every relative\npath resolves there. Defaults from emuopts.c: roms, samples, artwork,\nctrlr, cheat, crosshair, hi, and fontpath at the root.\n\nopen_rom_file walks the parent chain building <drivername>/<romname> and\nfopen_attempt_zipped rewrites the last directory component to\n<drivername>.zip, so BIOS sets are plain MAME archives under the ROMs\npath. Storage Access Framework serves that path on Android 10+. The BIOS\nsetting passes -bios, selecting a ROM_SYSTEM_BIOS revision within a set.\nA missing ROM is fatal unless it is ROM_OPTIONAL or NO_DUMP.\n\nThe MKCHAMP hiscore engine (src/emu/hiscore.c) and the Category.ini\nreader in uimenu.c are additions over stock 0.139. Hiscore support is\nbehind a setting, off by default on Android.\n\nres/raw/files.zip seeds the installation on first run with hiscore.dat,\ncheat.zip, Category.ini, four ctrlr definitions (hotrod, hotrodse,\nslikstik, xarcade) and 30 overlay PNGs. samples, artwork, ctrlr and\noverlays are directories whose contents the code discovers: sample names\ncome from each driver's samples_interface, layout names from the game\nname, ctrlr from the option value, overlays from a directory listing.\nThe keymaps and cheat.txt in files.zip have no reader in this build, the\nSDL OSD being excluded by OSD=droid-ios and cheat.txt being the\ndebugger's cheatlist output name.\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/seleuco/MAME4droid_Native",
        "source_commit": "9e4f9a36a65dd355ca9e28b1df3ef22a2c81d3a1",
        "systems": [
          "arcade",
          "snk-neogeo-mvs",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "sega-megaplay",
          "sega-megatech",
          "deco-cassette",
          "nintendo-playch10",
          "nintendo-nss",
          "nintendo-sfcbox",
          "nintendo-aleck64",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-gx",
          "konami-gv",
          "konami-viper",
          "konami-twinkle",
          "capcom-zn1",
          "capcom-zn2",
          "taito-fx1",
          "taito-gnet",
          "acclaim-zn1",
          "atari-zn1",
          "atlus-zn1",
          "videosystem-zn1",
          "eighting-zn1",
          "tecmo-tps",
          "super-kaneko-nova",
          "hyper-neogeo64",
          "imax-macs",
          "arcadia-systems",
          "alg-laserdisc",
          "atari-system1",
          "exidy-maxaflex",
          "brezzasoft-crystal",
          "ces-galaxy-games"
        ],
        "type": "standalone",
        "upstream": "https://github.com/mamedev/mame/tree/mame0139",
        "upstream_commit": "f4f24ba7274010fb8ccb84548b5ca95c2be2f85b"
      }
    },
    {
      "id": "mame4droid-2024",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.38.1",
        "cores": [
          "mame4droid-2024",
          "MAME4DROID-2024",
          "MAME4DROID-CURRENT",
          "com.seleuco.mame4d2024"
        ],
        "display_name": "Arcade (MAME4droid 2024)",
        "emulator": "MAME4droid 2024",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "GNU Unifont, the UI font used for CJK and for the low-resolution OSD",
            "name": "unifont.bdf",
            "note": "Passed as -uifont when the language is Chinese, Japanese or Korean on the low-resolution OSD, or when the unifont setting is on. render_font opens it from fontpath, which defaults to the installation root; a miss falls back to the font compiled into the binary. Seeded from the package assets on first run; the hash identifies that drop, the loader checks nothing.",
            "path": "unifont.bdf",
            "required": false,
            "sha1": "d16938569bb1b572f1e3f55bd17381dc28235d62",
            "size": 9382502,
            "source_ref": "src/osd/myosd/droid/myosd_droid.cpp:1620-1624, src/emu/rendfont.cpp:526-534,853-863"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "compiled glyph cache for unifont.bdf",
            "name": "unifont.bdc",
            "note": "load_cached_bdf derives the name by swapping the BDF extension and opens it before parsing the 9 MB source font, accepting it only when its stored size and hash match unifont.bdf. Shipped prebuilt; MAME writes it itself when it is absent.",
            "path": "unifont.bdc",
            "required": false,
            "sha1": "ce173b7341bb271da5bf47761f4bf3b4de8e9deb",
            "size": 2623648,
            "source_ref": "src/emu/rendfont.cpp:888-905,1303-1325",
            "unsourceable": "cache MAME regenerates from unifont.bdf, installed from the app's asset bundle"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "MAME's own UI font, used for the low-resolution OSD",
            "name": "uismall.bdf",
            "note": "Passed as -uifont for the low-resolution OSD in a Latin language. Same content as MAME 0.289's uismall.bdf, with CRLF line endings. The identical font is also compiled into the binary as the last fallback.",
            "path": "uismall.bdf",
            "required": false,
            "sha1": "eda638e44b3c7c608d024f4d32248af0d6ddae44",
            "size": 128648,
            "source_ref": "src/osd/myosd/droid/myosd_droid.cpp:1625-1629, src/emu/rendfont.cpp:537-540"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "high score memory ranges per game",
            "name": "hiscore.dat",
            "note": "read_hiscore_dat opens hiscore.dat from the installation root first, then the copy in the plugin's own directory, once per session when the hiscore plugin runs. Same content as MAME 0.289's plugins/hiscore/hiscore.dat, with CRLF line endings. Definitions are keyed to driver names, so another MAME generation's file is a different one.",
            "path": "plugins/hiscore/hiscore.dat",
            "required": false,
            "sha1": "6f730abe0d76161336f09229f54e9f9ac7619d63",
            "size": 333070,
            "source_ref": "plugins/hiscore/init.lua:105,151-155, src/osd/myosd/droid/myosd_droid.cpp:1640-1652"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "SQLite database of the info files MAME's right panel shows",
            "name": "history.db",
            "note": "The data plugin opens homepath/data/history.db, homepath defaulting to the installation root, and creates it when absent. Each info file is imported once and then read from the database, so the plugin needs no dat file next to it: this drop carries history.xml 2.88d, mameinfo.dat 0.290GIT, command.dat 0.273, gameinit.dat v0.250 and messinfo.dat. The plugin autostarts, its plugin.json declaring start true.",
            "path": "data/history.db",
            "required": false,
            "sha1": "c8511b72aa271d255ef6296bae564b8be1fe6c7e",
            "size": 108929024,
            "source_ref": "plugins/data/database.lua:12-14,38-44,46-64, plugins/data/data_history.lua:8-25, plugins/data/plugin.json"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "per-game XML cheat files",
            "name": "cheat.7z",
            "note": "cheat_manager::load_cheats opens <basename>.xml over cheatpath, which defaults to cheat, and emu_file's archive fallback rewrites the directory component to cheat.7z or cheat.zip before looking inside. It runs when -cheat is on, which the app passes from its cheats setting; the Lua cheat plugin reads the same collection when it is enabled. The collection distributed with it dates itself 03 April 2024, base release for MAME 0.264.",
            "path": "cheat.7z",
            "required": false,
            "sha1": "8d5a5e5b6b179f5c27f0d9379aea1c4fd36b51f9",
            "size": 3931509,
            "source_ref": "src/frontend/mame/cheat.cpp:1143-1190,1400-1412, plugins/cheat/init.lua:96-122, src/emu/fileio.cpp:713-716, src/emu/emuopts.cpp:51, src/osd/myosd/droid/myosd_droid.cpp:1536-1538"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "bootstrap script that starts the enabled Lua plugins",
            "name": "boot.lua",
            "note": "Opened by name from pluginspath after the plugin directories are scanned. Without it no plugin runs, so hiscore, autofire, inputmacro and data stay silent; the emulator itself is unaffected. A script that is present but fails to load is fatal.",
            "path": "plugins/boot.lua",
            "required": false,
            "sha1": "3732f1aeea740c2e5df51b0b51c6665028314ae6",
            "size": 1019,
            "source_ref": "src/frontend/mame/mame.cpp:139-221"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "index of the GLES effect shaders, one per line as file, name, filtering and format version",
            "name": "shaders.cfg",
            "note": "load_filters reads it from the installation root and opens each shader it lists under shaders/. A missing file means no effect shaders; a listed shader that cannot be opened raises. 53 of the 65 shipped shaders are loaded: ten more are commented out, and stock.glsl and vector_halo-fringe - copia.glsl are named nowhere.",
            "path": "shaders.cfg",
            "required": false,
            "sha1": "f58525f9a3dfc2c09957f0e5ec070474694dfa41",
            "size": 2479,
            "source_ref": "src/osd/myosd/renderer/filter_shader.cpp:106-183"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 1",
            "name": "cross1.png",
            "note": "create_bitmap looks for the name set on the input, then crosshair/<gamename>/cross<N>.png, then crosshair/cross<N>.png, and falls back to the bitmap compiled into the binary. crosshair_manager builds one per player and MAX_PLAYERS is 10. No crosshair directory ships with the app.",
            "path": "crosshair/cross1.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:174-215,346-358, src/emu/ioport.h:48"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 2",
            "name": "cross2.png",
            "path": "crosshair/cross2.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 3",
            "name": "cross3.png",
            "path": "crosshair/cross3.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 4",
            "name": "cross4.png",
            "path": "crosshair/cross4.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 5",
            "name": "cross5.png",
            "path": "crosshair/cross5.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 6",
            "name": "cross6.png",
            "path": "crosshair/cross6.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 7",
            "name": "cross7.png",
            "path": "crosshair/cross7.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 8",
            "name": "cross8.png",
            "path": "crosshair/cross8.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 9",
            "name": "cross9.png",
            "path": "crosshair/cross9.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "game_data",
            "description": "crosshair bitmap for player 10",
            "name": "cross10.png",
            "path": "crosshair/cross10.png",
            "required": false,
            "source_ref": "src/emu/crsshair.cpp:201-215"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "58242cee",
                "name": "panafz10.bin",
                "sha1": "3c912300775d1ad730dc35757e279c274c0acaad",
                "size": 1048576
              },
              {
                "crc32": "b6f5028b",
                "name": "goldstar.bin",
                "sha1": "c4a2e5336f77fb5f743de1eea2cda43675ee2de7",
                "size": 1048576
              },
              {
                "crc32": "c8c8ff89",
                "name": "panafz1.bin",
                "sha1": "34bf189111295f74d7b7dfc1f304d98b8d36325a",
                "size": 1048576
              },
              {
                "crc32": "d5cbc509",
                "name": "sanyotry.bin",
                "sha1": "b01c53da256dde43ffec4ad3fc3adfa8d635e943",
                "size": 1048576
              }
            ],
            "description": "3DO BIOS",
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:565",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a77c6b1c",
                "name": "epr-21802.ic27",
                "sha1": "bd50a6bb8fa9bac121b076e21ea048a83a240a48",
                "size": 2097152
              },
              {
                "crc32": "a21bef24",
                "name": "epr-21801.ic27",
                "sha1": "c6c6ed09772b63a9a84ef0678fc1b7527484038a",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI Airline Pilots (deluxe) BIOS",
            "name": "airlbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10921",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ec82be9",
                "name": "pifdata.bin",
                "sha1": "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd",
                "size": 2048
              },
              {
                "crc32": "e7f2a005",
                "name": "normpnt.rom",
                "sha1": "c27b4a364a24daeee6e99fd286753fd6216362b4",
                "size": 128
              },
              {
                "crc32": "4f2ae525",
                "name": "normslp.rom",
                "sha1": "eab43f8cc52c8551d9cff6fced18ef80eaba6f05",
                "size": 128
              }
            ],
            "description": "Aleck64 PIF BIOS",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/aleck64.cpp:1417",
            "system": "nintendo-aleck64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b832da9a",
                "name": "saot_rom2.bin",
                "sha1": "520d3d1b5897800af47f92efd2444a26b7a7dead",
                "size": 524288
              }
            ],
            "description": "ALG 3DO BIOS",
            "name": "alg3do.zip",
            "required": true,
            "source_ref": "src/mame/misc/3do.cpp:573",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c4f0f55f",
                "name": "315093-02.u2",
                "sha1": "891e9a547772fe0c6c19b610baf8bc4ea7fcb785",
                "size": 262144
              }
            ],
            "description": "American Laser Games BIOS",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/alg.cpp:923",
            "system": "alg-laserdisc"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e4fb64fb",
                "name": "6530-009.u5",
                "sha1": "a3d9de7cbfb42180a860e0bbbeaeba96d8bd1e20",
                "size": 1024
              },
              {
                "crc32": "dca980dd",
                "name": "6530-010.u6",
                "sha1": "3817d75413854d889fc1ce4fd6a51d820d1e0534",
                "size": 1024
              },
              {
                "crc32": "13f42789",
                "name": "6530-011.u3",
                "sha1": "baa0f73fda08a3c5d6f1423fb329e4febb07ef97",
                "size": 1024
              }
            ],
            "description": "Allied System",
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/pinball/allied.cpp:772",
            "system": "allied-leisure-pinball"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "name": "315093-01.u2",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "name": "scpa_01-hi_v3.0.u12",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "name": "scpa_01-lo_v3.0.u16",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "79450b4b",
                "name": "scpa_01-hi_v2.20.u12",
                "sha1": "a1e508a89fc62e1c4994064f2786f491b1dc8bc6",
                "size": 65536
              },
              {
                "crc32": "d2825511",
                "name": "scpa_01-lo_v2.20.u16",
                "sha1": "747a37c6073224472bf261ae376ac9abfbe07554",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "name": "scpa_01-hi_v2.11.u12",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "name": "scpa_01-lo_v2.11.u16",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              },
              {
                "crc32": "0b486a85",
                "name": "gcp_v311_1-hi.u16",
                "sha1": "b406f1db5abf28d9072b7940989ffd176aeee5cb",
                "size": 65536
              },
              {
                "crc32": "80e8e863",
                "name": "gcp_v311_1-lo.u11",
                "sha1": "ab04dfcda7544f4ed9b67771cd8aefe0300c6d4b",
                "size": 65536
              },
              {
                "crc32": "d20a4d7f",
                "name": "gcp_v311_2-hi.u17",
                "sha1": "1dc0a79efa946333149f68ddac046fd44b5f2abe",
                "size": 65536
              },
              {
                "crc32": "5bf4c74c",
                "name": "gcp_v311_2-lo.u12",
                "sha1": "1f7b17170accdf9e448c1a5d8bc430aa2d1d931b",
                "size": 65536
              },
              {
                "crc32": "69295167",
                "name": "gcp_v400_1-hi.u16",
                "sha1": "855f53abbb9dc15e5518e16c5c2dfe4134d07306",
                "size": 65536
              },
              {
                "crc32": "504c2171",
                "name": "gcp_v400_1-lo.u11",
                "sha1": "a93367f520afb86c97c0a191714b72823c95cdd2",
                "size": 65536
              },
              {
                "crc32": "13fb4e2d",
                "name": "gcp_v400_2-hi.u17",
                "sha1": "3eef07aecc3a201ae0b20634c7fd0c87c89fd7f1",
                "size": 65536
              },
              {
                "crc32": "a5cc4515",
                "name": "gcp_v400_2-lo.u12",
                "sha1": "80070521476e92323a6baa6e55928ca5b751a332",
                "size": 65536
              }
            ],
            "description": "Arcadia System BIOS",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/arsystems.cpp:1011",
            "system": "arcadia-systems"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e8e8dc75",
                "name": "setchip v4.04.09.u7",
                "sha1": "201fe95256459ce34fdb6f7498135ab5016d07f3",
                "size": 524288
              },
              {
                "crc32": "ff7a9035",
                "name": "setchip v4.04.09.u11",
                "sha1": "4352c4336e61947c555fdc80c61f944076f64b64",
                "size": 524288
              },
              {
                "crc32": "e8e8dc75",
                "name": "clear_mk5_u_7_ck_eb68.u7",
                "sha1": "201fe95256459ce34fdb6f7498135ab5016d07f3",
                "size": 524288
              },
              {
                "crc32": "4cf70173",
                "name": "clear_mk5_u_11_ck_3a6f.u11",
                "sha1": "f3dda0f188c035a36954048b449b9b96787709f2",
                "size": 524288
              },
              {
                "crc32": "7c4b7fe4",
                "name": "setchip v4.04.08.u7",
                "sha1": "39dd39c794c0cb6abc1b7503650643a8131468d1",
                "size": 524288
              },
              {
                "crc32": "d3234a28",
                "name": "setchip v4.04.08.u11",
                "sha1": "8ff112ee4aadf1d359ca8ffe0cfa9c7400aa0595",
                "size": 524288
              },
              {
                "crc32": "e7b39a73",
                "name": "setchip v4.04.05.u7",
                "sha1": "e826d717a0871383394e15634896fcb2e2bdeb75",
                "size": 524288
              },
              {
                "crc32": "2fc9b2a0",
                "name": "setchip v4.04.05.u11",
                "sha1": "89191f02c4ec8089e26989430806650d14e13e5a",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "1d564c2c",
                "name": "setchip v4.04.01 cs 1358.u7",
                "sha1": "2e47917138c682393a61676da6fccba90463229a",
                "size": 524288
              },
              {
                "crc32": "199bacff",
                "name": "setchip v4.04.01 cs ed54.u11",
                "sha1": "a2ef556b42d505af077a2db983caebdd611d98fd",
                "size": 524288
              },
              {
                "crc32": "2453137e",
                "name": "setchip v4.04.00.u7",
                "sha1": "b59998e75ae3924da16faf47b9cfe9afd60d810c",
                "size": 524288
              },
              {
                "crc32": "82dfa12a",
                "name": "setchip v4.04.00.u11",
                "sha1": "86fd0f0ad8d5d1bc503392a40bbcdadb055b2765",
                "size": 524288
              },
              {
                "crc32": "5cf56036",
                "name": "setchip v4.03.07.u7",
                "sha1": "ff11deb6f76627f4fb5a7ec789e4071887e3eae9",
                "size": 524288
              },
              {
                "crc32": "637de9b9",
                "name": "setchip v4.03.07.u11",
                "sha1": "4b5c974fd4c1d1a21f83bdc03d8bc5013d4a40ea",
                "size": 524288
              },
              {
                "crc32": "5a254b22",
                "name": "setchip v4.02.04.u7",
                "sha1": "8444f237b392df2a3cb42ea349e7af32f47dd544",
                "size": 524288
              },
              {
                "crc32": "def36617",
                "name": "setchip v4.02.04.u11",
                "sha1": "c7ba5b08e884a8fb36c9fb51c08e243e32c81f89",
                "size": 524288
              },
              {
                "crc32": "41275334",
                "name": "setchip v4.02.04_alt.u7",
                "sha1": "d4a63dbc77c2c44f6a9c72b389bd270f2137997f",
                "size": 524288
              },
              {
                "crc32": "254e8b03",
                "name": "setchip v4.02.04_alt.u11",
                "sha1": "0ed9723258d3f86b21bf132cbe2fd0bae978cd5e",
                "size": 524288
              },
              {
                "crc32": "16c2828d",
                "name": "setchip v1.0.u7",
                "sha1": "87218a76bb2791bce27b4b8ab341ba73cbbf6ffe",
                "size": 524288
              },
              {
                "crc32": "a969f12b",
                "name": "setchip v1.0.u11",
                "sha1": "fc6d234ce1f5c6b5aceb97b73aad60144352023b",
                "size": 524288
              },
              {
                "crc32": "1f269234",
                "name": "a562837.u36",
                "sha1": "29940dd50fb55c632935f62ff44ca724379c7a43",
                "size": 343
              },
              {
                "crc32": "f2f3c40a",
                "name": "a562838.u65",
                "sha1": "b795dfa5cc4e8127c3f3a0906664910d1325ec92",
                "size": 343
              },
              {
                "crc32": "941d4cdb",
                "name": "a562840.u22",
                "sha1": "1ca091fba69e92f262dbb3d40f515703c8981793",
                "size": 343
              }
            ],
            "description": "MKV Set/Clear Chips (US)",
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/acorn/aristmk5.cpp:9298",
            "system": "aristocrat-mk5"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e97afedf",
                "name": "24013001_right.u83",
                "sha1": "10ca3b015afaff5d7812f0f5207b2535602136a5",
                "size": 2097152
              },
              {
                "crc32": "06ae7e07",
                "name": "24013001_left.u70",
                "sha1": "39a45575b66906d73b519988d1001c99b05c5f34",
                "size": 2097152
              },
              {
                "crc32": "757618f2",
                "name": "21012901_right.u83",
                "sha1": "43f9a3e7d544979f8c6974945914d9e099b02abd",
                "size": 2097152
              },
              {
                "crc32": "0d271470",
                "name": "21012901_left.u70",
                "sha1": "5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479",
                "size": 2097152
              },
              {
                "crc32": "5b20a96c",
                "name": "19012801_right.u83",
                "sha1": "5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926",
                "size": 2097152
              },
              {
                "crc32": "b03bd17c",
                "name": "19012801_left.u70",
                "sha1": "f281e80f6dda5b727ed71d2deebe3b0ff548773f",
                "size": 2097152
              },
              {
                "crc32": "e627dbfa",
                "name": "13012001_right.u83",
                "sha1": "4fedbe0975ceb7dc0ebebf18a7708d78984db9b7",
                "size": 2097152
              },
              {
                "crc32": "38e8f659",
                "name": "13012001_left.u70",
                "sha1": "88c6acba99b0aca023c6f4d27c061c231490e9e0",
                "size": 2097152
              },
              {
                "crc32": "73dcb11c",
                "name": "11011901_right.u83",
                "sha1": "69ae4f32a0c9141b2a82ff3935b0cd20333d2964",
                "size": 2097152
              },
              {
                "crc32": "d3dd2210",
                "name": "11011901_left.u70",
                "sha1": "3548f8cc39859d3f44a55f6bae48966a2d48e0eb",
                "size": 2097152
              },
              {
                "crc32": "de4c3aed",
                "name": "11011501_right.u83",
                "sha1": "21596a2edd20eb7de7a4ec8900a270b09c8f326f",
                "size": 2097152
              },
              {
                "crc32": "c5cc3461",
                "name": "11011501_left.u70",
                "sha1": "5b43c4cb6110a6ccf67cd0f3789253f6872b20c4",
                "size": 2097152
              },
              {
                "crc32": "8a853f80",
                "name": "09011001_right.u83",
                "sha1": "9a75498f7b02c81a483b4e1c158f35f0ee4c0112",
                "size": 2097152
              },
              {
                "crc32": "229c2e63",
                "name": "09011001_left.u70",
                "sha1": "91fd2b1acb69efe073647e93db9f11042add2feb",
                "size": 2097152
              },
              {
                "crc32": "8c148c11",
                "name": "07010801_right.u83",
                "sha1": "5ff3be18455b4f04675fec8d5b9d881295c65e23",
                "size": 2097152
              },
              {
                "crc32": "8e92af68",
                "name": "07010801_left.u70",
                "sha1": "00d2bb655b7964a9652896741210ec534df0b0d2",
                "size": 2097152
              },
              {
                "crc32": "c12eac11",
                "name": "05010601_right.u83",
                "sha1": "683b9ddc323865ace7dca37d13b55de6e42759a5",
                "size": 1048576
              },
              {
                "crc32": "b3e6b4a0",
                "name": "05010601_left.u70",
                "sha1": "3bf398c9257579f8e51ce716d6ebfa74fa510273",
                "size": 1048576
              },
              {
                "crc32": "3daefb7a",
                "name": "04010501_right.u83",
                "sha1": "411471713219f4bab5ccf5fe7a12a6c138c8c550",
                "size": 1048576
              },
              {
                "crc32": "21182775",
                "name": "04010501_left.u70",
                "sha1": "7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a",
                "size": 1048576
              },
              {
                "crc32": "a34a9f16",
                "name": "03010301.u84",
                "sha1": "b8750e6ceb1715da8e5ac2f0183254e29a042641",
                "size": 1048576
              },
              {
                "crc32": "d793440a",
                "name": "03010301.u71",
                "sha1": "dced4c04bde13293af77a9a1f4c5c606e3758de0",
                "size": 1048576
              },
              {
                "crc32": "c8580554",
                "name": "03010301.u83",
                "sha1": "58b8bfff2f8d298c4e3be2b01900800c45fa7ad7",
                "size": 1048576
              },
              {
                "crc32": "5ae69121",
                "name": "03010301.u70",
                "sha1": "36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b",
                "size": 1048576
              },
              {
                "crc32": "0920930f",
                "name": "02010201.u84",
                "sha1": "771b0f62442d1c75b1bb59ad82365b7ab8747173",
                "size": 1048576
              },
              {
                "crc32": "24d5614a",
                "name": "02010201.u71",
                "sha1": "fdcf3826dccc72b74b66379b1411cf211d5a1670",
                "size": 1048576
              },
              {
                "crc32": "5f64a20c",
                "name": "02010201.u83",
                "sha1": "397404ab6d2a1aa3c1fc77bb9421fef7079b65a5",
                "size": 1048576
              },
              {
                "crc32": "9b2db442",
                "name": "02010201.u70",
                "sha1": "d512398a2d9257bd385dc50d61c63cd1a47300ba",
                "size": 1048576
              },
              {
                "crc32": "183e3836",
                "name": "02010114.u84",
                "sha1": "4c802d0cd010bc007acb3a83e37aaa29b2d13d87",
                "size": 1048576
              },
              {
                "crc32": "8f83c3dd",
                "name": "02010114.u71",
                "sha1": "a5f9d80b4b515b24299d0241e1665cfd9da8bab7",
                "size": 1048576
              },
              {
                "crc32": "945104d7",
                "name": "02010114.u83",
                "sha1": "e372d0cf889c72b5d001b26fe4a925a28486537f",
                "size": 1048576
              },
              {
                "crc32": "3ba4379f",
                "name": "02010114.u70",
                "sha1": "84367f12c4c9224d2ab9cae83ae8727de338408c",
                "size": 1048576
              },
              {
                "crc32": "2ecd8da8",
                "name": "25012805_right.u83",
                "sha1": "389e9668b2ba4fffed5d2721b2ce70d502fb9f67",
                "size": 2097152
              },
              {
                "crc32": "996f32ce",
                "name": "25012805_left.u70",
                "sha1": "cf21bef745986fcbd298167453c7b8e5945ce602",
                "size": 2097152
              },
              {
                "crc32": "045b82ad",
                "name": "20012605_right.u83",
                "sha1": "b8e4f9f826970d83ae5fd2f2898de12ad1bf2d24",
                "size": 2097152
              },
              {
                "crc32": "87331111",
                "name": "20012605_left.u70",
                "sha1": "6cdc2d81f68de23af18a975a6f27ddec246be405",
                "size": 2097152
              },
              {
                "crc32": "e436c1f5",
                "name": "20012305_right.u83",
                "sha1": "62ee529cc971fd76aa2ccc15778e3f0c40e3e47f",
                "size": 2097152
              },
              {
                "crc32": "ea8961cc",
                "name": "20012305_left.u70",
                "sha1": "0ebc7c3b94a6e01ee984af4711043130d9670bd3",
                "size": 2097152
              },
              {
                "crc32": "2bec5b74",
                "name": "14011605_right.u83",
                "sha1": "854733cada75e632f01f7096d4740ed4941a3d5b",
                "size": 2097152
              },
              {
                "crc32": "cd26d4f0",
                "name": "14011605_left.u70",
                "sha1": "40822714abf08aeb08d827dbd8cd099f86803754",
                "size": 2097152
              },
              {
                "crc32": "ca6bc86c",
                "name": "04041205_right.u83",
                "sha1": "69fe7fc35694e4cd7f861bff4ec3a6165a81df6e",
                "size": 1048576
              },
              {
                "crc32": "dfb9a119",
                "name": "04041205_left.u70",
                "sha1": "814a5a7877392aec4e4871d7f0e19d2fbd717409",
                "size": 1048576
              },
              {
                "crc32": "bce3d97f",
                "name": "03130334_right.u83",
                "sha1": "da36377cc1465022a2434703adee63bf48c71a9c",
                "size": 2097152
              },
              {
                "crc32": "02175fde",
                "name": "03130334_left.u70",
                "sha1": "4e9a9e1e803a0c84b06aec99dc3147dd7a919eee",
                "size": 2097152
              },
              {
                "crc32": "cf5a9d1e",
                "name": "01040505.u84",
                "sha1": "0ebba478fc883831d70b0fa95f43e5f93b07ae9e",
                "size": 1048576
              },
              {
                "crc32": "f56ea77e",
                "name": "01040505.u71",
                "sha1": "319be1bee66a289e2c1f6beec07758f79aa0cf16",
                "size": 1048576
              },
              {
                "crc32": "90f32169",
                "name": "01040505.u83",
                "sha1": "228be8b4a9eb6b2acf7f7a7561bd194009936026",
                "size": 1048576
              },
              {
                "crc32": "b9ddea66",
                "name": "01040505.u70",
                "sha1": "f4bfdeada39a3f0094d6468b7374a34f88f5df7f",
                "size": 1048576
              },
              {
                "crc32": "b4b3c6a5",
                "name": "03030708_right.u83",
                "sha1": "5747f98a6eaa5c24a23d1d76a28b33a3bfbbfd1f",
                "size": 1048576
              },
              {
                "crc32": "4e5ad823",
                "name": "03030708_left.u70",
                "sha1": "77ab1c29c6172cfdcef776222a72b2b44114d4da",
                "size": 1048576
              },
              {
                "crc32": "01d13b89",
                "name": "14011913_right.u83",
                "sha1": "b1013366d0803dfbec5a5f90f6a5cea862de0513",
                "size": 2097152
              },
              {
                "crc32": "9a4cefdf",
                "name": "14011913_left.u70",
                "sha1": "6c15bc565ede8af19361d60ee1e6657a8055c92c",
                "size": 2097152
              },
              {
                "crc32": "7e3f61f6",
                "name": "14010152_right.u83",
                "sha1": "1e27d72c35b0c633187159ef434f22398df28882",
                "size": 2097152
              },
              {
                "crc32": "2716e1ef",
                "name": "14010152_left.u70",
                "sha1": "81fe1ae4f9cd1bcb24795ce85913ee22ed0fabcd",
                "size": 2097152
              },
              {
                "crc32": "7a8619a5",
                "name": "02061013_right.u83",
                "sha1": "bd03ddb68817c1660b009e102ccf69e5b603b875",
                "size": 1048576
              },
              {
                "crc32": "e70a7007",
                "name": "02061013_left.u70",
                "sha1": "0935f924866162d9c0fbdbb99391cbf730a04b76",
                "size": 1048576
              },
              {
                "crc32": "31068c41",
                "name": "02060913_right.u83",
                "sha1": "962da0079495a64f7ffb34be643892c272017cc9",
                "size": 1048576
              },
              {
                "crc32": "d6a6713c",
                "name": "02060913_left.u70",
                "sha1": "0f3bb2746f1a6fa6a587fd50827299408a3b28d2",
                "size": 1048576
              },
              {
                "crc32": "bf21a975",
                "name": "15011025_right.u83",
                "sha1": "a251b1a7342387300689cd50fe4ce7975b903ac5",
                "size": 2097152
              },
              {
                "crc32": "c02e14b0",
                "name": "15011025_left.u70",
                "sha1": "6bf98927813519dfe60e582dbe5be3ccd87f7c91",
                "size": 2097152
              },
              {
                "crc32": "eddeff13",
                "name": "24010467_right.u83",
                "sha1": "77ccbcf40aeb7305eb13d6d24efafd09955f1eac",
                "size": 2097152
              },
              {
                "crc32": "9093d820",
                "name": "24010467_left.u70",
                "sha1": "05bb14895e3077d277a1d0822036d08f359c0307",
                "size": 2097152
              },
              {
                "crc32": "2dae8ca0",
                "name": "01.04.11_right.u83",
                "sha1": "7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0",
                "size": 2097152
              },
              {
                "crc32": "787f2b07",
                "name": "01.04.11_left.u70",
                "sha1": "2548289e44f4b935346b759afb5383bdbac04c3e",
                "size": 2097152
              },
              {
                "crc32": "82ce2fcc",
                "name": "01.04.10_right.u83",
                "sha1": "4c8fb3db084a67e99d1420b3f895a06ce9ef5ec2",
                "size": 2097152
              },
              {
                "crc32": "9d9d52c1",
                "name": "01.04.10_left.u70",
                "sha1": "b957220cdbedd516c219d1bfc28807ce466df93f",
                "size": 2097152
              },
              {
                "crc32": "95333304",
                "name": "01.04.08_right.u83",
                "sha1": "7afe49d6c5e4d6820f349778557daa88c5366a51",
                "size": 2097152
              },
              {
                "crc32": "0dfcad10",
                "name": "01.04.08_left.u70",
                "sha1": "53798be000304aed38909f5fd8470a68bedd8229",
                "size": 2097152
              },
              {
                "crc32": "23c28e22",
                "name": "01.04.07_right.u83",
                "sha1": "98f24a1f86232b6c2c288a61ec7d60c867f192e5",
                "size": 2097152
              },
              {
                "crc32": "acfb0fe0",
                "name": "01.04.07_left.u70",
                "sha1": "b1a772d7978e6ff4406a5bb39a71cb3f89608e72",
                "size": 2097152
              },
              {
                "crc32": "e57ba02d",
                "name": "01.04.04_right.u83",
                "sha1": "8e29403e6b619eeab41dc171221720bc7820ccdc",
                "size": 2097152
              },
              {
                "crc32": "b984a92c",
                "name": "01.04.04_left.u70",
                "sha1": "90f7a61302caee40195c08565bdac856a3234c1d",
                "size": 2097152
              },
              {
                "crc32": "1582714b",
                "name": "01.03.17_right.u83",
                "sha1": "92d0a15314ffe526159bef9a364898dd1ebdfde7",
                "size": 2097152
              },
              {
                "crc32": "a88193dc",
                "name": "01.03.17_left.u70",
                "sha1": "c9e1d483edaecd318d2e5fc8a54e84516c93e0ca",
                "size": 2097152
              },
              {
                "crc32": "889ffd82",
                "name": "01.03.14_right.u83",
                "sha1": "9c98c9cdcf5f7d05095f11006418133029e9f0f8",
                "size": 2097152
              },
              {
                "crc32": "7138fec4",
                "name": "01.03.14_left.u70",
                "sha1": "f81331d1875ac574d3e6c98be218ff25c6c7be5a",
                "size": 2097152
              },
              {
                "crc32": "2ebccc4e",
                "name": "01.03.07_right.u83",
                "sha1": "9342724e4451e9ab24ceae208284b50abd4f0be3",
                "size": 2097152
              },
              {
                "crc32": "a3632da4",
                "name": "01.03.07_left.u70",
                "sha1": "1c96a88e86095b81801ab88e36a4cdfa4b893265",
                "size": 2097152
              },
              {
                "crc32": "bd48ca55",
                "name": "01.03.06_right.u83",
                "sha1": "8fb1576cbeb1c64c358880714740195d2e73e03e",
                "size": 2097152
              },
              {
                "crc32": "2f9d9a29",
                "name": "01.03.06_left.u70",
                "sha1": "fdebfaca9a579d7249379f19aef22fbfd66bf943",
                "size": 2097152
              },
              {
                "crc32": "2c7f1ec3",
                "name": "01.03.05_right.u83",
                "sha1": "d03167f43ed6f9596080d91472695829378cef0a",
                "size": 2097152
              },
              {
                "crc32": "0095e3f9",
                "name": "01.03.05_left.u70",
                "sha1": "d2e8786158b1ab0a614aab21cf1d14cbc04754af",
                "size": 2097152
              },
              {
                "crc32": "2255e263",
                "name": "01.03.03e_right.u83",
                "sha1": "5e9e093aaa17172f47a14c3baf7f6f0f73b19398",
                "size": 2097152
              },
              {
                "crc32": "ea50729a",
                "name": "01.03.03e_left.u70",
                "sha1": "14b5a71bfb91ac366ddcb5f77fb54127808f8163",
                "size": 2097152
              },
              {
                "crc32": "253415f4",
                "name": "01.03.03a_right.u83",
                "sha1": "50dc77ad87bc6be1932dda2fd4865602c8c49729",
                "size": 2097152
              },
              {
                "crc32": "4ab5dd40",
                "name": "01.03.03a_left.u70",
                "sha1": "a6812cc624e6a98ea7b0697e2797fe10ba8e303e",
                "size": 2097152
              },
              {
                "crc32": "aaaeac8c",
                "name": "01.02.08_right.u2",
                "sha1": "a565e5fcb4f55f31e7d36be40eec234248a66efd",
                "size": 1048576
              },
              {
                "crc32": "f29fd1bf",
                "name": "01.02.08_left.u3",
                "sha1": "33e043d2616e10a1c7a0936c3d208f9bcc2ca6f3",
                "size": 1048576
              },
              {
                "crc32": "e920e940",
                "name": "01.02.02_right.u2",
                "sha1": "52e28d4765a3e953bb70dc4ed13d96d4180be996",
                "size": 1048576
              },
              {
                "crc32": "1d0f4093",
                "name": "01.02.02_left.u3",
                "sha1": "17d6328dba9826b58f39393ca2f2daac1b7161ef",
                "size": 1048576
              },
              {
                "crc32": "6f5f5ef1",
                "name": "06.03.04_right.u2",
                "sha1": "70a43fba4de47ed8dcf38b25eafd5873f3428e72",
                "size": 1048576
              },
              {
                "crc32": "7034f26b",
                "name": "06.03.04_left.u3",
                "sha1": "7be78f23bec38d05240cdfe1186ec0c8291f5a1c",
                "size": 1048576
              },
              {
                "crc32": "98763498",
                "name": "06.03.03_right.u2",
                "sha1": "246e95cc12eb34f946b2f4938c59217718f6d841",
                "size": 1048576
              },
              {
                "crc32": "a6924238",
                "name": "06.03.03_left.u3",
                "sha1": "b71ab39bf9c1fdbab556028138749e8c040ec83c",
                "size": 1048576
              },
              {
                "crc32": "e4001f60",
                "name": "06.02.20_right.u83",
                "sha1": "5da34efb1ac0f7c84a48e09363d20cfecda4bcf1",
                "size": 1048576
              },
              {
                "crc32": "199ed3b9",
                "name": "06.02.20_left.u70",
                "sha1": "e3ee81ffd713f09e35a10c38e4f59282e2c5cd30",
                "size": 1048576
              },
              {
                "crc32": "1cf5a853",
                "name": "06.02.04_right.u2",
                "sha1": "64d17efcce702df7a0b0e151293199478e25226d",
                "size": 1048576
              },
              {
                "crc32": "117b75f2",
                "name": "06.02.04_left.u3",
                "sha1": "2129286853d3c50b8a943b71334d4ef6b98adc05",
                "size": 1048576
              },
              {
                "crc32": "58730ed3",
                "name": "gambs2m_01.05.07.u3",
                "sha1": "6e9c9d7960fe0ef083ff824287a99d9c0b9f5e6a",
                "size": 131072
              }
            ],
            "description": "MK6 System Software/Setchips",
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk6.cpp:6639",
            "system": "aristocrat-mk6"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f2fea07e",
                "name": "mk7-bios_590176_01_1.00.7.u1",
                "sha1": "285038473fbe3a5708045e2f8b14562f3c24b203",
                "size": 1048576
              }
            ],
            "description": "Aristocrat MK-7 BIOS",
            "name": "aristmk7.zip",
            "required": true,
            "source_ref": "src/mame/aristocrat/aristmk7.cpp:233",
            "system": "aristocrat-mk7"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "88d0be26",
                "name": "136032.205.l13",
                "sha1": "d124045eccc562ff0423b23a240e27ad740fa0c9",
                "size": 16384
              },
              {
                "crc32": "3c79ef05",
                "name": "136032.206.l12",
                "sha1": "20fdca7131478e1ee12691bdafd2d5bb74cbd16f",
                "size": 16384
              },
              {
                "crc32": "79021d3c",
                "name": "136032.105.l13",
                "sha1": "85febd34bcb166fc3326b5e5e4e80e157b660a08",
                "size": 16384
              },
              {
                "crc32": "76ee86c4",
                "name": "136032.106.l12",
                "sha1": "cbcd424510435a04e9041967a13781fd19b0f2c4",
                "size": 16384
              },
              {
                "crc32": "195c54ad",
                "name": "136032.114.j11",
                "sha1": "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7",
                "size": 16384
              },
              {
                "crc32": "7275b4dc",
                "name": "136032.115.j10",
                "sha1": "0896ab37ea832a1335046353612c1b4c86d8d040",
                "size": 16384
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.107.b2",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              }
            ],
            "description": "Atari System 1 BIOS",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/atari/atarisy1.cpp:2669",
            "system": "atari-system1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "719b2b0b",
                "name": "bios0.ic23",
                "sha1": "b4c1a26bc8906d5275eb28c701dff2b9365bcdfa",
                "size": 131072
              },
              {
                "crc32": "d3e80a9f",
                "name": "bios1.ic23",
                "sha1": "33024f9d51c04884c2b44ce146f340e7a857b959",
                "size": 131072
              },
              {
                "crc32": "82a105f0",
                "name": "fpr-24363.ic48",
                "sha1": "5128fe2ddcced77332bdcab691c09958051fa564",
                "size": 131072
              }
            ],
            "description": "Atomiswave BIOS",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/dc_atomiswave.cpp:1480",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f0774fc2",
                "name": "boot.bin",
                "sha1": "84fade54e025f170d983200a86c1ed96ef1a9ed3",
                "size": 480
              },
              {
                "crc32": "85c2afc5",
                "name": "400b03.8g",
                "sha1": "387842d02d50d0d78a27270e7267af19555b9e63",
                "size": 8192
              },
              {
                "crc32": "5827b1e8",
                "name": "400a1.2b",
                "sha1": "fa8cf5f868cfb08bce203baaebb6c4055ee2a000",
                "size": 256
              },
              {
                "crc32": "2f44f970",
                "name": "400a2.1b",
                "sha1": "7ab46f9d5d587665782cefc623b8de0124a6d38a",
                "size": 256
              }
            ],
            "description": "Bubble System BIOS",
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/konami/nemesis.cpp:3140",
            "system": "konami-bubblesystem"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "name": "cdi200.rom",
                "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "688cda63",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              }
            ],
            "description": "CD-i (Mono-I) (PAL) BIOS",
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/philips/cdi.cpp:922",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "86c4a4f0",
                "name": "magnet-master-vid-e03.bin",
                "sha1": "6db1a006b2e0b2a7cc9748ade881debb098b6757",
                "size": 8192
              }
            ],
            "description": "Magnet System",
            "name": "cedmag.zip",
            "required": true,
            "source_ref": "src/mame/efo/cedar_magnet.cpp:1166",
            "system": "efo-cedar-magnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "66232714",
                "name": "chihiro_xbox_bios.bin",
                "sha1": "b700b0041af8f84835e45d1d1250247bf7077188",
                "size": 524288
              },
              {
                "crc32": "13034372",
                "name": "fpr-23887_29lv160te.ic4",
                "sha1": "77197fba2781ed1d81402c48bd743adb26d3161a",
                "size": 2097152
              },
              {
                "crc32": "a4fcab0b",
                "name": "fpr21042_m29w160et.bin",
                "sha1": "a13cf9c5cdfe8605d82150b7573652f419b30197",
                "size": 2097152
              },
              {
                "crc32": "488624ea",
                "name": "315-6351a_epc1pc8.ic2",
                "sha1": "1a607337a186415ae90b48934ce2aae81639d4de",
                "size": 130817
              },
              {
                "crc32": "cfc5e06f",
                "name": "ic10_g24lc64.bin",
                "sha1": "3ababd4334d8d57abb22dd98bd2d347df39648d9",
                "size": 8192
              },
              {
                "crc32": "8dc8374e",
                "name": "ic11_24lc024.bin",
                "sha1": "cc03a0650bfac4bf6cb66e414bbef121cba53efe",
                "size": 128
              },
              {
                "crc32": "7742ab62",
                "name": "pc20_g24lc64.bin",
                "sha1": "82dad6e2a75bab4a4840dc6939462f1fb9b95101",
                "size": 8192
              }
            ],
            "description": "Chihiro BIOS",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/sega/chihiro.cpp:2614",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "m534002c-15.ic353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              },
              {
                "crc32": "c425eaf5",
                "name": "ac01.ic652",
                "sha1": "decf77ab50f7f58c641c3214a11647924f3a8998",
                "size": 8
              }
            ],
            "description": "Acclaim ZN-1",
            "name": "coh1000a.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6015",
            "system": "acclaim-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "name": "m534002c-13.ic353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              },
              {
                "crc32": "f20f7fe5",
                "name": "msm27c402zb.ic353",
                "sha1": "9aac7d3b3d0cc0bbbe4056164b73078dce41d91c",
                "size": 524288
              },
              {
                "crc32": "bb7ba033",
                "name": "cp01.ic652",
                "sha1": "966f3aee5d00e1312c455f855915d621e6cb0672",
                "size": 8
              }
            ],
            "description": "Capcom ZN-1",
            "name": "coh1000c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5969",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              }
            ],
            "description": "Taito FX-1",
            "name": "coh1000t.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5989",
            "system": "taito-fx1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "msm27c402zb.ic353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              },
              {
                "crc32": "1cac067e",
                "name": "tw01.ic652",
                "sha1": "8e87941bfb374172628c8a37647e3a66b7166aa8",
                "size": 8
              }
            ],
            "description": "Time Warner ZN-1",
            "name": "coh1000w.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6024",
            "system": "atari-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "m534002c-17.ic353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              },
              {
                "crc32": "181668b3",
                "name": "at01.ic652",
                "sha1": "8d2fe1facb4473cc20b4b477aaf881f9280939cf",
                "size": 8
              }
            ],
            "description": "Atlus ZN-1",
            "name": "coh1001l.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6028",
            "system": "atlus-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "m27c402cz-54.ic353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              },
              {
                "crc32": "a7dd922e",
                "name": "et01.ic652",
                "sha1": "1069c1d9015028a51a1b314cfacb014ea90aa425",
                "size": 8
              }
            ],
            "description": "Eighting / Raizing ZN-1",
            "name": "coh1002e.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6038",
            "system": "eighting-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "m534002c-61.ic353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              },
              {
                "crc32": "50dc8322",
                "name": "mg01.ic652",
                "sha1": "cef4011c6c06d6fce546e1db5d9fbae155eabf57",
                "size": 8
              }
            ],
            "description": "Tecmo TPS System",
            "name": "coh1002m.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6089",
            "system": "tecmo-tps"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              },
              {
                "crc32": "2989b6eb",
                "name": "tt99.u17",
                "sha1": "89981ec68d30729c27d31f820cbfd0c23ed14a03",
                "size": 8
              },
              {
                "crc32": "9100dbf2",
                "name": "flash.u30",
                "sha1": "9ce888bd2a7e575c8ca71d978cb85de22afb5660",
                "size": 2097152
              }
            ],
            "description": "Taito G NET (COH-1002T)",
            "name": "coh1002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1342",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ff165f3",
                "name": "coh-1002v.ic353",
                "sha1": "8f59314c1093446b9bcb06d232244da6df78e206",
                "size": 524288
              },
              {
                "crc32": "1ce271df",
                "name": "kn01.ic652",
                "sha1": "b01479dc75a4a8a86bee7ac7cd10af2bda332544",
                "size": 8
              }
            ],
            "description": "Video System ZN-1",
            "name": "coh1002v.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6032",
            "system": "videosystem-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "m534002c-59.ic353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              },
              {
                "crc32": "7808fcef",
                "name": "cp10.ic652",
                "sha1": "3c3fb8227b05dace042dc1429b9f2355b1a15638",
                "size": 8
              }
            ],
            "description": "Capcom ZN-2",
            "name": "coh3002c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6055",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "03967fa7",
                "name": "m534002c-60.ic353",
                "sha1": "0e17fec2286e4e25deb23d40e41ce0986f373d49",
                "size": 524288
              },
              {
                "crc32": "235510b1",
                "name": "tt10.ic652",
                "sha1": "2cc02113207a8f0b078152d31ce6503411750e70",
                "size": 8
              },
              {
                "crc32": "6bb167b3",
                "name": "tt16.u17",
                "sha1": "9dcba08f10775a9adf2b1f382c947460edd3d239",
                "size": 8
              },
              {
                "crc32": "c48c8236",
                "name": "flash.u30",
                "sha1": "c6dad60266ce2ff635696bc0d91903c543273559",
                "size": 2097152
              },
              {
                "crc32": "cd15cc30",
                "name": "f35-01_m27c800_v1.bin",
                "sha1": "78361f46fa7186d5058937c86c66247a86b1257f",
                "size": 1048576
              },
              {
                "crc32": "6225ec11",
                "name": "f35-01_m27c800.bin",
                "sha1": "047852d456b6ff85f8e640887caa03cf3e63ffad",
                "size": 1048576
              },
              {
                "crc32": "6367aedf",
                "name": "f35-01_m27c800_modbios_mb-2009_dump_by_aje_fr.bin",
                "sha1": "8400775e0c974c8b017e26ef9339144cad457c63",
                "size": 1048576
              },
              {
                "crc32": "f98ae118",
                "name": "f35-01_m27c800_modbios_mb-2011.bin",
                "sha1": "c6918dfbb6fcf686dde4b731e84f740177ab31f0",
                "size": 1048576
              }
            ],
            "description": "Taito G NET (COH-3002T)",
            "name": "coh3002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1341",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              },
              {
                "crc32": "1e8175c8",
                "name": "mx27l1000-alt.u14",
                "sha1": "f60c016be2ff11e47b2192acddb92676043af501",
                "size": 131072
              }
            ],
            "description": "Crystal System BIOS",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/misc/crystal.cpp:845",
            "system": "brezzasoft-crystal"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d3837ae4",
                "name": "391640-03.u6a",
                "sha1": "06807db3181637455f4d46582d9972afec8956d9",
                "size": 1048576
              }
            ],
            "description": "Cubo BIOS",
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/amiga/cubo.cpp:1435",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3d33ac34",
                "name": "v0a-.7e",
                "sha1": "909d59e7a993affd10224402b4370e82a5f5545c",
                "size": 4096
              },
              {
                "crc32": "23d929b7",
                "name": "v0b-.7e",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "9f505709",
                "name": "v0c-.7e",
                "sha1": "a9c661ba5a0d3fa5e935fb9c10fa63e2d9809981",
                "size": 4096
              },
              {
                "crc32": "1e0c22b1",
                "name": "v0d-.7e",
                "sha1": "5fec8fef500bbebc13d0173406afc55235d3affb",
                "size": 4096
              },
              {
                "crc32": "2541e34b",
                "name": "dsp-3_p0-a.m9",
                "sha1": "4f983513dbae1350c83a433dea77a4465748b9c6",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b67a91d9",
                "name": "dsp-3_p0-b.m9",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "c76c4057",
                "name": "dsp-3_p0-c.m9",
                "sha1": "4093d4ac44feff595e34f361ed1ed84113c9225e",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "4b7d72bc",
                "name": "dsp-3_p0-d.m9",
                "sha1": "a70c5ba88404dafee2cc717071c4a249f67ab645",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "a6df18fd",
                "name": "cassmcu.1c",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              }
            ],
            "description": "DECO Cassette System",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/dataeast/decocass.cpp:2131",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62483677",
                "name": "epr-22851.ic27",
                "sha1": "3e3bcacf5f972c376b569f45307ee7fd0b5031b7",
                "size": 2097152
              },
              {
                "crc32": "28aa539d",
                "name": "epr-22850.ic27",
                "sha1": "14485368656af80504b212da620179c49f84c1a2",
                "size": 2097152
              },
              {
                "crc32": "121e009c",
                "name": "epr-22849.ic27",
                "sha1": "3beb91f660e60590491b209b6be8584b05a90548",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI Ferrari F355 Challenge (twin/deluxe) BIOS",
            "name": "f355bios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10920",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "12ed7c66",
                "name": "epr-21864.ic27",
                "sha1": "046be66e92eae766f3e05594aa837fc8888534ed",
                "size": 2097152
              },
              {
                "crc32": "0615a4d1",
                "name": "epr-21863.ic27",
                "sha1": "2c6986580b84278af75f396229fdd587bebc1768",
                "size": 2097152
              },
              {
                "crc32": "1f630716",
                "name": "epr-21862.ic27",
                "sha1": "8d157809770467c3e7618c6299f3b96b5f10518c",
                "size": 2097152
              },
              {
                "crc32": "05128861",
                "name": "epr-21864p.ic27",
                "sha1": "5bdb320d84015b8429527a8eb4524958031862aa",
                "size": 2097152
              },
              {
                "crc32": "f0cd4aaa",
                "name": "epr-21862p.ic27",
                "sha1": "9a9157992bf7a104c096efcdb8b02ceece186cbb",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI Ferrari F355 Challenge (deluxe) BIOS",
            "name": "f355dlx.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10919",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e51ff184",
                "name": "galaxy_u2__v1.90_12-01-98.u2",
                "sha1": "aaa795f2c15ec29b3ceeb5c917b643db0dbb7083",
                "size": 1048576
              },
              {
                "crc32": "c6d7bc6d",
                "name": "galaxy_u1__v1.90_12-01-98.u1",
                "sha1": "93c032f9aa38cbbdda59a8a25ff9f38f7ad9c760",
                "size": 1048576
              },
              {
                "crc32": "73cff284",
                "name": "galaxy_u2__v1.80_10-15-98.u2",
                "sha1": "e6f7d92999cdb478c21c3b65a04eade84299ac12",
                "size": 1048576
              },
              {
                "crc32": "e3ae423c",
                "name": "galaxy_u1__v1.80_10-15-98.u1",
                "sha1": "66d1964845a99a5ed4b19b4135b55cde6b5fe295",
                "size": 1048576
              },
              {
                "crc32": "d1c3dbb3",
                "name": "galaxy_u2__v1.71_7-8-98.u2",
                "sha1": "ebe74ed7f2d8c4abcd6743b9d9c77cc347efc444",
                "size": 1048576
              },
              {
                "crc32": "604415c8",
                "name": "galaxy_u1__v1.71_7-8-98.u1",
                "sha1": "6c67c3be1aca03d009b6244e3bd911caaa2ca666",
                "size": 1048576
              }
            ],
            "description": "Galaxy Games",
            "name": "galgames.zip",
            "required": true,
            "source_ref": "src/mame/ces/galgames.cpp:1301",
            "system": "ces-galaxy-games"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ed0d518b",
                "name": "a-110.u12",
                "sha1": "8f3ca8792ad907c660d9149a1aa3a3528c7573e3",
                "size": 2048
              },
              {
                "crc32": "a223f2e8",
                "name": "b1-110.u13",
                "sha1": "767e15e19e11399935c890c1d1034dccf1ad7f92",
                "size": 2048
              }
            ],
            "description": "Model 110",
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gp_1.cpp:575",
            "system": "gameplan-mpu1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "81498f73",
                "name": "863a03.7b",
                "sha1": "3599b40a5872eab3a00d345287635355fcb25a71",
                "size": 524288
              },
              {
                "crc32": "6f42a09e",
                "name": "863a05.2x",
                "sha1": "cab5209f90f47b9ee6e721479913ad74e3ba84b1",
                "size": 524288
              }
            ],
            "description": "Twinkle System",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/konami/twinkle.cpp:1643",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "614a3bd9",
                "name": "a1752cf.u5",
                "sha1": "febca18fb6f96037ca82e515dd161dfcb0e4c776",
                "size": 2048
              },
              {
                "crc32": "4cd312dd",
                "name": "a1753ce.u4",
                "sha1": "31245daa9972ef8652caee69986585bb8239e86e",
                "size": 2048
              }
            ],
            "description": "System 1",
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/pinball/gts1.cpp:1070",
            "system": "gottlieb-system1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2aa906a7",
                "name": "epr-23400a.ic94",
                "sha1": "098c9909b123ed6c338ac874f2ee90e3b2da4c02",
                "size": 2097152
              },
              {
                "crc32": "3d557104",
                "name": "epr-23400.ic94",
                "sha1": "d39879f5a1acbd54ad8ee4fbd412f870c9ff4aa5",
                "size": 2097152
              },
              {
                "crc32": "d96298b6",
                "name": "epr-21904.ic94",
                "sha1": "d10d837bc7d68eb7125c34beffe21a91305627b0",
                "size": 2097152
              },
              {
                "crc32": "7cbf2fb6",
                "name": "prot_bot.ic94",
                "sha1": "7384e3c9314add7d61f93c9edd9fb7788d08f423",
                "size": 2097152
              },
              {
                "crc32": "737dc714",
                "name": "93c46.ic115",
                "sha1": "852a90319ac2e787b94a4fc769424b79afbaaf9d",
                "size": 128
              },
              {
                "bad_dump": true,
                "crc32": "194c6c18",
                "name": "x76f100.ic85",
                "sha1": "6c2de7dae32bef855d9bc556568c3a170f54caa5",
                "size": 132
              }
            ],
            "description": "Hikaru BIOS",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/sega/hikaru.cpp:1482",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "ab5948d6",
                "name": "bios_us.bin",
                "sha1": "f8b940c1ae5ce2d3b2cd0c9bfaf6e5b063cec06e",
                "size": 524288
              },
              {
                "crc32": "bbf07ec6",
                "name": "bios_export.bin",
                "sha1": "5656aa077f6a6d43953f15b5123eea102a9d5313",
                "size": 524288
              },
              {
                "crc32": "ac953e2e",
                "name": "bios_korea.bin",
                "sha1": "f502188ef252b7c9d04934c4b525730a116de48b",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              },
              {
                "crc32": "b70df21f",
                "name": "tmp87ph40an.bin",
                "sha1": "5b742e8a0bbf4c0ae4f4398d34c7058fb24acc92",
                "size": 32768
              },
              {
                "crc32": "78b7020d",
                "name": "lvs-ioj-br9020f.u2",
                "sha1": "2b8549532ef5e1e8102dbe71af55fdfb27ccbba6",
                "size": 256
              },
              {
                "crc32": "af9f4287",
                "name": "lvs-igx-br9020f.u3",
                "sha1": "6df0e35c77dbfee2fab7ff490dcd651db420e367",
                "size": 256
              },
              {
                "crc32": "dabec5d2",
                "name": "lvs-jam-br9020f.u3",
                "sha1": "19c5be89c57387d6ea563b3dc55674d0692af98e",
                "size": 256
              }
            ],
            "description": "Hyper NeoGeo 64 BIOS",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/snk/hng64.cpp:3238",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "065f8500",
                "name": "epr-21331.ic27",
                "sha1": "49a3881e8d76f952ef5e887200d77b4a415d47fe",
                "size": 2097152
              },
              {
                "crc32": "9e3bfa1b",
                "name": "epr-21330.ic27",
                "sha1": "b539d38c767b0551b8e7956c1ff795de8bbe2fbc",
                "size": 2097152
              },
              {
                "crc32": "d99e5b9b",
                "name": "epr-21329.ic27",
                "sha1": "453ffb41b6197cac6d12e7814bb1d7281ccf1659",
                "size": 2097152
              },
              {
                "crc32": "bd6ce0ec",
                "name": "epr-21332.ic27",
                "sha1": "3d1ce5cb6978afe57967d8b53bc969259dd64749",
                "size": 2097152
              },
              {
                "crc32": "ea74e967",
                "name": "hotd2biosproto.ic27",
                "sha1": "e4d037480eb6555d335a8ab9cd6c56122335586d",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI The House of the Dead 2 BIOS",
            "name": "hod2bios.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10918",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2292585c",
                "name": "ism2006v00.u1",
                "sha1": "97ba0e0f0be832a5114d95151e519bc027f6675b",
                "size": 131072
              }
            ],
            "description": "ISG Selection Master Type 2006 BIOS",
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/sega/segas16b_isgsm.cpp:608",
            "system": "sega-isgsm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e0fc1a16",
                "name": "eagle_u15_v209.u15",
                "sha1": "c9524f7ee6b95bd484a3b75bcbe2243cb273f84c",
                "size": 1048576
              },
              {
                "crc32": "772f2864",
                "name": "eagle_u15_v208.u15",
                "sha1": "085063a4e34f29ebe3814823cd2c6323a050da36",
                "size": 1048576
              },
              {
                "crc32": "f02e5523",
                "name": "eagle_u15_v204.u15",
                "sha1": "b979cf72a6992f1ecad9695a08c8d51e315ab537",
                "size": 1048576
              },
              {
                "crc32": "e180442b",
                "name": "eagle_u15_v201.u15",
                "sha1": "4f50821fed5bcd786d989520aa2559d6c416fb1f",
                "size": 1048576
              },
              {
                "crc32": "97a01fc9",
                "name": "golf_fore_u15_v107.u15",
                "sha1": "a421dbf4d097b2f50cc005d3cd0d63e562e03df8",
                "size": 1048576
              },
              {
                "crc32": "9c79b7ad",
                "name": "golf_fore_u15_v106a.u15",
                "sha1": "ccf1c86e79d65bee30f399e0fa33a7839570d93b",
                "size": 1048576
              },
              {
                "crc32": "56bc193d",
                "name": "golf_fore_u15_v106.u15",
                "sha1": "e531d208ef27f777d0784414885f390d1be654b9",
                "size": 1048576
              },
              {
                "crc32": "3870dbe0",
                "name": "golf_fore_u15_v105.u15",
                "sha1": "09be2d86c7259cd81d945c757044b167a76f30db",
                "size": 1048576
              },
              {
                "crc32": "c35f4cf2",
                "name": "golf_fore_u15_v103.u15",
                "sha1": "45301c18c7f8f78754c8ad60ea4d2da5a7dc55fb",
                "size": 1048576
              },
              {
                "crc32": "1fd39e73",
                "name": "bbh_u15_v102.u15",
                "sha1": "d1ac758f94defc5c55c62594b3999a406dd9ef1f",
                "size": 1048576
              },
              {
                "crc32": "4c000c5e",
                "name": "golf_fore_u15_v102.u15",
                "sha1": "4fd5ea2a0874759b621c9cd52cee55d282443e5d",
                "size": 1048576
              },
              {
                "crc32": "2600bc2b",
                "name": "golf_fore_u15_v101.u15",
                "sha1": "c4b89e69c51e4a3bb1874407c4d30b6caed4f396",
                "size": 1048576
              },
              {
                "crc32": "62c4af8a",
                "name": "17s20lpc_sb4.u26",
                "sha1": "6eca277b9c66a401990599e98fdca64a9e38cc9a",
                "size": 32768
              },
              {
                "crc32": "c88b9d42",
                "name": "17s20lpc_sb5.u26",
                "sha1": "b912d0fc50ecdc6a198c626f6e1644e8405fac6e",
                "size": 32768
              },
              {
                "crc32": "f5cf3187",
                "name": "17s50a_red1.u26",
                "sha1": "83b4a14de9959e5a776d97d424945d43501bda7f",
                "size": 131072
              },
              {
                "crc32": "9d1e1ace",
                "name": "e2-card1.u22.jed",
                "sha1": "287d6a30e9f32137ef4eba54f0effa092c97a6eb",
                "size": 3025
              },
              {
                "crc32": "4f1ff45a",
                "name": "e2-res3.u117.jed",
                "sha1": "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff",
                "size": 3025
              }
            ],
            "description": "Eagle BIOS",
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/itech/iteagle.cpp:756",
            "system": "itech-eagle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "description": "Baby Phoenix/GV System",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigv.cpp:1447",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "description": "System GX",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigx.cpp:4191",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "36122a98",
                "name": "2v02s502_ifu.u190",
                "sha1": "3d2c40c9d504358d890364e26c9562e40314d8a4",
                "size": 524288
              }
            ],
            "description": "Konami Endeavour BIOS",
            "name": "konendev.zip",
            "required": true,
            "source_ref": "src/mame/konami/konendev.cpp:909",
            "system": "konami-endeavour"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "98de405e",
                "name": "b22a01.u42",
                "sha1": "4bc268a996825c1bdf6ae277d331fe7bdc0cc00c",
                "size": 524288
              }
            ],
            "description": "Konami Python BIOS",
            "name": "kpython.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython.cpp:376",
            "system": "konami-python"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "79d60546",
                "name": "ps2-0190j-20030822.bin",
                "sha1": "0ea98a25a32145dda514de2f0d4bfbbd806bd00c",
                "size": 4194304
              }
            ],
            "description": "Konami Python 2 BIOS",
            "name": "kpython2.zip",
            "required": true,
            "source_ref": "src/mame/konami/kpython2.cpp:1918",
            "system": "konami-python2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "233e5159",
                "name": "941b01.u25",
                "sha1": "66ff268d5bf78fbfa48cdc3e1b08f8956cfd6cfb",
                "size": 262144
              },
              {
                "crc32": "df6f88d6",
                "name": "941a01.u25",
                "sha1": "2bc10e4fbec36573aa8b6878492d37665f074d87",
                "size": 262144
              },
              {
                "crc32": "f1511505",
                "name": "ds2430.u3",
                "sha1": "ed7cd9b2763b3e377df9663943160f9871f65105",
                "size": 40
              }
            ],
            "description": "Konami Viper BIOS",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/konami/viper.cpp:3213",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "10dd9b76",
                "name": "6.0.0010a.bin",
                "sha1": "1fdf1f921bc395846a7c3180fbdbc4ca287a9670",
                "size": 1048576
              },
              {
                "crc32": "5ffdfbf8",
                "name": "6.0.0009.bin",
                "sha1": "605bc4967b749b4e6d13fc2ebb845ba956a259a7",
                "size": 1048576
              },
              {
                "crc32": "ea2bf888",
                "name": "6.0.0010.bin",
                "sha1": "c9c5b6f0d4f4f36620939b15dd2f128a74347e37",
                "size": 1048576
              },
              {
                "crc32": "c3b021a4",
                "name": "fpr-24370b.ic6",
                "sha1": "1b6938a50fe0e4ae813864649eb103838c399ac0",
                "size": 4194304
              },
              {
                "crc32": "f78d14d7",
                "name": "vid_bios.u504",
                "sha1": "f129787e487984edd23bf344f2e9500c85052275",
                "size": 65536
              }
            ],
            "description": "Sega Lindbergh BIOS",
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/lindbergh.cpp:639",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "description": "Multi Amenity Cassette System 2 BIOS",
            "name": "mac2bios.zip",
            "note": "Both halves of the BIOS, macs2os_l.bin and macs2os_h.bin, are NO_DUMP, so handle_missing_file counts them as known-bad rather than errors and the machine still runs.",
            "required": false,
            "source_ref": "src/mame/seta/macs.cpp:776",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "name": "am_macs_os_low.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "name": "am_macs_os_hi.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              },
              {
                "crc32": "669096c1",
                "name": "sx011-01.bin",
                "sha1": "36f55a2e4865bdf0506746a4df51bfb1944f905e",
                "size": 343
              }
            ],
            "description": "Multi Amenity Cassette System BIOS",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:775",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "description": "Max-A-Flex",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/atari/maxaflex.cpp:447",
            "system": "exidy-maxaflex"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              },
              {
                "bad_dump": true,
                "crc32": "d8289e31",
                "name": "315-5661.ic7",
                "sha1": "a0e9134d9e8043a3660a2ce122cfd5d7f76773b9",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "fd5c4fb3",
                "name": "315-5653.ic56",
                "sha1": "6b2ba657836f3031d77602526416200e31d41a6e",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "55c6cddb",
                "name": "315-5651.ic8",
                "sha1": "e1a968305ca7ea17e9021b31506ca087b84a8ab1",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "825ea316",
                "name": "315-5349a.ic54",
                "sha1": "f49edb6a3f9349330f7ff525ef60517ed276a663",
                "size": 260
              },
              {
                "bad_dump": true,
                "crc32": "4a2d27d1",
                "name": "315-5655.ic34",
                "sha1": "ba79183e4b522d1b57a46a56fc7d9b85de24df36",
                "size": 260
              }
            ],
            "description": "Mega Play BIOS",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/sega/megaplay.cpp:1018",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "name": "epr-12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              },
              {
                "crc32": "07c3f423",
                "name": "epr-12263a.20",
                "sha1": "50c28bbc2d4349c820d988ae3f20aae3f808545f",
                "size": 32768
              },
              {
                "crc32": "ca26c87a",
                "name": "epr-12263b.20",
                "sha1": "987a18bede6e54cd73c4434426eb6c302a37cdc5",
                "size": 32768
              },
              {
                "crc32": "884e4aa5",
                "name": "epr-12604a.20",
                "sha1": "c9008c431a937c084fb475273093ca0b434b5f47",
                "size": 32768
              }
            ],
            "description": "Mega-Tech",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/sega/megatech.cpp:1430",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2ff7ec96",
                "name": "otp.dat",
                "sha1": "633365fd19a3d0f2ce56cb499b2577a5fb53e466",
                "size": 16384
              }
            ],
            "description": "Miuchiz Virtual Companions common BIOS",
            "name": "miuchiz.zip",
            "required": true,
            "source_ref": "src/mame/misc/miuchiz.cpp:227",
            "system": "miuchiz"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.ic27",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "4599ad13",
                "name": "epr-21576c.ic27",
                "sha1": "7e730e9452a792d76f210c33a955d385538682c7",
                "size": 2097152
              },
              {
                "crc32": "755a6e07",
                "name": "epr-21576b.ic27",
                "sha1": "7e8b8ccfc063144d89668e7224dcd8a36c54f3b3",
                "size": 2097152
              },
              {
                "crc32": "cedfe439",
                "name": "epr-21576a.ic27",
                "sha1": "f27798bf3d890863ef0c1d9dcb4e7782249dca27",
                "size": 2097152
              },
              {
                "crc32": "9dad3495",
                "name": "epr-21576.ic27",
                "sha1": "5fb66f9a2b68d120f059c72758e65d34f461044a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "628a27fd",
                "name": "epr-21578f.ic27",
                "sha1": "dae7add616b1a2478f00608823e88c3b82a0e78f",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.ic27",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "6c9aad83",
                "name": "epr-21578a.ic27",
                "sha1": "555918de76d8dbee2a97d8a95297ef694b3e803f",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.ic27",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "969dc491",
                "name": "epr-21577a.ic27",
                "sha1": "581d1eae328b87b67508a7586ffc60cee256f70f",
                "size": 2097152
              },
              {
                "crc32": "33513691",
                "name": "epr-21579d.ic27",
                "sha1": "b1d8c7c516e1471a788fcf7a02a794ad2f05aeeb",
                "size": 2097152
              },
              {
                "crc32": "71f9c918",
                "name": "epr-21579.ic27",
                "sha1": "d15af8b947f41eea7c203b565cd403e3f37a2017",
                "size": 2097152
              },
              {
                "crc32": "7a50fab9",
                "name": "boot_rom_64b8.ic606",
                "sha1": "ef79f448e0bf735d1264ad4f051d24178822110f",
                "size": 524288
              },
              {
                "crc32": "de7cfdb0",
                "name": "develop110.ic27",
                "sha1": "da16800edc4d49f70481c124d487f544c2fa8ce7",
                "size": 2097152
              },
              {
                "crc32": "309a196a",
                "name": "develop.ic27",
                "sha1": "409b50371feb648f10efd6b7ac420bf08d9a3b5a",
                "size": 2097152
              },
              {
                "crc32": "58e17c23",
                "name": "zukinver0930.ic25",
                "sha1": "19330f906accf1b859f56bbcedc2edff73747599",
                "size": 2097152
              },
              {
                "crc32": "cce01f1f",
                "name": "epr-21576h_multi.ic27",
                "sha1": "cca17119ad13e3a4ef7cb6902a37b65d6a844aee",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "d3d57af8",
                "name": "epr-21336a.ic27",
                "sha1": "0eb72c2a20ad8b86d442b77760eab5e89521d469",
                "size": 2097152
              },
              {
                "crc32": "5b28f868",
                "name": "naomi_boot_2491.ic27",
                "sha1": "d101f58c69d9835e87a969688e43dc9b699b89d0",
                "size": 2097152
              },
              {
                "crc32": "46dbe90f",
                "name": "epr-21580a.ic27",
                "sha1": "822b2ea8e254ea3ce66f0ea67e80a8c7e1125ec9",
                "size": 2097152
              },
              {
                "crc32": "7c9fea46",
                "name": "315-6188.ic31",
                "sha1": "f77c07ae65dfed18c1c4c632c8945be21d02ddaf",
                "size": 8244
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI BIOS",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10917",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "297ea6ed",
                "name": "epr-23605c.ic27",
                "sha1": "cfbfe57c80e6ee86a101fa83aec0a01e00c0f42a",
                "size": 2097152
              },
              {
                "crc32": "3a3242d4",
                "name": "epr-23605b.ic27",
                "sha1": "aaca4df51ef91d926f8191d372f3dfe1d20d9484",
                "size": 2097152
              },
              {
                "crc32": "7bc3fc2d",
                "name": "epr-23605a.ic27",
                "sha1": "a4a9531a7c66ff30046908cf71f6c7b6fb59c392",
                "size": 2097152
              },
              {
                "crc32": "5731e446",
                "name": "epr-23605.ic27",
                "sha1": "787b0844fc408cf124c12405c095c59948709ea6",
                "size": 2097152
              },
              {
                "crc32": "6ef1dd8e",
                "name": "epr-23608c.ic27",
                "sha1": "25ef957ec1c58fdaff5e89102002bca6c38832c5",
                "size": 2097152
              },
              {
                "crc32": "a554b1e3",
                "name": "epr-23608b.ic27",
                "sha1": "343b727a3619d1c75a9b6d4cc156a9050447f155",
                "size": 2097152
              },
              {
                "crc32": "e8f884d1",
                "name": "epr-23608a.ic27",
                "sha1": "28f4de747bb3cf860b9ebf897322fbc5d7c1e156",
                "size": 2097152
              },
              {
                "crc32": "929cc3a6",
                "name": "epr-23608.ic27",
                "sha1": "47d00c818de23f733a4a33b1bbc72eb8aa729246",
                "size": 2097152
              },
              {
                "crc32": "750e254b",
                "name": "epr-23607c.ic27",
                "sha1": "81d0b1a076c274c6bd7c53b65e7b80e14fe039e1",
                "size": 2097152
              },
              {
                "crc32": "f308c5e9",
                "name": "epr-23607b.ic27",
                "sha1": "5470ab1cee6afecbd8ca8cf40f8fbe4ec2cb1471",
                "size": 2097152
              },
              {
                "crc32": "2b55add2",
                "name": "epr-23607.ic27",
                "sha1": "547de5f97d3183c8cd069c4fa3c09f13d8b637d9",
                "size": 2097152
              },
              {
                "crc32": "99e3751f",
                "name": "epr-23609b.ic27",
                "sha1": "8a244f75595c49d2a37a42ab96b6bab35163ca0e",
                "size": 2097152
              },
              {
                "crc32": "de8e1267",
                "name": "epr-23610b.ic27",
                "sha1": "0b3a36446c308fcbfe3647df45c848091e8797f1",
                "size": 2097152
              },
              {
                "crc32": "353fdbcd",
                "name": "epr-23605c_multi.ic27",
                "sha1": "a8b7dce572b74e02e65cb949b2c366c87625157f",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI 2 BIOS",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10922",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "description": "NAOMI GD-ROM BIOS",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10923",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "03cc9f6a",
                "name": "sp-45.sp1",
                "sha1": "cdf1f49e3ff2bac528c21ed28449cf35b7957dc1",
                "size": 524288
              },
              {
                "crc32": "91b64be3",
                "name": "sp-s3.sp1",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "name": "sp-u2.sp1",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "62f021f4",
                "name": "sp1-u2",
                "sha1": "62d372269e1b3161c64ae21123655a0a22ffd1bb",
                "size": 131072
              },
              {
                "crc32": "1179a30f",
                "name": "sp1-u4.bin",
                "sha1": "866817f47aa84d903d0b819d61f6ef356893d16a",
                "size": 131072
              },
              {
                "crc32": "2025b7a2",
                "name": "sp1-u3.bin",
                "sha1": "73d774746196f377111cd7aa051cc8bb5dd948b3",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "name": "sp-j2.sp1",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "dff6d41f",
                "name": "japan-j3.bin",
                "sha1": "e92910e20092577a4523a6b39d578a71d4de7085",
                "size": 131072
              },
              {
                "crc32": "fbc6d469",
                "name": "sp1-j3.bin",
                "sha1": "46b2b409b5b68869e367b40c846373623edb632a",
                "size": 131072
              },
              {
                "crc32": "486cb450",
                "name": "sp-j3.sp1",
                "sha1": "52c21ea817928904b80745a8c8d15cbad61e1dc1",
                "size": 524288
              },
              {
                "crc32": "162f0ebe",
                "name": "sp-1v1_3db8c.bin",
                "sha1": "fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271",
                "size": 131072
              },
              {
                "crc32": "a7aab458",
                "name": "uni-bios_4_0.rom",
                "sha1": "938a0bda7d9a357240718c2cec319878d36b8f72",
                "size": 131072
              },
              {
                "crc32": "24858466",
                "name": "uni-bios_3_3.rom",
                "sha1": "0ad92efb0c2338426635e0159d1f60b4473d0785",
                "size": 131072
              },
              {
                "crc32": "a4e8b9b3",
                "name": "uni-bios_3_2.rom",
                "sha1": "c92f18c3f1edda543d264ecd0ea915240e7c8258",
                "size": 131072
              },
              {
                "crc32": "0c58093f",
                "name": "uni-bios_3_1.rom",
                "sha1": "29329a3448c2505e1ff45ffa75e61e9693165153",
                "size": 131072
              },
              {
                "crc32": "a97c89a9",
                "name": "uni-bios_3_0.rom",
                "sha1": "97a5eff3b119062f10e31ad6f04fe4b90d366e7f",
                "size": 131072
              },
              {
                "crc32": "27664eb5",
                "name": "uni-bios_2_3.rom",
                "sha1": "5b02900a3ccf3df168bdcfc98458136fd2b92ac0",
                "size": 131072
              },
              {
                "crc32": "601720ae",
                "name": "uni-bios_2_3o.rom",
                "sha1": "1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9",
                "size": 131072
              },
              {
                "crc32": "2d50996a",
                "name": "uni-bios_2_2.rom",
                "sha1": "5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c",
                "size": 131072
              },
              {
                "crc32": "8dabf76b",
                "name": "uni-bios_2_1.rom",
                "sha1": "c23732c4491d966cf0373c65c83c7a4e88f0082c",
                "size": 131072
              },
              {
                "crc32": "0c12c2ad",
                "name": "uni-bios_2_0.rom",
                "sha1": "37bcd4d30f3892078b46841d895a6eff16dc921e",
                "size": 131072
              },
              {
                "crc32": "b24b44a0",
                "name": "uni-bios_1_3.rom",
                "sha1": "eca8851d30557b97c309a0d9f4a9d20e5b14af4e",
                "size": 131072
              },
              {
                "crc32": "4fa698e9",
                "name": "uni-bios_1_2.rom",
                "sha1": "682e13ec1c42beaa2d04473967840c88fd52c75a",
                "size": 131072
              },
              {
                "crc32": "e19d3ce9",
                "name": "uni-bios_1_2o.rom",
                "sha1": "af88ef837f44a3af2d7144bb46a37c8512b67770",
                "size": 131072
              },
              {
                "crc32": "5dda0d84",
                "name": "uni-bios_1_1.rom",
                "sha1": "4153d533c02926a2577e49c32657214781ff29b7",
                "size": 131072
              },
              {
                "crc32": "0ce453a0",
                "name": "uni-bios_1_0.rom",
                "sha1": "3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "5a86cff2",
                "name": "000-lo.lo",
                "sha1": "5992277debadeb64d1c1c64b0a92d9293eaf7e4a",
                "size": 131072
              },
              {
                "crc32": "c2ea0cfd",
                "name": "sfix.sfix",
                "sha1": "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3",
                "size": 131072
              }
            ],
            "description": "Neo-Geo MV-6F",
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/snk/neogeo.cpp:2428",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "67374715",
                "name": "va1b102.u2",
                "sha1": "8767cbd81614c2686a1adb70159f909e8ffd634d",
                "size": 131072
              },
              {
                "crc32": "b92a83c8",
                "name": "va1b101.u2",
                "sha1": "bd6d9adaa74cf7512478838d1bd5a79dbd0c4aa1",
                "size": 131072
              },
              {
                "crc32": "36135792",
                "name": "va1a101.u2",
                "sha1": "1b9c50bd02df8227b228b35cc485efd5a13ec639",
                "size": 131072
              }
            ],
            "description": "Nichibutsu High Rate DVD BIOS",
            "name": "nichidvd.zip",
            "required": true,
            "source_ref": "src/mame/nichibutsu/hrdvd.cpp:1012",
            "system": "nichibutsu-hrdvd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e06cb58f",
                "name": "nss-ic14.02.ic14",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              },
              {
                "crc32": "a8e202b3",
                "name": "nss-c.ic14",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "ac385b53",
                "name": "nss-v3.ic14",
                "sha1": "e3942f9d508c3c8074c3c3941376c37ca68b8e54",
                "size": 32768
              }
            ],
            "description": "Nintendo Super System BIOS",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/nss.cpp:1099",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "78c15fa2",
                "name": "pgm_p02s.u20",
                "sha1": "885a6558e022602cc6f482ac9667ba9f61e75092",
                "size": 131072
              },
              {
                "crc32": "e42b166e",
                "name": "pgm_p01s.u20",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "description": "PGM (Polygame Master) System BIOS",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/igs/pgm.cpp:5545",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "name": "pch1-c__8t_e-2.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "123ffa37",
                "name": "pch1-c_8te.8t",
                "sha1": "3bef754a5a85a8498bb6222ddf5cb9021f264db5",
                "size": 16384
              },
              {
                "crc32": "0be8ceb4",
                "name": "pck1-c_fix.8t",
                "sha1": "45b127a537370226e6b30be2b5a92ad05673ca7f",
                "size": 16384
              },
              {
                "crc32": "88a8f87e",
                "name": "pch1-c__8t_e-1.8t",
                "sha1": "d1d7ffe68d2e7aa2faf8ad41a7ec8421265ede42",
                "size": 16384
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "83ebc7a3",
                "name": "pch1-c_8m.8m",
                "sha1": "a7c607138f4f9b96ab5d3a82c47895f77672e296",
                "size": 8192
              },
              {
                "crc32": "90e1b80c",
                "name": "pch1-c_8p-8p",
                "sha1": "c4f4b135b2a11743518aaa0554c365b4a8cf299a",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "name": "pch1-c-6f.82s129an.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "name": "pch1-c-6e.82s129an.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "name": "pch1-c-6d.82s129an.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              },
              {
                "crc32": "48de65dc",
                "name": "rp2c0x.pal",
                "sha1": "d10acafc8da9ff479c270ec01180cca61efe62f5",
                "size": 192
              }
            ],
            "description": "PlayChoice-10 BIOS",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/playch10.cpp:2980",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a2b5546b",
                "name": "mk3_1.0_bios.u22",
                "sha1": "d99d29615e2b9c8784e03d4270cf7bb6569f389d",
                "size": 131072
              },
              {
                "crc32": "4540c23f",
                "name": "mk3_1.1_bios.u22",
                "sha1": "bba697dbe234e4f14c23aac126ea36df216f8c93",
                "size": 131072
              },
              {
                "crc32": "5911e31a",
                "name": "piu10.u8",
                "sha1": "295723b9b7da9e55b5dd5586b23b06355f4837ef",
                "size": 2097152
              },
              {
                "crc32": "9c436cfa",
                "name": "piu10.u9",
                "sha1": "480ea52e74721d1963ced41be5c482b7b913ccd2",
                "size": 2097152
              }
            ],
            "description": "Pump It Up BIOS",
            "name": "pumpitup.zip",
            "required": true,
            "source_ref": "src/mame/misc/xtom3d.cpp:997",
            "system": "andamiro-pumpitup"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d0c4695d",
                "name": "a2361.b1",
                "sha1": "4846adb3f6c292626840ba5255ffc5e788a69301",
                "size": 1024
              },
              {
                "crc32": "39a70611",
                "name": "a2362.b2",
                "sha1": "8545e168a5f256150bcff12d1e6d8efffd08c3cd",
                "size": 1024
              }
            ],
            "description": "Recel BIOS",
            "name": "recel.zip",
            "required": true,
            "source_ref": "src/mame/pinball/recel.cpp:546",
            "system": "recel-system3"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c3c74dc5",
                "name": "vm1211l01.u2",
                "sha1": "07352e6dba7514214e778ba39e1ca773e4698858",
                "size": 524288
              },
              {
                "crc32": "c8c6d25f",
                "name": "mt201l04.u012",
                "sha1": "5be39fa72b65f2e455ccc146dbab58d24ab46505",
                "size": 524288
              },
              {
                "crc32": "21b2ccbd",
                "name": "vm1201l01.u012",
                "sha1": "c3ceea196e5c1c6a9e03cf3a22e9f25f0099a38e",
                "size": 524288
              }
            ],
            "description": "Sammy Medal Game System BIOS",
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/sigma/sammymdl.cpp:1025",
            "system": "sammy-medal"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ca7df0de",
                "name": "epr-24236a.ic50",
                "sha1": "504c74d5fc96c53ef9f7753e9e37fb8b39cb628c",
                "size": 2097152
              },
              {
                "crc32": "25f2ef00",
                "name": "epr-24328.ic50",
                "sha1": "e58dec9f171e52b3ded213b3fcd9a0de8a438076",
                "size": 2097152
              },
              {
                "crc32": "03ec3805",
                "name": "epr-24328a.ic50",
                "sha1": "a8fbaea826ca257be0b2b86952f247254929e046",
                "size": 2097152
              },
              {
                "crc32": "e1e3c009",
                "name": "mb_serial.ic57",
                "sha1": "66bc636c527389c3338f631d78c788b4bd4e93be",
                "size": 128
              },
              {
                "crc32": "77cc5a6c",
                "name": "net_eeprom.ic74s",
                "sha1": "cbfba546256b70bce6c6fd0030d7e2e410a25526",
                "size": 512
              },
              {
                "crc32": "a738ea1c",
                "name": "net_firm_119.ic72",
                "sha1": "d25187a973a7e166e70334f964363adf2be87257",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24208a.ic72",
                "sha1": "3c32ddfb3c40be66b9fb2ba35fbfd5b534bb3da0",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24329.ic72",
                "sha1": "d0d062a4089a2d3404df45eb015faaf7eee9b8c2",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407.ic72",
                "sha1": "fbcc3d119b47a6da4d194e3fe4a98126c7049edf",
                "size": 2097152
              },
              {
                "crc32": "a738ea1c",
                "name": "fpr-24407_123.ic72",
                "sha1": "3f5a2fb03bbb1bd9af9fe32ad76a224c97aa9b7a",
                "size": 2097152
              },
              {
                "crc32": "4186d7ab",
                "name": "mb_eeprom_us.ic54s",
                "sha1": "fc23da69a511a7643b6a066161bcfc3cdeeacf04",
                "size": 128
              },
              {
                "crc32": "947ddfad",
                "name": "mb_eeprom_exp.ic54s",
                "sha1": "832a3db097af680d1d0eb9451b4650565f0cf8c7",
                "size": 128
              }
            ],
            "description": "Sega System SP (Spider) BIOS",
            "name": "segasp.zip",
            "required": true,
            "source_ref": "src/mame/sega/segasp.cpp:1273",
            "system": "sega-systemsp"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e31b5580",
                "name": "krom2.00.ic1",
                "sha1": "4a6a34a9a94c8249c3b441c2516bdd03e198c458",
                "size": 131072
              },
              {
                "crc32": "c9010002",
                "name": "krom1.ic1",
                "sha1": "f4c74086a83b728b1c1af3a021a60efa80eff5a4",
                "size": 65536
              },
              {
                "crc32": "ad3ec05c",
                "name": "atrom-4s-0.rom5",
                "sha1": "a3d336db585fe02a37c323422d9db6a33fd489a6",
                "size": 524288
              }
            ],
            "description": "Super Famicom Box BIOS",
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/sfcbox.cpp:586",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ea8901d9",
                "name": "epr10894a.20",
                "sha1": "43fd8bfc395e3b2e3fbe9645d692a5eb04783d9c",
                "size": 16384
              }
            ],
            "description": "Shooting Zone System BIOS",
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/sega/shtzone.cpp:376",
            "system": "sega-shootingzone"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "name": "sknse2.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              },
              {
                "crc32": "b8d3190c",
                "name": "supernova_modbios-japan.u10",
                "sha1": "62c9a4a075fd944e89fe95c6b46046101eb6de1c",
                "size": 524288
              },
              {
                "crc32": "1d90517c",
                "name": "supernova-modbios-korea.u10",
                "sha1": "463962ffe19880135f0d95a7beda79e27448e872",
                "size": 524288
              }
            ],
            "description": "Super Kaneko Nova System BIOS",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/kaneko/suprnova.cpp:2135",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "248910ed",
                "name": "bios47.bin",
                "sha1": "2901c94fb003e5eaea7e91127ad1f7953826a248",
                "size": 262144
              },
              {
                "crc32": "90074f2b",
                "name": "bios46.bin",
                "sha1": "08fdabad6114ede03a15ce51dec775080585b650",
                "size": 262144
              },
              {
                "crc32": "790d5db0",
                "name": "bios45.bin",
                "sha1": "6bbfb35275eb0c7bb740ff9b1e299042d4c5952a",
                "size": 262144
              },
              {
                "crc32": "a4b2703e",
                "name": "bios44.bin",
                "sha1": "9baa5e3aaaf120054979039e42bf1bca2a50616e",
                "size": 262144
              },
              {
                "crc32": "820c057e",
                "name": "bios42.bin",
                "sha1": "b553961c1bbb6b4afa366eb0dba7ed29ca148f5e",
                "size": 262144
              },
              {
                "crc32": "0940aebd",
                "name": "bios41.bin",
                "sha1": "38c8645eed9e17ef8e2cd0856f929697ce13df74",
                "size": 262144
              },
              {
                "crc32": "c5ed7d4f",
                "name": "bios40.bin",
                "sha1": "9fcffb385b5d68bf8cf87615ffee781f38f5fb74",
                "size": 262144
              },
              {
                "crc32": "e7541a28",
                "name": "bios39.bin",
                "sha1": "dad1aff2cb142d65e7c8736064dce8004451ea4b",
                "size": 262144
              },
              {
                "crc32": "cb49085b",
                "name": "bios38.bin",
                "sha1": "867b95ebef8fd53dad5b71cd4430ede08cf03540",
                "size": 262144
              },
              {
                "crc32": "9f35e2d2",
                "name": "bios37.bin",
                "sha1": "83026fc9fc72f795bc3229af98099b409c9bdc81",
                "size": 262144
              },
              {
                "crc32": "83ca05e9",
                "name": "bios36.bin",
                "sha1": "9d06677907c88481a167e52cc149995cfef0ff40",
                "size": 262144
              },
              {
                "crc32": "d5a2f966",
                "name": "bios35.bin",
                "sha1": "4f4c9688501814bc00b4cde58ac590b6e961816e",
                "size": 262144
              },
              {
                "crc32": "400702fe",
                "name": "bios34.bin",
                "sha1": "63a9e04d2ea3d4ace3e5c9f11cc62d0131bc4af0",
                "size": 262144
              },
              {
                "crc32": "96658274",
                "name": "bios33.bin",
                "sha1": "1a5fc83cf84a4c774abc055688fa0c32c3784086",
                "size": 262144
              },
              {
                "crc32": "63318d8a",
                "name": "bios32.bin",
                "sha1": "1194a30a65186f2d0a9e11742d51232598c16011",
                "size": 262144
              },
              {
                "crc32": "5121b267",
                "name": "bios31.bin",
                "sha1": "97e51ed4d53d19ed69db1faba5395b46a1edb6b0",
                "size": 262144
              },
              {
                "crc32": "c6e30fb1",
                "name": "bios30.bin",
                "sha1": "1d9a900a5383bf58b66a2e9f7fb34c61397dd327",
                "size": 262144
              },
              {
                "crc32": "ddbd94f4",
                "name": "bios29.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              },
              {
                "crc32": "ddbd94f4",
                "name": "test.bin",
                "sha1": "60ad74e56265a7936cf19e8480c657223d11f2d0",
                "size": 131072
              }
            ],
            "description": "Silverball BIOS",
            "name": "slvrball.zip",
            "required": true,
            "source_ref": "src/mame/misc/silverball.cpp:259",
            "system": "tab-silverball"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f688ae60",
                "name": "epr-23603.ic8",
                "sha1": "1a31b6b1a4257fcb6ac6a91e67dd798f91505f48",
                "size": 524288
              },
              {
                "crc32": "59ed40f4",
                "name": "epr-20091.ic8",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "d0e0889d",
                "name": "epr-19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "name": "epr-17951a.ic8",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "3e23c81f",
                "name": "epr-17740a.ic8",
                "sha1": "f9b282fd27693e9891843597b2e1823da3d23c7b",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "name": "epr-17740.ic8",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "name": "epr-17954a.ic8",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "name": "epr-17952a.ic8",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "4166c663",
                "name": "epr-17741a.ic8",
                "sha1": "cc41d30de06160083d77e0dc5d69e61fec7fdcb5",
                "size": 524288
              },
              {
                "crc32": "e09d1f60",
                "name": "epr-19854.ic8",
                "sha1": "b55cdcb45b2a5b0b35e352cf7625f0bd659084df",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "name": "epr-17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "02daf123",
                "name": "epr-17742a.ic8",
                "sha1": "23185beb1ce9c09b8719e57d1adb7b28c8141fd5",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              },
              {
                "crc32": "15432ae2",
                "name": "stvbios.nv",
                "sha1": "7d9364d546f3d3f839ec36be148076f8d26a65a6",
                "size": 128
              }
            ],
            "description": "ST-V BIOS",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/stv.cpp:3948",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c6c32f1a",
                "name": "hmc86304_bios_v208.u7",
                "sha1": "a07ade7f0567e1978cd8cee73c6a5d7b5e5f947f",
                "size": 32768
              },
              {
                "crc32": "811d3639",
                "name": "amibios_486dx_isa_bios.u32",
                "sha1": "a64d6026c16ac8c79f22b2c241f149402449fafb",
                "size": 65536
              },
              {
                "crc32": "8354d059",
                "name": "ver_151_03_u16.u16",
                "sha1": "a88df7cc259c1c39316cc3bff9e08aa4e8d3d2c0",
                "size": 131072
              },
              {
                "crc32": "ace4081d",
                "name": "ver_151_03_u17.u17",
                "sha1": "f57287ded53f8d127bcdc9e34b8adb356fe55e5e",
                "size": 131072
              },
              {
                "crc32": "9a6b553a",
                "name": "wfc062_212.u62",
                "sha1": "7045f733446866ee3171e175e1b22d9384fda1b5",
                "size": 32768
              },
              {
                "crc32": "528142eb",
                "name": "wi01p006.u6",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "528142eb",
                "name": "wi01p026.u26",
                "sha1": "2c152c6540f3d38cb881296decba957f8b5c7c58",
                "size": 2194
              },
              {
                "crc32": "a2ad9cf8",
                "name": "wi01p044.u44",
                "sha1": "67d44807f7346baf87c15d35c27458b0a7d5de89",
                "size": 2194
              },
              {
                "crc32": "e2a13df7",
                "name": "wi01p045.u45",
                "sha1": "eaa5ee3a92d11f0722934cb6d3443ead903dc78f",
                "size": 2194
              },
              {
                "crc32": "4c22fba5",
                "name": "wi01p046.u46",
                "sha1": "6fabc7a0790f8b883b83fa6fe5f1ee1302d284e2",
                "size": 2194
              },
              {
                "crc32": "7cb0931f",
                "name": "wi01p050.u50",
                "sha1": "394c100b33e5b8d1b2f4979399ad0791af39da28",
                "size": 2194
              },
              {
                "crc32": "d2eb2493",
                "name": "wi01p053.u53",
                "sha1": "a66b4733da0f4f0869839630063c52a733f5ea8c",
                "size": 2194
              },
              {
                "crc32": "96d3506e",
                "name": "wi01p054.u54",
                "sha1": "682ba8a7a17176ff41047cd9a9cfefdc2dc0fd64",
                "size": 2194
              },
              {
                "crc32": "8bf57db4",
                "name": "wi01p056.u56",
                "sha1": "1a5315397b1903c36d7450e873603584db8a00e8",
                "size": 2194
              },
              {
                "crc32": "882f6405",
                "name": "wi01p058.u58",
                "sha1": "e3b7c278f4ee9e0e11741d9ed7c5b32978a3d185",
                "size": 2194
              },
              {
                "crc32": "a97cff8e",
                "name": "wi01p067.u67",
                "sha1": "78451a4bffecd4e1655e7a89971e28b47f5c8829",
                "size": 2194
              },
              {
                "crc32": "3d1adb17",
                "name": "wi01p075.u75",
                "sha1": "b1af8c069de3df3c757e211b372f535b513c6326",
                "size": 2194
              },
              {
                "crc32": "3d3ad152",
                "name": "wi01p079.u79",
                "sha1": "a769bc80514873c2f238e6c8842c5b23596b4a42",
                "size": 2194
              },
              {
                "crc32": "657a4495",
                "name": "wi01p080.u80",
                "sha1": "c5bbd5e5f065a99f9f3d7ce89ca833779c338da5",
                "size": 2194
              },
              {
                "crc32": "b9958131",
                "name": "wi01p048.u48",
                "sha1": "058203eefb1645a446ff3ff4a170a673ad65076c",
                "size": 2706
              },
              {
                "crc32": "820d245a",
                "name": "wi01p049.u49",
                "sha1": "8690e6eb46617c3dc78e1b233970a9318101101c",
                "size": 2706
              },
              {
                "crc32": "4322291e",
                "name": "wi01p070.u70",
                "sha1": "e8751b585a4fb3f371e67616abf48c9d23847b77",
                "size": 2706
              },
              {
                "crc32": "fe77b66b",
                "name": "wi01p072.u72",
                "sha1": "aa13619346a566613f0fa9e3723419f65ffd3ea8",
                "size": 2706
              },
              {
                "crc32": "e02fe7c1",
                "name": "wi01p073.u73",
                "sha1": "ca22b30391453daae943007a0c04b5a28a958c18",
                "size": 2706
              },
              {
                "crc32": "fca2823c",
                "name": "wi01p074.u74",
                "sha1": "6628f1ba3827a3d333ed88c5f20ca94a1439c75e",
                "size": 2706
              },
              {
                "crc32": "902731aa",
                "name": "wi01p083.u83",
                "sha1": "862c2e6fb75fbd712aeaf9eb3b8a84210332fa66",
                "size": 2706
              },
              {
                "crc32": "f996657e",
                "name": "wi01p092.u92",
                "sha1": "01c2c774a9d5f4bcb78742cd606864eff512bfce",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p000.u23",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p001.u32",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p002.u22",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p003.u31",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p004.u6",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p005.u14",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "bab34c4b",
                "name": "wi02p006.u5",
                "sha1": "a3f4f17a122cc0d063cb700b3d183b894d857cb4",
                "size": 2706
              },
              {
                "crc32": "b438ce94",
                "name": "wi02p007.u13",
                "sha1": "f36c681b3d09835393a8be5079263915d3480b88",
                "size": 2706
              },
              {
                "crc32": "7c421890",
                "name": "wi02p008.u51",
                "sha1": "49d0ab674a8cb4e18ae5ba570132111ed3ccd546",
                "size": 2194
              },
              {
                "crc32": "ff63d60c",
                "name": "wi02p009.u49",
                "sha1": "8ee8629cc24cd18b944ffab3830ed474a1189179",
                "size": 2194
              },
              {
                "crc32": "68f48053",
                "name": "wi02p010.u72",
                "sha1": "17ae9f5caa4b2f4ff700ce44294d3d2881bd4e62",
                "size": 2194
              },
              {
                "crc32": "78701d0f",
                "name": "wi02p011.u88",
                "sha1": "089d5df945638cb811caa963430f5d6658c68947",
                "size": 2194
              },
              {
                "crc32": "1c489ff9",
                "name": "wi02p012.u85",
                "sha1": "a0e1c00c9a5dd870b84f869070961d25724cea92",
                "size": 2194
              },
              {
                "crc32": "19de958f",
                "name": "wi02p013.u86",
                "sha1": "a160f6b0e2a7e42457b470dbcf9415feaad880aa",
                "size": 2194
              },
              {
                "crc32": "845e4d48",
                "name": "wi02p014.u82",
                "sha1": "6aaeabad0e86fe480773b4b51ca4f7c1c8935993",
                "size": 2194
              },
              {
                "crc32": "a10d1876",
                "name": "wi02p015.u74",
                "sha1": "4091fa0a3abb2baeabcc6b250342cf29829af21a",
                "size": 2194
              },
              {
                "crc32": "d84b58c2",
                "name": "wi02p016.u52",
                "sha1": "087b5a56ddb6bef6b1bc93b9a8e0d23de27aa399",
                "size": 2194
              }
            ],
            "description": "SU2000",
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/misc/su2000.cpp:302",
            "system": "virtuality-su2000"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b2e41a2",
                "name": "r27v1602f.7d",
                "sha1": "f0a74bbcaf801f3fd0b7002ebd0118564aae3528",
                "size": 2097152
              }
            ],
            "description": "System 246 BIOS",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1716",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "b2a8eeb6",
                "name": "r27v1602f.8g",
                "sha1": "bc4fb4e1e53adbd92385f1726bd69663ff870f1e",
                "size": 2097152
              }
            ],
            "description": "System 256 BIOS",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/namco/namcops2.cpp:1761",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "11812ef8",
                "name": "700a01.22g",
                "sha1": "e1284add4aaddd5337bd7f4e27614460d52b5b48",
                "size": 524288
              },
              {
                "crc32": "39ebb0ca",
                "name": "700a01,gchgchmp.22g",
                "sha1": "9aab8c637dd2be84d79007e52f108abe92bf29dd",
                "size": 524288
              },
              {
                "crc32": "6cf852af",
                "name": "700b01.22g",
                "sha1": "a2421d0a494892c0e71003c96995ce8f945064dd",
                "size": 524288
              },
              {
                "crc32": "131e0359",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "131e0359",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "508b057d",
                "name": "h8b01.bin",
                "sha1": "779177e6312ef272483eeb64a5e84bbae6e301f2",
                "size": 64
              }
            ],
            "description": "System 573 BIOS",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/konami/ksys573.cpp:6415",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2b19f490",
                "name": "system_y2_m25p40.u801",
                "sha1": "b6a0482926d02fb5bb9a2c05ffdba6a2347fe658",
                "size": 524288
              }
            ],
            "description": "System Board Y2",
            "name": "systemy2.zip",
            "required": true,
            "source_ref": "src/mame/sega/y2.cpp:141",
            "system": "sielectronics-y2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6ad9b006",
                "name": "e68-05-1.ic6",
                "sha1": "f05a0ae26b6abaeda9c7944aee96c72b08fff7a5",
                "size": 524288
              },
              {
                "crc32": "c7c2dc6b",
                "name": "e68-04-1.ic5",
                "sha1": "bf88c818166c285130c5c73d6982f009da26e143",
                "size": 524288
              }
            ],
            "description": "Type Zero BIOS",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/taito/taitotz.cpp:3016",
            "system": "taito-typezero"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1fd27e22",
                "name": "v4-60.ic29",
                "sha1": "b103d365eac3fa447c2e9addddf6974b4403ed41",
                "size": 32768
              },
              {
                "crc32": "87cf66c1",
                "name": "v4-55.ic29",
                "sha1": "d6b42137be7a07a0e299c2d922328a6a9a2b7b8f",
                "size": 32768
              },
              {
                "crc32": "125e7a6e",
                "name": "v4-54.ic29",
                "sha1": "6f03c49acaad4feb9c2187f84fc1cb5451d0eb2b",
                "size": 32768
              },
              {
                "crc32": "bccb53c9",
                "name": "v4-53.ic29",
                "sha1": "a27113d70cf348c7eafa39fc7a76f55f63723ad7",
                "size": 32768
              },
              {
                "crc32": "ffd7b0fe",
                "name": "v4-52.ic29",
                "sha1": "d1804865c91e925a01b05cf441e8458a3db23f50",
                "size": 32768
              },
              {
                "crc32": "2de0b946",
                "name": "v4-51.ic29",
                "sha1": "c13051453aff3a2329f18ebade75c69aa3b1c28d",
                "size": 32768
              },
              {
                "crc32": "88da23f3",
                "name": "v4-43.ic29",
                "sha1": "9d24faa116129783e55c7f79a4a08902a236d5a6",
                "size": 32768
              },
              {
                "crc32": "0372606d",
                "name": "v4-42.ic29",
                "sha1": "8c6a63865b0b4951ea032725cf022d353115b93b",
                "size": 32768
              },
              {
                "crc32": "ba6290cc",
                "name": "v4-40.ic29",
                "sha1": "92b0e9f55791e892ec209de4fadd80faef370622",
                "size": 32768
              },
              {
                "crc32": "36012f88",
                "name": "vt_2.0.bin",
                "sha1": "5bd42fb51aa48ff65e704ea06a9181bb87ed2137",
                "size": 32768
              },
              {
                "crc32": "27abbc36",
                "name": "vt_1.1.bin",
                "sha1": "881ea7802b9e241473bc8ced0472e0f1851c9886",
                "size": 32768
              }
            ],
            "description": "TourVisión (PC Engine bootleg)",
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/pce/tourvis.cpp:448",
            "system": "pce-tourvision"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d1883221",
                "name": "triforce_bootrom.bin",
                "sha1": "c3cb7227e4dbc2af861e76d00cb59726105a2e4c",
                "size": 2097152
              }
            ],
            "description": "Triforce BIOS",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/sega/triforce.cpp:1310",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e996bc18",
                "name": "vid.p1",
                "sha1": "49798165640627eb31024319353da04380787b10",
                "size": 65536
              }
            ],
            "description": "MPU4 Video Firmware",
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/barcrest/mpu4vid.cpp:8698",
            "system": "barcrest-mpu4"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.289",
        "notes": "Android port of MAME 0.289 by David Valdeita (Seleuco), package\ncom.seleuco.mame4d2024, app version 1.38.1. The repository carries the\nAndroid app, the myosd OSD MAME is built against and 16 patches over stock\nsources; none of them changes which external files a user has to supply.\nres/values/strings.xml reads 0.289 and the whatsnew.txt in the asset\nbundle is MAME's own for 0.289, dated 2026-07-31. The README titles the\nproject MAME4droid (Current); the package id and the ES-DE find rules keep\nthe 2024 name.\n\nMAME4droid.java hands the installation directory to Emulator.emulate, and\nmyosd_droid_initMyOSD chdirs into it, so every relative MAME path resolves\nthere: roms, hash, samples, artwork, ctrlr, cheat, crosshair, plugins,\nlanguage and software, with fonts and ini files at the root. The directory\nis /sdcard/Android/data/com.seleuco.mame4d2024/files, /sdcard/MAME4droid or\nthe app's external media folder, picked in the settings. When a Storage\nAccess Framework folder is chosen for ROMs the app prepends it to rompath,\nartpath, samplepath and swpath and keeps the installation directory as the\nsecond entry; with the mame.ini setting on it passes no path at all and\nleaves them to the ini chain.\n\nMainHelper.copyFiles unpacks res/raw/files.zip into that directory on first\nrun, guarded by saves/dont-delete-<version>.bin, then renames ui.ini.bak to\nui.ini when no ui.ini exists. The archive carries 1111 files. Its artwork,\nctrlr, hash, ini, plugins and samples trees are MAME 0.289's own, text files\nconverted to CRLF: 784 software lists and 71 plugin files among them. The\nport adds 52 compiled translations, 21 overlay PNGs, 65 GLES shaders with\nshaders.cfg, the folders/ category files, data/history.db and cheat.7z.\n\nListed below are the files whose name the code fixes. The others live in\ndirectories whose contents the code names from a value it reads:\n<machine>.zip under the ROMs path from the driver name, hash/<list>.xml from\neach machine's software list device, samples/<set>/<name>.wav from each\ndriver's sample list, artwork from the game name, ctrlr/<name>.cfg from\n-ctrlr, language/<name>/strings.mo from -language, artwork/<name>.png from\n-effect, cheat members from the running machine, and folders/*.ini from a\ndirectory scan. Of the shipped presets the ini chain reaches raster.ini,\nvector.ini, lcd.ini, gameboy.ini and gba.ini; the rest of ini/presets and\nall of ini/examples are templates no chain step names. The floppy sound set\nis named in floppy.cpp, which lists 19 of the 20 samples shipped:\n525_seek_2ms.wav appears in no sample list in 0.289.\n\nPlugins start from -plugin, which the app fills with autofire, hiscore and\ninputmacro as the settings enable them, or from a plugin.ini written by\nMAME's own plugin menu. The data plugin starts by itself, its plugin.json\ncarrying start true. The cheat collection is read by MAME's own cheat\nmanager once -cheat is on, and by the Lua cheat plugin when that is enabled.\n\nA BIOS root set is a machine carrying MACHINE_IS_BIOS_ROOT: not playable on\nits own, loaded as the parent of every machine that inherits it, so its\narchive is needed on top of a game's own. 0.289 declares 80, listed here\nwith the ROMs of their ROM_START blocks. Any other machine's archive\nresolves through the same loader under the ROMs path. A missing ROM is\nfatal unless it is ROM_OPTIONAL or NO_DUMP.\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/seleuco/MAME4droid-2024",
        "source_commit": "32d781923fc0fb7621f3d78903f1b37fd4a5694a",
        "systems": [
          "arcade",
          "acclaim-zn1",
          "alg-laserdisc",
          "allied-leisure-pinball",
          "andamiro-pumpitup",
          "arcadia-systems",
          "aristocrat-mk5",
          "aristocrat-mk6",
          "aristocrat-mk7",
          "atari-system1",
          "atari-zn1",
          "atlus-zn1",
          "barcrest-mpu4",
          "brezzasoft-crystal",
          "capcom-zn1",
          "capcom-zn2",
          "ces-galaxy-games",
          "commodore-cubo",
          "deco-cassette",
          "efo-cedar-magnet",
          "eighting-zn1",
          "exidy-maxaflex",
          "gameplan-mpu1",
          "gottlieb-system1",
          "hyper-neogeo64",
          "igs-pgm",
          "imax-macs",
          "itech-eagle",
          "konami-bubblesystem",
          "konami-endeavour",
          "konami-gv",
          "konami-gx",
          "konami-python",
          "konami-python2",
          "konami-twinkle",
          "konami-viper",
          "miuchiz",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "nichibutsu-hrdvd",
          "nintendo-aleck64",
          "nintendo-nss",
          "nintendo-playch10",
          "nintendo-sfcbox",
          "panasonic-3do",
          "pce-tourvision",
          "philips-cdi",
          "recel-system3",
          "sammy-atomiswave",
          "sammy-medal",
          "sega-chihiro",
          "sega-hikaru",
          "sega-isgsm",
          "sega-lindbergh",
          "sega-megaplay",
          "sega-megatech",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sega-shootingzone",
          "sega-stv",
          "sega-systemsp",
          "sega-triforce",
          "sielectronics-y2",
          "snk-neogeo-mvs",
          "super-kaneko-nova",
          "tab-silverball",
          "taito-fx1",
          "taito-gnet",
          "taito-typezero",
          "tecmo-tps",
          "videosystem-zn1",
          "virtuality-su2000"
        ],
        "type": "standalone",
        "upstream": "https://github.com/mamedev/mame/tree/mame0289",
        "upstream_commit": "f34f02505e32c1993c6a782b6814232cbfc74e36"
      }
    },
    {
      "id": "mame4droid-current",
      "profile": {
        "alias_of": "mame4droid-2024",
        "core_classification": "alias",
        "core_version": "1.38.1",
        "cores": [
          "mame4droid-current"
        ],
        "display_name": "Arcade (MAME4droid Current)",
        "emulator": "MAME4droid (Current)",
        "files": [],
        "note": "Android port of MAME by David Valdeita (Seleuco), application id\ncom.seleuco.mame4d2024, release 1.38.1\n(android-MAME4droid/app/build.gradle:20,24) on MAME 0.289 (README.md:4).\n\nThe app shipped as MAME4droid 2024 from its first release on 2023-12-17 to\n1.19 on MAME 0.272. Release 1.20 moved to MAME 0.273 and renamed it\nMAME4droid (Current)\n(android-MAME4droid/app/src/main/assets/changelog.htm:74,55,54), the name\nandroid-MAME4droid/app/src/main/res/values/strings.xml:4 carries. The\nrepository was renamed with it: seleuco/MAME4droid-2024 resolves to\nseleuco/MAME4droid-Current.\n\nbuild.gradle declares no product flavor and the repository has a single\nbranch, so both names are the same package. The tree holds the Android OSD\nand the patches applied over a stock MAME source tree (howtobuild.txt), so\nthe ROM sets are those of MAME 0.289. Files are mame4droid-2024's, pinned\nto the same commit.\n",
        "profiled_date": "2026-08-11",
        "source": "https://github.com/seleuco/MAME4droid-Current",
        "source_commit": "32d781923fc0fb7621f3d78903f1b37fd4a5694a",
        "type": "alias",
        "upstream": "https://github.com/mamedev/mame/tree/mame0289",
        "upstream_commit": "f34f02505e32c1993c6a782b6814232cbfc74e36"
      }
    },
    {
      "id": "mamearcade",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.287",
        "cores": [
          "mamearcade"
        ],
        "display_name": "Arcade (MAME/Arcade)",
        "emulator": "MAME Arcade",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "9036d879",
                "name": "sp-s2.sp1",
                "sha1": "4f5ed7105b7128794654ce82b51723e16e389543",
                "size": 131072
              },
              {
                "crc32": "c7f2fa45",
                "name": "sp-s.sp1",
                "sha1": "09576ff20b4d6b365e78e6a5698ea450262697cd",
                "size": 131072
              },
              {
                "crc32": "03cc9f6a",
                "name": "sp-45.sp1",
                "sha1": "cdf1f49e3ff2bac528c21ed28449cf35b7957dc1",
                "size": 524288
              },
              {
                "crc32": "91b64be3",
                "name": "sp-s3.sp1",
                "sha1": "720a3e20d26818632aedf2c2fd16c54f213543e1",
                "size": 131072
              },
              {
                "crc32": "e72943de",
                "name": "sp-u2.sp1",
                "sha1": "5c6bba07d2ec8ac95776aa3511109f5e1e2e92eb",
                "size": 131072
              },
              {
                "crc32": "2723a5b5",
                "name": "sp-e.sp1",
                "sha1": "5dbff7531cf04886cde3ef022fb5ca687573dcb8",
                "size": 131072
              },
              {
                "crc32": "62f021f4",
                "name": "sp1-u2",
                "sha1": "62d372269e1b3161c64ae21123655a0a22ffd1bb",
                "size": 131072
              },
              {
                "crc32": "1179a30f",
                "name": "sp1-u4.bin",
                "sha1": "866817f47aa84d903d0b819d61f6ef356893d16a",
                "size": 131072
              },
              {
                "crc32": "2025b7a2",
                "name": "sp1-u3.bin",
                "sha1": "73d774746196f377111cd7aa051cc8bb5dd948b3",
                "size": 131072
              },
              {
                "crc32": "f0e8f27d",
                "name": "vs-bios.rom",
                "sha1": "ecf01eda815909f1facec62abf3594eaa8d11075",
                "size": 131072
              },
              {
                "crc32": "acede59c",
                "name": "sp-j2.sp1",
                "sha1": "b6f97acd282fd7e94d9426078a90f059b5e9dd91",
                "size": 131072
              },
              {
                "crc32": "9fb0abe4",
                "name": "sp1.jipan.1024",
                "sha1": "18a987ce2229df79a8cf6a84f968f0e42ce4e59d",
                "size": 131072
              },
              {
                "crc32": "dff6d41f",
                "name": "japan-j3.bin",
                "sha1": "e92910e20092577a4523a6b39d578a71d4de7085",
                "size": 131072
              },
              {
                "crc32": "fbc6d469",
                "name": "sp1-j3.bin",
                "sha1": "46b2b409b5b68869e367b40c846373623edb632a",
                "size": 131072
              },
              {
                "crc32": "486cb450",
                "name": "sp-j3.sp1",
                "sha1": "52c21ea817928904b80745a8c8d15cbad61e1dc1",
                "size": 524288
              },
              {
                "crc32": "162f0ebe",
                "name": "sp-1v1_3db8c.bin",
                "sha1": "fe1c6dd3dfcf97d960065b1bb46c1e11cb7bf271",
                "size": 131072
              },
              {
                "crc32": "a7aab458",
                "name": "uni-bios_4_0.rom",
                "sha1": "938a0bda7d9a357240718c2cec319878d36b8f72",
                "size": 131072
              },
              {
                "crc32": "24858466",
                "name": "uni-bios_3_3.rom",
                "sha1": "0ad92efb0c2338426635e0159d1f60b4473d0785",
                "size": 131072
              },
              {
                "crc32": "a4e8b9b3",
                "name": "uni-bios_3_2.rom",
                "sha1": "c92f18c3f1edda543d264ecd0ea915240e7c8258",
                "size": 131072
              },
              {
                "crc32": "0c58093f",
                "name": "uni-bios_3_1.rom",
                "sha1": "29329a3448c2505e1ff45ffa75e61e9693165153",
                "size": 131072
              },
              {
                "crc32": "a97c89a9",
                "name": "uni-bios_3_0.rom",
                "sha1": "97a5eff3b119062f10e31ad6f04fe4b90d366e7f",
                "size": 131072
              },
              {
                "crc32": "27664eb5",
                "name": "uni-bios_2_3.rom",
                "sha1": "5b02900a3ccf3df168bdcfc98458136fd2b92ac0",
                "size": 131072
              },
              {
                "crc32": "601720ae",
                "name": "uni-bios_2_3o.rom",
                "sha1": "1b8a72c720cdb5ee3f1d735bbcf447b09204b8d9",
                "size": 131072
              },
              {
                "crc32": "2d50996a",
                "name": "uni-bios_2_2.rom",
                "sha1": "5241a4fb0c63b1a23fd1da8efa9c9a9bd3b4279c",
                "size": 131072
              },
              {
                "crc32": "8dabf76b",
                "name": "uni-bios_2_1.rom",
                "sha1": "c23732c4491d966cf0373c65c83c7a4e88f0082c",
                "size": 131072
              },
              {
                "crc32": "0c12c2ad",
                "name": "uni-bios_2_0.rom",
                "sha1": "37bcd4d30f3892078b46841d895a6eff16dc921e",
                "size": 131072
              },
              {
                "crc32": "b24b44a0",
                "name": "uni-bios_1_3.rom",
                "sha1": "eca8851d30557b97c309a0d9f4a9d20e5b14af4e",
                "size": 131072
              },
              {
                "crc32": "4fa698e9",
                "name": "uni-bios_1_2.rom",
                "sha1": "682e13ec1c42beaa2d04473967840c88fd52c75a",
                "size": 131072
              },
              {
                "crc32": "e19d3ce9",
                "name": "uni-bios_1_2o.rom",
                "sha1": "af88ef837f44a3af2d7144bb46a37c8512b67770",
                "size": 131072
              },
              {
                "crc32": "5dda0d84",
                "name": "uni-bios_1_1.rom",
                "sha1": "4153d533c02926a2577e49c32657214781ff29b7",
                "size": 131072
              },
              {
                "crc32": "0ce453a0",
                "name": "uni-bios_1_0.rom",
                "sha1": "3b4c0cd26c176fc6b26c3a2f95143dd478f6abf9",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "94416d67",
                "name": "sm1.sm1",
                "sha1": "42f9d7ddd6c0931fd64226a60dc73602b2819dcf",
                "size": 131072
              },
              {
                "crc32": "5a86cff2",
                "name": "000-lo.lo",
                "sha1": "5992277debadeb64d1c1c64b0a92d9293eaf7e4a",
                "size": 131072
              },
              {
                "crc32": "c2ea0cfd",
                "name": "sfix.sfix",
                "sha1": "fd4a618cdcdbf849374f0a50dd8efe9dbab706c3",
                "size": 131072
              }
            ],
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/snk/neogeo.cpp:2428",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "78c15fa2",
                "name": "pgm_p02s.u20",
                "sha1": "885a6558e022602cc6f482ac9667ba9f61e75092",
                "size": 131072
              },
              {
                "crc32": "e42b166e",
                "name": "pgm_p01s.u20",
                "sha1": "2a9df9ec746b14b74fae48b1a438da14973702ea",
                "size": 131072
              },
              {
                "crc32": "1a7123a0",
                "name": "pgm_t01s.rom",
                "sha1": "cc567f577bfbf45427b54d6695b11b74f2578af3",
                "size": 2097152
              },
              {
                "crc32": "45ae7159",
                "name": "pgm_m01s.rom",
                "sha1": "d3ed3ff3464557fd0df6b069b2e431528b0ebfa8",
                "size": 2097152
              }
            ],
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/igs/pgm.cpp:5545",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "3b2afa7b",
                "name": "epr-21576d.ic27",
                "sha1": "d007e1d321c198a38c5baff86eb2ab84385d150a",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "4599ad13",
                "name": "epr-21576c.ic27",
                "sha1": "7e730e9452a792d76f210c33a955d385538682c7",
                "size": 2097152
              },
              {
                "crc32": "755a6e07",
                "name": "epr-21576b.ic27",
                "sha1": "7e8b8ccfc063144d89668e7224dcd8a36c54f3b3",
                "size": 2097152
              },
              {
                "crc32": "cedfe439",
                "name": "epr-21576a.ic27",
                "sha1": "f27798bf3d890863ef0c1d9dcb4e7782249dca27",
                "size": 2097152
              },
              {
                "crc32": "9dad3495",
                "name": "epr-21576.ic27",
                "sha1": "5fb66f9a2b68d120f059c72758e65d34f461044a",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "628a27fd",
                "name": "epr-21578f.ic27",
                "sha1": "dae7add616b1a2478f00608823e88c3b82a0e78f",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "dfd5f42a",
                "name": "epr-21578d.ic27",
                "sha1": "614a0db4743a5e5a206190d6786ade24325afbfd",
                "size": 2097152
              },
              {
                "crc32": "6c9aad83",
                "name": "epr-21578a.ic27",
                "sha1": "555918de76d8dbee2a97d8a95297ef694b3e803f",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "60ddcbbe",
                "name": "epr-21577d.ic27",
                "sha1": "58b15096d269d6df617ca1810b66b47deb184958",
                "size": 2097152
              },
              {
                "crc32": "969dc491",
                "name": "epr-21577a.ic27",
                "sha1": "581d1eae328b87b67508a7586ffc60cee256f70f",
                "size": 2097152
              },
              {
                "crc32": "33513691",
                "name": "epr-21579d.ic27",
                "sha1": "b1d8c7c516e1471a788fcf7a02a794ad2f05aeeb",
                "size": 2097152
              },
              {
                "crc32": "71f9c918",
                "name": "epr-21579.ic27",
                "sha1": "d15af8b947f41eea7c203b565cd403e3f37a2017",
                "size": 2097152
              },
              {
                "crc32": "7a50fab9",
                "name": "boot_rom_64b8.ic606",
                "sha1": "ef79f448e0bf735d1264ad4f051d24178822110f",
                "size": 524288
              },
              {
                "crc32": "de7cfdb0",
                "name": "develop110.ic27",
                "sha1": "da16800edc4d49f70481c124d487f544c2fa8ce7",
                "size": 2097152
              },
              {
                "crc32": "309a196a",
                "name": "develop.ic27",
                "sha1": "409b50371feb648f10efd6b7ac420bf08d9a3b5a",
                "size": 2097152
              },
              {
                "crc32": "58e17c23",
                "name": "zukinver0930.ic25",
                "sha1": "19330f906accf1b859f56bbcedc2edff73747599",
                "size": 2097152
              },
              {
                "crc32": "cce01f1f",
                "name": "epr-21576h_multi.ic27",
                "sha1": "cca17119ad13e3a4ef7cb6902a37b65d6a844aee",
                "size": 2097152
              },
              {
                "bad_dump": true,
                "crc32": "d3d57af8",
                "name": "epr-21336a.ic27",
                "sha1": "0eb72c2a20ad8b86d442b77760eab5e89521d469",
                "size": 2097152
              },
              {
                "crc32": "5b28f868",
                "name": "naomi_boot_2491.ic27",
                "sha1": "d101f58c69d9835e87a969688e43dc9b699b89d0",
                "size": 2097152
              },
              {
                "crc32": "46dbe90f",
                "name": "epr-21580a.ic27",
                "sha1": "822b2ea8e254ea3ce66f0ea67e80a8c7e1125ec9",
                "size": 2097152
              },
              {
                "crc32": "7c9fea46",
                "name": "315-6188.ic31",
                "sha1": "f77c07ae65dfed18c1c4c632c8945be21d02ddaf",
                "size": 8244
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10917",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "297ea6ed",
                "name": "epr-23605c.ic27",
                "sha1": "cfbfe57c80e6ee86a101fa83aec0a01e00c0f42a",
                "size": 2097152
              },
              {
                "crc32": "3a3242d4",
                "name": "epr-23605b.ic27",
                "sha1": "aaca4df51ef91d926f8191d372f3dfe1d20d9484",
                "size": 2097152
              },
              {
                "crc32": "7bc3fc2d",
                "name": "epr-23605a.ic27",
                "sha1": "a4a9531a7c66ff30046908cf71f6c7b6fb59c392",
                "size": 2097152
              },
              {
                "crc32": "5731e446",
                "name": "epr-23605.ic27",
                "sha1": "787b0844fc408cf124c12405c095c59948709ea6",
                "size": 2097152
              },
              {
                "crc32": "6ef1dd8e",
                "name": "epr-23608c.ic27",
                "sha1": "25ef957ec1c58fdaff5e89102002bca6c38832c5",
                "size": 2097152
              },
              {
                "crc32": "a554b1e3",
                "name": "epr-23608b.ic27",
                "sha1": "343b727a3619d1c75a9b6d4cc156a9050447f155",
                "size": 2097152
              },
              {
                "crc32": "e8f884d1",
                "name": "epr-23608a.ic27",
                "sha1": "28f4de747bb3cf860b9ebf897322fbc5d7c1e156",
                "size": 2097152
              },
              {
                "crc32": "929cc3a6",
                "name": "epr-23608.ic27",
                "sha1": "47d00c818de23f733a4a33b1bbc72eb8aa729246",
                "size": 2097152
              },
              {
                "crc32": "750e254b",
                "name": "epr-23607c.ic27",
                "sha1": "81d0b1a076c274c6bd7c53b65e7b80e14fe039e1",
                "size": 2097152
              },
              {
                "crc32": "f308c5e9",
                "name": "epr-23607b.ic27",
                "sha1": "5470ab1cee6afecbd8ca8cf40f8fbe4ec2cb1471",
                "size": 2097152
              },
              {
                "crc32": "2b55add2",
                "name": "epr-23607.ic27",
                "sha1": "547de5f97d3183c8cd069c4fa3c09f13d8b637d9",
                "size": 2097152
              },
              {
                "crc32": "99e3751f",
                "name": "epr-23609b.ic27",
                "sha1": "8a244f75595c49d2a37a42ab96b6bab35163ca0e",
                "size": 2097152
              },
              {
                "crc32": "de8e1267",
                "name": "epr-23610b.ic27",
                "sha1": "0b3a36446c308fcbfe3647df45c848091e8797f1",
                "size": 2097152
              },
              {
                "crc32": "353fdbcd",
                "name": "epr-23605c_multi.ic27",
                "sha1": "a8b7dce572b74e02e65cb949b2c366c87625157f",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10922",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "08c0add7",
                "name": "epr-21576e.ic27",
                "sha1": "e7c1a7673cb2ccb21748ef44105e46d1bad7266d",
                "size": 2097152
              },
              {
                "crc32": "d2a1c6bf",
                "name": "epr-21576g.ic27",
                "sha1": "6d27d71aec4dfba98f66316ae74a1426d567698a",
                "size": 2097152
              },
              {
                "crc32": "d4895685",
                "name": "epr-21576h.ic27",
                "sha1": "91424d481ff99a8d3f4c45cea6d3f0eada049a6d",
                "size": 2097152
              },
              {
                "crc32": "7b452946",
                "name": "epr-21578h.ic27",
                "sha1": "8e9f153bbada24b37066dc45b64a7bf0d4f26a9b",
                "size": 2097152
              },
              {
                "crc32": "55413214",
                "name": "epr-21578g.ic27",
                "sha1": "bd2748365a9fc1821c9369aa7155d7c41c4df43e",
                "size": 2097152
              },
              {
                "crc32": "087f09a3",
                "name": "epr-21578e.ic27",
                "sha1": "0418eb2cf9766f0b1b874a4e92528779e22c0a4a",
                "size": 2097152
              },
              {
                "crc32": "fdf17452",
                "name": "epr-21577h.ic27",
                "sha1": "5f3e4b677f0046ce690a4f096b0481e5dd8bb6e6",
                "size": 2097152
              },
              {
                "crc32": "25f64af7",
                "name": "epr-21577g.ic27",
                "sha1": "99f9e6cc0642319bd2da492611220540add573e8",
                "size": 2097152
              },
              {
                "crc32": "cf36e97b",
                "name": "epr-21577e.ic27",
                "sha1": "b085305982e7572e58b03a9d35f17ae319c3bbc6",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/sega/naomi.cpp:10923",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "719b2b0b",
                "name": "bios0.ic23",
                "sha1": "b4c1a26bc8906d5275eb28c701dff2b9365bcdfa",
                "size": 131072
              },
              {
                "crc32": "d3e80a9f",
                "name": "bios1.ic23",
                "sha1": "33024f9d51c04884c2b44ce146f340e7a857b959",
                "size": 131072
              },
              {
                "crc32": "82a105f0",
                "name": "fpr-24363.ic48",
                "sha1": "5128fe2ddcced77332bdcab691c09958051fa564",
                "size": 131072
              }
            ],
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/dc_atomiswave.cpp:1519",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "065f8500",
                "name": "epr-21331.ic27",
                "sha1": "49a3881e8d76f952ef5e887200d77b4a415d47fe",
                "size": 2097152
              },
              {
                "crc32": "9e3bfa1b",
                "name": "epr-21330.ic27",
                "sha1": "b539d38c767b0551b8e7956c1ff795de8bbe2fbc",
                "size": 2097152
              },
              {
                "crc32": "d99e5b9b",
                "name": "epr-21329.ic27",
                "sha1": "453ffb41b6197cac6d12e7814bb1d7281ccf1659",
                "size": 2097152
              },
              {
                "crc32": "bd6ce0ec",
                "name": "epr-21332.ic27",
                "sha1": "3d1ce5cb6978afe57967d8b53bc969259dd64749",
                "size": 2097152
              },
              {
                "crc32": "ea74e967",
                "name": "hotd2biosproto.ic27",
                "sha1": "e4d037480eb6555d335a8ab9cd6c56122335586d",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "hod2bios.zip",
            "note": "game-specific BIOS for House of the Dead 2",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10918",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "12ed7c66",
                "name": "epr-21864.ic27",
                "sha1": "046be66e92eae766f3e05594aa837fc8888534ed",
                "size": 2097152
              },
              {
                "crc32": "0615a4d1",
                "name": "epr-21863.ic27",
                "sha1": "2c6986580b84278af75f396229fdd587bebc1768",
                "size": 2097152
              },
              {
                "crc32": "1f630716",
                "name": "epr-21862.ic27",
                "sha1": "8d157809770467c3e7618c6299f3b96b5f10518c",
                "size": 2097152
              },
              {
                "crc32": "05128861",
                "name": "epr-21864p.ic27",
                "sha1": "5bdb320d84015b8429527a8eb4524958031862aa",
                "size": 2097152
              },
              {
                "crc32": "f0cd4aaa",
                "name": "epr-21862p.ic27",
                "sha1": "9a9157992bf7a104c096efcdb8b02ceece186cbb",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355dlx.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10919",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "62483677",
                "name": "epr-22851.ic27",
                "sha1": "3e3bcacf5f972c376b569f45307ee7fd0b5031b7",
                "size": 2097152
              },
              {
                "crc32": "28aa539d",
                "name": "epr-22850.ic27",
                "sha1": "14485368656af80504b212da620179c49f84c1a2",
                "size": 2097152
              },
              {
                "crc32": "121e009c",
                "name": "epr-22849.ic27",
                "sha1": "3beb91f660e60590491b209b6be8584b05a90548",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "f355bios.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10920",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a77c6b1c",
                "name": "epr-21802.ic27",
                "sha1": "bd50a6bb8fa9bac121b076e21ea048a83a240a48",
                "size": 2097152
              },
              {
                "crc32": "a21bef24",
                "name": "epr-21801.ic27",
                "sha1": "c6c6ed09772b63a9a84ef0678fc1b7527484038a",
                "size": 2097152
              },
              {
                "crc32": "fea29cbb",
                "name": "main_eeprom.bin",
                "sha1": "4099f1747aafa07db34f6e072cd9bfaa83bae10e",
                "size": 128
              },
              {
                "crc32": "3ea24b6a",
                "name": "x76f100_eeprom.bin",
                "sha1": "3a730ebcf56e0060fef6b1b02eb2eb7cfb7e61dc",
                "size": 132
              }
            ],
            "name": "airlbios.zip",
            "required": false,
            "source_ref": "src/mame/sega/naomi.cpp:10921",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f688ae60",
                "name": "epr-23603.ic8",
                "sha1": "1a31b6b1a4257fcb6ac6a91e67dd798f91505f48",
                "size": 524288
              },
              {
                "crc32": "59ed40f4",
                "name": "epr-20091.ic8",
                "sha1": "eff0f54c70bce05ff3a289bf30b1027e1c8cd117",
                "size": 524288
              },
              {
                "crc32": "d0e0889d",
                "name": "epr-19730.ic8",
                "sha1": "fae53107c894e0c41c49e191dbe706c9cd6e50bd",
                "size": 524288
              },
              {
                "crc32": "2672f9d8",
                "name": "epr-17951a.ic8",
                "sha1": "63cf4a6432f6c87952f9cf3ab0f977aed2367303",
                "size": 524288
              },
              {
                "crc32": "3e23c81f",
                "name": "epr-17740a.ic8",
                "sha1": "f9b282fd27693e9891843597b2e1823da3d23c7b",
                "size": 524288
              },
              {
                "crc32": "5c5aa63d",
                "name": "epr-17740.ic8",
                "sha1": "06860d96923b81afbc21e0ad32ee19487d8ff6e7",
                "size": 524288
              },
              {
                "crc32": "f7722da3",
                "name": "epr-17954a.ic8",
                "sha1": "af79cff317e5b57d49e463af16a9f616ed1eee08",
                "size": 524288
              },
              {
                "crc32": "d1be2adf",
                "name": "epr-17952a.ic8",
                "sha1": "eaf1c3e5d602e1139d2090a78d7e19f04f916794",
                "size": 524288
              },
              {
                "crc32": "4166c663",
                "name": "epr-17741a.ic8",
                "sha1": "cc41d30de06160083d77e0dc5d69e61fec7fdcb5",
                "size": 524288
              },
              {
                "crc32": "e09d1f60",
                "name": "epr-19854.ic8",
                "sha1": "b55cdcb45b2a5b0b35e352cf7625f0bd659084df",
                "size": 524288
              },
              {
                "crc32": "a4c47570",
                "name": "epr-17953a.ic8",
                "sha1": "9efc73717ec8a13417e65c54344ded9fc25bf5ef",
                "size": 524288
              },
              {
                "crc32": "02daf123",
                "name": "epr-17742a.ic8",
                "sha1": "23185beb1ce9c09b8719e57d1adb7b28c8141fd5",
                "size": 524288
              },
              {
                "crc32": "3dfeda92",
                "name": "stv110.bin",
                "sha1": "8eb33192a57df5f3a1dfb57263054867c6b2db6d",
                "size": 524288
              },
              {
                "crc32": "728dbca3",
                "name": "stv1061.bin",
                "sha1": "0ed2030177f0aa8285645c395ae9ad9f568ab1d6",
                "size": 524288
              },
              {
                "crc32": "15432ae2",
                "name": "stvbios.nv",
                "sha1": "7d9364d546f3d3f839ec36be148076f8d26a65a6",
                "size": 128
              }
            ],
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/sega/stv.cpp:4068",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "c3c74dc5",
                "description": "IPL Ver. 5.0",
                "name": "vm1211l01.u2",
                "sha1": "07352e6dba7514214e778ba39e1ca773e4698858",
                "size": 524288
              },
              {
                "crc32": "c8c6d25f",
                "description": "IPL Ver. 4.0",
                "name": "mt201l04.u012",
                "sha1": "5be39fa72b65f2e455ccc146dbab58d24ab46505",
                "size": 524288
              },
              {
                "crc32": "21b2ccbd",
                "description": "IPL Ver. 1.0",
                "name": "vm1201l01.u012",
                "sha1": "c3ceea196e5c1c6a9e03cf3a22e9f25f0099a38e",
                "size": 524288
              }
            ],
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/sigma/sammymdl.cpp:1025",
            "system": "sammy-medal"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "aa8dc2d8",
                "name": "ep15294.ic2",
                "sha1": "96771ad7b79dc9c83a1594243250d65052d23176",
                "size": 131072
              },
              {
                "crc32": "f97c68aa",
                "name": "epr-a15294.ic2",
                "sha1": "bcabc879950bca1ced11c550a484e697ec5706b2",
                "size": 131072
              },
              {
                "bad_dump": true,
                "crc32": "d8289e31",
                "name": "315-5661.ic7",
                "sha1": "a0e9134d9e8043a3660a2ce122cfd5d7f76773b9",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "fd5c4fb3",
                "name": "315-5653.ic56",
                "sha1": "6b2ba657836f3031d77602526416200e31d41a6e",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "55c6cddb",
                "name": "315-5651.ic8",
                "sha1": "e1a968305ca7ea17e9021b31506ca087b84a8ab1",
                "size": 279
              },
              {
                "bad_dump": true,
                "crc32": "825ea316",
                "name": "315-5349a.ic54",
                "sha1": "f49edb6a3f9349330f7ff525ef60517ed276a663",
                "size": 260
              },
              {
                "bad_dump": true,
                "crc32": "4a2d27d1",
                "name": "315-5655.ic34",
                "sha1": "ba79183e4b522d1b57a46a56fc7d9b85de24df36",
                "size": 260
              }
            ],
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/sega/megaplay.cpp:1018",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f71e9526",
                "description": "Ver 1",
                "name": "epr-12664.20",
                "sha1": "1c7887541d02c41426992d17f8e3db9e03975953",
                "size": 32768
              },
              {
                "crc32": "07c3f423",
                "description": "Ver 0 Rev A",
                "name": "epr-12263a.20",
                "sha1": "50c28bbc2d4349c820d988ae3f20aae3f808545f",
                "size": 32768
              },
              {
                "crc32": "ca26c87a",
                "description": "Ver 0 Rev B",
                "name": "epr-12263b.20",
                "sha1": "987a18bede6e54cd73c4434426eb6c302a37cdc5",
                "size": 32768
              },
              {
                "crc32": "884e4aa5",
                "description": "Ver 0 Rev B (alt?)",
                "name": "epr-12604a.20",
                "sha1": "c9008c431a937c084fb475273093ca0b434b5f47",
                "size": 32768
              }
            ],
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/sega/megatech.cpp:1430",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "2292585c",
                "name": "ism2006v00.u1",
                "sha1": "97ba0e0f0be832a5114d95151e519bc027f6675b",
                "size": 131072
              }
            ],
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/sega/segas16b_isgsm.cpp:608",
            "system": "sega-isgsm"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "3d33ac34",
                "name": "v0a-.7e",
                "sha1": "909d59e7a993affd10224402b4370e82a5f5545c",
                "size": 4096
              },
              {
                "crc32": "23d929b7",
                "name": "v0b-.7e",
                "sha1": "063f83020ba3d6f43ab8471f95ca919767b93aa4",
                "size": 4096
              },
              {
                "crc32": "9f505709",
                "name": "v0c-.7e",
                "sha1": "a9c661ba5a0d3fa5e935fb9c10fa63e2d9809981",
                "size": 4096
              },
              {
                "crc32": "1e0c22b1",
                "name": "v0d-.7e",
                "sha1": "5fec8fef500bbebc13d0173406afc55235d3affb",
                "size": 4096
              },
              {
                "crc32": "2541e34b",
                "name": "dsp-3_p0-a.m9",
                "sha1": "4f983513dbae1350c83a433dea77a4465748b9c6",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b67a91d9",
                "name": "dsp-3_p0-b.m9",
                "sha1": "681c040be0f0ed1ba0a50161b36d0ad8e1c8c5cb",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "c76c4057",
                "name": "dsp-3_p0-c.m9",
                "sha1": "4093d4ac44feff595e34f361ed1ed84113c9225e",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "4b7d72bc",
                "name": "dsp-3_p0-d.m9",
                "sha1": "a70c5ba88404dafee2cc717071c4a249f67ab645",
                "size": 2048
              },
              {
                "crc32": "3bfff5f3",
                "name": "dsp-3_p1-.l9",
                "sha1": "4e9437cb1b76d64da6b37f01bd6e879fb399e8ce",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "b66b2c2a",
                "name": "v1-.5a",
                "sha1": "0097f38beb4872e735e560148052e258a26b08fd",
                "size": 2048
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "238fdb40",
                "name": "v2.3m",
                "sha1": "b88e8fabb82092105c3828154608ea067acbf2e5",
                "size": 32
              },
              {
                "crc32": "3b5836b4",
                "name": "v4.10d",
                "sha1": "b630bb277d9ec09d46ef26b944014dd6165b35d8",
                "size": 32
              },
              {
                "crc32": "51eef657",
                "name": "v3.3j",
                "sha1": "eaedce5caf55624ad6ae706aedf82c5717c60f1f",
                "size": 32
              },
              {
                "crc32": "a6df18fd",
                "name": "cassmcu.1c",
                "sha1": "1f9ea47e372d31767c936c15852b43df2b0ee8ff",
                "size": 1024
              }
            ],
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/dataeast/decocass.cpp:2131",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d52fa07a",
                "name": "pch1-c__8t_e-2.8t",
                "sha1": "55cabf52ae10c050c2229081a80b9fe5454ab8c5",
                "size": 16384
              },
              {
                "crc32": "503ee8b1",
                "name": "pck1-c.8t",
                "sha1": "3bd20bc71cac742d1b8c1430a6426d0a19db7ad0",
                "size": 16384
              },
              {
                "crc32": "123ffa37",
                "name": "pch1-c_8te.8t",
                "sha1": "3bef754a5a85a8498bb6222ddf5cb9021f264db5",
                "size": 16384
              },
              {
                "crc32": "0be8ceb4",
                "name": "pck1-c_fix.8t",
                "sha1": "45b127a537370226e6b30be2b5a92ad05673ca7f",
                "size": 16384
              },
              {
                "crc32": "88a8f87e",
                "name": "pch1-c__8t_e-1.8t",
                "sha1": "d1d7ffe68d2e7aa2faf8ad41a7ec8421265ede42",
                "size": 16384
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "83ebc7a3",
                "name": "pch1-c_8m.8m",
                "sha1": "a7c607138f4f9b96ab5d3a82c47895f77672e296",
                "size": 8192
              },
              {
                "crc32": "90e1b80c",
                "name": "pch1-c_8p-8p",
                "sha1": "c4f4b135b2a11743518aaa0554c365b4a8cf299a",
                "size": 8192
              },
              {
                "crc32": "9acffb30",
                "name": "pch1-c__8k.8k",
                "sha1": "b814f10ef23f2ca445fabafcbf7f25e2d454ba8c",
                "size": 8192
              },
              {
                "crc32": "c1232eee",
                "name": "pch1-c__8m_e-1.8m",
                "sha1": "beaf9fa2d091a3c7f70c51e966d885b1f9f0935f",
                "size": 8192
              },
              {
                "crc32": "30c15e23",
                "name": "pch1-c__8p_e-1.8p",
                "sha1": "69166afdb2fe827c7f1919cdf4197caccbd961fa",
                "size": 8192
              },
              {
                "crc32": "e5414ca3",
                "name": "pch1-c-6f.82s129an.6f",
                "sha1": "d2878411cda84ffe0afb2e538a67457f51bebffb",
                "size": 256
              },
              {
                "crc32": "a2625c6e",
                "name": "pch1-c-6e.82s129an.6e",
                "sha1": "a448b47c9289902e26a3d3c4c7d5a7968c385e81",
                "size": 256
              },
              {
                "crc32": "1213ebd4",
                "name": "pch1-c-6d.82s129an.6d",
                "sha1": "0ad386fc3eab5e53c0288ad1de33639a9e461b7c",
                "size": 256
              },
              {
                "crc32": "48de65dc",
                "name": "rp2c0x.pal",
                "sha1": "d10acafc8da9ff479c270ec01180cca61efe62f5",
                "size": 192
              }
            ],
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/playch10.cpp:2981",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e06cb58f",
                "description": "Nintendo Super System (Single Cart BIOS)",
                "name": "nss-ic14.02.ic14",
                "sha1": "62f507e91a2797919a78d627af53f029c7d81477",
                "size": 32768
              },
              {
                "crc32": "a8e202b3",
                "description": "Nintendo Super System (Multi Cart BIOS)",
                "name": "nss-c.ic14",
                "sha1": "b7afcfe4f5cf15df53452dc04be81929ced1efb2",
                "size": 32768
              },
              {
                "crc32": "ac385b53",
                "description": "Nintendo Super System (Single Cart BIOS v3, hack?)",
                "name": "nss-v3.ic14",
                "sha1": "e3942f9d508c3c8074c3c3941376c37ca68b8e54",
                "size": 32768
              }
            ],
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/nss.cpp:1099",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ec82be9",
                "name": "pifdata.bin",
                "sha1": "9174eadc0f0ea2654c95fd941406ab46b9dc9bdd",
                "size": 2048
              },
              {
                "crc32": "e7f2a005",
                "name": "normpnt.rom",
                "sha1": "c27b4a364a24daeee6e99fd286753fd6216362b4",
                "size": 128
              },
              {
                "crc32": "4f2ae525",
                "name": "normslp.rom",
                "sha1": "eab43f8cc52c8551d9cff6fced18ef80eaba6f05",
                "size": 128
              }
            ],
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/nintendo/aleck64.cpp:1417",
            "system": "nintendo-aleck64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "description": "Magnavox CD-i 200",
                "name": "cdi200.rom",
                "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "description": "Philips CD-i 220 F2",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              },
              {
                "bad_dump": true,
                "crc32": "688cda63",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              }
            ],
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/philips/cdi.cpp:922",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d3837ae4",
                "name": "391640-03.u6a",
                "sha1": "06807db3181637455f4d46582d9972afec8956d9",
                "size": 1048576
              }
            ],
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/amiga/cubo.cpp:1435",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "11812ef8",
                "description": "Standard",
                "name": "700a01.22g",
                "sha1": "e1284add4aaddd5337bd7f4e27614460d52b5b48",
                "size": 524288
              },
              {
                "crc32": "39ebb0ca",
                "description": "Found on Gacha Gachamp",
                "name": "700a01,gchgchmp.22g",
                "sha1": "9aab8c637dd2be84d79007e52f108abe92bf29dd",
                "size": 524288
              },
              {
                "crc32": "6cf852af",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "700b01.22g",
                "sha1": "a2421d0a494892c0e71003c96995ce8f945064dd",
                "size": 524288
              },
              {
                "crc32": "131e0359",
                "description": "Standard",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "131e0359",
                "description": "Found on Gacha Gachamp",
                "name": "h8a01.bin",
                "sha1": "967f66578ebc0cf6b044d71af09b59bce1f4a1d0",
                "size": 64
              },
              {
                "crc32": "508b057d",
                "description": "Found on Dancing Stage Euro Mix 2",
                "name": "h8b01.bin",
                "sha1": "779177e6312ef272483eeb64a5e84bbae6e301f2",
                "size": 64
              }
            ],
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/konami/ksys573.cpp:6415",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "d5fa95f5",
                "name": "300a01.34k",
                "sha1": "c483aa98ff8ef40cdac359c19ad23fea5ecc1906",
                "size": 131072
              }
            ],
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigx.cpp:4191",
            "system": "konami-gx"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "ad498d2d",
                "name": "999a01.7e",
                "sha1": "02a82a2fe1fba0404517c3602324bfa64e23e478",
                "size": 524288
              }
            ],
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/konami/konamigv.cpp:1447",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "233e5159",
                "name": "941b01.u25",
                "sha1": "66ff268d5bf78fbfa48cdc3e1b08f8956cfd6cfb",
                "size": 262144
              },
              {
                "crc32": "df6f88d6",
                "name": "941a01.u25",
                "sha1": "2bc10e4fbec36573aa8b6878492d37665f074d87",
                "size": 262144
              },
              {
                "crc32": "f1511505",
                "name": "ds2430.u3",
                "sha1": "ed7cd9b2763b3e377df9663943160f9871f65105",
                "size": 40
              }
            ],
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/konami/viper.cpp:3213",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/konami/twinkle.cpp:1636",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "f0774fc2",
                "name": "boot.bin",
                "sha1": "84fade54e025f170d983200a86c1ed96ef1a9ed3",
                "size": 480
              },
              {
                "crc32": "85c2afc5",
                "name": "400b03.8g",
                "sha1": "387842d02d50d0d78a27270e7267af19555b9e63",
                "size": 8192
              },
              {
                "crc32": "5827b1e8",
                "name": "400a1.2b",
                "sha1": "fa8cf5f868cfb08bce203baaebb6c4055ee2a000",
                "size": 256
              },
              {
                "crc32": "2f44f970",
                "name": "400a2.1b",
                "sha1": "7ab46f9d5d587665782cefc623b8de0124a6d38a",
                "size": 256
              }
            ],
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/konami/nemesis.cpp:3140",
            "system": "konami-bubble-system"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "50033af6",
                "description": "japan",
                "name": "m534002c-13.ic353",
                "sha1": "486d92ff6c7f1e54f8e0ef41cd9116eca0e10e1a",
                "size": 524288
              },
              {
                "crc32": "f20f7fe5",
                "description": "english (debug)",
                "name": "msm27c402zb.ic353",
                "sha1": "9aac7d3b3d0cc0bbbe4056164b73078dce41d91c",
                "size": 524288
              },
              {
                "crc32": "bb7ba033",
                "name": "cp01.ic652",
                "sha1": "966f3aee5d00e1312c455f855915d621e6cb0672",
                "size": 8
              }
            ],
            "name": "coh1000c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5969",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e860ea8b",
                "name": "m534002c-59.ic353",
                "sha1": "66e7e1d4e426466b8f48a2ba055a91b475569504",
                "size": 524288
              },
              {
                "crc32": "7808fcef",
                "name": "cp10.ic652",
                "sha1": "3c3fb8227b05dace042dc1429b9f2355b1a15638",
                "size": 8
              }
            ],
            "name": "coh3002c.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6055",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              }
            ],
            "name": "coh1000t.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:5989",
            "system": "taito-fx1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "8d8d0764",
                "name": "m534002c-15.ic353",
                "sha1": "7ee83d317190bb1cef2f8f01c81eaaae47150ebb",
                "size": 524288
              },
              {
                "crc32": "c425eaf5",
                "name": "ac01.ic652",
                "sha1": "decf77ab50f7f58c641c3214a11647924f3a8998",
                "size": 8
              }
            ],
            "name": "coh1000a.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6015",
            "system": "acclaim-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "45e8a4b4",
                "name": "msm27c402zb.ic353",
                "sha1": "815488d8563c85f97fbc3384ff21f08e4c88b7b7",
                "size": 524288
              },
              {
                "crc32": "1cac067e",
                "name": "tw01.ic652",
                "sha1": "8e87941bfb374172628c8a37647e3a66b7166aa8",
                "size": 8
              }
            ],
            "name": "coh1000w.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6024",
            "system": "atari-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "6721146b",
                "name": "m534002c-17.ic353",
                "sha1": "9511d24bfe25eb180fb2db0835b131cb4a12730e",
                "size": 524288
              },
              {
                "crc32": "181668b3",
                "name": "at01.ic652",
                "sha1": "8d2fe1facb4473cc20b4b477aaf881f9280939cf",
                "size": 8
              }
            ],
            "name": "coh1001l.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6028",
            "system": "atlus-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "5ff165f3",
                "name": "coh-1002v.ic353",
                "sha1": "8f59314c1093446b9bcb06d232244da6df78e206",
                "size": 524288
              },
              {
                "crc32": "1ce271df",
                "name": "kn01.ic652",
                "sha1": "b01479dc75a4a8a86bee7ac7cd10af2bda332544",
                "size": 8
              }
            ],
            "name": "coh1002v.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6032",
            "system": "videosystem-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "910f3a8b",
                "name": "m27c402cz-54.ic353",
                "sha1": "cd68532967a25f476a6d73473ec6b6f4df2e1689",
                "size": 524288
              },
              {
                "crc32": "a7dd922e",
                "name": "et01.ic652",
                "sha1": "1069c1d9015028a51a1b314cfacb014ea90aa425",
                "size": 8
              }
            ],
            "name": "coh1002e.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6038",
            "system": "eighting-zn1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "69ffbcb4",
                "name": "m534002c-61.ic353",
                "sha1": "03eb2febfab3fcde716defff291babd9392de965",
                "size": 524288
              },
              {
                "crc32": "50dc8322",
                "name": "mg01.ic652",
                "sha1": "cef4011c6c06d6fce546e1db5d9fbae155eabf57",
                "size": 8
              }
            ],
            "name": "coh1002m.zip",
            "required": true,
            "source_ref": "src/mame/sony/zn.cpp:6089",
            "system": "tecmo-tps"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "03967fa7",
                "name": "m534002c-60.ic353",
                "sha1": "0e17fec2286e4e25deb23d40e41ce0986f373d49",
                "size": 524288
              },
              {
                "crc32": "235510b1",
                "name": "tt10.ic652",
                "sha1": "2cc02113207a8f0b078152d31ce6503411750e70",
                "size": 8
              },
              {
                "crc32": "6bb167b3",
                "name": "tt16.u17",
                "sha1": "9dcba08f10775a9adf2b1f382c947460edd3d239",
                "size": 8
              },
              {
                "crc32": "c48c8236",
                "name": "flash.u30",
                "sha1": "c6dad60266ce2ff635696bc0d91903c543273559",
                "size": 2097152
              },
              {
                "crc32": "cd15cc30",
                "description": "G NET BIOS v1 flasher",
                "name": "f35-01_m27c800_v1.bin",
                "sha1": "78361f46fa7186d5058937c86c66247a86b1257f",
                "size": 1048576
              },
              {
                "crc32": "6225ec11",
                "description": "G NET BIOS v2 flasher",
                "name": "f35-01_m27c800.bin",
                "sha1": "047852d456b6ff85f8e640887caa03cf3e63ffad",
                "size": 1048576
              },
              {
                "crc32": "6367aedf",
                "description": "MB2009",
                "name": "f35-01_m27c800_modbios_mb-2009_dump_by_aje_fr.bin",
                "sha1": "8400775e0c974c8b017e26ef9339144cad457c63",
                "size": 1048576
              },
              {
                "crc32": "f98ae118",
                "description": "MB2011",
                "name": "f35-01_m27c800_modbios_mb-2011.bin",
                "sha1": "c6918dfbb6fcf686dde4b731e84f740177ab31f0",
                "size": 1048576
              }
            ],
            "name": "coh3002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1341",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e3f23b6e",
                "name": "m534002c-14.ic353",
                "sha1": "e18907cf8c6ba54d96edba0a9a00487a90219e0d",
                "size": 524288
              },
              {
                "crc32": "daac13e7",
                "name": "tt01.ic652",
                "sha1": "96d94f2b06fb7ecd91454969f4959a583ffb9d5a",
                "size": 8
              },
              {
                "crc32": "2989b6eb",
                "name": "tt99.u17",
                "sha1": "89981ec68d30729c27d31f820cbfd0c23ed14a03",
                "size": 8
              },
              {
                "crc32": "9100dbf2",
                "name": "flash.u30",
                "sha1": "9ce888bd2a7e575c8ca71d978cb85de22afb5660",
                "size": 2097152
              }
            ],
            "name": "coh1002t.zip",
            "required": true,
            "source_ref": "src/mame/sony/taitogn.cpp:1342",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "7e2b836c",
                "name": "sknsj1.u10",
                "sha1": "92c5a7a2472496028bff0e5980d41dd294f42144",
                "size": 524288
              },
              {
                "crc32": "e2b9d7d1",
                "name": "sknse2.u10",
                "sha1": "b530a3bb9dedc8cfafcba9f1f10277590be04a15",
                "size": 524288
              },
              {
                "crc32": "745e5212",
                "name": "sknsa1.u10",
                "sha1": "caba649ab2d83b2d7e007eecee0fc582c019df38",
                "size": 524288
              },
              {
                "crc32": "384d21ec",
                "name": "sknsu1.u10",
                "sha1": "a27e8a18099d9cea64fa32db28d01101c2a78815",
                "size": 524288
              },
              {
                "crc32": "ff1c9f79",
                "name": "sknsk1.u10",
                "sha1": "a51e598d43e76d37da69b1f094c111273bdfc94a",
                "size": 524288
              },
              {
                "crc32": "b8d3190c",
                "name": "supernova_modbios-japan.u10",
                "sha1": "62c9a4a075fd944e89fe95c6b46046101eb6de1c",
                "size": 524288
              },
              {
                "crc32": "1d90517c",
                "name": "supernova-modbios-korea.u10",
                "sha1": "463962ffe19880135f0d95a7beda79e27448e872",
                "size": 524288
              }
            ],
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/kaneko/suprnova.cpp:2135",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:776",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "0b5aed5e",
                "name": "am_macs_os_low.u43",
                "sha1": "042e705017ee34656e2c6af45825bb2dd3447747",
                "size": 524288
              },
              {
                "crc32": "538b68e4",
                "name": "am_macs_os_hi.u44",
                "sha1": "a0534147791e94e726f49451d0e95671ae0a87d5",
                "size": 524288
              },
              {
                "crc32": "669096c1",
                "name": "sx011-01.bin",
                "sha1": "36f55a2e4865bdf0506746a4df51bfb1944f905e",
                "size": 343
              }
            ],
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/seta/macs.cpp:775",
            "system": "imax-macs"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a30dd3de",
                "name": "brom1.bin",
                "sha1": "3e2fd0a56214e6f5dcb93687e409af13d065ea30",
                "size": 524288
              },
              {
                "crc32": "ab5948d6",
                "name": "bios_us.bin",
                "sha1": "f8b940c1ae5ce2d3b2cd0c9bfaf6e5b063cec06e",
                "size": 524288
              },
              {
                "crc32": "bbf07ec6",
                "name": "bios_export.bin",
                "sha1": "5656aa077f6a6d43953f15b5123eea102a9d5313",
                "size": 524288
              },
              {
                "crc32": "ac953e2e",
                "name": "bios_korea.bin",
                "sha1": "f502188ef252b7c9d04934c4b525730a116de48b",
                "size": 524288
              },
              {
                "crc32": "6b933005",
                "name": "from1.bin",
                "sha1": "e992747f46c48b66e5509fe0adf19c91250b00c7",
                "size": 524288
              },
              {
                "crc32": "4a6832dc",
                "name": "rom1.bin",
                "sha1": "ae504f7733c2f40450157cd1d3b85bc83fac8569",
                "size": 130866
              },
              {
                "crc32": "b70df21f",
                "name": "tmp87ph40an.bin",
                "sha1": "5b742e8a0bbf4c0ae4f4398d34c7058fb24acc92",
                "size": 32768
              },
              {
                "crc32": "78b7020d",
                "name": "lvs-ioj-br9020f.u2",
                "sha1": "2b8549532ef5e1e8102dbe71af55fdfb27ccbba6",
                "size": 256
              },
              {
                "crc32": "af9f4287",
                "name": "lvs-igx-br9020f.u3",
                "sha1": "6df0e35c77dbfee2fab7ff490dcd651db420e367",
                "size": 256
              },
              {
                "crc32": "dabec5d2",
                "name": "lvs-jam-br9020f.u3",
                "sha1": "19c5be89c57387d6ea563b3dc55674d0692af98e",
                "size": 256
              }
            ],
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/snk/hng64.cpp:3238",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a6ce1636",
                "name": "315093-01.u2",
                "sha1": "11f9e62cf299f72184835b7b2a70a16333fc0d88",
                "size": 262144
              },
              {
                "crc32": "2d8e1a06",
                "name": "scpa_01-hi_v3.0.u12",
                "sha1": "be187f34624aeda110017c4a09242f7c00ef56a4",
                "size": 65536
              },
              {
                "crc32": "e4f38fab",
                "name": "scpa_01-lo_v3.0.u16",
                "sha1": "01c2eb5965070893be6734eb1372576727716476",
                "size": 65536
              },
              {
                "crc32": "79450b4b",
                "name": "scpa_01-hi_v2.20.u12",
                "sha1": "a1e508a89fc62e1c4994064f2786f491b1dc8bc6",
                "size": 65536
              },
              {
                "crc32": "d2825511",
                "name": "scpa_01-lo_v2.20.u16",
                "sha1": "747a37c6073224472bf261ae376ac9abfbe07554",
                "size": 65536
              },
              {
                "crc32": "be9dbdc5",
                "name": "scpa_01-hi_v2.11.u12",
                "sha1": "1554da09f051ec53937d65d4e451de51bc0c69e5",
                "size": 65536
              },
              {
                "crc32": "95b84504",
                "name": "scpa_01-lo_v2.11.u16",
                "sha1": "99999fc40909001b37aa1b543918118becc81800",
                "size": 65536
              },
              {
                "crc32": "67d44523",
                "name": "gcp-1-hi",
                "sha1": "f3e3699132cdf741518accb890c04d17374c4049",
                "size": 65536
              },
              {
                "crc32": "65d9b9cf",
                "name": "gcp-1-lo",
                "sha1": "5c60a0dd4a0a7d9b938ce6b0446a6ad2ecaf07ec",
                "size": 65536
              },
              {
                "crc32": "1d7594ae",
                "name": "gcp-2-hi",
                "sha1": "6173bbfecf18d7d9ee6bc2b6753ca9d42fabd781",
                "size": 65536
              },
              {
                "crc32": "e776198d",
                "name": "gcp-2-lo",
                "sha1": "694ca4cc99ed84a95d18201c94a3332f8599654f",
                "size": 65536
              },
              {
                "crc32": "3e7364be",
                "name": "gcp-3-hi",
                "sha1": "26e10d0ddc031a891138db36ce4f1732722e6847",
                "size": 65536
              },
              {
                "crc32": "87229e0d",
                "name": "gcp-3-lo",
                "sha1": "0b18544801e529f954b9e03226bd2e5475f36351",
                "size": 65536
              },
              {
                "crc32": "0b486a85",
                "name": "gcp_v311_1-hi.u16",
                "sha1": "b406f1db5abf28d9072b7940989ffd176aeee5cb",
                "size": 65536
              },
              {
                "crc32": "80e8e863",
                "name": "gcp_v311_1-lo.u11",
                "sha1": "ab04dfcda7544f4ed9b67771cd8aefe0300c6d4b",
                "size": 65536
              },
              {
                "crc32": "d20a4d7f",
                "name": "gcp_v311_2-hi.u17",
                "sha1": "1dc0a79efa946333149f68ddac046fd44b5f2abe",
                "size": 65536
              },
              {
                "crc32": "5bf4c74c",
                "name": "gcp_v311_2-lo.u12",
                "sha1": "1f7b17170accdf9e448c1a5d8bc430aa2d1d931b",
                "size": 65536
              },
              {
                "crc32": "69295167",
                "name": "gcp_v400_1-hi.u16",
                "sha1": "855f53abbb9dc15e5518e16c5c2dfe4134d07306",
                "size": 65536
              },
              {
                "crc32": "504c2171",
                "name": "gcp_v400_1-lo.u11",
                "sha1": "a93367f520afb86c97c0a191714b72823c95cdd2",
                "size": 65536
              },
              {
                "crc32": "13fb4e2d",
                "name": "gcp_v400_2-hi.u17",
                "sha1": "3eef07aecc3a201ae0b20634c7fd0c87c89fd7f1",
                "size": 65536
              },
              {
                "crc32": "a5cc4515",
                "name": "gcp_v400_2-lo.u12",
                "sha1": "80070521476e92323a6baa6e55928ca5b751a332",
                "size": 65536
              }
            ],
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/amiga/arsystems.cpp:1011",
            "system": "arcadia-systems"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "88d0be26",
                "name": "136032.205.l13",
                "sha1": "d124045eccc562ff0423b23a240e27ad740fa0c9",
                "size": 16384
              },
              {
                "crc32": "3c79ef05",
                "name": "136032.206.l12",
                "sha1": "20fdca7131478e1ee12691bdafd2d5bb74cbd16f",
                "size": 16384
              },
              {
                "crc32": "79021d3c",
                "name": "136032.105.l13",
                "sha1": "85febd34bcb166fc3326b5e5e4e80e157b660a08",
                "size": 16384
              },
              {
                "crc32": "76ee86c4",
                "name": "136032.106.l12",
                "sha1": "cbcd424510435a04e9041967a13781fd19b0f2c4",
                "size": 16384
              },
              {
                "crc32": "195c54ad",
                "name": "136032.114.j11",
                "sha1": "d7cda3cd3db4c6f77074ca05e96ae11b62e048b7",
                "size": 16384
              },
              {
                "crc32": "7275b4dc",
                "name": "136032.115.j10",
                "sha1": "0896ab37ea832a1335046353612c1b4c86d8d040",
                "size": 16384
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.104.f5",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7a29dc07",
                "name": "136032.107.b2",
                "sha1": "72ba464da01bd6d3a91b8d9997d5ac14b6f47aad",
                "size": 8192
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              },
              {
                "crc32": "7e84972a",
                "name": "136032.101.e3",
                "sha1": "84d422b53547271e3a07342704a05ef481db3f99",
                "size": 256
              },
              {
                "crc32": "ebf1e0ae",
                "name": "136032.102.e5",
                "sha1": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
                "size": 256
              },
              {
                "crc32": "92d6a0b4",
                "name": "136032.103.f7",
                "sha1": "0a42a4816c89447b16e1f3245409591efea98a4a",
                "size": 235
              }
            ],
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/atari/atarisy1.cpp:2669",
            "system": "atari-system1"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "1f9cd270",
                "name": "atarixl.rom",
                "sha1": "ae4f523ba08b6fd59f3cae515a2b2410bbd98f55",
                "size": 16384
              },
              {
                "crc32": "fe9cf53c",
                "name": "maxaflex.uc",
                "sha1": "4b02bc2f0c8a1eab799814fac82d5812c0160206",
                "size": 2048
              },
              {
                "crc32": "edf5c950",
                "name": "maxprom.prm",
                "sha1": "9ad046ea41a61585dd8d2f2d4167a3cc39d2928f",
                "size": 512
              }
            ],
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/atari/maxaflex.cpp:448",
            "system": "exidy-maxaflex"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "beff39a9",
                "description": "AMG0110B PCB",
                "name": "mx27l1000.u14",
                "sha1": "b6f6dda58d9c82273f9422c1bd623411e58982cb",
                "size": 131072
              },
              {
                "crc32": "1e8175c8",
                "description": "AMG0110D PCB",
                "name": "mx27l1000-alt.u14",
                "sha1": "f60c016be2ff11e47b2192acddb92676043af501",
                "size": 131072
              }
            ],
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/misc/crystal.cpp:845",
            "system": "brezzasoft-crystal"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/ces/galgames.cpp:1288",
            "system": "ces-galaxy-games"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "86c4a4f0",
                "name": "magnet-master-vid-e03.bin",
                "sha1": "6db1a006b2e0b2a7cc9748ade881debb098b6757",
                "size": 8192
              }
            ],
            "name": "cedmag.zip",
            "required": true,
            "source_ref": "src/mame/efo/cedar_magnet.cpp:1166",
            "system": "efo-cedar-magnet"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e0fc1a16",
                "description": "Eagle 40MB bootrom 2.09",
                "name": "eagle_u15_v209.u15",
                "sha1": "c9524f7ee6b95bd484a3b75bcbe2243cb273f84c",
                "size": 1048576
              },
              {
                "crc32": "772f2864",
                "description": "Eagle 40MB bootrom 2.08",
                "name": "eagle_u15_v208.u15",
                "sha1": "085063a4e34f29ebe3814823cd2c6323a050da36",
                "size": 1048576
              },
              {
                "crc32": "f02e5523",
                "description": "Eagle 40MB bootrom 2.04",
                "name": "eagle_u15_v204.u15",
                "sha1": "b979cf72a6992f1ecad9695a08c8d51e315ab537",
                "size": 1048576
              },
              {
                "crc32": "e180442b",
                "description": "Eagle 40MB bootrom 2.01",
                "name": "eagle_u15_v201.u15",
                "sha1": "4f50821fed5bcd786d989520aa2559d6c416fb1f",
                "size": 1048576
              },
              {
                "crc32": "97a01fc9",
                "description": "Eagle 40MB bootrom 1.07",
                "name": "golf_fore_u15_v107.u15",
                "sha1": "a421dbf4d097b2f50cc005d3cd0d63e562e03df8",
                "size": 1048576
              },
              {
                "crc32": "9c79b7ad",
                "description": "Eagle 40MB bootrom 1.06a",
                "name": "golf_fore_u15_v106a.u15",
                "sha1": "ccf1c86e79d65bee30f399e0fa33a7839570d93b",
                "size": 1048576
              },
              {
                "crc32": "56bc193d",
                "description": "Eagle 40MB bootrom 1.06",
                "name": "golf_fore_u15_v106.u15",
                "sha1": "e531d208ef27f777d0784414885f390d1be654b9",
                "size": 1048576
              },
              {
                "crc32": "3870dbe0",
                "description": "Eagle 40MB bootrom 1.05",
                "name": "golf_fore_u15_v105.u15",
                "sha1": "09be2d86c7259cd81d945c757044b167a76f30db",
                "size": 1048576
              },
              {
                "crc32": "c35f4cf2",
                "description": "Eagle bootrom 1.03",
                "name": "golf_fore_u15_v103.u15",
                "sha1": "45301c18c7f8f78754c8ad60ea4d2da5a7dc55fb",
                "size": 1048576
              },
              {
                "crc32": "1fd39e73",
                "description": "BBH 8meg bootrom 1.02",
                "name": "bbh_u15_v102.u15",
                "sha1": "d1ac758f94defc5c55c62594b3999a406dd9ef1f",
                "size": 1048576
              },
              {
                "crc32": "4c000c5e",
                "description": "Eagle bootrom 1.02",
                "name": "golf_fore_u15_v102.u15",
                "sha1": "4fd5ea2a0874759b621c9cd52cee55d282443e5d",
                "size": 1048576
              },
              {
                "crc32": "2600bc2b",
                "description": "Eagle bootrom 1.01",
                "name": "golf_fore_u15_v101.u15",
                "sha1": "c4b89e69c51e4a3bb1874407c4d30b6caed4f396",
                "size": 1048576
              },
              {
                "crc32": "62c4af8a",
                "name": "17s20lpc_sb4.u26",
                "sha1": "6eca277b9c66a401990599e98fdca64a9e38cc9a",
                "size": 32768
              },
              {
                "crc32": "c88b9d42",
                "name": "17s20lpc_sb5.u26",
                "sha1": "b912d0fc50ecdc6a198c626f6e1644e8405fac6e",
                "size": 32768
              },
              {
                "crc32": "f5cf3187",
                "name": "17s50a_red1.u26",
                "sha1": "83b4a14de9959e5a776d97d424945d43501bda7f",
                "size": 131072
              },
              {
                "crc32": "9d1e1ace",
                "name": "e2-card1.u22.jed",
                "sha1": "287d6a30e9f32137ef4eba54f0effa092c97a6eb",
                "size": 3025
              },
              {
                "crc32": "4f1ff45a",
                "name": "e2-res3.u117.jed",
                "sha1": "213cbdd6cd37ad9b5bfc9545084892a68d29f5ff",
                "size": 3025
              }
            ],
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/itech/iteagle.cpp:756",
            "system": "itech-eagle"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "a2b5546b",
                "description": "mk3 v1.0",
                "name": "mk3_1.0_bios.u22",
                "sha1": "d99d29615e2b9c8784e03d4270cf7bb6569f389d",
                "size": 131072
              },
              {
                "crc32": "4540c23f",
                "description": "mk3 v1.1",
                "name": "mk3_1.1_bios.u22",
                "sha1": "bba697dbe234e4f14c23aac126ea36df216f8c93",
                "size": 131072
              },
              {
                "crc32": "5911e31a",
                "name": "piu10.u8",
                "sha1": "295723b9b7da9e55b5dd5586b23b06355f4837ef",
                "size": 2097152
              },
              {
                "crc32": "9c436cfa",
                "name": "piu10.u9",
                "sha1": "480ea52e74721d1963ced41be5c482b7b913ccd2",
                "size": 2097152
              }
            ],
            "name": "pumpitup.zip",
            "required": true,
            "source_ref": "src/mame/misc/xtom3d.cpp:997",
            "system": "andamiro-pumpitup"
          }
        ],
        "notes": "Arcade-only build of libretro/mame (SUBTARGET=arcade). Same source repo,\nCORE_NAME, and paths (system_dir/mame/) as the full MAME core. Driver\nselection via src/mame/arcade.flt: 1130 arcade drivers from the full set.\nExcludes console/computer/pinball/fruit machine drivers.\n50 BIOS root sets (vs 99 in full MAME). romload.cpp unmodified.\nROM search: content_dir + system_dir/mame/bios + system_dir/mame/roms.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/mame",
        "source_commit": "c1ff660dbddd5b134f549b4881499699cee1ebb6",
        "systems": [
          "snk-neogeo-mvs",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system573",
          "konami-viper",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "konami-twinkle",
          "konami-bubble-system",
          "konami-gx",
          "hyper-neogeo64",
          "sammy-medal",
          "sega-isgsm",
          "nintendo-aleck64",
          "taito-fx1",
          "taito-gnet",
          "acclaim-zn1",
          "atari-zn1",
          "atlus-zn1",
          "videosystem-zn1",
          "eighting-zn1",
          "tecmo-tps",
          "imax-macs",
          "arcadia-systems",
          "atari-system1",
          "exidy-maxaflex",
          "brezzasoft-crystal",
          "ces-galaxy-games",
          "efo-cedar-magnet",
          "itech-eagle",
          "andamiro-pumpitup"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame",
        "upstream_commit": "728d957663041fbc943806bf151584acd03e2160"
      }
    },
    {
      "id": "mamemess",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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",
      "profile": {
        "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"
      }
    },
    {
      "id": "nethersx2-turnip-classic",
      "profile": {
        "author": "nckstwrt",
        "bios_directory": "bios/",
        "bios_mode": "agnostic",
        "core_classification": "community_fork",
        "core_version": "2.2n-3668-Turnip-v0.7",
        "cores": [
          "nethersx2-turnip-classic",
          "NetherSX2-Turnip-Classic",
          "NETHERSX2-TURNIP-CLASSIC"
        ],
        "display_name": "Sony - PlayStation 2 (NetherSX2-Turnip Classic)",
        "emulator": "NetherSX2-Turnip Classic",
        "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, liblog.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. libfile_redirect_hook.so and libgsl_alloc_hook.so are reachable only under feature flags the shim never sets, the only flag passed being the custom driver one. The system Vulkan loader and libandroid.so come from the platform. Also left out are the assets no code path on this platform opens: 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 and Mcd-Multitap<n>-Slot<nn>.ps2, DEV9hdd.raw for the internal disk, save states, screenshots, covers, texture dumps, playtime.dat, emulog.txt, imgui.ini, per-game settings, input profiles, the gamedb and gl_programs caches, and vulkan_shim.log. ref: VulkanShim2/vulkan_shim.cpp:1099-1105, VulkanShim2/vulkan_shim.cpp:1150,\n     VulkanShim2/vulkan_shim.cpp:1179-1194,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x4a8c7c\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-classic v0.7 libemucore.so 0x81bc00-0x81bc24 (size window), nethersx2-turnip-classic v0.7 libemucore.so 0x81c1c0 (acceptance flag set outright)",
            "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-turnip-classic v0.7 libemucore.so 0x81b688-0x81b810"
          },
          {
            "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-turnip-classic v0.7 libemucore.so 0x81b820-0x81b994"
          },
          {
            "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-226, nethersx2-turnip-classic v0.7 libemucore.so 0x790470-0x7906c8, nethersx2-turnip-classic v0.7 libemucore.so 0x790820-0x790944",
            "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-classic v0.7 libemucore.so 0x791700-0x7918f4",
            "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:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160, nethersx2-turnip-classic v0.7 libemucore.so 0x7bb620-0x7bb680"
          },
          {
            "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-classic v0.7 libemucore.so 0x7bb5cc-0x7bb61c"
          },
          {
            "description": "IOP module injected at boot",
            "name": "<module>.irx",
            "note": "Opened at the path the configuration holds once it is four characters or longer, 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-classic v0.7 libemucore.so 0x81b9a4-0x81bac4",
            "unsourceable": "any IOP module the user points at, under no name the code expects"
          },
          {
            "bundled": true,
            "description": "Vulkan loader shim",
            "md5": "1a68e1ac1eec29005c19df924146cf19",
            "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. This package carries the build committed for v0.6, one revision behind the emulator library beside it.",
            "path": "lib/arm64-v8a/libvulkad.so",
            "required": false,
            "sha1": "2655469eca935d89a6d8fe0c3998fe3ec0dd2d65",
            "size": 484560,
            "source_ref": "VulkanShim2/vulkan_shim.cpp:969-1272 (the constructor that runs on load), nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624"
          },
          {
            "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:1138-1156, VulkanShim2/hook_impl.cpp:38-140"
          },
          {
            "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:1159-1160, VulkanShim2/main_hook.c:3-9"
          },
          {
            "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:1011, VulkanShim2/vulkan_shim.cpp:1079-1080, 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 whenever the Adreno model reads non-zero, model 810 and 825 included. 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:1010, VulkanShim2/vulkan_shim.cpp:1037-1052, nethersx2-turnip-classic v0.7 libvulkad.so 0x22770-0x23108"
          },
          {
            "bundled": true,
            "description": "Turnip driver, Adreno 810 branch",
            "md5": "e90d691859e0ff8f0221f3fb497cca5d",
            "name": "libvulkan_freedreno_T24.so",
            "note": "The Adreno 810 branch writes this path and the block it falls into overwrites it with the 8xx driver before anything reads it, so this revision never opens the file. The branch gained its own exit after the revision this package was built from.",
            "path": "lib/arm64-v8a/libvulkan_freedreno_T24.so",
            "required": false,
            "sha1": "d28f7c64a8296a6d1886b348946d01433c10b493",
            "size": 18003849,
            "source_ref": "VulkanShim2/vulkan_shim.cpp:1039-1043, nethersx2-turnip-classic v0.7 libvulkad.so 0x22784-0x230d4"
          },
          {
            "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.",
            "path": "lib/arm64-v8a/libvulkan_freedreno_25.3.0_R6_Gmem.so",
            "required": false,
            "sha1": "2159a5172176f9ee0076370314d2d100de2fe1b1",
            "size": 12048553,
            "source_ref": "VulkanShim2/vulkan_shim.cpp:1056-1059"
          },
          {
            "bundled": true,
            "description": "Turnip driver, SD845 to SD888 branch",
            "md5": "7af55500464d372a609084fb4698e16d",
            "name": "libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so",
            "note": "Chosen when the platform reads SM8250, kona, SM8350, lahaina, sdm845 or napali.",
            "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:1027-1033"
          },
          {
            "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:1020-1023"
          },
          {
            "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:1009, VulkanShim2/vulkan_shim.cpp:1012-1017",
            "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:1179-1194"
          },
          {
            "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:1179-1194, VulkanShim2/vulkan_shim.cpp:1248-1255"
          },
          {
            "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:1179-1194, VulkanShim2/vulkan_shim.cpp:1257-1269"
          },
          {
            "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:1179-1194, VulkanShim2/vulkan_shim.cpp:1235-1246"
          },
          {
            "bundled": true,
            "description": "Game database",
            "md5": "3f33de7bf8e40e00a05cf27c18a6be0c",
            "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": "58fb1f8ea6cf2d526904349640453e682fe388a1",
            "size": 1758721,
            "source_ref": "aethersx2/pcsx2/GameDatabase.cpp:35, nethersx2-turnip-classic v0.7 libemucore.so 0x2e45fc"
          },
          {
            "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-classic v0.7 libemucore.so 0x804464"
          },
          {
            "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-classic v0.7 libemucore.so 0x80460c"
          },
          {
            "bundled": true,
            "description": "Interface font",
            "md5": "86da78cb59576328483a11c6ef74bc2b",
            "name": "Roboto-Regular.ttf",
            "note": "Read as the standard font when the interface comes up. An empty read aborts the process.",
            "path": "assets/fonts/Roboto-Regular.ttf",
            "required": true,
            "sha1": "00d62fbdc8d5dec4c659005e116d0ba2ee63b547",
            "size": 305608,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1e78-0x7d1e8c, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
          },
          {
            "bundled": true,
            "description": "Fixed-width interface font",
            "md5": "8ad82b1dc550319993a7d6c932b2656d",
            "name": "RobotoMono-Medium.ttf",
            "note": "Read for the fixed-width font. An empty read aborts the process.",
            "path": "assets/fonts/RobotoMono-Medium.ttf",
            "required": true,
            "sha1": "9056e59b69c6f1160fdfb92a0773f17f6307f3ad",
            "size": 86820,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1ecc-0x7d1ee0, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
          },
          {
            "bundled": true,
            "description": "Font Awesome icon font",
            "md5": "dffd9504fcb1894620fa41c700172994",
            "name": "fa-solid-900.ttf",
            "note": "Read for the interface icon glyphs. An empty read aborts the process.",
            "path": "assets/fonts/fa-solid-900.ttf",
            "required": true,
            "sha1": "694b8a2445ff39de415bf4791845442a7b1b81e5",
            "size": 204528,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1f20-0x7d1f34, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"
          },
          {
            "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-classic v0.7 libemucore.so 0x627178"
          },
          {
            "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-classic v0.7 libemucore.so 0x627188"
          },
          {
            "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-classic v0.7 libemucore.so 0x67c710, nethersx2-turnip-classic v0.7 libemucore.so 0x685fd0"
          },
          {
            "bundled": true,
            "description": "OpenGL shader preamble",
            "md5": "86a37e282f029d20f395cfd05263fddd",
            "name": "common_header.glsl",
            "note": "Prepended to every OpenGL program the renderer builds.",
            "path": "assets/shaders/opengl/common_header.glsl",
            "required": false,
            "sha1": "9c391aae0daddf0c2ba3f0d5265aee9b491286e4",
            "size": 1938,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x674618"
          },
          {
            "bundled": true,
            "description": "OpenGL format conversion shader",
            "md5": "0dba3321d9f902439a50b79680b220c7",
            "name": "convert.glsl",
            "path": "assets/shaders/opengl/convert.glsl",
            "required": false,
            "sha1": "26a17de3b4abc30e5c19987efad4ceac22e9a369",
            "size": 10361,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x674f78"
          },
          {
            "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-classic v0.7 libemucore.so 0x675480"
          },
          {
            "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-classic v0.7 libemucore.so 0x675780"
          },
          {
            "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-classic v0.7 libemucore.so 0x675aac"
          },
          {
            "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-classic v0.7 libemucore.so 0x675cb8"
          },
          {
            "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-classic v0.7 libemucore.so 0x676fa0"
          },
          {
            "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-classic v0.7 libemucore.so 0x677318"
          },
          {
            "bundled": true,
            "description": "OpenGL texture function fragment shader",
            "md5": "9d80855607a6da1014f083340741b845",
            "name": "tfx_fs.glsl",
            "path": "assets/shaders/opengl/tfx_fs.glsl",
            "required": false,
            "sha1": "919c3308c8850852d529d0127ce94e873375bfd2",
            "size": 25906,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x677328"
          },
          {
            "bundled": true,
            "description": "Vulkan texture function shader",
            "md5": "ebc0ffa3de6fd0a7a4dea17f8b74d806",
            "name": "tfx.glsl",
            "path": "assets/shaders/vulkan/tfx.glsl",
            "required": false,
            "sha1": "b4ebf3f7f20fc88f91cda033552a7489a9ff179c",
            "size": 28290,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x682098"
          },
          {
            "bundled": true,
            "description": "Vulkan format conversion shader",
            "md5": "553d33859963a1abe5508e8e45f1cb1e",
            "name": "convert.glsl",
            "path": "assets/shaders/vulkan/convert.glsl",
            "required": false,
            "sha1": "7a133d4cf115dc49cd1921bd7049ea64ad58acce",
            "size": 8025,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x68394c, nethersx2-turnip-classic v0.7 libemucore.so 0x685fb8"
          },
          {
            "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-classic v0.7 libemucore.so 0x684728"
          },
          {
            "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-turnip-classic v0.7 libemucore.so 0x684f74"
          },
          {
            "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-classic v0.7 libemucore.so 0x6857c4"
          },
          {
            "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-classic v0.7 libemucore.so 0x686284"
          },
          {
            "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-turnip-classic v0.7 libemucore.so 0x6869c4"
          },
          {
            "bundled": true,
            "description": "Achievement unlock sound",
            "md5": "4d035ee86f836bfed422a975cf65c9cc",
            "name": "unlock.wav",
            "note": "Joined to the file:///android_asset base and 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-classic v0.7 libemucore.so 0x811190"
          },
          {
            "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-classic v0.7 libemucore.so 0x811814"
          },
          {
            "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-classic v0.7 libemucore.so 0x810254"
          },
          {
            "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. A miss logs that it cannot continue and the caller tears the interface down instead of bringing it up.",
            "path": "assets/placeholder.png",
            "required": false,
            "sha1": "c36292ab7e16bf5a6cbc4063f638e24872349c45",
            "size": 2762,
            "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d21fc, nethersx2-turnip-classic v0.7 libemucore.so 0x817be0, nethersx2-turnip-classic v0.7 libemucore.so 0x7ec54c"
          },
          {
            "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-classic 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-classic 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 by the setup wizard's browser view.",
            "path": "assets/faq.html",
            "required": false,
            "sha1": "9163d4a3d19b87483f843e4bf3afe236a50a72d2",
            "size": 14048,
            "source_ref": "nethersx2-turnip-classic 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-classic v0.7 classes.dex android_asset 3rdparty.html"
          }
        ],
        "mode": "standalone",
        "notes": "PlayStation 2 emulator for Android, package xyz.aethersx2.cturnip, activity\nxyz.aethersx2.android.EmulationActivity, version name v2.2n-3668, label\nNetherSX2 Classic (Turnip). It sits on the 3668 line: the library it starts\nfrom is NetherSX2 Classic v2.2n-3668, itself a patch of the AetherSX2\nv1.5-3668 package, and the library still names itself NetherSX2 v2.2n-3668\n(Classic). Everything below was read from the v0.7 package:\nlib/arm64-v8a/libemucore.so, libvulkad.so, the dex and the assets.\nref: nethersx2-turnip-classic v0.7 AndroidManifest.xml,\n     nethersx2-turnip-classic v0.7 libemucore.so 0xcdcba\n\nThe package pairs two revisions of the project. libemucore.so is the blob the\nv0.7 commit carries, byte for byte; libvulkad.so is the one committed for\nv0.6 and reports its own build date. libhook_impl.so, libmain_hook.so and the\nsix packed drivers are the same at both revisions. The shim rules described\nhere are therefore those of the older revision, which this profile pins:\nSM8350, lahaina, sdm845 and napali still route to the a6xx-Patched driver,\nand SM6475, SM6650 and SM7325 are not known to it.\nref: VulkanShim2/vulkan_shim.cpp:1027-1059,\n     nethersx2-turnip-classic v0.7 libvulkad.so\n\nThe patch rewrites twenty-four places in the library it starts from. Three are\nthe strings libvulkan.so, libvulkan.so.1 and the message naming them, each\nturned into libvulkad.so, so the Vulkan loader opens the shim instead of the\nsystem driver. Sixteen turn comparisons into unconditional paths, among them\nthe memchr 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. Five\nmove settings defaults: the renderer enum from 12 to 14, the upscale\nmultiplier fallback from 1.0 to 2.0 with the configuration read\nshort-circuited, the hardware download mode default, and the warning text that\nwent with it. The same five sites carry their unpatched forms in the 4248\nlibrary this project also starts from, which is what places them here rather\nthan in the base. None of them is in a file loading path.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x105f5b,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x829ae0-0x82a018,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82d10c-0x82d5c0,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82e41c,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82fbac-0x82fcac,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x8034c4,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x833d04,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x83401c-0x834028,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x834cb0\n\nA BIOS image is required and boot stops without one, the application raising a\nstartup error saying it needs a PS2 BIOS in the bios folder of the data\ndirectory. The data directory is getExternalFilesDir(null) with getDataDir()\nbehind it, so it follows the application id, and the folder names under it\ncome from the Folders section, Bios defaulting to bios. An image imported\nthrough the interface is written to that folder under the CRC32 of its\ncontents, as %08X.bin.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x8057dc,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x7dfaf0-0x7dfb10,\n     xyz/aethersx2/android/NativeLibrary initializeOnce,\n     xyz/aethersx2/android/NativeLibrary importBIOS\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 read only to pick the word\nConsole or Devel for the description, and the acceptance flag is set outright\nonce ROMVER has been read, so development images pass with nothing patched\nhere. RESET and ROMVER are the only two names the scan compares. An image\nnamed in the configuration is combined with the BIOS folder and opened at that\npath when it exists, without the size filter and without the romdir test. No\nname and no hash is matched anywhere. The image is read into the 4 MB ROM\nregion and truncated to it, and one shorter than 2465792 bytes turns off the\nOSDSys 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-turnip-classic v0.7 libemucore.so 0x81bc00-0x81bc24,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81be44-0x81c1c0,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b5e8-0x81b62c\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 too\nshort. This code line loads no erom: the extension is named nowhere in the\nlibrary and the boot path goes from rom2 straight to the IRX.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:193-218,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:158-226,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b688-0x81b9a4\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:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160,\n     aethersx2/pcsx2/DEV9/flash.cpp:76-103,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x7bb5cc-0x7bb680,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b9a4-0x81bac4\n\nThe Vulkan path is the reason this build exists. libemucore.so opens\nlibvulkad.so.1 then libvulkad.so where the stock library names libvulkan.so,\nand vkCreateInstance is resolved from it. That shim reads the Adreno model and\nthe platform name 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 system\nlibrary's global offset table, and that path alone loads libbase.so,\nlibcutils.so, libvndksupport.so and libhardware.so from the library directory.\nThe shim derives the package name from its own library path and appends to\nvulkan_shim.log under the files folder of that package.\nref: VulkanShim2/vulkan_shim.cpp:43-73,\n     VulkanShim2/vulkan_shim.cpp:1008-1085,\n     VulkanShim2/vulkan_shim.cpp:1107-1175,\n     VulkanShim2/vulkan_shim.cpp:1179-1194,\n     VulkanShim2/hook_impl.cpp:38-140,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624\n\nResources are read out of the package itself. The library has no asset manager\nof its own and calls back into readPackageFile, readPackageFileToString and\nplaySoundAsync, each taking an asset-relative name, so the game database, the\npatch archives, the interface fonts, the shader sources every backend compiles\nat startup and the achievement sounds are versioned with the build and never\nlooked for on disk. The sound names are joined to a file:///android_asset base\nbefore they cross into Java. The game list draws its region flags and rating\nstars from the same assets. The game database is this build's own, and five of\nthe shader sources differ from the ones the 4248 line carries: the OpenGL\npreamble, its format conversion and texture function fragment shaders, and the\nVulkan texture function and format conversion shaders.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x828110,\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": "8e17e584884e19b0a912f1988730d576d6d5aa84",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Trixarian/AetherSX2",
        "upstream_commit": "1d1f795dfc70e38da67724c7298779260f513889"
      }
    },
    {
      "id": "ngp-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "ngp-emu",
          "NGP.emu",
          "NGP-EMU"
        ],
        "display_name": "SNK - Neo Geo Pocket / Color (NGP.emu)",
        "emulator": "NGP.emu",
        "files": [],
        "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 (NGP.emu/ios.mk, NGP.emu/pandora.mk). Published as com.explusalpha.NgpEmu\n(NGP.emu/metadata/conf.mk:2,4,6,7) and reached by ES-DE through its NGP-EMU\nfind rule, which only the Android rule set carries. Mednafen's Neo Geo Pocket\nmodule, itself descended from NeoPop, is vendored under NGP.emu/src/ngp\n(NGP.emu/metadata/conf.mk:8, NGP.emu/src/main/AppMeta.cc:27) on the 1.32 line\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the\napp's own video, audio, input and save layers. Three files differ from the\nMednafen 1.32.1 release, all of it frontend plumbing: the pixel format and\nsound rate hooks, the input latch and the flash file I/O move to the app\n(NGP.emu/src/main/Main.cc:84,102,118-131, NGP.emu/src/main/system.ccm:87,93).\nThe TLCS-900h disassembler is left out of the build\n(NGP.emu/src/CMakeLists.txt:6-32). Content is read from .ngp, .ngc, .npc and\n.ngpc files (NGP.emu/metadata/conf.mk:5, NGP.emu/src/main/AppMeta.cc:31-34,\nNGP.emu/src/ngp/neopop.cpp:336-337); an archive is opened by the framework,\nwhich keeps the first entry passing that same filter\n(EmuFramework/src/EmuSystem.cc:392-412).\n\nThe content image is the only one the app loads. It is read into a 4 MiB\nbuffer, hashed for the save file names and handed to the module, which refuses\nan image over 8 MiB (NGP.emu/src/main/Main.cc:80-85,\nEmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146,\nNGP.emu/src/ngp/neopop.cpp:183-193). The BIOS is built in memory rather than\nread: bios_install fills a 64 KiB array with the 27 system call vectors, writes\nopcode 0x1F at each target, copies an 0x800 byte system font held in the binary\nto 0x8DCF and closes the image with a RETI and an infinite loop\n(NGP.emu/src/ngp/bios.cpp:29,50-180,182-239, NGP.emu/src/ngp/neopop.cpp:211).\nThat opcode is bound to the HLE handler in the interpreter decode table, and\nthe handler answers only from the 0xFF0000 region\n(NGP.emu/src/ngp/TLCS-900h/TLCS900h_interpret.cpp:921-926,\nNGP.emu/src/ngp/biosHLE.cpp:43-47). The same array is what the memory map\nreturns for the BIOS region and where the font routine reads its glyphs\n(NGP.emu/src/ngp/mem.cpp:121, NGP.emu/src/ngp/biosHLE.cpp:221). The NGP\nLanguage menu item feeds the ngp.language setting, written to RAM at boot\nrather than selecting a file (NGP.emu/src/main/EmuMenuViews.cc:31-40,\nNGP.emu/src/main/options.cc:82-83, NGP.emu/src/ngp/mem.cpp:620,\nNGP.emu/src/ngp/neopop.cpp:286-299).\n\nNo firmware path exists by construction: the app answers Mednafen's file name\nrequest for save states, saves and save backups only, and any other kind ends\nin unreachable() (NGP.emu/src/main/options.cc:96-106). Cheat loading and IPS\npatching are compiled in from the shared Mednafen sources and called from\nnowhere (EmuFramework/src/shared/mednafen/mempatcher.cpp:251-254,\nEmuFramework/src/shared/mednafen/file.cpp:38-53). Per content the app writes\nand reads back a .ngf image holding the cartridge flash, plus save states and\nNgpEmu.config (NGP.emu/src/main/Main.cc:53-73,118-131,\nNGP.emu/src/main/system.ccm:76, NGP.emu/src/main/AppMeta.cc:28). ui.png,\ngpOverlay.png and the shader sources are drawn from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:58-65,\nEmuFramework/src/VideoImageEffect.cc:163-173). The app declares no bundled\ncontent, the framework 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": [
          "snk-ngp",
          "snk-ngpc"
        ],
        "type": "standalone",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "noods",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "noods"
        ],
        "display_name": "Nintendo - DS (NooDS)",
        "emulator": "NooDS",
        "files": [
          {
            "description": "ARM9 BIOS",
            "hle_fallback": true,
            "name": "bios9.bin",
            "note": "HLE fallback for all SWI calls; native needed for firmware boot and logo verification (copyBiosLogo)",
            "required": false,
            "size": 4096,
            "source_ref": "src/memory.cpp:130-141",
            "system": "nintendo-ds"
          },
          {
            "description": "ARM7 BIOS",
            "hle_fallback": true,
            "name": "bios7.bin",
            "note": "HLE fallback for all SWI calls; native needed for firmware boot",
            "required": false,
            "size": 16384,
            "source_ref": "src/memory.cpp:144-155",
            "system": "nintendo-ds"
          },
          {
            "description": "NDS firmware image",
            "hle_fallback": true,
            "name": "firmware.bin",
            "note": "Auto-generated 128KB non-bootable firmware as fallback; native dump (>128KB) needed for firmware boot",
            "required": false,
            "source_ref": "src/spi.cpp:62-160",
            "system": "nintendo-ds"
          },
          {
            "description": "GBA BIOS",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "HLE fallback via swiTableGba; native BIOS disables HLE and enables real GBA boot",
            "required": false,
            "size": 16384,
            "source_ref": "src/memory.cpp:158-168, src/core.cpp:252-256",
            "system": "nintendo-gba"
          },
          {
            "description": "DLDI SD card image for homebrew",
            "name": "nds_sd_card.bin",
            "note": "Opened on DLDI startup() call from homebrew ROMs; user-created FAT image",
            "required": false,
            "source_ref": "src/dldi.cpp:80-83, src/libretro/libretro.cpp:324",
            "system": "nintendo-ds"
          }
        ],
        "notes": "Full HLE BIOS for ARM9, ARM7 and GBA SWI routines (hle_bios.cpp:24-60).\nAll BIOS files optional when direct boot is enabled (default). When missing,\nHLE handler activated via special opcode at offset 3 (memory.cpp:139-168).\nFirmware auto-generated (128KB non-bootable) if not provided, with default\nWiFi config, touch calibration and user settings (spi.cpp:90-160). Native\nBIOS+firmware required only for firmware boot (non-direct-boot mode).\nBootable firmware threshold: >128KB (spi.cpp:87). DLDI patching provides\nSD card access for homebrew via nds_sd_card.bin (dldi.cpp:29-77).\nFile loading code identical between upstream and libretro port.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/jonian/libretro-noods",
        "source_commit": "9a2665306927ede64f4b5c109df79f4015607dbc",
        "systems": [
          "nintendo-ds",
          "nintendo-gba"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Hydr8gon/NooDS"
      }
    },
    {
      "id": "np2kai",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "0.86",
        "cores": [
          "np2kai"
        ],
        "display_name": "NEC - PC-98 (Neko Project II Kai)",
        "emulator": "NP2kai",
        "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": "np2kai/bios.rom",
            "required": false,
            "size": 98304,
            "source_ref": "bios/bios.c:430-436, common/strres.c:60"
          },
          {
            "aliases": [
              "FONT.ROM",
              "font.rom",
              "FONT.BMP"
            ],
            "hle_fallback": true,
            "name": "font.bmp",
            "note": "PC-98 font bitmap. 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": "np2kai/font.bmp",
            "required": false,
            "source_ref": "sdl/libretro/libretro.c:1813, font/font.c:86-125, font/fontdata.c:11"
          },
          {
            "hle_fallback": true,
            "name": "sound.rom",
            "note": "FM sound board BIOS ROM (16 KB). Generic fallback for all sound boards. Board-specific variants are tried first: sound26.rom (PC-9801-26K), sound86.rom (86), sound118.rom (118), soundSPB.rom (Speak Board), soundMO.rom (MO), sound14.rom (14).\n",
            "path": "np2kai/sound.rom",
            "required": false,
            "size": 16384,
            "source_ref": "sound/soundrom.c:15-16,21-55,93-106"
          },
          {
            "aliases": [
              "2608_BD.WAV"
            ],
            "name": "2608_bd.wav",
            "note": "YM2608 OPNA rhythm sample: bass drum",
            "path": "np2kai/2608_bd.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:11,60-71, sound/fmgen/fmgen_opna.cpp:1431"
          },
          {
            "aliases": [
              "2608_SD.WAV"
            ],
            "name": "2608_sd.wav",
            "note": "YM2608 OPNA rhythm sample: snare drum",
            "path": "np2kai/2608_sd.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:12, sound/fmgen/fmgen_opna.cpp:1432"
          },
          {
            "aliases": [
              "2608_TOP.WAV"
            ],
            "name": "2608_top.wav",
            "note": "YM2608 OPNA rhythm sample: top cymbal",
            "path": "np2kai/2608_top.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:13, sound/fmgen/fmgen_opna.cpp:1432"
          },
          {
            "aliases": [
              "2608_HH.WAV"
            ],
            "name": "2608_hh.wav",
            "note": "YM2608 OPNA rhythm sample: hi-hat",
            "path": "np2kai/2608_hh.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:14, sound/fmgen/fmgen_opna.cpp:1432"
          },
          {
            "aliases": [
              "2608_TOM.WAV"
            ],
            "name": "2608_tom.wav",
            "note": "YM2608 OPNA rhythm sample: tom",
            "path": "np2kai/2608_tom.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:15, sound/fmgen/fmgen_opna.cpp:1432"
          },
          {
            "aliases": [
              "2608_RIM.WAV",
              "2608_RYM.WAV"
            ],
            "name": "2608_rim.wav",
            "note": "YM2608 OPNA rhythm sample: rim shot. fmgen also accepts 2608_RYM.WAV.",
            "path": "np2kai/2608_rim.wav",
            "required": false,
            "source_ref": "sound/rhythmc.c:16, sound/fmgen/fmgen_opna.cpp:1431-1441"
          },
          {
            "aliases": [
              "d8000.rom",
              "bank3.bin",
              "bios9821.rom"
            ],
            "hle_fallback": true,
            "name": "ide.rom",
            "note": "IDE controller BIOS ROM (8 KB). For IDE HDD boot support. Without this, a simulated IDE BIOS is used.\n",
            "path": "np2kai/ide.rom",
            "required": false,
            "size": 8192,
            "source_ref": "cbus/ideio.c:1913-1941"
          },
          {
            "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": "np2kai/scsi.rom",
            "required": false,
            "size": 16384,
            "source_ref": "cbus/scsiio.c:214-231"
          },
          {
            "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": "np2kai/sasi.rom",
            "required": false,
            "size": 4096,
            "source_ref": "cbus/sasiio.c:451-467"
          },
          {
            "aliases": [
              "bank0.bin"
            ],
            "hle_fallback": true,
            "name": "pci.rom",
            "note": "PCI BIOS ROM (32 KB). For PC-9821 PCI bus emulation. Without this, the built-in PCI BIOS simulator is used.\n",
            "path": "np2kai/pci.rom",
            "required": false,
            "size": 32768,
            "source_ref": "io/pcidev.c:356-382"
          },
          {
            "name": "gpib.rom",
            "note": "GP-IB interface BIOS ROM (8 KB). If missing, GP-IB emulation is disabled entirely.\n",
            "path": "np2kai/gpib.rom",
            "required": false,
            "size": 8192,
            "source_ref": "cbus/gpibio.c:320-356",
            "unsourceable": "never publicly dumped, GP-IB emulation is stub code (source comment: not implemented)"
          },
          {
            "hle_fallback": true,
            "name": "key.txt",
            "note": "Keyboard remapping configuration (text file). User-created file for custom keyboard layout. The core uses built-in defaults if absent.\n",
            "path": "np2kai/key.txt",
            "required": false,
            "source_ref": "keystat.c:43,113-148",
            "unsourceable": "user-created keyboard config, no default distributed in any NP2kai release"
          }
        ],
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/NP2kai",
        "source_commit": "76b354b72b7541115c8c5a79f14538370e65e1d4",
        "systems": [
          "pc-98"
        ],
        "type": "libretro",
        "upstream": "https://github.com/AZO234/NP2kai"
      }
    },
    {
      "id": "numero",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.0",
        "cores": [
          "numero"
        ],
        "display_name": "Texas Instruments TI-83 (Numero)",
        "emulator": "Numero",
        "files": [
          {
            "description": "TI-83 Plus Silver Edition ROM dump",
            "name": "ti83se.rom",
            "note": "Checked first. Recommended for largest storage capacity.",
            "priority": 1,
            "required": false,
            "source_ref": "libnumero/libretro/libretronew.cpp:576-578",
            "system": "ti-83"
          },
          {
            "description": "TI-83 Plus ROM dump",
            "name": "ti83plus.rom",
            "note": "Checked second, used if ti83se.rom is missing.",
            "priority": 2,
            "required": false,
            "source_ref": "libnumero/libretro/libretronew.cpp:583-585",
            "system": "ti-83"
          },
          {
            "description": "TI-83 ROM dump",
            "name": "ti83.rom",
            "note": "Checked last. Original TI-83 (non-Plus).",
            "priority": 3,
            "required": false,
            "source_ref": "libnumero/libretro/libretronew.cpp:591-593",
            "system": "ti-83"
          }
        ],
        "notes": "Libretro port of Wabbitemu, a TI-83 family calculator emulator.\nSupports TI-83, TI-83 Plus and TI-83 Plus Silver Edition.\n\nA calculator ROM dump is required. The core searches sequentially in the\nsystem directory (libretronew.cpp:575-594): ti83se.rom first, then\nti83plus.rom, then ti83.rom. The first found is loaded via rom_load()\n(libretronew.cpp:608). file_present_in_system() checks existence only\nvia VFS open/close (libretronew.cpp:451-472). No hash or size validation.\n\nWithout any ROM, the core shows a blank screen listing the expected\nfilenames (libretronew.cpp:1030-1042). No HLE fallback.\n\nSupports no-content launch (libretronew.cpp:556). Content files\n(.8xp/.8xk/.8xg) are loaded on top of the running ROM via link cable\nsimulation. Auto-saves calculator state every 10 seconds\n(libretronew.cpp:1050-1063).\n\nUpstream Wabbitemu supports a wider model range (TI-73 through TI-84+CSE)\nbut the libretro wrapper only searches for TI-83 family filenames. The\nunderlying engine (calc.cpp:rom_load) auto-detects the model from the ROM\nheader.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/nbarkhina/numero",
        "source_commit": "c0b07a39782feafebcde0c8ccfa91fc92732c999",
        "systems": [
          "ti-83"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sputt/wabbitemu"
      }
    },
    {
      "id": "nxengine",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.0.0.6",
        "cores": [
          "nxengine",
          "nx"
        ],
        "display_name": "Cave Story (NXEngine)",
        "emulator": "NXEngine",
        "files": [
          {
            "category": "game_data",
            "description": "Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)",
            "md5": "38695d3d69d7a0ada8178072dad4c58b",
            "name": "Doukutsu.exe",
            "note": "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable from this binary at each launch.",
            "path": "nxengine/Doukutsu.exe",
            "required": true,
            "sha1": "bb2d0441e073da9c584f23c2ad8c7ab8aac293bf",
            "size": 1478656,
            "source_ref": "main.cpp:77-78 (opened for extraction), nxengine/libretro/libretro.cpp:258 (existence check)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)",
            "name": "data/",
            "note": "Must contain root assets (Arms.pbm, MyChar.pbm, etc.), Npc/ (36 sprite sheets), and Stage/ (333 map/script/tileset files). All files from the original freeware release.",
            "path": "nxengine/data/",
            "required": true,
            "source_ref": "nxengine/extract-auto/cachefiles.c:38-439 (filenames[] array loaded at init)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)",
            "name": "data/npc.tbl",
            "note": "Located in system/nxengine/data/. Used to validate data directory presence and to load NPC behavior attributes.",
            "path": "nxengine/data/npc.tbl",
            "required": true,
            "source_ref": "main.cpp:50 (existence check for data/ directory), ai/ai.cpp:56-59 (loaded for NPC properties)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Sprite information file (sprite positions, sizes, animation data)",
            "hle_fallback": true,
            "name": "data/sprites.sif",
            "note": "Not shipped in the freeware distribution. If missing, the core uses a compiled-in copy (sprites_sif.h).",
            "path": "nxengine/data/sprites.sif",
            "required": false,
            "source_ref": "nxengine/extract-auto/cachefiles.c:101 (in filenames[]), nxengine/extract-auto/cachefiles.c:515-521 (compiled-in fallback from sprites_sif.h)",
            "system": "cave-story"
          },
          {
            "category": "game_data",
            "description": "Tile attribute lookup table (maps tile codes to collision/behavior attributes)",
            "hle_fallback": true,
            "name": "tilekey.dat",
            "note": "Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in map.cpp:30.",
            "path": "nxengine/tilekey.dat",
            "required": false,
            "source_ref": "map.cpp:290-303 (loaded at init, hardcoded default if missing)",
            "system": "cave-story"
          }
        ],
        "notes": "NXEngine is an open-source reimplementation of the Cave Story (Doukutsu\nMonogatari) engine by Studio Pixel, authored by Caitlin Shaw. It is not\nan emulator but a source port that loads the original freeware game data.\n\nThe core requires the freeware Cave Story distribution placed in\n{system_dir}/nxengine/. When launched without content, it looks for\nDoukutsu.exe there (libretro.cpp:257-262). When launched with a .exe\ncontent file, it uses the parent directory of that file (libretro.cpp:240).\n\nAt startup (main.cpp:75-90), the core opens Doukutsu.exe and extracts:\nORG music (extractorg.c), PXT sound effects (extractpxt.c), stage tile\nattributes (extractstages.c), 18 credit BMPs + pixel.bmp (endpic/),\nand the wavetable (cachefiles.c:464-485). All kept in memory.\n\nThe data/ directory (399 files from the freeware release) is loaded into\nan in-memory cache at init (cachefiles.c:38-439, 497-540). All subsequent\nfile access goes through this cache. The core verifies data/ by checking\nfor data/npc.tbl (main.cpp:47-58).\n\nThe font is compiled-in (bitmap_font.h). The upstream standalone version\nuses font.ttf via SDL_ttf.\n\nValid content extension: .exe (libretro.cpp:112).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/nxengine-libretro",
        "source_commit": "a1c45fd4d045333f4ea523e556469b545be82b0a",
        "systems": [
          "cave-story"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Rox64/NXEngine"
      }
    },
    {
      "id": "o2em",
      "profile": {
        "core": "o2em_libretro",
        "core_classification": "community_fork",
        "core_version": "1.18",
        "cores": [
          "o2em_libretro"
        ],
        "display_name": "Magnavox - Odyssey2 / Philips Videopac+ (O2EM)",
        "emulator": "O2EM",
        "files": [
          {
            "crc32": "8016a315",
            "md5": "562d5ebf9e030a40d6fabfc2f33139fd",
            "name": "o2rom.bin",
            "note": "Odyssey2 BIOS (G7000 NTSC). Default, vpp=0.",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha1": "b2e1955d957a475de2411770452eff4ea19f4cee",
            "size": 1024,
            "source_ref": "libretro.c:1143-1147",
            "system": "odyssey2",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "a318e8d6",
            "md5": "f1071cdb0b6b10dde94d3bc8a6146387",
            "name": "c52.bin",
            "note": "Videopac G7000 European BIOS. vpp=0, auto-sets PAL.",
            "region": [
              "europe"
            ],
            "required": true,
            "sha1": "a6120aed50831c9c0d95dbdf707820f601d9452e",
            "size": 1024,
            "source_ref": "libretro.c:1149-1155",
            "system": "videopac",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "e20a9f41",
            "md5": "c500ff71236068e0dc0d0603d265ae76",
            "name": "g7400.bin",
            "note": "Videopac+ G7400 European BIOS. vpp=1.",
            "region": [
              "europe"
            ],
            "required": true,
            "sha1": "5130243429b40b01a14e1304d0394b8459a6fbae",
            "size": 1024,
            "source_ref": "libretro.c:1156-1161",
            "system": "videopac",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "crc32": "11647ca5",
            "md5": "279008e4a0db2dc5f1c048853b033828",
            "name": "jopac.bin",
            "note": "Videopac+ G7400 French BIOS (JoPac). vpp=1.",
            "region": [
              "france"
            ],
            "required": true,
            "sha1": "54b8d2c1317628de51a85fc1c424423a986775e4",
            "size": 1024,
            "source_ref": "libretro.c:1162-1167",
            "system": "videopac",
            "validation": [
              "size",
              "crc32"
            ]
          },
          {
            "category": "game_data",
            "name": "voice/",
            "note": "The Voice speech synthesis WAV samples. 9 banks (E4, E8-EF) × 128 samples.",
            "required": false,
            "source_ref": "src/voice.c:38-90, libretro.c:1130-1137"
          }
        ],
        "notes": "Libretro port of O2EM, an Odyssey2/Videopac emulator by Daniel Boris\nand André de la Rocha. Port by Arlindo M. de Oliveira.\n\nOne BIOS ROM selected via o2em_bios core option (default o2rom.bin).\nLoaded into rom_table[0] (1024 bytes), identified by CRC32.\nvpp=1 for Videopac+ variants (g7400.bin, jopac.bin).\nCore fails to load without the selected BIOS.\n\nVoice module (\"The Voice\" speech synthesis add-on) emulation via WAV\nsamples in system/voice/. 9 banks × 128 samples, named {bank}{sample}.WAV\n(e.g. E480.WAV). Compiled with HAVE_VOICE=1 on most platforms. Optional:\ncore works without samples, speech is silently skipped.\n\nBIOS loading: libretro.c load_bios() lines 145-212.\nBIOS selection: libretro_core_options.h lines 52-64.\nVoice loading: voice.c init_voice() lines 38-79, called from libretro.c:1060-1067.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-o2em",
        "source_commit": "679d6fec04963f6e70a7ec217e3d0ebb1fe472fc",
        "systems": [
          "odyssey2",
          "videopac"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/o2em/"
      }
    },
    {
      "id": "oberon",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2020-07-01",
        "cores": [
          "oberon"
        ],
        "display_name": "Oberon RISC Emulator",
        "emulator": "Oberon",
        "files": [],
        "notes": {
          "boot_process": "Bootloader embedded in ROM reads boot sector from SPI disk, loads Oberon inner core into RAM. Content is raw sector .dsk images.\n"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/oberon-risc-emu",
        "source_commit": "532b44c31190640628fea388bb593cc247814612",
        "systems": [
          "oberon"
        ],
        "type": "libretro",
        "upstream": "https://github.com/pdewacht/oberon-risc-emu"
      }
    },
    {
      "id": "onscripter",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.3",
        "cores": [
          "onscripter"
        ],
        "display_name": "ONScripter",
        "emulator": "ONScripter",
        "files": [],
        "notes": "Clone of NScripter, a Japanese visual novel engine. The libretro port\nwraps upstream ogapee/onscripter (tag 20230825) via an SDL-to-libretro\nshim.\n\nNo system files required. The .info declares no firmware. The core\nnever calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All files\n(scripts, fonts, archives, config) are loaded from the game directory\nvia archive_path (libretro.cpp:120-121, ScriptHandler.cpp:148-161).\n\ndefault.ttf, registry.txt, dll.txt are per-game assets shipped with\neach visual novel, not system-level files.\n\nExperimental core. No save state support (retro_serialize_size = 0).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/iyzsong/onscripter-libretro",
        "source_commit": "ec4ff1842d498faaa844d570becf561d088deea0",
        "systems": [
          "onscripter"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ogapee/onscripter"
      }
    },
    {
      "id": "onsyuri",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.7.4+2",
        "cores": [
          "onsyuri"
        ],
        "display_name": "ONScripter Yuri",
        "emulator": "ONScripter Yuri",
        "files": [],
        "notes": "Clone of the NScripter visual novel engine, forked from ONScripter-Jh.\nThe libretro port lives in the upstream repo (src/onsyuri_libretro/).\nNo system files required. Game scripts (0.txt, nscript.dat, etc.),\nfonts (default.ttf), and assets are loaded from the game directory.\nThe core does not use RetroArch's system directory.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/YuriSizuku/OnscripterYuri",
        "source_commit": "ec954a3475c3bf41517d0bdb84f48cd28c0f4f72",
        "systems": [
          "onscripter"
        ],
        "type": "libretro",
        "upstream": "https://github.com/YuriSizuku/OnscripterYuri"
      }
    },
    {
      "id": "openbor",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "4.0 Build 7949",
        "cores": [
          "openbor",
          "openbor4432",
          "openbor6330",
          "openbor6412",
          "openbor6510",
          "openbor7142",
          "openbor7530"
        ],
        "display_name": "OpenBOR Game Engine",
        "emulator": "openbor",
        "files": [],
        "mode": "standalone",
        "notes": "Sprite based side scrolling engine continuing Senile Team's Beats of Rage,\nbuilt for beat em up and shooter style 2D games. A game is a module: a .pak\narchive carrying its own data tree, and that archive is what the frontends\nhand over as content. ES-DE runs the .pak on macOS, the game's own AppImage,\n.exe or .lnk on Linux and Windows, and opens the engine UI on Android since\nthe package takes no file argument. Batocera runs OpenBOR<build> <rom> after\nreading a four digit build tag out of the file name in openborGenerator.py,\nwhich is why it packages several engine versions side by side. RetroDECK\nlaunches the 4.0 Linux AppImage, RetroBat runs OpenBOR.exe from a per build\nfolder.\n\npackfile holds \"bor.pak\" until argv[1] names a path that exists, and with no\nsuch argument the built in menu lists Paks/ and the player picks one\n(engine/sdl/sdlport.c:25,124-135, engine/sdl/menu.c:172-203,802).\npackfile_supported accepts any name containing .pak and skips menu.pak\n(engine/source/gamelib/packfile.c:1577-1584).\n\nEverything read for a running game comes out of that module. buffer_pakfile\ntries the real filesystem first through fopen, then the same path inside the\narchive (engine/openbor.c:921-965,969-1018), so data/models.txt,\ndata/levels.txt, data/video.txt, data/menu.txt, the scene scripts and the\nsprites and sounds under data/ resolve either from an unpacked data/ directory\nbeside the binary (engine/source/gamelib/packfile.c:781-810) or from the pak.\nFour names take precedence over their in-pak copy when they exist on disk:\ntranslation/translation.txt and translation/menu.txt over data/translation.txt\n(engine/source/gamelib/translation.c:102-106, engine/openbor.c:5975,53240),\nsaves/lifebar.txt over data/lifebar.txt (engine/openbor.c:4965-4972), and on\nAndroid Saves/<module>/touch.txt then Saves/touch.txt over data/touch.txt\n(engine/android/app/jni/openbor/video.c:210-218). Each holds text or a control\nlayout written for one module. The engine/translation.txt copied into the\nrelease folder by CMakeLists.txt:239 is a blank msgid template whose own first\nline sends it to the module data folder, and the published Windows archive for\nv7533 contains only OpenBOR.exe.\n\nStartup reads nothing. Logo, menu and log viewer artwork are PNG byte arrays\ncompiled in from engine/resources (engine/sdl/menu.c:20-27), menu text draws\nfrom the embedded hankaku face (engine/sdl/menu.c:16,228), the GLSL fragment\nshaders are string literals (engine/sdl/opengl.c:45-116), and the Android\ntouch skin is a header (engine/android/app/jni/openbor/video.c:49). No gamepad\nmapping file is read, nothing is dlopened at runtime, the Android package\nships an empty assets directory, and the SecurePAK paths compile out of every\nbuild because no build file defines SPK_SUPPORTED\n(engine/source/gamelib/packfile.c:36, engine/source/gamelib/packfile.h:9,135).\n\nFiles the engine writes rather than expects: Paks, Saves, Logs and ScreenShots\nare created at startup when missing (engine/sdl/sdlport.c:30-33,119-122),\nsettings and progress land in Saves as <module>.cfg, .sav, .hi, .scr and .inp\nalongside default.cfg (engine/source/utils.c:284-312,\nengine/openbor.c:2675-3040), and the viewer reads back Logs/OpenBorLog.txt and\nLogs/ScriptLog.txt (engine/source/utils.c:47-62, engine/sdl/menu.c:652-700).\npaks/logoff.txt is a marker whose existence alone skips the startup logo, so\nthe player creates it empty (engine/sdl/menu.c:707-716). Module script can\nopen any path it names through openfilestream\n(engine/openborscript.c:10505-10600).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/DCurrent/openbor",
        "source_commit": "0ece95d1c113c1ce86f2da826b3c25b521ee116d",
        "systems": [
          "openbor"
        ],
        "type": "standalone",
        "upstream": "https://github.com/DCurrent/openbor"
      }
    },
    {
      "id": "openlara",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v1",
        "cores": [
          "openlara"
        ],
        "display_name": "Tomb Raider (OpenLara)",
        "emulator": "OpenLara",
        "files": [],
        "notes": "Open-source reimplementation of the classic Tomb Raider engine (TR1-TR4). Accepts phd|psx|tr2|sat extensions (main.cpp:246). need_fullpath is true - the core resolves game assets relative to the content directory. retro_load_game (main.cpp:602) derives contentDir from the level file path and strips level/ if present. Game version auto-detected by probing for known level files (gameflow.h:1047-1071). Audio tracks loaded from audio/ subdirectories as .ogg/.mp3/.wav files or cdaudio.wad (gameflow.h:1272-1356). System directory used only for shader cache at {system_dir}/openlara/cache/ (main.cpp:177-197). No BIOS, firmware, or engine data files required in system directory. .info omits sat from supported_extensions (code declares it).\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/OpenLara",
        "source_commit": "8574118ddd87d47d41c1cd1d34393760b618957d",
        "systems": [
          "tomb-raider"
        ],
        "type": "libretro",
        "upstream": "https://github.com/XProger/OpenLara",
        "verification": "existence"
      }
    },
    {
      "id": "openmsx",
      "profile": {
        "core_version": "21.0",
        "cores": [
          "openmsx"
        ],
        "display_name": "MSX / ColecoVision / Spectravideo (openMSX)",
        "emulator": "openMSX",
        "files": [
          {
            "description": "NMS 8245 combined system ROM (BIOS+BASIC 0x0000-0x7FFF, Sub ROM 0x8000-0xBFFF, FDC 0xC000-0xFFFF)",
            "name": "NMS8245SystemROM1.08.bin",
            "required": true,
            "sha1": "cc57c1dcd7249ea9f8e2547244592e7d97308ed0",
            "size": 65536,
            "source_ref": "share/machines/Boosted_MSX2_EN.xml:24,65,111",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Panasonic SW-M004 FMPAC (FM-PAC) sound cartridge ROM",
            "name": "fmpac.rom",
            "required": true,
            "sha1": "fec451b9256570a0e4869355a40329c57f40705f",
            "source_ref": "share/machines/Boosted_MSX2_EN.xml:83",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Sanyo PHC-70FD2 MSX-BASIC Kun compiler ROM",
            "name": "phc-70fd2_basickun.rom",
            "required": true,
            "sha1": "22b3191d865010264001b9d896186a9818478a6b",
            "source_ref": "share/machines/Boosted_MSX2_EN.xml:89, share/machines/Boosted_MSX2+_JP.xml:167, share/machines/Boosted_MSXturboR_with_IDE.xml:79",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Yamaha YRW801 MoonSound wavetable ROM",
            "name": "yrw801.rom",
            "required": true,
            "sha1": "32760893ce06dbe3930627755ba065cc3d8ec6ca",
            "source_ref": "share/machines/Boosted_MSX2_EN.xml:186, share/machines/Boosted_MSX2+_JP.xml:120, share/machines/Boosted_MSXturboR_with_IDE.xml:203",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX MSX2+ BIOS and BASIC ROM",
            "name": "fs-a1wsx_basic-bios2p.rom",
            "required": true,
            "sha1": "f4433752d3bf876bfefb363c749d4d2e08a218b6",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:143",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX MSX-MUSIC (OPLL) ROM",
            "name": "fs-a1wsx_fmbasic.rom",
            "required": true,
            "sha1": "aad42ba4289b33d8eed225d42cea930b7fc5c228",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:155",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX MSX2+ Sub ROM",
            "name": "fs-a1wsx_msx2psub.rom",
            "required": true,
            "sha1": "fe0254cbfc11405b79e7c86c7769bd6322b04995",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:218",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX Kanji Driver with BASIC ROM",
            "name": "fs-a1wsx_kanjibasic.rom",
            "required": true,
            "sha1": "dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:225",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX FDC (TC8566AF) disk controller ROM",
            "name": "fs-a1wsx_disk.rom",
            "required": true,
            "sha1": "7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:237",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1WSX Panasonic firmware ROM",
            "name": "fs-a1wsx_firmware.rom",
            "required": true,
            "sha1": "3330d9b6b76e3c4ccb7cf252496ed15d08b95d3f",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:251",
            "validation": [
              "sha1"
            ]
          },
          {
            "aliases": [
              "fs-a1gt_kanjifont.rom"
            ],
            "description": "Kanji font ROM (shared by FS-A1WSX and FS-A1GT machines)",
            "name": "fs-a1wsx_kanjifont.rom",
            "required": true,
            "sha1": "5aff2d9b6efc723bc395b0f96f0adfa83cc54a49",
            "source_ref": "share/machines/Boosted_MSX2+_JP.xml:28, share/machines/Boosted_MSXturboR_with_IDE.xml:216",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "FS-A1GT turboR combined firmware (512KB, contains BIOS, Sub ROM, Kanji, FDC, MSX-MUSIC, Opening ROM)",
            "name": "fs-a1gt_firmware.rom",
            "required": true,
            "sha1": [
              "e779c338eb91a7dea3ff75f3fde76b8af22c4a3a",
              "5fa3aa79aeba2c0441f349e78e9a16d9d64422ea"
            ],
            "source_ref": "share/machines/Boosted_MSXturboR_with_IDE.xml:23",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Sunrise IDE 2.50 interface ROM",
            "name": "ide250.dat",
            "required": true,
            "sha1": "93e41c7d479bc90c1d1f6d081af20fd9924b8ada",
            "source_ref": "share/machines/Boosted_MSXturboR_with_IDE.xml:49",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "ColecoVision system BIOS ROM",
            "name": "COLECO.ROM",
            "required": true,
            "sha1": "45bedc4cbdeac66c7df59e9e599195c778d86a92",
            "source_ref": "share/machines/ColecoVision_SGM.xml:57",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "SVI-328 BASIC v1.11 ROM",
            "name": "svi-3x8_v111.rom",
            "required": true,
            "sha1": "10349ce675f6d6d47f0976e39cb7188eba858d89",
            "source_ref": "share/machines/Spectravideo_SVI-328.xml:52",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Pioneer PX-7 MSX1 BIOS and BASIC ROM",
            "name": "px-7_basic-bios1.rom",
            "required": true,
            "sha1": "302afb5d8be26c758309ca3df611ae69cced2821",
            "source_ref": "share/machines/Pioneer_PX-7.xml:67",
            "validation": [
              "sha1"
            ]
          },
          {
            "description": "Pioneer PX-7 LaserDisc PBASIC controller ROM",
            "name": "px-7_pbasic.rom",
            "required": true,
            "sha1": "665d805f96616e1037f1823050657b7849899283",
            "source_ref": "share/machines/Pioneer_PX-7.xml:82",
            "validation": [
              "sha1"
            ]
          }
        ],
        "notes": "Standalone MSX emulator supporting MSX1 through turboR, ColecoVision,\nSpectravideo, and Pioneer LaserDisc hardware. Uses XML machine definitions\n(share/machines/) that describe complete hardware configurations and\nreference system ROMs by filename and SHA1 hash.\n\nROM resolution via FilePool (src/file/FilePool.cc, FilePoolCore.cc):\nsearches configured directories for files matching SHA1 checksums.\nFilenames are secondary hints; SHA1 is the primary lookup key.\nFiles may be gzipped or individually zipped.\n\nBatocera configgen (openmsxGenerator.py) configures filepool paths\n(/userdata/bios/Machines position 1, /userdata/bios/openmsx position 2)\nand selects machines per system type:\n  msx1, msx2 -> Boosted_MSX2_EN (enhanced Philips NMS 8245)\n  msx2+      -> Boosted_MSX2+_JP (enhanced Panasonic FS-A1WSX)\n  msxturbor  -> Boosted_MSXturboR_with_IDE (enhanced Panasonic FS-A1GT)\n  colecovision -> ColecoVision_SGM\n  spectravideo -> Spectravideo_SVI-328\n  laserdisc (.ogv) -> Pioneer_PX-7\n\nC-BIOS (open source MSX BIOS replacement) is shipped with openMSX in\nContrib/cbios/ and supports cartridge-only games. Not used by Batocera.\n\n237 machine definitions exist in total. Each machine has its own ROM\nrequirements. Only ROMs for Batocera-selected machines are listed here.\nUsers selecting other machines via openMSX GUI need additional ROMs.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/openMSX/openMSX",
        "source_commit": "632d46cc00015bc37be6cbb63cacb70e90434094",
        "systems": [
          "msx",
          "msx1",
          "msx2",
          "msx2+",
          "msxturbor",
          "colecovision",
          "spectravideo"
        ],
        "type": "standalone",
        "upstream": "https://github.com/openMSX/openMSX"
      }
    },
    {
      "id": "opentyrian",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "1.0.0.6",
        "cores": [
          "opentyrian",
          "tyrian"
        ],
        "display_name": "Tyrian (OpenTyrian)",
        "emulator": "OpenTyrian",
        "files": [
          {
            "category": "game_data",
            "description": "Main shape tables (12 sprite banks: fonts, interface, options, game sprites)",
            "name": "tyrian.shp",
            "required": true,
            "source_ref": "src/sprite.c:669-722 (JE_loadMainShapeTables)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Color palette data (all palettes used by the game)",
            "name": "palette.dat",
            "required": true,
            "source_ref": "src/palette.c:45 (JE_loadPals)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Help and item data (weapons, ships, shields, enemies, help text)",
            "name": "tyrian.hdt",
            "required": true,
            "source_ref": "src/episodes.c:60 (JE_loadItemDat), src/helptext.c:184 (JE_loadHelpText)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Picture data (menu backgrounds, cutscene images)",
            "name": "tyrian.pic",
            "required": true,
            "source_ref": "src/picload.c:32 (JE_loadPic)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Credits text (encrypted pascal strings)",
            "name": "tyrian.cdt",
            "required": true,
            "source_ref": "src/mainint.c:2002 (JE_drawCredits)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Sound effects",
            "name": "tyrian.snd",
            "required": true,
            "source_ref": "src/nortsong.c:112, src/opentyr.c:333 (JE_loadSndFile)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Voice samples",
            "name": "voices.snd",
            "required": true,
            "source_ref": "src/nortsong.c:134, src/opentyr.c:333 (JE_loadSndFile)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Music data (all game tracks)",
            "name": "music.mus",
            "required": true,
            "source_ref": "src/loudness.c:196 (load_music)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 1 level data (also used as data directory detection marker)",
            "name": "tyrian1.lvl",
            "required": true,
            "source_ref": "src/file.c:51 (data_dir probe), src/episodes.c:274 (JE_scanForEpisodes)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 1 level definitions",
            "name": "levels1.dat",
            "required": true,
            "source_ref": "src/episodes.c:263 (JE_initEpisode), src/tyrian2.c:2434",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 1 datacube text (in-game story lore)",
            "name": "cubetxt1.dat",
            "required": true,
            "source_ref": "src/episodes.c:262 (JE_initEpisode), src/game_menu.c:1723",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 2 level data",
            "name": "tyrian2.lvl",
            "required": false,
            "source_ref": "src/episodes.c:274",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 2 level definitions",
            "name": "levels2.dat",
            "required": false,
            "source_ref": "src/episodes.c:263",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 2 datacube text",
            "name": "cubetxt2.dat",
            "required": false,
            "source_ref": "src/episodes.c:262",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 3 level data",
            "name": "tyrian3.lvl",
            "required": false,
            "source_ref": "src/episodes.c:274",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 3 level definitions",
            "name": "levels3.dat",
            "required": false,
            "source_ref": "src/episodes.c:263",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 3 datacube text",
            "name": "cubetxt3.dat",
            "required": false,
            "source_ref": "src/episodes.c:262",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 4 level data",
            "name": "tyrian4.lvl",
            "required": false,
            "source_ref": "src/episodes.c:274",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 4 level definitions",
            "name": "levels4.dat",
            "required": false,
            "source_ref": "src/episodes.c:263",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 4 datacube text",
            "name": "cubetxt4.dat",
            "required": false,
            "source_ref": "src/episodes.c:262",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 5 level data",
            "name": "tyrian5.lvl",
            "required": false,
            "source_ref": "src/episodes.c:274",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 5 level definitions",
            "name": "levels5.dat",
            "required": false,
            "source_ref": "src/episodes.c:263",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Episode 5 datacube text",
            "name": "cubetxt5.dat",
            "required": false,
            "source_ref": "src/episodes.c:262",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "name": "shapes).dat",
            "required": true,
            "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "name": "shapesw.dat",
            "required": true,
            "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "name": "shapesx.dat",
            "required": true,
            "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "name": "shapesy.dat",
            "required": true,
            "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "name": "shapesz.dat",
            "required": true,
            "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Compressed sprites (arrows, mouse cursor)",
            "name": "newsh1.shp",
            "required": false,
            "source_ref": "src/mainint.c:493, src/mainint.c:884, src/mainint.c:1462 (JE_loadCompShapes '1')",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Compressed sprites (explosions)",
            "name": "newsh6.shp",
            "required": false,
            "source_ref": "src/tyrian2.c:771 (JE_loadCompShapes '6')",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Compressed sprites (destruct mode)",
            "name": "newsh~.shp",
            "required": false,
            "source_ref": "src/destruct.c:569 (JE_loadCompShapes '~')",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Christmas mode shape tables (replaces tyrian.shp at Xmas)",
            "name": "tyrianc.shp",
            "required": false,
            "source_ref": "src/opentyr.c:301-309",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Christmas mode voice samples (replaces voices.snd at Xmas)",
            "name": "voicesc.snd",
            "required": false,
            "source_ref": "src/opentyr.c:301, src/opentyr.c:333",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Ending animation sequence",
            "name": "tyrend.anm",
            "required": false,
            "source_ref": "src/tyrian2.c:2473 (JE_playAnim)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Additional ship graphics (PCX image)",
            "name": "tshp2.pcx",
            "required": false,
            "source_ref": "src/tyrian2.c:2757, src/pcxload.c:25-29",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Ending sequence character sprites",
            "name": "estsc.shp",
            "required": false,
            "source_ref": "src/mainint.c:1995 (load_sprites_file EXTRA_SHAPES)",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Demo replay file 1",
            "name": "demo.1",
            "required": false,
            "source_ref": "src/mainint.c:1781-1786",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Demo replay file 2",
            "name": "demo.2",
            "required": false,
            "source_ref": "src/mainint.c:1781-1786",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Demo replay file 3",
            "name": "demo.3",
            "required": false,
            "source_ref": "src/mainint.c:1781-1786",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Demo replay file 4",
            "name": "demo.4",
            "required": false,
            "source_ref": "src/mainint.c:1781-1786",
            "system": "tyrian"
          },
          {
            "category": "game_data",
            "description": "Demo replay file 5",
            "name": "demo.5",
            "required": false,
            "source_ref": "src/mainint.c:1781-1786",
            "system": "tyrian"
          }
        ],
        "notes": "OpenTyrian is a source port of the DOS vertical scrolling shooter Tyrian,\nported to libretro. It loads the Tyrian 2.1 freeware game data directly.\nTyrian 1.x, 2.0, and Tyrian 2000 data files are NOT compatible.\n\nThe core's .info file sets supports_no_game = true. The core locates the\ndata directory by probing for tyrian1.lvl in several paths (file.c:33-58):\n  1. custom_data_dir (set via --data= CLI argument, params.c:120)\n  2. TYRIAN_DIR (compile-time constant, Makefile:5-8)\n  3. \"data\" (relative subdirectory)\n  4. \".\" (current working directory)\nThe first path containing tyrian1.lvl wins.\n\nOn startup (opentyr.c:270-388), the core:\n  - Scans for episodes by checking tyrian1.lvl through tyrian5.lvl\n    (episodes.c:270-277)\n  - Loads palette data from palette.dat (palette.c:45)\n  - Loads main shape tables from tyrian.shp (sprite.c:669-722, 12 sprite\n    banks packed in one file: fonts, interface, option sprites, game sprites,\n    weapon sprites, etc.)\n  - Loads sound effects from tyrian.snd and voice samples from voices.snd\n    (nortsong.c:112-134, opentyr.c:333)\n  - Loads music from music.mus (loudness.c:196)\n  - Loads help/item data from tyrian.hdt (helptext.c:184, episodes.c:60)\n  - Loads picture data from tyrian.pic (picload.c:32)\n  - Loads credits from tyrian.cdt (mainint.c:2002)\n\nEach episode loads additional files dynamically (episodes.c:261-263):\n  - tyrianN.lvl (level data, N=1-5)\n  - levelsN.dat (episode level definitions)\n  - cubetxtN.dat (datacube text for story mode)\n\nThe game engine also loads shape files on demand:\n  - shapesX.dat where X is a character read from the level file (5 used: ), W, X, Y, Z)\n    (lvlmast.c:23-27, tyrian2.c:3079). Characters used:\n    2,4,7,8,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,5,#,V,0,@,3,^,9\n  - newshX.shp loaded via JE_loadCompShapes (sprite.c:469-481) using the\n    same character set plus '~' for destruct mode (destruct.c:569) and\n    '1' for arrow/mouse cursor sprites (mainint.c:493,884,1462) and\n    '6' for explosion sprites (tyrian2.c:771)\n\nAdditional optional files:\n  - tyrianc.shp and voicesc.snd for Christmas mode (opentyr.c:301-309)\n  - tyrend.anm for ending animation (tyrian2.c:2473)\n  - tshp2.pcx loaded during gameplay (tyrian2.c:2757, pcxload.c:25)\n  - estsc.shp for ending sequence sprites (mainint.c:1995)\n  - demo.1 through demo.5 for demo playback (mainint.c:1781-1786)\n\nAll filenames must be lowercase on case-sensitive filesystems. The repo\nincludes lower-script.sh for batch renaming.\n\nThe Tyrian 2.1 freeware data is available at:\nhttps://camanis.net/tyrian/tyrian21.zip\n\nNo separate BIOS or firmware is needed. The freeware game data set is the\nsole system requirement.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/trapexit/libretro-opentyrian",
        "source_commit": "3e9df7a6bc486190ad5085586d0c4e9cb1baf14c",
        "systems": [
          "tyrian"
        ],
        "type": "libretro",
        "upstream": "https://github.com/opentyrian/opentyrian",
        "verification": "existence"
      }
    },
    {
      "id": "opera",
      "profile": {
        "core": "opera_libretro",
        "core_classification": "community_fork",
        "core_version": "1.0.0",
        "cores": [
          "opera"
        ],
        "display_name": "The 3DO Company - 3DO (Opera)",
        "emulator": "Opera (4DO)",
        "files": [
          {
            "md5": "f47264dd47fe30f73ab3c010015c155b",
            "name": "panafz1.bin",
            "note": "Panasonic FZ-1 (U). Version unknown, dated 1993-08-03.",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha1": "34bf189111295f74d7b7dfc1f304d98b8d36325a",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:6-17",
            "system": "3do"
          },
          {
            "md5": "a496cfdded3da562759be3561317b605",
            "name": "panafz1j.bin",
            "note": "Panasonic FZ-1 (J). Version 1.54, dated 1994-01-22.",
            "region": [
              "japan"
            ],
            "required": true,
            "sha1": "ec7ec62d60ec0459a14ed56ebc66761ef3c80efc",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:19-30",
            "system": "3do"
          },
          {
            "md5": "f6c71de7470d16abe4f71b1444883dc8",
            "name": "panafz1j-norsa.bin",
            "note": "Panasonic FZ-1 (J) with RSA check removed. Version 1.54.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "a417587ae3b0b8ef00c830920c21af8bee88e419",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:32-43",
            "system": "3do"
          },
          {
            "md5": "51f2f43ae2f3508a14d9f56597e2d3ce",
            "name": "panafz10.bin",
            "note": "Panasonic FZ-10 (U). Version 1.59.1.1, dated 1994-08-25.",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha1": "3c912300775d1ad730dc35757e279c274c0acaad",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:45-56",
            "system": "3do"
          },
          {
            "md5": "1477bda80dc33731a65468c1f5bcbee9",
            "name": "panafz10-norsa.bin",
            "note": "Panasonic FZ-10 (U) with RSA check removed. Version 1.59.1.1.",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha1": "f05e642322c03694f06a809c0b90fc27ac73c002",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:58-69",
            "system": "3do"
          },
          {
            "md5": "a48e6746bd7edec0f40cff078f0bb19f",
            "name": "panafz10e-anvil.bin",
            "note": "Panasonic FZ-10 (E) ANVIL. Version 1.66.1.1, dated 1994-09-22.",
            "region": [
              "europe"
            ],
            "required": true,
            "sha1": "a900371f0cdcdc03f79557f11d406fd71251a5fd",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:71-82",
            "system": "3do"
          },
          {
            "md5": "cf11bbb5a16d7af9875cca9de9a15e09",
            "name": "panafz10e-anvil-norsa.bin",
            "note": "Panasonic FZ-10 (E) ANVIL with RSA check removed. Version 1.66.1.1.",
            "region": [
              "europe"
            ],
            "required": false,
            "sha1": "2765c7b4557cc838b32567d2428d088980295159",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:84-95",
            "system": "3do"
          },
          {
            "md5": "8639fd5e549bd6238cfee79e3e749114",
            "name": "goldstar.bin",
            "note": "Goldstar GDO-101M. Version 1.59, dated 1994-05-10.",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha1": "c4a2e5336f77fb5f743de1eea2cda43675ee2de7",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:97-108",
            "system": "3do"
          },
          {
            "md5": "35fa1a1ebaaeea286dc5cd15487c13ea",
            "name": "sanyotry.bin",
            "note": "Sanyo Try IMP-21J. Version 1.59, dated 1994-05-10.",
            "region": [
              "japan"
            ],
            "required": true,
            "sha1": "b01c53da256dde43ffec4ad3fc3adfa8d635e943",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:110-121",
            "system": "3do"
          },
          {
            "md5": "8970fc987ab89a7f64da9f8a8c4333ff",
            "name": "3do_arcade_saot.bin",
            "note": "3DO Arcade SAOT board BIOS. Half the size of consumer BIOS ROMs.",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha1": "520d3d1b5897800af47f92efd2444a26b7a7dead",
            "size": 524288,
            "source_ref": "libopera/opera_bios.c:123-134",
            "system": "3do"
          },
          {
            "md5": "b8dc97f778a6245c58e064b0312e8281",
            "name": "panafz1-kanji.bin",
            "note": "Kanji font ROM for FZ-1. Version 16.4, dated 1993-08-03. Optional, Japanese text only.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "acd39a8fee1b9d2950d5ab447846c11fb31af63e",
            "size": 933636,
            "source_ref": "libopera/opera_bios.c:141-152",
            "system": "3do"
          },
          {
            "md5": "c23fb5d5e6bb1c240d02cf968972be37",
            "name": "panafz1j-kanji.bin",
            "note": "Kanji font ROM for FZ-1J. Version 16.4, dated 1993-08-03. Optional, Japanese text only.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "884515605ee243577ab20767ef8c1a7368e4e407",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:154-165",
            "system": "3do"
          },
          {
            "md5": "428577250f43edc902ea239c50d2240d",
            "name": "panafz10ja-anvil-kanji.bin",
            "note": "Kanji font ROM for FZ-10JA ANVIL. Version 16.4. Optional, Japanese text only.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "2e857b957803d0331fd229328df01f3ffab69eee",
            "size": 1048576,
            "source_ref": "libopera/opera_bios.c:167-178",
            "system": "3do"
          }
        ],
        "notes": "Opera is the libretro port of the 4DO/FreeDO 3DO Interactive Multiplayer emulator.\nThe core requires exactly one system BIOS ROM (rom1) selected via the opera_bios\ncore option. BIOS files are loaded from the system directory with\nread_file_from_system_directory() and byteswapped on little-endian hosts.\nThe core will not start without a valid BIOS ROM.\n\nThe user selects which BIOS to use from the core option dropdown, which only\nlists BIOS files physically present in the system directory. Any single BIOS\nfrom the list below is sufficient to run games from its region.\n\nKanji font ROMs (rom2) are optional and only needed for Japanese text rendering.\nThey are loaded via opera_lr_opts_set_font() and selected via opera_font core option.\n\nAll BIOS files are exactly 1 MB (1048576 bytes) except 3do_arcade_saot.bin (512 KB)\nand panafz1-kanji.bin (933636 bytes).\n\nBIOS definitions: libopera/opera_bios.c BIOSES[] lines 3-136.\nBIOS loading: opera_lr_opts.c opera_lr_opts_set_bios() lines 239-270.\nFont loading: opera_lr_opts.c opera_lr_opts_get_font() lines 274-293,\nopera_lr_opts_set_font() lines 297-328.\nCore option: libretro_core_options.c opera_bios / opera_font.\n",
        "platform_details": {
          "3do": {
            "bios_selection": "core option opera_bios, user picks from detected files",
            "byteswap": "rom1 is byteswapped on little-endian (opera_mem_rom1_byteswap32_if_le)",
            "font_selection": "core option opera_font, optional",
            "hle_available": false,
            "rom1_arcade_size": 524288,
            "rom1_size": 1048576,
            "rom2_max_size": 1048576,
            "source_ref": "opera_lr_opts.c:239-270, libopera/opera_bios.c:3-180"
          }
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/opera-libretro",
        "source_commit": "636a8dd6340bce7073168ddefd29841fc5e2d213",
        "systems": [
          "3do"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/freedo/"
      }
    },
    {
      "id": "oricutron",
      "profile": {
        "analysis": {
          "generated_files": {
            "note": "Produced by the emulator, none is user-supplied",
            "written_only": [
              "printer_out.txt",
              "AVI captures",
              "snapshots",
              "tape captures",
              "debugger log and memory dumps"
            ]
          },
          "gui_images": {
            "conditional_entries": {
              "note": "gfx_oric1kbd.bmp sits behind WWW_NO_ORIC1 and gfx_pravetzkbd.bmp behind WWW_NO_PRAVETZ (gui.c:112-118, gui.h:114-120), both of which only cut down the emscripten build. A native build carries all fifteen.\n"
            },
            "fatal": true,
            "files": [
              "statusbar.bmp",
              "disk_ejected.bmp",
              "disk_idle.bmp",
              "disk_active.bmp",
              "disk_modified.bmp",
              "disk_modactive.bmp",
              "tape_ejected.bmp",
              "tape_pause.bmp",
              "tape_play.bmp",
              "tape_stop.bmp",
              "tape_record.bmp",
              "avirec.bmp",
              "gfx_oric1kbd.bmp",
              "gfx_atmoskbd.bmp",
              "gfx_pravetzkbd.bmp"
            ],
            "lookup": "program directory + IMAGEPREFIX, which is images/ everywhere except AmigaOS and the emscripten build (system.h:38-68)",
            "non_fatal": [
              {
                "filename": "winicon.bmp",
                "note": "Read with SDL_LoadBMP and passed to SDL_COMPAT_WM_SetIcon, which takes a null surface.",
                "source_ref": "gui.c:2306-2307"
              }
            ],
            "note": "init_gui returns SDL_FALSE on the first image it cannot read and the emulator exits (main.c:1416-1420). The set ships in the source tree and in the binary releases, and packagers install it beside the binary: the RetroDECK recipe copies the whole images directory (RetroDECK/components archive_later/oricutron/component_recipe.json) and the ES-DE guide has Linux users take images and roms out of the Windows archive (USERGUIDE.md:3377-3391).\n",
            "source_ref": "gui.c:100-117 (gimgs table), gui.c:425-492 (gimg_load), gui.c:2464-2466 (init_gui)",
            "unused": [
              {
                "filename": "status_bar.bmp",
                "reason": "the gimgs table names statusbar.bmp; no code path reads this second file"
              }
            ],
            "validation": "uncompressed 24-bit BMP, one plane, at the exact width and height declared in the table"
          },
          "rom_sidecars": {
            "note": "Both sidecars are keyed on the ROM basename from the config, so renaming or relocating a ROM moves them with it.\n",
            "patches": {
              "note": "Read for the machine ROMs only, never for the disk controller ROMs. Carries the keyboard layout, the CLOAD/CSAVE filename decoding addresses, the tape turbo hook addresses and any number of literal byte patches. An absent file returns silently and leaves pch_tt_available false (machine.c:1810-1815), so tape turbo stays off and tapes load at real speed (tape.c:243, 1322-1462).\n",
              "pattern": "<rom basename>.pch",
              "referenced_but_not_shipped": [
                "teleass.pch",
                "hyperbas.pch"
              ],
              "shipped": [
                "basic10.pch",
                "basic11b.pch",
                "pravetzt.pch",
                "telmon24.pch"
              ],
              "source_ref": "machine.c:1726-1740 (load_patches), machine.c:1933,1970,2007,2033,2083 (call sites)"
            },
            "symbols": {
              "note": "Read for all ten ROMs right after the ROM itself, with verbose off, so an absent file is silent. Fills the debugger symbol tables and nothing else. Compiled out under WWW_NO_MONITOR.\n",
              "pattern": "<rom basename>.sym",
              "referenced_but_not_shipped": [
                "hyperbas.sym"
              ],
              "shipped": [
                "basic10.sym",
                "basic11b.sym",
                "pravetzt.sym",
                "teleass.sym",
                "telmon24.sym",
                "microdis.sym",
                "jasmin.sym",
                "bd500.sym",
                "8dos2.sym"
              ],
              "source_ref": "machine.c:1129-1133 (load_rom), monitor.c:2676-2691 (mon_new_symbols)"
            },
            "unconfigured_basenames": {
              "files": [
                {
                  "filename": "Bas122uk.pch",
                  "implies": "Oric BASIC 1.22 UK, as an atmosrom value"
                },
                {
                  "filename": "Bas122fr.pch",
                  "implies": "Oric BASIC 1.22 French, as an atmosrom value"
                },
                {
                  "filename": "Bas122de.pch",
                  "implies": "Oric BASIC 1.22 German, as an atmosrom value"
                },
                {
                  "filename": "pravetzt-1.0.pch",
                  "implies": "Pravetz BASIC revision 1.0, as a pravetzrom value"
                },
                {
                  "filename": "pravetzt-1.0.sym",
                  "implies": "Pravetz BASIC revision 1.0, as a pravetzrom value"
                },
                {
                  "filename": "8dos.sym",
                  "implies": "the earlier Pravetz 8-DOS boot PROM, offered as pravetz8drom in oricutron.cfg:44"
                },
                {
                  "filename": "cumana.sym",
                  "implies": "a Cumana controller ROM; its symbols run from $F800, the window jasminrom feeds"
                },
                {
                  "filename": "sedoric.sym",
                  "implies": "a Sedoric DOS ROM; its symbols name the Microdisc FDC registers at $310-$318"
                }
              ],
              "note": "These sidecars ship for ROM basenames no default config names. They take effect only once a config key points at that basename, and each one implies a ROM dump Oricutron can run.\n"
            }
          },
          "unused_resources": [
            {
              "filename": "empty_orix.rom",
              "reason": "no reference anywhere in the tree; not named by any config default nor by twilighte.cfg"
            },
            {
              "filename": "orixbank1.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank2.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank3.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank4.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank5.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank6.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            },
            {
              "filename": "orixbank7.rom",
              "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
            }
          ],
          "user_supplied_paths": {
            "entries": [
              {
                "source_ref": "main.c:1361-1504, oricutron.cfg:63-86",
                "what": "disk, tape and snapshot images"
              },
              {
                "source_ref": "main.c:1533-1545",
                "what": "debugger symbol file, -s or --symbols"
              },
              {
                "source_ref": "main.c:1547-1574",
                "what": "breakpoint list, -r or --breakpoint with a leading colon"
              },
              {
                "source_ref": "main.c:665 (config key), main.c:2188, keyboard.c:587-598, oricutron.cfg:220",
                "what": "keyboard mapping, autoload_keyboard_mapping"
              },
              {
                "source_ref": "plugins/ch376/ch376.c:1186, ReadMe.txt:512-514",
                "what": "CH376 sdcard and usbdrive trees, telestrat mode"
              }
            ],
            "note": "Named on the command line or in the config, with no fixed filename"
          }
        },
        "core_classification": "other",
        "core_version": "1.2.0",
        "cores": [
          "oricutron"
        ],
        "display_name": "Tangerine - Oric (Oricutron)",
        "emulator": "Oricutron",
        "files": [
          {
            "description": "Oric Atmos BASIC 1.1b ROM",
            "max_size": 16384,
            "name": "basic11b.rom",
            "note": "Atmos is the machine oricutron.cfg selects, so this is the ROM a stock configuration needs. Also named by twilbankrom06 in the Twilighte board config (plugins/twilighte_board/twilighte.cfg:3).\n",
            "required": true,
            "source_ref": "gui.c:2283 (default roms/basic11b), main.c:553 (atmosrom), machine.c:2006-2007 (MACH_ATMOS)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Oric-1 BASIC 1.0 ROM",
            "max_size": 16384,
            "name": "basic10.rom",
            "note": "Serves both the 48K Oric-1 and the 16K Oric-1, selected with -m oric1 or -m o16k.",
            "required": true,
            "source_ref": "gui.c:2284 (default roms/basic10), main.c:554 (oric1rom), machine.c:1932-1933 (MACH_ORIC1_16K), machine.c:1969-1970 (MACH_ORIC1)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Pravetz 8D BASIC ROM",
            "max_size": 16384,
            "name": "pravetzt.rom",
            "note": "Selected with -m pravetz. roms/pravetzt-1.0.pch and .sym ship for an earlier revision of this ROM.",
            "required": true,
            "source_ref": "gui.c:2288 (default roms/pravetzt), main.c:558 (pravetzrom), machine.c:2082-2083 (MACH_PRAVETZ)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Telestrat TELEASS ROM, bank 5",
            "max_size": 16384,
            "name": "teleass.rom",
            "required": true,
            "source_ref": "gui.c:2295 (default roms/teleass), main.c:588-589 (telebank5), machine.c:2029-2033 (MACH_TELESTRAT)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Telestrat HYPER BASIC ROM, bank 6",
            "max_size": 16384,
            "name": "hyperbas.rom",
            "required": true,
            "source_ref": "gui.c:2296 (default roms/hyperbas), main.c:588-589 (telebank6), machine.c:2029-2033 (MACH_TELESTRAT)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Telestrat TELEMON 2.4 ROM, bank 7",
            "max_size": 16384,
            "name": "telmon24.rom",
            "note": "Bank 7 is the bank mapped at reset (machine.c:2041-2043).",
            "required": true,
            "source_ref": "gui.c:2297 (default roms/telmon24), main.c:588-589 (telebank7), machine.c:2029-2033 (MACH_TELESTRAT)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Microdisc disk controller ROM",
            "min_size": 8192,
            "name": "microdis.rom",
            "note": "Conditional: needed for the Microdisc controller, which is the drive type a disk image falls back to when none is given (main.c:1409-1410, 1488-1489). Loaded whatever the machine and not fatal, and setup_for_microdisc raises romdis, so an absent file leaves the $E000 overlay reading zeroes.\n",
            "required": false,
            "source_ref": "gui.c:2285 (default roms/microdis), main.c:555 (mdiscrom), machine.c:1251, machine.c:904-911 (mapped at $E000)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "ByteDrive BD-500 disk controller ROM",
            "min_size": 8192,
            "name": "bd500.rom",
            "note": "Conditional: needed for the BD-500 controller, selected with -k bd500 or by autodetecting a BD-500 image (main.c:1478-1481). Same non-fatal load and same zeroed overlay as the Microdisc ROM. The rom16 and dos70 config keys change how ROMDIS disables the chips (oricutron.cfg:98-106).\n",
            "required": false,
            "source_ref": "gui.c:2286 (default roms/bd500), main.c:556 (bd500rom), machine.c:1252, machine.c:937-944 (mapped at $E000)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Jasmin disk controller ROM",
            "min_size": 2048,
            "name": "jasmin.rom",
            "note": "Conditional: needed for the Jasmin controller, selected with -k jasmin or by autodetecting a Jasmin image (main.c:1468-1471). setup_for_jasmin leaves romdis clear, so the machine still boots from its BASIC ROM.\n",
            "required": false,
            "source_ref": "gui.c:2287 (default roms/jasmin), main.c:557 (jasminrom), machine.c:1253, machine.c:836-844 (mapped at $F800)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Pravetz 8D floppy controller boot PROM",
            "min_size": 512,
            "name": "8dos2.rom",
            "note": "Conditional: needed for the Pravetz 8D drive. The only disk ROM whose load flag is read back, so the Pravetz machine boots without it and only the drive is lost. oricutron.cfg:44-45 gives roms/8dos as the other value for this key, and roms/8dos.sym ships for it.\n",
            "required": false,
            "source_ref": "gui.c:2289 (default roms/8dos2), main.c:559 (pravetz8drom), machine.c:1254, machine.c:1053-1058 (mapped at $320-$3FF)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Orix kernel, Twilighte board ROM bank 7",
            "max_size": 16384,
            "name": "kernel.rom",
            "note": "Loaded only when twilighte_board is on (main.c:660). A configured bank file that cannot be read makes twilighte_oric_init return NULL. ReadMe.txt:506-519 records the copy in the tree as Orix v2022.1 and points at repo.orix.oric.org for later builds.\n",
            "required": false,
            "source_ref": "plugins/twilighte_board/twilighte.cfg:2 (twilbankrom07), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Orix shell, Twilighte board ROM bank 5",
            "max_size": 16384,
            "name": "shell.rom",
            "note": "Loaded only when twilighte_board is on (main.c:660). ReadMe.txt:506 names kernel.rom in bank 7 and shell.rom in bank 5 as the minimum configuration for the board to start.\n",
            "required": false,
            "source_ref": "plugins/twilighte_board/twilighte.cfg:4 (twilbankrom05), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Oric-1, Oric-1 16K, Oric Atmos, Telestrat and Pravetz 8D emulator by Peter\nGordon. Recalbox packages it for its oricatmos system, ES-DE offers it for\noric alongside MAME and starts it with the working directory set to the\nemulator directory.\n\nROM names are configured without the extension: load_rom appends \".rom\"\n(machine.c:1089-1093). The defaults are set in preinit_gui (gui.c:2283-2297)\nbehind ROMPREFIX, which is \"roms/\" everywhere except AmigaOS\n(\"PROGDIR:roms/\") and the emscripten build (\"assets/roms/\") (system.h:38-68).\nA path read from oricutron.cfg goes through read_config_path\n(main.c:341-347), which prepends the program directory resolved from argv[0]\n(main.c:196-236), so a relative path resolves against the directory holding\nthe binary rather than the working directory.\n\nThe machine ROM is loaded by init_machine for the selected machine type and\na failure returns SDL_FALSE, after which the emulator exits\n(main.c:1442-1446). The four disk controller ROMs are loaded once at startup\nby load_diskroms (main.c:1407, machine.c:1249-1255) whatever the machine and\nthe drive setting; a failure only clears the matching flag and startup\ncontinues. Of those flags only pravetzrom_valid is read afterwards\n(machine.c:1055): the Microdisc, BD-500 and Jasmin buffers are mapped into\nthe CPU address space whether or not the file was read, so a missing file\nleaves the selected controller running on zeroed memory.\n\nSize is the only property the code checks. A machine ROM is rejected above\n16384 bytes and is loaded right-aligned in its bank, so a shorter file is\naccepted (machine.c:1101-1118). A disk controller ROM is read as one\nfixed-length block, which fails when the file is shorter than that length\nand ignores anything past it (machine.c:1120-1126). No hash is computed\nanywhere in the tree.\n\nTelestrat banks 0 to 4 hold RAM unless the config names a file for them\n(machine.c:2029-2038). The Twilighte board is off by default and is switched\non with twilighte_board in oricutron.cfg (main.c:660). Its bank config is\nopened as a bare relative path (oric_twilighte_board_plugin.c:132) and the\nbank filenames in it are read with read_config_string rather than\nread_config_path (oric_twilighte_board_plugin.c:174,182), so both resolve\nagainst the working directory and not the program directory.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/pete-gordon/oricutron",
        "source_commit": "002279fce9fa756d1d63cdc40ae97939eb7de7ed",
        "systems": [
          "oric",
          "oricatmos"
        ],
        "type": "standalone",
        "upstream": "https://www.petergordon.org.uk/oricutron/"
      }
    },
    {
      "id": "panda3ds",
      "profile": {
        "core_classification": "official_port",
        "core_name": "panda3ds_libretro",
        "core_version": "Git",
        "cores": [
          "panda3ds"
        ],
        "display_name": "Nintendo - 3DS (Panda3DS)",
        "emulator": "Panda3DS",
        "files": [
          {
            "description": "AES encryption keys for decrypting encrypted ROMs",
            "load_from": "save_dir",
            "name": "aes_keys.txt",
            "note": "Loaded at ROM load time from appDataRoot/sysdata/aes_keys.txt.\nIn libretro mode, appDataRoot = <save_dir>/Emulator Files/.\nContains key slot entries (generator, keyX, keyY, normalKey).\nOnly needed for encrypted .3ds/.cci/.cxi/.app files.\nDecrypted dumps work without this file.\n",
            "path": "Emulator Files/sysdata/aes_keys.txt",
            "required": false,
            "source_ref": "src/emulator.cpp:229,237-238, src/core/crypto/aes_engine.cpp:13-92"
          },
          {
            "description": "Seed database for seed-encrypted games",
            "load_from": "save_dir",
            "name": "seeddb.bin",
            "note": "Used for titles with seed encryption (firmware 9.6+).\nPlaced alongside aes_keys.txt in the sysdata directory.\nWithout it, seed-encrypted titles fail to load with a warning.\n",
            "path": "Emulator Files/sysdata/seeddb.bin",
            "required": false,
            "source_ref": "src/emulator.cpp:230,241-242, src/core/loader/ncch.cpp:78-93"
          }
        ],
        "notes": "HLE 3DS emulator. Most games run without system files.\nEncrypted ROMs need AES keys in sysdata/aes_keys.txt, and seed-encrypted\ntitles (9.6+) also need sysdata/seeddb.bin.\nDSP firmware is loaded from the game itself (HLE/LLE/Null modes via core\noption panda3ds_dsp_emulation). System archives (shared font, bad word\nlist, country list, mii data) are compiled into the binary via cmrc.\nThe libretro core uses the save directory, not RetroArch's system\ndirectory. Files go under <save_dir>/Emulator Files/sysdata/.\nThe .info declares firmware_count=0. is_experimental = true.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/panda3ds-emu/panda3ds",
        "source_commit": "3787358bdae41d5532ccd00c8998a527ae949949",
        "systems": [
          "nintendo-3ds"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/panda3ds-emu/panda3ds"
      }
    },
    {
      "id": "parallel-launcher",
      "profile": {
        "core_classification": "launcher",
        "core_version": "9.0.5",
        "cores": [
          "parallel-launcher",
          "ca.parallel_launcher.ParallelLauncher"
        ],
        "display_name": "Nintendo - Nintendo 64 (Parallel Launcher)",
        "emulator": "Parallel Launcher",
        "files": [
          {
            "description": "64DD IPL ROM",
            "name": "64DD_IPL.bin",
            "note": "Read from the system directory root when disk content is loaded, with no size or hash check. The core drops into its dead-emulator loop when it is absent. Content counts as disk when its header carries a 64DD magic word, or when it arrives on the second slot of the cart-and-disk subsystem.",
            "required": false,
            "source_ref": "libretro/libretro.c:622-666",
            "system": "nintendo-64dd"
          },
          {
            "description": "glN64 per-ROM settings database",
            "name": "gles2n64rom.conf",
            "note": "Read at plugin init when the glN64 graphics plugin is selected, keyed on the name in the ROM header. Global settings stand when absent.",
            "required": false,
            "source_ref": "gles2n64/src/glN64Config.c:185-228",
            "system": "nintendo-64"
          }
        ],
        "notes": "Qt front end that installs and drives its own RetroArch and its own fork of\nParaLLEl N64. RetroArch is fetched from buildbot.libretro.com as a stable\nrelease archive (retroarch-updater.cpp:24-30). The core,\nparallel_n64_next_libretro, is fetched from parallel-launcher.ca\n(updates.cpp:190-213) into retro-data/cores. Core version at this profiling\nis 2.28.\n\nNeither lands in a user RetroArch install. The system directory the core\nreads from is retro-data/system under the launcher's own data directory,\nwritten into a private retroarch.cfg on every launch (retroarch.cpp:100-129).\nRetroArch is spawned as `-L <core> --config <cfg> <rom>`\n(retroarch.cpp:760-781). The launcher also rewrites the core's .info into\nretro-data/info at every startup (main.cpp:149-156), which is how RetroArch\nlearns of the 64DD firmware entry.\n\nContent is restricted to cartridge formats at every entry point: command line\nand file associations take .z64 .n64 .v64 .bps (main.cpp:65-94), the add-ROM\ndialog the same (main-window.cpp:607-616), the library scanner *.[nvz]64\n(rom-finder.cpp:271-278), romhacking.com downloads .z64 (sync.cpp:238). A .bps\nis patched to a cartridge ROM before launch (play.cpp:721-757). No --subsystem\nargument is passed either, so neither route into the core's disk path opens:\nthe header check at libretro.c:545-548 and the cart-and-disk subsystem at\nlibretro.c:104-114.\n\nGraphics plugin is chosen per ROM among ParaLLEl-RDP, Glide64, angrylion,\nGLideN64, Rice, glN64 and OGRE (settings.hpp:13-22, retroarch.cpp:55-64).\n\nSelecting glN64 also reads gles2n64.conf from the system directory root at\nplugin init, and writes it out with defaults when it is absent\n(glN64Config.c:246-254, Config_WriteConfig at glN64Config.c:95).\n\nThree paths the fork computes but never reads. GLideN64 builds without\nFreeType here, so the font file name it resolves for on-screen text is\nassigned and dropped (TextDrawer.cpp:145-188). Its per-game ini is compiled in\nas a header and the external copy is skipped because the launcher writes INI\nBehaviour as disabled on every launch (retroarch.cpp:468,\nConfig_mupenplus.cpp:170-241, libretro.c:2030-2040). Rice's ini reader and\nwriter sit behind #if 0 (RiceConfig.cpp:453-463, Video.cpp:327-333).\n",
        "profiled_date": "2026-08-08",
        "source": "https://gitlab.com/parallel-launcher/parallel-launcher",
        "source_commit": "8f2924c213f7c98118ab5a86fc21c452b77a7057",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "standalone",
        "upstream": "https://gitlab.com/parallel-launcher/parallel-n64",
        "upstream_commit": "11574ac28d27faaaef4b5bc3c1ca50fb2ed98b83"
      }
    },
    {
      "id": "parallel_n64",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.0-rc2",
        "cores": [
          "parallel_n64",
          "parallel_n64_debug"
        ],
        "display_name": "Nintendo - Nintendo 64 (ParaLLEl N64)",
        "emulator": "ParaLLEl N64",
        "files": [
          {
            "description": "64DD IPL ROM",
            "name": "64DD_IPL.bin",
            "note": "Only loaded when a 64DD disk image (.ndd) is present via subsystem API. Core fails to load disk games without it.",
            "path": "64DD_IPL.bin",
            "required": false,
            "source_ref": "libretro/libretro.c:723"
          }
        ],
        "notes": {
          "dd_note": "64DD IPL ROM loaded from system_dir/64DD_IPL.bin when disk_data is present. Loaded via fopen with no hash or size validation.\n",
          "divergence_note": "Fork of mupen64plus-core with significant divergence. Includes legacy GPU plugins (Glide64, glN64, Rice, angrylion) and ParaLLEl-RDP/RSP. Uses flat path 64DD_IPL.bin unlike mupen64plus-next which uses Mupen64plus/IPL.n64 subdirectory.\n",
          "hle_available": true,
          "hle_note": "PIF boot ROM is fully HLE'd (mupen64plus-core/src/device/pif/bootrom_hle.c:48). CIC challenge/response handled in software (n64_cic_nus_6105.c). No BIOS files needed for standard cartridge games.\n"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/parallel-n64",
        "source_commit": "37605bb45964c7a2695e6301e80f5c6a4feb5558",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mupen64plus/mupen64plus-core"
      }
    },
    {
      "id": "parallel_n64_debug",
      "profile": {
        "alias_of": "parallel_n64",
        "core_version": "2.0-rc2",
        "cores": [
          "parallel_n64_debug"
        ],
        "display_name": "Nintendo - Nintendo 64 (ParaLLEl) (Debug)",
        "emulator": "parallel_n64_debug",
        "files": [],
        "note": "Debug build of parallel_n64. Same codebase and firmware requirements.",
        "profiled_date": "2026-03-24",
        "type": "alias"
      }
    },
    {
      "id": "pascal_pong",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1.0",
        "cores": [
          "pascal_pong"
        ],
        "display_name": "PascalPong",
        "emulator": "Pascal Pong",
        "files": [],
        "notes": "Pong clone written in Pascal for libretro. Self-contained, all assets embedded in the binary. No external files loaded.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/pascal-pong-libretro",
        "source_commit": "2a0cfd44652c0b215862de3ef56916d1384ad8a0",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/pascal-pong-libretro"
      }
    },
    {
      "id": "pce-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "pce-emu",
          "PCE.emu",
          "pceemu",
          "PCE-EMU",
          "com.PceEmu"
        ],
        "display_name": "PCE.emu",
        "emulator": "pce-emu",
        "files": [
          {
            "category": "bios",
            "description": "Super CD-ROM2 System Card 3.0",
            "min_size": 262144,
            "name": "syscard3.pce",
            "note": "min_size comes from the fixed 262144-byte read in pce_fast (huc.cpp:302) with Stream::read throwing on a short file (Stream.h:88); a 262656-byte dump passes through the copier-header skip at huc.cpp:299. The pce module imposes no minimum.\n",
            "required": true,
            "source_ref": "src/main/Main.cc:80-91 (throws without it), src/main/options.cc:275-301 (path resolution), src/main/EmuMenuViews.cc:176-191 (selection), src/pce_fast/pce.cpp:477-483 + src/pce_fast/huc.cpp:284-304 (default module load), src/pce/pce.cpp:645-653 (accurate module load), src/pce_fast/pce.cpp:663 + src/pce/pce.cpp:1094 (name)",
            "validation": [
              "existence",
              "size"
            ]
          },
          {
            "category": "bios",
            "description": "Games Express CD Card",
            "name": "gecard.pce",
            "note": "Reached only when the accurate module runs and DetectGECD matches the disc; pce_fast has no Games Express branch. Served through the same System Card setting, so the user points it at this image to boot those discs.\n",
            "required": false,
            "source_ref": "src/pce/pce.cpp:512-551 (DetectGECD), src/pce/pce.cpp:644-646 (gecdbios branch), src/pce/huc.cpp:225-316 (size-agnostic read), src/pce/pce.cpp:1095 (name)",
            "validation": [
              "existence"
            ]
          }
        ],
        "notes": "Android and desktop application by Robert Broglia built on EmuFramework, vendoring Mednafen's pce_fast and pce modules. Both are compiled and selectable at runtime; pce_fast is what an unset core option resolves to (system.ccm:125).\nHuCard content (.pce, .sgx) loads with no external file. CD content (.cue, .toc, .ccd, .chd) requires a System Card image: loadContent throws \"No System Card Set\" when the path is unset or the file is gone (Main.cc:88-91).\nThe System Card is a single path the user picks through a file browser filtered to .pce and .sgx (EmuMenuViews.cc:176-191), stored as CFGKEY_SYSCARD_PATH. No filename is fixed and no directory is scanned. MDFN_GetSettingS returns an empty string for pce.cdbios, pce_fast.cdbios and pce.gecdbios, and MDFN_MakeFName answers every MDFNMKF_FIRMWARE request with that one path (options.cc:275-301), so the Games Express branch reads whichever image the setting points at. Mednafen's settings table still carries the syscard3.pce and gecard.pce defaults but settings.cpp is not compiled, so they are never read.\nA path with an archive extension is opened as an archive and the first member ending in .pce, .bin or .bios is used (MDFNFILE.cc:41-76).\nNeither module hashes the image. pce_fast skips a 512-byte copier header then reads a fixed 262144 bytes (huc.cpp:299-302); pce reads min(rounded length, length) and accepts any size (huc.cpp:225-316). HuC_Load is always called with SYSCARD_3, or SYSCARD_ARCADE when Arcade Card emulation is on (pce.cpp:653).\nSuperGrafx is enabled by the .sgx extension, by a CRC match against the built-in sgx_table (pce.cpp:345, 382-395), or by DetectSGXCD on disc. HES playback is compiled out (pce.cpp:76) and cheats are disabled (options.cc:245-246).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "nec-pc-engine",
          "nec-pc-engine-cd",
          "nec-supergrafx"
        ],
        "type": "standalone",
        "upstream": "https://mednafen.github.io/",
        "verification": "existence"
      }
    },
    {
      "id": "pcem",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v11 (PCem-mooch, based on PCem v10.1)",
        "cores": [
          "pcem"
        ],
        "display_name": "PC (PCem)",
        "emulator": "PCem",
        "files": [
          {
            "name": "MDA font ROM",
            "note": "MDA/Hercules character generator ROM. Loaded unconditionally by loadbios() via loadfont() at startup, regardless of selected video card.\n",
            "path": "mda.rom",
            "required": true,
            "source_ref": "src/mem.c:107"
          },
          {
            "name": "XT-IDE BIOS",
            "note": "XT-IDE Universal BIOS for XT-class machines. Loaded as option ROM at 0xC8000. Used by IBM PC, IBM XT, Generic XT, DTK XT, AMI XT, Tandy, Amstrad, Euro PC, Olivetti, PC2086, PC3086, and other XT clones.\n",
            "path": "roms/ide_xt.bin",
            "required": false,
            "source_ref": "src/mem.c:60-72"
          },
          {
            "name": "AT-IDE BIOS",
            "note": "XT-IDE Universal BIOS for AT-class machines. Loaded as option ROM. Used by IBM AT, Compaq Deskpro 386, Phoenix 386, DTK 386.\n",
            "path": "roms/ide_at.bin",
            "required": false,
            "source_ref": "src/mem.c:74-86"
          },
          {
            "name": "AT-IDE BIOS v1.1.5",
            "note": "XT-IDE Universal BIOS v1.1.5 for AT-class machines. Used specifically by IBM PS/1 model 2011.\n",
            "path": "roms/ide_at_1_1_5.bin",
            "required": false,
            "source_ref": "src/mem.c:88-100"
          },
          {
            "name": "IBM PC BIOS",
            "note": "IBM 5150 PC BIOS dated 10/27/82 (8 KB).",
            "path": "roms/ibmpc/pc102782.bin",
            "required": false,
            "source_ref": "src/mem.c:382-386"
          },
          {
            "name": "IBM PC BASIC C1.1 F6",
            "note": "IBM Cassette BASIC C1.1 ROM, bank F6. Optional for IBM PC.",
            "path": "roms/ibmpc/basicc11.f6",
            "required": false,
            "source_ref": "src/mem.c:387-388"
          },
          {
            "name": "IBM PC BASIC C1.1 F8",
            "note": "IBM Cassette BASIC C1.1 ROM, bank F8.",
            "path": "roms/ibmpc/basicc11.f8",
            "required": false,
            "source_ref": "src/mem.c:391-393"
          },
          {
            "name": "IBM PC BASIC C1.1 FA",
            "note": "IBM Cassette BASIC C1.1 ROM, bank FA.",
            "path": "roms/ibmpc/basicc11.fa",
            "required": false,
            "source_ref": "src/mem.c:395-397"
          },
          {
            "name": "IBM PC BASIC C1.1 FC",
            "note": "IBM Cassette BASIC C1.1 ROM, bank FC.",
            "path": "roms/ibmpc/basicc11.fc",
            "required": false,
            "source_ref": "src/mem.c:399-401"
          },
          {
            "name": "IBM XT BIOS (combined)",
            "note": "IBM 5160 XT BIOS (64 KB combined ROM). Fallback: if this file is missing, the core tries the split ROMs 5000027.u19 + 1501512.u18.\n",
            "path": "roms/ibmxt/xt.rom",
            "required": false,
            "source_ref": "src/mem.c:203-222"
          },
          {
            "name": "IBM XT BIOS U19",
            "note": "IBM XT BIOS low chip. Used when xt.rom is not present.",
            "path": "roms/ibmxt/5000027.u19",
            "required": false,
            "source_ref": "src/mem.c:206"
          },
          {
            "name": "IBM XT BIOS U18",
            "note": "IBM XT BIOS high chip. Used when xt.rom is not present.",
            "path": "roms/ibmxt/1501512.u18",
            "required": false,
            "source_ref": "src/mem.c:207"
          },
          {
            "name": "IBM PCjr BIOS",
            "note": "IBM PCjr BIOS (64 KB). Required for PCjr machine model.",
            "path": "roms/ibmpcjr/bios.rom",
            "required": false,
            "source_ref": "src/mem.c:226-229"
          },
          {
            "name": "IBM AT BIOS U27",
            "note": "IBM 5170 AT BIOS low chip. Paired with 62x0821.u47.",
            "path": "roms/ibmat/62x0820.u27",
            "required": false,
            "source_ref": "src/mem.c:299"
          },
          {
            "name": "IBM AT BIOS U47",
            "note": "IBM 5170 AT BIOS high chip. Paired with 62x0820.u27.",
            "path": "roms/ibmat/62x0821.u47",
            "required": false,
            "source_ref": "src/mem.c:300"
          },
          {
            "name": "IBM PS/1 model 2011 BIOS",
            "note": "IBM PS/1 model 2011 BIOS (128 KB). 64 KB is read from offset 0x60000. Also loaded separately by PS/1 motherboard init as a high ROM at 0xF80000.\n",
            "path": "roms/ibmps1es/f80000.bin",
            "required": false,
            "source_ref": "src/mem.c:513-517, src/ps1.c:127-128"
          },
          {
            "name": "Tandy 1000 BIOS",
            "note": "Tandy 1000 BIOS v01.020 (64 KB).",
            "path": "roms/tandy/tandy1t1.020",
            "required": false,
            "source_ref": "src/mem.c:165-168"
          },
          {
            "name": "Tandy 1000 HX BIOS",
            "note": "Tandy 1000 HX BIOS (128 KB).",
            "path": "roms/tandy1000hx/v020000.u12",
            "required": false,
            "source_ref": "src/mem.c:172-176"
          },
          {
            "name": "Tandy 1000 SL/2 BIOS low",
            "note": "Tandy 1000 SL/2 BIOS low chip. Paired with 8079048.hu2. Also loaded by tandy_rom.c for full bank-switched ROM (512 KB).\n",
            "path": "roms/tandy1000sl2/8079047.hu1",
            "required": false,
            "source_ref": "src/mem.c:180, src/tandy_rom.c:58"
          },
          {
            "name": "Tandy 1000 SL/2 BIOS high",
            "note": "Tandy 1000 SL/2 BIOS high chip. Paired with 8079047.hu1. Also loaded by tandy_rom.c for full bank-switched ROM (512 KB).\n",
            "path": "roms/tandy1000sl2/8079048.hu2",
            "required": false,
            "source_ref": "src/mem.c:181, src/tandy_rom.c:59"
          },
          {
            "name": "Amstrad PC1512 BIOS low",
            "note": "Amstrad PC1512 BIOS low chip.",
            "path": "roms/pc1512/40043.v1",
            "required": false,
            "source_ref": "src/mem.c:121"
          },
          {
            "name": "Amstrad PC1512 BIOS high",
            "note": "Amstrad PC1512 BIOS high chip.",
            "path": "roms/pc1512/40044.v1",
            "required": false,
            "source_ref": "src/mem.c:122"
          },
          {
            "name": "Amstrad PC1512 font ROM",
            "note": "Amstrad PC1512 character generator ROM.",
            "path": "roms/pc1512/40078.ic127",
            "required": false,
            "source_ref": "src/mem.c:132"
          },
          {
            "name": "Amstrad PC1640 BIOS low",
            "note": "Amstrad PC1640 BIOS low chip.",
            "path": "roms/pc1640/40044.v3",
            "required": false,
            "source_ref": "src/mem.c:135"
          },
          {
            "name": "Amstrad PC1640 BIOS high",
            "note": "Amstrad PC1640 BIOS high chip.",
            "path": "roms/pc1640/40043.v3",
            "required": false,
            "source_ref": "src/mem.c:136"
          },
          {
            "name": "Amstrad PC1640 video BIOS",
            "note": "Amstrad PC1640 built-in EGA video BIOS. Also used by vid_pc1640 device.",
            "path": "roms/pc1640/40100",
            "required": false,
            "source_ref": "src/mem.c:145, src/vid_pc1640.c:124"
          },
          {
            "name": "Sinclair PC200 BIOS high",
            "note": "Sinclair PC200 BIOS high chip.",
            "path": "roms/pc200/pc20v2.1",
            "required": false,
            "source_ref": "src/mem.c:151"
          },
          {
            "name": "Sinclair PC200 BIOS low",
            "note": "Sinclair PC200 BIOS low chip.",
            "path": "roms/pc200/pc20v2.0",
            "required": false,
            "source_ref": "src/mem.c:152"
          },
          {
            "name": "Sinclair PC200 font ROM",
            "note": "Sinclair PC200 character generator ROM.",
            "path": "roms/pc200/40109.bin",
            "required": false,
            "source_ref": "src/mem.c:162"
          },
          {
            "name": "Amstrad PC2086 BIOS low",
            "note": "Amstrad PC2086 BIOS low chip.",
            "path": "roms/pc2086/40179.ic129",
            "required": false,
            "source_ref": "src/mem.c:261"
          },
          {
            "name": "Amstrad PC2086 BIOS high",
            "note": "Amstrad PC2086 BIOS high chip.",
            "path": "roms/pc2086/40180.ic132",
            "required": false,
            "source_ref": "src/mem.c:262"
          },
          {
            "name": "Amstrad PC2086 video BIOS",
            "note": "Amstrad PC2086 Paradise PVGA1A video BIOS.",
            "path": "roms/pc2086/40186.ic171",
            "required": false,
            "source_ref": "src/mem.c:273, src/vid_paradise.c:329"
          },
          {
            "name": "Amstrad PC3086 BIOS",
            "note": "Amstrad PC3086 system BIOS (16 KB).",
            "path": "roms/pc3086/fc00.bin",
            "required": false,
            "source_ref": "src/mem.c:281"
          },
          {
            "name": "Amstrad PC3086 video BIOS",
            "note": "Amstrad PC3086 Paradise PVGA1A video BIOS.",
            "path": "roms/pc3086/c000.bin",
            "required": false,
            "source_ref": "src/mem.c:285, src/vid_paradise.c:338"
          },
          {
            "name": "Generic XT BIOS",
            "note": "Generic XT clone BIOS (8 KB).",
            "path": "roms/genxt/pcxt.rom",
            "required": false,
            "source_ref": "src/mem.c:233-236"
          },
          {
            "name": "DTK XT BIOS",
            "note": "DTK XT clone BIOS (8 KB).",
            "path": "roms/dtk/DTK_ERSO_2.42_2764.bin",
            "required": false,
            "source_ref": "src/mem.c:240-243"
          },
          {
            "name": "AMI XT BIOS",
            "note": "AMI 8088 XT clone BIOS dated 31 Jan 1989 (8 KB).",
            "path": "roms/amixt/AMI_8088_BIOS_31JAN89.BIN",
            "required": false,
            "source_ref": "src/mem.c:539-542"
          },
          {
            "name": "VTech Laser Turbo XT BIOS",
            "note": "VTech Laser Turbo XT BIOS (8 KB).",
            "path": "roms/ltxt/27C64.bin",
            "required": false,
            "source_ref": "src/mem.c:547-550"
          },
          {
            "name": "VTech Laser XT3 BIOS",
            "note": "VTech Laser XT3 BIOS (8 KB).",
            "path": "roms/lxt3/27C64D.bin",
            "required": false,
            "source_ref": "src/mem.c:555-558"
          },
          {
            "name": "Phoenix XT BIOS",
            "note": "Phoenix XT clone BIOS (8 KB).",
            "path": "roms/pxxt/000p001.bin",
            "required": false,
            "source_ref": "src/mem.c:585-588"
          },
          {
            "name": "Juko PC BIOS",
            "note": "Juko XT clone BIOS (8 KB).",
            "path": "roms/jukopc/000o001.bin",
            "required": false,
            "source_ref": "src/mem.c:593-596"
          },
          {
            "name": "Euro PC BIOS",
            "note": "Schneider Euro PC BIOS (32 KB).",
            "path": "roms/europc/50145",
            "required": false,
            "source_ref": "src/mem.c:374-377"
          },
          {
            "name": "Olivetti M24 BIOS low",
            "note": "Olivetti M24 BIOS low chip, version 1.43.",
            "path": "roms/olivetti_m24/olivetti_m24_version_1.43_low.bin",
            "required": false,
            "source_ref": "src/mem.c:247"
          },
          {
            "name": "Olivetti M24 BIOS high",
            "note": "Olivetti M24 BIOS high chip, version 1.43.",
            "path": "roms/olivetti_m24/olivetti_m24_version_1.43_high.bin",
            "required": false,
            "source_ref": "src/mem.c:248"
          },
          {
            "name": "Commodore PC 30 III BIOS even",
            "note": "Commodore PC 30 III BIOS even chip.",
            "path": "roms/cmdpc30/commodore pc 30 iii even.bin",
            "required": false,
            "source_ref": "src/mem.c:312"
          },
          {
            "name": "Commodore PC 30 III BIOS odd",
            "note": "Commodore PC 30 III BIOS odd chip.",
            "path": "roms/cmdpc30/commodore pc 30 iii odd.bin",
            "required": false,
            "source_ref": "src/mem.c:313"
          },
          {
            "name": "AMI 286 BIOS",
            "note": "AMI 286 clone BIOS (64 KB).",
            "path": "roms/ami286/amic206.bin",
            "required": false,
            "source_ref": "src/mem.c:365-368"
          },
          {
            "name": "Dell System 200 BIOS low",
            "note": "Dell System 200 BIOS low chip.",
            "path": "roms/dells200/dell0.bin",
            "required": false,
            "source_ref": "src/mem.c:326"
          },
          {
            "name": "Dell System 200 BIOS high",
            "note": "Dell System 200 BIOS high chip.",
            "path": "roms/dells200/dell1.bin",
            "required": false,
            "source_ref": "src/mem.c:327"
          },
          {
            "name": "Compaq Deskpro 386 BIOS U11",
            "note": "Compaq Deskpro 386 BIOS low chip.",
            "path": "roms/deskpro386/109592-005.U11.bin",
            "required": false,
            "source_ref": "src/mem.c:524"
          },
          {
            "name": "Compaq Deskpro 386 BIOS U13",
            "note": "Compaq Deskpro 386 BIOS high chip.",
            "path": "roms/deskpro386/109591-005.U13.bin",
            "required": false,
            "source_ref": "src/mem.c:525"
          },
          {
            "name": "Acer 386SX BIOS",
            "note": "Acer 386SX/25N BIOS (64 KB).",
            "path": "roms/acer386/acer386.bin",
            "required": false,
            "source_ref": "src/mem.c:353-356"
          },
          {
            "name": "Acer 386SX OTI-067 video BIOS",
            "note": "OTI-067 video BIOS for Acer 386SX (on-board video).",
            "path": "roms/acer386/oti067.bin",
            "required": false,
            "source_ref": "src/mem.c:359, src/vid_oti067.c:184"
          },
          {
            "name": "Phoenix 386 BIOS low",
            "note": "Phoenix 386 clone BIOS low chip.",
            "path": "roms/px386/3iip001l.bin",
            "required": false,
            "source_ref": "src/mem.c:563"
          },
          {
            "name": "Phoenix 386 BIOS high",
            "note": "Phoenix 386 clone BIOS high chip.",
            "path": "roms/px386/3iip001h.bin",
            "required": false,
            "source_ref": "src/mem.c:564"
          },
          {
            "name": "DTK 386 BIOS",
            "note": "DTK 386SX clone BIOS with NEAT chipset (64 KB).",
            "path": "roms/dtk386/3cto001.bin",
            "required": false,
            "source_ref": "src/mem.c:577-580"
          },
          {
            "name": "Amstrad MegaPC BIOS low",
            "note": "Amstrad MegaPC BIOS low chip.",
            "path": "roms/megapc/41651-bios lo.u18",
            "required": false,
            "source_ref": "src/mem.c:407"
          },
          {
            "name": "Amstrad MegaPC BIOS high",
            "note": "Amstrad MegaPC BIOS high chip.",
            "path": "roms/megapc/211253-bios hi.u19",
            "required": false,
            "source_ref": "src/mem.c:408"
          },
          {
            "name": "AMI 386 BIOS",
            "note": "AMI 386 clone BIOS with Headland/OPTi 82C495 chipset (64 KB).",
            "path": "roms/ami386/ami386.bin",
            "required": false,
            "source_ref": "src/mem.c:345-348"
          },
          {
            "name": "AMI 486 BIOS",
            "note": "AMI 486 clone BIOS with ALi M1429 chipset (64 KB).",
            "path": "roms/ami486/ami486.BIN",
            "required": false,
            "source_ref": "src/mem.c:422-425"
          },
          {
            "name": "AMI WinBIOS 486",
            "note": "AMI WinBIOS 486 with ALi M1429G chipset (64 KB).",
            "path": "roms/win486/ALI1429G.AMW",
            "required": false,
            "source_ref": "src/mem.c:431-434"
          },
          {
            "name": "HOT-433 PCI 486 BIOS",
            "note": "HOT-433 PCI 486 BIOS with UMC UM8881F chipset (128 KB).",
            "path": "roms/hot-433/hot-433.ami",
            "required": false,
            "source_ref": "src/mem.c:439-443"
          },
          {
            "name": "DTK 486 BIOS",
            "note": "DTK PKM-0038S E-2 BIOS with SiS 85C471 chipset (64 KB).",
            "path": "roms/dtk486/4siw005.bin",
            "required": false,
            "source_ref": "src/mem.c:601-604"
          },
          {
            "name": "Award SiS 496 BIOS",
            "note": "Award BIOS for SiS 496/497 chipset (128 KB).",
            "path": "roms/sis496/SIS496-1.AWA",
            "required": false,
            "source_ref": "src/mem.c:448-452"
          },
          {
            "name": "Rise R418 BIOS",
            "note": "Rise Computer R418 BIOS with SiS 496/497 chipset (128 KB).",
            "path": "roms/r418/r418i.bin",
            "required": false,
            "source_ref": "src/mem.c:608-612"
          },
          {
            "name": "Intel Premiere/PCI (Batman) BIOS",
            "note": "Intel Premiere/PCI BIOS (430LX, code-name Batman). Main BIOS block.",
            "path": "roms/revenge/1009AF2_.BIO",
            "required": false,
            "source_ref": "src/mem.c:469-471"
          },
          {
            "name": "Intel Premiere/PCI (Batman) BIOS ext",
            "note": "Intel Premiere/PCI BIOS extension block.",
            "path": "roms/revenge/1009AF2_.BI1",
            "required": false,
            "source_ref": "src/mem.c:474-478"
          },
          {
            "name": "Intel Premiere/PCI II (Plato) BIOS",
            "note": "Intel Premiere/PCI II BIOS (430NX). Main BIOS block.",
            "path": "roms/plato/1016AX1_.BIO",
            "required": false,
            "source_ref": "src/mem.c:617-620"
          },
          {
            "name": "Intel Premiere/PCI II (Plato) BIOS ext",
            "note": "Intel Premiere/PCI II BIOS extension block.",
            "path": "roms/plato/1016AX1_.BI1",
            "required": false,
            "source_ref": "src/mem.c:622-625"
          },
          {
            "name": "Intel Advanced/EV (Endeavor) BIOS",
            "note": "Intel Advanced/EV BIOS (430FX). Main BIOS block.",
            "path": "roms/endeavor/1006CB0_.BIO",
            "required": false,
            "source_ref": "src/mem.c:483-485"
          },
          {
            "name": "Intel Advanced/EV (Endeavor) BIOS ext",
            "note": "Intel Advanced/EV BIOS extension block.",
            "path": "roms/endeavor/1006CB0_.BI1",
            "required": false,
            "source_ref": "src/mem.c:488-491"
          },
          {
            "name": "PC Partner MB500N BIOS",
            "note": "PC Partner MB500N BIOS (430FX, Award, 128 KB).",
            "path": "roms/mb500n/031396S.BIN",
            "required": false,
            "source_ref": "src/mem.c:632-635"
          },
          {
            "name": "ASUS P/I-P54TP4XE BIOS",
            "note": "ASUS P/I-P54TP4XE BIOS (430FX, Award, 128 KB).",
            "path": "roms/p54tp4xe/T15I0302.AWD",
            "required": false,
            "source_ref": "src/mem.c:640-643"
          },
          {
            "name": "Acer M3A BIOS",
            "note": "Acer M3A BIOS (430HX, 128 KB).",
            "path": "roms/acerm3a/r01-b3.bin",
            "required": false,
            "source_ref": "src/mem.c:648-651"
          },
          {
            "name": "Acer V35N BIOS",
            "note": "Acer V35N BIOS (430HX, 128 KB).",
            "path": "roms/acerv35n/V35ND1S1.BIN",
            "required": false,
            "source_ref": "src/mem.c:656-659"
          },
          {
            "name": "ASUS P/I-P55T2P4 BIOS",
            "note": "ASUS P/I-P55T2P4 BIOS (430HX, Award, 128 KB).",
            "path": "roms/p55t2p4/0207_J2.BIN",
            "required": false,
            "source_ref": "src/mem.c:664-667"
          },
          {
            "name": "Award 430VX BIOS",
            "note": "Award 430VX PCI BIOS (128 KB).",
            "path": "roms/430vx/55XWUQ0E.BIN",
            "required": false,
            "source_ref": "src/mem.c:459-463"
          },
          {
            "name": "Epox P55-VA BIOS",
            "note": "Epox P55-VA BIOS (430VX, Award, 128 KB).",
            "path": "roms/p55va/VA021297.BIN",
            "required": false,
            "source_ref": "src/mem.c:672-675"
          },
          {
            "name": "IBM EGA BIOS",
            "note": "IBM EGA card BIOS (32 KB).",
            "path": "roms/ibm_6277356_ega_card_u44_27128.bin",
            "required": false,
            "source_ref": "src/vid_ega.c:957, 1078"
          },
          {
            "name": "Compaq EGA BIOS",
            "note": "Compaq EGA card BIOS (32 KB).",
            "path": "roms/108281-001.bin",
            "required": false,
            "source_ref": "src/vid_ega.c:997, 1083"
          },
          {
            "name": "Chips & Technologies SuperEGA BIOS",
            "note": "Chips & Technologies SuperEGA BIOS (32 KB).",
            "path": "roms/lega.vbi",
            "required": false,
            "source_ref": "src/vid_ega.c:1041, 1088"
          },
          {
            "name": "IBM VGA BIOS",
            "note": "IBM VGA card BIOS. Also used by PS/1 VGA (same availability check).",
            "path": "roms/ibm_vga.bin",
            "required": false,
            "source_ref": "src/vid_vga.c:89, 127"
          },
          {
            "name": "Compaq/Paradise VGA BIOS",
            "note": "Compaq/Paradise PVGA1A VGA BIOS dated 1988-05-18.",
            "path": "roms/1988-05-18.rom",
            "required": false,
            "source_ref": "src/vid_paradise.c:366, 373"
          },
          {
            "name": "ATI VGA Edge-16 BIOS",
            "note": "ATI VGA Edge-16 (ATI-18800) video BIOS.",
            "path": "roms/vgaedge16.vbi",
            "required": false,
            "source_ref": "src/vid_ati18800.c:135, 155"
          },
          {
            "name": "ATI VGA Charger BIOS",
            "note": "ATI VGA Charger (ATI-28800) video BIOS.",
            "path": "roms/bios.bin",
            "required": false,
            "source_ref": "src/vid_ati28800.c:160, 180"
          },
          {
            "name": "OAK OTI-067 BIOS",
            "note": "OAK OTI-067 standalone video BIOS.",
            "path": "roms/oti067/bios.bin",
            "required": false,
            "source_ref": "src/vid_oti067.c:158, 194"
          },
          {
            "name": "Trident TVGA8900D BIOS",
            "note": "Trident TVGA8900D video BIOS.",
            "path": "roms/TRIDENT.BIN",
            "required": false,
            "source_ref": "src/vid_tvga.c:292, 307"
          },
          {
            "name": "Tseng ET4000AX BIOS",
            "note": "Tseng ET4000AX video BIOS.",
            "path": "roms/et4000.BIN",
            "required": false,
            "source_ref": "src/vid_et4000.c:153, 168"
          },
          {
            "name": "Tseng ET4000/W32p BIOS",
            "note": "Diamond Stealth 32 (Tseng ET4000/W32p) video BIOS.",
            "path": "roms/et4000w32.bin",
            "required": false,
            "source_ref": "src/vid_et4000w32.c:1081, 1103"
          },
          {
            "name": "S3 Vision864 BIOS",
            "note": "Paradise Bahamas 64 (S3 Vision864) video BIOS.",
            "path": "roms/bahamas64.BIN",
            "required": false,
            "source_ref": "src/vid_s3.c:2001, 2015"
          },
          {
            "name": "S3 Trio64 BIOS (Number Nine 9FX)",
            "note": "Number Nine 9FX (S3 764/Trio64) video BIOS.",
            "path": "roms/s3_764.bin",
            "required": false,
            "source_ref": "src/vid_s3.c:2020, 2034"
          },
          {
            "name": "S3 Trio32 BIOS (Phoenix)",
            "note": "Phoenix S3 732/Trio32 video BIOS.",
            "path": "roms/86C732P.bin",
            "required": false,
            "source_ref": "src/vid_s3.c:2039, 2055"
          },
          {
            "name": "S3 Trio64 BIOS (Phoenix)",
            "note": "Phoenix S3 764/Trio64 video BIOS.",
            "path": "roms/86c764x1.bin",
            "required": false,
            "source_ref": "src/vid_s3.c:2060, 2076"
          },
          {
            "name": "S3 ViRGE BIOS",
            "note": "Diamond Stealth 3D 2000 (S3 ViRGE) video BIOS.",
            "path": "roms/s3virge.bin",
            "required": false,
            "source_ref": "src/vid_s3_virge.c:3746, 3936"
          },
          {
            "name": "S3 ViRGE/DX BIOS",
            "note": "S3 ViRGE/DX (86C375) video BIOS.",
            "path": "roms/86c375_1.bin",
            "required": false,
            "source_ref": "src/vid_s3_virge.c:3836, 3941"
          },
          {
            "name": "ATI Mach64 GX BIOS",
            "note": "ATI Graphics Pro Turbo (Mach64 GX) video BIOS. Also loaded by the Cirrus Logic init path (copy/paste in source).\n",
            "path": "roms/mach64gx/bios.bin",
            "required": false,
            "source_ref": "src/vid_ati_mach64.c:2341, src/vid_cirrus.c:2324"
          },
          {
            "name": "Cirrus Logic CL-GD5429 BIOS",
            "note": "Cirrus Logic CL-GD5429 video BIOS.",
            "path": "roms/5429.vbi",
            "required": false,
            "source_ref": "src/vid_cl5429.c:847, 872"
          },
          {
            "name": "Trident TGUI9440 BIOS",
            "note": "Trident TGUI9440 video BIOS.",
            "path": "roms/9440.vbi",
            "required": false,
            "source_ref": "src/vid_tgui9440.c:495, 517"
          },
          {
            "name": "Paradise WD90C11 BIOS",
            "note": "Paradise WD90C11 video BIOS for MegaPC. Uses the MegaPC BIOS ROMs (same files as the MegaPC machine BIOS).\n",
            "path": "roms/megapc/41651-bios lo.u18",
            "required": false,
            "source_ref": "src/vid_paradise.c:348-358"
          },
          {
            "name": "nVidia RIVA 128 BIOS",
            "note": "nVidia RIVA 128 video BIOS (64 KB). Marked experimental.",
            "path": "roms/riva128.bin",
            "required": false,
            "source_ref": "src/vid_nv_riva128.c:1096, 1152"
          },
          {
            "name": "nVidia RIVA TNT BIOS",
            "note": "nVidia RIVA TNT video BIOS (64 KB). Marked experimental.",
            "path": "roms/rivatnt.bin",
            "required": false,
            "source_ref": "src/vid_nv_rivatnt.c:1126, 1182"
          },
          {
            "name": "Sound Blaster AWE32 ROM",
            "note": "Creative Sound Blaster AWE32 sample ROM for EMU8000 synth chip. Required when SB AWE32 sound card is selected.\n",
            "path": "roms/awe32.raw",
            "required": false,
            "source_ref": "src/sound_emu8k.c:679, src/sound_sb.c:479"
          },
          {
            "name": "Realtek RTL8029AS boot ROM",
            "note": "Realtek RTL8029AS PCI Ethernet boot ROM (32 KB).",
            "path": "roms/rtl8029as.rom",
            "required": false,
            "source_ref": "src/ne2000.c:1694"
          },
          {
            "name": "NE2000 boot ROM",
            "note": "NE2000 ISA Ethernet boot ROM (64 KB).",
            "path": "roms/ne2000.rom",
            "required": false,
            "source_ref": "src/ne2000.c:1701"
          },
          {
            "name": "NVR: Amstrad PC1512",
            "note": "CMOS/NVRAM template for Amstrad PC1512.",
            "path": "pc1512.nvr",
            "required": false,
            "source_ref": "src/nvr.c:390"
          },
          {
            "name": "NVR: Amstrad PC1640",
            "note": "CMOS/NVRAM template for Amstrad PC1640.",
            "path": "pc1640.nvr",
            "required": false,
            "source_ref": "src/nvr.c:391"
          },
          {
            "name": "NVR: Sinclair PC200",
            "note": "CMOS/NVRAM template for Sinclair PC200.",
            "path": "pc200.nvr",
            "required": false,
            "source_ref": "src/nvr.c:392"
          },
          {
            "name": "NVR: Amstrad PC2086",
            "note": "CMOS/NVRAM template for Amstrad PC2086.",
            "path": "pc2086.nvr",
            "required": false,
            "source_ref": "src/nvr.c:393"
          },
          {
            "name": "NVR: Amstrad PC3086",
            "note": "CMOS/NVRAM template for Amstrad PC3086.",
            "path": "pc3086.nvr",
            "required": false,
            "source_ref": "src/nvr.c:394"
          },
          {
            "name": "NVR: IBM AT",
            "note": "CMOS/NVRAM template for IBM AT.",
            "path": "at.nvr",
            "required": false,
            "source_ref": "src/nvr.c:395"
          },
          {
            "name": "NVR: IBM PS/1 model 2011",
            "note": "CMOS/NVRAM template for IBM PS/1 model 2011.",
            "path": "ibmps1_2011.nvr",
            "required": false,
            "source_ref": "src/nvr.c:396"
          },
          {
            "name": "NVR: Commodore PC 30 III",
            "note": "CMOS/NVRAM template for Commodore PC 30 III.",
            "path": "cmdpc30.nvr",
            "required": false,
            "source_ref": "src/nvr.c:397"
          },
          {
            "name": "NVR: AMI 286",
            "note": "CMOS/NVRAM template for AMI 286 clone.",
            "path": "ami286.nvr",
            "required": false,
            "source_ref": "src/nvr.c:398"
          },
          {
            "name": "NVR: Dell System 200",
            "note": "CMOS/NVRAM template for Dell System 200.",
            "path": "dell200.nvr",
            "required": false,
            "source_ref": "src/nvr.c:399"
          },
          {
            "name": "NVR: IBM AT 386",
            "note": "CMOS/NVRAM template for IBM AT 386.",
            "path": "at386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:400"
          },
          {
            "name": "NVR: Compaq Deskpro 386",
            "note": "CMOS/NVRAM template for Compaq Deskpro 386.",
            "path": "deskpro386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:401"
          },
          {
            "name": "NVR: Acer 386SX",
            "note": "CMOS/NVRAM template for Acer 386SX/25N.",
            "path": "acer386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:402"
          },
          {
            "name": "NVR: Amstrad MegaPC",
            "note": "CMOS/NVRAM template for Amstrad MegaPC.",
            "path": "megapc.nvr",
            "required": false,
            "source_ref": "src/nvr.c:403"
          },
          {
            "name": "NVR: AMI 386",
            "note": "CMOS/NVRAM template for AMI 386 clone.",
            "path": "ami386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:404"
          },
          {
            "name": "NVR: AMI 486",
            "note": "CMOS/NVRAM template for AMI 486 clone.",
            "path": "ami486.nvr",
            "required": false,
            "source_ref": "src/nvr.c:405"
          },
          {
            "name": "NVR: AMI WinBIOS 486",
            "note": "CMOS/NVRAM template for AMI WinBIOS 486.",
            "path": "win486.nvr",
            "required": false,
            "source_ref": "src/nvr.c:406"
          },
          {
            "name": "NVR: HOT-433 PCI 486",
            "note": "CMOS/NVRAM template for HOT-433 PCI 486.",
            "path": "hot-433.nvr",
            "required": false,
            "source_ref": "src/nvr.c:407"
          },
          {
            "name": "NVR: Award SiS 496",
            "note": "CMOS/NVRAM template for Award SiS 496/497.",
            "path": "sis496.nvr",
            "required": false,
            "source_ref": "src/nvr.c:408"
          },
          {
            "name": "NVR: Award 430VX",
            "note": "CMOS/NVRAM template for Award 430VX PCI.",
            "path": "430vx.nvr",
            "required": false,
            "source_ref": "src/nvr.c:409"
          },
          {
            "name": "NVR: Intel Premiere/PCI (Batman)",
            "note": "CMOS/NVRAM template for Intel Premiere/PCI.",
            "path": "revenge.nvr",
            "required": false,
            "source_ref": "src/nvr.c:410"
          },
          {
            "name": "NVR: Intel Advanced/EV (Endeavor)",
            "note": "CMOS/NVRAM template for Intel Advanced/EV.",
            "path": "endeavor.nvr",
            "required": false,
            "source_ref": "src/nvr.c:411"
          },
          {
            "name": "NVR: Phoenix 386",
            "note": "CMOS/NVRAM template for Phoenix 386 clone.",
            "path": "px386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:412"
          },
          {
            "name": "NVR: DTK 386",
            "note": "CMOS/NVRAM template for DTK 386SX clone.",
            "path": "dtk386.nvr",
            "required": false,
            "source_ref": "src/nvr.c:413"
          },
          {
            "name": "NVR: DTK 486",
            "note": "CMOS/NVRAM template for DTK 486.",
            "path": "dtk486.nvr",
            "required": false,
            "source_ref": "src/nvr.c:414"
          },
          {
            "name": "NVR: Rise R418",
            "note": "CMOS/NVRAM template for Rise Computer R418.",
            "path": "r418.nvr",
            "required": false,
            "source_ref": "src/nvr.c:415"
          },
          {
            "name": "NVR: Intel Premiere/PCI II (Plato)",
            "note": "CMOS/NVRAM template for Intel Premiere/PCI II.",
            "path": "plato.nvr",
            "required": false,
            "source_ref": "src/nvr.c:416"
          },
          {
            "name": "NVR: PC Partner MB500N",
            "note": "CMOS/NVRAM template for PC Partner MB500N.",
            "path": "mb500n.nvr",
            "required": false,
            "source_ref": "src/nvr.c:417"
          },
          {
            "name": "NVR: Acer M3A",
            "note": "CMOS/NVRAM template for Acer M3A.",
            "path": "acerm3a.nvr",
            "required": false,
            "source_ref": "src/nvr.c:418"
          },
          {
            "name": "NVR: Acer V35N",
            "note": "CMOS/NVRAM template for Acer V35N.",
            "path": "acerv35n.nvr",
            "required": false,
            "source_ref": "src/nvr.c:419"
          },
          {
            "name": "NVR: ASUS P/I-P55T2P4",
            "note": "CMOS/NVRAM template for ASUS P/I-P55T2P4.",
            "path": "p55t2p4.nvr",
            "required": false,
            "source_ref": "src/nvr.c:420"
          },
          {
            "name": "NVR: Epox P55-VA",
            "note": "CMOS/NVRAM template for Epox P55-VA.",
            "path": "p55va.nvr",
            "required": false,
            "source_ref": "src/nvr.c:421"
          },
          {
            "name": "Tandy 1000 HX EEPROM",
            "note": "Tandy 1000 HX EEPROM state (128 bytes). Initializes to zeros if absent.",
            "path": "tandy1000hx.bin",
            "required": false,
            "source_ref": "src/tandy_eeprom.c:128"
          },
          {
            "name": "Tandy 1000 SL/2 EEPROM",
            "note": "Tandy 1000 SL/2 EEPROM state (128 bytes). Initializes to zeros if absent.",
            "path": "tandy1000sl2.bin",
            "required": false,
            "source_ref": "src/tandy_eeprom.c:131"
          },
          {
            "name": "AdLib Gold EEPROM",
            "note": "AdLib Gold sound card EEPROM state (24 bytes). Initializes to defaults if absent.",
            "path": "nvr/adgold.bin",
            "required": false,
            "source_ref": "src/sound_adlibgold.c:789"
          }
        ],
        "notes": {
          "info_divergence": "The .info declares zero firmware (no firmware_count field). The core actually loads 89+ ROM files plus NVR/EEPROM templates.\n",
          "libretro_version": "The libretro port is PCem-mooch v11, a community fork based on PCem v10.1. Upstream PCem has evolved to v17 with many more machines and devices.\n",
          "minimum_requirement": "At minimum, mda.rom (font) and one machine BIOS set are required. The video card ROM for the selected GPU is also needed unless the machine has built-in video (PCjr, Tandy, Amstrad, Acer 386SX, PS/1).\n",
          "nvr_files": "NVR files are CMOS/NVRAM templates providing pre-configured BIOS settings. Shipped with the PCem distribution. Without them the BIOS starts with blank CMOS (user must manually configure). The emulator also writes these back on shutdown.\n",
          "rom_structure": "All ROM files are loaded relative to the RetroArch system directory via romfopen(). Machine BIOS ROMs go in roms/<machine_name>/ subdirectories. Video card ROMs go directly in roms/ (or roms/<card>/ for some). Which ROMs are needed depends on the selected machine model and video card.\n",
          "runtime_state": "The emulator creates additional state files during operation: ATI EEPROM (ati18800.nvr, ati28800.nvr, mach64.nvr), Intel flash (dmi.bin, escd.bin per Pentium machine). These are emulator-generated and not included here.\n"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-pcem",
        "source_commit": "1955c2127990cfdf4c594b35b466e8503d626fa7",
        "systems": [
          "ibm-pc",
          "ibm-xt",
          "ibm-at",
          "ibm-pcjr",
          "ibm-ps1",
          "tandy-1000"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sarah-walker-pcem/pcem"
      }
    },
    {
      "id": "pcsx1",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "r22",
        "cores": [
          "pcsx1"
        ],
        "display_name": "Sony - PlayStation (PCSX1)",
        "emulator": "PCSX1",
        "files": [
          {
            "description": "SCPH-1001 (v2.2 12-04-95 A)",
            "hle_fallback": true,
            "name": "scph1001.bin",
            "priority": 1,
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:1229 (bios[0]), :1181 (size check)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-5501 (v3.0 11-18-96 A)",
            "hle_fallback": true,
            "name": "scph5501.bin",
            "priority": 2,
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:1229 (bios[1]), :1181 (size check)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-7001 (v4.1 12-16-97 A)",
            "hle_fallback": true,
            "name": "scph7001.bin",
            "priority": 3,
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:1229 (bios[2]), :1181 (size check)",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Never-completed fork of PCSX-ReARMed targeting general PC hardware. Experimental, abandoned since 2018. HLE BIOS built-in: if no BIOS file found, core warns and falls back to HLE automatically. BIOS search order: scph1001.bin, scph5501.bin, scph7001.bin by exact filename, then scans system directory for any file matching \"scph*\" (case-insensitive) with size == 512 KB. No region detection, no hash validation. First valid BIOS found is used regardless of region. .info declares scph5500/5501/5502 but code explicitly searches scph1001/5501/7001 first.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/pcsx1-libretro",
        "source_commit": "35dabb85ff3af6825820f54090d344945f65d24e",
        "systems": [
          "sony-playstation"
        ],
        "type": "libretro",
        "upstream": "https://github.com/notaz/pcsx_rearmed"
      }
    },
    {
      "id": "pcsx2",
      "profile": {
        "bios_mode": "agnostic",
        "core_classification": "official_port",
        "core_version": "Git",
        "cores": [
          "pcsx2"
        ],
        "display_name": "Sony - PlayStation 2 (PCSX2)",
        "emulator": "PCSX2",
        "files": [
          {
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "ps2-0230a-20080220.bin",
            "note": "Accepts any file 4-8 MB with valid romdir (RESET + ROMVER). Naming convention ps2-VVVVr-YYYYMMDD.bin (version, region, date).",
            "required": true,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:258-362",
            "validation": [
              "size"
            ]
          },
          {
            "max_size": 4194304,
            "name": "rom1.bin",
            "note": "DVD player ROM. Tries {biospath}.rom1 then {biosbase}.rom1. Silently skipped if missing.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241,366"
          },
          {
            "max_size": 4194304,
            "name": "ROM2.BIN",
            "note": "Chinese ROM extension. Same naming convention as rom1. Only present on Chinese region consoles.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241,367"
          },
          {
            "name": "EROM.BIN",
            "note": "Extended ROM. Present in some BIOS dumps but not loaded by PCSX2 code via LoadExtraRom.",
            "path": null,
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp"
          },
          {
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "DEV9 network adapter EEPROM. Falls back to built-in defaults if missing.",
            "required": false,
            "size": 64,
            "source_ref": "pcsx2/DEV9/DEV9.cpp:110-160"
          },
          {
            "mode": "libretro",
            "name": "GameIndex.yaml",
            "note": "Game compatibility database. OSD warning if missing.",
            "path": "pcsx2/resources/GameIndex.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:46, pcsx2/GameDatabase.cpp:888"
          },
          {
            "mode": "libretro",
            "name": "cheats_ws.zip",
            "note": "Widescreen patches archive.",
            "path": "pcsx2/resources/cheats_ws.zip",
            "required": false,
            "source_ref": "pcsx2/VMManager.cpp:345-358"
          },
          {
            "mode": "libretro",
            "name": "cheats_ni.zip",
            "note": "No-interlacing patches archive.",
            "path": "pcsx2/resources/cheats_ni.zip",
            "required": false,
            "source_ref": "pcsx2/VMManager.cpp:380-393"
          }
        ],
        "notes": "Filename-agnostic BIOS detection. Scans bios/ for any file between 4-8 MB\nwith valid romdir structure (RESET + ROMVER entries). No hash validation.\nCompanion files (.rom1, .rom2, .nvm, .mec) derive paths from selected BIOS.\nROM1 (DVD player) and ROM2 (Chinese extension) silently skipped if missing.\nNVM and MEC auto-created with defaults if missing.\n",
        "profiled_date": "2026-03-30",
        "source": "https://github.com/PCSX2/pcsx2",
        "source_commit": "5c611f85e13ba250a69c155c678482b219b10d48",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/PCSX2/pcsx2"
      }
    },
    {
      "id": "pcsx2-legacy",
      "profile": {
        "bios_mode": "agnostic",
        "core_classification": "frozen_snapshot",
        "core_version": "1.6.0",
        "cores": [
          "pcsx2-legacy",
          "PCSX2-LEGACY"
        ],
        "display_name": "Sony - PlayStation 2 (PCSX2 Legacy)",
        "emulator": "PCSX2 Legacy",
        "files": [
          {
            "description": "PS2 console BIOS",
            "name": "ps2-0230a-20080220.bin",
            "note": "Any file in the BIOS folder whose romdir holds RESET and ROMVER is accepted, whatever its name or size. Naming convention ps2-VVVVr-YYYYMMDD.bin carries version, region and date.",
            "required": true,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:261-323, pcsx2/ps2/BiosTools.cpp:74-167",
            "system": "sony-playstation-2"
          },
          {
            "description": "DVD player ROM",
            "max_size": 262144,
            "name": "rom1.bin",
            "note": "Tried as {bios}.rom1 then {biosbase}.rom1. Read into the 256 KB ROM1 region and truncated to it. Logged and skipped when absent.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:298, pcsx2/MemoryTypes.h:22",
            "system": "sony-playstation-2"
          },
          {
            "description": "Chinese ROM extension",
            "max_size": 524288,
            "name": "ROM2.BIN",
            "note": "Tried as {bios}.rom2 then {biosbase}.rom2. Read into the 512 KB ROM2 region and truncated to it. Present on Chinese region consoles.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:299, pcsx2/MemoryTypes.h:23",
            "system": "sony-playstation-2"
          },
          {
            "description": "DVD player extension ROM",
            "max_size": 1835008,
            "name": "EROM.BIN",
            "note": "Tried as {bios}.erom then {biosbase}.erom. Read into the 1.75 MB EROM region and truncated to it.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:300, pcsx2/MemoryTypes.h:24",
            "system": "sony-playstation-2"
          },
          {
            "description": "DEV9 network adapter EEPROM",
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "Opened by the DEV9ghzdrk plugin from the working directory and mapped over 64 bytes. A compiled-in EEPROM holding the default MAC stands in when the file is missing or cannot be mapped.",
            "required": false,
            "size": 64,
            "source_ref": "plugins/dev9ghzdrk/DEV9.cpp:176-227, plugins/dev9ghzdrk/DEV9.cpp:71-81",
            "system": "sony-playstation-2"
          },
          {
            "description": "DEV9 SmartMedia flash image",
            "hle_fallback": true,
            "max_size": 8650752,
            "name": "flash.dat",
            "note": "Opened by the DEV9ghzdrk plugin from the working directory at 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 or short.",
            "required": false,
            "source_ref": "plugins/dev9ghzdrk/flash.cpp:60-83, plugins/dev9ghzdrk/flash.cpp:21-28",
            "system": "sony-playstation-2"
          }
        ],
        "mode": "standalone",
        "notes": "wxWidgets line, frozen at 1.6.0. Emulation is split across separate plugin\nbinaries loaded at runtime: GSdx, Spu2-X, LilyPad, cdvdGigaherz, DEV9ghzdrk,\nUSBnull and FWnull. Default BIOS folder is bios/ under the user documents\ndirectory.\nref: pcsx2/gui/AppConfig.cpp:76-80, pcsx2/gui/AppConfig.cpp:192-195\n\nBIOS selection lists every file in the folder with a *.* mask and keeps the\nones whose romdir carries a RESET entry followed by a readable ROMVER, which\nsupplies the version, the zone letter and the build date. Neither size nor\nhash is checked; the length test that would reject small images is commented\nout. A missing or zero-length image raises BiosLoadFailed.\nref: pcsx2/gui/Panels/BiosSelectorPanel.cpp:151-177,\n     pcsx2/ps2/BiosTools.cpp:74-167, pcsx2/ps2/BiosTools.cpp:325-341,\n     pcsx2/ps2/BiosTools.cpp:261-323\n\nThe three companion ROMs derive from the selected BIOS path. Each extension\nis first appended to the full name, then substituted for the existing one, so\na BIOS at scph39001.bin is followed by scph39001.bin.rom1 then scph39001.rom1.\nA missing companion is logged and skipped, and a read error is downgraded to a\nwarning. Every read is truncated to its destination region: 256 KB for rom1,\n512 KB for rom2, 1.75 MB for erom.\nref: pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:298-300,\n     pcsx2/MemoryTypes.h:21-24\n\nThe nvm and mec companions follow the same naming rule and are written with\ndefaults when absent, so neither is user-supplied: 1024 zero bytes plus an\niLink id for nvm, the four bytes 03 06 02 00 for mec.\nref: pcsx2/CDVD/CDVD.cpp:93-122, pcsx2/CDVD/CDVD.cpp:138-182\n\nTwo entries pair an XOR fold of the whole 4 MB ROM region with a ROMVER\nversion to select debugger thread offsets. They gate nothing and cover no\nfile on disk.\nref: pcsx2/ps2/BiosTools.cpp:57-62, pcsx2/ps2/BiosTools.cpp:175-181,\n     pcsx2/ps2/BiosTools.cpp:305-313\n\nAn IRX image is injected at ROM+0x3C0000 when one is named on the command\nline. The path is whatever the user passes, so there is no fixed file.\nref: pcsx2/ps2/BiosTools.cpp:302-303, pcsx2/gui/AppInit.cpp:542\n\nShipped in the distribution tree and read from it: GameIndex.dbf, the\nwidescreen patch archive cheats_ws.zip, which is skipped when a cheats_ws\nfolder holds the patches, the pcsx2_Main and pcsx2_Iconized catalogs under\nLangs, and the external shader pair shaders/GSdx.fx and\nshaders/GSdx_FX_Settings.ini, off by default.\nref: pcsx2/gui/AppGameDatabase.h:53, pcsx2/gui/AppCoreThread.cpp:459-465,\n     pcsx2/gui/i18n.cpp:82-89, plugins/GSdx/GSdx.cpp:441-443\n\nhost.irx sits behind a comment. ps2hw.dat is read only by zerogs and\nzzogl-pg, both gated on EXTRA_PLUGINS, which carries no default and is off,\nand both absent from the Windows solution that builds the release. USBqemu\nships in the same disused solution and GSdx_legacy is gated on GSDX_LEGACY.\nref: pcsx2/ps2/BiosTools.cpp:296, cmake/SelectPcsx2Plugins.cmake:178-209,\n     cmake/BuildParameters.cmake:41-50, old_plugins.sln\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/PCSX2/pcsx2",
        "source_commit": "aaaf29557fe63870ede815dd6d2e48a98279ca59",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "standalone",
        "upstream": "https://github.com/PCSX2/pcsx2"
      }
    },
    {
      "id": "pcsx2x6",
      "profile": {
        "bios_mode": "agnostic",
        "core_classification": "enhanced_fork",
        "core_version": "v0.2.20",
        "cores": [
          "pcsx2x6",
          "PCSX2X6"
        ],
        "display_name": "Namco - System 246 / 256 (PCSX2x6)",
        "emulator": "PCSX2x6",
        "files": [
          {
            "aliases": [
              "COH-H31000.BIN",
              "246C.bin",
              "256.BIN"
            ],
            "description": "COH-H arcade board BIOS",
            "max_size": 8388608,
            "min_size": 4194304,
            "name": "COH-H31100.rom0",
            "note": "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; a manually selected image skips it. Named after the board model by the dumper, extension rom0. The aliases are the three board dumps held here, COH-H31000, System 246C and System 256; each carries its romdir at 0x2740 and answers the same test.",
            "required": true,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:268-292, pcsx2/ps2/BiosTools.cpp:80-207, pcsx2/ps2/BiosTools.cpp:327-379",
            "system": "namco-system246",
            "validation": [
              "size"
            ]
          },
          {
            "description": "ROM1 board region",
            "max_size": 4194304,
            "name": "COH-H31100.rom1",
            "note": "Tried as {bios}.rom1 then {biosbase}.rom1. Read into the 4 MB ROM1 region and truncated to it. Logged and skipped when absent. Mapped at 0xB0000000, where rom0:ACDEV declares rom1: on a COH-H.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/ps2/BiosTools.cpp:376, pcsx2/MemoryTypes.h:14, pcsx2/Memory.cpp:416",
            "system": "namco-system246"
          },
          {
            "description": "ROM2 board region",
            "max_size": 4194304,
            "name": "COH-H31100.rom2",
            "note": "Tried as {bios}.rom2 then {biosbase}.rom2. Read into the 4 MB ROM2 region and truncated to it. The dumper reads 512 KB off the board.",
            "required": false,
            "source_ref": "pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/ps2/BiosTools.cpp:377, pcsx2/MemoryTypes.h:15",
            "system": "namco-system246"
          },
          {
            "aliases": [
              "COH-H31000.NVM",
              "246C.nvm",
              "256.NVM"
            ],
            "description": "Board NVRAM",
            "hle_fallback": true,
            "name": "COH-H31100.nvm",
            "note": "Read from the BIOS path with the extension replaced by nvm. Carries the iLinkId the 256 games read as a regional signature; a hardcoded id stands in when the file is missing or blank there. A default image is built when the file cannot be read.",
            "required": false,
            "size": 1024,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:47, pcsx2/CDVD/CDVD.cpp:140-178, pcsx2/CDVD/CDVD.cpp:2608",
            "system": "namco-system246"
          },
          {
            "aliases": [
              "COH-H31000.MEC",
              "246C.mec",
              "256.MEC"
            ],
            "description": "Mechacon version",
            "hle_fallback": true,
            "name": "COH-H31100.mec",
            "note": "Read from the BIOS path with the extension replaced by mec. Written with 0x0104020A, the version of a COH-H31100, when absent.",
            "required": false,
            "size": 4,
            "source_ref": "pcsx2/CDVD/CDVD.cpp:51-52, pcsx2/CDVD/CDVD.cpp:196-209",
            "system": "namco-system246"
          },
          {
            "description": "DEV9 EEPROM",
            "hle_fallback": true,
            "name": "eeprom.dat",
            "note": "Opened from the working directory at DEV9 init and mapped over 64 bytes. A compiled-in 64 byte image stands in when the file is missing or cannot be mapped.",
            "required": false,
            "size": 64,
            "source_ref": "pcsx2/DEV9/DEV9.cpp:67-77, pcsx2/DEV9/DEV9.cpp:116-167",
            "system": "namco-system246"
          },
          {
            "description": "DEV9 SmartMedia flash image",
            "hle_fallback": true,
            "max_size": 8650752,
            "name": "flash.dat",
            "note": "Opened from the working directory at DEV9 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 or short.",
            "required": false,
            "source_ref": "pcsx2/DEV9/flash.cpp:9-16, pcsx2/DEV9/flash.cpp:62-86, pcsx2/DEV9/DEV9.cpp:114",
            "system": "namco-system246"
          },
          {
            "description": "Arcade game database",
            "name": "GameIndex.yaml",
            "note": "Keyed by NM gameid, one entry per arcade title, carrying the board variant, the media type, the boot program and the GS fixes. Supplies the platform and media values a minimal .acgame leaves out. Console error when missing.",
            "path": "bin/resources/GameIndex.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:39, pcsx2/GameDatabase.cpp:979-990, pcsx2/VMManager.cpp:1385-1415",
            "system": "namco-system246"
          },
          {
            "description": "Disc hash database",
            "name": "RedumpDatabase.yaml",
            "note": "Read on demand to match a disc against its catalogue entry in the game summary. Console error when missing.",
            "path": "bin/resources/RedumpDatabase.yaml",
            "required": false,
            "source_ref": "pcsx2/GameDatabase.cpp:1086, pcsx2/GameDatabase.cpp:1143-1152",
            "system": "namco-system246"
          },
          {
            "description": "Bundled patch archive",
            "name": "patches.zip",
            "note": "Opened read-only from the resources folder. Built-in patches are unavailable and an on-screen error is shown when it cannot be opened. Fetched from the patches repository at build time, not committed.",
            "path": "bin/resources/patches.zip",
            "required": false,
            "source_ref": "pcsx2/Patch.cpp:117, pcsx2/Patch.cpp:289-315, .github/workflows/linux_build_qt.yml:129",
            "system": "namco-system246"
          },
          {
            "description": "SDL controller mapping database",
            "name": "game_controller_db.txt",
            "note": "A copy in the user data root takes precedence over the one in resources. Fed to SDL as a hint; without either, SDL falls back to its built-in mappings and an error is logged.",
            "path": "bin/resources/game_controller_db.txt",
            "required": false,
            "source_ref": "pcsx2/Input/SDLInputSource.cpp:24, pcsx2/Input/SDLInputSource.cpp:614-629",
            "system": "namco-system246"
          }
        ],
        "notes": "Namco System 246 and 256 arcade boards, which are Sony COH-H PlayStation 2\nmotherboards. The Namco hardware sits on the DEV9 bus: ATA and ATAPI media,\nthe ACCORE interrupt controller, JVS input, the expansion RAM board and the\nsettings SRAM. Super 256 is the 256 with a higher bus clock, selected by\nplatform=super256 in the game config.\nref: pcsx2/DEV9/ACATA.cpp, pcsx2/DEV9/ACCORE.cpp, pcsx2/DEV9/ACJV.cpp,\n     pcsx2/DEV9/ACRAM.cpp, pcsx2/DEV9/ACSRAM.cpp, pcsx2/VMManager.cpp:1382-1418\n\nThe BIOS must come from a COH-H board. A romver whose region letter is T\nfollowed by Z is read as zone COH-H, region 11, and the EXTINFO serial names\nthe board: 20040519-145634 for System 256, 20021119-163841 for System 246\nRack C, 20000901-114731 for the COH-H A-000-010. Boot aborts when no image\nloads.\nref: pcsx2/ps2/BiosTools.cpp:149-153, pcsx2/ps2/BiosTools.cpp:178-181,\n     pcsx2/VMManager.cpp:1657-1667\n\nDetection is by content. The scan lists the BIOS folder with a * mask, keeps\nfiles between 4 and 8 MB, and accepts the ones whose romdir carries a RESET\nentry followed by a readable ROMVER; EXTINFO supplies the serial. The picker\nin the settings window runs the same romdir test without the size filter, so\na manually selected image of any length is accepted. No name and no hash is\nmatched anywhere.\nref: pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-207,\n     pcsx2/ps2/BiosTools.cpp:268-292,\n     pcsx2-qt/Settings/BIOSSettingsWidget.cpp:65-73\n\nCompanions derive from the selected BIOS path. Each extension is appended to\nthe full name first, then substituted for the existing one, so an image at\nCOH-H31100.rom0 is followed by COH-H31100.rom0.rom1 then COH-H31100.rom1.\nThe project's dumper writes that exact set from a live board: .rom0 of\n0x400000, .rom1 of 0x400000, .rom2 of 0x80000, .nvm of 1024 bytes and .mec\nof 4 bytes, all named after the board model.\nref: pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/CDVD/CDVD.cpp:164-167,\n     biosdrain dump.c:32-36, biosdrain dump.c:70-120\n\nA game is launched from an .acgame config in INI form. It names the boot elf,\nthe security dongle image in the memcards folder, an optional save card, the\nCD/DVD/HDD image and the settings SRAM, and everything but the seven\ncharacter NM gameid can be resolved from the shipped database. Those files\nare the game itself, one set per title.\nref: pcsx2/VMManager.cpp:1345-1490, pcsx2/VMManager.cpp:2667-2670,\n     pcsx2/DEV9/ACSRAM.cpp:17-40\n\nThe 256 regional signature normally comes from the iLinkId held in the nvm.\nA 256Region entry in the .acgame feeds ASIA4, ASIA5 or JAPAN into the\nmechacon read instead, which the Taiko games use to pick their region.\nref: pcsx2/CDVD/CDVD.cpp:2595-2608, pcsx2/VMManager.cpp:1371-1378\n\nRead from the distribution tree and versioned with the build: the shader\nsources every GS backend compiles at startup, the OSD fonts and fullscreen\nUI textures, and the achievement notification sounds.\nref: pcsx2/GS/Renderers/Common/GSDevice.cpp:363-366,\n     pcsx2/ImGui/ImGuiFullscreen.cpp:300, pcsx2/ImGui/ImGuiFullscreen.cpp:396,\n     pcsx2/Achievements.cpp:1158, pcsx2/Achievements.cpp:1214,\n     pcsx2/Achievements.cpp:1339\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/PS2Homebrew-arcade/pcsx2x6",
        "source_commit": "e69b265ef4bc98565deffb7c4a4b7d08143d4cf9",
        "systems": [
          "namco-system246",
          "namco-system256"
        ],
        "type": "standalone",
        "upstream": "https://github.com/PCSX2/pcsx2",
        "upstream_commit": "5c611f85e13ba250a69c155c678482b219b10d48"
      }
    },
    {
      "id": "pcsx_rearmed",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "r25",
        "cores": [
          "pcsx_rearmed",
          "pcsx_rearmed_neon",
          "pcsx_rearmed_interpreter"
        ],
        "display_name": "Sony - PlayStation (PCSX ReARMed)",
        "emulator": "PCSX-ReARMed",
        "files": [
          {
            "description": "SCPH-5500 (v3.0 09-09-96 J)",
            "hle_fallback": true,
            "name": "scph5500.bin",
            "note": "Preferred JP BIOS, searched first by exact filename.",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[0])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-5501 (v3.0 11-18-96 A)",
            "hle_fallback": true,
            "name": "scph5501.bin",
            "note": "Preferred US BIOS, searched first by exact filename.",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[1])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-5502 (v3.0 01-06-97 E)",
            "hle_fallback": true,
            "name": "scph5502.bin",
            "note": "Preferred EU BIOS, searched first by exact filename.",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[2])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "PSP embedded PS1 BIOS (region detected at runtime)",
            "hle_fallback": true,
            "name": "psxonpsp660.bin",
            "note": "Region detected from content at runtime. Must be 512 KB in libretro context.",
            "region": [
              "world"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[3])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-101 (v4.4 03-24-00 A) - PSone US",
            "hle_fallback": true,
            "name": "scph101.bin",
            "note": "PSone slim model.",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[4])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-7001 (v4.1 12-16-97 A)",
            "hle_fallback": true,
            "name": "scph7001.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[5])",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SCPH-1001 (v2.2 12-04-95 A)",
            "hle_fallback": true,
            "name": "scph1001.bin",
            "note": "Original US model. Last in the explicit filename search list.",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[6])",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "HLE BIOS built-in: core option pcsx_rearmed_bios = \"HLE\" bypasses real BIOS entirely. Default is \"auto\" which searches system dir for listed filenames, then scans all files. Region detection reads bytes at offset 0x7ff51: \" E\" = EU, \" J\" = JP, else US. Three CRC32 hardcoded as JP override: 0x18D0F7D8, 0x3B601FC8, 0x3539DEF6 (psxonpsp, scph1000). BIOS validity check: byte pattern at offset 1 (\\x00\\x08\\x3c\\x3f) or string \"PS compatible\" at 0x12c. Files named \"unirom\" (case-insensitive) are explicitly skipped. Region fallback: if the matching-region BIOS is missing, any available region BIOS is used over HLE. Three region slots: US (index 0), JP (index 1), EU (index 2) stored in Config.Bios[].\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/pcsx_rearmed",
        "source_commit": "da2cb8ecd17fd0932ab6d94774c0522beebce6e3",
        "systems": [
          "sony-playstation"
        ],
        "type": "libretro",
        "upstream": "https://github.com/notaz/pcsx_rearmed"
      }
    },
    {
      "id": "pd777",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v1.0.0",
        "cores": [
          "pd777"
        ],
        "display_name": "Epoch - Cassette Vision (PD777)",
        "emulator": "PD777",
        "files": [],
        "notes": "PD777 is an Epoch Cassette Vision emulator (NEC uPD777C CPU), by\nW88DodPECuThLOl. Libretro port by Ken Mitton (mittonk).\n\nNo BIOS or firmware files required. The .info file declares firmware_count = 0.\n\nGame loading in source/libretro/libretro.cpp:retro_load_game() (line 404-532).\nThe core loads a code ROM file (.bin777) directly from the content path, then\nattempts to load a pattern ROM file (.ptn777) by replacing the extension.\n\nIf neither file is found, the core falls back to hardcoded ROM data compiled\nfrom source/core/rom.cpp (Battle Vader program + pattern ROM dumps from\noguchi-rd.com).\n\nThe code ROM supports three formats:\n  - Raw order: exactly 0xF00 bytes, program words in sequential address order\n  - Raw address: address/data pairs (compiled-in rawRom[] array)\n  - Formatted: header starting with \"_CassetteVision_000\" magic, version 0 or 1,\n    includes key mapping, title, and code section at offset 0x100\n\nThe pattern ROM supports three formats:\n  - Formatted: 0x340 bytes, header \"*CassetteVision*0000\", 7x7 + 8x7 CG patterns\n  - Raw bitstream: 0x4D0 bytes, bit-packed 7x7 and 8x7 character patterns\n  - Built-in: fallback to patternRom[] / patternRom8[] arrays in rom.cpp\n\nThe system directory path is retrieved via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY\nbut is not used for any file loading.\n\nGame identification uses a checksum over the loaded ROM to detect known cassettes\n(Battle Vader, Galaxian, etc.) and apply per-game key mappings and bent character\ntables. 11 cassette IDs are recognized (1-9, 11, 12).\n\nSupported extensions: zip, bin777, ptn777.\n",
        "platform_details": {
          "cpu": "NEC uPD777C (uPD774 variant)",
          "notes": "The Cassette Vision uses a NEC uPD777C (or uPD774 variant) as its main\nprocessor. Program ROM and pattern/character ROM are per-cartridge, not\nsystem-level. There is no system BIOS - the CPU executes directly from\nthe cartridge ROM.\n\nThe emulator supports analog paddles (4 paddles mapped to 2 analog sticks),\nlever switches, push buttons, course switch, and a lightgun peripheral.\n",
          "region": "Japan",
          "system": "Epoch Cassette Vision (1981)"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/mittonk/PD777",
        "source_commit": "9ce5af01c7c0fd16f7e034fe549380854ee61338",
        "systems": [
          "epochcv"
        ],
        "type": "libretro",
        "upstream": "https://github.com/W88DodPECuThLOl/PD777"
      }
    },
    {
      "id": "picodrive",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.99",
        "cores": [
          "picodrive"
        ],
        "display_name": "Sega - MS/GG/MD/CD/32X (PicoDrive)",
        "emulator": "PicoDrive",
        "files": [
          {
            "name": "carthw.cfg",
            "note": "Cartridge hardware database for special mapper and EEPROM detection. Built-in fallback compiled into the core.",
            "required": false,
            "source_ref": "platform/libretro/libretro.c:1619, pico/cart.c:1020-1022"
          },
          {
            "name": "us_scd2_9306.bin",
            "note": "US Sega CD Model 2 BIOS (September 1993). First in US search order.",
            "priority": 1,
            "region": [
              "north-america"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1265",
            "system": "sega-segacd"
          },
          {
            "name": "SegaCDBIOS9303.bin",
            "note": "US Sega CD BIOS (March 1993). Second in US search order.",
            "priority": 2,
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1265",
            "system": "sega-segacd"
          },
          {
            "name": "us_scd1_9210.bin",
            "note": "US Sega CD Model 1 BIOS (October 1992). Third in US search order.",
            "priority": 3,
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1265",
            "system": "sega-segacd"
          },
          {
            "name": "bios_CD_U.bin",
            "note": "US Sega CD BIOS (generic name). Last in US search order.",
            "priority": 4,
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1265",
            "system": "sega-segacd"
          },
          {
            "name": "eu_mcd2_9306.bin",
            "note": "EU Mega CD Model 2 BIOS (June 1993). First in EU search order.",
            "priority": 1,
            "region": [
              "europe"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1268",
            "system": "sega-megacd"
          },
          {
            "name": "eu_mcd2_9303.bin",
            "note": "EU Mega CD Model 2 BIOS (March 1993). Second in EU search order.",
            "priority": 2,
            "region": [
              "europe"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1268",
            "system": "sega-megacd"
          },
          {
            "name": "eu_mcd1_9210.bin",
            "note": "EU Mega CD Model 1 BIOS (October 1992). Third in EU search order.",
            "priority": 3,
            "region": [
              "europe"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1268",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_E.bin",
            "note": "EU Mega CD BIOS (generic name). Last in EU search order.",
            "priority": 4,
            "region": [
              "europe"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1268",
            "system": "sega-megacd"
          },
          {
            "name": "jp_mcd2_921222.bin",
            "note": "JP Mega CD Model 2 BIOS (December 1992). First in JP search order.",
            "priority": 1,
            "region": [
              "japan"
            ],
            "required": true,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1271",
            "system": "sega-megacd"
          },
          {
            "name": "jp_mcd1_9112.bin",
            "note": "JP Mega CD Model 1 BIOS (December 1991). Second in JP search order.",
            "priority": 2,
            "region": [
              "japan"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1271",
            "system": "sega-megacd"
          },
          {
            "name": "jp_mcd1_9111.bin",
            "note": "JP Mega CD Model 1 BIOS (November 1991). Third in JP search order.",
            "priority": 3,
            "region": [
              "japan"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1271",
            "system": "sega-megacd"
          },
          {
            "name": "bios_CD_J.bin",
            "note": "JP Mega CD BIOS (generic name). Last in JP search order.",
            "priority": 4,
            "region": [
              "japan"
            ],
            "required": false,
            "size": 131072,
            "source_ref": "platform/libretro/libretro.c:1271",
            "system": "sega-megacd"
          },
          {
            "hle_fallback": true,
            "name": "32X_G_BIOS.BIN",
            "note": "32X 68K (Genesis-side) BIOS. HLE replacement generated when NULL.",
            "required": false,
            "size": 256,
            "source_ref": "pico/32x/memory.c:2206-2243",
            "system": "sega-32x"
          },
          {
            "hle_fallback": true,
            "name": "32X_M_BIOS.BIN",
            "note": "32X Master SH2 BIOS. HLE replacement generated when NULL.",
            "required": false,
            "size": 2048,
            "source_ref": "pico/32x/memory.c:2249-2276",
            "system": "sega-32x"
          },
          {
            "hle_fallback": true,
            "name": "32X_S_BIOS.BIN",
            "note": "32X Slave SH2 BIOS. HLE replacement generated when NULL.",
            "required": false,
            "size": 1024,
            "source_ref": "pico/32x/memory.c:2279-2297",
            "system": "sega-32x"
          }
        ],
        "notes": "PicoDrive is a fast Mega Drive / Genesis emulator with Mega CD, 32X, Master\nSystem, Game Gear, SG-1000, SC-3000 and Sega Pico support. The libretro port\nis part of the PicoDrive source tree (platform/libretro/).\n\nMega CD / Sega CD games require a region-matching BIOS file. The core searches\nthe system directory for each name in order, trying .bin then .zip extension,\nand uses the first file found. If no BIOS is found, CD games fail to load with\nPM_BAD_CD_NO_BIOS. MSU-MD games can run without BIOS.\n\nBIOS filename search order (platform/libretro/libretro.c:1264-1328):\n  US: us_scd2_9306, SegaCDBIOS9303, us_scd1_9210, bios_CD_U\n  EU: eu_mcd2_9306, eu_mcd2_9303, eu_mcd1_9210, bios_CD_E\n  JP: jp_mcd2_921222, jp_mcd1_9112, jp_mcd1_9111, bios_CD_J\n\n32X BIOS files (m68k, master SH2, slave SH2) are fully optional. The engine\nhas built-in HLE that generates replacement code at startup when the BIOS\npointers are NULL (pico/32x/memory.c:2199 get_bios(), pico/32x/32x.c:172).\nNo current frontend (libretro or standalone) loads these files; the standalone\nloading code is disabled (#if 0 in platform/common/emu.c:1529).\n\ncarthw.cfg is a cartridge hardware database loaded from the system directory.\nA built-in version is compiled into the core (pico/carthw_cfg.c). The external\nfile supplements or overrides game-specific hardware detection (SVP, EEPROM\ntypes, special mappers, copy protection).\n\nMaster System, Game Gear, SG-1000, SC-3000: no BIOS file loaded. The core\ninitializes VDP registers and RAM to simulate post-BIOS state\n(pico/sms.c:1080-1097).\n",
        "platform_details": {
          "32x": {
            "hle_available": true,
            "m68k_bios_size": 256,
            "master_sh2_bios_size": 2048,
            "slave_sh2_bios_size": 1024,
            "source_ref": "pico/pico.h:54-55, pico/pico_int.h:679-693"
          },
          "megacd": {
            "bios_size": 131072,
            "extensions_tried": [
              ".bin",
              ".zip"
            ],
            "hle_available": false,
            "region_specific": true,
            "source_ref": "pico/pico_int.h:559, platform/libretro/libretro.c:1309-1317"
          },
          "sms": {
            "hle_available": true,
            "note": "No BIOS file loaded. VDP/RAM initialized to post-BIOS state.",
            "source_ref": "pico/sms.c:1080-1097"
          }
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/picodrive",
        "source_commit": "6248b51ffbe212ce441de023ccea6b10fa4d7082",
        "systems": [
          "sega-megadrive",
          "sega-genesis",
          "sega-megacd",
          "sega-segacd",
          "sega-32x",
          "sega-mastersystem",
          "sega-gamegear",
          "sega-sg1000",
          "sega-sc3000",
          "sega-pico"
        ],
        "type": "libretro",
        "upstream": "https://github.com/irixxxx/picodrive"
      }
    },
    {
      "id": "pizza-boy-gba",
      "profile": {
        "author": "Pizza Emulators",
        "core_classification": "embedded_hle",
        "core_version": "2.8.13",
        "cores": [
          "pizza-boy-gba",
          "Pizza Boy GBA",
          "PIZZA-BOY-GBA"
        ],
        "display_name": "Nintendo - Game Boy Advance (Pizza Boy GBA)",
        "emulator": "Pizza Boy GBA",
        "files": [
          {
            "agnostic": true,
            "config_key": "bios_file",
            "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, when the picked document is named .zip, taken from its first entry; the legacy browser offers .gba, .bin and .zip and writes the entry it extracts to bios.bin under the application directory. The absolute path is stored and handed to the library, which copies it into a 256 byte buffer. At load time the 16 KB BIOS area is first filled with a 744 byte replacement compiled into the library, then, if the path is set, the file is opened and up to 16384 bytes are read over it and a flag records that a real image is installed. Nothing about the file is examined: any read returning at least one byte is accepted, and no size, name or hash test exists on either side of the bridge. A read of zero bytes leaves the replacement in place and logs \"Cannot read BIOS file\".",
            "required": false,
            "size": 16384,
            "source_ref": "Pizza Boy GBA Pro 2.8.13 SettingsActivity.java:116-140 (import), :143-183 (preference and picker), FileDialog.java:57,72,77,846-857 (legacy browser, zip entry to bios.bin), Common.java:85-105 (copy to temp), :160-190 (single entry unzip), MainActivity.java:833,835,865 (bridge), :10936-10941 (gate and handoff), res/xml/pref_general.xml (defaults); Pizza Boy A Basic 2.3.3 libpizzaboy-jni.so pizza.c:932-938 (path buffer), :945-946 (boot flag), :632-642 (low precision BIOS), global.c:93-95 (defaults), mmu.c:1522-1543 (replacement, gate, read, flag), :2106-2110 (forced HLE), cpu.c:40 (boot vector)",
            "system": "nintendo-gba"
          }
        ],
        "mode": "standalone",
        "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy A name, reached by ES-DE through its PIZZA-BOY-GBA find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboygbapro, the paid build\nthe rule names first, and it.dbtecno.pizzaboygba, the free one. Two Play distribution\nbuilds are read here, both carrying the source stamp: Pro 2.8.13 (versionCode 343,\nPlay App Signing certificate sha256\n6b5547246e41921f25eba8abb1bc018729c4f0b8db029debbd3380a2b1ec2fe1), which supplies the\nJava and the resources, and Basic 2.3.3 (versionCode 236, developer certificate sha256\nb3ee584096acf4667bb9346daa9cce19237ef7ce95c99e9260ac89be0f7d6130, CN=Davide Berra,\nO=DBTecno), whose arm64-v8a libpizzaboy-jni.so ships DWARF and an unstripped symbol\ntable and supplies every native reference below as its own file and line. Java line\nnumbers are those of Pro 2.8.13. Two rebuilt copies of Pro 1.35.11 were rejected on\ntheir certificate, one signed C=debugging with no source stamp and one signed\nO=APKMODY. 69 of the 77 native methods the Pro declares are exported by the Basic\ncore, the three BIOS entry points among them: one core, compiled per package.\n\nOne system is emulated, Game Boy Advance: the core is built from a tree named\npizzaboyadvance whose compilation units carry gba.c and no Game Boy core, and the\nthree Game Boy Color and Super Game Boy methods the Pro still declares are among the\neight the library does not export.\n\nThe BIOS is the one file the user supplies, and it is read only while Load BIOS file\nis on, off by default; the picker and the Run BIOS animation switch, on by default,\nboth depend on that box (res/xml/pref_general.xml). In the free package the same\nthree preferences are declared android:enabled=\"false\".\n\nA per rom Low precision BIOS set to On clears the stored path and makes the core keep\nits own replacement, and one cartridge, checksum 0xc7d89508, forces the same at load\ntime. When a real image is installed the boot animation starts execution at 0 rather\nthan at the cartridge entry, and a multiplayer session exchanges the CRC32 of the file\nso that both peers run the same one.\n\nEverything else the app opens it makes itself: boxart.db and cheat.db are created by\ntheir own CREATE TABLE, the default skins, the shaders and the cheat descriptors are\nraw resources unpacked at first run, and <rom>.keys is an input recording. The\nobfuscated assets are PairIP tamper protection.\n",
        "profiled_date": "2026-08-12",
        "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygbapro",
        "systems": [
          "nintendo-gba"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "pizza-boy-gbc",
      "profile": {
        "author": "Pizza Emulators",
        "core_classification": "embedded_hle",
        "core_version": "6.0.6",
        "cores": [
          "pizza-boy-gbc",
          "Pizza Boy GBC",
          "PIZZA-BOY-GBC"
        ],
        "display_name": "Nintendo - Game Boy / Color (Pizza Boy GBC)",
        "emulator": "Pizza Boy GBC",
        "files": [
          {
            "agnostic": true,
            "config_key": "bios_file",
            "description": "Game Boy (DMG) boot ROM",
            "hle_fallback": true,
            "name": "dmg_boot.bin",
            "note": "Chosen from any location under any name through the document picker and copied into the application directory under the name the picker reports; the legacy browser offers .gbc, .gb, .bin and .zip and writes the entry it extracts from a zip to bios.bin. The absolute path is stored and handed to the library, which copies it into a 256 byte buffer. It is used when the ROM name ends in .gb or .sgb, and only on the first run of that ROM and with no multiplayer peer connected. The file is read into a second MMU image, up to 8192 bytes, and a count of exactly 256 starts the run as a Game Boy, keeping the default palette. Nothing else is examined: no name, size range, header or hash test exists on either side of the bridge, and a count that is neither 256 nor 2304 is refused. A multiplayer session exchanges the CRC32 of this file so that both peers run the same one.",
            "required": false,
            "size": 256,
            "source_ref": "Pizza Boy GBC Pro 6.0.6 MainActivity.java:702 (native method), :8067-8081 (gate and slot selection), :1734-1757 (CRC32 of the file), :1907, :2136 (multiplayer handshake), SettingsActivity.java:40-41 (request codes), :96-113 (picker result and copy), :116-192 (both preferences), Common.java:42 (copy to the application directory), FileDialog.java:949-975 (legacy browser, zip entry to bios.bin), res/xml/pref_general.xml:89-99 (defaults); Pizza Boy C Basic 4.1.6 libpizzaboy-jni.so pizza.c:1023-1024 (path into global_bios_file), global.c:28 (char[256]), mmu.c:431-463 (open, 64 KB clear, 8192 byte read, cartridge header copy, 256 and 2304 gate, refusal), gameboy.c:1161-1168 (conditions and call), :1171, :1238 (failure), :1179-1198 (model, MMU switch, program counter at 0, accumulator), :1201-1235 (run to 0x100, return to the cartridge)",
            "system": "nintendo-gb",
            "validation": [
              "size"
            ]
          },
          {
            "agnostic": true,
            "config_key": "bios_file_cgb",
            "description": "Game Boy Color (CGB) boot ROM",
            "hle_fallback": true,
            "name": "cgb_boot.bin",
            "note": "Same picker, same copy and same handoff as the Game Boy slot, used for every ROM whose name does not end in .gb or .sgb. A count of exactly 2304 starts the run as a Game Boy Color, which sets the accumulator to 0x11 and keeps the hardware palettes instead of reloading the default one. The 0x100 to 0x1FF window of the image is overwritten with the cartridge header before execution, which is the gap the 2304 byte layout leaves for it.",
            "required": false,
            "size": 2304,
            "source_ref": "Pizza Boy GBC Pro 6.0.6 MainActivity.java:8073-8078 (slot selection), SettingsActivity.java:98 (preference key), :158-192 (preference and picker), res/xml/pref_general.xml:97-99; Pizza Boy C Basic 4.1.6 libpizzaboy-jni.so mmu.c:435-452 (read, header copy, 2304 gate), gameboy.c:1179 (model from the return value), :1189-1198 (program counter, accumulator, palette)",
            "system": "nintendo-gbc",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy C name, reached by ES-DE through its PIZZA-BOY-GBC find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboypro, the paid build the\nrule names first, and it.dbtecno.pizzaboy, the free one. Two Play distribution builds\nare read here, both carrying the developer certificate sha256\nb3ee584096acf4667bb9346daa9cce19237ef7ce95c99e9260ac89be0f7d6130 (CN=Davide Berra,\nO=DBTecno) and a source stamp: Pro 6.0.6 (versionCode 231), which supplies the Java\nand the resources, and Basic 4.1.6 (versionCode 202), whose arm64-v8a\nlibpizzaboy-jni.so ships DWARF and an unstripped symbol table and supplies every\nnative reference below as its own file and line. Java line numbers are those of Pro\n6.0.6. The Pro on the store is 7.4.5 (versionCode 324) and no genuine copy of it is\nreachable: apkcombo bounces the download page of a paid app back to the app page,\napkvision carries no copy, and archive.org holds 6.0.6 alone. The Pro ships its core\nas a stripped armeabi-v7a build; it carries the same log strings and the same\nconstants as the Basic core, the 64 KB clear, the 8192 byte read cap, the 256 byte\nheader copy and the 256 and 2304 byte gate, and 65 of the 70 entry points it exports\nare exported by the Basic core as well. The Pro also ships libpizza-jni.so, an\nolder core exporting the free package JNI names and carrying no BIOS entry point,\nwhich no loadLibrary call reaches.\n\nThree systems are emulated from one tree named pizzaboy, whose compilation units\ncarry gameboy.c, mmu.c, sgb.c and camera.c: Game Boy, Game Boy Color and Super Game\nBoy. The SGB command set, borders and palettes are handled by sgb.c behind a Super\nGame Boy switch that is on by default, with a preference that gives Game Boy Color\nprecedence over Super Game Boy on a cartridge that offers both. camera.c drives the\nGame Boy Camera cartridge from the device camera, and the Game Boy Printer is served\nover the link port.\n\nThe boot ROM is the one file the user supplies, in two slots, Gameboy Classic ROMs\nBIOS and Gameboy Color ROMs BIOS, and it is read only while Load BIOS file is on,\noff by default (res/xml/pref_general.xml:89-99). In the free package the same three\npreferences are declared android:enabled=\"false\" behind a paid badge. A ROM whose\nname ends in .gb or .sgb takes the first slot, every other name takes the second.\n\nThe library never examines the name, the extension or the content: the byte count of\nthe read decides the machine. A file of 256 bytes runs the cartridge as a Game Boy,\none of 2304 bytes as a Game Boy Color, and any other length is refused with \"Unknown\nBIOS file\", after which the run continues with the boot skipped. The image is read\ninto a second MMU whose 0x100 to 0x1FF window is overwritten with the cartridge\nheader from the active one, the program counter starts at 0 instead of at the\ncartridge entry, and the animation runs until it reaches 0x100, at which point the\nactive MMU returns to the cartridge and the accumulator is restored. A multiplayer\nsession exchanges the CRC32 of the Game Boy slot so that both peers run the same\nfile.\n\nEverything else the app opens it makes itself: the default skins and the cheat\ndescriptors are raw resources unpacked at first run, the box art, cheat, sticker,\nlayout and per-ROM databases are created by their own CREATE TABLE, and the save\nstates, the RTC files, the screenshots and the GIF captures are outputs. No boot ROM\nis compiled into the library: neither Game Boy image nor the Nintendo logo appears\nanywhere in the loaded sections, and the post-boot register state comes from the\nreset path instead.\n",
        "profiled_date": "2026-08-12",
        "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboypro",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc",
          "nintendo-sgb"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "pizza-boy-sc",
      "profile": {
        "author": "Pizza Emulators",
        "core_classification": "other",
        "core_version": "1.2.4",
        "cores": [
          "pizza-boy-sc",
          "Pizza Boy SC",
          "PIZZA-BOY-SC",
          "it.dbtecno.pizzaboyscpro",
          "it.dbtecno.pizzaboyscbasic"
        ],
        "display_name": "Sega - MS/GG/MD/CD (Pizza Boy SC)",
        "emulator": "Pizza Boy SC",
        "files": [
          {
            "agnostic": true,
            "description": "Sega CD boot ROM",
            "name": "bios_CD_U.bin",
            "note": "Chosen from any location under any name through the document picker, or, when the picked document is named .zip, taken from its first entry. The stored path is read at engine start and the byte count compared with 131072; the machine compares it a second time and panics when it differs. An absent path ends the run with \"MegaCD Bios not provided\", an empty one with \"MegaCD BIOS path is missing\", a failed read with \"Error loading BIOS file\", and a wrong length with \"Invalid BIOS len\". The core holds one Mega CD slot and applies no other test, so the boot ROM of any region satisfies it; the three are listed because the region of the discs decides which one has to be installed.",
            "required": true,
            "size": 131072,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (four slot handoff), :517 (SegaCD branch), :564 (absent), :567 (validation entry), :573 (empty path), :580 (read failure), :592 (length), :596 (accepted); emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157 (second length test and panic); SettingsActivity.java:177-219 (picker, zip entry, stored path), res/xml/pref_general.xml:105-123 (preferences and defaults)",
            "system": "sega-megacd",
            "validation": [
              "size"
            ],
            "variant_group": "megacd-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Mega CD boot ROM",
            "name": "bios_CD_E.bin",
            "note": "Same slot, same picker and same length test as the other Mega CD boot ROMs.",
            "required": true,
            "size": 131072,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:567-596, emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157",
            "system": "sega-megacd",
            "validation": [
              "size"
            ],
            "variant_group": "megacd-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Mega CD boot ROM (Japan)",
            "name": "bios_CD_J.bin",
            "note": "Same slot, same picker and same length test as the other Mega CD boot ROMs.",
            "required": true,
            "size": 131072,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:567-596, emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157",
            "system": "sega-megacd",
            "validation": [
              "size"
            ],
            "variant_group": "megacd-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Master System boot ROM",
            "name": "bios_U.sms",
            "note": "Picked and stored like the Mega CD image and handed to the machine as a path. Nothing about the file is examined on either side of the bridge, and an empty slot is not an error: the cartridge runs with the boot sequence skipped.",
            "required": false,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :538 (branch reading the Master System and Game Gear slots), emulated/systems/sms/src/system.rs:202 (path logged into the machine)",
            "system": "sega-mastersystem",
            "variant_group": "mastersystem-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Master System boot ROM (Europe)",
            "name": "bios_E.sms",
            "note": "Same slot and same absence of tests as the other Master System boot ROMs.",
            "required": false,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:538, emulated/systems/sms/src/system.rs:202",
            "system": "sega-mastersystem",
            "variant_group": "mastersystem-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Master System boot ROM (Japan)",
            "name": "bios_J.sms",
            "note": "Same slot and same absence of tests as the other Master System boot ROMs.",
            "required": false,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:538, emulated/systems/sms/src/system.rs:202",
            "system": "sega-mastersystem",
            "variant_group": "mastersystem-boot-rom"
          },
          {
            "agnostic": true,
            "description": "Game Gear boot ROM",
            "name": "bios.gg",
            "note": "Its own slot, separate from the Master System one, both read on the branch that serves the two machines. Picked and stored the same way, handed to the machine as a path, and never examined; an empty slot is not an error.",
            "required": false,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :481 (system name match, GameGear), :538 (branch reading the Master System and Game Gear slots)",
            "system": "sega-gamegear"
          },
          {
            "agnostic": true,
            "description": "Mega Drive TMSS boot ROM",
            "name": "bios_MD.bin",
            "note": "Read on the Genesis branch, the one engine start falls through to when the system name is neither SMS, GameGear nor SegaCD. Picked and stored the same way and never examined; the machine reports it as \"BIOS detected\" and runs without it when the slot is empty.",
            "required": false,
            "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :550 (Genesis branch and slot read), emulated/systems/genesis/src/system.rs:270 (path logged into the machine), emulated/systems/genesis/src/genesis_machine.rs:135 (detection)",
            "system": "sega-megadrive"
          }
        ],
        "mode": "standalone",
        "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy SC name, reached by ES-DE through its PIZZA-BOY-SC find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboyscpro, the paid build\nthe rule names first, and it.dbtecno.pizzaboyscbasic, the free one. The build read\nhere is Basic 1.2.4 (versionCode 33), a Play distribution drop carrying the source\nstamp and signed by the Play App Signing certificate sha256\n5ae32245362ccafab6977e759f658dda66bac81cebdd804581cb55db2f219149. The Pro on the\nstore is 1.4.25 and no genuine copy of it is reachable: apkcombo bounces the\ndownload page of a paid app back to the app page, apkmirror carries no SC build,\narchive.org holds none, and the one apkvision copy, labelled Pro 1.3.7, is signed\nCN=APKVISION.ORG with no source stamp and was rejected. The Basic library serves\nboth packages: besides its own entry points it exports\nJava_it_dbtecno_pizzaboyscpro_MainActivity_jniEnableCallback.\n\nThe core is libsc.so, a Rust tree built as one workspace whose compilation units\nare named in its own panic and log records: emulated/systems/genesis,\nemulated/systems/sms, emulated/systems/mega_cd, emulated/components/cdrom,\nemulated/common and frontend/android. The armeabi-v7a build shipped in the split\nis stripped and carries no DWARF, so the file and line of every reference below\ncomes from the Location records the Rust log and panic paths embed. Four machines\nrun: engine start compares the system name against SMS, GameGear and SegaCD and\nfalls through to Genesis (lib.rs:481, 517, 538, 550), which covers Master System\nand Mark III, Game Gear, Mega Drive and Genesis, and Mega CD and Sega CD. Discs\nare read from cue and chd images through components/cdrom.\n\nFour BIOS slots exist, one per machine, set in one call whose log reads\n\"jni setBIOSFiles sms: {} gg: {} cd: {} md: {}\" (lib.rs:424); a fifth setter stores\na single path in a slot of its own that engine start never reads (lib.rs:416), and\nsetBIOSBoot logs \"TODO jni setBIOSboot\" and does nothing. Each branch reads the\nslots its machines use, the Master System one reading the Game Gear slot as well,\nand an empty slot is an ordinary case for Master System, Game Gear and Mega Drive.\nOnly the Mega CD slot is mandatory: without it the run stops at \"MegaCD Bios not\nprovided\" (lib.rs:564) and engine start returns its failure code.\n\nThe Mega CD image is the only file the core examines. It is read and its length\ncompared with 131072, then handed to the machine, which repeats the same\ncomparison and panics on a mismatch (megacd_main_machine.rs:156-157). Nothing else\nabout it is tested: no name, no header, no hash, and no region, the Game Region\nsetting being passed separately as jap, usa or eu and never selecting a file.\n\nThe user supplies each file through the document picker, which filters nothing:\nthe chosen document is copied into the application temp directory under the name\nthe picker reports, or, when that name ends in zip, the first entry is extracted\nthere instead, and the absolute path of the copy is stored. In the free package the\nBIOS preferences are declared android:enabled=\"false\" behind a paid badge, and its\nJava never hands a path to the core.\n\nEverything else the app opens it makes itself: the default skins, the cheat\ndescriptors and the two shaders are raw resources unpacked at first run, and the\nbox art, cheat, layout, sticker and per-ROM databases are created by their own\nCREATE TABLE.\n",
        "profiled_date": "2026-08-12",
        "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboyscpro",
        "systems": [
          "sega-mastersystem",
          "sega-gamegear",
          "sega-megadrive",
          "sega-megacd"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "plastic",
      "profile": {
        "core_classification": "other",
        "core_version": "0.3.5",
        "cores": [
          "plastic"
        ],
        "display_name": "Nintendo - NES / Famicom (Plastic)",
        "emulator": "Plastic",
        "files": [],
        "mode": "standalone",
        "notes": "NES emulator written in Rust by Amjad Alsharafi. The emulation lives in the\nplastic_core crate and two binaries drive it: plastic, an egui window, and\nplastic_tui, a terminal frontend (docs/man/plastic.1). Both take the ROM\npath as their first argument (plastic_ui/src/main.rs:418-424,\nplastic_tui/src/main.rs:5-38).\n\nA cartridge boots with nothing supplied. The 2A03, the PPU and every mapper\nare emulated in software and the console has no boot ROM, so no BIOS or\nfirmware is read. Cartridge::from_file accepts a path only when its\nextension is nes and its first four bytes are the iNES magic\n(plastic_core/src/cartridge/mod.rs:184-263, :157-165). get_mapper implements\n0, 1, 2, 3, 4, 7, 9, 10, 11, 12 and 66, and any other number returns\nMapperNotImplemented (:280-296). No Famicom Disk System path exists and\ntherefore no disksys.rom.\n\nThe NES to RGB table is a constant compiled into the binary\n(plastic_core/src/display/color.rs:22-87, selected at :158) and the 32 bytes\nat 0x3F00 are the PPU palette RAM (plastic_core/src/ppu2c02/palette.rs:6-19),\nso no palette file is opened. The window icon is embedded at build time\n(plastic_ui/src/main.rs:430).\n\nThe emulator reads back only what it wrote itself. A cartridge whose header\ncarries the battery bit gets <rom>.nes.sav beside the ROM, written on drop\nand reloaded on the next run (plastic_core/src/cartridge/mod.rs:319-348,\n:457-463). Save state slots 0 to 9 are <rom-stem>_<slot>.pst under the data\ndirectory, ~/.local/share/plastic/saved_states on Linux\n(plastic_ui/src/main.rs:16-32,95-118; plastic_tui/src/ui.rs:38-51,144-176;\nplastic_core/src/nes.rs:393-406).\n\nGamepad support comes from gilrs, which compiles the SDL controller database\ninto the binary and takes its only override from the SDL_GAMECONTROLLERCONFIG\nenvironment variable rather than a file (gilrs src/mapping/mod.rs:477-485).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/Amjad50/plastic",
        "source_commit": "74152adb3acd890d3abee2ff5906408f26a199e2",
        "systems": [
          "nintendo-nes"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Amjad50/plastic"
      }
    },
    {
      "id": "play",
      "profile": {
        "core_classification": "official_port",
        "core_version": "Git",
        "cores": [
          "play",
          "play!"
        ],
        "display_name": "Sony - PlayStation 2 (Play!)",
        "emulator": "play",
        "files": [],
        "notes": "Full HLE emulator. No BIOS or firmware files required. firmware_count=0 confirmed by source.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/jpd002/Play-",
        "source_commit": "2193ca112b576896a3022478a225661a7f84feb5",
        "systems": [
          "sony-playstation-2"
        ],
        "type": "libretro",
        "upstream": "https://github.com/jpd002/Play-"
      }
    },
    {
      "id": "pocketcdg",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "Git",
        "cores": [
          "pocketcdg"
        ],
        "display_name": "PocketCDG",
        "emulator": "PocketCDG",
        "files": [],
        "notes": "CD+G (CD+Graphics) karaoke player. Renders subcode graphics from .cdg files synchronized with MP3 audio. Font and MP3 decoder (libmad) embedded in the binary.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-pocketcdg",
        "source_commit": "b48b807e770aeea9a9e8f7af36f5e04ed4727aaa",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/redbug26/libretro-pocketcdg"
      }
    },
    {
      "id": "pokemini",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.60",
        "cores": [
          "pokemini"
        ],
        "display_name": "Nintendo - Pokemon Mini (PokeMini)",
        "emulator": "PokeMini",
        "files": [
          {
            "description": "Pokemon Mini official BIOS",
            "hle_fallback": true,
            "name": "bios.min",
            "note": "Mapped at $000000-$000FFF (4 KB). Read via Hardware.c:144-145. Falls back to embedded FreeBIOS if missing.",
            "required": false,
            "size": 4096,
            "source_ref": "source/PokeMini.c:189-206 (PokeMini_LoadBIOSFile), libretro/libretro.c:565 (path)",
            "system": "nintendo-pokemon-mini"
          }
        ],
        "notes": "PokeMini is a Pokemon Mini handheld emulator ported to libretro.\n\nThe core has an embedded FreeBIOS (open-source replacement) compiled\ndirectly into the binary from freebios/freebios.c. This means the\nreal BIOS is never strictly required -- games will run with FreeBIOS\nalone, though compatibility may differ from the original firmware.\n\nBIOS loading sequence in the libretro port:\n\n1. PokeMini_Create() clears PM_BIOS (4096 bytes at $000000-$000FFF),\n   then loads FreeBIOS into it via memcpy (source/PokeMini.c:116).\n   PokeMini_FreeBIOS is set to 1.\n\n2. retro_load_game() calls PokeMini_Reset(0) after loading the ROM.\n\n3. PokeMini_Reset() checks forcefreebios (hardcoded to 0 in the\n   libretro port, libretro.c:499). Since FreeBIOS is currently loaded\n   and forcefreebios is 0, it enters the real-BIOS path\n   (source/PokeMini.c:503-508):\n     - Reloads FreeBIOS as a safety fallback\n     - Checks if CommandLine.bios_file exists on disk\n     - If found, overwrites PM_BIOS with the real BIOS via\n       PokeMini_LoadBIOSFile(), sets PokeMini_FreeBIOS to 0\n\n4. If bios.min is missing, FreeBIOS stays loaded and emulation\n   proceeds normally.\n\nFile path construction (libretro.c:565):\n  sprintf(CommandLine.bios_file, \"%s%cbios.min\", g_system_dir, slash)\nThe core looks for bios.min directly in the system directory root,\nno subdirectory.\n\nThere is no core option to toggle FreeBIOS in the libretro port.\nThe standalone PokeMini has a forcefreebios setting, but the libretro\nwrapper hardcodes it to 0 (always prefer real BIOS when available).\n\nFreeBIOS (freebios/freebios.min) is 4096 bytes, a clean-room\nreimplementation. It is NOT the official Nintendo Pokemon Mini BIOS.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "PM_BIOS is a 4096-byte array. CPU reads from address range\n$000000-$000FFF are served directly from this buffer. The BIOS\nhandles interrupt vectors, hardware init, and the startup logo.\n",
            "source_ref": "source/PokeMini.h:38, source/Hardware.c:144-145",
            "target": "$000000-$000FFF in Pokemon Mini address space (4 KB)"
          },
          "freebios_fallback": {
            "freebios_hashes": {
              "md5": "d6c3ff5abc88f7c42f1a5edd6889f9cf",
              "sha1": "b40421defb005e836913e4e39dc1a18aa3b8887e",
              "size": 4096
            },
            "note": "FreeBIOS is a 4096-byte open-source replacement embedded in the\nbinary as a C array. It provides basic interrupt vectors and\nstartup code. Loaded by default at PokeMini_Create() and used\nas fallback when bios.min is not found on disk.\n",
            "source_ref": "freebios/freebios.c, source/PokeMini.c:209-214"
          },
          "load_priority": {
            "note": "During PokeMini_Reset(), the core first reloads FreeBIOS as a\nsafe baseline, then attempts to load bios.min from disk. If\nthe file exists and is exactly 4096 bytes, it replaces FreeBIOS.\nThe forcefreebios flag (hardcoded 0 in libretro) controls this:\nwhen 0, the core always prefers real BIOS over FreeBIOS.\n",
            "source_ref": "source/PokeMini.c:515-523"
          }
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/PokeMini",
        "source_commit": "132111b76343559860532a1ccc094f93f1ed5650",
        "systems": [
          "nintendo-pokemon-mini"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/pokemini/"
      }
    },
    {
      "id": "potator",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.0.5",
        "cores": [
          "potator"
        ],
        "display_name": "Watara - Supervision (Potator)",
        "emulator": "Potator",
        "files": [],
        "notes": "Watara Supervision emulator. No BIOS required.\nThe Supervision has no BIOS ROM; games execute directly from cartridge.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/potator",
        "source_commit": "ad87bc6068ef126e48339b440465fb0bf5a2794f",
        "systems": [
          "watara-supervision"
        ],
        "type": "libretro",
        "upstream": "https://github.com/alekmaul/potator"
      }
    },
    {
      "id": "ppsspp",
      "profile": {
        "core_classification": "official_port",
        "core_version": "Git",
        "cores": [
          "ppsspp"
        ],
        "data_directories": [
          {
            "destination": "",
            "ref": "ppsspp-assets",
            "source_ref": "libretro/libretro.cpp:537,549"
          }
        ],
        "display_name": "Sony - PlayStation Portable (PPSSPP)",
        "emulator": "PPSSPP",
        "files": [
          {
            "description": "PPGe dialog texture atlas for save/load dialogs, on-screen keyboard, system UI",
            "name": "ppge_atlas.zim",
            "note": "PanicAlert if missing. System dialogs render without graphics but core continues running.",
            "path": "PPSSPP/ppge_atlas.zim",
            "required": false,
            "source_ref": "Core/Util/PPGeDraw.cpp:227-228"
          },
          {
            "description": "PPGe atlas metadata (glyph positions, UV coords)",
            "name": "ppge_atlas.meta",
            "note": "Loaded after ppge_atlas.zim. Without it, dialog UI has no glyph layout.",
            "path": "PPSSPP/ppge_atlas.meta",
            "required": false,
            "source_ref": "Core/Util/PPGeDraw.cpp:235-237"
          }
        ],
        "notes": "Full HLE emulator. No Sony firmware or BIOS required.\nAll PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++.\nLibretro core loads assets from system/PPSSPP/ via VFS.\nAssets include replacement PGF fonts (18 files in flash0/font/),\ngame compatibility database (compat.ini), language mapping (langregion.ini),\nand post-processing shaders (shaders/).\nLibretro fork (2020-03-18) behind upstream.\nPSP_DEFAULT_FIRMWARE = 660 (Core/ConfigValues.h:40).\n",
        "pack_structure": {
          "libretro": "PPSSPP"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/ppsspp",
        "source_commit": "7b4ddb426bbe9e287bb7f19b0cfaebb4ea0d41d8",
        "systems": [
          "sony-psp"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/hrydgard/ppsspp"
      }
    },
    {
      "id": "prboom",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v2.5.0",
        "cores": [
          "prboom"
        ],
        "display_name": "Doom (PrBoom)",
        "emulator": "PrBoom",
        "files": [
          {
            "crc32": "a5751b99",
            "description": "PrBoom engine data WAD (fonts, palette, colormaps, tables, menu graphics)",
            "hle_fallback": true,
            "md5": "72ae1b47820fcc93cc0df9c428d0face",
            "name": "prboom.wad",
            "note": "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it.",
            "required": false,
            "sha1": "5f4aed208301449c2e9514edfd325fe9dead76fa",
            "size": 143312,
            "source_ref": "src/d_main.c:1402-1440 (PACKAGE .wad load), libretro/libretro.c:3974-4050 (I_FindFile search), src/config.h:39 (PACKAGE=prboom)",
            "system": "doom"
          }
        ],
        "notes": "PrBoom is a Doom source port based on MBF (Marine's Best Friend), itself\nderived from Boom. The libretro port plays Doom, Doom II, Final Doom,\nFreeDoom, and custom WADs/PWADs.\n\nThe core requires prboom.wad, a small engine data WAD containing internal\nresources: font glyphs, palette, colormaps, sine/tangent tables, gamma\ntables, menu graphics, and a null sprite (TNT1A0). It is NOT a game WAD.\nThe file is generated at build time by the rdatawad tool from raw PPM\ngraphics and LMP lumps (see Makefile.prboomdata), but ships pre-built\nin the repository root.\n\nWithout prboom.wad the core falls back to hardcoded internal defaults\n(d_main.c:1073-1074), so the file is technically optional but expected\nfor correct rendering of menus, HUD digits, and extended features.\n\nFile search order (libretro.c I_FindFile, line 1742):\n1. WAD directory (same folder as the loaded game WAD)\n2. system/prboom/ subdirectory\n3. system/ directory directly\n4. Parent folders of WAD directory (recursive, if enabled)\n\nThe core accepts .wad, .iwad, .pwad, and .lmp extensions. Game IWADs\nit recognizes (d_main.c:140-152): doom2f.wad, doom2.wad, plutonia.wad,\ntnt.wad, freedoom2.wad, doom.wad, doomu.wad, freedoom1.wad,\nfreedoom.wad, doom1.wad.\n\nThe src/ directory contains a second, larger prboom.wad (228743 bytes,\nmd5 23afd6143cb1ffec99a46755f9209ea6) which is the upstream PrBoom\noriginal. The root copy (143312 bytes) is the libretro-specific build.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-prboom",
        "source_commit": "b4046cef3641d6bb28c0394915bfcc732cc49652",
        "systems": [
          "doom"
        ],
        "type": "libretro",
        "upstream": "http://prboom.sourceforge.net/"
      }
    },
    {
      "id": "prboom-plus",
      "profile": {
        "analysis": {
          "engine_wad_contents": {
            "colormaps": "WATERMAP, between C_START and C_END",
            "flats": "-N0_TEX-, between FF_START and FF_END",
            "graphics": "the DIG* status bar digits, STBR*, the BOX* frame pieces, STKEYS6-8, STCFN096, M_BUTT1/2, M_COLORS, M_PALNO, M_PALSEL, M_VBOX, CROSS1-3",
            "lumps": [
              "SWITCHES, ANIMATED",
              "the CR* colour translation tables"
            ],
            "note": "What rdatawad packs into prboom-plus.wad, in the order the command line builds it.\n",
            "palette": "palette.rgb",
            "sounds": "DSDGSIT, DSDGATK, DSDGACT, DSDGDTH, DSDGPAIN",
            "source_ref": "data/CMakeLists.txt:24-340 (rdatawad input lists), data/CMakeLists.txt:342-362 (WAD_SRC and WAD_CMDLINE)",
            "sprites": "TNT1A0, the DOGS* frames, PLS1* and PLS2*, between SS_START and SS_END",
            "tables": {
              "entries": [
                "SINETABL, TANGTABL, TANTOANG, GAMMATBL",
                "CHEXDEH, BFGBEX, NERVEBEX",
                "GLSHADOW, GLFP, GLVP",
                "-PRBHUD-, read by hu_stuff.c:1144",
                "the M_* OpenGL automap icons listed in gl_map.c:48-68"
              ],
              "note": "Between B_START and B_END"
            }
          },
          "external_programs": {
            "entries": [
              {
                "source_ref": "prboom2/src/m_misc.c:1062-1064 (cap_soundcommand, cap_videocommand, cap_muxcommand)",
                "what": "ffmpeg, video capture and muxing"
              },
              {
                "source_ref": "d_client.c:236-257 (execlp), doc/prboom-plus.6:200-206",
                "what": "wget then unzip, fetching a WAD a game server asks for"
              },
              {
                "source_ref": "r_demo.c:1641-1704 (D_TryGetWad), prboom2/src/m_misc.c:1029 (default empty, so the path is inert until configured)",
                "what": "getwad_cmdline, run through system() when a needed WAD is missing"
              }
            ],
            "note": "Invoked as processes, not read as data files"
          },
          "generated_files": {
            "entries": [
              {
                "filename": "prboom-plus.cfg",
                "source_ref": "prboom2/src/m_misc.c:1586-1600 (BOOM_CFG, path from I_DoomExeDir), prboom2/src/m_misc.c:1606 (read)"
              },
              {
                "filename": "RGB2PAL.dat",
                "note": "A 24-bit RGB to palette lookup table built from V_GetPlaypal, so its contents follow whichever IWAD is loaded. gl_hires.c:920-936 prefers an RGB2PAL lump of the right length when a WAD supplies one.\n",
                "source_ref": "gl_hires.c:938-953 (read), gl_hires.c:962-967 (opened wb and written)"
              },
              {
                "filename": "<hires image>.cache",
                "note": "Keyed on the source image mtime and discarded when it differs.",
                "source_ref": "gl_hires.c:1144-1147 (read), gl_hires.c:1179 (gld_HiRes_WriteCache)"
              },
              {
                "filename": "levelstat.txt",
                "source_ref": "e6y.c:968"
              },
              {
                "filename": "levelinfo.txt",
                "source_ref": "prboom2/src/d_main.c:1049-1060, behind GL_DOOM and PRBOOM_DEBUG"
              },
              {
                "filename": "temp_a.nut, temp_v.nut",
                "source_ref": "prboom2/src/m_misc.c:1065-1066 (cap_tempfile1, cap_tempfile2)"
              }
            ],
            "note": "Written by the program itself, none is user-supplied"
          },
          "shader_override": {
            "files": [
              "shaders/glvp.txt",
              "shaders/glfp.txt"
            ],
            "note": "Read from the config directory when present. ReadLump falls back to the GLVP and GLFP lumps in the ns_prboom namespace when the file is missing, and those lumps are built into prboom-plus.wad (data/CMakeLists.txt:60-61). No distribution ships the .txt form: it is an override slot, and the shipped content is already covered by the WAD.\n",
            "source_ref": "gl_shader.c:144-152 (path built from I_DoomExeDir), gl_shader.c:84-129 (ReadLump)"
          },
          "user_supplied_paths": {
            "entries": [
              {
                "source_ref": "prboom2/src/d_main.c:144-165 (standard_iwads), prboom2/src/d_main.c:977-990 (FindIWADFile)",
                "what": "IWAD, -iwad or autodetected from the standard names"
              },
              {
                "source_ref": "prboom2/src/d_main.c:1906-1927",
                "what": "PWADs, -file"
              },
              {
                "source_ref": "prboom2/src/d_main.c:2036-2055, prboom2/src/d_main.c:2081-2099, prboom2/src/m_misc.c:336-337",
                "what": "DEHACKED and BEX patches, -deh, plus the dehfile_1 and dehfile_2 config keys and the autoload directories"
              },
              {
                "source_ref": "prboom2/src/m_misc.c:334-335, prboom2/src/d_main.c:1873-1895",
                "what": "extra autoloaded WADs, wadfile_1 and wadfile_2"
              },
              {
                "source_ref": "prboom2/src/d_main.c:1400-1414 (GetAutoloadBaseDir), prboom2/src/d_main.c:1500-1519 (D_AutoloadIWadDir)",
                "what": "autoload directories, <config dir>/autoload/doom-all and one per IWAD"
              },
              {
                "source_ref": "r_demo.c:89-119, g_game.c:2570, g_game.c:3150",
                "what": "demos, -playdemo, -fastdemo, -record"
              },
              {
                "source_ref": "gl_hires.c:467-631 (hires_paths), gl_hires.c:703-719 (gl_texture_hires_dir or I_DoomExeDir)",
                "what": "external high resolution texture packs, under textures/, flats/ and patches/"
              },
              {
                "source_ref": "prboom2/src/d_main.c:1019-1032, m_menu.c:957",
                "what": "savegames, DOOMSAVEDIR or the config directory"
              },
              {
                "source_ref": "prboom2/src/d_main.c:1094-1112",
                "what": "response files, @name"
              }
            ],
            "note": "Named on the command line or in the config, with no fixed filename"
          }
        },
        "core_classification": "game_engine",
        "core_version": "2.6.66",
        "cores": [
          "prboom-plus"
        ],
        "display_name": "Doom (PrBoom+)",
        "emulator": "PrBoom+",
        "files": [
          {
            "crc32": "a4626dfa",
            "description": "PrBoom+ engine data WAD",
            "md5": "1164ae723c9181698cc41dde6a341132",
            "name": "prboom-plus.wad",
            "note": "The code checks existence only, then rejects a file whose header is neither IWAD nor PWAD (prboom2/src/w_wad.c:216-218). Hashes are those of the file rdatawad produces from the data/ assets at this revision, which matches the copy in the v2.6.66 release archive byte for byte. They identify the 2.6.66 build; other versions carry different lumps.\n",
            "required": true,
            "sha1": "8a799c6615702aac72016b784e30ea1abd3e197b",
            "size": 357768,
            "source_ref": "prboom2/src/m_misc.c:1723-1724 (I_FindFile then I_Error), prboom2/src/d_main.c:1873-1895 (autoload), prboom2/src/w_wad.c:185-196 (LUMP_PRBOOM tagging), prboom2/CMakeLists.txt:41 (PACKAGE_TARNAME), prboom2/CMakeLists.txt:234-235 (WAD_DATA), prboom2/data/CMakeLists.txt:364-370 (rdatawad build and install)",
            "system": "doom"
          },
          {
            "description": "General MIDI soundfont for the fluidsynth MIDI player",
            "hle_fallback": true,
            "name": "TimGM6mb.sf2",
            "note": "Named by the Windows default of snd_soundfont, where snd_midiplayer also defaults to fluidsynth, so a stock Windows configuration reads it. Any soundfont works: the value is a config string and I_FindFile2 appends .sf2 only when the name as written is missing. A load failure returns 0 from fl_init, and the song falls through to the next player on the list, the built-in OPL2 synth.\n",
            "required": false,
            "source_ref": "prboom2/src/m_misc.c:445-446 (_WIN32 defaults for snd_midiplayer and snd_soundfont), prboom2/src/MUSIC/flplayer.c:193-202 (I_FindFile2 then fluid_synth_sfload)",
            "system": "doom"
          },
          {
            "description": "General MIDI soundfont named by the non-Windows soundfont default",
            "hle_fallback": true,
            "name": "default-GM.sf3",
            "note": "The default is an absolute path, which resolves through the unprefixed working directory entry of the search table. Reached once snd_midiplayer is set away from its sdl default, since sdl keeps the fluidsynth player out of the picture entirely. Same fallback to the OPL2 synth as the Windows default.\n",
            "required": false,
            "source_ref": "prboom2/src/m_misc.c:448-449 (non-_WIN32 defaults, /usr/share/sounds/sf3/default-GM.sf3), prboom2/src/MUSIC/flplayer.c:193-202 (I_FindFile2 then fluid_synth_sfload)",
            "system": "doom"
          }
        ],
        "mode": "standalone",
        "notes": "Doom source port forked from PrBoom, with the software and OpenGL renderers\nin a single binary. FindIWADFile accepts doom2f, doom2, plutonia, tnt, doom,\ndoom1, doomu, freedoom2, freedoom1, freedm, hacx, chex, rekkrsa, bfgdoom2\nand bfgdoom (prboom2/src/d_main.c:144-165). ES-DE runs it as \"prboom-plus -iwad <file>\",\nso the IWAD is content, not a system file.\n\nprboom-plus.wad holds the engine's own lumps: the palette, the water\ncolormap, the sine, tangent and gamma tables, the HUD layouts, the status\nbar digits, the crosshairs, the dog and plasma sprites, the GLSL shader\nsources, and the DEHACKED patches applied to Chex Quest, the BFG Edition\nand NERVE.WAD. M_LoadDefaults installs it as wad_files[0] and aborts with\n\"PrBoom-Plus.wad not found. Can't continue.\" when I_FindFile returns\nnothing (prboom2/src/m_misc.c:1723-1724). It loads even under -noload, which caps the\nautoload loop at that one entry (prboom2/src/d_main.c:1877-1879). Lumps coming from it\nare tagged LUMP_PRBOOM so a PWAD can override them (prboom2/src/w_wad.c:185-196).\n\nThe tree ships the inputs, not the file: data/CMakeLists.txt builds it with\nthe rdatawad tool from the raw palette, lumps, PPM graphics and WAV sounds\nunder data/, then installs it into PRBOOMDATADIR, which is\n<prefix>/share/prboom-plus (CMakeLists.txt:188-189, data/CMakeLists.txt:370).\n\nI_FindFile searches, in order: the config directory, the working directory,\nPRBOOMDATADIR, $DOOMWADDIR, the build-time DOOMWADDIR, $HOME/doom, $HOME,\n/usr/local/share/games/doom, /usr/share/games/doom, /usr/local/share/doom,\n/usr/share/doom, then every entry of $DOOMWADPATH (SDL/i_system.c:437-449,\n471-505). The working directory entry carries no prefix, so an absolute\nname resolves on that pass. Existence is the only test, and the requested\nextension is appended only when the name as written is missing\n(SDL/i_system.c:532-538). The config directory is the directory holding the\nbinary on Windows (SDL/i_system.c:289-311), and ~/.prboom-plus or the\nXDG path from SDL_GetPrefPath elsewhere (SDL/i_system.c:347-383). The macOS\nbuild replaces the list with ~/Library/Application Support/PrBoom-Plus, the\nbundle resource path, and the bare name (MAC/i_system.m:57-59, 117-142).\n\nsnd_midiplayer picks the MIDI backend and defaults to fluidsynth on Windows,\nsdl elsewhere (prboom2/src/m_misc.c:444-450). Only the sdl value leaves\nuse_experimental_music clear and routes MIDI through SDL_mixer\n(SDL/i_sound.c:1662-1668, 1221-1225); every other value brings up the\nin-tree players. Their init results are recorded once at startup\n(SDL/i_sound.c:1383-1384) and consulted per song, a player that failed to\ninit being logged and passed over for the next entry of music_player_order\n(SDL/i_sound.c:1511-1538). fluidsynth is the only one reading an external\nfile. The OPL2 player that follows it takes its instruments from the IWAD\nGENMIDI lump (MUSIC/oplplayer.c:337-354).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/coelckers/prboom-plus",
        "source_commit": "969515162c5aebea4ad7a125ee178dcad3d576ad",
        "systems": [
          "doom"
        ],
        "type": "standalone",
        "upstream": "https://github.com/coelckers/prboom-plus"
      }
    },
    {
      "id": "primehack",
      "profile": {
        "analysis_commit": "b10f147 (depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "enhanced_fork",
        "core_version": "1.0.8",
        "cores": [
          "primehack"
        ],
        "data_directories": [
          {
            "destination": "Sys",
            "ref": "dolphin-sys",
            "source_ref": "Source/Core/Common/CommonPaths.h:128-141"
          }
        ],
        "display_name": "PrimeHack (Dolphin fork for Metroid Prime)",
        "emulator": "PrimeHack",
        "files": [
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "IPL.bin",
            "note": "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-110"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "IPL.bin",
            "note": "GameCube PAL boot ROM",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:184"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "IPL.bin",
            "note": "GameCube NTSC-J boot ROM. JAP is the legacy directory name",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:186"
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "mode": "standalone",
            "name": "dsp_rom.bin",
            "note": "DSP instruction ROM for LLE audio. Free replacement (v0.4) included",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-117",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "mode": "standalone",
            "name": "dsp_coef.bin",
            "note": "DSP coefficient ROM for LLE audio. Free replacement included",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/DSP/DSPCore.cpp:32-38",
            "validation": [
              "size"
            ]
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "font_western.bin",
            "note": "Windows-1252 font for GC/Wii text rendering. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_western.bin",
            "required": false,
            "size": 9589,
            "source_ref": "Source/Core/Common/CommonPaths.h:132, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131,203-218"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "font_japanese.bin",
            "note": "Shift-JIS font for Japanese text. Free alternative bundled, real one from IPL dump preferred",
            "path": "GC/font_japanese.bin",
            "required": false,
            "size": 303693,
            "source_ref": "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "gba_bios.bin",
            "note": "GBA BIOS for GC-GBA link feature (uses integrated mGBA). Path configurable in settings",
            "path": "GBA/gba_bios.bin",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:144, Source/Core/Core/HW/GBACore.cpp:344-361"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "SYSCONF",
            "note": "Wii system configuration. Auto-generated by PrimeHack, can be imported from NAND backup",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:118, Source/Core/Core/WiiRoot.cpp:266"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "setting.txt",
            "note": "Wii region/language settings. Auto-generated during Wii boot emulation",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:152, Source/Core/Core/Boot/Boot_BS2Emu.cpp:377-454"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "nand.bin",
            "note": "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:26-89"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "keys.bin",
            "note": "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import",
            "path": null,
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:19,76-88"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "WiiSD.raw",
            "note": "Virtual SD card image for Wii homebrew. Auto-created, supports SD/SDHC up to 4GB",
            "path": "Load/WiiSD.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:149"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "codehandler.bin",
            "note": "Gecko/Ocarina cheat code handler. Shipped with PrimeHack in Sys/",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:154, Source/Core/Core/GeckoCode.cpp:121"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "Wii System Menu",
            "note": "Wii System Menu WAD. Installed to NAND via Tools > Install WAD, needed for Wii Menu boot",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DolphinQt/MenuBar.cpp:331, Source/Core/DolphinQt/MenuBar.cpp:1461-1469"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "clientca.pem",
            "note": "SSL client certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:201-285"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "clientcakey.pem",
            "note": "SSL client private key. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/clientcakey.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:237"
          },
          {
            "hle_fallback": true,
            "mode": "standalone",
            "name": "rootca.pem",
            "note": "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import",
            "path": "Wii/rootca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:238"
          },
          {
            "mode": "standalone",
            "name": "rtl8723a_fw.bin",
            "note": "Realtek 8723A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:379"
          },
          {
            "mode": "standalone",
            "name": "rtl8723b_fw.bin",
            "note": "Realtek 8723B BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723b_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:516-519"
          },
          {
            "mode": "standalone",
            "name": "rtl8723d_fw.bin",
            "note": "Realtek 8723D BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8723d_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:383"
          },
          {
            "mode": "standalone",
            "name": "rtl8761a_fw.bin",
            "note": "Realtek 8761A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8761a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:385"
          },
          {
            "mode": "standalone",
            "name": "rtl8761bu_fw.bin",
            "note": "Realtek 8761BU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8761bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:387"
          },
          {
            "mode": "standalone",
            "name": "rtl8821a_fw.bin",
            "note": "Realtek 8821A BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8821a_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:389"
          },
          {
            "mode": "standalone",
            "name": "rtl8821c_fw.bin",
            "note": "Realtek 8821C BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8821c_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:391"
          },
          {
            "mode": "standalone",
            "name": "rtl8822b_fw.bin",
            "note": "Realtek 8822B BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8822b_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:395"
          },
          {
            "mode": "standalone",
            "name": "rtl8822cu_fw.bin",
            "note": "Realtek 8822CU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8822cu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:393"
          },
          {
            "mode": "standalone",
            "name": "rtl8851bu_fw.bin",
            "note": "Realtek 8851BU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8851bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:397"
          },
          {
            "mode": "standalone",
            "name": "rtl8852au_fw.bin",
            "note": "Realtek 8852AU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852au_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:399"
          },
          {
            "mode": "standalone",
            "name": "rtl8852bu_fw.bin",
            "note": "Realtek 8852BU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852bu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:401"
          },
          {
            "mode": "standalone",
            "name": "rtl8852cu_fw.bin",
            "note": "Realtek 8852CU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852cu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:403"
          },
          {
            "mode": "standalone",
            "name": "rtl8852btu_fw.bin",
            "note": "Realtek 8852BT/8852BE-VT BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8852btu_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:405"
          },
          {
            "mode": "standalone",
            "name": "rtl8922au_fw.bin",
            "note": "Realtek 8922AU BT firmware for Wiimote passthrough",
            "path": "Load/Firmware/rtl_bt/rtl8922au_fw.bin",
            "required": false,
            "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:407"
          }
        ],
        "mode": "standalone",
        "notes": {
          "bt_passthrough_note": "Bluetooth passthrough allows connecting real Wiimotes via USB Bluetooth adapters. Realtek chipsets require firmware files in Load/Firmware/rtl_bt/. PrimeHack can auto-download these from kernel-firmware/linux-firmware on GitLab.\n",
          "dsp_rom_note": "DSP ROMs are verified at load time via Adler32 hash. Official Nintendo hashes: irom=0x66f334fe, drom=0xf3b93527.\n",
          "hle_available": true,
          "hle_note": "PrimeHack provides HLE for GameCube IPL (boot ROM), DSP, and Wii system functions (same as Dolphin). No BIOS files are strictly required for most games.\n",
          "ipl_regions": [
            "USA",
            "EUR",
            "JAP",
            "JPN",
            "DEV"
          ]
        },
        "pack_structure": {
          "standalone": ""
        },
        "profiled_date": "2026-03-26",
        "source": "https://github.com/shiiion/dolphin",
        "source_commit": "5e7cc91d8c9a43ca189b288937f65c9763af9c22",
        "systems": [
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/dolphin-emu/dolphin"
      }
    },
    {
      "id": "project64",
      "profile": {
        "core_classification": "other",
        "core_version": "Dev-4.0.0",
        "cores": [
          "project64"
        ],
        "display_name": "Nintendo - Nintendo 64 (Project64)",
        "emulator": "project64",
        "files": [
          {
            "aliases": [
              "64DD_IPL.bin",
              "64DD_IPL_JP.n64",
              "64dd_ipl_J.bin"
            ],
            "description": "64DD IPL ROM (Japanese retail)",
            "name": "64DD_IPL_v12_JPN.bin",
            "note": "Loaded when the disk image reports Country_Japan. The path is the free text Disk IPL ROM Path setting, typed or pasted into a plain edit box, so the code fixes no filename and no directory. SelectAndLoadFileImageIPL tests that the path exists, warns and returns false if not, and the disk never starts. The file is accepted on two content checks and nothing else: the first word must be one of the four image magics, 0x40072780 being the 64DD one, and the boot block sum must be 0xD2E53EF008. Size is not checked and no file hash is computed.\n",
            "region": [
              "japan"
            ],
            "required": true,
            "source_ref": "Source/Project64-core/Settings.cpp:316, Source/Project64-core/N64System/N64System.cpp:577,599,649-652,673-677,690-704, Source/Project64-core/N64System/N64Rom.cpp:303,479-498,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:13,18,47,140",
            "system": "nintendo-64dd",
            "validation": [
              "signature"
            ]
          },
          {
            "aliases": [
              "64DD_IPL_US.n64",
              "64dd_ipl_U.bin"
            ],
            "description": "64DD IPL ROM (American retail)",
            "name": "64DD_IPL_USA.bin",
            "note": "Loaded when the disk image reports Country_NorthAmerica, from the Disk IPL USA ROM Path setting. Same acceptance path as the Japanese image, matched on boot block sum 0xD2E53E5DDA. The chip differs from the Japanese one, and CalculateRomCrc carries a separate seed and a 0xA0000 length for it.\n",
            "region": [
              "north-america"
            ],
            "required": true,
            "source_ref": "Source/Project64-core/Settings.cpp:317, Source/Project64-core/N64System/N64System.cpp:653-656,673-677, Source/Project64-core/N64System/N64Rom.cpp:305,369-372,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:14,19,56,142",
            "system": "nintendo-64dd",
            "validation": [
              "signature"
            ]
          },
          {
            "aliases": [
              "64DD_IPL_DEV.n64",
              "64dd_ipl_DEV.bin"
            ],
            "description": "64DD IPL ROM (development)",
            "name": "64DD_IPL_DEV.bin",
            "note": "Loaded from the Development 64DD IPL ROM Path setting for disks whose country byte is unknown, which is what development and prototype disks carry. Matched on boot block sum 0xD2E53EF39F. When a cartridge and a disk are launched together and this path is empty, the loader falls back to the Japanese image and then to the American one, so the development image is only unavoidable for a development disk on its own.\n",
            "required": true,
            "source_ref": "Source/Project64-core/Settings.cpp:318, Source/Project64-core/N64System/N64System.cpp:657-670,673-677, Source/Project64-core/N64System/N64Rom.cpp:304,377-380,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:15,20,65,144",
            "system": "nintendo-64dd",
            "validation": [
              "signature"
            ]
          },
          {
            "bundled": true,
            "description": "ROM settings database",
            "name": "Project64.rdb",
            "note": "Sections keyed by the ROM identifier CRC1-CRC2-C:country. Backs the whole Rdb_ setting family, among them RDRAM size, counter factor, save chip, VI refresh rate, disk seek timing and the overclock modifier, so it decides how the machine is configured per game. It also carries the microcode identifier table. Absent, every lookup falls through to the Defaults section and the ROM browser lists no known titles.\n",
            "path": "Config/Project64.rdb",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:87-88,134-145,151-188, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:63,117, Source/Project64-core/RomList/RomList.cpp:47,52,58-61, Source/Project64-core/N64System/N64Rom.cpp:722,914",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Per game video plugin settings",
            "name": "Video.rdb",
            "note": "Second ini opened by the ROM database setting type, keyed on the same ROM identifier, holding the microcode CRCs the ucode detector matches and the per game video overrides. Without it the plugin asks the user to add an unknown microcode CRC.\n",
            "path": "Config/Video.rdb",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:89-90, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:64,118",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Per game audio plugin settings",
            "name": "Audio.rdb",
            "note": "Third ini opened by the ROM database setting type, same key, carrying the per game audio overrides such as FPSBuffer, Fixed Audio and Sync Audio.\n",
            "path": "Config/Audio.rdb",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:91-92, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:65,119",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "ROM database extension",
            "name": "Project64.rdx",
            "note": "Extended per game information the ROM browser shows, loaded into the romlist as m_ExtIniFile alongside the ROM database itself. Absent, the browser columns it feeds stay empty.\n",
            "path": "Config/Project64.rdx",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:103-104, Source/Project64-core/RomList/RomList.cpp:46,51",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Shipped cheat database",
            "name": "Config/Cheats/*.cht",
            "note": "Directory scanned for that pattern, one file per game, sections keyed on the ROM identifier and holding the GameShark style codes. The user directory Config/Cheats-User is scanned straight after and is where the UI writes. 671 files ship in the installer.\n",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:93-96, Source/Project64-core/N64System/Enhancement/Enhancements.cpp:629,647, Source/Installer/Installer.iss:29",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Shipped enhancement database",
            "name": "Config/Enhancements/*.enh",
            "note": "Directory scanned for that pattern, same per game keying as the cheat files, holding the patches offered under Enhancements such as widescreen hacks. The user directory Config/Enhancements-User is scanned straight after. 115 files ship in the installer.\n",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:97-100, Source/Project64-core/N64System/Enhancement/Enhancements.cpp:665,684, Source/Installer/Installer.iss:30",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Interface translations",
            "name": "Lang/*.pj.Lang",
            "note": "Directory scanned for that pattern, each file naming its language in a header string. English is compiled in through the DEF_STR table, so an empty directory leaves the interface in English.\n",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:127-128, Source/Project64-core/Multilanguage/Language.cpp:9-571,656-673, Source/Installer/Installer.iss:33",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Jabo's Direct3D8 video plugin",
            "name": "Jabo_Direct3D8.dll",
            "note": "Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager. No source for it exists in the tree, so a build from source cannot produce it. Project64-Video is the default graphics plugin, so it is only selected when the user picks it.\n",
            "path": "Plugin/GFX/Jabo_Direct3D8.dll",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:383, Source/Installer/Installer.iss:36, Source/Script/package_zip.cmd:60",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Jabo's DirectSound audio plugin",
            "name": "Jabo_Dsound.dll",
            "note": "Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager, with no source in the tree. Project64-Audio is the default audio plugin.\n",
            "path": "Plugin/Audio/Jabo_Dsound.dll",
            "required": false,
            "source_ref": "Source/Project64-core/Settings.cpp:385, Source/Installer/Installer.iss:34, Source/Script/package_zip.cmd:58",
            "system": "nintendo-64"
          }
        ],
        "mode": "standalone",
        "notes": "Nintendo 64 and 64DD emulator for Windows. Project64.exe plus the plugin DLLs\nthe same solution builds, driven by the plugin spec in Source/Project64-plugin-spec.\nES-DE passes the ROM as the only argument. AppVeyor builds Win32 and x64 only;\nSource/Android holds no build file.\n\nCartridge boot reads no file. PostPif is hardcoded true, so Reset seeds the\ngeneral purpose registers from the CIC identified in the ROM image, points the\nprogram counter at 0xA4000040 and the boot block is copied into SP DMEM. The\nbranch that would start at the PIF ROM address is unreachable and the PIF ROM\nread in the memory handler is commented out, so neither a PIF ROM nor a CIC ROM\nis opened (Source/Project64-core/N64System/N64System.cpp:911-916,\nSource/Project64-core/N64System/Mips/Register.cpp:342,371-373,395-535,\nSource/Project64-core/N64System/MemoryHandler/PifRamHandler.cpp:26).\n\nThe CIC is identified from the boot block. ByteSwapRom normalises the image so\neach 32-bit read yields the ROM's big-endian word, then GetCicChipID sums those\nwords from 0x40 to 0x1000 and matches the total against a table of constants.\nThree of them are 64DD IPL images: 0xD2E53EF008 for the Japanese retail chip\n8303, 0xD2E53E5DDA for the American retail chip 8501, 0xD2E53EF39F for the\ndevelopment chip 8401. IsLoadedRomDDIPL is that test\n(Source/Project64-core/N64System/N64Rom.cpp:240-273,281-305,500-511).\n\nAleck64 images are recognised by the same table, through a second sum taken at\n0xC00, and get their own boot register seed. No arcade hardware is emulated and\nno Aleck64 file is opened\n(Source/Project64-core/N64System/N64Rom.cpp:283,310-316,\nSource/Project64-core/N64System/Mips/Register.cpp:477-479).\n\nTransfer Pak reads a Game Boy cartridge image and its save from paths the user\nsets per game. Both are the user's own cartridge dump, and no Game Boy boot ROM\nis involved (Source/Project64-core/N64System/Mips/GBCart.cpp:695-698,744,788,\nSource/Project64-core/Settings.cpp:242-243).\n\nThe support files under Config ship in the installer and in the nightly package.\nCIniFile returns silently when the path does not exist, so each of them degrades\nto the defaults registered in AddHandler rather than failing\n(Source/Common/IniFile.cpp:493-522, Source/Project64-core/Settings.cpp:134-145).\n\nGLideN64 ships as a bundled plugin, pinned as a submodule at\ngonetz/GLideN64 c8ef81c7d9aede9f67f6ed3d3426c90541f9f13e, and brings its own\nGLideN64.ini, GLideN64.custom.ini and translations. Project64's own code names\nnone of them; only Installer.iss and package_zip.cmd copy them\n(Source/Installer/Installer.iss:38, Source/Script/package_zip.cmd:42-47).\n\nGenerated at runtime, never supplied: Project64.cfg, Project64.rdn,\nProject64.cache3, Project64.zcache, Config/Cheats-User, Config/Enhancements-User,\nSave, Screenshots, Logs and the texture caches.\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/project64/project64",
        "source_commit": "6188e9a88dd2e7487df346fecc445716654e18ec",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "standalone",
        "upstream": "https://github.com/project64/project64"
      }
    },
    {
      "id": "prosystem",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.3e",
        "cores": [
          "prosystem"
        ],
        "display_name": "Atari - 7800 (ProSystem)",
        "emulator": "ProSystem",
        "files": [
          {
            "description": "NTSC/US BIOS, loaded when cartridge_region != REGION_PAL",
            "hle_fallback": true,
            "name": "7800 BIOS (U).rom",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "core/libretro.c:585",
            "system": "atari-7800"
          },
          {
            "description": "PAL/EU BIOS, loaded when cartridge_region == REGION_PAL",
            "hle_fallback": true,
            "name": "7800 BIOS (E).rom",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 16384,
            "source_ref": "core/libretro.c:583",
            "system": "atari-7800"
          }
        ],
        "notes": "Atari 7800 emulator by Greg Stanton, ported to libretro by community\ncontributors. The upstream is a Windows-only application with a single\nuser-configured BIOS path. The libretro port adds automatic region-based\nBIOS selection: PAL carts get (E), everything else gets (U).\n\nRegion is read from cartridge header byte 57 (core/Cartridge.c:214) or\noverridden by the internal database (core/Database.c:1739-1757).\n\nBoth BIOS files are optional. The core runs without them but some titles\nhave compatibility issues (startup encryption check). bios_Store() maps\nthe BIOS into ROM at address (65536 - bios_size).\n\nNo core option controls BIOS loading. If the file exists in the system\ndirectory, it is loaded automatically. No hash or size validation is\nperformed on the BIOS file.\n\nThe .info declares firmware_count=1 (U only), missing the PAL BIOS.\n",
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/prosystem-libretro",
        "source_commit": "363b6dfbd3e240762e022c2b4897b4fe55722be3",
        "systems": [
          "atari-7800"
        ],
        "type": "libretro",
        "upstream": "https://github.com/gstanton/ProSystem1_3"
      }
    },
    {
      "id": "puae",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "5.3.1",
        "cores": [
          "puae",
          "uae"
        ],
        "display_name": "Commodore - Amiga (PUAE)",
        "emulator": "PUAE (P-UAE)",
        "files": [
          {
            "aliases": [
              "amiga-os-110-ntsc.rom",
              "Kickstart v1.1 rev 31.34 (1985)(Commodore)(A1000)(NTSC).rom"
            ],
            "hle_fallback": true,
            "name": "kick31034.A1000",
            "note": "Kickstart 1.1 rev 31.34 (1985) NTSC. A1000 only.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:170-174",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-110-pal.rom",
              "Kickstart v1.1 rev 32.34 (1986)(Commodore)(A1000)(PAL).rom"
            ],
            "hle_fallback": true,
            "name": "kick32034.A1000",
            "note": "Kickstart 1.1 rev 32.34 (1986) PAL. A1000 only.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:176-179",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-120.rom",
              "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom",
              "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom"
            ],
            "hle_fallback": true,
            "name": "kick33180.A500",
            "note": "Kickstart 1.2 rev 33.180 (1986). A500/A2000. Also used by WHDLoad.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:182-185",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-130.rom",
              "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom",
              "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom"
            ],
            "name": "kick34005.A500",
            "note": "Kickstart 1.3 rev 34.5 (1987). Default for A500/A2000OG/CDTV models. Also used by WHDLoad.",
            "required": true,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:187-190",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-204.rom",
              "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom",
              "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom"
            ],
            "hle_fallback": true,
            "name": "kick37175.A500",
            "note": "Kickstart 2.04 rev 37.175 (1991). Default for A500+ model.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:192-195",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-205-a600.rom",
              "Kickstart v2.05 rev 37.350 (1992)(Commodore)(A600HD)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick37350.A600",
            "note": "Kickstart 2.05 rev 37.350 (1992). A600HD.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:198-201",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a600.rom",
              "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom",
              "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom"
            ],
            "hle_fallback": true,
            "name": "kick40063.A600",
            "note": "Kickstart 3.1 rev 40.63 (1993). Default for A600/A2000 models. Also used by WHDLoad.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:203-206",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-300-a1200.rom",
              "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick39106.A1200",
            "note": "Kickstart 3.0 rev 39.106 (1992). A1200.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:209-212",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a1200.rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom"
            ],
            "name": "kick40068.A1200",
            "note": "Kickstart 3.1 rev 40.68 (1993). Default for A1200/A1200OG models. Also used by WHDLoad.",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:214-217",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-300-a4000.rom",
              "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A4000)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick39106.A4000",
            "note": "Kickstart 3.0 rev 39.106 (1992). A4000.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:220-223",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a4000.rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom"
            ],
            "hle_fallback": true,
            "name": "kick40068.A4000",
            "note": "Kickstart 3.1 rev 40.68 (1993). Default for A4030/A4040 models.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:225-228",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-130-cdtv-ext.rom",
              "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom",
              "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom"
            ],
            "name": "kick34005.CDTV",
            "note": "CDTV Extended ROM v1.0 (1991). Required as extended ROM for CDTV model. Main kickstart is kick34005.A500.",
            "required": true,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:231-234",
            "system": "commodore-cdtv"
          },
          {
            "aliases": [
              "amiga-os-310-cd32.rom",
              "Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom"
            ],
            "name": "kick40060.CD32",
            "note": "CD32 Kickstart 3.1 rev 40.60 (1993). Main ROM for CD32 and CD32FR models.",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:236-239",
            "system": "commodore-amiga-cd32"
          },
          {
            "aliases": [
              "amiga-os-310-cd32-ext.rom",
              "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"
            ],
            "name": "kick40060.CD32.ext",
            "note": "CD32 Extended ROM rev 40.60 (1993). Required when main ROM is <= 512 KB (not combined).",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:241-244",
            "system": "commodore-amiga-cd32"
          },
          {
            "name": "rom.key",
            "note": "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:5967-5978",
            "system": "commodore-amiga"
          },
          {
            "name": "WHDLoad.key",
            "note": "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:5983-5996",
            "system": "commodore-amiga",
            "unsourceable": "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"
          },
          {
            "name": "WHDLoad.prefs",
            "note": "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:6000-6023",
            "system": "commodore-amiga"
          }
        ],
        "model_kickstart_map": {
          "A1200": {
            "ext": null,
            "kickstart": "kick40068.A1200"
          },
          "A1200OG": {
            "ext": null,
            "kickstart": "kick40068.A1200"
          },
          "A2000": {
            "ext": null,
            "kickstart": "kick40063.A600"
          },
          "A2000OG": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A4030": {
            "ext": null,
            "kickstart": "kick40068.A4000"
          },
          "A4040": {
            "ext": null,
            "kickstart": "kick40068.A4000"
          },
          "A500": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A500OG": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A500PLUS": {
            "ext": null,
            "kickstart": "kick37175.A500"
          },
          "A600": {
            "ext": null,
            "kickstart": "kick40063.A600"
          },
          "CD32": {
            "ext": "kick40060.CD32.ext",
            "kickstart": "kick40060.CD32"
          },
          "CD32FR": {
            "ext": "kick40060.CD32.ext",
            "kickstart": "kick40060.CD32"
          },
          "CDTV": {
            "ext": "kick34005.CDTV",
            "kickstart": "kick34005.A500"
          }
        },
        "notes": "PUAE is a port of UAE (Unix Amiga Emulator) to libretro. It emulates the\nAmiga 500, 500+, 600, 1200, 2000, 4000, CD32, and CDTV. Kickstart ROMs\nare loaded from the RetroArch system directory.\n\nAROS (open-source Kickstart replacement) is available as a built-in fallback\nwhen no Kickstart ROM is found. Compatibility is limited compared to real ROMs.\n\nThe core scans the system directory for files starting with \"kick\", \"amiga-os\",\nor \"KS ROM\". Each filename is matched against a table of known naming\nconventions: standard (kick*.A*), Amiga Forever (amiga-os-*.rom), and\nTOSEC (Kickstart v*.rom). The first valid match is used.\n\nDefault kickstart per model (automatic selection):\n  A500, A500OG, A2000OG, CDTV -> kick34005.A500 (KS 1.3)\n  A500+                        -> kick37175.A500 (KS 2.04)\n  A600                         -> kick40063.A600 (KS 3.1)\n  A1200, A1200OG               -> kick40068.A1200 (KS 3.1)\n  A2000                        -> kick40063.A600 (KS 3.1)\n  A4030, A4040                 -> kick40068.A4000 (KS 3.1)\n  CD32, CD32FR                 -> kick40060.CD32 (KS 3.1)\n  CDTV (ext)                   -> kick34005.CDTV\n  CD32 (ext)                   -> kick40060.CD32.ext\n\nExtended ROM handling: CD32 and CDTV require an extended ROM in addition\nto the main kickstart. If the main ROM filesize is <= 512 KB, the extended\nROM is loaded separately. Combined ROMs (main + ext in one file) skip the\nextended ROM search.\n\nWHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,\nkick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad\nslave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key\n(license) from the system directory.\n\nROM search order (libretro-core.c retro_config_kickstart):\n  1. Exact filename in system directory\n  2. Amiga Forever naming (amiga-os-*.rom)\n  3. TOSEC modified naming (with [!] suffix)\n  4. TOSEC naming (without [!] suffix)\n\ncapsimg.so/capsimg.dll is an optional shared library for IPF floppy image\nsupport (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.\n\nSource: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5610-5750,\nlibretro/libretro-core.c:6044-6093\n",
        "platform_details": {
          "aros_fallback": true,
          "naming_conventions": {
            "amiga_forever": "amiga-os-{version}.rom",
            "standard": "kick{rev}.{model}",
            "tosec": "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"
          },
          "rom_sizes": {
            "ROM_SIZE_128": 131072,
            "ROM_SIZE_256": 262144,
            "ROM_SIZE_512": 524288
          },
          "scan_prefixes": [
            "kick",
            "amiga-os",
            "KS ROM"
          ],
          "source_ref": "libretro/libretro-core.c:2649-2676"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-uae",
        "source_commit": "96ebfcfc2c66233ad37f6dc99ee991211dc719ad",
        "systems": [
          "commodore-amiga",
          "commodore-amiga-cd32",
          "commodore-cdtv"
        ],
        "type": "libretro",
        "upstream": "https://github.com/GnoStiC/PUAE",
        "whdload_kickstarts": [
          "kick33180.A500",
          "kick34005.A500",
          "kick40063.A600",
          "kick40068.A1200"
        ]
      }
    },
    {
      "id": "puae2021",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "2.6.1",
        "cores": [
          "puae2021"
        ],
        "display_name": "Commodore - Amiga (PUAE 2021)",
        "emulator": "PUAE 2021",
        "files": [
          {
            "aliases": [
              "amiga-os-110-ntsc.rom",
              "Kickstart v1.1 rev 31.34 (1985)(Commodore)(A1000)(NTSC).rom"
            ],
            "hle_fallback": true,
            "name": "kick31034.A1000",
            "note": "Kickstart 1.1 rev 31.34 (1985) NTSC. A1000 only.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:170-174",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-110-pal.rom",
              "Kickstart v1.1 rev 32.34 (1986)(Commodore)(A1000)(PAL).rom"
            ],
            "hle_fallback": true,
            "name": "kick32034.A1000",
            "note": "Kickstart 1.1 rev 32.34 (1986) PAL. A1000 only.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:176-179",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-120.rom",
              "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom",
              "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom"
            ],
            "hle_fallback": true,
            "name": "kick33180.A500",
            "note": "Kickstart 1.2 rev 33.180 (1986). A500/A2000. Also used by WHDLoad.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:182-185",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-130.rom",
              "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom",
              "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom"
            ],
            "name": "kick34005.A500",
            "note": "Kickstart 1.3 rev 34.5 (1987). Default for A500/A2000OG/CDTV models. Also used by WHDLoad.",
            "required": true,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:187-190",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-204.rom",
              "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom",
              "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom"
            ],
            "hle_fallback": true,
            "name": "kick37175.A500",
            "note": "Kickstart 2.04 rev 37.175 (1991). Default for A500+ model.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:192-195",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-205-a600.rom",
              "Kickstart v2.05 rev 37.350 (1992)(Commodore)(A600HD)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick37350.A600",
            "note": "Kickstart 2.05 rev 37.350 (1992). A600HD.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:198-201",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a600.rom",
              "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom",
              "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom"
            ],
            "hle_fallback": true,
            "name": "kick40063.A600",
            "note": "Kickstart 3.1 rev 40.63 (1993). Default for A600/A2000 models. Also used by WHDLoad.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:203-206",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-300-a1200.rom",
              "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick39106.A1200",
            "note": "Kickstart 3.0 rev 39.106 (1992). A1200.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:209-212",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a1200.rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom"
            ],
            "name": "kick40068.A1200",
            "note": "Kickstart 3.1 rev 40.68 (1993). Default for A1200/A1200OG models. Also used by WHDLoad.",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:214-217",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-300-a4000.rom",
              "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A4000)[!].rom"
            ],
            "hle_fallback": true,
            "name": "kick39106.A4000",
            "note": "Kickstart 3.0 rev 39.106 (1992). A4000.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:220-223",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-310-a4000.rom",
              "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom"
            ],
            "hle_fallback": true,
            "name": "kick40068.A4000",
            "note": "Kickstart 3.1 rev 40.68 (1993). Default for A4030/A4040 models.",
            "required": false,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:225-228",
            "system": "commodore-amiga"
          },
          {
            "aliases": [
              "amiga-os-130-cdtv-ext.rom",
              "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom",
              "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom"
            ],
            "name": "kick34005.CDTV",
            "note": "CDTV Extended ROM v1.0 (1991). Required as extended ROM for CDTV model. Main kickstart is kick34005.A500.",
            "required": true,
            "size": 262144,
            "source_ref": "libretro/libretro-core.h:231-234",
            "system": "commodore-cdtv"
          },
          {
            "aliases": [
              "amiga-os-310-cd32.rom",
              "Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom"
            ],
            "name": "kick40060.CD32",
            "note": "CD32 Kickstart 3.1 rev 40.60 (1993). Main ROM for CD32 and CD32FR models.",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:236-239",
            "system": "commodore-amiga-cd32"
          },
          {
            "aliases": [
              "amiga-os-310-cd32-ext.rom",
              "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"
            ],
            "name": "kick40060.CD32.ext",
            "note": "CD32 Extended ROM rev 40.60 (1993). Required when main ROM is <= 512 KB (not combined).",
            "required": true,
            "size": 524288,
            "source_ref": "libretro/libretro-core.h:241-244",
            "system": "commodore-amiga-cd32"
          },
          {
            "name": "rom.key",
            "note": "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:5885-5896",
            "system": "commodore-amiga"
          },
          {
            "name": "WHDLoad.key",
            "note": "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:5901-5914",
            "system": "commodore-amiga",
            "unsourceable": "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"
          },
          {
            "name": "WHDLoad.prefs",
            "note": "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present.",
            "required": false,
            "source_ref": "libretro/libretro-core.c:5918-5941",
            "system": "commodore-amiga"
          }
        ],
        "model_kickstart_map": {
          "A1200": {
            "ext": null,
            "kickstart": "kick40068.A1200"
          },
          "A1200OG": {
            "ext": null,
            "kickstart": "kick40068.A1200"
          },
          "A2000": {
            "ext": null,
            "kickstart": "kick40063.A600"
          },
          "A2000OG": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A4030": {
            "ext": null,
            "kickstart": "kick40068.A4000"
          },
          "A4040": {
            "ext": null,
            "kickstart": "kick40068.A4000"
          },
          "A500": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A500OG": {
            "ext": null,
            "kickstart": "kick34005.A500"
          },
          "A500PLUS": {
            "ext": null,
            "kickstart": "kick37175.A500"
          },
          "A600": {
            "ext": null,
            "kickstart": "kick40063.A600"
          },
          "CD32": {
            "ext": "kick40060.CD32.ext",
            "kickstart": "kick40060.CD32"
          },
          "CD32FR": {
            "ext": "kick40060.CD32.ext",
            "kickstart": "kick40060.CD32"
          },
          "CDTV": {
            "ext": "kick34005.CDTV",
            "kickstart": "kick34005.A500"
          }
        },
        "notes": "Frozen snapshot of PUAE at WinUAE 2.6.1 era. Less accurate than current PUAE\n(5.x), intended for weaker devices. BIOS handling is identical to the current\nversion.\n\nPUAE is a port of UAE (Unix Amiga Emulator) to libretro, continuing E-UAE.\nEmulates A500, 500+, 600, 1200, 2000, 4000, CD32, and CDTV. Kickstart ROMs\nare loaded from the RetroArch system directory.\n\nAROS (open-source Kickstart replacement) is available as a built-in fallback\nwhen no Kickstart ROM is found. Compatibility is limited compared to real ROMs.\n\nThe core scans the system directory for files starting with \"kick\", \"amiga-os\",\nor \"KS ROM\". Each filename is matched against a table of known naming\nconventions: standard (kick*.A*), Amiga Forever (amiga-os-*.rom), and\nTOSEC (Kickstart v*.rom). The first valid match is used.\n\nDefault kickstart per model (automatic selection):\n  A500, A500OG, A2000OG, CDTV -> kick34005.A500 (KS 1.3)\n  A500+                        -> kick37175.A500 (KS 2.04)\n  A600                         -> kick40063.A600 (KS 3.1)\n  A1200, A1200OG               -> kick40068.A1200 (KS 3.1)\n  A2000                        -> kick40063.A600 (KS 3.1)\n  A4030, A4040                 -> kick40068.A4000 (KS 3.1)\n  CD32, CD32FR                 -> kick40060.CD32 (KS 3.1)\n  CDTV (ext)                   -> kick34005.CDTV\n  CD32 (ext)                   -> kick40060.CD32.ext\n\nExtended ROM handling: CD32 and CDTV require an extended ROM in addition\nto the main kickstart. If the main ROM filesize is <= 512 KB, the extended\nROM is loaded separately. Combined ROMs (main + ext in one file) skip the\nextended ROM search.\n\nWHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,\nkick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad\nslave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key\n(license) from the system directory.\n\nROM search order (libretro-core.c retro_config_kickstart):\n  1. Exact filename in system directory\n  2. Amiga Forever naming (amiga-os-*.rom)\n  3. TOSEC modified naming (with [!] suffix)\n  4. TOSEC naming (without [!] suffix)\n\ncapsimg.so/capsimg.dll is an optional shared library for IPF floppy image\nsupport (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.\n\nSource: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5534-5700,\nlibretro/libretro-core.c:5786-5945\n",
        "platform_details": {
          "aros_fallback": true,
          "naming_conventions": {
            "amiga_forever": "amiga-os-{version}.rom",
            "standard": "kick{rev}.{model}",
            "tosec": "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"
          },
          "rom_sizes": {
            "ROM_SIZE_128": 131072,
            "ROM_SIZE_256": 262144,
            "ROM_SIZE_512": 524288
          },
          "scan_prefixes": [
            "kick",
            "amiga-os",
            "KS ROM"
          ],
          "source_ref": "libretro/libretro-core.c:2617-2656"
        },
        "profiled_date": "2026-03-24",
        "source": "https://github.com/libretro/libretro-uae/tree/2.6.1",
        "source_commit": "96ebfcfc2c66233ad37f6dc99ee991211dc719ad",
        "systems": [
          "commodore-amiga",
          "commodore-amiga-cd32",
          "commodore-cdtv"
        ],
        "type": "libretro",
        "upstream": "https://github.com/GnoStiC/PUAE",
        "whdload_kickstarts": [
          "kick33180.A500",
          "kick34005.A500",
          "kick40063.A600",
          "kick40068.A1200"
        ]
      }
    },
    {
      "id": "punes",
      "profile": {
        "core_classification": "other",
        "core_version": "0.112",
        "cores": [
          "punes"
        ],
        "display_name": "Nintendo - NES / Famicom (puNES)",
        "emulator": "puNES",
        "files": [
          {
            "description": "Family Computer Disk System BIOS",
            "name": "disksys.rom",
            "note": "8192 bytes are read into PRG ROM and mapped at 0xE000. When none of the four locations holds the file, fds_load_bios logs FDS;bios not found and returns EXIT_ERROR, which the caller propagates, so the disk image does not load. A short read only logs FDS;error on reading bios.",
            "required": true,
            "size": 8192,
            "source_ref": "src/core/fds.c:34,259-332 (fds_load_bios); src/core/fds.c:191-193 (caller); src/core/mappers/mapper_FDS.c:81 (mapping)",
            "system": "nintendo-fds"
          },
          {
            "description": "Game Genie ROM, booted in place of the cartridge to reach the code entry screen",
            "name": "gamegenie.rom",
            "note": "Loaded only while the cheat mode is set to Game Genie. The whole file is read, its length taken from the file itself. Absent, gamegenie_load_rom returns early and the cartridge boots directly.",
            "required": false,
            "source_ref": "src/core/cheat.c:30,69-120 (gamegenie_check_rom_present),121-179 (gamegenie_load_rom); src/core/ines.c:97-99 (caller)",
            "system": "nintendo-nes"
          },
          {
            "description": "NES 2.0 header database, matched by ROM hash",
            "name": "nes20db.xml",
            "note": "Supplies mapper, submapper, mirroring, region, RAM sizes and Vs. System hardware for dumps whose own header is absent or wrong. A miss leaves info.mapper.nes20db.in_use false and the header carried by the ROM is used.",
            "required": false,
            "source_ref": "src/gui/nes20db.cpp:31,49-81 (nes20db_search); src/core/ines.c:276-278, src/core/unif.c:316 (callers); CMakeLists.txt:227 (install)",
            "system": "nintendo-nes"
          },
          {
            "description": "DIP switch database for multicart and Vs. System boards, keyed by CRC32",
            "name": "dip.cfg",
            "note": "Read on every mapper init. A miss leaves dipswitch.used false, which mappers 001, 043, 045, 176, 215, 412 and 447 and the selection dialog at src/gui/qt.cpp:754 all guard on, so the board runs on its reset value.",
            "required": false,
            "source_ref": "src/gui/dipswitch.cpp:30,60-86 (dipswitch_search); src/core/mappers.c:44 (caller); CMakeLists.txt:228 (install)",
            "system": "nintendo-nes"
          }
        ],
        "mode": "standalone",
        "notes": "Qt emulator of the NES, the Famicom and the Family Computer Disk System,\nalso playing NSF and NSFE music files. A cartridge boots with nothing\nsupplied: the 2A03, the PPU and every mapper are emulated in software.\n\nFour names are fixed by the code. disksys.rom and gamegenie.rom share one\nfour-step lookup (src/core/fds.c:265-309, src/core/cheat.c:74-108): the path\nrecorded in the configuration, the working directory, the directory holding\nthe loaded image, then the bios folder of the data directory. nes20db.xml\nand dip.cfg are read from the XDG data directories under a puNES\nsubdirectory, then the base of the data directory, then the application\ndirectory (src/gui/nes20db.cpp:50-79, src/gui/dipswitch.cpp:61-85); the\ninstaller writes both into the shared data directory\n(CMakeLists.txt:227-228).\n\nThe data directory is the application directory under --portable,\n%APPDATA%/puNES on Windows and ~/.local/share/puNES elsewhere\n(src/gui/qt.cpp:561-575), so the bios folder is ~/.local/share/puNES/bios.\n\nNo length and no hash is ever compared. fds_load_bios computes a CRC32 of\nthe BIOS it loaded (src/core/fds.c:329) and the only reader of that value is\nthe log line at src/core/fds.c:502-503.\n\nThe iNES 1.0 game database is compiled in as src/core/database.h and carries\nthe Vs. System PPU type and the region, so Vs. System titles need no\nexternal file. The uPD7756 ADPCM samples of mappers 018, 086 and 072 come\nfrom the Misc ROM area of the NES 2.0 dump itself\n(src/core/mappers/mapper_018.c:51, mapper_086.c:56, mapper_072.c:45).\nloadWaveFiles, which would read <data>/samples/<name>/NN.wav\n(src/core/mappers/waveFile.cpp:76-84), is declared and defined but called\nfrom nowhere in the tree, so no wave file is ever opened.\n\nPalettes, shaders, cheat imports and soft patches are opened from paths the\nuser picks in a file dialog and no name is fixed by the code, so they carry\nno file entry here. A palette shorter than 192 bytes is refused and a\nbuilt-in table is used instead (src/core/palette.c:39-64,\nsrc/video/gfx.c:323-334).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/punesemu/puNES",
        "source_commit": "2ed5b1b2cffcde48ff36f359091756d17d8fe193",
        "systems": [
          "nintendo-nes",
          "nintendo-fds"
        ],
        "type": "standalone",
        "upstream": "https://github.com/punesemu/puNES"
      }
    },
    {
      "id": "puzzlescript",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.2.1",
        "cores": [
          "puzzlescript"
        ],
        "display_name": "PuzzleScript (pzretro)",
        "emulator": "PuzzleScript",
        "files": [],
        "notes": "Libretro port of PuzzleScript, an open-source HTML5 puzzle game engine\nby Stephen Lavelle (increpare). Runs .pz and .pzp puzzle definition files.\nAlso supports PuzzleScript Plus (Auroriax fork) for .pzp files.\n\nThe PuzzleScript and PuzzleScript Plus JavaScript engines are compiled into\nthe binary via QuickJS. No external files required.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/nwhitehead/pzretro",
        "source_commit": "6d859b47092f585a7ec05804c1d51a1676a06531",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/increpare/PuzzleScript"
      }
    },
    {
      "id": "px68k",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.15+",
        "cores": [
          "px68k"
        ],
        "display_name": "Sharp - X68000 (PX68k)",
        "emulator": "px68k",
        "files": [
          {
            "name": "iplrom.dat",
            "note": "X68000 IPL ROM (original model). 128 KB, loaded at IPL buffer offset 0x20000. The core tries iplrom.dat first, then iplrom30.dat, iplromco.dat, iplromxv.dat in order. At least one must be present or the core fails to start.\n",
            "path": "keropi/iplrom.dat",
            "priority": 1,
            "required": true,
            "size": 131072,
            "source_ref": "libretro.c:850-867"
          },
          {
            "name": "iplrom30.dat",
            "note": "X68030 IPL ROM. Alternative to iplrom.dat for X68030 model emulation. Only used if iplrom.dat is not found.\n",
            "path": "keropi/iplrom30.dat",
            "priority": 2,
            "required": false,
            "size": 131072,
            "source_ref": "libretro.c:851"
          },
          {
            "name": "iplromco.dat",
            "note": "X68000 Compact IPL ROM. Alternative to iplrom.dat. Only used if iplrom.dat and iplrom30.dat are not found.\n",
            "path": "keropi/iplromco.dat",
            "priority": 3,
            "required": false,
            "size": 131072,
            "source_ref": "libretro.c:851"
          },
          {
            "name": "iplromxv.dat",
            "note": "X68000 XVI IPL ROM. Last fallback in the IPL search order. Only used if the three other IPL variants are not found.\n",
            "path": "keropi/iplromxv.dat",
            "priority": 4,
            "required": false,
            "size": 131072,
            "source_ref": "libretro.c:851"
          },
          {
            "name": "cgrom.dat",
            "note": "X68000 character generator ROM. 768 KB, provides the font glyphs for text display. If missing, the core falls back to cgrom.tmp (user-generated font cache). Core fails to start if neither file exists.\n",
            "path": "keropi/cgrom.dat",
            "required": true,
            "size": 786432,
            "source_ref": "libretro.c:853, libretro.c:881-891"
          },
          {
            "name": "cgrom.tmp",
            "note": "Alternative font file, used as fallback when cgrom.dat is absent. Typically a font cache generated by the emulator itself on other platforms.\n",
            "path": "keropi/cgrom.tmp",
            "required": false,
            "size": 786432,
            "source_ref": "libretro.c:854, libretro.c:884-888"
          }
        ],
        "notes": {
          "ipl_selection": "The four IPL ROM variants correspond to different X68000 hardware revisions. The core uses whichever it finds first in order: iplrom.dat (original X68000), iplrom30.dat (X68030), iplromco.dat (Compact), iplromxv.dat (XVI). Most users only need iplrom.dat. The IPL also determines SASI vs SCSI disk support based on vectors found at offsets 0x30600-0x30c00.\n",
          "sram": "sram.dat (16 KB) is read/write runtime state, not a BIOS file. The core creates it automatically on first shutdown. It stores X68000 NVRAM settings (boot count, boot device preferences, SRAM-resident programs).\n",
          "subdirectory": "All files must be placed in <system_dir>/keropi/ subdirectory. The core sets this path at init via sprintf(retro_system_conf, \"%s/keropi\", system_dir) and then calls file_setcd() to make it the base for all file_open_c() calls.\n"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/px68k-libretro",
        "source_commit": "cc45b55983b4d30c961a313a77df9bcf9461dc63",
        "systems": [
          "sharp-x68000"
        ],
        "type": "libretro",
        "upstream": "https://github.com/hissorii/px68k"
      }
    },
    {
      "id": "qemu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.1.0",
        "cores": [
          "qemu"
        ],
        "display_name": "QEMU",
        "emulator": "QEMU",
        "files": [
          {
            "md5": "e9ca30100c47a26b66488444c5b0bd15",
            "name": "SeaBIOS (128 KB)",
            "note": "SeaBIOS legacy BIOS for x86/x86_64 PC emulation. Default firmware loaded by pc_sysfw.c for standard PC machine types.\n",
            "path": "qemu/bios.bin",
            "required": true,
            "sha1": "f402170ee4f374c304a7ce0b139d6cecb1732aff",
            "size": 131072,
            "source_ref": "hw/i386/pc_sysfw.c:222,243"
          },
          {
            "md5": "d3dab3095c73cad67afd3cc16a88479c",
            "name": "SeaBIOS (256 KB)",
            "note": "SeaBIOS 256 KB variant. Some machine types or configurations may prefer this larger image.\n",
            "path": "qemu/bios-256k.bin",
            "required": false,
            "sha1": "5fe6078506094333106e6b3f33c7185dea7f0268",
            "size": 262144,
            "source_ref": "pc-bios/meson.build:30"
          },
          {
            "md5": "9f0ddaf6f3b213798bd414273505f2ff",
            "name": "SeaBIOS microvm",
            "note": "Minimal SeaBIOS for the microvm machine type, a stripped-down x86 virtual machine with reduced device set.\n",
            "path": "qemu/bios-microvm.bin",
            "required": false,
            "sha1": "56f33ced7ea0f7581d776396a0ac6cfe2c7c9257",
            "size": 131072,
            "source_ref": "hw/i386/microvm.c:58"
          },
          {
            "md5": "387c48aef9497c6c2b914b1e6b9bc7aa",
            "name": "qboot ROM",
            "note": "Minimal x86 firmware for fast Linux kernel booting.",
            "path": "qemu/qboot.rom",
            "required": false,
            "sha1": "339d3a93c967491c9f1fffe963484386f48bd22c",
            "size": 16384,
            "source_ref": "pc-bios/meson.build:32"
          },
          {
            "md5": "ecef0b49f8f4e61874f012eb12ba0e36",
            "name": "VGA BIOS (ISA)",
            "note": "Standard VGA BIOS from LGPL VGA BIOS project. Loaded by ISA VGA device (vga-isa). Default VGA for older machine types.\n",
            "path": "qemu/vgabios.bin",
            "required": true,
            "sha1": "63d87e2a6618c3a9b2aabecf03ac2456e5e63410",
            "size": 38912,
            "source_ref": "hw/display/vga-isa.c:88, hw/display/vga_int.h:191"
          },
          {
            "md5": "fcd3d3c0b07a9096693d69425cd940f6",
            "name": "VGA BIOS Cirrus",
            "note": "Cirrus Logic GD5446 VGA BIOS.",
            "path": "qemu/vgabios-cirrus.bin",
            "required": false,
            "sha1": "883eb2657ce29661a0466b6b41ce75411f37aad9",
            "size": 38912,
            "source_ref": "hw/display/cirrus_vga.c:3001, hw/display/cirrus_vga_isa.c:67"
          },
          {
            "md5": "8117c3fd986fbbe327badfe38e77db1d",
            "name": "VGA BIOS stdvga",
            "note": "Standard VGA PCI BIOS (Bochs VBE extensions).",
            "path": "qemu/vgabios-stdvga.bin",
            "required": false,
            "sha1": "87fbc0ecb1ee7d4d8c8c88c7d8a2fb3ec8f99ea5",
            "size": 39424,
            "source_ref": "hw/display/vga-pci.c:387"
          },
          {
            "md5": "83e39bd3e056291ee50d2b5d937bab3e",
            "name": "VGA BIOS bochs-display",
            "note": "Bochs display device VGA BIOS.",
            "path": "qemu/vgabios-bochs-display.bin",
            "required": false,
            "sha1": "9e2edd3d835219cde63a20e2cd58107d7e96ef5b",
            "size": 28672,
            "source_ref": "hw/display/bochs-display.c:365"
          },
          {
            "md5": "c55512e313c4cb08ec5a36198fdfef33",
            "name": "VGA BIOS ramfb",
            "note": "RAM framebuffer VGA BIOS.",
            "path": "qemu/vgabios-ramfb.bin",
            "required": false,
            "sha1": "49df9be557f0f0277c8fedb889257e279586d536",
            "size": 28672,
            "source_ref": "hw/display/ramfb.c:150"
          },
          {
            "md5": "013cb287a295dc6c039921c6883a767e",
            "name": "VGA BIOS ATI",
            "note": "ATI VGA BIOS for emulated ATI display adapter.",
            "path": "qemu/vgabios-ati.bin",
            "required": false,
            "sha1": "ded141cacdebf557ec552597cbf57cd989cec3e2",
            "size": 39424,
            "source_ref": "hw/display/ati.c:1066"
          },
          {
            "md5": "558420a5ad839b10906d5d73e92a4160",
            "name": "VGA BIOS QXL",
            "note": "QXL paravirtual display VGA BIOS.",
            "path": "qemu/vgabios-qxl.bin",
            "required": false,
            "sha1": "527227abd5f3348c382d4b02703389fbeb83b067",
            "size": 39424,
            "source_ref": "hw/display/qxl.c:2512"
          },
          {
            "md5": "8f1e5e497342c503f62a50912f0447e0",
            "name": "VGA BIOS VirtIO",
            "note": "VirtIO GPU VGA BIOS.",
            "path": "qemu/vgabios-virtio.bin",
            "required": false,
            "sha1": "cddc53b94793609d1e837d78cd5468fcc1ed9164",
            "size": 39424,
            "source_ref": "hw/display/virtio-vga.c:233"
          },
          {
            "md5": "6635fe944eab228ae01c814107674199",
            "name": "VGA BIOS VMware",
            "note": "VMware SVGA II display VGA BIOS.",
            "path": "qemu/vgabios-vmware.bin",
            "required": false,
            "sha1": "c54901ab8f526ab201ebf1b3ecdf711e38e6c259",
            "size": 39424,
            "source_ref": "hw/display/vmware_vga.c:1349"
          },
          {
            "md5": "b8cec9572e408a3259914f9aba8664cb",
            "name": "KVM VAPIC",
            "note": "KVM virtual APIC option ROM for APIC acceleration on x86.",
            "path": "qemu/kvmvapic.bin",
            "required": false,
            "sha1": "670c9cc79b4859944705eece710dc332188b79b4",
            "size": 9216,
            "source_ref": "hw/i386/vapic.c:733"
          },
          {
            "md5": "ab40dea9ff35ec29b506fdae5bf11463",
            "name": "Linux boot ROM",
            "note": "Option ROM for direct Linux kernel booting via -kernel.",
            "path": "qemu/linuxboot.bin",
            "required": false,
            "sha1": "fd19bef7f5647960952520389f448364762ed948",
            "size": 1024,
            "source_ref": "hw/i386/x86-common.c:964"
          },
          {
            "md5": "8cb622dc1c9290a019a801e972c9e4f9",
            "name": "Linux boot DMA ROM",
            "note": "DMA-capable option ROM for direct Linux kernel booting.",
            "path": "qemu/linuxboot_dma.bin",
            "required": false,
            "sha1": "0bff50c10727bd9c85c831ea92b7a52699959992",
            "size": 1536,
            "source_ref": "hw/i386/x86-common.c:966"
          },
          {
            "md5": "552a0c03c40bb3ec292f5349ea29cf86",
            "name": "Multiboot ROM",
            "note": "Option ROM for Multiboot kernel loading.",
            "path": "qemu/multiboot.bin",
            "required": false,
            "sha1": "a8b58ae464fc6fb26799432ae867bf57c546ff80",
            "size": 1024,
            "source_ref": "hw/i386/multiboot.c:408"
          },
          {
            "md5": "e942cc4f612050c7331d33a34b0d5192",
            "name": "Multiboot DMA ROM",
            "note": "DMA-capable Multiboot option ROM.",
            "path": "qemu/multiboot_dma.bin",
            "required": false,
            "sha1": "32ab1cf336b674bfb154eb7a939a3e3275a92647",
            "size": 1024,
            "source_ref": "hw/i386/multiboot.c:406"
          },
          {
            "md5": "bb045d6f0380ad2af3531edeff92a117",
            "name": "PVH boot ROM",
            "note": "Option ROM for PVH (paravirtualized hardware) ELF booting.",
            "path": "qemu/pvh.bin",
            "required": false,
            "sha1": "c2191e6495103c1f43e9b6ca8930e44c2245e476",
            "size": 2048,
            "source_ref": "hw/i386/x86-common.c:735"
          },
          {
            "md5": "898d7d0b3ed4a030c877b9185b4ef6be",
            "name": "PXE e1000",
            "note": "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e).",
            "path": "qemu/pxe-e1000.rom",
            "required": false,
            "sha1": "368e8e9827ae8757a7449319831078b6d5efb83f",
            "size": 67072,
            "source_ref": "pc-bios/meson.build:47"
          },
          {
            "md5": "2f8279177fdc2ce5abc47d9f1e303db1",
            "name": "PXE eepro100",
            "note": "iPXE PXE boot ROM for Intel eepro100 NIC (8086:1209). Device default romfile.",
            "path": "qemu/pxe-eepro100.rom",
            "required": false,
            "sha1": "b19572c9c2a11f03282df81c0397aceed409a86c",
            "size": 61440,
            "source_ref": "hw/net/eepro100.c:2077"
          },
          {
            "md5": "095cdf2b26084ce22adb883e9c43fc5a",
            "name": "PXE ne2k_pci",
            "note": "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940).",
            "path": "qemu/pxe-ne2k_pci.rom",
            "required": false,
            "sha1": "f37f43f89dc99afe0442ee0b7a431ee790ad6bf6",
            "size": 61440,
            "source_ref": "pc-bios/meson.build:49"
          },
          {
            "md5": "15e38b82922a058c6df6eaffbad1b916",
            "name": "PXE pcnet",
            "note": "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000).",
            "path": "qemu/pxe-pcnet.rom",
            "required": false,
            "sha1": "13a039bf9916f1db42d3a019591d372b4cf4aee9",
            "size": 61440,
            "source_ref": "pc-bios/meson.build:50"
          },
          {
            "md5": "22f4b6ae5650988f999ee651a3734462",
            "name": "PXE rtl8139",
            "note": "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139).",
            "path": "qemu/pxe-rtl8139.rom",
            "required": false,
            "sha1": "7b512c0a7a13bc3c254a25237e4d4612170f4391",
            "size": 61440,
            "source_ref": "pc-bios/meson.build:51"
          },
          {
            "md5": "91ad9770f5717a89d518534f45f1332d",
            "name": "PXE virtio",
            "note": "iPXE PXE boot ROM for VirtIO NIC (1af4:1000).",
            "path": "qemu/pxe-virtio.rom",
            "required": false,
            "sha1": "3e3f77cfe70af904133db94f27ec24e3c9c43648",
            "size": 60416,
            "source_ref": "pc-bios/meson.build:52"
          },
          {
            "md5": "d8330b99643e31b51e7710fa26c7e859",
            "name": "EFI e1000",
            "note": "iPXE EFI boot ROM for Intel e1000 NIC. Device default romfile.",
            "path": "qemu/efi-e1000.rom",
            "required": false,
            "sha1": "a3df5fc33ab0190f470b34104ff3c0679cecbab6",
            "size": 159232,
            "source_ref": "hw/net/e1000.c:1708"
          },
          {
            "md5": "a55bf3f4988d4a736c71a1300636cd69",
            "name": "EFI e1000e",
            "note": "iPXE EFI boot ROM for Intel e1000e NIC. Device default romfile.",
            "path": "qemu/efi-e1000e.rom",
            "required": false,
            "sha1": "1d37f3ae6748d4deefe9fd5188a2f557bf265d61",
            "size": 159232,
            "source_ref": "hw/net/e1000e.c:689"
          },
          {
            "md5": "d2a2f92710f5a9f77281e9492a249afb",
            "name": "EFI eepro100",
            "note": "iPXE EFI boot ROM for Intel eepro100 NIC.",
            "path": "qemu/efi-eepro100.rom",
            "required": false,
            "sha1": "956d9592fea33374ef0f1900a185b6e1109ea765",
            "size": 159232,
            "source_ref": "pc-bios/meson.build:54"
          },
          {
            "md5": "10b66275b3644af301c64a3c545c3daf",
            "name": "EFI ne2k_pci",
            "note": "iPXE EFI boot ROM for NE2000 PCI NIC. Device default romfile.",
            "path": "qemu/efi-ne2k_pci.rom",
            "required": false,
            "sha1": "adb7199f545fdb66c325b142c8dbc4cddb99a20d",
            "size": 157696,
            "source_ref": "hw/net/ne2000-pci.c:111"
          },
          {
            "md5": "374696f4fffa83c9cf18272212c21d83",
            "name": "EFI pcnet",
            "note": "iPXE EFI boot ROM for AMD PCnet NIC. Device default romfile.",
            "path": "qemu/efi-pcnet.rom",
            "required": false,
            "sha1": "9e5a4bb247c6a1777c89117ca091f94342b9046d",
            "size": 157696,
            "source_ref": "hw/net/pcnet-pci.c:267"
          },
          {
            "md5": "f81dbbd7001a8db631f2a548b7d08c4e",
            "name": "EFI rtl8139",
            "note": "iPXE EFI boot ROM for Realtek RTL8139 NIC. Device default romfile.",
            "path": "qemu/efi-rtl8139.rom",
            "required": false,
            "sha1": "99a1e431cc0cb0a78d5803875dfa687e12a947f4",
            "size": 160768,
            "source_ref": "hw/net/rtl8139.c:3423"
          },
          {
            "md5": "d3887f04c23035cae3f0e1075deea459",
            "name": "EFI virtio",
            "note": "iPXE EFI boot ROM for VirtIO NIC. Device default romfile.",
            "path": "qemu/efi-virtio.rom",
            "required": false,
            "sha1": "1596e9b97f0bc8b5ff3e444235690a549ee982c6",
            "size": 160768,
            "source_ref": "hw/virtio/virtio-net-pci.c:73"
          },
          {
            "md5": "ea1ba222dbd5aa356ea1f29393ae55e1",
            "name": "EFI vmxnet3",
            "note": "iPXE EFI boot ROM for VMware vmxnet3 NIC. Device default romfile.",
            "path": "qemu/efi-vmxnet3.rom",
            "required": false,
            "sha1": "6557242402387a6319a0db6abb916ada48e1391c",
            "size": 156672,
            "source_ref": "hw/net/vmxnet3.c:2508"
          },
          {
            "name": "EDK2 x86_64 UEFI",
            "note": "TianoCore UEFI firmware for x86_64. Built from edk2-stable202302.",
            "path": "qemu/edk2-x86_64-code.fd",
            "required": false,
            "sha1": "eac1a94b8e0d7c53fd5df001c36794ec34c7c724",
            "size": 3653632,
            "source_ref": "pc-bios/meson.build:12"
          },
          {
            "name": "EDK2 x86_64 Secure Boot UEFI",
            "note": "TianoCore UEFI firmware for x86_64 with Secure Boot support.",
            "path": "qemu/edk2-x86_64-secure-code.fd",
            "required": false,
            "sha1": "617abe2746696bb4a309d72cecb446dc76a2a61e",
            "size": 3653632,
            "source_ref": "pc-bios/meson.build:13"
          },
          {
            "name": "EDK2 i386 UEFI",
            "note": "TianoCore UEFI firmware for i386.",
            "path": "qemu/edk2-i386-code.fd",
            "required": false,
            "sha1": "45b8faebdfaaf19d16e3a7c5f60d69214685071c",
            "size": 3653632,
            "source_ref": "pc-bios/meson.build:9"
          },
          {
            "name": "EDK2 i386 Secure Boot UEFI",
            "note": "TianoCore UEFI firmware for i386 with Secure Boot support.",
            "path": "qemu/edk2-i386-secure-code.fd",
            "required": false,
            "sha1": "6982abec8ef2ed7c8293163d5a0bd69a01a2126f",
            "size": 3653632,
            "source_ref": "pc-bios/meson.build:10"
          },
          {
            "name": "EDK2 i386 UEFI vars template",
            "note": "UEFI variable store template for i386/x86_64 EDK2 firmware.",
            "path": "qemu/edk2-i386-vars.fd",
            "required": false,
            "sha1": "b62e676c9317a32aaa9ee1d76268d8c55663bd6e",
            "size": 540672,
            "source_ref": "pc-bios/meson.build:11"
          },
          {
            "name": "EDK2 AArch64 UEFI",
            "note": "TianoCore UEFI firmware for AArch64 (ARM 64-bit).",
            "path": "qemu/edk2-aarch64-code.fd",
            "required": false,
            "sha1": "514edbce58bfa877170673c1799351a7dab3b6df",
            "size": 67108864,
            "source_ref": "pc-bios/meson.build:4"
          },
          {
            "name": "EDK2 ARM UEFI",
            "note": "TianoCore UEFI firmware for ARM (32-bit).",
            "path": "qemu/edk2-arm-code.fd",
            "required": false,
            "sha1": "c20f01c28b59b388abb9d0febeec45d801a632f0",
            "size": 67108864,
            "source_ref": "pc-bios/meson.build:5"
          },
          {
            "name": "EDK2 ARM UEFI vars template",
            "note": "UEFI variable store template for ARM/AArch64 EDK2 firmware.",
            "path": "qemu/edk2-arm-vars.fd",
            "required": false,
            "sha1": "b051167e0e57bd13d77ed92ef7b474872f44ec6d",
            "size": 67108864,
            "source_ref": "pc-bios/meson.build:6"
          },
          {
            "name": "EDK2 RISC-V UEFI",
            "note": "TianoCore UEFI firmware for RISC-V 64-bit.",
            "path": "qemu/edk2-riscv-code.fd",
            "required": false,
            "sha1": "2c8633d881ece0c4794d740138a318f7e9af480c",
            "size": 33554432,
            "source_ref": "pc-bios/meson.build:7"
          },
          {
            "name": "EDK2 RISC-V UEFI vars template",
            "note": "UEFI variable store template for RISC-V EDK2 firmware.",
            "path": "qemu/edk2-riscv-vars.fd",
            "required": false,
            "sha1": "c4e6cce4247ba8f32f528c1c69f49228f616677f",
            "size": 33554432,
            "source_ref": "pc-bios/meson.build:8"
          },
          {
            "name": "OpenBIOS PowerPC",
            "note": "OpenBIOS (IEEE 1275 Open Firmware) for PowerPC emulation. Default for -M mac99, -M g3beige and other PPC machines.\n",
            "path": "qemu/openbios-ppc",
            "required": false,
            "sha1": "0ef5051dcb318c0bc45d1908f8318d6eece8686a",
            "size": 677196,
            "source_ref": "hw/ppc/mac_oldworld.c:60, hw/ppc/mac_newworld.c:86"
          },
          {
            "name": "SLOF (Slimline Open Firmware)",
            "note": "IBM SLOF firmware for pSeries (POWER) machine type. Built from qemu-slof-20230918.",
            "path": "qemu/slof.bin",
            "required": false,
            "sha1": "a03a94acfe555804d66cc6c74760ae1375a71a64",
            "size": 995000,
            "source_ref": "hw/ppc/spapr.c:106"
          },
          {
            "name": "skiboot",
            "note": "OPAL firmware for OpenPOWER PowerNV (non-virtualized) machine type.",
            "path": "qemu/skiboot.lid",
            "required": false,
            "sha1": "8052069aa9714c23be05b4e62fb245a3d572cb0f",
            "size": 2527328,
            "source_ref": "hw/ppc/pnv.c:63"
          },
          {
            "name": "VOF (Virtual Open Firmware)",
            "note": "Minimal Open Firmware shim for -machine pseries,x-vof=on. Also default for Pegasos II.",
            "path": "qemu/vof.bin",
            "required": false,
            "sha1": "fc737b34a390f5752cb7e35b33d71f4f438ab607",
            "size": 3456,
            "source_ref": "hw/ppc/spapr.c:107, hw/ppc/pegasos2.c:43"
          },
          {
            "name": "VOF NVRAM",
            "note": "NVRAM template for VOF (Virtual Open Firmware).",
            "path": "qemu/vof-nvram.bin",
            "required": false,
            "sha1": "5d1184609b87f78635f0575467a1c3f440900ff0",
            "size": 16384,
            "source_ref": "pc-bios/meson.build:83"
          },
          {
            "name": "U-Boot e500",
            "note": "U-Boot for PowerPC e500 (qemu-ppce500 target). Built from upstream denx u-boot, commit 2072e72.",
            "path": "qemu/u-boot.e500",
            "required": false,
            "sha1": "9ea03f249f856cdcb4399cc1f5a5031729379911",
            "size": 421720,
            "source_ref": "hw/ppc/e500.c:1184"
          },
          {
            "name": "U-Boot SAM460",
            "note": "U-Boot for Sam460ex (AmigaOne) PowerPC board.",
            "path": "qemu/u-boot-sam460-20100605.bin",
            "required": false,
            "sha1": "0399a79ac0cf77f0da70af9baec7548a3b368f0a",
            "size": 524288,
            "source_ref": "pc-bios/meson.build:74"
          },
          {
            "name": "QEMU VGA Mac driver",
            "note": "QemuMacDrivers VGA driver for PPC MacOS guests.",
            "path": "qemu/qemu_vga.ndrv",
            "required": false,
            "sha1": "638c6262a6eb579ec3d1c9292566ac94c942dc15",
            "size": 18752,
            "source_ref": "hw/ppc/mac_oldworld.c:58, hw/ppc/mac_newworld.c:84"
          },
          {
            "name": "OpenBIOS Sparc32",
            "note": "OpenBIOS for Sparc32 emulation (sun4m).",
            "path": "qemu/openbios-sparc32",
            "required": false,
            "sha1": "5a4f2124c8f093f8aee99fbcebcf5d17d789ff26",
            "size": 382080,
            "source_ref": "hw/sparc/sun4m.c:79"
          },
          {
            "name": "OpenBIOS Sparc64",
            "note": "OpenBIOS for Sparc64 (UltraSPARC) emulation (sun4u).",
            "path": "qemu/openbios-sparc64",
            "required": false,
            "sha1": "c6e215fe460629d35688ab8e51faf6f765827cd6",
            "size": 1593408,
            "source_ref": "hw/sparc64/sun4u.c:67"
          },
          {
            "name": "QEMU TCX display",
            "note": "TCX framebuffer FCode driver for Sparc32 OpenBIOS.",
            "path": "qemu/QEMU,tcx.bin",
            "required": false,
            "sha1": "5f1792a73ee47d78b2160191ecb2c92f353f93ad",
            "size": 1402,
            "source_ref": "hw/display/tcx.c:38,827"
          },
          {
            "name": "QEMU cgthree display",
            "note": "CG3 framebuffer FCode driver for Sparc32 OpenBIOS.",
            "path": "qemu/QEMU,cgthree.bin",
            "required": false,
            "sha1": "619b86fb02faf8f682474be3f0653b58015008ba",
            "size": 850,
            "source_ref": "hw/display/cg3.c:44,303"
          },
          {
            "name": "U-Boot LEON3",
            "note": "U-Boot for LEON3 SPARC board. Not shipped with QEMU, user-supplied.",
            "path": "qemu/u-boot.bin",
            "required": false,
            "source_ref": "hw/sparc/leon3.c:53"
          },
          {
            "name": "Alpha PALcode",
            "note": "PALcode firmware for Alpha (Clipper/DP264) machine emulation.",
            "path": "qemu/palcode-clipper",
            "required": false,
            "sha1": "47b0870aaa45a7aa0d48847fd905908fb06f3e9f",
            "size": 153728,
            "source_ref": "hw/alpha/dp264.c:139"
          },
          {
            "name": "OpenSBI RISC-V 32",
            "note": "OpenSBI (Supervisor Binary Interface) firmware for RISC-V 32-bit.",
            "path": "qemu/opensbi-riscv32-generic-fw_dynamic.bin",
            "required": false,
            "sha1": "7a23dfdeef3d78ffc89d86e89fc06a36f1e4386f",
            "size": 268312,
            "source_ref": "hw/riscv/boot.c:92"
          },
          {
            "name": "OpenSBI RISC-V 64",
            "note": "OpenSBI firmware for RISC-V 64-bit.",
            "path": "qemu/opensbi-riscv64-generic-fw_dynamic.bin",
            "required": false,
            "sha1": "6883bfd1991c0ef0d67b0967e7dcbd60420dd480",
            "size": 272504,
            "source_ref": "hw/riscv/boot.c:92"
          },
          {
            "name": "S390 CCW firmware",
            "note": "Channel Command Word boot firmware for s390x emulation.",
            "path": "qemu/s390-ccw.img",
            "required": false,
            "sha1": "7b4fa888d32ca8ddbc752f7442e4d055cee1871a",
            "size": 42608,
            "source_ref": "hw/s390x/ipl.c:149"
          },
          {
            "name": "S390 network boot",
            "note": "Network boot firmware for s390x emulation.",
            "path": "qemu/s390-netboot.img",
            "required": false,
            "sha1": "f6cec671408117bd9a31e982682662f27ef4fb2c",
            "size": 67232,
            "source_ref": "hw/s390x/ipl.c:497"
          },
          {
            "name": "HP-PA firmware (32-bit)",
            "note": "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation.",
            "path": "qemu/hppa-firmware.img",
            "required": false,
            "sha1": "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0",
            "size": 167820,
            "source_ref": "hw/hppa/machine.c:424"
          },
          {
            "name": "HP-PA firmware (64-bit)",
            "note": "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation.",
            "path": "qemu/hppa-firmware64.img",
            "required": false,
            "sha1": "b42f6d4ca74073de6c038579b4a9323ad0a6b398",
            "size": 206024,
            "source_ref": "hw/hppa/machine.c:424"
          },
          {
            "name": "MIPS BIOS (big-endian)",
            "note": "Default BIOS for big-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU.",
            "path": "qemu/mips_bios.bin",
            "required": false,
            "source_ref": "hw/mips/malta.c:97"
          },
          {
            "name": "MIPS BIOS (little-endian)",
            "note": "Default BIOS for little-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU.",
            "path": "qemu/mipsel_bios.bin",
            "required": false,
            "source_ref": "hw/mips/malta.c:99"
          },
          {
            "name": "Loongson3 BIOS",
            "note": "Default BIOS for Loongson3 virtual MIPS machine. Not shipped with QEMU.",
            "path": "qemu/bios_loongson3.bin",
            "required": false,
            "source_ref": "hw/mips/loongson3_virt.c:63"
          },
          {
            "name": "PMON Fuloong2e",
            "note": "PMON monitor for Fuloong2e MIPS board. Not shipped with QEMU.",
            "path": "qemu/pmon_2e.bin",
            "required": false,
            "source_ref": "hw/mips/fuloong2e.c:58"
          },
          {
            "name": "Macintosh ROM",
            "note": "Apple Macintosh ROM for Quadra 800 emulation. Not shipped with QEMU.",
            "path": "qemu/MacROM.bin",
            "required": false,
            "source_ref": "hw/m68k/q800.c:62"
          },
          {
            "name": "Canon A1100 ROM",
            "note": "Canon PowerShot A1100 IS DIGIC camera ROM. Not shipped with QEMU.",
            "path": "qemu/canon-a1100-rom1.bin",
            "required": false,
            "source_ref": "hw/arm/digic_boards.c:131"
          },
          {
            "name": "NPCM7xx boot ROM",
            "note": "Boot ROM for Nuvoton NPCM7xx BMC (ARM Cortex-A9).",
            "path": "qemu/npcm7xx_bootrom.bin",
            "required": false,
            "sha1": "22a75d26a0591d2c7763765b6381fa2f73de43e1",
            "size": 768,
            "source_ref": "hw/arm/npcm7xx_boards.c:56"
          },
          {
            "name": "Bamboo DTB (PPC)",
            "note": "Device tree blob for PowerPC Bamboo (440EP) board.",
            "path": "qemu/bamboo.dtb",
            "required": false,
            "sha1": "ebdf1745479f4ec88459bbd9ef16ee1114018508",
            "size": 3211,
            "source_ref": "hw/ppc/ppc440_bamboo.c:38"
          },
          {
            "name": "Canyonlands DTB (PPC)",
            "note": "Device tree blob for PowerPC Canyonlands (460EX) / Sam460ex board.",
            "path": "qemu/canyonlands.dtb",
            "required": false,
            "sha1": "8a2fda0b4f23a92eb44776b5d7ffe951987062da",
            "size": 9779,
            "source_ref": "hw/ppc/sam460ex.c:45"
          },
          {
            "name": "Petalogix ML605 DTB (MicroBlaze)",
            "note": "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board. MicroBlaze target not built in libretro core.",
            "path": "qemu/petalogix-ml605.dtb",
            "required": false,
            "sha1": "892d265838866869b8a8ef104252ff5b2fda156f",
            "size": 9882,
            "source_ref": "pc-bios/meson.build:91"
          },
          {
            "name": "Petalogix S3ADSP1800 DTB (MicroBlaze)",
            "note": "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board. MicroBlaze target not built in libretro core.",
            "path": "qemu/petalogix-s3adsp1800.dtb",
            "required": false,
            "sha1": "976600e3f89ecc1f3564b7077f53c58e0b565280",
            "size": 8161,
            "source_ref": "pc-bios/meson.build:90"
          },
          {
            "name": "Virtex ML507 DTB (PPC)",
            "note": "Device tree blob for Xilinx Virtex ML507 PowerPC board. Not shipped with QEMU.",
            "path": "qemu/virtex-ml507.dtb",
            "required": false,
            "source_ref": "hw/ppc/virtex_ml507.c:148"
          }
        ],
        "notes": {
          "bios_directory": "All files go in {retroarch_system_dir}/qemu/. The libretro core adds this path via qemu_add_data_dir() in ui/libretro.c:659-660.\n",
          "default_usage": "For typical x86/x86_64 usage (loading .iso/.img/.qcow files directly), only bios.bin (or bios-256k.bin) and vgabios.bin are strictly needed. Other VGA BIOS variants are loaded depending on the emulated GPU. PXE/EFI ROMs are only needed for network booting.\n",
          "edk2": "EDK2 UEFI firmware is shipped as bz2-compressed blobs in pc-bios/. These provide UEFI boot for x86, ARM, and RISC-V machine types. Users specify them via -bios or pflash in .qemu_cmd_line files.\n",
          "experimental": "This core is marked is_experimental=true in its .info file.",
          "multi_arch": "The libretro build targets 17 architectures. Non-x86 firmware is only needed when using .qemu_cmd_line files that invoke a different qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9).\n",
          "version": "Based on QEMU 9.0.50 (io12/qemu-libretro)"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/io12/qemu-libretro",
        "source_commit": "486f2d58930f7f0bea5717b6fc06e7fa3dd109ed",
        "systems": [
          "ibm-pc",
          "x86",
          "x86-64",
          "ppc",
          "ppc64",
          "sparc",
          "sparc64",
          "arm",
          "aarch64",
          "mips",
          "mips64",
          "riscv32",
          "riscv64",
          "s390x",
          "m68k",
          "alpha",
          "hppa"
        ],
        "type": "libretro",
        "upstream": "https://github.com/qemu/qemu"
      }
    },
    {
      "id": "quasi88",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.6.4",
        "cores": [
          "quasi88"
        ],
        "display_name": "NEC - PC-8000 / PC-8800 series (QUASI88)",
        "emulator": "QUASI88",
        "files": [
          {
            "aliases": [
              "N88.ROM"
            ],
            "hle_fallback": true,
            "name": "n88.rom",
            "note": "N88-BASIC main ROM (32 KB). Falls back to pseudo-BIOS if missing.",
            "path": "quasi88/n88.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/LIBRETRO/libretro.c:550-551"
          },
          {
            "aliases": [
              "N88_0.ROM",
              "N88EXT0.ROM",
              "n88ext0.rom"
            ],
            "name": "n88_0.rom",
            "note": "N88-BASIC V2 extension ROM 0 (8 KB). Needed by most software.",
            "path": "quasi88/n88_0.rom",
            "required": true,
            "size": 8192,
            "source_ref": "src/LIBRETRO/libretro.c:555"
          },
          {
            "aliases": [
              "N88_1.ROM",
              "N88EXT1.ROM",
              "n88ext1.rom"
            ],
            "name": "n88_1.rom",
            "note": "N88-BASIC V1H extension ROM 1 (8 KB). For V1 High-speed mode.",
            "path": "quasi88/n88_1.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/LIBRETRO/libretro.c:556"
          },
          {
            "aliases": [
              "N88_2.ROM",
              "N88EXT2.ROM",
              "n88ext2.rom"
            ],
            "name": "n88_2.rom",
            "note": "N88-BASIC V1S extension ROM 2 (8 KB). For V1 Standard mode.",
            "path": "quasi88/n88_2.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/LIBRETRO/libretro.c:557"
          },
          {
            "aliases": [
              "N88_3.ROM",
              "N88EXT3.ROM",
              "n88ext3.rom"
            ],
            "name": "n88_3.rom",
            "note": "N88-BASIC extension ROM 3 (8 KB). Older V2 extension.",
            "path": "quasi88/n88_3.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/LIBRETRO/libretro.c:558"
          },
          {
            "aliases": [
              "N88N.ROM",
              "N80.ROM",
              "n80.rom"
            ],
            "name": "n88n.rom",
            "note": "N-BASIC ROM (32 KB). For PC-8001 compatible N-BASIC mode.",
            "path": "quasi88/n88n.rom",
            "required": false,
            "size": 32768,
            "source_ref": "src/LIBRETRO/libretro.c:559"
          },
          {
            "aliases": [
              "DISK.ROM",
              "N88SUB.ROM",
              "n88sub.rom"
            ],
            "hle_fallback": true,
            "name": "disk.rom",
            "note": "Disk subsystem ROM (2 KB, 2D type). Falls back to pseudo-BIOS if missing.",
            "path": "quasi88/disk.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/LIBRETRO/libretro.c:552-553"
          },
          {
            "aliases": [
              "N88KNJ1.ROM",
              "KANJI1.ROM",
              "kanji1.rom"
            ],
            "name": "n88knj1.rom",
            "note": "Kanji ROM level 1 (128 KB). Required for Japanese text display.",
            "path": "quasi88/n88knj1.rom",
            "required": false,
            "size": 131072,
            "source_ref": "src/LIBRETRO/libretro.c:560"
          },
          {
            "aliases": [
              "N88KNJ2.ROM",
              "KANJI2.ROM",
              "kanji2.rom"
            ],
            "name": "n88knj2.rom",
            "note": "Kanji ROM level 2 (128 KB). Extended kanji character set.",
            "path": "quasi88/n88knj2.rom",
            "required": false,
            "size": 131072,
            "source_ref": "src/LIBRETRO/libretro.c:561"
          },
          {
            "aliases": [
              "N88JISHO.ROM",
              "JISYO.ROM",
              "jisyo.rom"
            ],
            "name": "n88jisho.rom",
            "note": "Dictionary ROM (512 KB). Japanese dictionary lookup.",
            "path": "quasi88/n88jisho.rom",
            "required": false,
            "size": 524288,
            "source_ref": "src/LIBRETRO/libretro.c:562"
          },
          {
            "aliases": [
              "FONT.ROM"
            ],
            "hle_fallback": true,
            "name": "font.rom",
            "note": "ANK font ROM (2 KB). Falls back to built-in font or kanji ROM glyphs.",
            "path": "quasi88/font.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/LIBRETRO/libretro.c:566"
          },
          {
            "aliases": [
              "FONT2.ROM"
            ],
            "hle_fallback": true,
            "name": "font2.rom",
            "note": "Second font ROM (up to 4 KB). Falls back to built-in ANH font.",
            "path": "quasi88/font2.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/LIBRETRO/libretro.c:576"
          },
          {
            "aliases": [
              "FONT3.ROM"
            ],
            "hle_fallback": true,
            "name": "font3.rom",
            "note": "Third font ROM (up to 4 KB). Zeroed out if missing.",
            "path": "quasi88/font3.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/LIBRETRO/libretro.c:588"
          }
        ],
        "notes": "Files go in <system_dir>/quasi88/ or directly in <system_dir>/.\nThe pseudo-BIOS covers N88-BASIC V2 and the disk subsystem at a basic\nlevel. For full compatibility (N-BASIC, V1H/V1S modes, dictionary lookup,\nkanji display), real ROM files are needed.\n\nCore option \"quasi88_basic_mode\" selects N88 V2, N88 V1H, N88 V1S,\nor N mode. Each mode requires its corresponding ROM. N mode emulates\nPC-8001 series (N-BASIC) and requires n88n.rom.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/libretro/quasi88-libretro",
        "source_commit": "b5a0e044a914c9a6b8d7b2dd2ddd152f93d35687",
        "systems": [
          "nec-pc-88",
          "nec-pc-80"
        ],
        "type": "libretro",
        "upstream": "https://www.retropc.net/showzoh/quasi88/"
      }
    },
    {
      "id": "quicknes",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.0-WIP",
        "cores": [
          "quicknes"
        ],
        "display_name": "Nintendo - NES / Famicom (QuickNES)",
        "emulator": "QuickNES",
        "files": [],
        "notes": "NES emulator by blargg (Shay Green), maintained by kode54.\nNES has no BIOS. All palettes compiled in.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/QuickNES_Core",
        "source_commit": "dbf19f73e3eb9701d1c7f5898f57c097e05c9fbd",
        "systems": [
          "nintendo-nes"
        ],
        "type": "libretro",
        "upstream": "https://github.com/kode54/QuickNES"
      }
    },
    {
      "id": "race",
      "profile": {
        "analysis": {
          "npbios": {
            "filename": "NPBIOS.BIN",
            "loaded_by": "race-memory.c:loadBIOS()",
            "note": "loadBIOS() is wrapped in #if 0 and always returns 0 in the libretro port.\nIn upstream (8bitpsp/race, alekmaul/race), the function is live and loads\nNPBIOS.BIN optionally, falling back to HLE if not found.\n",
            "size": 65536,
            "source_ref": "race-memory.c:337-361",
            "status": "disabled",
            "upstream_ref": "memory.cpp:346-365 (8bitpsp/race)",
            "upstream_status": "optional"
          }
        },
        "core_classification": "community_fork",
        "core_version": "v2.16",
        "cores": [
          "race"
        ],
        "display_name": "SNK - Neo Geo Pocket / Color (RACE)",
        "emulator": "RACE (Neo Geo Pocket)",
        "files": [],
        "notes": "RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator originally by\nJudge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified\nby theelf, then adapted for libretro.\n\nNo external BIOS files are required. The upstream versions (GP2X, PSP) support\noptional loading of NPBIOS.BIN, but the libretro port disabled it entirely\nwith #if 0 in race-memory.c:loadBIOS(). The comment explains: \"Using a real\nbios file causes nothing but issues.\"\n\nThe core uses a software HLE approach: a compiled-in koyote_bin RAM dump\n(post-boot console state) is copied into mainram at startup, a fake SWI jump\ntable is built at cpurom[0xE000], and doBios() in tlcs900h.c handles 33 BIOS\nfunctions in software. The Z80 sound CPU is emulated via cz80 or DrZ80.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/RACE",
        "source_commit": "171950ea64c96ead503340ed60fa7ba18f56325c",
        "systems": [
          "snk-ngp",
          "snk-ngpc"
        ],
        "type": "libretro",
        "upstream": "https://github.com/8bitpsp/race"
      }
    },
    {
      "id": "real3doplayer",
      "profile": {
        "author": "AltmerSoft (Maxim Grishin)",
        "core_classification": "other",
        "core_version": "1.0.32",
        "cores": [
          "real3doplayer",
          "Real3DOPlayer",
          "REAL3DOPLAYER"
        ],
        "display_name": "The 3DO Company - 3DO (Real3DOPlayer)",
        "emulator": "Real3DOPlayer",
        "files": [
          {
            "agnostic": true,
            "config_key": "ext-rom",
            "description": "3DO system BIOS ROM",
            "max_size": 3145727,
            "name": "panafz10e-anvil.bin",
            "note": "Any 3DO system ROM is accepted, under any name and from any directory the user picks. The file is measured, then searched on four byte boundaries for the RomTag signature, and it is taken as the BIOS when the header names itself \"rom\". A file of 3 MB or more is rejected unread. The emulator will not start until one is found, and the interface lists it above the discs.",
            "required": true,
            "source_ref": "Real3DOPlayer 1.0.32 MainActivity.java:100-101 (scan and BIOS name), MainActivity.java:539-543,583-584 (refusal without it), MainActivity.java:412,469 (ext-rom), libphoenixcore.so arm64-v8a 0xaa0e0-0xaa118 (size gate), 0xaa140-0xaa1b0 (RomTag scan and header read), 0xaa218-0xaa27c (\"rom\" test), 0xdc43c-0xdc53c (dispatch and list), 0xdd228-0xdd2e0 (nameOfBios), 0xdd390-0xdd908 (directory scan and extensions), 0x8f6f0-0x8f71c (1 MB window)",
            "system": "3do",
            "validation": [
              "size"
            ]
          },
          {
            "agnostic": true,
            "config_key": "ext-font",
            "description": "3DO kanji font ROM",
            "max_size": 3145727,
            "name": "panafz1j-kanji.bin",
            "note": "Found by the same scan of the same directory, and taken as the font when the RomTag header names itself \"rom2\". Held in its own list and mapped into a second 1 MB window of the machine. Japanese titles draw their kanji from it; the emulator starts and runs without one, and the core carries GRAFERR_NO_FONT and GRAFERR_BADFONTFILE for that case.",
            "required": false,
            "source_ref": "Real3DOPlayer 1.0.32 MainActivity.java:413,471 (ext-font), libphoenixcore.so arm64-v8a 0xaa2e8-0xaa34c (\"rom2\" test), 0xdc4d0-0xdc52c (dispatch and list), 0xdd9dc-0xdd9e0 (third scan pass), 0xe98bc-0xe98cc (Library/FONT-ROM), 0x8f74c-0x8f780 (1 MB window)",
            "system": "3do",
            "validation": [
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Android package ru.vastness.altmer.real3doplayer, closed source, published by the\nauthor of the Phoenix Emulation Project and reached by ES-DE through its\nREAL3DOPLAYER find rule. The build read here is app-release.apk of 2019-11-19,\ntaken from real3DOPlayer_free_1.0.32.zip on the author's own site, carrying the\ncertificate sha256 336dca7bf758d4d4d3e31783a1cb3f777cf0f0791ff6b1a8bbf698892f8860a9\n(C=RU, L=Tula, O=AltmerSoft, CN=MAXIM GRISHIN): versionCode 33, minSdk 14,\ntargetSdk 23, seven ABIs. Java line numbers below are jadx output of that build and\nnative addresses are its arm64-v8a library; the armeabi-v7a library carries the same\nstrings and the same constants. The decompiled tree published as\nBoUnCe587/Real3DOPlayer was rejected: it is signed with the AOSP test key\na40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc.\n\nOne system is emulated, 3DO Interactive Multiplayer, in libphoenixcore.so behind a\nJNI bridge (NativeCore.java:6-51). The library names itself \"PhoenixEmuProject core\n2.8.21\" and builds the console out of MADAM, CLIO, SPORT, CD-ROM, BIOS, FONT-ROM,\nFMV-ROM and NVRAM devices.\n\nThe user points the app at one directory holding both the discs and the ROMs, shown\nas \"Current ISOs and BIOS path\". countGames lists it, keeping the extensions bin,\ncdi, img, iso, nrg and rom, and offers every file to three adapters in turn: CD\nimage, then BIOS, then font ROM (0xdd390-0xdd9e0, dispatch at 0xdc43c). An external\nlauncher can instead pass explicit paths through the intent extras rom, cd and font,\nwhich become the config keys ext-rom, ext-cd and ext-font\n(MainActivity.java:469-471,412-414).\n\nNothing is recognised by name. A ROM candidate is measured, and a file of 3 MB or\nmore is dropped before it is read; the remainder is scanned on four byte boundaries\nfor the RomTag signature 01 5A 5A 5A 5A 5A 01 00, and the 0x84 byte header at that\npoint is read back. The null terminated string at header offset 0x28 is what sorts\nthe file: \"rom\" fills the BIOS list, \"rom2\" the font list, and \"fmvrom\" is compared\nfor but never requested (0xaa0e0-0xaa350). Running that scan over the published 3DO\ndumps sorts every system BIOS into \"rom\" and every kanji dump into \"rom2\", the\n512 KB arcade ROM and the 933636 byte FZ-1 font included.\n\nThe BIOS is the one file the app refuses to run without: an empty\nNativeCore.nameOfBios() raises \"BIOS not found.\" and returns instead of starting the\nemulator, and at startup it raises \"Select 3DO directory on SD card with BIOS and\nCD-images.\" (MainActivity.java:539-543,583-584). Nothing gates on the font ROM.\n\nThe md5 of the loaded BIOS is compared against a48e6746bd7edec0f40cff078f0bb19f, the\nPanasonic FZ-10 PAL ANVIL dump, and the outcome is passed as one construction\nargument of the device set (0x8eea0-0x8ef58, again at 0x916c0-0x916f4). It selects\nbehaviour for that dump and is not an acceptance test: acceptance is the RomTag.\nFour further md5 constants (5df7f21286290b2b4e9bd939f747f985,\ndacffcf51e54e76b68fb62ec73faff42, 0da811a327361f9a3d7dca63ad503f30,\n2536bf786f05af221038313a3e28f9aa) are all compared against the md5 taken for the\nCD-ROM device, so they identify game discs rather than firmware.\n\nThe FMV-ROM device is built but can never be fed: the ROM adapter is only ever\nconstructed for tags \"rom\" and \"rom2\" (0xdc4e8, 0xe9784, 0xe98bc), the frontend\nregisters only Library/CD-ROM, Library/BIOS and Library/FONT-ROM (0xe965c, 0xe9794,\n0xe98cc), and no ext-fmv key exists.\n\nFiles the app makes for itself, in its storage directory rather than the scan\ndirectory: nvram.bin, the 32 KB console save area, erasable from the interface;\nconfigs.xml and settings.ini; save states; and the controller maps. madam.bin and\nclio.bin name 2 KB and 64 KB regions of the emulator's own state blob and are\nreached only in mode 2 (0x8ce8c-0x8d064).\n",
        "profiled_date": "2026-08-12",
        "source": "http://www.arts-union.ru/node/23",
        "systems": [
          "3do"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "redbook",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1.0",
        "cores": [
          "redbook"
        ],
        "display_name": "Redbook Audio Player",
        "emulator": "Redbook",
        "files": [],
        "notes": "Audio CD player core. Plays Red Book audio CDs and CUE/BIN images.\nOriginal libretro creation by Brad Parker, no upstream emulator.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/redbook",
        "source_commit": "43544bb988f37a8f3df5af5d2c6f89dd255b8235",
        "systems": [],
        "type": "libretro"
      }
    },
    {
      "id": "redream",
      "profile": {
        "cores": [
          "redream"
        ],
        "emulator": "Redream",
        "files": [
          {
            "destination": "dc/boot.bin",
            "md5": "e10c53c2f8b90bab96ead2d368858623",
            "name": "dc_bios.bin",
            "required": true,
            "sha1": "8951d1bb219ab2ff8583033d2119c899cc81f18c",
            "size": 2097152,
            "system": "sega-dreamcast"
          },
          {
            "destination": "dc/flash.bin",
            "md5": "0a93f7940c455905bea6e392dfde92a4",
            "name": "dc_flash.bin",
            "required": true,
            "sha1": "94d44d7f9529ec1642ba3771ed3c5f756d5bc872",
            "size": 131072,
            "system": "sega-dreamcast"
          }
        ],
        "source": "https://github.com/libretro/redream",
        "systems": [
          "sega-dreamcast"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "reminiscence",
      "profile": {
        "analysis": {
          "content_extensions": [
            "map"
          ],
          "content_type": "game_data",
          "data_files_location": "same directory as loaded content",
          "detection_order": [
            {
              "file": "DEMO_UK.ABA",
              "type": "DOS Demo"
            },
            {
              "file": "INTRO.SEQ",
              "type": "DOS CD"
            },
            {
              "file": "LEVEL1.MAP",
              "type": "DOS Floppy"
            },
            {
              "file": "LEVEL1.LEV",
              "type": "Amiga (rejected by libretro port)"
            },
            {
              "file": "DEMO.LEV",
              "type": "Amiga Demo (rejected by libretro port)"
            }
          ],
          "filesystem_access": true,
          "game_data_files": {
            "demo": {
              "archive": "DEMO_UK.ABA (contains all demo data in a single archive)"
            },
            "dos_cd": {
              "additional": [
                "INTRO.SEQ, CREDITS.SEQ, and other .SEQ cutscene videos (SEQ playback disabled in libretro build)"
              ]
            },
            "dos_floppy": {
              "optional": [
                "intro, options, journal, etc. (.mod files for cutscene music)",
                "VOICE.VCE (SegaCD voice data)"
              ],
              "required": [
                "LEVEL1.MAP through LEVEL7.MAP (level map data)",
                "LEVEL1.* (MBK, PGE, PAL, CT, SPC, RP, ANI, OBJ, TBN, SGD, BNQ, LEV)",
                "GLOBAL.ICN, GLOBAL.SPC, GLOBAL.FIB",
                "PERSO.SPR, PERSO.OFF",
                "FB_TXT.FNT",
                "ENGCINE.TXT or equivalent language file",
                "ENGCINE.BIN or equivalent"
              ]
            }
          },
          "system_directory_used": false
        },
        "core_classification": "community_fork",
        "core_version": "0.3.6",
        "cores": [
          "reminiscence"
        ],
        "display_name": "Flashback (REminiscence)",
        "emulator": "REminiscence",
        "exclusion_note": "Game engine core. All data files (game data, music, voice) are loaded from the content directory alongside the .MAP file via FileSystem. The core never accesses the system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is never called). The .info declares firmware_count=0, consistent with the code.\n",
        "files": [],
        "notes": "Game engine re-implementation of Flashback (Delphine Software, 1992) by Gregory Montoir,\nported to libretro by Stuart Carnie. Version 0.3.6 (upstream is at 0.5.5).\n\nThe core sets need_fullpath = true and valid_extensions = \"map\" (libretro.cpp:66).\nContent loading (retro_load_game) extracts the parent directory from the provided .MAP\nfile path and uses it as the data root via FileSystem (libretro.cpp:194-196).\n\nVersion detection (libretro.cpp:125-148) probes for these files in order:\n  DEMO_UK.ABA -> DOS Demo\n  INTRO.SEQ   -> DOS CD\n  LEVEL1.MAP  -> DOS\n  LEVEL1.LEV  -> Amiga\n  DEMO.LEV    -> Amiga Demo\nOnly kResourceTypeDOS is accepted (line 199); Amiga data is rejected.\n\nLanguage detection (libretro.cpp:150-174) probes for:\n  ENGCINE.TXT -> English\n  FR_CINE.TXT -> French\n  GERCINE.TXT -> German\n  SPACINE.TXT -> Spanish\n  ITACINE.TXT -> Italian\n  FRCINE.TXT  -> French (Amiga)\nFalls back to English if none found.\n\nAll game data files are loaded from the content directory via FileSystem (fs.cpp),\nwhich scans the directory and matches filenames case-insensitively (strcasecmp at\nfs.cpp:52). The resource system (resource.cpp) loads files by constructing names\nlike \"LEVEL1.MAP\", \"GLOBAL.ICN\", \"PERSO.SPR\", \"FB_TXT.FNT\", etc.\n\nThe core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All data files must live\nalongside the loaded .MAP content file. No BIOS or firmware files; the required files\nare the original Flashback DOS game data.\n\nMusic loaded from .mod files (mod_player.cpp, staticres.cpp:3198-3225). Optional;\nthe core has a built-in SFX player for in-game action music (sfx_player.cpp with\nembedded music data in staticres.cpp).\n\nVOICE.VCE from the SegaCD version can be placed in the data directory for in-game\nvoice playback (resource.cpp:900-941). Optional.\n\nSEQ cutscene playback is disabled in the libretro build: g_options is zero-initialized\n(game.cpp:30) and rs.cfg is never parsed, so use_seq_cutscenes defaults to false.\nThe core always uses polygon-based cutscenes (cutscene.cpp).\n\nUpstream (0.5.5) additionally supports Amiga, Macintosh, PC98 data, MIDI music,\nOGG playback, SEQ cutscenes, and widescreen modes. None of these are in the\nlibretro port.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/REminiscence",
        "source_commit": "e80d7b1aa287010e30c54f72252a9303173f1c7e",
        "systems": [
          "flashback"
        ],
        "type": "libretro",
        "upstream": "https://github.com/cyxx/REminiscence"
      }
    },
    {
      "id": "remotejoy",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "remotejoy"
        ],
        "display_name": "PSP RemotePlay (RemoteJoy)",
        "emulator": "RemoteJoy",
        "files": [],
        "notes": "USB streaming receiver for PSP. Connects via libusb to a PSP running the\nRemoteJoy plugin (Sony VID 0x054C, PIDs 0x01C9/0x02D2) and displays\nvideo frames at 480x272. No file I/O. Protocol reimplemented from\nRemoteJoyLite Win32 client constants, not a port.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-remotejoy",
        "source_commit": "61211d841d06955081cf730e8f78fa69ba5dec6a",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/akiraink/RemoteJoyLite"
      }
    },
    {
      "id": "retro8",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.1b",
        "cores": [
          "retro8"
        ],
        "display_name": "PICO-8 (Retro8)",
        "emulator": "Retro8",
        "exclusion_note": "all engine resources (font, Lua API, color palette, audio synth) compiled into the binary",
        "files": [],
        "notes": "Open-source PICO-8 fantasy console reimplementation by Jacopo Santoni.\nRuns .p8 and .p8.png cartridge files. The PICO-8 font is compiled into the\nbinary as a byte array (gen/pico_font.h, loaded in gfx.cpp:9). The Lua API\nshim is compiled as a string constant (gen/lua_api.h, loaded in\nlua_bridge.cpp:1126). The core never calls GET_SYSTEM_DIRECTORY and performs\nno file I/O from the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/retro8",
        "source_commit": "a235ff8e3ca1b44bcf88293748d5a492c76a2c7b",
        "systems": [
          "pico8"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Jakz/retro8"
      }
    },
    {
      "id": "retrodream",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "retrodream"
        ],
        "display_name": "Sega - Dreamcast (RetroDream)",
        "emulator": "RetroDream",
        "files": [
          {
            "hle_fallback": true,
            "md5": [
              "a5c6a00818f97c5e3e91569ee22416dc",
              "37c921eb47532cae8fb70e5d987ce91c",
              "f2cd29d09f3e29984bcea22ab2e006fe",
              "e10c53c2f8b90bab96ead2d368858623"
            ],
            "name": "boot.bin",
            "note": "Dreamcast boot ROM. Four known variants accepted.",
            "path": "boot.bin",
            "required": false,
            "size": 2097152,
            "source_ref": "src/guest/rom/boot.c:12-80",
            "system": "sega-dreamcast",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "name": "flash.bin",
            "note": "Dreamcast flash memory. Written back on shutdown.",
            "path": "flash.bin",
            "required": false,
            "size": 131072,
            "source_ref": "src/guest/rom/flash.c:25-71",
            "system": "sega-dreamcast",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Fork of the last GPLv3 release of redream (inolen) before it went closed-source.\nThe core has HLE bootstrap -- when boot.bin is missing, bios_invalid_instr()\ntraps at PC=0x0 and calls bios_boot(), which loads IP.BIN and 1ST_READ.BIN\ndirectly from disc, sets up syscall vectors, and starts execution at 0xac008300.\n\nThe fork sets appdir to the RetroArch system directory root\n(retro_host.c:216-217), unlike the upstream which appends /dc\n(upstream retro_host.c:196-198). The .info still declares dc/ prefix paths\nmatching the upstream, not this fork.\n\nboot.bin is validated against four known MD5 hashes (boot.c:25-30).\nValidation failure logs a warning but the core continues via HLE.\n\nflash.bin is read/write. If missing, bios_validate_flash() resets all\npartitions to defaults. Saved back to disk on shutdown (flash.c:197-199).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/redream-next",
        "source_commit": "d826ece7f987c6fed336246e7272e2ded6cefa69",
        "systems": [
          "sega-dreamcast"
        ],
        "type": "libretro",
        "upstream": "https://github.com/inolen/redream"
      }
    },
    {
      "id": "romcleaner",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1.0.0",
        "cores": [
          "romcleaner"
        ],
        "display_name": "ROM Cleaner",
        "emulator": "ROM Cleaner",
        "files": [],
        "notes": "Utility core that simulates blowing dust off a cartridge via microphone\ninput. All visual and audio assets are compiled into the binary.\nNo external files required.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/JesseTG/rom-cleaner",
        "source_commit": "d2f474a439ab1a642aaed11caa4419d3663062c1",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/JesseTG/rom-cleaner"
      }
    },
    {
      "id": "rosalies-mupen-gui",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.0",
        "cores": [
          "rosalies-mupen-gui",
          "RMG",
          "com.github.Rosalie241.RMG"
        ],
        "display_name": "Nintendo - Nintendo 64 (Rosalie's Mupen GUI)",
        "emulator": "Rosalie's Mupen GUI",
        "files": [
          {
            "aliases": [
              "64DD_IPL_v12_JPN.bin",
              "64DD_IPL.bin"
            ],
            "description": "64DD IPL ROM (Japanese retail)",
            "name": "64DD_IPL_JP.n64",
            "note": "Selected when the disk system data holds the Japanese region word 0xe848d316, which covers the retail library. The path is set in the settings dialog and no name is fixed by the code. Loaded whole, then byteswapped after identifying the first word as one of 0x80270740 (z64), 0x40072780 (n64) or 0x27804007 (v64); any other value disables 64DD. Size is not checked and no hash is computed.\n",
            "region": [
              "japan"
            ],
            "required": true,
            "source_ref": "Source/RMG-Core/MediaLoader.cpp:47-74, Source/RMG-Core/Settings.cpp:284-286, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:434-445",
            "system": "nintendo-64dd"
          },
          {
            "aliases": [
              "64DD_IPL_USA.bin",
              "IPL_USA.n64"
            ],
            "description": "64DD IPL ROM (American retail)",
            "name": "64DD_IPL_US.n64",
            "note": "Selected when the disk system data holds the US region word 0x2263ee56. The other two IPL settings are not consulted for such a disk, so no substitution is possible. Same load path, format check and absence of size or hash validation as the Japanese image.\n",
            "region": [
              "north-america"
            ],
            "required": true,
            "source_ref": "Source/RMG-Core/MediaLoader.cpp:54-56, Source/RMG-Core/Settings.cpp:287-289, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:434-445",
            "system": "nintendo-64dd"
          },
          {
            "aliases": [
              "64DD_IPL_DEV.bin",
              "IPL_DEV.n64"
            ],
            "description": "64DD IPL ROM (Japanese development)",
            "name": "64DD_IPL_DEV.n64",
            "note": "Selected when the disk system data holds the development region word 0x00000000, and also whenever the valid system data block sits at index 2, 3, 10 or 11, which is the development disk layout. Same load path, format check and absence of size or hash validation as the Japanese image.\n",
            "required": true,
            "source_ref": "Source/RMG-Core/MediaLoader.cpp:57-59, Source/RMG-Core/Settings.cpp:290-292, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:412-475",
            "system": "nintendo-64dd"
          }
        ],
        "mode": "standalone",
        "notes": "Qt front end by Rosalie Wanders built around its own vendored fork of\nmupen64plus-core, compiled with OSD=0, NEW_DYNAREC=1 and VULKAN=0\n(Source/3rdParty/CMakeLists.txt:74-96). Forks of the RSP plugins hle, cxd4\nand parallel, the video plugins GLideN64, parallel and angrylion-plus, and\nthe raphnetraw input plugin are vendored alongside it, plus RMG's own audio\nand input plugins. ES-DE runs it as `--nogui -q <rom>` for both n64 and\nn64dd. Against mupen64plus-core 6dca4c15 the media loader, the DD region\nenum and load_dd_rom are unchanged; the fork diverges on SDL3, video\ncapture, netplay and the dynarec.\n\nCartridge boot needs no boot ROM. The PIF boot ROM is simulated\n(device/pif/bootrom_hle.c:48, reached from r4300/interrupt.c:448,499) and the\nCIC-NUS-6105 challenge is answered by an algorithm rather than a stored\ntable (device/pif/n64_cic_nus_6105.c:93).\n\nWhich 64DD IPL is used is not a user choice. scan_and_expand_disk_format\naccepts a disk only when one of eight candidate blocks holds system data\ncarrying a known region word, and marks it development when that block sits\nat index 2, 3, 10 or 11 (device/dd/disk.c:412-475). The core hands the\nresulting region to the front end, which answers with one of three\nconfigured paths, or with nothing when the region stayed unknown\n(RMG-Core/MediaLoader.cpp:47-74). All three settings default to empty\n(RMG-Core/Settings.cpp:284-292) and are filled from a file dialog filtered\non *.n64 (RMG/UserInterface/Dialog/SettingsDialog.cpp:1377-1390).\n\nA bare .ndd or .d64 opens as a disk with no cartridge\n(RMG-Core/Rom.cpp:111-133), which is the route ES-DE takes, so the IPL is\nthe only boot ROM and the core bails before starting when it is absent\n(main/main.c:1723-1739). Passing a cartridge with --disk\n(RMG/main.cpp:219,232,287) boots the cartridge and switches 64DD off instead.\nDisk content inside a .zip or .7z is extracted to the user cache directory\nfirst (RMG-Core/MediaLoader.cpp:164-215, RMG-Core/Archive.cpp:188-227).\n\nTransfer Pak carts come from the input profile, which copies its GameboyRom\nand GameboySave paths into the per player core settings\n(RMG-Input/main.cpp:317-318,469-480, RMG-Core/MediaLoader.cpp:76-114). The\ncore rejects a ROM under 32 KiB and an unknown cart type byte at 0x147\n(device/gb/gb_cart.c:999-1012) and fixes no name, size or hash, so neither\nthe cart nor its save carries an entry here.\n\nData the install places in the shared data directory (CMakeLists.txt:130-153;\n/usr/share/RMG, or Data beside the executable for portable and Windows\nbuilds, Directories.cpp:406-431): mupen64plus.ini, read as the ROM database\n(main/rom.c:585-604) and used by GLideN64 to locate that same directory\n(mupenplus/CommonAPIImpl_mupenplus.cpp:77-85); GLideN64.custom.ini, per ROM\noverrides keyed on the uppercased header name\n(mupenplus/Config_mupenplus.cpp:329-348); font.ttf, reached only after the\nconfigured font name fails both as a system font path and as a full path\n(TextDrawer.cpp:202-230); Cheats/<name>.cht, named from the header CRC pair\nand country code, or from the ROM MD5 when all three are zero, and merged\nwith a user copy under the config directory\n(RMG-Core/Cheats.cpp:82-116,579-598); InputProfileDB.json\n(RMG-Input/Utilities/InputProfileDB.cpp:26-36); gamecontrollerdb.txt\n(RMG-Input/main.cpp:1063-1069); and for VRU builds\nvosk-model-small-en-us-0.15.zip, extracted into the user data directory when\nany of the thirteen model files it checks for is missing\n(RMG-Input/VRU.cpp:154-232). The published AppImage is the features-on build,\nso the model ships with it (.github/workflows/build.yml:10,79,91).\n\nOptional files with no canonical artifact: a .qss stylesheet under Styles in\nthe shared data directory (RMG/UserInterface/MainWindow.cpp:405-425), hi-res\ntexture packs under hires_texture in the user data directory\n(GLideN64 Config.cpp:118-123), and alp_screen.vert and alp_screen.frag, which\nangrylion-plus opens as working directory relative paths before falling back\nto its embedded shaders (angrylion-plus output/vdac.c:120-175,257-258).\n\nWritten rather than obtained: mupen64plus.cfg in the config directory,\nGLideN64.ini written there by the plugin settings pages and read back from\nboth that directory and the shared data directory\n(GLideNUI/Config_GLideNUI.cpp:20-21,45-46, GLideNUI/Settings.cpp:352-368),\nthe mempak, eeprom, flashram and sram saves opened with default\ncontent when absent (main/main.c:1712-1716), 64DD disk saves in the format\nthe SaveDiskFormat setting selects (main/main.c:1286-1298), savestates,\nscreenshots, the ROM browser header cache\n(RMG-Core/CachedRomHeaderAndSettings.cpp:152), the GLideN64 texture cache and\ntexture dumps (GLideN64 Config.cpp:120-123) and the parallel-rdp pipeline\ncache (video-parallel vulkan/device.cpp:760,834).\n\nTwo files in the tree this build never reads: the vendored core's\ndata/mupencheat.txt, which RMG neither installs nor parses since cheats use\nits own .cht format and the core's cheat.c opens no file, and cxd4's\nrsp_conf.bin, whose reader is the zilmar variant of update_conf behind\n#if !defined(M64P_PLUGIN_API); the variant this build compiles takes settings\nfrom the core config API and ignores its filename argument\n(mupen64plus-rsp-cxd4/module.c:89-99,652-673).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/Rosalie241/RMG",
        "source_commit": "9dced048f747085f942f55941dd4304279acc145",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Rosalie241/RMG"
      }
    },
    {
      "id": "rpcs3",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.0.35",
        "cores": [
          "rpcs3"
        ],
        "dev_flash": {
          "bdplayer": {
            "files": [
              {
                "name": "bdp_bdmv.self",
                "purpose": "BD-MV player"
              },
              {
                "name": "bdj.self",
                "purpose": "BD-J (Java) player"
              }
            ],
            "note": "Blu-ray disc player modules",
            "path": "dev_flash/bdplayer/",
            "source_ref": "rpcs3/Crypto/key_vault.h:257-258"
          },
          "certs": {
            "note": "SSL root certificates for PSN and HTTPS connections",
            "path": "dev_flash/data/cert/",
            "source_ref": "rpcs3/Emu/Cell/Modules/cellSsl.cpp:110"
          },
          "fonts": {
            "files": [
              {
                "name": "SCE-PS3-RD-R-LATIN.TTF",
                "required": true,
                "type": "Rodin Sans Serif Regular Latin"
              },
              {
                "name": "SCE-PS3-RD-L-LATIN.TTF",
                "type": "Rodin Sans Serif Light Latin"
              },
              {
                "name": "SCE-PS3-RD-B-LATIN.TTF",
                "type": "Rodin Sans Serif Bold Latin"
              },
              {
                "name": "SCE-PS3-RD-R-LATIN2.TTF",
                "type": "Rodin Sans Serif Regular Latin2"
              },
              {
                "name": "SCE-PS3-RD-L-LATIN2.TTF",
                "type": "Rodin Sans Serif Light Latin2"
              },
              {
                "name": "SCE-PS3-RD-B-LATIN2.TTF",
                "type": "Rodin Sans Serif Bold Latin2"
              },
              {
                "name": "SCE-PS3-MT-R-LATIN.TTF",
                "type": "Matisse Serif Regular Latin"
              },
              {
                "name": "SCE-PS3-NR-R-JPN.TTF",
                "type": "NewRodin Gothic Regular Japanese"
              },
              {
                "name": "SCE-PS3-NR-L-JPN.TTF",
                "type": "NewRodin Gothic Light Japanese"
              },
              {
                "name": "SCE-PS3-NR-B-JPN.TTF",
                "type": "NewRodin Gothic Bold Japanese"
              },
              {
                "name": "SCE-PS3-YG-R-KOR.TTF",
                "type": "YD Gothic Regular Korean"
              },
              {
                "name": "SCE-PS3-SR-R-LATIN.TTF",
                "type": "Seurat Maru Gothic Regular Latin"
              },
              {
                "name": "SCE-PS3-SR-R-LATIN2.TTF",
                "type": "Seurat Maru Gothic Regular Latin2"
              },
              {
                "name": "SCE-PS3-SR-R-JPN.TTF",
                "type": "Seurat Maru Gothic Regular Japanese"
              },
              {
                "name": "SCE-PS3-VR-R-LATIN.TTF",
                "type": "VAGR Sans Serif Round Latin"
              },
              {
                "name": "SCE-PS3-VR-R-LATIN2.TTF",
                "type": "VAGR Sans Serif Round Latin2"
              },
              {
                "name": "SCE-PS3-DH-R-CGB.TTF",
                "subdir": "SONY-CC/",
                "type": "Chinese GB font"
              }
            ],
            "note": "PS3 system fonts used by cellFont API. Loaded from dev_flash/data/font/ and dev_flash/data/font/SONY-CC/ subdirectory. Games using cellFont will fail to render text without these.\n",
            "path": "dev_flash/data/font/",
            "source_ref": "rpcs3/Emu/Cell/Modules/cellFont.cpp:226-281"
          },
          "ps1emu": {
            "files": [
              {
                "name": "ps1_newemu.self",
                "purpose": "PS1 emulator binary"
              }
            ],
            "note": "PS1 Classics emulator. Booted when running PS1 game via ps1_newemu.self",
            "path": "dev_flash/ps1emu/",
            "source_ref": "rpcs3/Emu/System.cpp:1954"
          },
          "ps2emu": {
            "note": "PS2 emulator components. Only present on fat PS3 models (CECHA/B/C/E). Includes me_iso_for_ps2emu.self and sv_iso_for_ps2emu.self (since FW 3.70).\n",
            "path": "dev_flash/ps2emu/",
            "source_ref": "rpcs3/Crypto/key_vault.h:219"
          },
          "pspemu": {
            "files": [
              {
                "name": "psp_emulator.self",
                "purpose": "PSP emulator main binary"
              },
              {
                "name": "psp_translator.self",
                "purpose": "PSP translator"
              },
              {
                "name": "release/emulator_api.sprx",
                "purpose": "Emulator API"
              },
              {
                "name": "release/emulator_drm.sprx",
                "purpose": "DRM handling"
              }
            ],
            "note": "PSP emulator for PS3. Contains psp_emulator.self, psp_translator.self, and release/*.sprx",
            "path": "dev_flash/pspemu/",
            "source_ref": "rpcs3/Emu/System.cpp:1982, rpcs3/Crypto/key_vault.h:285-290"
          },
          "sys_external": {
            "critical_file": "liblv2.sprx",
            "modules": [
              "liblv2.sprx",
              "libsysmodule.sprx",
              "libfs_utility_init.sprx",
              "libadec.sprx",
              "libatrac3plus.sprx",
              "libcelp8dec.sprx",
              "libcelpdec.sprx",
              "libcelpenc.sprx",
              "libddpdec.sprx",
              "libdtslbrdec.sprx",
              "libdtsdec.sprx",
              "libdtshdcoredec.sprx",
              "libdtshddec.sprx",
              "libm2aac.sprx",
              "libm2bc.sprx",
              "libm4aac.sprx",
              "libm4aac2ch.sprx",
              "libm4aac2chmod.sprx",
              "libmp3dec.sprx",
              "libmp3sdec.sprx",
              "libmpl1dec.sprx",
              "libtrhddec.sprx",
              "libwmadec.sprx",
              "libwmaprodec.sprx",
              "libwmalslbrdec.sprx",
              "libac3dec.sprx",
              "libvdec.sprx",
              "libdmux.sprx",
              "libdmuxpamf.sprx",
              "libpamf.sprx",
              "libvpost.sprx",
              "libsail.sprx",
              "libsailrec.sprx",
              "libgcm_sys.sprx",
              "libresc.sprx",
              "libio.sprx",
              "libcamera.sprx",
              "libgem.sprx",
              "libmic.sprx",
              "libusbpspcm.sprx",
              "libusbd.sprx",
              "libnetctl.sprx",
              "librudp.sprx",
              "libssl.sprx",
              "libhttp.sprx",
              "libhttps.sprx",
              "libhttputil.sprx",
              "libsysnet.sprx",
              "libsysutil.sprx",
              "libsysutil_ap.sprx",
              "libsysutil_avc2.sprx",
              "libsysutil_avc_ext.sprx",
              "libsysutil_np_eula.sprx",
              "libaudio.sprx",
              "libvoice.sprx",
              "libavconfext.sprx",
              "libsavedata.sprx",
              "libgame.sprx",
              "libgameexec.sprx",
              "libuserinfo.sprx",
              "libosklialog.sprx",
              "libsysconf.sprx",
              "libgifdec.sprx",
              "libjpgdec.sprx",
              "libjpgenc.sprx",
              "libpngdec.sprx",
              "libpngenc.sprx",
              "libsceNp.sprx",
              "libsceNp2.sprx",
              "libsceNpBasicLimited.sprx",
              "libsceNpClans.sprx",
              "libsceNpCommerce2.sprx",
              "libsceNpMatchingInt.sprx",
              "libsceNpPlus.sprx",
              "libsceNpSns.sprx",
              "libsceNpTrophy.sprx",
              "libsceNpTus.sprx",
              "libsceNpUtil.sprx",
              "libfont.sprx",
              "libfontFT.sprx",
              "libfreetype2.sprx",
              "librtc.sprx",
              "librtcalarm.sprx",
              "libl10n.sprx",
              "libkey2char.sprx",
              "libimejp.sprx",
              "libcrosscontroller.sprx",
              "libfiber.sprx",
              "libspurs_jq.sprx",
              "libspudll.sprx",
              "libmixer.sprx",
              "libsnd3.sprx",
              "libsynth2.sprx",
              "libovis.sprx",
              "libprint.sprx",
              "librec.sprx",
              "libremoteplay.sprx",
              "libscreenshot.sprx",
              "libsearch.sprx",
              "libmusic.sprx",
              "libmusicdecode.sprx",
              "libmusicexport.sprx",
              "libphoto.sprx",
              "libphotoexport.sprx",
              "libphotoimportutil.sprx",
              "libvideo.sprx",
              "libvideoplayer.sprx",
              "libvideoupload.sprx",
              "libnetaoi.sprx",
              "libpesmutility.sprx",
              "libbgdl.sprx",
              "libsubdisplay.sprx",
              "libdtcpiputility.sprx",
              "libsheap.sprx",
              "libsync2.sprx",
              "libminisSavedata.sprx",
              "libauthdialogutility.sprx",
              "libcrashdump.sprx",
              "liblv2dbg.sprx"
            ],
            "note": "Primary firmware module directory. Contains decrypted .sprx modules loaded by liblv2.sprx at boot. RPCS3 can run these via LLE (low-level emulation) or fall back to HLE (high-level emulation) per module. liblv2.sprx is the kernel loader.\n",
            "path": "dev_flash/sys/external/",
            "source_ref": "rpcs3/Emu/Cell/PPUModule.cpp:2579"
          },
          "sys_internal": {
            "note": "Internal system modules, e.g. libfs_utility_init.sprx",
            "path": "dev_flash/sys/internal/",
            "source_ref": "rpcs3/Emu/Cell/lv2/sys_prx.cpp:33"
          },
          "vsh": {
            "files": [
              {
                "path": "vsh/module/vsh.self",
                "purpose": "XMB main executable",
                "required_for": "Boot VSH / XrossMediaBar"
              },
              {
                "path": "vsh/etc/version.txt",
                "purpose": "Firmware version string"
              },
              {
                "path": "vsh/module/eseibrd.sprx",
                "purpose": "System module (precompiled at boot)"
              },
              {
                "path": "vsh/module/msmw2.sprx",
                "purpose": "Media streaming"
              },
              {
                "path": "vsh/resource/explore/user/*.png",
                "purpose": "User avatar icons (000.png - 025.png)"
              },
              {
                "path": "vsh/resource/explore/icon/icon_home.png",
                "purpose": "Home icon for game list"
              }
            ],
            "note": "PS3 XMB interface. vsh.self is the main executable, booted via 'Boot VSH' menu.",
            "path": "dev_flash/vsh/",
            "source_ref": "rpcs3/rpcs3qt/main_window.cpp:272,734"
          }
        },
        "dev_flash2": {
          "device": "CELL_FS_IOS:BUILTIN_FLSH2",
          "filesystem": "CELL_FS_FAT",
          "note": "Second flash partition, used for additional system data",
          "path": "dev_flash2/",
          "source_ref": "rpcs3/Emu/Cell/lv2/sys_fs.cpp:29"
        },
        "dev_flash3": {
          "device": "CELL_FS_IOS:BUILTIN_FLSH3",
          "filesystem": "CELL_FS_FAT",
          "note": "Third flash partition",
          "path": "dev_flash3/",
          "source_ref": "rpcs3/Emu/Cell/lv2/sys_fs.cpp:28"
        },
        "display_name": "Sony - PlayStation 3 (RPCS3)",
        "emulator": "RPCS3",
        "files": [
          {
            "name": "PS3UPDAT.PUP",
            "note": "PUP firmware package. Validated via SCEUF magic + HMAC-SHA1 per entry. Extracted to dev_flash/ at install time.",
            "required": true,
            "source_ref": "rpcs3/Loader/PUP.cpp:23-77",
            "storage": "large_file"
          }
        ],
        "notes": "RPCS3 requires the official PS3 firmware (PS3UPDAT.PUP) from Sony. The PUP file is\na signed update package containing multiple TAR archives prefixed with \"dev_flash_\".\nDuring installation, RPCS3 extracts these TARs into the dev_flash/ directory structure.\n\nThe most critical component is dev_flash/sys/external/liblv2.sprx - without it, no\nPS3 game can boot. RPCS3 checks for its presence and shows a firmware install prompt\nif missing.\n\nMost sys/external modules can run in either LLE (real firmware code) or HLE (RPCS3\nreimplementation) mode. By default, liblv2.sprx loads libsysmodule.sprx which chains\nall other modules. Users can toggle individual modules between LLE/HLE.\n\nThe dev_flash/ structure mirrors the real PS3 NAND layout:\n- sys/external/  : Loadable firmware PRX modules\n- sys/internal/  : Internal system modules\n- vsh/           : Visual Shell (XMB interface)\n- data/font/     : System TTF fonts (16+ files)\n- data/cert/     : SSL certificates\n- ps1emu/        : PS1 backward compat emulator\n- ps2emu/        : PS2 backward compat emulator (fat models only)\n- pspemu/        : PSP emulator\n- bdplayer/      : Blu-ray disc player\n\nFirmware versions follow the X.XX format (e.g. 4.90). RPCS3 reads the version from\ndev_flash/vsh/etc/version.txt at startup.\n",
        "profiled_date": "2026-03-30",
        "source": "https://github.com/RPCS3/rpcs3",
        "source_commit": "3d587726a23f514be0e7c3ac43e2db0cf2fe931a",
        "systems": [
          "sony-playstation-3"
        ],
        "type": "standalone",
        "upstream": "https://github.com/RPCS3/rpcs3"
      }
    },
    {
      "id": "ruffle",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.5.0",
        "cores": [
          "ruffle"
        ],
        "display_name": "Adobe Flash (Ruffle)",
        "emulator": "ruffle",
        "files": [
          {
            "description": "OpenH264 2.4.1 decoder library, Linux x86_64",
            "name": "libopenh264-2.4.1-linux64.7.so",
            "path": "video/libopenh264-2.4.1-linux64.7.so",
            "required": false,
            "sha256": "1392d21466bc638e68151b716d5b2086d54cd812afd43253f1adb5b6e0185f51",
            "source_ref": "video/external/src/decoder/openh264.rs:65-68, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, Linux aarch64",
            "name": "libopenh264-2.4.1-linux-arm64.7.so",
            "path": "video/libopenh264-2.4.1-linux-arm64.7.so",
            "required": false,
            "sha256": "e8ea7e42855ceb4a90e7bd0b3abeba0c58b5f97166e8b0a30eefd58e099557a4",
            "source_ref": "video/external/src/decoder/openh264.rs:73-76, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, Linux arm",
            "name": "libopenh264-2.4.1-linux-arm.7.so",
            "path": "video/libopenh264-2.4.1-linux-arm.7.so",
            "required": false,
            "sha256": "fd1dfb27d30bb72e903c9d2b4c650104a4369d2e7ffe8a4a533e8db2e7e9b19e",
            "source_ref": "video/external/src/decoder/openh264.rs:69-72, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, Linux x86",
            "name": "libopenh264-2.4.1-linux32.7.so",
            "path": "video/libopenh264-2.4.1-linux32.7.so",
            "required": false,
            "sha256": "b7cf0e407f99056d90cbf62787a34820a7595b2129b165319d50766e00a66704",
            "source_ref": "video/external/src/decoder/openh264.rs:61-64, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, macOS aarch64",
            "name": "libopenh264-2.4.1-mac-arm64.dylib",
            "path": "video/libopenh264-2.4.1-mac-arm64.dylib",
            "required": false,
            "sha256": "213ff93831cfa3dd6d7ad0c3a3403a6ceedf4ac1341e1278b5b869d42fefb496",
            "source_ref": "video/external/src/decoder/openh264.rs:81-84, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, macOS x86_64",
            "name": "libopenh264-2.4.1-mac-x64.dylib",
            "path": "video/libopenh264-2.4.1-mac-x64.dylib",
            "required": false,
            "sha256": "cc0ba518a63791c37571f3c851f0aa03a4fbda5410acc214ecd4f24f8d1c478e",
            "source_ref": "video/external/src/decoder/openh264.rs:77-80, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, Windows x86_64",
            "name": "openh264-2.4.1-win64.dll",
            "path": "video/openh264-2.4.1-win64.dll",
            "required": false,
            "sha256": "081b0c081480d177cbfddfbc90b1613640e702f875897b30d8de195cde73dd34",
            "source_ref": "video/external/src/decoder/openh264.rs:89-92, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          },
          {
            "description": "OpenH264 2.4.1 decoder library, Windows x86",
            "name": "openh264-2.4.1-win32.dll",
            "path": "video/openh264-2.4.1-win32.dll",
            "required": false,
            "sha256": "83270149640469c994a62cc32a6d8c0413cd7b802b7f1f2f532159f5bdc1cedd",
            "source_ref": "video/external/src/decoder/openh264.rs:85-88, 104-146, 173-191",
            "system": "flash",
            "validation": [
              "sha256"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Flash Player and Adobe AIR runtime written in Rust, playing SWF files of any\nActionScript version, as a desktop binary or as a WebAssembly browser build.\nDistribution is by nightly build: Batocera compiles the nightly-2026-01-31 tag\nand installs ruffle_desktop as ruffle, RetroDECK pulls the rs.ruffle.Ruffle\nFlathub build. ES-DE runs it as `ruffle --fullscreen <rom>`, Batocera as\n`ruffle <rom>`, RetroBat as `ruffle.exe --graphics <renderer> --force-align\n-q <quality> <rom>`, RetroDECK as `ruffle --graphics vulkan --config\n/var/data/ruffle --save-directory <saves>/ruffle <rom>`. The ActionScript\nclass library is compiled by build_playerglobal into playerglobal_avm1.swf and\nplayerglobal_avm2.swf and linked into the binary from OUT_DIR\n(core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:546), so startup reads\nnothing. Locale texts, wgsl shaders, the window icon and the OpenH264 license\nare embedded the same way (desktop/src/gui/locale.rs:7-12,\ndesktop/src/app.rs:449, render/wgpu/src/shaders.rs:28-76).\n\nH.264 video is the one external dependency. external_video is a default\nfeature and pulls ruffle_video_external with openh264\n(desktop/Cargo.toml:26,83,90), and enable_openh264 defaults to true\n(desktop/src/preferences.rs:283,307). OpenH264Codec::load first dlopens the\nsystem sonames libopenh264.so.7, libopenh264.so.2.4.1 and libopenh264.so on\nLinux, then falls back to <cache>/ruffle/video/ and fetches the Cisco binary\nfrom ciscobinary.openh264.org bz2-compressed into it\n(video/external/src/decoder/openh264.rs:53-56,109-133,173-191,\ndesktop/src/player.rs:234-241). Whether the library was already there or was\njust downloaded, its SHA-256 is checked before loading and the size is read\nonly to format the mismatch message\n(video/external/src/decoder/openh264.rs:135-146), and WelsGetCodecVersion must\nanswer 2.4.1 exactly (video/external/src/decoder/openh264.rs:46,153-166). The\ncache root comes from dirs::cache_dir(), ~/.cache/ruffle by default, and\n--cache-directory moves it (desktop/src/cli.rs:29-33,140). Without the library\nthe player still starts: ExternalVideoBackend wraps SoftwareVideoBackend, so\nH.263, Screen Video and VP6 keep decoding and only H.264 streams fail\n(video/external/src/backend.rs:41,51-69,73-80).\n\nText uses system fonts. fontdb::Database::load_system_fonts() fills the\ndatabase at startup (desktop/src/app.rs:418-419), and both the Flash device\nfonts and the egui menu bar resolve family names against it, mmapping whatever\nface the host answers with (desktop/src/backends/ui.rs:281-314,395-421,\ndesktop/src/gui/controller.rs:690-733). The families asked for are Times New\nRoman, Arial, Courier New and their metric-compatible substitutes, plus the\nCJK, Hebrew, Arabic and Thai faces (desktop/src/player.rs:361-412,\ndesktop/src/gui/controller.rs:569-641), and on Unix fontconfig sorts the\nfallback chain (desktop/src/backends/ui.rs:318-329,460-472). No name, path,\nsize or hash is fixed anywhere. The compiled-in Noto Sans subset sits behind\nthe default_font feature, which the desktop build does not enable\n(core/src/player.rs:82-83, core/Cargo.toml:82,96, desktop/Cargo.toml:22), so\nan unmatched family leaves the run without that face rather than falling back\nto a bundled one.\n\nFiles the player writes rather than expects: preferences.toml, bookmarks.toml\nand recents.toml under --config, each defaulted when absent\n(desktop/src/preferences.rs:53-95), .sol SharedObjects under --save-directory\n(frontend-utils/src/backends/storage.rs:31-60), and the log file\n(desktop/src/main.rs:156-166). ruffle-bundle.toml is the manifest inside a\n.ruf bundle, which is content alongside the .swf rather than a runtime input\n(frontend-utils/src/bundle/info.rs:11, frontend-utils/src/bundle.rs:42-53).\nmms.cfg is not\nimplemented, the name appears only in an AVM2 error string\n(core/src/avm2/error_messages.rs:237).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/ruffle-rs/ruffle",
        "source_commit": "f3a1263e164dc4cb56211ab1f113e1907730ce89",
        "systems": [
          "flash"
        ],
        "type": "standalone",
        "upstream": "https://github.com/ruffle-rs/ruffle"
      }
    },
    {
      "id": "rustation",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v1",
        "cores": [
          "rustation"
        ],
        "display_name": "Sony - PlayStation (Rustation)",
        "emulator": "Rustation",
        "files": [
          {
            "description": "SCPH-5500 (v3.0 J)",
            "md5": "8dd7d5296a650fac7319bce665a6a53c",
            "name": "scph5500.bin",
            "region": [
              "japan"
            ],
            "required": true,
            "sha256": "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb",
            "size": 524288,
            "source_ref": "src/bios/db.rs:158-167 (v3.0 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-5501 (v3.0 A)",
            "md5": "490f666e1afb15b7362b406ed1cea246",
            "name": "scph5501.bin",
            "region": [
              "north-america"
            ],
            "required": true,
            "sha256": "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef",
            "size": 524288,
            "source_ref": "src/bios/db.rs:168-177 (v3.0 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-5502 (v3.0 E)",
            "md5": "32736f17079d0b2b7024407c39bd3050",
            "name": "scph5502.bin",
            "region": [
              "europe"
            ],
            "required": true,
            "sha256": "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09",
            "size": 524288,
            "source_ref": "src/bios/db.rs:178-187 (v3.0 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-1000 (v1.0 J)",
            "name": "scph1000.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "cfc1fc38eb442f6f80781452119e931bcae28100c1c97e7e6c5f2725bbb0f8bb",
            "size": 524288,
            "source_ref": "src/bios/db.rs:38-47 (v1.0 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v1.1 J",
            "name": "scph_v11j.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "5eb3aee495937558312b83b54323d76a4a015190decd4051214f1b6df06ac34b",
            "size": 524288,
            "source_ref": "src/bios/db.rs:48-57 (v1.1 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-3000 (v2.1 J)",
            "name": "scph3000.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "6f71ca1e716da761dc53187bd39e00c213f566e55090708fd3e2b4b425c8c989",
            "size": 524288,
            "source_ref": "src/bios/db.rs:78-87 (v2.1 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-3500 (v2.2 J)",
            "name": "scph3500.bin",
            "note": "A known-bad v2.2 J dump also exists in the DB but is rejected.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "0c8359870cbac0ea091f1c87f188cd332dcc709753b91cafd9fd44a4a6188197",
            "size": 524288,
            "source_ref": "src/bios/db.rs:108-117 (v2.2 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v2.2 J (alt)",
            "name": "scph5000.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "4018749b3698b8694387beebcbabfb48470513066840f9441459ee4c9f0f39bc",
            "size": 524288,
            "source_ref": "src/bios/db.rs:148-157 (v2.2 Japan alt)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-7000 (v4.0 J)",
            "name": "scph7000.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28",
            "size": 524288,
            "source_ref": "src/bios/db.rs:198-207 (v4.0 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-7500 (v4.1 J)",
            "name": "scph7500.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "b3aa63cf30c81e0a40641740f4a43e25fda0b21b792fa9aaef60ce1675761479",
            "size": 524288,
            "source_ref": "src/bios/db.rs:208-217 (v4.1 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-9000 (v4.3 J)",
            "name": "scph9000.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "sha256": "b29b4b5fcddef369bd6640acacda0865e0366fcf7ea54e40b2f1a8178004f89a",
            "size": 524288,
            "source_ref": "src/bios/db.rs:238-247 (v4.3 Japan)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-1001 (v2.0 A)",
            "name": "scph1001.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "42e4124be7623e2e28b1db0d8d426539646faee49d74b71166d8ba5bd7c472ed",
            "size": 524288,
            "source_ref": "src/bios/db.rs:58-67 (v2.0 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-5001 (v2.1 A)",
            "name": "scph5001.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "6ad5521d105a6b86741f1af8da2e6ea1c732d34459940618c70305a105e8ec10",
            "size": 524288,
            "source_ref": "src/bios/db.rs:88-97 (v2.1 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v2.2 A",
            "name": "scph_v22a.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3",
            "size": 524288,
            "source_ref": "src/bios/db.rs:128-137 (v2.2 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-7001 (v4.1 A)",
            "name": "scph7001.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278",
            "size": 524288,
            "source_ref": "src/bios/db.rs:218-227 (v4.1 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-101 (v4.5 A)",
            "name": "scph101.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "sha256": "aca9cbfa974b933646baad6556a867eca9b81ce65d8af343a7843f7775b9ffc8",
            "size": 524288,
            "source_ref": "src/bios/db.rs:258-267 (v4.5 NorthAmerica)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-1002 (v2.0 E)",
            "name": "scph1002.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "0af2be3468d30b6018b3c3b0d98b8b64347e255e16d874d55f0363648973dbf0",
            "size": 524288,
            "source_ref": "src/bios/db.rs:68-77 (v2.0 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v2.1 E",
            "name": "scph_v21e.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "1efb0cfc5db8a8751a884c5312e9c6265ca1bc580dc0c2663eb2dea3bde9fcf7",
            "size": 524288,
            "source_ref": "src/bios/db.rs:98-107 (v2.1 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v2.2 E",
            "name": "scph_v22e.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "3d06d2c469313c2a2128d24fe2e0c71ff99bc2032be89a829a62337187f500b7",
            "size": 524288,
            "source_ref": "src/bios/db.rs:138-147 (v2.2 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-7002 (v4.1 E)",
            "name": "scph7002.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1",
            "size": 524288,
            "source_ref": "src/bios/db.rs:228-237 (v4.1 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "SCPH-102 (v4.4 E)",
            "name": "scph102.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "5c0166da24e27deaa82246de8ff0108267fe4bb59f6df0fdec50e05e62448ca4",
            "size": 524288,
            "source_ref": "src/bios/db.rs:248-257 (v4.4 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          },
          {
            "description": "v4.5 E",
            "name": "scph102_v45.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "sha256": "42244b0c650821519751b7e77ad1d3222a0125e75586df2b4e84ba693b9809dc",
            "size": 524288,
            "source_ref": "src/bios/db.rs:268-277 (v4.5 Europe)",
            "validation": [
              "size",
              "sha256"
            ]
          }
        ],
        "notes": "Scans every file in the system directory, filters by exact 512 KB size, then validates the full binary against an internal SHA-256 database (lifted from Mednafen). Region must match the loaded disc. Known-bad dumps are rejected. No filename requirement. No HLE fallback. \"Boot to BIOS menu\" core option allows booting without a disc. Database contains 24 entries (22 good, 2 known-bad rejected) covering BIOS versions 1.0 through 4.5. .info declares firmware_count=0; incorrect. Project abandoned, superseded by rustation-ng.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/rustation-libretro",
        "source_commit": "3e328e3967e312e1f239aeeecd479a7b4bfda850",
        "systems": [
          "sony-playstation"
        ],
        "type": "libretro",
        "upstream": "https://github.com/simias/rustation"
      }
    },
    {
      "id": "rvvm",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.6-git",
        "cores": [
          "rvvm"
        ],
        "display_name": "RVVM",
        "emulator": "RVVM",
        "files": [
          {
            "name": "fw_payload.bin",
            "note": "M-mode firmware loaded at 0x80000000. Typically OpenSBI with U-Boot payload (fw_payload.bin) or standalone (fw_jump.bin). Referenced by the bootrom= key in the .rvvm config.\n",
            "path": "rvvm/fw_payload.bin",
            "required": true,
            "source_ref": "src/bindings/libretro/libretro.c:309-314, src/rvvm.c:621-628"
          },
          {
            "name": "Image",
            "note": "S-mode kernel payload loaded at offset 0x200000 (rv64) or 0x400000 (rv32) from RAM base. Only needed with fw_jump.bin as bootrom. Referenced by the kernel= key in the .rvvm config.\n",
            "path": "rvvm/Image",
            "required": false,
            "source_ref": "src/bindings/libretro/libretro.c:316-318, src/rvvm.c:630-638"
          },
          {
            "mode": "standalone",
            "name": "machine.dtb",
            "note": "Custom Flattened Device Tree. The core auto-generates a DTB based on machine configuration. The libretro binding does not parse a dtb= key in the .rvvm config, so this is only usable via the standalone CLI (-dtb flag).\n",
            "path": "rvvm/machine.dtb",
            "required": false,
            "source_ref": "src/main.c:222, src/rvvm.c:641-648"
          }
        ],
        "notes": {
          "firmware_sources": "OpenSBI: https://github.com/riscv-software-src/opensbi/releases. Pre-built images for RVVM: https://github.com/LekKit/RVVM/wiki/Running\n",
          "info_firmware_count": ".info declares 0 firmware. Correct: the core loads firmware via user-specified paths in the .rvvm config, not from system_dir.\n"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/LekKit/RVVM",
        "source_commit": "7195d47431b1f9643a61a306bed6650571e6ecca",
        "systems": [
          "riscv"
        ],
        "type": "libretro",
        "upstream": "https://github.com/LekKit/RVVM"
      }
    },
    {
      "id": "ryujinx",
      "profile": {
        "analysis_commit": "HEAD (depth=1, ngram.ca mirror)",
        "analysis_date": "2026-03-26",
        "core_version": "1.1.1403",
        "cores": [
          "ryujinx"
        ],
        "display_name": "Ryujinx (Nintendo Switch)",
        "emulator": "Ryujinx",
        "files": [
          {
            "mode": "standalone",
            "name": "prod.keys",
            "note": "Switch production keys for NCA decryption",
            "path": "switch/",
            "required": true,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:239"
          },
          {
            "mode": "standalone",
            "name": "title.keys",
            "note": "Per-title decryption keys, needed for specific game content",
            "path": "switch/",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:240"
          },
          {
            "mode": "standalone",
            "name": "console.keys",
            "note": "Console-specific keys for encrypted content",
            "path": "switch/",
            "required": false,
            "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:241"
          }
        ],
        "mode": "standalone",
        "notes": "Ryujinx is a standalone Nintendo Switch emulator written in C#, created by gdkchan.\nOriginal repo discontinued October 2024 after Nintendo takedown.\nFirmware (system NCAs) must be installed through Ryujinx's UI from a ZIP or XCI.\nRequired for commercial games (.nsp, .xci). Homebrew (.nro, .nso) runs without firmware.\nFirmware provides shared fonts, timezone data, SSL certificates, system version info.\n",
        "profiled_date": "2026-03-26",
        "source": "https://git.ngram.ca/mirrors/Ryujinx",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Ryujinx/Ryujinx"
      }
    },
    {
      "id": "same_cdi",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "same_cdi"
        ],
        "display_name": "Philips - CDi (SAME CDi)",
        "emulator": "SAME CDi",
        "files": [
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "40c4e6b9",
                "description": "Magnavox CD-i 200 BIOS (default, US)",
                "name": "cdi200.rom",
                "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a",
                "size": 524288
              },
              {
                "crc32": "279683ca",
                "description": "Philips CD-i 220 F2 BIOS (alternate, PAL)",
                "name": "cdi220b.rom",
                "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e",
                "size": 524288
              },
              {
                "crc32": "584c0af8",
                "description": "Philips CD-i 220 BIOS (non-working, does not boot)",
                "name": "cdi220.rom",
                "sha1": "5d757ab46b8c8fc36361555d978d7af768342d47",
                "size": 524288
              },
              {
                "crc32": "7a3af407",
                "description": "Servo MCU 2.1 MC68HC705C8A (BAD_DUMP, from cdi910)",
                "name": "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201",
                "sha1": "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f",
                "size": 8192
              },
              {
                "crc32": "688cda63",
                "description": "Slave MCU 2.0 MC68HC705C8A (BAD_DUMP, from cdi910)",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              }
            ],
            "name": "cdimono1.zip",
            "note": "Forced system. Main CPU BIOS (3 region variants via MAME BIOS switch) + servo/slave MCU dumps.",
            "path": "same_cdi/bios/cdimono1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.cpp:491",
            "system": "cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "17d723e7",
                "description": "Mono-II main CPU BIOS, Philips CDI-220 PH3 R1.2",
                "name": "philips__cdi-220_ph3_r1.2__mb834200b-15__02f_aa__9402_z04.tc574200-le._1.7211",
                "sha1": "6c317a82e35d60ca5e7a74fc99f665055693169d",
                "size": 524288
              },
              {
                "crc32": "2bc8e4e9",
                "description": "Mono-II servo MCU 4.1",
                "name": "zc405351p__servo_cdi_4.1__0d67p__lluk9404.mc68hc705c8a.7490",
                "sha1": "8cd052b532fc052d6b0077261c12f800e8655bb1",
                "size": 8192
              },
              {
                "crc32": "5b19da07",
                "description": "Mono-II slave MCU 4.1",
                "name": "zc405352p__slave_cdi_4.1__0d67p__lltr9403.mc68hc705c8a.7206",
                "sha1": "cf02d84977050c71e87a38f1249e83c43a93949b",
                "size": 8192
              }
            ],
            "name": "cdimono2.zip",
            "note": "CD-i Mono-II (NTSC). MACHINE_NOT_WORKING. Listed in .info as optional.",
            "path": "same_cdi/bios/cdimono2.zip",
            "required": false,
            "source_ref": "src/mame/drivers/cdi.cpp:492",
            "system": "cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "4ae3bee3",
                "description": "CD-i 910-17P Mini-MMC BIOS (default)",
                "name": "philips__cd-i_2.1__mb834200b-15__26b_aa__9224_z01.tc574200.7211",
                "sha1": "9729b4ee3ce0c17172d062339c47b1ab822b222b",
                "size": 524288
              },
              {
                "crc32": "2f3048d2",
                "description": "CD-i 910 alternate BIOS",
                "name": "cdi910.rom",
                "sha1": "11c4c3e602060518b52e77156345fa01f619e793",
                "size": 524288
              },
              {
                "crc32": "7a3af407",
                "description": "Servo MCU 2.1 (same ROM as cdimono1, not BAD_DUMP here)",
                "name": "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201",
                "sha1": "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f",
                "size": 8192
              },
              {
                "crc32": "688cda63",
                "description": "Slave MCU 2.0 (same ROM as cdimono1, not BAD_DUMP here)",
                "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206",
                "sha1": "56d0acd7caad51c7de703247cd6d842b36173079",
                "size": 8192
              },
              {
                "crc32": "dd167e0d",
                "description": "PAL chip dump",
                "name": "ti_portugal_206xf__tibpal20l8-15cnt__m7205n.7205.bin",
                "sha1": "2ba82a4619d7a0f19e62e02a2841afd4d45d56ba",
                "size": 324
              },
              {
                "crc32": "04e6bd37",
                "description": "PAL chip dump",
                "name": "ti_portugal_774_206xf__tibpal16l8-10cn_m7204n.7204.bin",
                "sha1": "153d1a977291bedb7420484a9f889325dbd3628e",
                "size": 260
              }
            ],
            "name": "cdi910.zip",
            "note": "CD-i 910-17P Mini-MMC (PAL). MACHINE_NOT_WORKING. Not in .info firmware list.",
            "path": "same_cdi/bios/cdi910.zip",
            "required": false,
            "source_ref": "src/mame/drivers/cdi.cpp:493",
            "system": "cdi"
          },
          {
            "category": "bios_zip",
            "contents": [
              {
                "crc32": "e2f200f6",
                "description": "CD-i 490 main CPU BIOS",
                "name": "cdi490a.rom",
                "sha1": "c9bf3c4c7e4fe5cbec3fe3fc993c77a4522ca547",
                "size": 524288
              },
              {
                "crc32": "84d6f6aa",
                "description": "MPEG audio decoder ROM",
                "name": "impega.rom",
                "sha1": "02526482a0851ea2a7b582d8afaa8ef14a8bd914",
                "size": 262144
              },
              {
                "crc32": "db264e8b",
                "description": "MPEG video decoder ROM",
                "name": "vmpega.rom",
                "sha1": "be407fbc102f1731a0862554855e963e5a47c17b",
                "size": 262144
              }
            ],
            "name": "cdi490a.zip",
            "note": "CD-i 490. MACHINE_NOT_WORKING. Not in .info firmware list.",
            "path": "same_cdi/bios/cdi490a.zip",
            "required": false,
            "source_ref": "src/mame/drivers/cdi.cpp:494",
            "system": "cdi"
          }
        ],
        "notes": "SAME CDi is a Single Arcade Machine Emulator fork of MAME libretro, stripped\ndown to just the Philips CD-i driver. The core hardcodes \"cdimono1\" as the\nforced system (src/osd/libretro/libretro-internal/retro_init.cpp:86,454) and searches for MAME ROM ZIPs in:\n  <system_dir>/same_cdi/bios/\n\nThe ROM path (-rp) is built at src/osd/libretro/libretro-internal/retro_init.cpp:534 as:\n  <game_path>;<system_dir>/same_cdi/bios/\n\nMAME expects each romset as a ZIP containing the individual ROM files.\nThe ZIP filenames match the MAME driver names. Only cdimono1.zip is required\nfor consumer CD-i games; other ZIPs are for alternate hardware models or\nQuizard arcade (unreachable without boot_from_cli core option).\n\nThe driver includes 5 system ROM sets (cdimono1, cdi910, cdimono2, cdi490a,\ncdibios) plus Quizard arcade game ROM sets (clones of cdibios with i8751\nprotection MCU dumps). Upstream MAME has additional ROM sets not present\nin this fork (gpi1200, Italian Quizard variants, cdimono2 alternate BIOS).\n\nROM definitions: src/mame/drivers/cdi.cpp:574-640.\nQuizard game ROMs: src/mame/drivers/cdi.cpp:662-820.\nSystem forced: src/osd/libretro/libretro-internal/retro_init.cpp:86,454,525.\nBIOS path: src/osd/libretro/libretro-internal/retro_init.cpp:534.\n",
        "platform_details": {
          "cdi": {
            "bios_path": "same_cdi/bios/",
            "forced_system": "cdimono1",
            "mame_romsets": [
              "cdimono1",
              "cdimono2",
              "cdibios",
              "cdi910",
              "cdi490a"
            ],
            "optional_zips": [
              "cdimono2.zip",
              "cdibios.zip"
            ],
            "primary_zip": "cdimono1.zip",
            "rom_path_flag": "-rp",
            "rom_search_path": "<game_path>;<system_dir>/same_cdi/bios/",
            "source_ref": "src/osd/libretro/libretro-internal/retro_init.cpp:86,454,525,534",
            "supported_extensions": [
              "chd",
              "iso",
              "cue"
            ]
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/same_cdi",
        "source_commit": "8a3c2acdbeb57aea4e74aeadaa703fdc5c9c5de9",
        "systems": [
          "cdi"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame"
      }
    },
    {
      "id": "sameboy",
      "profile": {
        "builtin_boot_roms": {
          "description": "Open-source boot ROM replacements compiled from BootROMs/ assembly.\nNot Nintendo originals.\n",
          "prebuilt_hashes": {
            "agb_boot.bin": {
              "md5": "7e095aa30941da3086fa0e9221335370",
              "sha1": "3b6231bdf840fb889f402d0ae89f21adb077323a"
            },
            "cgb_boot.bin": {
              "md5": "6b68be48dab6a7298a8c07e00c136b4e",
              "sha1": "9884b972110a63c9e86fb3bd241bd2e39ca82bb9"
            },
            "dmg_boot.bin": {
              "md5": "60f1d849a435e9053b8ac0fd5776804a",
              "sha1": "da853c8102acfff6b8e5a973ce0cd181f3dbb709"
            },
            "sgb2_boot.bin": {
              "md5": "b4331a9e612b4738867a30af9c96df52",
              "sha1": "576678d0fc3892b80471d7067ce6014e6af77ed5"
            },
            "sgb_boot.bin": {
              "md5": "be77bbd03f8675478f6e3d2176f3cb56",
              "sha1": "27267e45c8408857267231ba6c18bfbd052536e2"
            }
          },
          "sources": [
            "BootROMs/dmg_boot.asm -> dmg_boot (256 bytes)",
            "BootROMs/sgb_boot.asm -> sgb_boot (256 bytes)",
            "BootROMs/sgb2_boot.asm -> sgb2_boot (256 bytes)",
            "BootROMs/cgb_boot.asm -> cgb_boot (2304 bytes)",
            "BootROMs/agb_boot.asm -> agb_boot (2304 bytes)"
          ]
        },
        "core_classification": "official_port",
        "core_version": "0.15.4",
        "cores": [
          "sameboy"
        ],
        "display_name": "Nintendo - Game Boy / Color (SameBoy)",
        "emulator": "SameBoy",
        "files": [
          {
            "description": "Game Boy (DMG) boot ROM",
            "hle_fallback": true,
            "name": "dmg_boot.bin",
            "required": false,
            "size": 256,
            "source_ref": "libretro/libretro.c:519, libretro/libretro.c:530, libretro/libretro.c:556 (boot_rom_load), Core/gb.c:1594 (request_boot_rom)",
            "system": "nintendo-gb"
          },
          {
            "description": "Super Game Boy (SGB) boot ROM",
            "hle_fallback": true,
            "name": "sgb_boot.bin",
            "note": "Used for SGB_NTSC, SGB_PAL models. Also loaded when borrowing SGB border (Core/gb.c:264).",
            "required": false,
            "size": 256,
            "source_ref": "libretro/libretro.c:521, libretro/libretro.c:532, libretro/libretro.c:556, Core/gb.c:1600-1604",
            "system": "nintendo-sgb"
          },
          {
            "description": "Super Game Boy 2 (SGB2) boot ROM",
            "hle_fallback": true,
            "name": "sgb2_boot.bin",
            "required": false,
            "size": 256,
            "source_ref": "libretro/libretro.c:522, libretro/libretro.c:533, libretro/libretro.c:556, Core/gb.c:1607",
            "system": "nintendo-sgb"
          },
          {
            "description": "Game Boy Color (CGB) boot ROM",
            "hle_fallback": true,
            "name": "cgb_boot.bin",
            "note": "Used for CGB revisions A through E in the libretro port.",
            "required": false,
            "size": 2304,
            "source_ref": "libretro/libretro.c:524, libretro/libretro.c:535, libretro/libretro.c:556, Core/gb.c:1613-1618",
            "system": "nintendo-gbc"
          },
          {
            "description": "Game Boy Advance in GBC mode (AGB) boot ROM",
            "hle_fallback": true,
            "name": "agb_boot.bin",
            "note": "Enables GBA-enhanced palettes in compatible GBC games.",
            "required": false,
            "size": 2304,
            "source_ref": "libretro/libretro.c:525, libretro/libretro.c:536, libretro/libretro.c:556, Core/gb.c:1621",
            "system": "nintendo-gbc"
          }
        ],
        "notes": "SameBoy is a high-accuracy Game Boy, Game Boy Color and Super Game Boy\nemulator by LIJI32 (official_port: same author maintains upstream and\nlibretro fork).\n\nAll boot ROMs are optional. SameBoy compiles open-source boot ROM\nreplacements from BootROMs/*.asm and embeds them into the libretro\nbinary (extern arrays dmg_boot, cgb_boot, agb_boot, sgb_boot,\nsgb2_boot in libretro.c:129-130). These are SameBoy-authored\nreplacements, not Nintendo originals.\n\nThe libretro port (boot_rom_load, libretro.c:512-588) tries to load\nan external boot ROM from the system directory first. Filename is\nconstructed as \"{model}_boot.bin\". If missing, the embedded boot ROM\nis used as fallback.\n\nBoot ROM selection depends on the sameboy_model core option\n(request_boot_rom in Core/gb.c:1587-1625):\n  DMG_B           -> GB_BOOT_ROM_DMG   -> dmg_boot.bin\n  SGB_NTSC/PAL    -> GB_BOOT_ROM_SGB   -> sgb_boot.bin\n  SGB2            -> GB_BOOT_ROM_SGB2  -> sgb2_boot.bin\n  CGB_A..E        -> GB_BOOT_ROM_CGB   -> cgb_boot.bin\n  AGB_A/GBP_A     -> GB_BOOT_ROM_AGB   -> agb_boot.bin\n\n.info declares firmware_count=2 (dmg, cgb only). Actual reachable\nfiles in the libretro port are 5 (adds sgb, sgb2, agb).\n\nUnreachable boot ROMs in the libretro port (array entries exist in\nboot_rom_load but no model option triggers them):\n  - dmg0_boot.bin: GB_MODEL_DMG_0 commented out (Core/gb.h:100)\n  - mgb_boot.bin: GB_MODEL_MGB active but not exposed by core options\n  - cgb0_boot.bin: GB_MODEL_CGB_0 active but not exposed by core options\nUpstream standalone (v1.0.3) supports these plus cgbE_boot.bin and\nagb0_boot.bin (10 boot ROM types total).\n\nNo validation performed on loaded boot ROMs. GB_load_boot_rom_from_buffer\n(Core/gb.c:266-273) does a plain memcpy capped at 0x900 bytes.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/SameBoy",
        "source_commit": "aa158a889a48b538a0302873704a34577c8eb67d",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc",
          "nintendo-sgb"
        ],
        "type": "libretro",
        "upstream": "https://github.com/LIJI32/SameBoy"
      }
    },
    {
      "id": "sameduck",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.13.6",
        "cores": [
          "sameduck"
        ],
        "display_name": "Mega Duck / Cougar Boy (SameDuck)",
        "emulator": "sameduck",
        "files": [],
        "notes": "SameDuck is the Mega Duck / Cougar Boy branch of SameBoy by LIJI32.\nBuilt from the SameDuck branch of the upstream repo (no separate\nlibretro fork). The Mega Duck hardware has no boot ROM. All boot ROM\nloading functions are stubs in this branch (GB_load_boot_rom returns 0,\nrequest_boot_rom is empty, no BootROMs/ directory exists).\n\nThe libretro port loads only game ROMs via GB_load_rom(). No\nboot_rom_load_callback is set. retro_system_directory is stored but\nnever used for file loading.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/LIJI32/SameBoy",
        "source_commit": "208ba4afabffab9edde416f2dbb8ae459e34adb8",
        "systems": [
          "mega-duck"
        ],
        "type": "libretro",
        "upstream": "https://github.com/LIJI32/SameBoy"
      }
    },
    {
      "id": "saturn-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "saturn-emu",
          "Saturn.emu",
          "SATURN-EMU",
          "saturnemu"
        ],
        "display_name": "Sega - Saturn (Saturn.emu)",
        "emulator": "Saturn.emu",
        "files": [
          {
            "category": "bios",
            "config_key": "CFGKEY_JP_BIOS_PATH",
            "description": "Saturn BIOS v1.01, read for Japan and Asia NTSC",
            "name": "sega_101.bin",
            "note": "The image the module's own setting table names for the JP path (Saturn.emu/src/ss/ss.cpp:2398), and one of three the sanity table accepts for Japan and Asia NTSC. Any 524288-byte image the user picks loads unless the sanity table contradicts it, but a file carrying this name must carry this hash.\n",
            "region": [
              "japan",
              "asia-ntsc"
            ],
            "required": true,
            "sha256": "dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac",
            "size": 524288,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1388-1394 (area picks the JP path), Saturn.emu/src/ss/ss.cpp:1396-1404 (open, size, hash), Saturn.emu/src/ss/ss.cpp:1418 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:2398 (setting default), Saturn.emu/src/main/options.cc:218-219,276-281 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:67-88 (picker)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size",
              "sha256"
            ]
          },
          {
            "category": "bios",
            "config_key": "CFGKEY_NA_BIOS_PATH",
            "description": "Saturn BIOS read for every area outside Japan and Asia NTSC",
            "name": "mpr-17933.bin",
            "note": "The image the module's own setting table names for the NA/EU path (Saturn.emu/src/ss/ss.cpp:2399). The sanity table grants it every area except Japan and Asia NTSC, which covers North America, Europe, South Korea, Asia PAL, Brazil and Latin America as the Region menu names them.\n",
            "region": [
              "north-america",
              "europe",
              "south-korea",
              "asia-pal",
              "brazil",
              "latin-america"
            ],
            "required": true,
            "sha256": "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f",
            "size": 524288,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1388-1394 (area picks the NA/EU path), Saturn.emu/src/ss/ss.cpp:1396-1404 (open, size, hash), Saturn.emu/src/ss/ss.cpp:1420 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:2399 (setting default), Saturn.emu/src/main/options.cc:220-221,270-275 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:44-65 (picker), Saturn.emu/src/main/EmuMenuViews.cc:162-176 (area names)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size",
              "sha256"
            ]
          },
          {
            "category": "bios",
            "config_key": "CFGKEY_JP_BIOS_PATH",
            "description": "Saturn BIOS v1.00, accepted for Japan and Asia NTSC",
            "name": "sega_100.bin",
            "note": "Interchangeable with the other two Japan images: the sanity table gives all three the same areas, and nothing in the module ranks them.\n",
            "region": [
              "japan",
              "asia-ntsc"
            ],
            "required": false,
            "sha256": "ae4058627bb5db9be6d8d83c6be95a4aa981acc8a89042e517e73317886c8bc2",
            "size": 524288,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1417 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size",
              "sha256"
            ]
          },
          {
            "category": "bios",
            "config_key": "CFGKEY_JP_BIOS_PATH",
            "description": "Saturn BIOS v1.003, accepted for Japan and Asia NTSC",
            "name": "sega1003.bin",
            "region": [
              "japan",
              "asia-ntsc"
            ],
            "required": false,
            "sha256": "cc1e1b7f88f1c6e6fc35994bae2c2292e06fdae258c79eb26a1f1391e72914a8",
            "size": 524288,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1416 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size",
              "sha256"
            ]
          },
          {
            "category": "bios",
            "config_key": "CFGKEY_NA_BIOS_PATH",
            "description": "Saturn BIOS v1.00a, accepted for every area outside Japan and Asia NTSC",
            "name": "sega_100a.bin",
            "region": [
              "north-america",
              "europe",
              "south-korea",
              "asia-pal",
              "brazil",
              "latin-america"
            ],
            "required": false,
            "sha256": "87293093fad802fcff31fcab427a16caff1acbc5184899b8383b360fd58efb73",
            "size": 524288,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1419 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size",
              "sha256"
            ]
          },
          {
            "agnostic": true,
            "category": "bios",
            "config_key": "CFGKEY_KOF_ROM_PATH",
            "description": "King of Fighters '95 ROM cart",
            "min_size": 2097152,
            "name": "mpr-18811-mx.ic1",
            "note": "Read when the cart type is KoF '95, which the internal database forces for MK-81088 and T-3101G and which the Cart Type menu also offers. Those two discs end the load when the path is unset; every other disc ignores it. CART_ROM_Init takes a fixed 2097152 bytes and Stream::read throws on a shorter file, so anything smaller aborts and anything larger has its tail ignored. The name comes from the module's setting table, which this build never reads: settings.cpp is out of the shared source list, and the picker lists names ending in .bin.\n",
            "required": false,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1291 (cart to setting), Saturn.emu/src/ss/ss.cpp:1348-1357 (firmware path, open, hand to CART_Init), Saturn.emu/src/ss/cart.cpp:162-164 (dispatch), Saturn.emu/src/ss/cart/rom.cpp:37-47 (fixed read), Saturn.emu/src/ss/db.cpp:94-95,403 (database forces the cart), Saturn.emu/src/ss/ss.cpp:2434 (setting default), Saturn.emu/src/main/options.cc:222-223,258-263 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:90-111 (picker)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size"
            ]
          },
          {
            "agnostic": true,
            "category": "bios",
            "config_key": "CFGKEY_ULTRAMAN_ROM_PATH",
            "description": "Ultraman - Hikari no Kyojin Densetsu ROM cart",
            "min_size": 2097152,
            "name": "mpr-19367-mx.ic1",
            "note": "Read when the cart type is Ultraman, which the internal database forces for T-13308G and which the Cart Type menu also offers. Same fixed 2097152-byte read as the other ROM cart, and the same picker filtered to .bin.\n",
            "required": false,
            "source_ref": "Saturn.emu/src/ss/ss.cpp:1292 (cart to setting), Saturn.emu/src/ss/ss.cpp:1348-1357 (firmware path, open, hand to CART_Init), Saturn.emu/src/ss/cart.cpp:163-164 (dispatch), Saturn.emu/src/ss/cart/rom.cpp:37-47 (fixed read), Saturn.emu/src/ss/db.cpp:96,403 (database forces the cart), Saturn.emu/src/ss/ss.cpp:2435 (setting default), Saturn.emu/src/main/options.cc:224-225,264-269 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:113-134 (picker)",
            "system": "sega-saturn",
            "validation": [
              "existence",
              "size"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Member of the EX Emulator series by Robert Broglia, published as\ncom.explusalpha.SaturnEmu and built for arm64 and x86_64 only\n(Saturn.emu/metadata/conf.mk:2-7, Saturn.emu/config.mk:7-9). ES-DE reaches it\nthrough the SATURN-EMU find rule, which only the Android rule set carries, and\noffers it under both the saturn and saturnjp systems. Mednafen's Saturn module\nis vendored under Saturn.emu/src/ss on the 1.32 line\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the\napp's own video, audio, input and save layers\n(Saturn.emu/src/CMakeLists.txt:6-40). Seventeen files differ from the Mednafen\n1.32.1 release, none of it touching file loading: statics become externals the\napp reads (Saturn.emu/src/ss/ss.cpp:146, Saturn.emu/src/ss/smpc.cpp:96,146,\nSaturn.emu/src/ss/vdp2.cpp:46,63, Saturn.emu/src/ss/cdb.cpp:535), backup memory\nmoves to the app's file objects and the periodic save timers are dropped\n(Saturn.emu/src/ss/ss.cpp:1836-1849, mednafen 1.32.1 src/ss/ss.cpp:927-970,\n1592-1600,1867-1874), the VDP2 work queue becomes a framework ring buffer\n(Saturn.emu/src/ss/vdp2_render.cpp:3211-3231), and the rest is enum and virtual\nqualifier tidying. The BIOS and cart ROM block is byte-identical to the release,\nas are cart.cpp, cart/rom.cpp and db.cpp.\n\nContent is read from .cue, .ccd, .chd, .toc and .m3u files\n(Saturn.emu/metadata/conf.mk:5, Saturn.emu/src/main/system.ccm:106-109). An\narchive is opened by the app, which prefers an .m3u member and otherwise keeps\nthe first entry passing that filter, and an .m3u names up to 16 images\n(Saturn.emu/src/main/Main.cc:186-246). Every load goes through the module's\nLoadCD entry point (Saturn.emu/src/main/Main.cc:275,\nSaturn.emu/src/ss/ss.cpp:1757-1806). The ROM entry point Load is never called:\nits only call site in the tree is a shared helper this app does not use\n(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146).\n\nFour files the user supplies carry no name of their own. Pickers store\narbitrary URIs under NA/EU BIOS, JP BIOS, KoF '95 ROM and Ultraman ROM, each\nfiltered to names ending in .bin and each refusing to descend into archives\n(Saturn.emu/src/main/EmuMenuViews.cc:34-37,44-145,\nEmuFramework/include/emuframework/DataPathSelectView.hh:77-102,\nSaturn.emu/src/main/system.ccm:85-95,128-131,\nSaturn.emu/src/main/options.cc:65-68,98-101). MDFN_GetSettingS answers the four\npath settings with the fixed tokens jp, na, kof95 and ultraman, and\nMDFN_MakeFName turns each token back into the matching URI, ending the load\nwith a message pointing at the File Paths menu when it is unset\n(Saturn.emu/src/main/options.cc:215-228,245-285). Every other setting name\nreaches unreachable(), so no other firmware request can be made.\n\nWhich BIOS is read follows the emulated area: Japan and Asia NTSC take the JP\npath, every other area the NA/EU path (Saturn.emu/src/ss/ss.cpp:1388-1394). The\narea comes from the Region menu, or when that is Auto from the first 16 sectors\nof the disc, checked against the security code hash and the \"SEGA SEGASATURN \"\nmagic (Saturn.emu/src/main/EmuMenuViews.cc:216-251,\nSaturn.emu/src/main/options.cc:203-204, Saturn.emu/src/ss/ss.cpp:959-968,\n1126-1144,1778-1787). The image is rejected at any length other than 524288 and\nthen hashed (Saturn.emu/src/ss/ss.cpp:1400-1404). With ss.bios_sanity forced on\n(Saturn.emu/src/main/options.cc:193-194) a table of five known images drives two\nfurther tests: a file whose name is one of the five must hash to that entry, and\na file whose hash is one of the five must belong to the area being emulated\n(Saturn.emu/src/ss/ss.cpp:1406-1439). An image outside the table passes both,\nsince each test only rejects on a match. A third test compares Saturn against\nST-V images and can never fire here.\n\nCart type comes from the Cart Type menu when it is not Auto, otherwise from the\ninternal game database, otherwise none\n(Saturn.emu/src/main/EmuMenuViews.cc:180-214,\nSaturn.emu/src/main/options.cc:161-164, Saturn.emu/src/ss/ss.cpp:1761-1790).\nThe database forces the KoF '95 cart for MK-81088 and T-3101G and the Ultraman\ncart for T-13308G, marking all three a game requirement\n(Saturn.emu/src/ss/db.cpp:93-96,403), so those three discs read a ROM image and\nevery other disc reads none.\n\nST-V, the bootable ROM cart and Action Replay 4M Plus are compiled and\nunreachable. All three exist only behind cart types the Cart Type menu does not\nlist and the database never assigns, and the first two are entered from Load\nalone (Saturn.emu/src/ss/ss.cpp:1630,1669, Saturn.emu/src/ss/cart.cpp:166-181).\nTheir paths would ask for ss.bios_stv_jp, ss.bios_stv_na, ss.bios_stv_eu and\nss.cart.satar4mp_path, none of which MDFN_GetSettingS answers\n(Saturn.emu/src/ss/ss.cpp:1379-1387,1293,\nSaturn.emu/src/main/options.cc:215-228). The ST-V EEPROM save file and the\nST-V branches in the app's own backup memory code are dead for the same reason\n(Saturn.emu/src/main/Main.cc:119-123,141-142).\n\nPer content the app writes and reads back a .bkr backup RAM image, a .smpc real\ntime clock block, .mca save states and, when a memory cart is selected, a\ngzipped .bcr cart image; settings live in SaturnEmu.config\n(Saturn.emu/src/main/Main.cc:50-129,152-155,\nSaturn.emu/src/main/system.ccm:180, Saturn.emu/src/ss/cart/backup.cpp:69-73,\nSaturn.emu/src/main/AppMeta.cc:28). Mednafen's image reader picks up an .sbi\nbeside a cue sheet when one is present\n(EmuFramework/src/shared/mednafen/cdrom/CDAccess_Image.cpp:924-941). Cheats are\noff (Saturn.emu/src/main/options.cc:187-188), and ui.png, gpOverlay.png and the\nshader sources are drawn from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:63-69,\nEmuFramework/src/VideoImageEffect.cc:163-173).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "sega-saturn"
        ],
        "type": "standalone",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "scummvm",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2.8.0git",
        "cores": [
          "scummvm"
        ],
        "display_name": "ScummVM",
        "emulator": "ScummVM",
        "files": [
          {
            "name": "MT32_CONTROL.ROM",
            "note": "Roland MT-32 control ROM. Required for MT-32 music emulation in games that use MT-32 MIDI (e.g. Monkey Island, Indiana Jones). Not bundled with ScummVM. Must be paired with MT32_PCM.ROM.\n",
            "path": "scummvm/extra/MT32_CONTROL.ROM",
            "required": false,
            "size": 65536,
            "source_ref": "audio/softsynth/mt32.cpp:298,581"
          },
          {
            "name": "MT32_PCM.ROM",
            "note": "Roland MT-32 PCM ROM. Contains the sample data for MT-32 emulation. Must be paired with MT32_CONTROL.ROM.\n",
            "path": "scummvm/extra/MT32_PCM.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "audio/softsynth/mt32.cpp:298,581"
          },
          {
            "name": "CM32L_CONTROL.ROM",
            "note": "Roland CM-32L control ROM. Preferred over MT-32 ROMs when both are present. The CM-32L is a rack-mount version of the MT-32 with extra sound effects used by some LucasArts and Sierra games.\n",
            "path": "scummvm/extra/CM32L_CONTROL.ROM",
            "required": false,
            "size": 65536,
            "source_ref": "audio/softsynth/mt32.cpp:293,582"
          },
          {
            "name": "CM32L_PCM.ROM",
            "note": "Roland CM-32L PCM ROM. Contains sample data for CM-32L emulation. Must be paired with CM32L_CONTROL.ROM.\n",
            "path": "scummvm/extra/CM32L_PCM.ROM",
            "required": false,
            "size": 1048576,
            "source_ref": "audio/softsynth/mt32.cpp:293,582"
          },
          {
            "name": "Roland_SC-55.sf2",
            "note": "Roland SC-55 SoundFont for General MIDI playback. This is the default soundfont (DEFAULT_SOUNDFONT_FILENAME). Bundled in official ScummVM releases. Used as fallback when no MT-32 ROMs are available.\n",
            "path": "scummvm/extra/Roland_SC-55.sf2",
            "required": false,
            "source_ref": "backends/platform/libretro/include/libretro-defs.h:32, backends/platform/libretro/src/libretro-os-utils.cpp:196"
          },
          {
            "name": "scummmodern.zip",
            "note": "Modern GUI theme for ScummVM launcher.",
            "path": "scummvm/theme/scummmodern.zip",
            "required": false,
            "source_ref": "dists/scummvm.rc:24"
          },
          {
            "name": "scummclassic.zip",
            "note": "Classic GUI theme for ScummVM launcher.",
            "path": "scummvm/theme/scummclassic.zip",
            "required": false,
            "source_ref": "dists/scummvm.rc:23"
          },
          {
            "name": "scummremastered.zip",
            "note": "Remastered GUI theme for ScummVM launcher.",
            "path": "scummvm/theme/scummremastered.zip",
            "required": false,
            "source_ref": "dists/scummvm.rc:25"
          },
          {
            "name": "residualvm.zip",
            "note": "ResidualVM theme for 3D adventure games (Grim Fandango, Myst III).",
            "path": "scummvm/theme/residualvm.zip",
            "required": false,
            "source_ref": "dists/scummvm.rc:26"
          },
          {
            "name": "gui-icons.dat",
            "note": "GUI icon pack used by the ScummVM launcher interface.",
            "path": "scummvm/theme/gui-icons.dat",
            "required": false,
            "source_ref": "dists/scummvm.rc:27"
          },
          {
            "name": "shaders.dat",
            "note": "Compiled shader pack for the GUI rendering pipeline.",
            "path": "scummvm/theme/shaders.dat",
            "required": false,
            "source_ref": "dists/scummvm.rc:28"
          },
          {
            "name": "translations.dat",
            "note": "GUI translation strings for ScummVM launcher localization.",
            "path": "scummvm/theme/translations.dat",
            "required": false,
            "source_ref": "dists/scummvm.rc:43"
          },
          {
            "name": "achievements.dat",
            "note": "Achievement definitions for supported games.",
            "path": "scummvm/extra/achievements.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_core.mk"
          },
          {
            "name": "classicmacfonts.dat",
            "note": "Classic Macintosh bitmap fonts for Mac game rendering.",
            "path": "scummvm/extra/classicmacfonts.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_core.mk"
          },
          {
            "name": "encoding.dat",
            "note": "Character encoding tables for text rendering across languages.",
            "path": "scummvm/extra/encoding.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_core.mk"
          },
          {
            "name": "helpdialog.zip",
            "note": "Help dialog assets for the in-game help system.",
            "path": "scummvm/extra/helpdialog.zip",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_core.mk"
          },
          {
            "name": "macgui.dat",
            "note": "Macintosh GUI widget data for Mac-style game interfaces.",
            "path": "scummvm/extra/macgui.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_core.mk"
          },
          {
            "name": "access.dat",
            "note": "Engine data for Access Software games (e.g. Amazon, Martian Memorandum).",
            "path": "scummvm/extra/access.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ACCESS)"
          },
          {
            "name": "bagel.dat",
            "note": "Engine data for Bagel engine games.",
            "path": "scummvm/extra/bagel.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_BAGEL)"
          },
          {
            "name": "cryo.dat",
            "note": "Engine data for Cryo Interactive games (e.g. Dune, Lost Eden).",
            "path": "scummvm/extra/cryo.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_CRYO)"
          },
          {
            "name": "cryomni3d.dat",
            "note": "Engine data for CryOmni3D games (Versailles 1685).",
            "path": "scummvm/extra/cryomni3d.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_CRYOMNI3D)"
          },
          {
            "name": "darkseed.dat",
            "note": "Engine data for Dark Seed (H.R. Giger adventure game).",
            "path": "scummvm/extra/darkseed.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_DARKSEED)"
          },
          {
            "name": "drascula.dat",
            "note": "Engine data for Drascula: The Vampire Strikes Back.",
            "path": "scummvm/extra/drascula.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_DRASCULA)"
          },
          {
            "name": "freescape.dat",
            "note": "Engine data for Freescape games (Driller, Dark Side, Total Eclipse).",
            "path": "scummvm/extra/freescape.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_FREESCAPE)"
          },
          {
            "name": "got.aud",
            "note": "Audio data for Game of Thrones engine.",
            "path": "scummvm/extra/got.aud",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GOT)"
          },
          {
            "name": "got.gfx",
            "note": "Graphics data for Game of Thrones engine.",
            "path": "scummvm/extra/got.gfx",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GOT)"
          },
          {
            "name": "hadesch_translations.dat",
            "note": "Translation data for Hades Challenge.",
            "path": "scummvm/extra/hadesch_translations.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_HADESCH)"
          },
          {
            "name": "hugo.dat",
            "note": "Engine data for Hugo's House of Horrors trilogy.",
            "path": "scummvm/extra/hugo.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_HUGO)"
          },
          {
            "name": "kyra.dat",
            "note": "Engine data for Kyrandia series (Legend of Kyrandia, Hand of Fate, Malcolm's Revenge).",
            "path": "scummvm/extra/kyra.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_KYRA)"
          },
          {
            "name": "lure.dat",
            "note": "Engine data for Lure of the Temptress.",
            "path": "scummvm/extra/lure.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_LURE)"
          },
          {
            "name": "macventure.dat",
            "note": "Engine data for MacVenture games (Shadowgate, Deja Vu, Uninvited).",
            "path": "scummvm/extra/macventure.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MACVENTURE)"
          },
          {
            "name": "mm.dat",
            "note": "Engine data for Might and Magic engine.",
            "path": "scummvm/extra/mm.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MM)"
          },
          {
            "name": "mort.dat",
            "note": "Engine data for Mortville Manor.",
            "path": "scummvm/extra/mort.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MORTEVIELLE)"
          },
          {
            "name": "myst3.dat",
            "note": "Engine data for Myst III: Exile.",
            "path": "scummvm/extra/myst3.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MYST3)"
          },
          {
            "name": "nancy.dat",
            "note": "Engine data for Nancy Drew adventure games.",
            "path": "scummvm/extra/nancy.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_NANCY)"
          },
          {
            "name": "neverhood.dat",
            "note": "Engine data for The Neverhood.",
            "path": "scummvm/extra/neverhood.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_NEVERHOOD)"
          },
          {
            "name": "prince_translation.dat",
            "note": "Translation data for The Prince and the Coward.",
            "path": "scummvm/extra/prince_translation.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_PRINCE)"
          },
          {
            "name": "queen.tbl",
            "note": "Resource table for Flight of the Amazon Queen.",
            "path": "scummvm/extra/queen.tbl",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_QUEEN)"
          },
          {
            "name": "sky.cpt",
            "note": "Compact table for Beneath a Steel Sky.",
            "path": "scummvm/extra/sky.cpt",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_SKY)"
          },
          {
            "name": "supernova.dat",
            "note": "Engine data for Mission Supernova.",
            "path": "scummvm/extra/supernova.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_SUPERNOVA)"
          },
          {
            "name": "teenagent.dat",
            "note": "Engine data for Teenagent.",
            "path": "scummvm/extra/teenagent.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TEENAGENT)"
          },
          {
            "name": "titanic.dat",
            "note": "Engine data for Starship Titanic.",
            "path": "scummvm/extra/titanic.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TITANIC)"
          },
          {
            "name": "tony.dat",
            "note": "Engine data for Tony Tough and the Night of Roasted Moths.",
            "path": "scummvm/extra/tony.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TONY)"
          },
          {
            "name": "toon.dat",
            "note": "Engine data for Toonstruck.",
            "path": "scummvm/extra/toon.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TOON)"
          },
          {
            "name": "ultima.dat",
            "note": "Engine data for Ultima series (Ultima IV-VIII, Savage Empire, Martian Dreams).",
            "path": "scummvm/extra/ultima.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ULTIMA)"
          },
          {
            "name": "ultima8.dat",
            "note": "Engine data specific to Ultima VIII: Pagan.",
            "path": "scummvm/extra/ultima8.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ULTIMA)"
          },
          {
            "name": "wintermute.zip",
            "note": "Engine data for Wintermute engine games.",
            "path": "scummvm/extra/wintermute.zip",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_WINTERMUTE)"
          },
          {
            "name": "fonts.dat",
            "note": "FreeType2 font data for text rendering.",
            "path": "scummvm/extra/fonts.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (USE_FREETYPE2)"
          },
          {
            "name": "fonts-cjk.dat",
            "note": "CJK (Chinese/Japanese/Korean) font data. Large file, only for systems with enough memory.",
            "path": "scummvm/extra/fonts-cjk.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data_big.mk (USE_FREETYPE2)"
          },
          {
            "name": "fonts-imgui.dat",
            "note": "ImGui font data for debug overlay rendering.",
            "path": "scummvm/extra/fonts-imgui.dat",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (USE_IMGUI)"
          },
          {
            "name": "grim-patch.lab",
            "note": "Patch data for Grim Fandango.",
            "path": "scummvm/extra/grim-patch.lab",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GRIM)"
          },
          {
            "name": "monkey4-patch.m4b",
            "note": "Patch data for Escape from Monkey Island.",
            "path": "scummvm/extra/monkey4-patch.m4b",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MONKEY4)"
          },
          {
            "name": "pred.dic",
            "note": "Predictive text dictionary for AGI engine text input (King's Quest, Space Quest, etc).",
            "path": "scummvm/extra/pred.dic",
            "required": false,
            "source_ref": "dists/engine-data/engine_data.mk (ENABLE_AGI)"
          },
          {
            "name": "vkeybd_default.zip",
            "note": "Default virtual keyboard layout. Added to the extra path by the build script.",
            "path": "scummvm/extra/vkeybd_default.zip",
            "required": false,
            "source_ref": "backends/platform/libretro/scripts/bundle_datafiles.sh (hardcoded addition)"
          }
        ],
        "logo": "https://raw.githubusercontent.com/scummvm/scummvm/master/icons/scummvm.svg",
        "notes": {
          "config_file": "ScummVM stores its configuration in <system>/scummvm.ini. This file is auto-created on first launch and stores game entries, paths, and user preferences. Not a distributable data file.\n",
          "directory_layout": "The libretro core expects: <system>/scummvm/extra/ for engine data and soundfonts, <system>/scummvm/theme/ for GUI themes. The bundled scummvm.zip release contains the full tree and can be extracted directly into the system directory. Individual shader files go in <system>/scummvm/extra/shaders/.\n",
          "mt32_emulation": "MT-32 emulation requires either MT32_CONTROL.ROM + MT32_PCM.ROM or CM32L_CONTROL.ROM + CM32L_PCM.ROM in the extra directory. These are proprietary Roland ROM dumps, not shipped with ScummVM. CM-32L ROMs are preferred when both sets are present. Without these, games that use MT-32 MIDI fall back to General MIDI with the Roland SC-55 soundfont.\n",
          "scummvm_zip": "Official ScummVM libretro releases include scummvm.zip which bundles all themes, engine data, shaders, and the SC-55 soundfont. This single file extracted to <system>/ provides a complete setup minus the proprietary MT-32/CM-32L ROMs.\n",
          "shaders": "OpenGL shaders for 3D engines (Grim Fandango, Myst III, The Longest Journey, Penumbra, Wintermute 3D, Freescape) are placed as individual .vertex/.fragment files in <system>/scummvm/extra/shaders/. There are roughly 130 shader files across all engines.\n"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/scummvm",
        "source_commit": "c3f4936d1ba2af178816cc9bb06087025e4a2bea",
        "systems": [
          "scummvm"
        ],
        "type": "libretro",
        "upstream": "https://github.com/scummvm/scummvm"
      }
    },
    {
      "id": "sdl2trs",
      "profile": {
        "analysis": {
          "character_generators": {
            "note": "Every character set is a compiled-in bitmap table selected by -charset1, -charset3 and -charset4. The tree holds no external font file and reads none. The sets cover the Model I generators, the Model III and Model 4 Katakana and international sets, and the Video Genie, System 80, HT-1080Z, Meritum and Aster CT-80 clones.\n",
            "source_ref": "src/trs_chars.c:12 (trs_char_data), src/trs_options.c:404-436 (charset names), src/trs_sdl_interface.c:585"
          },
          "embedded_roms": {
            "entries": [
              {
                "crc32": "5f85edf9",
                "load_address": 0,
                "md5": "de9617738e7ee6633d305777e0ce6a15",
                "note": "Writes \"You do not have a ROM image installed for Model\" plus the model digit to the screen and halts on a JR -2. It runs no TRS-80 software, which is why both slots it covers are required.\n",
                "role": "Fallback for Model I and Model III/4 when the slot cannot be read",
                "sha1": "42736ddff1944fcd4631168d35f773fc824eeb9b",
                "size": 461,
                "source_ref": "src/trs_cmd_rom.c:56-116, src/trs_cmd_rom.c:873,888",
                "symbol": "trs_fakerom"
              },
              {
                "crc32": "57ec35ee",
                "load_address": 0,
                "md5": "c8551e6aa36c4bea256d3073c7255ed5",
                "note": "Pete Cervasio's free Model 4P boot ROM version 0.06, carried under a copy-and-modify notice in the header. Reads and runs a boot sector and reports CRC errors, a missing boot sector and an empty drive. utilities/xtrsrom4p.z80 is its source and xtrsrom4p.README its manual.\n",
                "role": "Fallback for Model 4P",
                "sha1": "60d4ff043525256fa3072e59ba283a3cb98399f4",
                "size": 518,
                "source_ref": "src/trs_cmd_rom.c:126-193, src/trs_cmd_rom.c:892",
                "symbol": "trs_rom4p"
              },
              {
                "crc32": "99e3fdc6",
                "load_address": 12288,
                "md5": "235d1eb412cfc5696aad8a0a2dc6c53a",
                "note": "Loaded over 0x3000-0x377F whenever -stringy is set, on top of whatever the Model I slot supplied, and leaves trs_rom_size at 0x3780. Taken from the ESF Advanced Programmer's Guide and held to be public domain by the header. utilities/esfrom.z80 is its source.\n",
                "role": "Exatron Stringy Floppy firmware, overlaid on the Model I image",
                "sha1": "b2612037600031b5290bace247951e1f99700b36",
                "size": 1920,
                "source_ref": "src/trs_cmd_rom.c:199-441, src/trs_cmd_rom.c:875-876",
                "symbol": "trs_romesf"
              }
            ],
            "extraction": "hashes computed from the decoded byte literals",
            "mechanism": "Uint8 arrays in trs_cmd_rom.c, copied into the ROM buffer by trs_load_compiled_rom (trs_cmd_rom.c:769-777)"
          },
          "extended_rom_images": {
            "layouts": [
              {
                "image_size": 16384,
                "machine": "Prologica CP-300, CP-500 and CP-500 M80",
                "note": "14 KB of patched Model III ROM plus a 2 KB resident monitor read back from 0x3800-0x3FFF and banked into 0x3000-0x37FF. README.md:21 and html/Features.html name CP-300 and CP-500 for this 16 KB image.\n",
                "slot": "model3.rom",
                "source_ref": "src/trs_cp500.c:1-22, src/trs_cp500.c:153-160, src/trs_memory.c:1052-1054"
              },
              {
                "image_size": 18432,
                "machine": "Holmes VID-80 (VX-3) on Model III",
                "note": "4 KB VID-80 ROM with the Model III ROM appended behind it; this pairing is what sets MAX_ROM_SIZE.",
                "slot": "model3.rom",
                "source_ref": "src/trs_memory.c:577-586, src/trs_memory.c:1057-1080"
              },
              {
                "image_size": 16384,
                "machine": "TCS SpeedMaster, also sold as Genie IIs",
                "note": "BASIC at 0x0000-0x2FFF and a ROM card read from 0x1000-0x3FFF into 0x4000-0xBFFF. Needs -speedup tcs (html/Features.html).",
                "slot": "level2.rom",
                "source_ref": "src/trs_memory.c:1025-1048"
              },
              {
                "image_size": 14336,
                "machine": "Aster CT-80",
                "note": "BASIC at 0x0000-0x2FFF plus a 2 KB boot ROM at 0x3000-0x37FF, mirrored into 0xEC00 in CP/M mode.",
                "slot": "level2.rom",
                "source_ref": "src/trs_memory.c:962-994"
              },
              {
                "image_size": 14336,
                "machine": "EACA EG 3200 Genie III",
                "note": "Bank 1 is read through trs_rom_size, so the 14 KB cap on the plain mapping is the ceiling.",
                "slot": "level2.rom",
                "source_ref": "src/trs_memory.c:909-931"
              },
              {
                "image_size": 12288,
                "machine": "TCS Genie IIIs",
                "note": "Reads 0x0000-0x2FFF only; the rest of the address space is banked RAM, video and the HRG window.",
                "slot": "level2.rom",
                "source_ref": "src/trs_memory.c:932-961"
              },
              {
                "image_size": 12288,
                "machine": "LNW Research LNW80/II",
                "note": "Reads 0x0000-0x2FFF only. -speedup lnw sets the 4 MHz clock and the low 16 KB banking.",
                "slot": "level2.rom",
                "source_ref": "src/trs_memory.c:995-1024"
              }
            ],
            "note": "The clones and the Holmes video card need images larger than a stock ROM, and the memory mapper reads the extra regions straight out of the same buffer. They arrive through romfile1 or romfile3 like any other image and are recognised from the ROM data, so the emulator defines no filename for them and no option selects them.\n",
            "source_ref": "src/trs_clones.c:8-20 (clone table), src/trs_memory.c:63 (MAX_ROM_SIZE)"
          },
          "frontend_conventions": {
            "entries": [
              {
                "frontend": "ES-DE",
                "note": "Passes -rom %ROMPATH%/trs-80/level2.rom on all three launch commands and -disk0 %ROMPATH%/trs-80/boot.dsk on the DOS Diskette one, with boot.dsk documented as a copy of a TRS-80 DOS, NewDos/80 v2.0 recommended. No command passes -m, so the slot -rom writes to follows the config file, which is Model I unless the user changed it, and model3.rom and model4p.rom are never named. The ES-DE user guide records that both filenames are case sensitive.\n",
                "source_ref": "ES-DE resources/systems/linux/es_systems.xml:2211-2213, ES-DE USERGUIDE.md:3334-3362"
              },
              {
                "frontend": "RetroDECK",
                "note": "Declares level1.rom, level2.rom, level3.rom, level4.rom, level4p.rom and boot.dsk under $roms_path/trs-80. Of those the emulator opens only level2.rom by default; level3.rom, level4.rom and level4p.rom are renames of the model3.rom and model4p.rom slots, and level1.rom is a Level I BASIC image for the Model I slot. The manifest hashes come from the frontend, not from the emulator, which computes none.\n",
                "source_ref": "RetroDECK archive_later/sdl2trs/component_manifest.json"
              }
            ],
            "note": "Two frontends fix names and paths the emulator itself does not know. Both belong to the platform layer.\n"
          },
          "generated_files": {
            "note": "Produced by the emulator, none is user-supplied",
            "written_and_read_back": [
              {
                "filename": ".sdltrs.t8c",
                "note": "Configuration, written to the home directory on first run when none is found.",
                "source_ref": "src/trs_options.c:939-955, src/trs_options.c:1049"
              },
              {
                "filename": "<name>.t8s",
                "note": "Emulator state, written and read by the GUI or a bare command-line argument.",
                "source_ref": "src/trs_state_save.c:38-66, src/trs_state_save.c:68-113"
              },
              {
                "filename": "blank disk, wafer and hard drive images",
                "source_ref": "src/trs_mkdisk.c:192-308, src/trs_stringy.c:187-197"
              }
            ],
            "written_only": [
              {
                "filename": "trsprn####.txt",
                "note": "Printer output, numbered up to 9999 in the printer directory.",
                "source_ref": "src/trs_printer.c:60-81"
              },
              {
                "filename": "screenshots as BMP",
                "source_ref": "src/trs_sdl_gui.c:2673"
              }
            ]
          },
          "shipped_content": {
            "files": [
              "diskimages/utility.dsk",
              "diskimages/cpmutil.dsk"
            ],
            "note": "Installed into the shared data directory by the emulator's own packaging and carrying the IMPORT, EXPORT, SETTIME, XTRSHARD, XTRSMOUS and CP/M helper programs whose sources sit in utilities/. No code path names them: they reach the machine only when a user mounts them with -disk.\n",
            "source_ref": "CMakeLists.txt:50, CMakeLists.txt:145-146"
          },
          "user_supplied_paths": {
            "entries": [
              {
                "source_ref": "src/trs_options.c:589-594, src/trs_disk.c:789-921",
                "what": "floppy images in drives 0-7, JV1, JV3 and DMK"
              },
              {
                "source_ref": "src/trs_options.c:595-600, src/trs_hard.c:212-220, src/trs_hard.c:528-609",
                "what": "hard drive images, units 0-3"
              },
              {
                "source_ref": "src/trs_options.c:583-588, src/trs_cassette.c:526-553",
                "what": "cassette images, .cas, .cpt and .wav"
              },
              {
                "source_ref": "src/trs_options.c:601-606, src/trs_stringy.c:278-316, src/trs_stringy.c:342-346",
                "what": "stringy floppy wafers in drives 0-7, .esf"
              },
              {
                "source_ref": "src/trs_options.c:607-610, src/trs_disk.c:3765-3802",
                "what": "disk set, a plain list of the paths above"
              },
              {
                "source_ref": "src/trs_options.c:1014-1015, src/trs_cmd_rom.c:845-866",
                "what": "CMD program loaded straight into memory, from a bare argument"
              },
              {
                "source_ref": "src/trs_uart.c:54-56, src/trs_uart.c:144-202",
                "what": "serial port tty, defaulting to /dev/ttyS0 on Linux"
              }
            ],
            "note": "Named on the command line, in the config file or in a disk set, with no fixed filename"
          }
        },
        "core_classification": "community_fork",
        "core_version": "1.2.35",
        "cores": [
          "sdl2trs",
          "sdltrs"
        ],
        "display_name": "Tandy - TRS-80 (SDL2TRS)",
        "emulator": "SDL2TRS",
        "files": [
          {
            "description": "TRS-80 Model I ROM",
            "max_size": 18432,
            "name": "level2.rom",
            "note": "Model I is the model a stock configuration selects (trs_options.c:923), so this is the slot an unconfigured run reads. Without it the machine runs the compiled-in diagnostic stub and nothing else. max_size is the shared ROM buffer ceiling: a longer file is truncated, never rejected, and only the first 14336 bytes reach the plain memory map.\n",
            "required": true,
            "source_ref": "src/trs_options.c:81 (romfile1), src/trs_options.c:896 (default name), src/trs_cmd_rom.c:871-884 (trs_model 1)"
          },
          {
            "description": "TRS-80 Model III and Model 4 ROM",
            "max_size": 18432,
            "name": "model3.rom",
            "note": "Serves Model III and Model 4 alike; the stub text spells out that Model 4 mode needs a Model 3 image (trs_cmd_rom.c:110-115). This is the one slot that also accepts a MODELA/III CMD file, which html/index.html presents as the substitute for a real Model III ROM. Same truncating ceiling as the Model I slot. The image is the Model III memory map: ROM A 8041364.u104 at 0, ROM B 8040332.u105 at 0x2000 and ROM C 8040316c.u106 at 0x3000, the layout MAME declares for the 0x3800 region.\n",
            "required": true,
            "source_ref": "src/trs_options.c:82 (romfile3), src/trs_options.c:897 (default name), src/trs_cmd_rom.c:885-889 (trs_model 3 and 4)"
          },
          {
            "description": "TRS-80 Model 4P boot ROM",
            "max_size": 18432,
            "name": "model4p.rom",
            "note": "Optional because the compiled-in replacement is a working boot ROM rather than a stub. html/index.html states the free ROM boots only Model 4 operating systems, not Model III, and only from floppy, so the original image is what restores Model III mode and hard-drive booting. Hard drive unit 0 is tried before floppy by the Radio Shack ROM, and F2 held at boot forces floppy (html/Features.html). The image is the 4 KB gate-array boot ROM 8075332.u69, the only ROM the machine carries; the Model III code comes from a boot disk.\n",
            "required": false,
            "source_ref": "src/trs_options.c:83 (romfile4p), src/trs_options.c:898 (default name), src/trs_cmd_rom.c:890-893 (trs_model 5)"
          }
        ],
        "mode": "standalone",
        "notes": "TRS-80 Model I, III, 4 and 4P emulator. Jens Guenther's GitLab tree continues\nMark Grebe's SDLTRS, itself an SDL port of Tim Mann's xtrs, whose licence\nstill ships as xtrs.LICENSE. The sdl2 branch builds the sdl2trs binary that\nES-DE and RetroDECK look for; master builds sdltrs for hosts without SDL2\n(README.md:106-111). The branches diverge only in the display and paste code:\ntrs_cmd_rom.c and trs_memory.c are byte-identical between them.\n\nThree ROM slots exist, one per model family, and trs_rom_init picks one from\ntrs_model. Model I takes romfile1, Model III and Model 4 share romfile3, and\nModel 4P takes romfile4p (trs_cmd_rom.c:868-894). The defaults are level2.rom,\nmodel3.rom and model4p.rom, each prefixed by ROM_PATH (trs_options.c:896-898).\nROM_PATH is a build define left empty unless a packager sets it\n(trs_options.c:53-54, CMakeLists.txt:42), so a stock build resolves the names\nagainst the working directory.\n\n-rom, -r and -romfile write to the slot of the model selected at the moment\nthey are parsed (trs_options.c:609-619). Options are applied in command-line\norder after the config file has been read (trs_options.c:1016-1036), so -m has\nto come first to redirect them, and a model key in the config file otherwise\ndecides. -rom1, -rom3 and -rom4p address a slot directly. The GUI ROM browser\nfilters on .bin, .hex, .iii and .rom (trs_sdl_gui.h:63, trs_sdl_gui.c:2591-2597).\n\ntrs_load_rom sniffs the first byte. A colon means Intel hex, and load_hex\nrejects the file on a line checksum mismatch. A 1 or a 5 on Model III or later\nmeans a MODELA/III CMD file, rejected above 14 KB. Anything else is read as\nraw binary with no check (trs_cmd_rom.c:720-767, 779-843), which is the path a\ndump takes. No hash is computed anywhere in the tree. rom_write drops any byte\nat or past MAX_ROM_SIZE, 18432 (trs_memory.c:63, 742-745), and trs_rom_size,\nthe extent of the plain ROM mapping, is capped at 14336 (trs_cmd_rom.c:896-898).\n\nA failed load is not fatal. Model I and Model III/4 fall back to trs_fakerom,\nwhich prints \"You do not have a ROM image installed for Model\" and spins.\nModel 4P falls back to trs_rom4p, Pete Cervasio's free boot ROM, which boots\nModel 4 operating systems from floppy (trs_cmd_rom.c:871-893). -stringy\noverlays the built-in Exatron Stringy Floppy ROM at 0x3000 over the Model I\nimage (trs_cmd_rom.c:875-876), and -hdboot rewrites the loaded Model I ROM in\nplace to boot from a hard drive (trs_cmd_rom.c:447-610, 882-883).\n\nThe clones run off the same three slots and are recognised from the ROM data\nrather than from an option (trs_clones.c:8-20, html/Features.html), so their\nlarger images load as a Model I or a Model III ROM. None has a filename of its\nown anywhere in the tree.\n",
        "profiled_date": "2026-08-08",
        "source": "https://gitlab.com/jengun/sdltrs",
        "source_commit": "4ba6cd076fd0c966c0dcb384663211cf691d6649",
        "systems": [
          "trs80"
        ],
        "type": "standalone",
        "upstream": "http://sdltrs.sourceforge.net"
      }
    },
    {
      "id": "sdlpal",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v2.0.1",
        "cores": [
          "sdlpal"
        ],
        "display_name": "SDLPAL",
        "emulator": "SDLPAL",
        "files": [
          {
            "category": "game_data",
            "name": "abc.mkf",
            "note": "Animation and battle character data archive.",
            "path": "sdlpal/abc.mkf",
            "required": true,
            "source_ref": "util.c:734, global.c:55, battle.c:879"
          },
          {
            "category": "game_data",
            "name": "ball.mkf",
            "note": "Magic effect graphics archive.",
            "path": "sdlpal/ball.mkf",
            "required": true,
            "source_ref": "util.c:734, global.c:177"
          },
          {
            "category": "game_data",
            "name": "data.mkf",
            "note": "Core game data archive (scripts, events, game logic).",
            "path": "sdlpal/data.mkf",
            "required": true,
            "source_ref": "util.c:734, global.c:178"
          },
          {
            "category": "game_data",
            "name": "f.mkf",
            "note": "Face/portrait graphics archive.",
            "path": "sdlpal/f.mkf",
            "required": true,
            "source_ref": "util.c:734, global.c:179"
          },
          {
            "category": "game_data",
            "name": "fbp.mkf",
            "note": "Full-screen background picture archive (cutscenes, title).",
            "path": "sdlpal/fbp.mkf",
            "required": true,
            "source_ref": "util.c:735, global.c:175"
          },
          {
            "category": "game_data",
            "name": "fire.mkf",
            "note": "Fire/spell effect graphics archive.",
            "path": "sdlpal/fire.mkf",
            "required": true,
            "source_ref": "util.c:735, global.c:180"
          },
          {
            "category": "game_data",
            "name": "gop.mkf",
            "note": "Game object palette/graphics archive.",
            "path": "sdlpal/gop.mkf",
            "required": true,
            "source_ref": "util.c:735, res.c:234"
          },
          {
            "category": "game_data",
            "name": "map.mkf",
            "note": "Map tile and layout data archive.",
            "path": "sdlpal/map.mkf",
            "required": true,
            "source_ref": "util.c:735, global.c:55, res.c:233"
          },
          {
            "category": "game_data",
            "name": "mgo.mkf",
            "note": "Map graphic object (sprite overlay) archive.",
            "path": "sdlpal/mgo.mkf",
            "required": true,
            "source_ref": "util.c:736, global.c:176"
          },
          {
            "category": "game_data",
            "name": "pat.mkf",
            "note": "Palette data archive.",
            "path": "sdlpal/pat.mkf",
            "required": true,
            "source_ref": "util.c:736, palette.c:53"
          },
          {
            "category": "game_data",
            "name": "rgm.mkf",
            "note": "RGM graphics archive.",
            "path": "sdlpal/rgm.mkf",
            "required": true,
            "source_ref": "util.c:736, global.c:181"
          },
          {
            "category": "game_data",
            "name": "rng.mkf",
            "note": "RNG animation/cutscene sequence archive.",
            "path": "sdlpal/rng.mkf",
            "required": true,
            "source_ref": "util.c:736, rngplay.c:402"
          },
          {
            "category": "game_data",
            "name": "sss.mkf",
            "note": "SSS data archive (message offsets in chunk 3).",
            "path": "sdlpal/sss.mkf",
            "required": true,
            "source_ref": "util.c:737, global.c:182"
          },
          {
            "category": "game_data",
            "name": "m.msg",
            "note": "Message text data (dialog, story). Opened via UTIL_OpenRequiredFile in default mode.",
            "path": "sdlpal/m.msg",
            "required": true,
            "source_ref": "util.c:740, text.c:718"
          },
          {
            "category": "game_data",
            "name": "word.dat",
            "note": "Word data (menu items, status labels, item/spell names).",
            "path": "sdlpal/word.dat",
            "required": true,
            "source_ref": "util.c:741, text.c:719, global.c:197"
          },
          {
            "category": "game_data",
            "name": "desc.dat",
            "note": "Object description strings. DOS version only (skipped for Win95). Returns NULL if absent.",
            "path": "sdlpal/desc.dat",
            "required": false,
            "source_ref": "global.c:204, ui.c:864"
          },
          {
            "category": "game_data",
            "name": "wor16.asc",
            "note": "Chinese character code mapping for embedded font. Silently skipped if absent.",
            "path": "sdlpal/wor16.asc",
            "required": false,
            "source_ref": "font.c:114"
          },
          {
            "category": "game_data",
            "name": "wor16.fon",
            "note": "Chinese character bitmap font data. Used with wor16.asc for DOS font rendering.",
            "path": "sdlpal/wor16.fon",
            "required": false,
            "source_ref": "font.c:172"
          },
          {
            "category": "game_data",
            "name": "voc.mkf",
            "note": "VOC format sound effects archive (DOS version). Preferred for DOS game data.",
            "path": "sdlpal/voc.mkf",
            "required": false,
            "source_ref": "util.c:743, sound.c:969"
          },
          {
            "category": "game_data",
            "name": "sounds.mkf",
            "note": "WAV format sound effects archive (Win95 version). Preferred for Win95 game data.",
            "path": "sdlpal/sounds.mkf",
            "required": false,
            "source_ref": "util.c:743, sound.c:964"
          },
          {
            "category": "game_data",
            "name": "mus.mkf",
            "note": "RIX/OPL music archive. Default music source, played through OPL emulation.",
            "path": "sdlpal/mus.mkf",
            "required": false,
            "source_ref": "util.c:744, audio.c:305"
          },
          {
            "category": "game_data",
            "name": "midi.mkf",
            "note": "MIDI music archive. Used when Music=MIDI is configured in sdlpal.cfg.",
            "path": "sdlpal/midi.mkf",
            "required": false,
            "source_ref": "util.c:744, midi.c:78, midi_tsf.c:68, midi_timidity.c:130"
          },
          {
            "category": "game_data",
            "name": "1.avi",
            "note": "Trademark screen video (Win95 only). Falls back to RNG animation if absent.",
            "path": "sdlpal/1.avi",
            "required": false,
            "source_ref": "main.c:197"
          },
          {
            "category": "game_data",
            "name": "2.avi",
            "note": "Splash screen video (Win95 only). Falls back to sprite animation if absent.",
            "path": "sdlpal/2.avi",
            "required": false,
            "source_ref": "main.c:237"
          },
          {
            "category": "game_data",
            "name": "3.avi",
            "note": "In-game event video (Win95 only).",
            "path": "sdlpal/3.avi",
            "required": false,
            "source_ref": "uigame.c:162"
          },
          {
            "category": "game_data",
            "name": "4.avi",
            "note": "Ending sequence video part 1 (Win95 only).",
            "path": "sdlpal/4.avi",
            "required": false,
            "source_ref": "ending.c:418"
          },
          {
            "category": "game_data",
            "name": "5.avi",
            "note": "Ending sequence video part 2 (Win95 only).",
            "path": "sdlpal/5.avi",
            "required": false,
            "source_ref": "ending.c:420"
          },
          {
            "category": "game_data",
            "name": "6.avi",
            "note": "Ending sequence video part 3 (Win95 only).",
            "path": "sdlpal/6.avi",
            "required": false,
            "source_ref": "ending.c:485"
          }
        ],
        "notes": "Game engine reimplementing the classic Chinese RPG PAL (Sword and Fairy)\nby SoftStar Inc. No BIOS or firmware required. All files are proprietary\ngame data from the original 1995 DOS or 1998 Win95 release.\n\nPlace game files in <system_dir>/sdlpal/ or point a .cfg at the game\ndirectory. The game is available on Steam (app 1546570). Auto-detects\nDOS vs Win95 game data.\n\nThe libretro port disables MP3, OGG, OPUS, native MIDI, and CD audio\nbackends (pal_config.h). Only RIX (mus.mkf) and software MIDI synthesis\nvia Timidity/TinySoundFont (midi.mkf + user-provided soundfont) are\navailable for music.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/sdlpal/sdlpal",
        "source_commit": "a2e13e5ff83cf33448b3de3b8b612c07e28eacd7",
        "systems": [
          "sdlpal"
        ],
        "type": "libretro",
        "upstream": "https://github.com/sdlpal/sdlpal"
      }
    },
    {
      "id": "shadps4",
      "profile": {
        "analysis_commit": "891612c8",
        "analysis_date": "2026-08-10",
        "core_version": "pre-release 2026-08-08",
        "cores": [
          "shadps4",
          "shadps4-gui"
        ],
        "display_name": "shadPS4 (PlayStation 4)",
        "emulator": "shadps4",
        "files": [
          {
            "description": "PS4 C standard library",
            "hle_fallback": true,
            "name": "libSceLibcInternal.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/linker.cpp:79-90"
          },
          {
            "description": "PS4 next-generation audio system",
            "hle_fallback": true,
            "name": "libSceNgs2.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:213"
          },
          {
            "description": "PS4 user-level threading library",
            "name": "libSceUlt.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:214"
          },
          {
            "description": "PS4 real-time clock library",
            "hle_fallback": true,
            "name": "libSceRtc.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:215"
          },
          {
            "description": "PS4 JPEG decoder",
            "name": "libSceJpegDec.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:216"
          },
          {
            "description": "PS4 JPEG encoder",
            "hle_fallback": true,
            "name": "libSceJpegEnc.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:217"
          },
          {
            "description": "PS4 PNG encoder",
            "hle_fallback": true,
            "name": "libScePngEnc.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:218"
          },
          {
            "description": "PS4 JSON parser",
            "name": "libSceJson.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:219"
          },
          {
            "description": "PS4 JSON v2 parser",
            "name": "libSceJson2.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:220"
          },
          {
            "description": "PS4 character encoding conversion",
            "name": "libSceCesCs.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:221"
          },
          {
            "description": "PS4 ATRAC9 encoder",
            "name": "libSceAt9Enc.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:222"
          },
          {
            "description": "PS4 audio decoder",
            "name": "libSceAudiodec.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:223"
          },
          {
            "description": "PS4 CPU audio decoder",
            "name": "libSceAudiodecCpu.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:224"
          },
          {
            "description": "PS4 CPU Dolby Digital Plus decoder",
            "name": "libSceAudiodecCpuDdp.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:225"
          },
          {
            "description": "PS4 CPU AAC decoder",
            "name": "libSceAudiodecCpuM4aac.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:226"
          },
          {
            "description": "PS4 CPU DTS-HD LBR decoder",
            "name": "libSceAudiodecCpuDtsHdLbr.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:227"
          },
          {
            "description": "PS4 CPU HEVAG decoder",
            "name": "libSceAudiodecCpuHevag.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:228"
          },
          {
            "description": "PS4 font rendering library",
            "hle_fallback": true,
            "name": "libSceFont.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:229"
          },
          {
            "description": "PS4 FreeType font library",
            "hle_fallback": true,
            "name": "libSceFontFt.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:230"
          },
          {
            "description": "PS4 FreeType OpenType library",
            "name": "libSceFreeTypeOt.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:231"
          },
          {
            "description": "PS4 FreeType outline library",
            "name": "libSceFreeTypeOl.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:232"
          },
          {
            "description": "PS4 FreeType optimised outline library",
            "name": "libSceFreeTypeOptOl.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:233"
          },
          {
            "description": "PS4 reliable UDP library",
            "hle_fallback": true,
            "name": "libSceRudp.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:234"
          },
          {
            "description": "PS4 WebKit font configuration",
            "name": "libSceWkFontConfig.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:235"
          },
          {
            "description": "PS4 system gesture recognition",
            "hle_fallback": true,
            "name": "libSceSystemGesture.sprx",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:236"
          },
          {
            "description": "PS4 XML parser",
            "name": "libSceXml.sprx",
            "note": "No HLE implementation; the module is stubbed when absent.",
            "path": "shadps4/sys_modules/",
            "required": false,
            "source_ref": "src/core/libraries/sysmodule/sysmodule_internal.cpp:237"
          }
        ],
        "mode": "standalone",
        "notes": "shadPS4 is a standalone PlayStation 4 emulator. Most PS4 system libraries\nare reimplemented in HLE. For better game compatibility, real firmware\nmodules (.sprx) can be loaded in LLE mode from the sys_modules/ directory.\n\nModules are loaded by sysmodule_internal.cpp via loadModuleInternal().\nIf a module exists in sys_modules/, it is loaded as LLE. If absent and\nan HLE implementation exists, the emulator falls back to HLE. If neither,\nthe module is stubbed and games needing it may fail.\n\nGame-specific overrides are supported: sys_modules/{CUSA_ID}/ takes\npriority over the global sys_modules/ directory.\n\nSystem fonts are mounted from fonts/font/ (/preinst/common/font on real\nPS4) and fonts/font2/ (/system/common/font2 on real PS4). These are SST\n(Sony Standard Text) typeface files in OTF format. The emulator mounts\nthe directories wholesale; games load individual fonts by name. Without\nfonts, the emulator warns \"No dumped system fonts, expect missing text\nor instability.\"\n\nAll firmware files are extracted from a real PS4 via FTP:\n- .sprx modules from /system/common/lib/\n- font/ from /preinst/common/font/\n- font2/ from /system/common/font2/\n\nBatocera configgen (shadps4Generator.py) configures display, input, and\nsaves but does not map BIOS/firmware paths. The emulator uses its own\nuser directory for sys_modules/ and fonts/.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/shadps4-emu/shadPS4",
        "source_commit": "891612c865f84fabbf6218e57278ce9e5a7722f0",
        "systems": [
          "ps4"
        ],
        "type": "standalone",
        "upstream": "https://github.com/shadps4-emu/shadPS4"
      }
    },
    {
      "id": "sheepshaver",
      "profile": {
        "core_classification": "other",
        "core_version": "2.4",
        "cores": [
          "sheepshaver"
        ],
        "display_name": "Apple - Macintosh PowerPC (SheepShaver)",
        "emulator": "SheepShaver",
        "files": [
          {
            "aliases": [
              "Mac OS ROM"
            ],
            "description": "PowerPC Macintosh ROM, 4 MB PCI PowerMac image or CHRP-BOOT Mac OS ROM",
            "name": "ROM",
            "note": "No size is enforced on its own: DecodeROM takes a 4 MB read as a plain image and any other length only through the <CHRP-BOOT> header. The check every accepted image passes is the nanokernel ID at offset 0x30d064 of the decoded 4 MB image, which PatchROM matches against Boot TNT, Boot Alchemy, Boot Zanzibar, Boot Gazelle, Boot Gossamer and NewWorld.\n",
            "required": true,
            "source_ref": "SheepShaver/src/Unix/main_unix.cpp:162-163,585-593,987, SheepShaver/src/Windows/main_windows.cpp:58-59,330-344, SheepShaver/src/rom_patches.cpp:148-200,671-695, SheepShaver/src/main.cpp:161",
            "validation": [
              "signature"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "PowerPC Macintosh emulator living in the macemu tree alongside Basilisk II,\nversion 2.4 (version.h:24-25). Runs MacOS 7.5.2 through 9.0.4 (README.md) on\na PCI PowerMac or NewWorld ROM image.\n\nROM loading (main_unix.cpp:581-613, main_windows.cpp:329-360): the path comes\nfrom the \"rom\" prefs item (prefs_items.cpp:45). When that is empty, the file\nnamed ROM is opened, then the file named Mac OS ROM (main_unix.cpp:162-163,\nmain_windows.cpp:58-59). Neither found raises STR_NO_ROM_FILE_ERR and\nmain_unix.cpp:987 aborts startup. The filename does not select the format:\nboth names go through the same decoder.\n\nAt most ROM_SIZE = 0x400000 bytes are read (cpu_emulation.h:30). DecodeROM\n(rom_patches.cpp:148-200) accepts two forms. A read of exactly 4 MB is taken\nas a plain image and copied as is. A buffer opening on <CHRP-BOOT> is\ndecompressed instead, either LZSS through the lzss-offset and lzss-size\nconstants (decode_lzss, rom_patches.cpp:80) or parcel by parcel through\nparcels-offset and parcels-size (decode_parcels, rom_patches.cpp:123).\nAnything else fails, and main_unix.cpp:602-609 picks the message from the\nfile size on disk: STR_ROM_SIZE_ERR when it is not 4 MB,\nSTR_ROM_FILE_READ_ERR otherwise (user_strings.cpp:66-67).\n\nPatchROM (rom_patches.cpp:671-731), called from InitAll at main.cpp:161,\nreads the nanokernel ID at offset 0x30d064 of the decoded image and accepts\nBoot TNT, Boot Alchemy, Boot Zanzibar, Boot Gazelle, Boot Gossamer and\nNewWorld (rom_patches.cpp:682-695). Any other string raises\nSTR_UNSUPPORTED_ROM_TYPE_ERR. The free space checks at\nrom_patches.cpp:698-707 and the four patch passes at rom_patches.cpp:710-713\nthen rewrite the image in memory, and rom_patches.cpp:729 copies its last\nmegabyte past the 4 MB mark for the 68k emulator. Nothing is checksummed:\nthe ROM checksum at offset 0 is only printed by a debug build\n(rom_patches.cpp:674).\n\nMacOS itself and the applications live in disk images referenced by the\ndisk, floppy and cdrom prefs items, supplied by the user.\n\nTwo files are installed by the emulator's own Makefile into\n$(datadir)/SheepShaver (Makefile.in:21,162-164) and read from there:\n  keycodes    keycode to Mac keycode table, read only when the keycodes\n              prefs item is true, which defaults to false\n              (prefs_unix.cpp:117). Overridable with keycodefile.\n              configure.ac:754,775 picks ../SDL/keycodes or keycodes\n              according to the video backend. video_x.cpp:79,1200,\n              video_sdl2.cpp:97,1231\n  tunconfig   script run to configure the tunN interface for ethernet.\n              Overridable with etherconfig. ether_unix.cpp:108,381\nThe SDL2 backend falls back to BasiliskII_keycodes in the same directory\n(video_sdl2.cpp:98,1232).\n\nThe preferences file (.sheepshaver_prefs, prefs_unix.cpp:49;\nSheepShaver_prefs, prefs_windows.cpp:66) and the NVRAM file\n(.sheepshaver_nvram, xpram_unix.cpp:30; SheepShaver_nvram.dat,\nxpram_windows.cpp:31) are written by the emulator when absent. Passing a\n.sheepvm directory on the command line reads the preferences from inside it\ninstead (main_unix.cpp:371-384, prefs_unix.cpp:57-69).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/cebix/macemu",
        "source_commit": "96e512bd6376e78a2869f16dcc8a9028bce5ee72",
        "systems": [
          "apple-macintosh"
        ],
        "type": "standalone",
        "upstream": "https://github.com/cebix/macemu"
      }
    },
    {
      "id": "simcp",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "Git",
        "cores": [
          "simcp"
        ],
        "display_name": "SAM Coupe (SimCoupe)",
        "emulator": "SimCoupe",
        "files": [],
        "notes": "SAM Coupe emulator by Simon Owen. Port based on old pre-1.0 SimCoupe\ncodebase. Experimental, incomplete (no sound, partial input).\n\nSAM Coupe ROM v3.0 and SAMDOS 2.0 embedded in the binary (SAMROM.h,\nSAMDOS.h). HDBOOT patches for Atom Lite also embedded (HDBOOT.h).\nThe libretro wrapper never accesses the system directory.\n\nUpstream v1.2.x loads external resource files (samcoupe.rom,\nsp0256-al2.bin for VoiceBox speech synthesis). The libretro port\nlacks VoiceBox/SP0256 support (commented out in IO.cpp).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-simcoupe",
        "source_commit": "c28046241ac6a4d79e55326b6e354dc02f92fa34",
        "systems": [
          "sam-coupe"
        ],
        "type": "libretro",
        "upstream": "https://github.com/simonowen/simcoupe"
      }
    },
    {
      "id": "simple64",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v2024.12.1",
        "cores": [
          "simple64",
          "simple64-gui",
          "io.github.simple64.simple64"
        ],
        "display_name": "Nintendo - Nintendo 64 (simple64)",
        "emulator": "simple64",
        "files": [
          {
            "description": "PIF boot ROM (NTSC)",
            "hle_fallback": true,
            "md5": [
              "5c124e7948ada85da603a522782940d0",
              "4921d5f2165dee6e2496f4388c4c81da"
            ],
            "name": "pif.ntsc.rom",
            "note": "Chosen for SYSTEM_NTSC and SYSTEM_MPAL. rom_country_code_to_system_type returns SYSTEM_PAL only for country codes 0x44, 0x46, 0x49, 0x50, 0x53, 0x55, 0x58 and 0x59 and falls through to SYSTEM_NTSC for 0x37, 0x41, 0x45, 0x4a and, on its default arm, every other code, which is why the region is recorded as world rather than an enumeration. main_run reads 1984 bytes, the size of the PIF ROM window, and open_pif digests exactly that span, so the size given here is the length consumed rather than a check the code performs. Two digests are accepted: the current one, which is the image shipped in data/ and the No-Intro entry \"[BIOS] Nintendo 64 - PIF (Japan, USA).bin\" at 1984 bytes, and the digest of the earlier dump kept for compatibility. On a match the image is byteswapped into PIF memory and the reset vector moves to 0xbfc00000; on a mismatch the core logs \"Invalid PIF ROM\" and boots through the HLE bootrom instead.\n",
            "region": [
              "world"
            ],
            "required": false,
            "size": 1984,
            "source_ref": "mupen64plus-core/src/main/main.c:1565-1580,1624-1633,2097-2135, mupen64plus-core/src/main/rom.c:502-525, mupen64plus-core/src/device/pif/pif.h:36",
            "system": "nintendo-64",
            "validation": [
              "md5"
            ]
          },
          {
            "description": "PIF boot ROM (PAL)",
            "hle_fallback": true,
            "md5": [
              "d4232dc935cad0650ac2664d52281f3a",
              "2b6eec586faa43f3462333b844834554"
            ],
            "name": "pif.pal.rom",
            "note": "Chosen for SYSTEM_PAL, which covers the eight country codes 0x44 German, 0x46 French, 0x49 Italian, 0x50 European, 0x53 Spanish, 0x55 Australian, 0x58 and 0x59 European. Same read length, digest span and fallback as the NTSC image. The current digest is the image shipped in data/ and the No-Intro entry \"[BIOS] Nintendo 64 - PIF (Europe).bin\" at 1984 bytes; the second value is the earlier dump the fork still accepts.\n",
            "region": [
              "europe",
              "australia"
            ],
            "required": false,
            "size": 1984,
            "source_ref": "mupen64plus-core/src/main/main.c:1565-1580,1624-1633,2097-2135, mupen64plus-core/src/main/rom.c:502-525, mupen64plus-core/src/device/pif/pif.h:36",
            "system": "nintendo-64",
            "validation": [
              "md5"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Qt front end by Logan McNaughton over a vendored fork of mupen64plus-core,\nwith parallel-rsp and parallel-rdp as the only RSP and video plugins\n(wiki, simple64-FAQ.md). The monorepo holds the core, the GUI, the SDL2 audio\nplugin, the Qt and raphnetraw input plugins and both parallel components as\nsquashed subtrees (pull_repos.sh). The core is compiled with M64P_PARALLEL,\nM64P_NETPLAY and NO_ASM, and its source list leaves out src/osd and every\ndynarec (mupen64plus-core/CMakeLists.txt:26,28-104). ES-DE runs the release\nbinary as `--nogui <rom>`; the GUI registers only verbose, nogui and test\n(simple64-gui/main.cpp:14-24). Development stopped and the repository was\narchived in February 2025, five commits past v2024.12.1, touching only the\nREADME, the build script and a netplay dialog.\n\nBoot runs the real PIF ROM when one is present, which is where this fork\nparts company with mupen64plus upstream: upstream keeps open_pif behind the\nM64CMD_PIF_OPEN command with a caller supplied length and ships no such image\nin data/, while simple64 opens the file itself at a fixed length and ships\nboth images. get_pif_path names pif.pal.rom for SYSTEM_PAL and pif.ntsc.rom\nfor SYSTEM_NTSC and SYSTEM_MPAL, then resolves it against the shared data\npath (mupen64plus-core/src/main/main.c:1565-1580;\nmupen64plus-core/src/api/config.c:1610-1625;\nmupen64plus-core/src/osal/files_unix.c:150-170). The GUI passes the directory\nholding the executable as that path (simple64-gui/mainwindow.cpp:986-988,\nmupen64plus-core/src/api/frontend.c:59,90), and build.sh copies both images\nthere (build.sh:26), so a release install always carries them.\n\nAbsence is not fatal. The lookup returns NULL when the file is not found and\nthe result reaches fopen unchecked; on a failed open, open_pif is never\ncalled and g_start_address keeps its initialiser 0xa4000040\n(mupen64plus-core/src/main/main.c:112,1624-1633). A digest that matches none\nof the four accepted values returns M64ERR_INPUT_INVALID, which main_run\ndiscards, leaving the same address. pif_bootrom_hle_execute returns\nimmediately when the address is 0xbfc00000 and otherwise simulates IPL1 and\nIPL2 in full, quiescing the RSP, PI, VI and AI, deriving s3 to s7 from pif24,\ncopying IPL3 into DMEM and planting the stub CIC x105 needs\n(mupen64plus-core/src/device/pif/bootrom_hle.c:48-151). It runs on cold boot\nand on both reset paths (mupen64plus-core/src/main/main.c:1977;\nmupen64plus-core/src/device/r4300/interrupt.c:445,496). The CIC challenge\nreads no file either: process_cic_challenge answers with the CIC-NUS-6105\nalgorithm (mupen64plus-core/src/device/pif/pif.c:252-260,\nmupen64plus-core/src/device/pif/n64_cic_nus_6105.c).\n\n64DD is not reachable. The GUI's media loader supplies only the two Game Boy\ncartridge callbacks and leaves set_dd_rom_region, get_dd_rom and get_dd_disk\nnull, the two functions that would have answered being commented out\n(simple64-gui/interface/common.cpp:129-163,240;\nmupen64plus-core/src/api/m64p_types.h:186-221). load_dd_rom is only reached\nafter load_dd_disk succeeds, and load_dd_disk bails on a null callback, so\nthe IPL image the core can otherwise load and byteswap is never requested\n(mupen64plus-core/src/main/main.c:1175-1247,1722-1736). No IPL entry follows\nfrom that, and the system list carries no 64DD line.\n\nTransfer Pak carts come from Player1GBROM and Player1GBRAM through\nPlayer4GBROM and Player4GBRAM, filled by a file dialog\n(simple64-gui/mainwindow.cpp:84-117,\nsimple64-gui/interface/common.cpp:87-127). The pair is a Game Boy cartridge\nand its save, supplied by the player, and the code fixes no name, size or\nhash for either, so neither carries an entry here.\n\nThe Voice Recognition Unit is the one asset the user has to go and get. The\ncore's VRU controller forwards every word command to the input plugin\n(mupen64plus-core/src/device/controllers/vru_controller.c:147-235), and\nsetupVosk loads libvosk from beside the executable, then hands\nvosk-model-small-en-us-0.15 under the user data directory to vosk_model_new\nonce conf/mfcc.conf is found inside it (simple64-input-qt/main.cpp:769-813).\nChoosing \"Emulate VRU\" for controller 4 tests that same file and, when it is\nmissing, downloads\nhttps://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip and\nunpacks it there with 7za (simple64-input-qt/configdialog.cpp:22-62,93-115).\nbuild.sh fetches only the Vosk library, never the model (build.sh:89-101,\n158-160), so no release carries it.\n\nData the build places beside the executable: mupen64plus.ini, parsed as the\nROM database and keyed on MD5 then CRC pair, which supplies save type, player\ncount, rumble, Transfer Pak, Controller Pak, bio pak and expansion memory per\ntitle (mupen64plus-core/src/main/rom.c:190-235,674-691; build.sh:25); and\ncheats.json, pulled from simple64/cheat-parser at build time and read by\nheader CRC pair and country code (simple64-gui/cheats.cpp:230-239;\nbuild.sh:106-111). Neither is hashed or version checked, romdatabase_open\nlogs and returns when the file is absent, and loadCheatData yields an empty\nobject, so both degrade rather than fail.\n\nTwo data files in the tree this build never reads: data/font.ttf, whose only\nconsumer is src/osd/osd.c, absent from the source list, leaving\nosd_new_message as the inline no-op behind M64P_OSD\n(mupen64plus-core/src/osd/osd.h:93,104,118-121); and data/mupencheat.txt,\nreferenced nowhere under src/ since cheats come from the GUI's own JSON. The\nparallel-rdp shaders are compiled in through shaders/slangmosh.hpp rather\nthan loaded (parallel-rdp-standalone/parallel-rdp/rdp_renderer.cpp:36), and\nthe file reads in parallel-rsp/main.cpp belong to a test harness that sits\noutside that plugin's CMake target.\n\nWritten rather than obtained: mupen64plus.cfg in the config directory and\nsimple64-gui.ini beside the executable\n(simple64-gui/mainwindow.cpp:249), the Controller Pak, EEPROM, FlashRAM and\nSRAM saves opened with default content when absent\n(mupen64plus-core/src/main/main.c:1160-1173,1717-1720), the per ROM save\nmetadata (mupen64plus-core/src/main/rom.c:263,347), savestates and\nscreenshots (mupen64plus-core/src/main/screenshot.c:174), and the Discord\ngame SDK and Vosk shared libraries, which are resolved by name at runtime\nand are code rather than data (simple64-gui/mainwindow.cpp:356,\nsimple64-input-qt/main.cpp:773).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/simple64/simple64",
        "source_commit": "d8c969c7b932e3d76e6a25549d76348839dbaefd",
        "systems": [
          "nintendo-64"
        ],
        "type": "standalone",
        "upstream": "https://github.com/simple64/simple64"
      }
    },
    {
      "id": "sixtyforce",
      "profile": {
        "core_classification": "embedded_hle",
        "core_version": "2.0.2",
        "cores": [
          "sixtyforce"
        ],
        "display_name": "Nintendo - Nintendo 64 (sixtyforce)",
        "emulator": "sixtyforce",
        "files": [
          {
            "description": "64DD IPL ROM",
            "name": "64DD_IPL.bin",
            "note": "Opened through the file panel like a cartridge. The loader builds the four byte game code from the header, media format at 0x3b, then the two cartridge id bytes read 0x3d before 0x3c, then country at 0x3e, and keeps the image in the 64DD slot instead of the cartridge slot when that code reads NDDJ. That is the Japanese retail IPL; the USA image reads NDDE and the development image NDXJ, so neither can reach that slot. No code path opens the file by name, so the entry carries no alias and the name is a label. The image is mapped at 0x06000000 and read back by PI DMA bounded by its own length, and the 64DD register window at 0x05000000, 0x524 bytes for the ASIC buffers and registers, is installed only once the image is loaded. The same pointer and length decide the disk drive flag the booting game reads, so an absent image is a supported state. Nothing checks a hash, and nothing checks a size beyond the container format and the multiple of four.\n",
            "required": false,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x100026b18-0x100026b64 (game code test, 64DD slot), 0x10006e470-0x10006e4a7 (game code), 0x100081942-0x1000819b1 (memory map), 0x1000831b2-0x100083285 (PI DMA), 0x100071d62-0x100071d7d (drive flag)",
            "system": "nintendo-64dd"
          },
          {
            "bundled": true,
            "description": "Per-game hardware overrides",
            "name": "Overrides.plist",
            "note": "561 entries keyed by the four byte game code, read at cartridge load and carrying the CIC seed, the cartridge memory type, the framebuffer flags and the expanded memory and timing settings. The CIC a game boots with comes from this table, and the code falls back to a checksum of the ROM when the table has no entry for it.\n",
            "path": "Contents/Resources/Overrides.plist",
            "required": false,
            "size": 12855,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x100039336 (resource name), 0x1000392d0-0x1000393fa (lookup by game code, CIC key), 0x100026e67-0x100026e89 (called with the game code), 0x100071c78-0x100071c8f (CIC read at boot), 0x1000d21a0 (expanded memory log)",
            "system": "nintendo-64"
          },
          {
            "bundled": true,
            "description": "Controller device database",
            "name": "Controller-Devices.plist",
            "note": "The bundle carries one device list. SFControllerManager loads a bundle property list while it initialises and keeps it in its supportedDevices table, which the handlers read when a HID device arrives or leaves. The user's own mappings are a separate file the manager reads and writes from the application support folder.\n",
            "path": "Contents/Resources/Controller-Devices.plist",
            "required": false,
            "size": 73988,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x100013494-0x1000134e6 (bundle load into supportedDevices), 0x10001918e (read on device arrival), 0x100013870-0x100013a87 (user mappings, separate read)"
          },
          {
            "bundled": true,
            "description": "HID usage names",
            "name": "HID-Usage-Names.plist",
            "note": "Read from the bundle to name the HID usages and usage pages shown while mapping a controller element.\n",
            "path": "Contents/Resources/HID-Usage-Names.plist",
            "required": false,
            "size": 28249,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x10001cc6d-0x10001cc81 (resource name and load)"
          },
          {
            "bundled": true,
            "description": "Keyboard key names",
            "name": "Key-Names.plist",
            "note": "Localised key names for the keyboard controller configuration sheet, read from the bundle through the same loader as the other property lists.\n",
            "path": "Contents/Resources/Base.lproj/Key-Names.plist",
            "required": false,
            "size": 2440,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x100010c8d-0x100010ca1 (resource name and load)"
          },
          {
            "bundled": true,
            "description": "Display texture",
            "name": "Unit.data",
            "note": "Read from the bundle while the video controller sets up its OpenGL context and kept as the unitTexture the controller draws with.\n",
            "path": "Contents/Resources/Unit.data",
            "required": false,
            "size": 65536,
            "source_ref": "sixtyforce 2.0.2 MacOS/sixtyforce 0x10004245b-0x10004247b (resource name and load), 0x10004686d (called from video setup), 0x10004658a (unitTexture use)"
          }
        ],
        "mode": "standalone",
        "notes": "Nintendo 64 emulator for macOS by Gerrit Goossen, closed source since its first\nrelease in 2001. ES-DE runs it from\n/Applications/sixtyforce.app/Contents/MacOS/sixtyforce and passes the ROM path.\nEverything below is read from the distributed 2.0.2 build (CFBundleVersion 87,\nsingle x86_64 slice, macOS 10.9 or later); addresses are the virtual addresses\nof Contents/MacOS/sixtyforce. None of it appears on the site, in the help pages\nor in the release notes.\n\nThe boot chain reads nothing. There is no PIF ROM and no CIC image: the boot\nwrites the constants for the CIC itself, dispatching on a number in the 6101 to\n7106 range kept in the machine state (0x100071dbf-0x100071e2c). That number is\nwhat Overrides.plist gives for the game, and when the table has no entry the\ncode sums the ROM's own IPL3 region instead (0x100071c78-0x100071c8f,\n0x100071e31-0x100071e94). The country code byte of the cartridge header takes\nthe PAL branch for D, F, I, P, S, U, X and Y (0x100071d84-0x100071da3).\n\nEvery primitive the binary can open a file with (URLForResource:withExtension:,\ninitWithContentsOfURL:options:error:, initWithFileURL:,\nfileHandleForReadingFromURL:error:, the two directory enumerators, mmap)\nresolves to three sources: the ROM the user picks, the five bundle resources\nbelow, and the app's own saves.\n\nA ROM is read in any of three byte orders. The first word decides:\n0x80371240, 0x80371241 and the 64DD IPL word 0x80270740 are big endian and get\na 32 bit reversal, 0x37804012, 0x37804112 and 0x27804007 are word swapped and\nget a 16 bit reversal, 0x40123780, 0x41123780 and 0x40072780 are already in the\ninternal little endian word order and pass through. A gzip stream or a 60gz\ncontainer is decompressed first, and the length has to be a multiple of four\n(0x1000ad5c0-0x1000ad6ce, SFGZFile at 0x1000ae2d0). Anything else fails with\n\"Error Loading Cartridge Format\".\n\n64DD support stops at the IPL image. HardwareState carries a cartridge slot\n(pointer at +0x120, length at +0x128) and an IPL slot (+0x138, +0x140) and no\ndisk slot; the document types are n64, v64 and z64, and the only occurrences of\nthe letters ndd in the whole binary are the two NDDJ immediates in the loader.\nLoading the IPL while a cartridge is open leaves the cartridge in place.\n\nAutosaves, game freezes, controller paks and the controller configuration are\nwritten by the app, so none of them is an entry here.\n",
        "profiled_date": "2026-08-12",
        "source": "https://sixtyforce.com/",
        "systems": [
          "nintendo-64",
          "nintendo-64dd"
        ],
        "type": "standalone",
        "upstream": "https://sixtyforce.com/"
      }
    },
    {
      "id": "skyemu",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v5",
        "cores": [
          "skyemu"
        ],
        "display_name": "Nintendo - Game Boy/GBA/NDS (SkyEmu)",
        "emulator": "skyemu",
        "files": [
          {
            "aliases": [
              "gbc_bios.bin",
              "cgb0_boot.bin",
              "cgb_agb_boot.bin"
            ],
            "description": "GBC boot ROM",
            "hle_fallback": true,
            "name": "cgb_boot.bin",
            "path": "SkyEmu/cgb_boot.bin",
            "required": false,
            "source_ref": "src/gb.h:1593-1596, 1605-1608"
          },
          {
            "aliases": [
              "dmg0_rom.bin",
              "gb_bios.bin"
            ],
            "description": "DMG boot ROM",
            "hle_fallback": true,
            "name": "dmg_rom.bin",
            "path": "SkyEmu/dmg_rom.bin",
            "required": false,
            "source_ref": "src/gb.h:1601-1603"
          },
          {
            "description": "GBA BIOS",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "path": "SkyEmu/gba_bios.bin",
            "required": false,
            "source_ref": "src/gba.h:1726-1730"
          },
          {
            "description": "NDS ARM7 BIOS",
            "hle_fallback": true,
            "name": "nds7.bin",
            "path": "SkyEmu/nds7.bin",
            "required": false,
            "source_ref": "src/nds.h:3088-3089"
          },
          {
            "description": "NDS ARM9 BIOS",
            "hle_fallback": true,
            "name": "nds9.bin",
            "path": "SkyEmu/nds9.bin",
            "required": false,
            "source_ref": "src/nds.h:3091-3092"
          },
          {
            "description": "NDS firmware",
            "hle_fallback": true,
            "name": "firmware.bin",
            "path": "SkyEmu/firmware.bin",
            "required": false,
            "source_ref": "src/nds.h:3094, 3200-3268"
          }
        ],
        "notes": "Multi-system emulator by skylersaleh. Libretro core built from the upstream repo.\nAll BIOS optional; bundles Cult-of-GBA BIOS (GBA), DraStic free BIOS (NDS ARM7/ARM9),\nstub firmware (NDS), and HLE boot skip (GB/GBC). BIOS loading controlled by core options\n(default: on). Files loaded from system_dir/SkyEmu/ subdirectory.\nStandalone validates exact BIOS file size; libretro only rejects files exceeding buffer.\n.info missing gb_bios.bin (gb.h:1603).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/skylersaleh/SkyEmu/blob/v5/src/libretro.c",
        "source_commit": "01516d6798e3652b583e6a366085bb51c43b528d",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc",
          "nintendo-gba",
          "nintendo-ds"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/skylersaleh/SkyEmu"
      }
    },
    {
      "id": "skyline",
      "profile": {
        "core_classification": "other",
        "core_version": "0.0.3",
        "cores": [
          "skyline",
          "SKYLINE"
        ],
        "display_name": "Nintendo - Switch (Skyline)",
        "emulator": "Skyline",
        "files": [
          {
            "description": "Production keys for content decryption",
            "name": "prod.keys",
            "note": "Read as name=value pairs from keys/ under the application internal files directory. Supplies header_key, and the titlekek_XX, key_area_key_application_XX, key_area_key_ocean_XX and key_area_key_system_XX generation-indexed sets. An encrypted NCA without header_key fails with MissingHeaderKey, and one whose key area cannot be unwrapped fails with MissingKeyArea, so no retail title loads without this file. The importer accepts a pair only when the name contains an underscore and the value is hexadecimal.",
            "path": "keys/prod.keys",
            "required": true,
            "source_ref": "app/src/main/cpp/skyline/os.cpp:35 (root directory), app/src/main/cpp/skyline/crypto/key_store.cpp:12-13 (read), app/src/main/cpp/skyline/crypto/key_store.h:30-39 (key names), app/src/main/cpp/skyline/crypto/key_store.cpp:46-62 (parse), app/src/main/cpp/skyline/vfs/nca.cpp:21-22,126 (failures), app/src/main/java/emu/skyline/KeyReader.kt:83-88 (import check)",
            "system": "nintendo-switch"
          },
          {
            "description": "Per-title keys",
            "name": "title.keys",
            "note": "Read as rights id to title key pairs from the same directory. A title key normally arrives instead from the .tik tickets carried inside an NSP, which are parsed and pushed into the same store, so this file is only needed when no ticket supplies one; that case fails with MissingTitleKey. The importer requires both halves of a pair to be 32 hexadecimal characters.",
            "path": "keys/title.keys",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/crypto/key_store.cpp:10-11 (read), app/src/main/cpp/skyline/crypto/key_store.cpp:35-39 (parse), app/src/main/cpp/skyline/loader/nsp.cpp:14-21 (tickets), app/src/main/cpp/skyline/vfs/nca.cpp:108-110 (failure), app/src/main/java/emu/skyline/KeyReader.kt:77-82 (import check)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, standard",
            "has_builtin": true,
            "name": "FontStandard.ttf",
            "note": "Loaded from fonts/ under the application external files directory when present, otherwise from the asset of the same name, which carries Noto Sans CJK. Copied into the shared font block behind a header the emulator generates, so the expected content is the raw TTF payload.",
            "path": "fonts/FontStandard.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:26 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, simplified Chinese",
            "has_builtin": true,
            "name": "FontChineseSimplified.ttf",
            "note": "Same lookup as the standard font, with a Noto Sans CJK asset behind it.",
            "path": "fonts/FontChineseSimplified.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:27 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, extended simplified Chinese",
            "has_builtin": true,
            "name": "FontExtendedChineseSimplified.ttf",
            "note": "Same lookup as the standard font, with a Noto Sans CJK asset behind it.",
            "path": "fonts/FontExtendedChineseSimplified.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:28 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, traditional Chinese",
            "has_builtin": true,
            "name": "FontChineseTraditional.ttf",
            "note": "Same lookup as the standard font, with a Noto Sans CJK asset behind it.",
            "path": "fonts/FontChineseTraditional.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:29 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, Korean",
            "has_builtin": true,
            "name": "FontKorean.ttf",
            "note": "Same lookup as the standard font, with a Noto Sans CJK asset behind it.",
            "path": "fonts/FontKorean.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:30 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "description": "Shared font, extended button glyphs",
            "has_builtin": true,
            "name": "FontNintendoExtended.ttf",
            "note": "Same lookup as the standard font, with a Roboto asset behind it.",
            "path": "fonts/FontNintendoExtended.ttf",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/pl/shared_font_core.h:31 (entry), :40-47 (lookup and fallback), :51-55 (header and copy)",
            "system": "nintendo-switch"
          },
          {
            "bundled": true,
            "description": "NgWord system data archive",
            "name": "0100000000000806",
            "note": "Stub RomFS image served from the application assets when a game opens the data storage for this title id. Holds 0.txt through 15.txt, common.txt and version.dat.",
            "path": "romfs/0100000000000806",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp:84-90",
            "system": "nintendo-switch",
            "unsourceable": "stub image the emulator build carries inside its package, not a dump of the system data archive it stands in for"
          },
          {
            "bundled": true,
            "description": "NgWord2 system data archive",
            "name": "0100000000000823",
            "note": "Stub RomFS image served from the application assets when a game opens the data storage for this title id. Holds ac_<0-15>_b1_nx, ac_<0-15>_b2_nx and ac_<0-15>_not_b_nx.",
            "path": "romfs/0100000000000823",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/fssrv/IFileSystemProxy.cpp:84-90",
            "system": "nintendo-switch",
            "unsourceable": "stub image the emulator build carries inside its package, not a dump of the system data archive it stands in for"
          },
          {
            "bundled": true,
            "description": "Time zone location list",
            "name": "binaryList.txt",
            "note": "Read from the application assets at time service init and used as the list of known locations. It names the 594 zone binaries under tzdata/zoneinfo/, each of which is opened by location name when a zone rule is loaded. The set is generated from tzdb 2021a in Horizon format.",
            "path": "tzdata/binaryList.txt",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/timesrv/core.cpp:272 (list), :293 (zone binary by name), app/src/main/cpp/skyline/services/glue/ITimeZoneService.cpp:29,56 (zone binary by requested location)",
            "system": "nintendo-switch",
            "unsourceable": "generated by the emulator build from the public time zone database and carried inside its package"
          },
          {
            "bundled": true,
            "description": "Time zone data version",
            "name": "version.txt",
            "note": "Read from the application assets at time service init and reported as the time zone binary version.",
            "path": "tzdata/version.txt",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/timesrv/core.cpp:289",
            "system": "nintendo-switch",
            "unsourceable": "generated by the emulator build from the public time zone database and carried inside its package"
          },
          {
            "bundled": true,
            "description": "Default user profile image",
            "name": "profile_picture.jpeg",
            "note": "Opened from the application assets when a game asks the account service for the profile image of the emulated user.",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/services/account/IProfile.cpp:66",
            "system": "nintendo-switch",
            "unsourceable": "placeholder image carried inside the emulator package"
          },
          {
            "bundled": true,
            "description": "Blit vertex helper shader",
            "name": "blit.vert.spv",
            "note": "Opened from the application assets when the GPU helper shaders are built. Compiled at build time from app/src/main/shaders/blit.vert.",
            "path": "shaders/blit.vert.spv",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/gpu/shaders/helper_shaders.cpp:201, app/src/main/cpp/skyline/gpu.cpp:403 (asset filesystem)",
            "system": "nintendo-switch",
            "unsourceable": "build output of the emulator's own shader source, carried inside its package"
          },
          {
            "bundled": true,
            "description": "Blit fragment helper shader",
            "name": "blit.frag.spv",
            "note": "Opened from the application assets when the GPU helper shaders are built. Compiled at build time from app/src/main/shaders/blit.frag.",
            "path": "shaders/blit.frag.spv",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/gpu/shaders/helper_shaders.cpp:201, app/src/main/cpp/skyline/gpu.cpp:403 (asset filesystem)",
            "system": "nintendo-switch",
            "unsourceable": "build output of the emulator's own shader source, carried inside its package"
          },
          {
            "bundled": true,
            "description": "Clear vertex helper shader",
            "name": "clear.vert.spv",
            "note": "Opened from the application assets when the GPU helper shaders are built. Compiled at build time from app/src/main/shaders/clear.vert.",
            "path": "shaders/clear.vert.spv",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/gpu/shaders/helper_shaders.cpp:328, app/src/main/cpp/skyline/gpu.cpp:403 (asset filesystem)",
            "system": "nintendo-switch",
            "unsourceable": "build output of the emulator's own shader source, carried inside its package"
          },
          {
            "bundled": true,
            "description": "Clear fragment helper shader",
            "name": "clear.frag.spv",
            "note": "Opened from the application assets when the GPU helper shaders are built. Compiled at build time from app/src/main/shaders/clear.frag.",
            "path": "shaders/clear.frag.spv",
            "required": false,
            "source_ref": "app/src/main/cpp/skyline/gpu/shaders/helper_shaders.cpp:328, app/src/main/cpp/skyline/gpu.cpp:403 (asset filesystem)",
            "system": "nintendo-switch",
            "unsourceable": "build output of the emulator's own shader source, carried inside its package"
          }
        ],
        "mode": "standalone",
        "notes": "Nintendo Switch emulator for ARMv8 Android, written from scratch in C++ and Kotlin.\nAndroid package skyline.emu, versionCode 3, minSdk 29, with the debug variant taking a\n.dev suffix (build.gradle:23,28-29,120-121). ES-DE reaches it through its SKYLINE find\nrule and starts it with android.intent.action.VIEW on the content URI of the game.\nDevelopment ceased and the README at the pinned commit records it; the code is split\nacross skyline and skyline-dev, whose external file surface is identical (key_store.cpp\n:10-13 and shared_font_core.h:40-47 in both).\n\nNCA, NRO, NSO, NSP and XCI are loaded (loader/). Two key files are read, from keys/\nunder the application internal files directory, which os.cpp:35 hands to the key store\nas its root. Both arrive through the in-app importer, which accepts only the two names\nand rewrites the trimmed pairs into that directory (KeyReader.kt:25-26,56-60); nothing\nelse is consulted for keys, and there is no dev.keys or console.keys path.\n\nNo firmware is installed and none is read. The system version is answered from a\nhardcoded 9.0.0-4.0 structure (ISystemSettingsServer.cpp:9-10) and the system data\narchives a game asks for through OpenDataStorageByDataId are served as stub RomFS\nimages from the application assets (IFileSystemProxy.cpp:84-90). Two are carried:\n0100000000000806, the NgWord filter, holding 0.txt through 15.txt plus common.txt and\nversion.dat, and 0100000000000823, NgWord2, holding ac_<0-15>_b1_nx, ac_<0-15>_b2_nx\nand ac_<0-15>_not_b_nx. A data id without a matching asset opens nothing.\n\nThe six shared fonts are the one place where a firmware file replaces a built-in one.\nEach is looked for in fonts/ under the application external files directory, which\nresolves to /storage/emulated/0/Android/data/skyline.emu/files/ (SkylineApplication.kt\n:19,41), and only when it is absent does the asset of the same name serve instead\n(shared_font_core.h:40-47). The emulator writes the shared font header itself, a magic\nfollowed by the length XORed with a key derived at shared_font_core.h:36-38, and then\ncopies the whole file after it (shared_font_core.h:51-55), so the file it expects is\nthe raw TTF payload rather than the headered form the firmware stores. Sizes are taken\nfrom the file and never checked, and the six together have to fit the 0x140A000 shared\nmemory block.\n\nA custom Vulkan driver can be loaded through adrenotools from gpu_drivers/<label>/\nunder the internal files directory (gpu.cpp:342-357). The label and the library\nfilename are both read from a meta.json inside the archive the user installs\n(GpuDriverHelper.kt:19-22,150-191,219), so the code names no driver file of its own;\nloading falls back to the built-in driver and then to the system libvulkan.so. Save\ndata and the emulated SD card live under switch/ in the external files directory\n(IFileSystemProxy.cpp:21,67) and are written by the emulator.\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/skyline-emu/skyline",
        "source_commit": "dc20a615275f66bee20a4fd851ef0231daca4f14",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://github.com/skyline-emu/skyline"
      }
    },
    {
      "id": "smsplus",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "1.8",
        "cores": [
          "smsplus",
          "smsplus_gx"
        ],
        "display_name": "Sega - MS/GG (SMS Plus GX)",
        "emulator": "SMS Plus GX",
        "files": [
          {
            "aliases": [
              "BIOS.sms"
            ],
            "description": "Sega Master System boot ROM",
            "name": "bios.sms",
            "note": "Loaded into bios.rom (up to 1 MB allocated). Only active when core\noption smsplus_sms_bios is \"auto\". Displays SMS startup screen\nbefore game execution. Standalone ports use BIOS.sms (uppercase).\n",
            "required": false,
            "source_ref": "smsplus_libretro.c:211-229",
            "system": "sega-master-system"
          },
          {
            "description": "ColecoVision BIOS ROM",
            "name": "BIOS.col",
            "note": "Required for ColecoVision games. Read as 0x2000 (8192) bytes into\ncoleco.rom. Without this file, retro_load_game() returns false for\n.col files.\n",
            "required": true,
            "size": 8192,
            "source_ref": "smsplus_libretro.c:232-248",
            "system": "colecovision"
          },
          {
            "description": "Sord M5 BIOS ROM",
            "mode": "standalone",
            "name": "BIOS_sordm5.bin",
            "note": "Read as 0x2000 (8192) bytes into coleco.rom (shared buffer). Only\nin standalone builds (SORDM5_EMU define). Not compiled in libretro.\nCode does not enforce presence but system needs BIOS to function.\n",
            "required": false,
            "size": 8192,
            "source_ref": "source/ports/sdl/smsplus.c:321-329",
            "system": "sord-m5"
          }
        ],
        "notes": "Enhanced fork of Charles MacDonald's SMS Plus 1.3 by Eke-Eke (GX) and\ngameblabla. Master System, Game Gear, ColecoVision and SG-1000 emulator.\nStandalone ports also support Sord M5 (behind SORDM5_EMU compile flag,\nnot compiled in libretro build).\n\nBIOS loading in bios_init() (smsplus_libretro.c:203-252). bios.sms is\nalways attempted but only activated when core option smsplus_sms_bios is\n\"auto\" (default: disabled). BIOS.col is loaded only for ColecoVision\nROMs and required for them. Standalone ports use BIOS.sms (uppercase)\ninstead of bios.sms.\n\n.info marks BIOS.col as optional (firmware1_opt=true) but the libretro\ncode returns false from retro_load_game() when BIOS.col is missing for\n.col ROMs.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/smsplus-gx",
        "source_commit": "c642bbd0680b5959180a420036108893d0aec961",
        "systems": [
          "sega-master-system",
          "sega-game-gear",
          "colecovision",
          "sega-sg1000",
          "sord-m5"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/ekeeke/smsplus-gx"
      }
    },
    {
      "id": "snes9x",
      "profile": {
        "core_classification": "official_port",
        "core_version": "1.61",
        "cores": {
          "pocketsnes": {
            "firmware_loading": true,
            "hle_only": true,
            "note": "Loads BS-X.bin and STBIOS.bin via LoadBIOS() in libretro.cpp.\nBSX_LoadBIOS() in bsx.cpp tries BS-X.bios as fallback.\nAuto-detects Satellaview and Sufami Turbo carts on load.\nSubsystem support via retro_load_game_special() for\nRETRO_GAME_TYPE_BSX, RETRO_GAME_TYPE_SUFAMI_TURBO,\nRETRO_GAME_TYPE_MULTI_CART.\n",
            "source": "https://github.com/libretro/snes9x"
          },
          "snes9x": null,
          "snes9x_next": null
        },
        "display_name": "Nintendo - SNES / SFC (Snes9x)",
        "emulator": "snes9x",
        "files": [
          {
            "aliases": [
              "BS-X.bios"
            ],
            "description": "Satellaview BS-X BIOS",
            "name": "BS-X.bin",
            "note": "Needed for Satellaview (.bs) games.",
            "required": false,
            "size": 1048576,
            "source_ref": "libretro/libretro.cpp:1414, bsx.cpp:1209, bsx.cpp:1214",
            "system": "nintendo-satellaview",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Sufami Turbo BIOS",
            "name": "STBIOS.bin",
            "note": "Needed for Sufami Turbo multi-cart games.",
            "required": false,
            "size": 262144,
            "source_ref": "libretro/libretro.cpp:1461, libretro/libretro.cpp:1546, memmap.cpp:1720",
            "system": "nintendo-sufami-turbo",
            "validation": [
              "size"
            ]
          }
        ],
        "logo": "https://raw.githubusercontent.com/snes9xgit/snes9x/master/gtk/data/snes9x.svg",
        "notes": {
          "coprocessor_hle": "All coprocessors are HLE (DSP1-4, ST010, ST011, ST018, CX4).\nNo external firmware files needed. Lookup tables and math\nemulation hardcoded in dsp1-4.cpp, seta010-018.cpp, c4emu.cpp.\n"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/snes9x",
        "source_commit": "ed750a49d0583a8d8fed40c50239efd13a86dfd3",
        "systems": [
          "nintendo-snes",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "libretro",
        "upstream": "https://github.com/snes9xgit/snes9x"
      }
    },
    {
      "id": "snes9x-explus",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "snes9x-explus",
          "SNES9X-EXPLUS",
          "Snes9x EX+",
          "Snes9xEXPlus"
        ],
        "display_name": "Nintendo - SNES / SFC (Snes9x EX+)",
        "emulator": "Snes9x EX+",
        "files": [
          {
            "agnostic": true,
            "aliases": [
              "BS-X.bios"
            ],
            "category": "bios",
            "config_key": "CFGKEY_BSX_BIOS_PATH",
            "description": "Satellaview BS-X cartridge ROM",
            "min_size": 1048576,
            "name": "BS-X.bin",
            "note": "Read for every BS game, the branch taken when the header at 0x7FC0 or 0xFFC0 marks the image as one. The read takes 1048576 bytes and compares the count returned, so a shorter file is rejected and a longer one has its tail ignored, then the 21 bytes at 0x7FC0 must read \"Satellaview BS-X\" padded with spaces. The name is the user's: the app compiles none in and only the .bin and .bios endings limit what the picker offers.",
            "required": true,
            "source_ref": "Snes9x/src/snes9x/memmap.cpp:2065 (run on every load), Snes9x/src/snes9x/bsx.cpp:1240-1274 (BS branch calls the loader), Snes9x/src/snes9x/bsx.cpp:1199-1203 (loader is the app hook), Snes9x/src/main/S9XApi.cc:218-253 (path, archive, size and header checks), Snes9x/src/main/EmuMenuViews.cc:345-365 (picker), Snes9x/src/main/system.ccm:110 (setting), Snes9x/src/main/options.cc:46,79 (config key)",
            "system": "nintendo-satellaview",
            "validation": [
              "existence",
              "size"
            ]
          },
          {
            "agnostic": true,
            "category": "bios",
            "config_key": "CFGKEY_SUFAMI_BIOS_PATH",
            "description": "Sufami Turbo base cartridge ROM",
            "name": "STBIOS.bin",
            "note": "Read whenever the content is a Sufami Turbo cart, and copied to the front of the ROM area with the cart behind it. The whole file is buffered, so the length must be exactly 262144, with \"BANDAI SFC-ADX\" at 0 and \"SFC-ADX BACKUP\" at 0x10. The name is the user's, the picker accepting any .bin or .bios.",
            "required": true,
            "size": 262144,
            "source_ref": "Snes9x/src/main/Main.cc:250-260 (cart routes through the BIOS read), Snes9x/src/main/Main.cc:183-187,194-219 (path, archive, size and header checks), Snes9x/src/snes9x/memmap.cpp:1018-1025,1575-1608 (second check and placement), Snes9x/src/main/EmuMenuViews.cc:367-387 (picker), Snes9x/src/main/system.ccm:109 (setting), Snes9x/src/main/options.cc:45,78 (config key)",
            "system": "nintendo-sufami-turbo",
            "validation": [
              "existence",
              "size"
            ]
          },
          {
            "category": "game_data",
            "config_key": "CFGKEY_SATELLAVIEW_PATH",
            "description": "Satellaview data stream for channel 0120",
            "name": "BSX0120-0.bin",
            "note": "Opened by the name the emulated unit asks for, BSXHHHH-D.bin from the channel registers at 0x2188 and 0x218E, under the Satellaview Files path, which defaults to the content directory. The file is measured to size the queue and read 22 bytes at a time; a miss leaves the stream unloaded.",
            "required": false,
            "size": 34,
            "source_ref": "Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216, Snes9x/src/main/system.ccm:108, Snes9x/src/main/EmuMenuViews.cc:325-343",
            "system": "nintendo-satellaview",
            "validation": [
              "existence"
            ]
          },
          {
            "category": "game_data",
            "config_key": "CFGKEY_SATELLAVIEW_PATH",
            "description": "Satellaview data stream for channel 0121",
            "name": "BSX0121-0.bin",
            "required": false,
            "size": 34,
            "source_ref": "Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216",
            "system": "nintendo-satellaview",
            "validation": [
              "existence"
            ]
          },
          {
            "category": "game_data",
            "config_key": "CFGKEY_SATELLAVIEW_PATH",
            "description": "Satellaview data stream for channel 0122",
            "name": "BSX0122-0.bin",
            "required": false,
            "size": 1031,
            "source_ref": "Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216",
            "system": "nintendo-satellaview",
            "validation": [
              "existence"
            ]
          },
          {
            "category": "game_data",
            "config_key": "CFGKEY_SATELLAVIEW_PATH",
            "description": "Satellaview data stream for channel 0123",
            "name": "BSX0123-0.bin",
            "required": false,
            "size": 16,
            "source_ref": "Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216",
            "system": "nintendo-satellaview",
            "validation": [
              "existence"
            ]
          },
          {
            "category": "game_data",
            "config_key": "CFGKEY_SATELLAVIEW_PATH",
            "description": "Satellaview data stream for channel 0124",
            "name": "BSX0124-0.bin",
            "required": false,
            "size": 97,
            "source_ref": "Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216",
            "system": "nintendo-satellaview",
            "validation": [
              "existence"
            ]
          },
          {
            "aliases": [
              "BioWorm.7z"
            ],
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game, listed under Bundled Content",
            "name": "Bio Worm.7z",
            "note": "Opened from the application bundle by the name the build gives it, the Linux build dropping the space, and loaded as content.",
            "required": false,
            "sha1": "38e44c9868c0b8a5a99ec0b6e901a28f617d25bf",
            "size": 42479,
            "source_ref": "Snes9x/src/main/AppMeta.cc:20-21 (names), EmuFramework/src/gui/BundledGamesView.cc:41,47 (open and load)",
            "system": "nintendo-snes",
            "validation": [
              "existence"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Member of the EX Emulator series by Robert Broglia, published as\ncom.explusalpha.Snes9xPlus and built around the target s9xp\n(Snes9x/metadata/conf.mk:2-7, Snes9x/CMakeLists.txt:4,10). ES-DE reaches it\nthrough the SNES9X-EXPLUS find rule, which only the Android rule set carries,\nand offers it under satellaview, sfc, snes, snesna and sufami. Snes9x 1.63 is\nvendored under Snes9x/src/snes9x at upstream b33f2af, the revision the sync\ncommit 96b2f850 names, and 114 of the 152 vendored source files are\nbyte-identical to it. The app built from Snes9x/1.43 is a separate package,\ncom.explusalpha.Snes9x, and carries none of what follows.\n\nContent is any .smc, .sfc, .swc, .bs, .st, .fig or .mgd file, or an archive\nwhose first entry with one of those extensions is used, the app leaving\narchives to the framework (Snes9x/src/main/AppMeta.cc:30-33,\nEmuFramework/src/EmuSystem.cc:392-425, EmuFramework/src/AppMeta.cc:29). It\nis read whole into memory and goes to LoadROMMem, except a Sufami Turbo cart,\nrecognized by a length of 0x80000 to 0x100000 with \"BANDAI SFC-ADX\" at 0 and\nno \"SFC-ADX BACKUP\" at 0x10, which goes to LoadMultiCartMem with the base\ncartridge placed in front of it (Snes9x/src/main/Main.cc:177-181,221-273,\nSnes9x/src/snes9x/memmap.cpp:1575-1608). Dual Sufami Turbo carts are not\nloaded: slot B is always passed as null (Snes9x/src/main/Main.cc:250-260).\n\nTwo firmware images are read, and both differ from upstream in how they are\nfound. Upstream opens BS-X.bin then BS-X.bios in its BIOS directory\n(bsx.cpp:1204-1236) and STBIOS.bin for a Sufami Turbo load\n(memmap.cpp:1663-1686); the app deletes both blocks and reads a URI the user\npicks instead, so no filename is compiled in\n(Snes9x/src/snes9x/bsx.cpp:1199-1203,\nSnes9x/src/snes9x/memmap.cpp:1644-1670, Snes9x/src/main/S9XApi.cc:225-253,\nSnes9x/src/main/Main.cc:194-219). Each picker lists directories, names ending\n.bin or .bios caselessly, and .7z, .rar and .zip archives, whose first member\nwith one of those two extensions is taken (Snes9x/src/main/Main.cc:189-192,\nSnes9x/src/main/EmuMenuViews.cc:345-387,\nEmuFramework/include/emuframework/DataPathSelectView.hh:77-101,\nEmuFramework/src/gui/FilePicker.cc:39-48,\nimagine/src/fs/ArchiveFS.cc:75-78). An unset path or a failed check throws,\nand the loader thread turns that into a failed load with the message on\nscreen (EmuFramework/src/EmuApp.cc:794-819). Neither image is hashed.\n\nA BS-X cartridge image loaded as content takes the other branch of\nS9xInitBSX, which copies it into the BIOS area itself and asks for nothing\n(Snes9x/src/snes9x/bsx.cpp:1213-1233). Broadcast data is read per requested\nchannel as BSXHHHH-D.bin under the Satellaview Files path, which defaults to\nthe content directory; a miss only leaves the stream unloaded\n(Snes9x/src/snes9x/bsx.cpp:736-790, Snes9x/src/main/S9XApi.cc:203-216,\nSnes9x/src/main/system.ccm:108).\n\nEvery coprocessor is emulated in code with no external firmware: DSP-1 to\nDSP-4, ST010, ST011, ST018, Cx4, S-DD1 and SPC7110, each implemented under\nSnes9x/src/snes9x in dsp1.cpp through dsp4.cpp, seta010.cpp, seta011.cpp,\nseta018.cpp, c4emu.cpp, sdd1emu.cpp and spc7110emu.cpp. The 1.43 branch's\nS-DD1 data call and SPC7110 pack directory are compiled out here\n(Snes9x/src/main/S9XApi.cc:64,89-131).\n\nPer content the app writes and reads back a .srm, an .rtc for the S-RTC,\n.frz states and a .cht cheat list under the cheats path; settings live in\nSnes9xP.config (Snes9x/src/main/Main.cc:78-90,153-172,\nSnes9x/src/snes9x/memmap.cpp:1791-1812, Snes9x/src/main/Cheats.cc:33-45,\nSnes9x/src/main/AppMeta.cc:19). A BS game with no save of its own falls back\nto BS-X.srm (Snes9x/src/snes9x/memmap.cpp:1874-1890). A .bps, .ups or .ips\nnamed after the content in the patches path is applied as the image loads,\nthe app having dropped the search beside the content\n(Snes9x/src/snes9x/memmap.cpp:1327,3888-4027). MSU-1 data and tracks are read\nbeside the content as .msu, or the content name with msu1.rom appended, and\n-N.pcm per track (Snes9x/src/snes9x/msu1.cpp:60-70,116-118,157-160). UNZIP_SUPPORT is not defined, so the .msu1 pack and the\npatch-inside-a-zip paths are not compiled (Snes9x/CMakeLists.txt:18).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/Rakashazi/emu-ex-plus-alpha",
        "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943",
        "systems": [
          "nintendo-snes",
          "nintendo-satellaview",
          "nintendo-sufami-turbo"
        ],
        "type": "standalone",
        "upstream": "https://github.com/snes9xgit/snes9x",
        "upstream_commit": "b33f2afb33c61d675aaf0319bd3b8cc8d6924d49"
      }
    },
    {
      "id": "snes9x2002",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "7.2.0",
        "cores": [
          "snes9x2002"
        ],
        "display_name": "Nintendo - SNES / SFC (Snes9x 2002)",
        "emulator": "Snes9x 2002",
        "exclusion_note": "SPC700 IPL ROM embedded in binary (globals.c:283); no system_directory access",
        "files": [],
        "notes": "Frozen snapshot of Snes9x 1.39 via PocketSNES, optimized for ARM.\nSPC700 IPL ROM (64 bytes) embedded in globals.c:283 as APUROM[64].\nAll ROM I/O via memstream (snes9x.h:54-57). The core never calls\nGET_SYSTEM_DIRECTORY and performs no file I/O from the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/snes9x2002",
        "source_commit": "a0709ec7dcd6de2fbebb43106bd757b649e3b7cf",
        "systems": [
          "snes",
          "sufami-turbo",
          "satellaview"
        ],
        "type": "libretro",
        "upstream": "https://github.com/snes9xgit/snes9x"
      }
    },
    {
      "id": "snes9x2005",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v1.36",
        "cores": [
          "snes9x2005"
        ],
        "display_name": "Nintendo - SNES / SFC (Snes9x 2005)",
        "emulator": "Snes9x 2005",
        "exclusion_note": "all coprocessor ROMs embedded in binary; no system_directory access",
        "files": [],
        "notes": "Frozen snapshot of Snes9x 1.43 via CATSFC (NDS/PSP port by ShadauxCat/Nebuleon).\nSPC700 IPL ROM (64 bytes) embedded in globals.c:191 as APUROM[64].\nDSP-1 ROM data (1024 x uint16) embedded in dsp1emu.c:8 as DSP1ROM[1024].\nAll coprocessors (DSP-1/2/4, CX4, ST010/011/018, SuperFX, SPC7110, SA-1, OBC-1)\nare pure HLE. The core never calls GET_SYSTEM_DIRECTORY and performs no file I/O\nfrom the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/snes9x2005",
        "source_commit": "74d871db9b4dba6dbe6c5ecebc88cbf255be5349",
        "systems": [
          "snes",
          "sufami-turbo",
          "satellaview"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ShadauxCat/CATSFC"
      }
    },
    {
      "id": "snes9x2005_plus",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v1.36",
        "cores": [
          "snes9x2005_plus"
        ],
        "display_name": "Nintendo - SNES / SFC (Snes9x 2005 Plus)",
        "emulator": "Snes9x 2005 Plus",
        "exclusion_note": "all coprocessor ROMs embedded in binary; no system_directory access",
        "files": [],
        "notes": "Same codebase as Snes9x 2005 built with USE_BLARGG_APU=1 for more accurate audio.\nFrozen snapshot of Snes9x 1.43 via CATSFC (NDS/PSP port by ShadauxCat/Nebuleon).\nSPC700 IPL ROM (64 bytes) embedded in apu_blargg.c:3272 as APUROM[64].\nDSP-1 ROM data (1024 x uint16) embedded in dsp1emu.c:8 as DSP1ROM[1024].\nAll coprocessors (DSP-1/2/4, CX4, ST010/011/018, SuperFX, SPC7110, SA-1, OBC-1)\nare pure HLE. The core never calls GET_SYSTEM_DIRECTORY and performs no file I/O\nfrom the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/snes9x2005",
        "source_commit": "74d871db9b4dba6dbe6c5ecebc88cbf255be5349",
        "systems": [
          "snes",
          "sufami-turbo",
          "satellaview"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ShadauxCat/CATSFC"
      }
    },
    {
      "id": "snes9x2010",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "v1.52.4",
        "cores": [
          "snes9x2010"
        ],
        "display_name": "Nintendo - SNES / SFC (Snes9x 2010)",
        "emulator": "Snes9x 2010",
        "files": [
          {
            "aliases": [
              "BS-X.bios"
            ],
            "description": "Satellaview BS-X BIOS",
            "name": "BS-X.bin",
            "note": "Loaded when a BS game is auto-detected (is_bsx checks ROM header at\n0x7FC0/0xFFC0). Without this file, BSX.bootup is set to FALSE and\nBIOSROM is zeroed. BS games still load but lack the boot menu.\n",
            "required": false,
            "size": 1048576,
            "source_ref": "src/bsx.c:1263-1295 (BSX_LoadBIOS), src/bsx.c:1317 (caller in S9xInitBSX)",
            "system": "satellaview",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Frozen snapshot of Snes9x 1.52.4, rewritten in C with optimizations\nfor PS3 (originally called SNES9x Next).\nSPC700 IPL ROM (64 bytes) embedded in src/apu.c:3643 as APUROM[64].\nDSP-1 ROM data (1024 x uint16) embedded in src/dsp.c:219 as DSP1ROM[1024].\nAll coprocessors (DSP-1/2/3/4, CX4, ST010/011/018, SuperFX, SPC7110,\nSA-1, S-DD1, S-RTC, OBC-1) are pure HLE.\nSufami Turbo support disabled: LoadSufamiTurbo in src/memmap.c is behind\n#if SNES_SUPPORT_MULTI_CART which defaults to 0 and is never enabled in\nany Makefile. retro_load_game_special returns false.\nUpstream snes9x 1.52 supports Sufami Turbo (loads STBIOS.bin).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/snes9x2010",
        "source_commit": "214cb51f22ddec66952c304fe1e5e01fd83a9ac6",
        "systems": [
          "snes",
          "sufami-turbo",
          "satellaview"
        ],
        "type": "libretro",
        "upstream": "https://github.com/snes9xgit/snes9x"
      }
    },
    {
      "id": "solarus",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2.2.0",
        "cores": [
          "solarus"
        ],
        "display_name": "Solarus Game Engine",
        "emulator": "solarus",
        "files": [
          {
            "category": "game_data",
            "description": "SDL gamepad mappings applied on top of the built-in table",
            "name": "gamecontrollerdb.txt",
            "note": "Looked up next to the executable first, then under SOLARUS_DATADIR_PATH, share/solarus by default (cmake/AddInstallDirs.cmake:14). Installed from assets/gamecontrollerdb.txt when SOLARUS_GAMECONTROLLERDB_INSTALL is on, which is the default (cmake/AddOptions.cmake:51), and carried in the release archives (.gitlab-ci.yml:306). Both probes are guarded by an existence test, and neither hitting leaves SDL on its built-in mappings.",
            "required": false,
            "source_ref": "src/core/System.cpp:71-99, cmake/AddDefines.cmake:44-49, cmake/AddInstallTargets.cmake:23-28",
            "system": "solarus"
          }
        ],
        "mode": "standalone",
        "notes": "2D action-RPG engine running quests scripted in Lua, built as libsolarus with\nthe solarus-run command-line player and the Qt Solarus Launcher on top. ES-DE\nruns `solarus-run <rom>` on a single .solarus file, Batocera as `solarus-run\n-fullscreen=yes -cursor-visible=no -lua-console=no -quit-combo=<hotkey>+<start>\n-joypad-num<n>=<index> <rom>` off a bbecaf31 pin, RetroDECK ships the v2.0.3\nsolarus-launcher AppImage.\n\nThe quest arrives as the content argument. get_quest_path takes the last\nnon-option argv and otherwise falls back to SOLARUS_DEFAULT_QUEST, which\ndefaults to \".\" (MainLoop.cpp:108-121, cmake/AddOptions.cmake:8,\ninclude/solarus/core/Common.h:119-123). open_quest mounts that path through\nPhysFS directly, then tries <path>/data, <path>/data.solarus and\n<path>/data.solarus.zip, each both\nrelative and under PHYSFS_getBaseDir (QuestFiles.cpp:151-165), and the quest\ncounts as found once quest.dat resolves (QuestFiles.cpp:228-233). The rest\ncomes out of that mount: quest.dat and project_db.dat\n(CurrentQuest.cpp:44,49), fonts under fonts/ as .png, .ttf, .otf, .ttc or .fon\n(FontResource.cpp:65-101), shaders under shaders/ (Shader.cpp:113), tilesets,\nsprites and music (Tileset.cpp:156-174, SpriteAnimationSet.cpp:48,\nMusicSystem.cpp:136-142).\n\nStartup reads one file from outside the quest. System::initialize probes\nSDL_GetBasePath() then SOLARUS_DATADIR_PATH for gamecontrollerdb.txt and hands\nwhichever it finds to SDL through SDL_HINT_GAMECONTROLLERCONFIG_FILE\n(System.cpp:71-99). The GLSL fallbacks are raw string literals in\nDefaultShaders.h:57,114, and glad, hqx and snes_spc compile in from\nthird_party/.\n\nFiles the engine writes rather than expects: settings.dat and savegames under\nthe quest write directory named in quest.dat (Settings.cpp:149-166,240-280,\nSavegame.cpp:114), the write root from SDL_GetPrefPath (QuestFiles.cpp:540),\nand error.txt under SOLARUS_FILE_LOGGING (Logger.cpp:29-45). Batocera's\n002-pad.patch adds a read of /userdata/system/configs/solarus/pads.ini, which\nits own generator rewrites at every launch. The editor and launcher subtrees\nbuild separately from the root CMakeLists, which adds only cli/, tests/ and\nthird_party/, and their assets are Qt resources compiled into those binaries\n(editor/cmake/AddQtFiles.cmake:46-50, launcher/cmake/addTarget.cmake:30).\n",
        "profiled_date": "2026-08-08",
        "source": "https://gitlab.com/solarus-games/solarus",
        "source_commit": "c817554d21e4fcbf726e74b0e402f34d95286a9e",
        "systems": [
          "solarus"
        ],
        "type": "standalone",
        "upstream": "https://gitlab.com/solarus-games/solarus"
      }
    },
    {
      "id": "speccy",
      "profile": {
        "author": "Marat Fayzullin (Garage Research)",
        "core_classification": "other",
        "core_version": "5.9.11",
        "cores": [
          "speccy",
          "SPECCY",
          "com.fms.speccy.deluxe",
          "com.fms.speccy"
        ],
        "display_name": "Sinclair - ZX Spectrum and Sam Coupe (Speccy)",
        "emulator": "Speccy",
        "exclusion_note": "Left out are the files Speccy writes and reads back itself, which are emulator state rather than anything a user obtains: <game>.sta holding saved emulation state, which LoadFile restores ahead of everything else it derives from the program path, LOG.MID holding the MIDI soundtrack the recorder writes, <HomeDir>/PrinterOutput.txt holding what the ZX and Timex printers print, and the replay files of the instant replay recorder. Snapshots, tapes, disk images and screens are the user's own content: .z80, .sna, .szx, .scs, .tap, .tzx, .trd, .scl, .fdi, .dsk, .mgt, .sad and .scr all reach LoadFile, and the emulator writes most of them back. DEFAULT.Z80 is only the name the desktop builds fall back to when they are started with no file at all. names.dat is left out because the path is dead in this build: FileInfo opens assets/names.dat and <HomeDir>/names.dat inside one try block, and no split of the package carries that asset, so the failed asset read takes the home directory copy down with it. changelog.html is left out as the release history shown from the menu, read from the package assets and from nowhere else. The Android audio and graphics libraries the loader opens by name are provided by the system. ref: libmain.so LoadFile 0x65380-0x655d1 (0x65482-0x654d4), STAName 0x97ad0,\n     SndName 0x93970, StartZXS 0x64180-0x6418a, Application 0x603e0-0x6042d,\n     LoadRPL 0x80040, SaveRPL 0x7fc80, SaveSCR 0x69e70,\n     FileInfo.java:244-257, EMULib.java:1038, 1067,\n     Speccy59-Ubuntu-x86-bin speccy 0xbf50,\n     Speccy.html \"[filename] = Name of the file to load [DEFAULT.Z80]\"\n",
        "files": [
          {
            "bundled": true,
            "crc32": "ddee531f",
            "description": "ZX Spectrum 48kB BASIC ROM",
            "md5": "4c42a2f075212361c3117015b107ff68",
            "name": "ZXS48.ROM",
            "note": "Read as 16384 bytes for the 48kB model, which is the model the emulator starts in when nothing else is asked for. Present in the packaged filesystem and in the Windows and Ubuntu distributions.",
            "required": true,
            "sha1": "5ea7c2b824672e914525d1d5c419d71b84a426a2",
            "size": 16384,
            "source_ref": "libmain.so LoadBIOS 0x645a8-0x645bb, Speccy59-Ubuntu-x86-bin speccy 0x3dcbe-0x3dcd1",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "ZX Spectrum 16kB BASIC ROM",
            "max_size": 16384,
            "name": "ZXS16.ROM",
            "note": "Read for the 16kB model under a name of its own, with no fallback to ZXS48.ROM, so the model refuses to start without it however many other ROMs are present. Neither the package nor the desktop distributions carry a copy.",
            "required": true,
            "source_ref": "libmain.so LoadBIOS 0x64590-0x645a3, Speccy59-Ubuntu-x86-bin speccy 0x3dca8-0x3dcbb",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "2cbe8995",
            "description": "ZX Spectrum 128kB ROM pair",
            "md5": "85fede415f4294cc777517d7eada482e",
            "name": "ZXS128.ROM",
            "note": "Read as 32768 bytes, two pages. Loaded after ZXS128TR.ROM has been tried when the TR-DOS interface is on as well.",
            "required": true,
            "sha1": "16375d42ea109b47edded7a16028de7fdb3013a1",
            "size": 32768,
            "source_ref": "libmain.so LoadBIOS 0x64575-0x6458b, Speccy59-Ubuntu-x86-bin speccy 0x3dc85-0x3dca1",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "ce98811c",
            "description": "ZX Spectrum 128kB ROM pair carrying TR-DOS",
            "md5": "44082607f78a3b643f260b0c7e443bbb",
            "name": "ZXS128TR.ROM",
            "note": "Tried in place of ZXS128.ROM when the 128kB model and the TR-DOS interface are both asked for, and ZXS128.ROM is loaded in its place when it fails.",
            "required": false,
            "sha1": "9b8bc3190086774fe6887e975c81e9976e2711ef",
            "size": 32768,
            "source_ref": "libmain.so LoadBIOS 0x645d9-0x645f5, Speccy59-Ubuntu-x86-bin speccy 0x3ddf0-0x3de10",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "e7a517dc",
            "description": "ZX Spectrum +2 ROM pair",
            "md5": "238f77692156a5c49d20c0aa2862e8bb",
            "name": "ZXSPLUS2.ROM",
            "note": "Read as 32768 bytes for the +2. The +2A bit is cleared ahead of the call whenever the +3 bit is set, so the pair that asks for ZXSPLUS3.ROM cannot leave a second machine standing.",
            "required": true,
            "sha1": "8cafb292af58617907b9e6b9093d3588a75849b8",
            "size": 32768,
            "source_ref": "libmain.so LoadBIOS 0x64544-0x6455f, Speccy59-Ubuntu-x86-bin speccy 0x3dc56-0x3dc72",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "be0d9ec4",
            "description": "ZX Spectrum +2A and +3 ROM set",
            "md5": "7e00ed3562abfd188d0d4da03e80bc0a",
            "name": "ZXSPLUS3.ROM",
            "note": "Read as 65536 bytes, four pages covering both the +2A and the +3, which the loader asks for under one bit pair.",
            "required": true,
            "sha1": "500c0945760abeefcbd08bc22c0d07b14b336cf0",
            "size": 65536,
            "source_ref": "libmain.so LoadBIOS 0x6452c-0x6453f, Speccy59-Ubuntu-x86-bin speccy 0x3dc3e-0x3dc51",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "f1b5fa67",
            "description": "Timex Computer 2048 ROM",
            "md5": "9dd7ecf784a6c04265c073c236f5fadb",
            "name": "TC2048.ROM",
            "note": "Read as 16384 bytes for the TC2048. Carried in the packaged filesystem only: the Windows and Ubuntu distributions ship no copy.",
            "required": true,
            "sha1": "febb2d495b6eda7cdcb4074935d6e9d9f328972d",
            "size": 16384,
            "source_ref": "libmain.so LoadBIOS 0x644e4-0x644f7, Speccy59-Ubuntu-x86-bin speccy 0x3dbf6-0x3dc09",
            "system": "timex-tc2048"
          },
          {
            "bundled": true,
            "crc32": "48004230",
            "description": "Timex Sinclair 2068 ROM set",
            "md5": "9194283503a105f3f3dfba13e61e993f",
            "name": "TS2068.ROM",
            "note": "The loader asks for 49152 bytes while the author's own image is 24576, so the read stops short of what was asked and the machine starts anyway. Carried in the packaged filesystem only.",
            "required": true,
            "sha1": "34cd8113bf75b65a4da6eea355f9d46ad635f7e4",
            "size": 24576,
            "source_ref": "libmain.so LoadBIOS 0x644cc-0x644df, Speccy59-Ubuntu-x86-bin speccy 0x3dbdd-0x3dbf1",
            "system": "timex-ts2068"
          },
          {
            "bundled": true,
            "crc32": "45c29401",
            "description": "Didaktik Gama ROM",
            "md5": "28287c397defff765b39bd0660da6d01",
            "name": "DIDAKTIK.ROM",
            "note": "Read as 16384 bytes for the Slovak Didaktik Gama clone.",
            "required": true,
            "sha1": "8466a9da0169666210ccff5d43376d70bae0ae9b",
            "size": 16384,
            "source_ref": "libmain.so LoadBIOS 0x644fc-0x6450f, Speccy59-Ubuntu-x86-bin speccy 0x3dc0e-0x3dc21",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "e7bbb552",
            "description": "Pentagon 128kB ROM set",
            "md5": "36e48cd8984702fa9628121f83264ed0",
            "name": "PENTAGON.ROM",
            "note": "Read as 49152 bytes, three pages. The third is copied into the disk interface window once it has loaded, so the Pentagon carries its own TR-DOS and does not need TRDOS.ROM.",
            "required": true,
            "sha1": "582254842091d9f6263652f06c6a86bd54dcf736",
            "size": 49152,
            "source_ref": "libmain.so LoadBIOS 0x64488-0x644c7, Speccy59-Ubuntu-x86-bin speccy 0x3dbb8-0x3dbd7, 0x3de18-0x3de37",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "fef73c28",
            "description": "Scorpion 256kB ROM set",
            "md5": "b26cba495108d1227aa5124cd9a1456d",
            "name": "SCORPION.ROM",
            "note": "Read as 65536 bytes, four pages, the last copied into the disk interface window. The Scorpion bit also drops every peripheral bit before the first ROM is opened, so its own service ROM stands in place of the separate interfaces.",
            "required": true,
            "sha1": "66cecdadf992d8adb9c66deee929eb56600dc9bc",
            "size": 65536,
            "source_ref": "libmain.so LoadBIOS 0x64444-0x64483, 0x643d5-0x643e3, Speccy59-Ubuntu-x86-bin speccy 0x3db94-0x3dbb2, 0x3de40-0x3de5f",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "39ff160a",
            "description": "Sam Coupe ROM",
            "md5": "9f40c46cce4008e0548db44f39527914",
            "name": "COUPE.ROM",
            "note": "Read as 32768 bytes for the Sam Coupe, which is a machine of its own in the same flag word, so selecting it clears every Spectrum bit and the trapdoor devices are switched off with it.",
            "required": true,
            "sha1": "58186fd34a8b9c1929913e2b1d7dc4efa507c160",
            "size": 32768,
            "source_ref": "libmain.so LoadBIOS 0x64514-0x64527, TryLoadROM 0x65a7d-0x65a94, Speccy59-Ubuntu-x86-bin speccy 0x3dc26-0x3dc39, Speccy.html \"Now disabling all trapdoor-based devices in Sam Coupe mode\"",
            "system": "sam-coupe"
          },
          {
            "bundled": true,
            "crc32": "d8882a8c",
            "description": "Beta Disk TR-DOS interface ROM",
            "md5": "53e2f417c6996df9af170e147df8e369",
            "name": "TRDOS.ROM",
            "note": "Opened first of all, before any machine ROM, and read as 16384 bytes. A failed open drops the interface and leaves the emulation running without it. Its presence is also what makes the 128kB model reach for ZXS128TR.ROM.",
            "required": false,
            "sha1": "282eb7bc819aad2a12fd954e76f7838a4e1a7929",
            "size": 16384,
            "source_ref": "libmain.so LoadBIOS 0x643e6-0x643f7, Speccy59-Ubuntu-x86-bin speccy 0x3db20-0x3db47",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "crc32": "bb66dd1e",
            "description": "Sinclair Interface I ROM",
            "md5": "31b704ae925305e74f50699271fddd9a",
            "name": "IF1.ROM",
            "note": "Read as 8192 bytes when the Interface I is on, and dropped silently when it is missing. Snapshots that page it in need it to restore.",
            "required": false,
            "sha1": "5cfb6bca4177c45fefd571734576b55e3a127c08",
            "size": 8192,
            "source_ref": "libmain.so LoadBIOS 0x643fc-0x6440f, Speccy59-Ubuntu-x86-bin speccy 0x3db4c-0x3db5f, Speccy.html \"Fixed some .Z80 snapshots not loading when IF1.ROM is missing\"",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "DISCiPLE disk interface ROM",
            "max_size": 16384,
            "name": "DISCIPLE.ROM",
            "note": "Read when the DISCiPLE interface is on, up to 16384 bytes, and dropped silently when it is missing. Neither the package nor the desktop distributions carry a copy.",
            "required": false,
            "source_ref": "libmain.so LoadBIOS 0x64414-0x64427, Speccy59-Ubuntu-x86-bin speccy 0x3db64-0x3db77",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "MGT +D disk interface ROM",
            "max_size": 8192,
            "name": "PLUSD.ROM",
            "note": "Read when the +D interface is on, up to 8192 bytes, and dropped silently when it is missing. Neither the package nor the desktop distributions carry a copy.",
            "required": false,
            "source_ref": "libmain.so LoadBIOS 0x6442c-0x6443f, Speccy59-Ubuntu-x86-bin speccy 0x3db7c-0x3db8f",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "Multiface One ROM",
            "max_size": 16384,
            "name": "MF1.ROM",
            "note": "Read up to 16384 bytes when the Multiface is on behind a 16kB or 48kB machine, and the 8192 bytes at offset 8192 of what it read are copied into the page below the machine ROM. Dropped silently when it is missing.",
            "required": false,
            "source_ref": "libmain.so LoadBIOS 0x64605-0x64651, Speccy59-Ubuntu-x86-bin speccy 0x3dea8-0x3deb7, 0x3dcf9-0x3dd0b",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "Multiface 128 ROM",
            "max_size": 16384,
            "name": "MF128.ROM",
            "note": "Read up to 16384 bytes when the Multiface is on behind a 128kB or +2 machine, and the 8192 bytes at offset 8192 of what it read are copied into the page below the machine ROM. Dropped silently when it is missing.",
            "required": false,
            "source_ref": "libmain.so LoadBIOS 0x645f7-0x64651, Speccy59-Ubuntu-x86-bin speccy 0x3dcea-0x3dd0b",
            "system": "sinclair-zx-spectrum"
          },
          {
            "description": "Multiface +3 ROM",
            "max_size": 16384,
            "name": "MFPLUS3.ROM",
            "note": "Read up to 16384 bytes when the Multiface is on behind a +2A or +3 machine, and the 8192 bytes at offset 8192 of what it read are copied into the page below the machine ROM. Dropped silently when it is missing. Neither the package nor the desktop distributions carry a copy.",
            "required": false,
            "source_ref": "libmain.so LoadBIOS 0x645cb-0x64651, Speccy59-Ubuntu-x86-bin speccy 0x3dee0-0x3dee7, 0x3dcf9-0x3dd0b",
            "system": "sinclair-zx-spectrum"
          },
          {
            "category": "game_data",
            "description": "startup colour palette",
            "name": "Speccy.pal",
            "note": "Built as <HomeDir>/Speccy.pal on Android and taken as the bare name beside the binary on the desktop, loaded once the machine has started and left alone when it is absent. The parser reads the file line by line, skipping blanks and comments, so a palette is text rather than a dump, and -palette points the desktop builds at another name or at one of four built-in palettes.",
            "required": false,
            "source_ref": "libmain.so Application 0x60436-0x60484, StartZXS 0x641c5-0x641d4, LoadPAL 0x648d0-0x64c5a, Speccy59-Ubuntu-x86-bin speccy 0x3f4ac-0x3f4bd, 0x3e450-0x3e560",
            "unsourceable": "any palette the user writes, in the text format the parser reads"
          },
          {
            "category": "game_data",
            "crc32": "b58e81f1",
            "description": "cheat database read by the Cheatopedia browser",
            "md5": "b41d9ebf814806a25438a6d937804e54",
            "name": "ROOT.chts",
            "note": "The package ships no cheat set. Cheatopedia looks for the file in the package assets, then in the home directory and its subdirectories, and takes it from Speccy-Cheats.zip in the Downloads directory when that is newer, unpacking it into <HomeDir>/Cheats. The author publishes that archive at fms.komkon.org/EmuAndroid/Speccy-Cheats.zip and states it is what re-enables the cheat features Google Play made him disable in March 2019; the copy read here holds this one file.",
            "required": false,
            "sha1": "0b53d51635a2ce3d4e12c2077df9aeffeac02517",
            "size": 1652893,
            "source_ref": "CheatHelper.java:17-67, Cheatopedia.java:397-427, EmuAndroid \"Cheats support\""
          },
          {
            "category": "game_data",
            "crc32": "dc9da322",
            "description": "virtual joystick skin",
            "md5": "d10635cb6f101ed733f3d1133bc78f61",
            "name": "Controls.png",
            "note": "Read as <HomeDir>/Controls.png by the overlay button loader and by the layout editor. The author publishes the template to draw over at fms.komkon.org/EmuAndroid/Controls.png.",
            "required": false,
            "sha1": "14c4ab8ccc8ecb81ebf99fec336a3e872c13aabc",
            "size": 22587,
            "source_ref": "MainActivity.java:1100, LayoutEditor.java:415"
          },
          {
            "category": "game_data",
            "description": "backdrop drawn around the emulated screen",
            "name": "Backdrop.png",
            "note": "Read as <HomeDir>/Backdrop.png. A built-in drawable stands in when the file is absent.",
            "required": false,
            "source_ref": "MainActivity.java:1287-1292",
            "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 program's path and preferred over the shared backdrop for that game.",
            "required": false,
            "source_ref": "MainActivity.java:1287-1292",
            "unsourceable": "any picture the user places behind one title"
          },
          {
            "category": "game_data",
            "description": "POKE list for one title",
            "name": "<game>.pok",
            "note": "Named from the loaded program's path and read by LoadPOK when present.",
            "required": false,
            "source_ref": "libmain.so LoadFile 0x65569-0x6558b, LoadPOK 0x692c0",
            "unsourceable": "POKEs the user writes or collects per title"
          },
          {
            "category": "game_data",
            "description": "cheat codes for one title",
            "name": "<game>.cht",
            "note": "Named from the loaded program's path and read by LoadCHT when present. Distinct from the .chts sets of the Cheatopedia browser.",
            "required": false,
            "source_ref": "libmain.so LoadFile 0x65590-0x655b2, LoadCHT 0x696a0",
            "unsourceable": "cheat codes the user writes or collects per title"
          },
          {
            "category": "game_data",
            "description": "colour palette for one title",
            "name": "<game>.pal",
            "note": "Named from the loaded program's path and read by LoadPAL when present, taking effect over the startup palette for that program.",
            "required": false,
            "source_ref": "libmain.so LoadFile 0x655b7-0x655d1, LoadPAL 0x648d0",
            "unsourceable": "any palette the user writes for one title"
          }
        ],
        "mode": "standalone",
        "notes": "Sinclair emulator by Marat Fayzullin, covering ZX Spectrum 16kB, 48kB and\n128kB, Spectrum +2, +2A and +3, Timex TC2048 and TS2068, the Slovak Didaktik\nGama, the Russian Pentagon and Scorpion clones, and the Sam Coupe. The build\nread here is the free Android package com.fms.speccy, versionName 5.9.11\nversionCode 5911, taken as the Play app bundle drop, xapk sha256\na93f2fd474234291d2c0dee57885204ffb12a22c94602fdfcdfbf084ed7cb354, base apk\nsha256 7163451489ac59b8c63ca49976571ad284cffa11b54d615c1693c909dd6bf768. Its\nMETA-INF/BNDLTOOL.RSA is the author's own key, CN=Marat Fayzullin O=Garage\nResearch issued 2011, fingerprint\nd09469e9b550cbc9005d3bd089f3df5f0ba89cba71cdd3b33736a0382d6f9848, beside a\nPlay distribution source stamp in the signing block. The paid package\ncom.fms.speccy.deluxe, last published as 5.9.3 versionCode 5903 in December\n2021, is carried by no mirror that answers: the author's site links only to\nPlay for it, apkcombo bounces its download page back to the app page, apkpure\nredirects to its generic downloader, apkvision holds no copy and archive.org\nnone either. The native libraries keep their symbol tables, so the readings\nbelow cite libmain.so offsets in the x86_64 slice; the arm64-v8a slice carries\nthe same nineteen ROM names. The free Speccy 5.9 builds for Windows and Ubuntu\nwere read beside it and open the same names with the same lengths and the same\norder. No source has ever been published: every download on the site, from 1.7\nfor MSDOS through 5.9, is a binary package, while ColEm and fMSX on the same\nsite ship source archives.\nref: com.fms.speccy.apk META-INF/BNDLTOOL.RSA, https://fms.komkon.org/Speccy/,\n     Speccy59-Windows-bin.zip, Speccy59-Ubuntu-x86-bin.tgz\n\nOne directory holds everything. MainActivity hands the home directory to\njniStart, which copies it into the buffer GetHomeDir returns and passes that\nsame buffer to SetPrivateDir, and Application stores what GetHomeDir returns as\nthe directory LoadBIOS changes into before it opens the first ROM and back out\nof when it is done. That directory is external storage\njoined with the application label up to its first space, so /sdcard/Speccy for\nthe package read here, falling back to getExternalFilesDirs(null) when it is\nnot a writable directory; the author's own instructions give the same\nplacement. Every open goes through mopen, which calls OpenRealFile first: the\nname is tried as given, and again as <PrivateDir>/<basename>, keeping the\nlarger of the two when both open. mopen then layers gzdopen over the\ndescriptor, so any of these files also opens gzipped, and a content:// name is\nrouted to the Android storage framework. The desktop builds have no home\ndirectory of their own and open every name where they stand, which -home\nchanges for the system ROMs alone.\nref: MainActivity.java:2561-2573, EMULib.java:750, 812,\n     libmain.so jniStart 0x32dd0-0x33530 (0x332af-0x332c1, 0x33312),\n     GetHomeDir 0x30a90, SetPrivateDir 0x571d0,\n     Application 0x602f0-0x60324, OpenRealFile 0x57440-0x5766c,\n     mopen 0x57680-0x57800, LoadBIOS 0x6436d-0x6439a, 0x6466b-0x6467b,\n     Speccy59-Ubuntu-x86-bin speccy 0x3dae5-0x3db17, Speccy.html\n     \"-home <dirname>\", EmuAndroid \"System ROMs\"\n\nLoadBIOS drives the whole set from one word of hardware flags, calling\nTryLoadROM once per name in a fixed order with the length to read and the bit\nthat asks for it. TryLoadROM does nothing when the bit is clear, and clears\nthe bit when mopen fails, which is the only check the emulator makes: the\ncount mread returns is compared against the requested length solely to pick\nthe word it logs, OK or FAILED, and a short read leaves the bit set. Nothing\nelse about a file is examined and no hash is compared. A machine ROM that\nloads clears every other machine bit and a peripheral ROM that loads clears\nevery other peripheral bit, so one machine and one disk interface stand at a\ntime. StartZXS gives up when no machine bit survives, logging FAILED TO LOAD\nSYSTEM ROM! and returning zero without starting the emulation, which makes the\nROM of the selected model the one file the emulator cannot run without.\nref: libmain.so LoadBIOS 0x64350-0x646cd, TryLoadROM 0x659b0-0x65aa4\n     (mopen 0x659d4, mread 0x65a3c, bit cleared 0x65a1c, masks\n     0x65a7d-0x65a94), StartZXS 0x64040-0x6434c (LoadBIOS 0x6416d, mask\n     0x64172, message 0x64315), Speccy59-Ubuntu-x86-bin speccy\n     0x3dac0-0x3ddaa, 0x3d970-0x3da04, 0x3f43c-0x3f469, 0x3f640\n\nTwo names are reached only through another. ZXS128TR.ROM is tried in place of\nZXS128.ROM when the 128kB model and the TR-DOS interface are both asked for,\nand ZXS128.ROM is loaded after it when it fails. The Multiface bit picks its\nimage from the machine already loaded, MFPLUS3.ROM behind a +2A or +3,\nMF128.ROM behind a 128kB or +2 and MF1.ROM behind a 16kB or 48kB, and the 8192\nbytes at offset 8192 of what it read are copied into the page below the machine\nROM.\nref: libmain.so LoadBIOS 0x64564-0x6458b, 0x645d9-0x645f5, 0x645c2-0x64651,\n     Speccy59-Ubuntu-x86-bin speccy 0x3dc79-0x3dca1, 0x3ddf0-0x3de10,\n     0x3dcd9-0x3dd64, Speccy.html \"Now trying to load ZXS128TR.ROM BIOS file\"\n\nThirteen of the nineteen ROMs ship inside the Android package. MainActivity\nreads assets/memfs.mp3 whole and jniStart mounts it through SetMemoryFS as an\nin-memory filesystem, which mopen consults only after OpenRealFile has failed,\nso a copy in the home directory is served ahead of the packaged one. The\ndirectory is a run of 32 byte entries, a length then a name, closed by an entry\nwith an empty name whose first word is the key: rotated left by three times the\nentry count, XORed sixteen bits at a time into each length and rotated right by\nthree after each, it yields the thirteen lengths, which run consecutively from\nthe end of the directory and account for the file exactly. Eleven of the\nthirteen are the same bytes the Windows and Ubuntu distributions ship, and\nTC2048.ROM and TS2068.ROM appear in no distribution at all.\nref: MainActivity.java:2561-2573, libmain.so jniStart 0x32f72-0x32f98,\n     InitMemoryFS 0x57180, SetMemoryFS 0x57200-0x57422 (key 0x572a0-0x572c1,\n     lengths 0x572e0-0x57305), mopen 0x57749-0x577e4\n\nCompanion files come from the loaded program's path. LoadFile derives .sta,\n.pok, .cht and .pal from it and reads each when it is there, and the startup\npalette is a name of its own, <HomeDir>/Speccy.pal on Android and Speccy.pal\nbeside the binary on the desktop, which -palette redirects.\nref: libmain.so LoadFile 0x65482, 0x65569, 0x65590, 0x655b7,\n     Application 0x60436-0x60484, StartZXS 0x641c5-0x641d4,\n     LoadPAL 0x648d0, Speccy59-Ubuntu-x86-bin speccy 0x3f4ac-0x3f4bd,\n     0x3e450-0x3e494, Speccy.html \"-palette <filename>\"\n",
        "profiled_date": "2026-08-12",
        "source": "https://fms.komkon.org/Speccy/",
        "systems": [
          "sinclair-zx-spectrum",
          "timex-tc2048",
          "timex-ts2068",
          "sam-coupe"
        ],
        "type": "standalone",
        "upstream": "closed-source",
        "verification": "existence"
      }
    },
    {
      "id": "squirreljme",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.3.0",
        "cores": [
          "squirreljme"
        ],
        "display_name": "Java ME (SquirrelJME)",
        "emulator": "SquirrelJME",
        "files": [
          {
            "description": "Class library v0.3.0, fast/optimized build",
            "name": "squirreljme-0.3.0-fast.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:102"
          },
          {
            "description": "Class library v0.3.0, standard build",
            "name": "squirreljme-0.3.0.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:103"
          },
          {
            "description": "Class library v0.3.0, standard build with test suites",
            "name": "squirreljme-0.3.0-test.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:104"
          },
          {
            "description": "Class library v0.3.0, slow/interpreter build",
            "name": "squirreljme-0.3.0-slow.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:105"
          },
          {
            "description": "Class library v0.3.0, slow build with test suites",
            "name": "squirreljme-0.3.0-slow-test.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:106"
          },
          {
            "description": "Class library, fast/optimized build (unversioned)",
            "name": "squirreljme-fast.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:107"
          },
          {
            "description": "Class library, standard build (unversioned)",
            "name": "squirreljme.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:108"
          },
          {
            "description": "Class library, standard build with test suites (unversioned)",
            "name": "squirreljme-test.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:109"
          },
          {
            "description": "Class library, slow/interpreter build (unversioned)",
            "name": "squirreljme-slow.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:110"
          },
          {
            "description": "Class library, slow build with test suites (unversioned)",
            "name": "squirreljme-slow-test.jar",
            "required": false,
            "source_ref": "nanocoat/src/boot.c:111"
          }
        ],
        "notes": "Java ME 8 virtual machine. Runs J2ME MIDlets and older flip-phone games.\nRequires a class library JAR in the system directory. The core searches\nsjme_nvm_romNames[] in priority order and uses the first match found.\nAll entries are optional: without a class library, the core runs a built-in\nmodeless stars demo but cannot execute J2ME software.\nThe .info declares firmware_count=8 but the code defines 10 search names\n(squirreljme-{version}-test.jar and squirreljme-test.jar are missing from .info).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/SquirrelJME/SquirrelJME",
        "source_commit": "72a06de002d720ec35c299ce7379273f0420d330",
        "systems": [
          "j2me"
        ],
        "type": "libretro",
        "upstream": "https://github.com/SquirrelJME/SquirrelJME",
        "verification": "existence"
      }
    },
    {
      "id": "ssf",
      "profile": {
        "author": "Shima",
        "core_classification": "other",
        "core_version": "PreviewVer R38",
        "cores": [
          "ssf"
        ],
        "display_name": "Sega - Saturn/ST-V (SSF)",
        "emulator": "SSF",
        "files": [
          {
            "aliases": [
              "mpr-17933.bin",
              "sega_100.bin",
              "sega_100a.bin",
              "sega1003.bin",
              "hisaturn.bin",
              "vsaturn.bin"
            ],
            "description": "Saturn BIOS",
            "hle_fallback": true,
            "name": "sega_101.bin",
            "note": "Any dump of the 512 KiB console ROM, the compatible machines included. Area code is chosen by [Peripheral] Areacode and AutoAreacode, not by the image, so no region selects this file.",
            "required": false,
            "size": 524288,
            "source_ref": "SSF.exe 0x43d770 (SaturnBIOS 0x129b1f8), SSF.exe 0x129a2f8 with the filter at 0x129a310, SSF.exe 0x43ff96 (NoBIOS 0x129b4cc), libnative-lib.so SSF::CStateSaveBase::_GetBIOSHash 0x134b8ec-0x134b924, Document/Readme.txt BIOSファイルについて",
            "system": "sega-saturn"
          },
          {
            "aliases": [
              "epr-23603.ic8",
              "epr-19730.ic8",
              "epr-19854.ic8",
              "epr-17951a.ic8",
              "epr-17952a.ic8",
              "epr-17953a.ic8",
              "epr-17954a.ic8",
              "epr-17740.ic8",
              "epr-17740a.ic8",
              "epr-17741a.ic8",
              "epr-17742a.ic8"
            ],
            "description": "ST-V BIOS",
            "name": "epr-20091.ic8",
            "note": "Loose 512 KiB EPROM image, read outside the cartridge ZIP. Any of the board revisions is accepted, the code branching on none of them.",
            "required": true,
            "size": 524288,
            "source_ref": "SSF.exe 0x43d91f (STVBIOS 0x129b218), SSF.exe 0x129a328, Document/Readme.txt ST-V BIOS option, Document/Readme.txt No BIOS option",
            "system": "sega-stv"
          },
          {
            "category": "game_data",
            "description": "cartridge image mapped at A-Bus CS0",
            "name": "<cartridge>.bin",
            "note": "[Peripheral] DataCartridge, gated by DataCartridgeEnable and off by default. SSF reads the file at the configured path into the 32 MiB A-Bus CS0 window and identifies it in no way; the dumps that belong there are the two Saturn ROM carts, mpr-18811-mx.ic1 for The King of Fighters '95 and mpr-19367-mx.ic1 for Ultraman. Readme.txt records the option as unverified.",
            "required": false,
            "source_ref": "SSF.exe 0x43e26b (DataCartridge 0x1298838), SSF.exe 0x43e178 (DataCartridgeEnable 0x1298820), SSF.exe 0x129a340, SSF.exe 0x916e5e-0x916e84, Document/Readme.txt Data Cartridge option",
            "system": "sega-saturn"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "cheat script",
            "name": "<name>.cht",
            "note": "Read when [Program4] EnableCheat is set, from the directory named after the disc product number. The format is a script language: triggers on first read, field, file, sector, CDDA and scanline, memory reads and writes, storage slots, branches and labels. Six ship with the emulator; the memory cheat dialog saves its own with the target address in the name.",
            "path": "Cheat/<product id>/<name>.cht",
            "required": false,
            "source_ref": "SSF.exe 0x4403c0 (EnableCheat 0x1298de0), SSF.exe 0x12998a0, SSF.exe 0x129a658, SSF.exe command table 0x128c570-0x128c808",
            "system": "sega-saturn"
          }
        ],
        "mode": "standalone",
        "notes": "Sega Saturn and ST-V emulator by Shima, closed source and distributed as a\nbinary. Two artifacts are read here and they describe the same emulator: the\nWindows build SSF_PreviewVer_R38.zip of 2026-01-01, sha256\n7325a9b9d666560ddf632f747fb42ab880f82c45391e51fe0716beb1c535f00b, whose\nemulator is the 64-bit SSF.exe and which is cited by virtual address; and the\nAndroid build SSF_AndroidVer.zip of 2022-08-07, package\ncom.xrea.g2.aaaaaaaa.ssf, whose lib/arm64-v8a/libnative-lib.so keeps its 40738\ndynamic symbols and which is cited by symbol. Prose references name the\nJapanese documentation shipped in Document/.\n\nEvery path below is stored in full in SSF.ini and picked through a file dialog\nfiltered on \"all files (*.*)\". SSF fixes no filename and no directory for any\nof them and looks for none, so the names used here are the dumps that fill\neach slot rather than names the code searches.\n\nSaturn BIOS, [Peripheral] SaturnBIOS. Readme.txt describes the image as the\nconsole address range 00000000-0007FFFF and states that the filename is free.\nNeither a length nor a hash is compared against the file. The one routine that\nwalks the 512 KiB BIOS area is CStateSaveBase::_GetBIOSHash, which folds it\ninto the checksum pair that tags a save state.\n\nRunning without it is a supported mode, [Program4] NoBIOS. SSF carries a boot\nROM of its own, an embedded program with the SYS_* system calls and the\ninterrupt vectors, and in that mode the backup library is always hooked.\nReadme.txt records lower compatibility and advises supplying a BIOS.\n\nST-V is entered by holding left Shift at launch. [Peripheral] STVBIOS names\nthe motherboard EPROM, and both the option reference and the No BIOS entry of\nReadme.txt state that ST-V does not run without it.\n\nST-V cartridges are the game and are read from a ZIP: the loader takes the\nextension of each member as its IC number, accepts 1 through 13, byte-swaps\nevery mask ROM in 16-bit units, doubles each byte of the IC13 EPROM across the\n16-bit bus, then mirrors each chip over its window. IC7 and IC13 are\nexclusive. STV_ROM.html gives the same layout and notes that MAME ROM sets fit\nonce the extensions are changed.\n\nCheat scripts live in Cheat/ under the disc product number. Six ship with the\nemulator and the memory cheat dialog writes more.\n\nEverything else the binary opens it also writes: SSF.ini, Setting.ini,\nSetting/, Backup/, StateSave/, CDIndex/, Snapshot/, Wave/, ExtractSound/,\nDebugData/, and the LLVM/ object cache that the bundled CreateObject.exe and\nclang.exe compile from the user's own disc for the local CPU.\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/shimazzz/SEGASaturnEmulator-SSF",
        "systems": [
          "sega-saturn",
          "sega-stv"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "starboard",
      "profile": {
        "author": "force9",
        "core_classification": "other",
        "core_version": "0.23.0",
        "cores": [
          "starboard",
          "STARBOARD",
          "org.force9.starboard"
        ],
        "display_name": "PortMaster library (Starboard)",
        "emulator": "Starboard",
        "files": [
          {
            "aliases": [
              "rootfs.tar.gz"
            ],
            "category": "game_data",
            "description": "Debian bookworm ARM64 root filesystem the ports execute in",
            "name": "starboard-rootfs.tar.gz",
            "note": "Fetched from releases/latest/download of get-starboard/starboard-runtime, written to the cache directory as rootfs.tar.gz, gunzipped into a rootfs directory under internal storage, then deleted. Nothing launches without it: the gate reads usr/bin/env and bin/sh in the extracted tree beside libproot.so in the native library directory. Integrity comes from a .sha256 sidecar requested next to the asset, whose first whitespace token must be 64 hex characters; the file is hashed and dropped on a mismatch, while a missing sidecar logs \"No rootfs checksum sidecar available\" and the download is kept on TLS trust alone, which is what happens today since that sidecar answers 404. The size and hash recorded here identify release starboard-rootfs-20260604.1, the one that URL served at profiling time, and the app follows whatever release is latest. Its own version is read back from etc/starboard-release, which carries release, commit and built keys.",
            "path": "rootfs.tar.gz",
            "required": true,
            "sha256": "a40dd11b24802325b37ab6454feb5fda84a6f1de9d769c84a2dd7b6fee8035e1",
            "size": 582086462,
            "source_ref": "Starboard 0.23.0 ze0.java:75,421-422 (base and asset URL), xe0.java:66-70 (download, verify, extract, delete), ze0.java:236-342 (sha256 sidecar and comparison), ze0.java:130-144 (gunzip into place), ze0.java:416-418 (install directory), ze0.java:426-428 and t20.java:125 (launch gate), ze0.java:439-463 (etc/starboard-release)",
            "unsourceable": "runtime image the app fetches into its own cache and unpacks into internal storage, leaving no path a user or a pack can write",
            "validation": [
              "sha256"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Catalogue manager and execution environment for the PortMaster library on\nAndroid ARM64 handhelds. PortMaster ports are Linux ARM64 builds, so nothing\nis emulated: proot opens a userspace chroot into a Debian bookworm root\nfilesystem and the games run there as native binaries against glibc, SDL2 and\nMesa. ES-DE reaches it through the ports system, passing a .port file as the\nport_file extra to org.force9.starboard/.ui.game.GameActivity.\n\nThe build read here is the signed release Starboard-v0.23.0.apk, sha256\na81b69d471ee88ad6c47497e616c5a7c68bf8ebfb32bc7ae9348ed46c3190b3d, matching the\ndigest GitHub records for the asset. The source is not published, so the\nreadings below cite a jadx decompilation of classes.dex taken with\n--show-bad-code, where org.force9.starboard.* keeps its names and the rest is\nr8 output under defpackage.\n\nThe APK carries its own execution stack in lib/arm64-v8a: libproot.so,\nlibproot_loader.so and libtalloc2.so mirrored from Termux through\nget-starboard/starboard-prebuilts, libSDL2_starboard.so preloaded ahead of the\nSDL2 in the rootfs, libasound_module_pcm_starboard.so as the ALSA output\nplugin, libGLESv2_wrap.so with libvirgl_vtest.so and libvirglrenderer_sb.so\nfor the per-port GPU path, libandroid-shmem.so, and libgame_bridge.so which\nstarts proot and builds the PortMaster environment. Android installs all of\nthem with the package.\n\nWhat the ports find under /opt/system/Tools/PortMaster is written at launch by\nlibgame_bridge.so: bind_directories.sh, patch_ld_preload.sh,\nseed_retroarch_cfg.sh and launcher.sh under /tmp/sb, the gptokeyb shim,\nruntimes.json, control.txt and device_info.txt, with etc/resolv.conf and\netc/hosts seeded straight after extraction. The ES-DE sync writes the .port\nfiles it later launches from, each holding a zip_name and a launcher key,\nalong with a ports entry in custom_systems/es_systems.xml and\ngamelists/ports/gamelist.xml.\n\nGames install to Starboard/ports on shared storage, marked by a\n.starboard_installed file, and come from the PortMaster catalogue rather than\nfrom this profile. A port that declares a runtime pulls a squashfs image into\nopt/system/Tools/PortMaster/libs inside the rootfs on first launch, named by\nthe port and resolved through the utils index of PortsMaster/PortMaster-New\nfiltered to arch aarch64. Starboard names no runtime of its own and that index\nis republished with the catalogue, so the set belongs to PortMaster.\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/get-starboard/starboard",
        "systems": [],
        "type": "standalone",
        "upstream": "closed-source",
        "verification": "existence"
      }
    },
    {
      "id": "stella",
      "profile": {
        "alias_of": "stella2014",
        "core_version": "3.9.3",
        "cores": [
          "stella"
        ],
        "display_name": "Atari - 2600 (Stella)",
        "emulator": "Stella",
        "note": "Identical codebase to stella2014-libretro. Both repos share the same HEAD\ncommit and produce a binary reporting library_name \"Stella 2014\". The\nstella_libretro.info incorrectly lists display_version \"6.6\"; the actual\nembedded version is 3.9.3. See stella2014.yml for firmware requirements\nand KidVid audio files.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/stella-libretro",
        "systems": [
          "atari-2600"
        ],
        "type": "alias"
      }
    },
    {
      "id": "stella2014",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "3.9.3",
        "cores": [
          "stella2014"
        ],
        "display_name": "Atari - 2600 (Stella 2014)",
        "emulator": "Stella 2014",
        "files": [
          {
            "aliases": [
              "KVS1.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 1 (Smurfs Save the Day)",
            "name": "kvs1.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVS2.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 2 (Smurfs Save the Day)",
            "name": "kvs2.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVS3.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 3 (Smurfs Save the Day)",
            "name": "kvs3.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVB1.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 1 (Berenstain Bears)",
            "name": "kvb1.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVB2.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 2 (Berenstain Bears)",
            "name": "kvb2.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVB3.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 3 (Berenstain Bears)",
            "name": "kvb3.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:167,182"
          },
          {
            "aliases": [
              "KVSHARED.WAV"
            ],
            "category": "game_data",
            "description": "KidVid Voice Module shared audio samples",
            "name": "kvshared.wav",
            "required": false,
            "source_ref": "stella/src/emucore/KidVid.cxx:185"
          }
        ],
        "notes": "Frozen snapshot of Stella 3.9.3. The Atari 2600 has no BIOS ROM; the TIA,\nRIOT, and 6507 CPU are fully emulated in software. The SuperCharger (Starpath)\nBIOS is emulated via a built-in dummy ROM (ourDummyROMCode in CartAR.cxx:518).\nGame properties database (stella.pro) is compiled into DefProps.hxx; external\nloading is disabled in the libretro port (PropsSet.cxx:35). The core does not\ncall GET_SYSTEM_DIRECTORY. KidVid Voice Module audio tapes (7 WAV files) are\nloaded via rfopen with relative filenames from the content directory\n(KidVid.cxx:166-185); absence is handled gracefully. EEPROM save data for\nAtariVox and SaveKey peripherals is managed as NVRAM, not user-supplied.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/stella2014-libretro",
        "source_commit": "4a7da82595d27b8df7af1ecb467a64b642a41bc9",
        "systems": [
          "atari_2600"
        ],
        "type": "libretro",
        "upstream": "https://github.com/stella-emu/stella"
      }
    },
    {
      "id": "stella2023",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "7.0_pre",
        "cores": [
          "stella2023",
          "stella"
        ],
        "display_name": "Atari - 2600 (Stella 2023)",
        "emulator": "Stella 2023",
        "files": [
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 1 (Smurfs Save the Day)",
            "name": "KVS1.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 2 (Smurfs Save the Day)",
            "name": "KVS2.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 3 (Smurfs Save the Day)",
            "name": "KVS3.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:245, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 1 (Berenstain Bears)",
            "name": "KVB1.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 2 (Berenstain Bears)",
            "name": "KVB2.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module audio tape 3 (Berenstain Bears)",
            "name": "KVB3.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:246, src/emucore/KidVid.cxx:273"
          },
          {
            "category": "game_data",
            "description": "KidVid Voice Module shared audio samples",
            "name": "KVSHARED.WAV",
            "required": false,
            "source_ref": "src/emucore/KidVid.cxx:274"
          }
        ],
        "notes": "Frozen snapshot of Stella development branch (7.0_pre, copyright 2024).\nThe .info reports display_version 6.6 which does not match the source\n(src/common/Version.hxx defines STELLA_VERSION as \"7.0_pre\").\n\nThe Atari 2600 has no BIOS ROM; TIA, RIOT, and 6507 CPU are fully\nemulated in software. The SuperCharger (Starpath) BIOS is emulated via\na built-in dummy ROM (ourDummyROMCode in CartAR.cxx:279). The game\nproperties database is compiled into DefProps.hxx; external loading is\ndisabled in the libretro port (OSystemLIBRETRO returns\nCompositeKeyValueRepositoryNoop for the property repository).\n\nThe libretro interface does not call RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY\nand declares no firmware requirements (firmware_count=0 in .info).\n\nKidVid Voice Module audio tapes (7 WAV files) are checked via\nFSNode::exists() in baseDir (resolves to content directory in the\nlibretro port). SoundLIBRETRO does not override playWav()/wavSize()\nfrom the base Sound class, so WAV playback is non-functional. Games\nwork without WAV files using a timing-based fallback in KidVid::setNextSong().\n\nEEPROM save data for AtariVox and SaveKey peripherals is managed as\nNVRAM, not user-supplied.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/stella2023",
        "source_commit": "878a9c8d5f03ef0b7cd190b5713d6bf31c48df38",
        "systems": [
          "atari_2600"
        ],
        "type": "libretro",
        "upstream": "https://github.com/stella-emu/stella"
      }
    },
    {
      "id": "stonesoup",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.16-a0",
        "cores": [
          "stonesoup"
        ],
        "data_directories": [
          {
            "ref": "stonesoup",
            "source_ref": "source/files.cc:375-458"
          }
        ],
        "display_name": "Dungeon Crawl Stone Soup",
        "emulator": "Stone Soup",
        "files": [],
        "notes": "Roguelike dungeon crawler. Fork frozen at DCSS 0.16-a0 (upstream now ~0.32).\nLast libretro commit: Oct 2019. Marked experimental.\n\nAccepts .crawlrc config files as content (supported_extensions: crawlrc).\nThe libretro wrapper sets -dir to the content directory.\nref: libretro/libretro.cc:178-198 — main_wrap() passes -dir content_dir\n\nGame data loaded at runtime from dat/ tree via datafile_path().\nref: source/files.cc:375-458 — _get_base_dirs() + datafile_path()\nNo DATA_DIR_PATH defined in Makefile.libretro — falls back to SysEnv.crawl_dir.\nData is NOT compiled into the binary.\n\ndat/ tree contents (532 files, 16 MB):\n- dat/tiles/*.png (floor, wall, feat, player, main, gui, icons) — tiletex.cc:89-97\n- dat/DejaVuSans.ttf, dat/DejaVuSansMono.ttf — fontwrapper-ft.cc:79\n- dat/descript/*.txt, dat/database/*.txt — database.cc:72-140\n- dat/des/*.des (level generation) — maps.cc:1457\n- dat/dlua/*.lua, dat/clua/*.lua — maps.cc:1465\n- dat/defaults/ (settings)\n\nNot on buildbot.libretro.com/assets/system/.\nNo divergence in file loading between upstream and libretro fork.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/crawl-ref",
        "source_commit": "cc2530f377a3a5d686d4b6a360d88b01de0fbc59",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/crawl/crawl"
      }
    },
    {
      "id": "super3",
      "profile": {
        "author": "izzy2lost",
        "based_on": "Supermodel 0.3a through the arm branch of DirtBagXon/model3emu-code-sinden at fa1e305",
        "core_classification": "community_fork",
        "core_version": "1.2.1",
        "cores": [
          "super3",
          "SUPER3",
          "com.izzy2lost.super3"
        ],
        "display_name": "Sega - Model 3 (SUPER3)",
        "emulator": "SUPER3",
        "exclusion_note": "No BIOS or firmware file is loaded. Sega Model 3 hardware has no shared system ROM: each board carries its own program, video, sound and where fitted drive board, MPEG program and MPEG music ROMs, and every one of them reaches the emulator as a region of a per-game MAME format zip declared in Games.xml, a child set drawing its remaining regions from its parent's zip in the same directory. The three files listed above are the emulator's own configuration, reinstalled from the package assets before every launch. Config/Music.xml and the two crosshair bitmaps in Assets are shipped by the package as well and read by no code in this build.\n",
        "files": [
          {
            "bundled": true,
            "crc32": "b2ea6948",
            "description": "Game and ROM set definitions",
            "md5": "fc26e2deaa532794d91fe33ca73f8e2c",
            "name": "Games.xml",
            "note": "The ROM set database, 63 games, giving for each one the regions to fill and the name and crc32 of every file that fills them, the stepping, the PCI bridge, the encryption key, the drive board, net board and MPEG board the machine carries, the patches to apply and the parent set to fall back on. Handed to the GameLoader constructor, parsed as XML, and a game load is refused outright when the file is not there. The Kotlin launcher parses the same copy out of the assets for its game list and its per-game input hints. Byte identical to the copy in the repository root Config directory.",
            "path": "Config/Games.xml",
            "required": true,
            "sha1": "b41150f8cff409dde89939b80a980a20e853df0b",
            "size": 154928,
            "source_ref": "android/app/src/main/cpp/native-lib.cpp:568-580, 1096-1114, Src/GameLoader.cpp:492-502, 930-933, Src/Util/ConfigBuilders.cpp:60-73, android/app/src/main/java/com/izzy2lost/super3/GameXml.kt:23-24, android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:1211",
            "unsourceable": "Installed from the package assets on every launch and never obtained separately"
          },
          {
            "bundled": true,
            "crc32": "2d012d14",
            "description": "Input and per-game settings",
            "md5": "a468e45e005caa89356bd67b70e0d37d",
            "name": "Supermodel.ini",
            "note": "Read after the built-in defaults have been applied, the Global section first and then the section named after the loaded game, each merged over what is already set; a file that is absent or unparseable leaves the defaults standing. The hashes are those of the copy in the package assets, which is not the 13290 byte copy in the repository root Config directory: the Android build ships its own. They describe the file as shipped, since AssetInstaller rewrites it on first run, substituting the Android control defaults, and the in-app editor writes per-game keys such as LegacyReal3DTiming afterwards.",
            "path": "Config/Supermodel.ini",
            "required": false,
            "sha1": "6c38cc6fba14863bfbdc730e53d3274fd79a4544",
            "size": 6887,
            "source_ref": "android/app/src/main/cpp/native-lib.cpp:531-566, 620-621, Src/Util/ConfigBuilders.cpp:134-142, android/app/src/main/java/com/izzy2lost/super3/AssetInstaller.kt:17, 43-159, android/app/src/main/java/com/izzy2lost/super3/Super3Activity.kt:880-884",
            "unsourceable": "Installed from the package assets on every launch and rewritten in place by the app"
          },
          {
            "bundled": true,
            "crc32": "94468d79",
            "description": "SDL controller mapping database",
            "md5": "e8da2d033e90d6fefa884ee78690b4e0",
            "name": "gamecontrollerdb.txt",
            "note": "Opened once, on the first pad the input system sees, and handed to SDL as mappings to add. The name is fixed unless the ini key SDLGameControllerDB carries a path of its own, and a handle that cannot be opened is passed over, leaving SDL on its built-in mappings. Byte identical to the copy in the repository root Config directory.",
            "path": "Config/gamecontrollerdb.txt",
            "required": false,
            "sha1": "cb6be8206308470ecaa8b9cc882d82abe0ef3562",
            "size": 587398,
            "source_ref": "android/app/src/main/cpp/android_input_system.cpp:291-311, 207-213",
            "unsourceable": "Installed from the package assets on every launch and never obtained separately"
          }
        ],
        "mode": "standalone",
        "notes": "Sega Model 3 emulator for Android, package com.izzy2lost.super3, versionName 1.2.1\nversionCode 22, arm64-v8a alone, minSdk 26 and targetSdk 36, GPL-3.0 with the tree in\nthe open. A Kotlin front end carries the launcher, setup wizard, ini editor and save\nstate browser over the Supermodel core, built through CMake against SDL2 with an\nOpenGL ES presenter of its own. The core states its own lineage: SUPERMODEL_VERSION\nreads \"0.3a-fa1e305-arm-mm DirtBagXon (Sinden)\", and the app names both sources it\ndraws on, so the emulator is Supermodel 0.3a as carried by the arm branch of\nDirtBagXon/model3emu-code-sinden at fa1e305, \"Add ManyMouse License\" of 2025-07-28.\nNo upstream commit is pinned because neither this repo nor that fork shares git\nhistory with trzy/Supermodel: both report themselves as independent repositories and\na comparison against trzy/Supermodel has no merge base. ES-DE reaches the app through\nits SUPER3 find rule, on Android alone among the seven find rule sets, starting\nMainActivity with an intent VIEW whose data is the storage framework URI of the game.\nref: android/app/build.gradle.kts:22-36, Src/Version.h:32, README.md:3-4,\n     android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:453-463,\n     es-de resources/systems/android/es_find_rules.xml:552-557,\n     es-de resources/systems/android/es_systems.xml:1091\n\nThe Android build compiles a subset of the tree, which decides where a load path can\nbe read. The CMake source list globs Src/ and then drops all of Src/OSD/ and all of\nSrc/Graphics/ twice over, by regex and again by an explicit removal loop, adding back\nonly a named list of Src/Graphics/New3D files. So the desktop SDL frontend is absent\nfrom this binary: Src/OSD/SDL/Main.cpp holds the command line and its own config file\nhandling, Src/OSD/SDL/SDLInputSystem.cpp its own controller database call, and\nSrc/Graphics/Shader.cpp the loader for external GLSL files, and none of the three is\nbuilt here. The paths below are the ones this build actually runs.\nref: android/app/src/main/cpp/CMakeLists.txt:32-91, 135-158\n\nOne directory holds everything the emulator reads. MainActivity hands the native side\na user data root of getExternalFilesDir(null)/super3, so\n/storage/emulated/0/Android/data/com.izzy2lost.super3/files/super3, and\nSetUserDataRoot creates it and changes into it, which is what makes the relative names\nbelow resolve. AssetInstaller copies five trees out of the package assets into that\nroot before every launch, Assets, Config, GraphicsAnalysis, NVRAM and Saves, never\noverwriting a file that is already there, so the emulator always finds its own\nconfiguration whatever the user has done. The native entry point also probes\n<root>/super3/Games.xml over external storage, internal storage, /storage/emulated/0\nand /sdcard when no path is passed, but the front end always passes one, along with\nthe ROM path, the game name and the user data root as its four arguments.\nref: android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:501-503,\n     1155-1161, 1209-1222,\n     android/app/src/main/java/com/izzy2lost/super3/AssetInstaller.kt:7-18,\n     android/app/src/main/cpp/native-lib.cpp:247-260, 1080-1117,\n     android/app/src/main/java/com/izzy2lost/super3/Super3Activity.kt:99-111\n\nModel 3 boards carry no shared system BIOS and this emulator loads none. Every byte\nthe machine needs comes out of the per-game MAME format zip: the program ROMs, the\nvideo ROMs, the sound program and samples, and where the board has them the drive\nboard program, the MPEG program and the MPEG music, all declared as regions of one\ngame in Games.xml. The set is identified by the basename of the zip, not by a scan,\nand the ErrorLog asks for an appropriately named archive when no game answers to that\nname; the individual members are then matched by name or by crc32. A child set names a\nparent and the loader opens <same directory>/<parent>.zip for the rest of its regions,\nwhich the front end prepares for by walking the parent chain and staging every zip it\nnames into romcache, refusing to start and naming what is missing when one cannot be\nfound. This Games.xml declares 63 games with 41 of those lines naming a parent, every\nnamed parent itself a game, and not one non-game or BIOS set among them.\nref: Src/GameLoader.cpp:873-928, 882-890, 913-921, 148-153,\n     Src/Model3/Model3.cpp:2919-2933,\n     android/app/src/main/java/com/izzy2lost/super3/MainActivity.kt:1163-1208,\n     Config/Games.xml\n\nThree files ship inside the package and are read from Config/ at runtime. Games.xml is\nthe one the emulator cannot do without: InitLoader tests for it and returns failure\nwhen it is absent, which leaves the loading thread in its failed state and no game\nrunning. Supermodel.ini and gamecontrollerdb.txt are both skipped when they are\nmissing, on built-in defaults in the first case and SDL's built-in controller mappings\nin the second. Nothing about any of the three is verified: no length is compared and\nno hash is computed, the only tests being that the file is there and that it parses.\nref: android/app/src/main/cpp/native-lib.cpp:531-538, 568-580, 1123-1135,\n     android/app/src/main/cpp/android_input_system.cpp:291-311,\n     Src/Util/ConfigBuilders.cpp:60-73, 134-142\n\nTwo files that AssetInstaller lands are read by nothing in this build.\nConfig/Music.xml declares substitute MPEG tracks for DSB1 and DSB2 games, and neither\nits own name nor the attributes it is written in appear anywhere in the tree, nor any\nhandling of mp2 or mp3 files: the DSB reads its music from the mpeg_music region of\nthe game zip and from nowhere else. Assets/p1crosshair.bmp and Assets/p2crosshair.bmp\nare documented by the inherited Manual for a crosshair-style option that does not\nexist here, and the tree holds no bitmap reader at all, Src/Util/BMPFile.h being a\nwriter; the Crosshairs setting is a two bit mask and the presenter draws the crosshair\nas geometry. A build that wires either feature up would turn these into files to\ncollect.\nref: android/app/src/main/assets/Config/Music.xml, Manual.txt:99-102,\n     Src/Model3/Model3.cpp:2932, Src/Util/BMPFile.h:391,\n     android/app/src/main/cpp/native-lib.cpp:763-772, 909-976,\n     android/app/src/main/cpp/gles_presenter.cpp:364-369\n\nThe rest of the tree is written, not read. NVRAM/<game>.nv is created on exit and read\nback on the next launch of the same game, Saves/ holds the ten save state slots and\ntheir screenshots, romcache/ holds the staged copies of the user's own archives, and\nFlyers/ is filled on request from the GitHub contents API of izzy2lost/Model3flyers\nfor the artwork in the launcher list. An optional sync copies NVRAM, Saves, Config and\nFlyers between the internal root and a folder the user picks in the system picker.\nref: android/app/src/main/cpp/native-lib.cpp:262-313, 793-797,\n     android/app/src/main/java/com/izzy2lost/super3/FlyerRepoSync.kt:16-46,\n     android/app/src/main/java/com/izzy2lost/super3/UserDataSync.kt:10-25\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/izzy2lost/Super3",
        "source_commit": "b435c80a88fd496d4a9858be0681260e84342c85",
        "systems": [
          "sega-model3"
        ],
        "type": "standalone",
        "upstream": "https://github.com/trzy/Supermodel",
        "verification": "existence"
      }
    },
    {
      "id": "superbroswar",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v0.1",
        "cores": [
          "superbroswar"
        ],
        "display_name": "Super Bros War",
        "emulator": "Super Bros War",
        "files": [],
        "notes": "Libretro port of Super Mario War, a fan-made multiplayer battle game. All game data (maps, sprites, sounds, tilesets, skins) loads from the content directory via convertPath(). System directory not used for game data, only as save directory fallback.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/superbroswar-libretro",
        "source_commit": "ae824f626ad80c8b7ee848698b3d1dcebe9a5ccb",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/mmatyas/supermariowar"
      }
    },
    {
      "id": "supermodel",
      "profile": {
        "core_version": "0.3a",
        "cores": [
          "supermodel"
        ],
        "display_name": "Supermodel (Sega Model 3)",
        "emulator": "Supermodel",
        "exclusion_note": "The Sega Model 3 arcade hardware has no shared system BIOS. Each game board contains its own program ROMs (CROM), video ROMs (VROM), sound program, sound samples, and optional DSB/drive board ROMs, all contained within per-game MAME-format ZIP archives. Supermodel loads all required data from these game ZIPs via CRC32-based identification defined in Games.xml. The files listed above are the emulator's own data, not system ROMs.\n",
        "files": [
          {
            "bundled": true,
            "description": "ROM set definitions",
            "name": "Games.xml",
            "note": "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it.",
            "path": "Config/Games.xml",
            "required": true,
            "source_ref": "Src/OSD/SDL/Main.cpp:114, 1498, 1939, 2297-2307, Src/GameLoader.cpp:551-561, 1016-1019"
          },
          {
            "bundled": true,
            "description": "Player 1 light gun crosshair texture",
            "name": "p1crosshair.bmp",
            "note": "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2.",
            "path": "Assets/p1crosshair.bmp",
            "required": true,
            "size": 295992,
            "source_ref": "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2350-2356, Assets/DIR.txt",
            "unsourceable": "Ships in the release archive next to the binary that loads it"
          },
          {
            "bundled": true,
            "description": "Player 2 light gun crosshair texture",
            "name": "p2crosshair.bmp",
            "note": "Read in the same call as the player 1 bitmap and equally fatal when it fails to load.",
            "path": "Assets/p2crosshair.bmp",
            "required": true,
            "size": 295992,
            "source_ref": "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2350-2356",
            "unsourceable": "Ships in the release archive next to the binary that loads it"
          },
          {
            "bundled": true,
            "description": "Custom MPEG music track map",
            "name": "Music.xml",
            "note": "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies.",
            "path": "Config/Music.xml",
            "required": false,
            "source_ref": "Src/OSD/SDL/Main.cpp:115, 940, Src/Sound/MPEG/MpegAudio.cpp:88-108",
            "unsourceable": "Ships in the release archive as a template whose every example sits inside a dummy comment tag"
          }
        ],
        "mode": "standalone",
        "notes": "Open-source Sega Model 3 arcade emulator by Bart Trzynadlowski (trzy) and\ncontributors, under GPL-3.0. Emulates all three Model 3 steppings (1.0, 1.5,\n2.0/2.1) including Real3D graphics, SCSP sound, DSB1/DSB2 MPEG music boards,\ndrive boards, and net board. Cross-platform (Windows, Linux, macOS).\n\nUses MAME-compatible ROM sets loaded from ZIP archives. GameLoader identifies\ngames by CRC32 checksums defined in Config/Games.xml. Parent/child ROM set\nrelationships exist between regional variants of the same game, not as shared\nBIOS sets. No standalone BIOS or firmware files are loaded outside of game ZIPs.\n\nEmuDeck installs the Flatpak package (com.supermodel3.Supermodel). Config\nstored in ~/.supermodel/Config/. No checkBIOS entry in EmuDeck.\n\nFour data files of its own are read from the install tree, Config/ and Assets/\nrelative to the working directory on Windows and macOS, under the home\ndirectory on Linux. Supermodel.ini, NVRAM/<game>.nv and Saves/<game>.st<slot>\nare written by the emulator itself.\nref: Src/OSD/Windows/FileSystemPath.cpp:28-49\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/trzy/Supermodel",
        "source_commit": "d6dec3dcf0922459801907950d966e5767c674de",
        "systems": [
          "sega-model3"
        ],
        "type": "standalone",
        "upstream": "https://github.com/trzy/Supermodel"
      }
    },
    {
      "id": "supermodel-dojo",
      "profile": {
        "author": "blueminder",
        "core_classification": "enhanced_fork",
        "core_version": "dojo-preview6",
        "cores": [
          "supermodel-dojo"
        ],
        "display_name": "Sega - Model 3 (Supermodel Dojo)",
        "emulator": "Supermodel Dojo",
        "files": [
          {
            "bundled": true,
            "description": "ROM set definitions",
            "name": "Games.xml",
            "note": "Parsed at startup into the game database. Every ROM region, file name and CRC32 the loader matches against comes from here, so an unreadable file leaves no set to resolve and the launch returns before the emulator is built. The path is a config key, so -game-xml-file moves it.",
            "path": "Config/Games.xml",
            "required": true,
            "source_ref": "Src/OSD/SDL/Main.cpp:117, 1684, 2143, 2509-2520, Src/GameLoader.cpp:551-561, 1016-1019, Src/OSD/Windows/FileSystemPath.cpp:28-32"
          },
          {
            "bundled": true,
            "description": "Player 1 light gun crosshair texture",
            "name": "p1crosshair.bmp",
            "note": "Both bitmaps are read on every launch whatever CrosshairStyle holds, since the load runs before the style decides anything, and a null surface aborts startup ahead of the Model 3 object. 32 bit BMP with alpha, sides a multiple of 2.",
            "path": "Assets/p1crosshair.bmp",
            "required": true,
            "size": 295992,
            "source_ref": "Src/OSD/SDL/Crosshair.cpp:34-51, Src/OSD/SDL/Main.cpp:2563-2569, Assets/DIR.txt",
            "unsourceable": "Ships in the release archive next to the binary that loads it"
          },
          {
            "bundled": true,
            "description": "Player 2 light gun crosshair texture",
            "name": "p2crosshair.bmp",
            "note": "Read in the same call as the player 1 bitmap and equally fatal when it fails to load.",
            "path": "Assets/p2crosshair.bmp",
            "required": true,
            "size": 295992,
            "source_ref": "Src/OSD/SDL/Crosshair.cpp:35, 49-51, Src/OSD/SDL/Main.cpp:2563-2569",
            "unsourceable": "Ships in the release archive next to the binary that loads it"
          },
          {
            "bundled": true,
            "description": "Custom MPEG music track map",
            "name": "Music.xml",
            "note": "Consulted only for a game with a DSB1 or DSB2 board, and skipped when the file is absent. Maps an MPEG ROM offset to an MP3 the user supplies.",
            "path": "Config/Music.xml",
            "required": false,
            "source_ref": "Src/OSD/SDL/Main.cpp:118, 967, Src/Sound/MPEG/MpegAudio.cpp:88-108",
            "unsourceable": "Ships in the release archive as a template whose every example sits inside a dummy comment tag"
          }
        ],
        "mode": "standalone",
        "notes": "Fork of Supermodel adding delay based netplay, session replay with mid replay\ntakeover, a training mode, and a launcher binary built from Frontend/. The\nemulator side is upstream merged forward: the dojo branch takes trzy/Supermodel\nat 77d28ee of 2026-05-28 through merge 627f023, and the commits after it are\nlauncher fixes. The two repositories are not linked on GitHub, so the pin is\nread from the merge itself, whose second parent 77d28ee resolves in both trees\nwhile the first does not.\nref: README.md:4-20, Makefiles/Rules.inc:179-186\n\nWindows and macOS return relative names, Config/, Assets/, NVRAM/, Saves/,\nresolved against the working directory, which is where the release archive puts\nthem and where ES-DE starts the process. Linux uses the working directory when\nno home directory resolves, $HOME/.supermodel-dojo/<dir> when that directory\nexists, otherwise $HOME/.config/supermodel-dojo/Config and\n$HOME/.local/share/supermodel-dojo/<dir> under the XDG variables, and falls back\nto the Config/Games.xml and Assets/ sitting next to the binary when the home copy\nis absent. Replays/ is a path type there and a working directory folder on Windows.\nref: Src/OSD/Windows/FileSystemPath.cpp:28-56, Src/OSD/OSX/FileSystemPath.cpp:28-54,\n     Src/OSD/Unix/FileSystemPath.cpp:63-77, 127-138, 141-195, Src/Dojo/Replay.cpp:24-30,\n     es-de resources/systems/windows/es_systems.xml:171\n\nROM sets are MAME format per game archives identified by the CRC32 values in\nGames.xml, 63 sets at this revision. A parent set holds the ROMs a regional\nvariant reuses, a relation between versions of one game rather than a shared\nBIOS: a split child archive makes the loader open <parent>.zip from the same\ndirectory. Each Model 3 board carries its own program, video, sound and drive\nboard ROMs, so no system ROM is read outside those archives.\nref: Config/Games.xml, Src/GameLoader.cpp:325-560, Src/GameLoader.cpp:979-1010\n\nThe emulator writes and reads back its own Supermodel.ini, generated from the\nbuilt in Dojo defaults whenever it is absent, plus NVRAM/<game>.nv,\nSaves/<game>.st<slot> and Replays/<game>_<timestamp>.supr with a .st0 sidecar\nwhen the session starts from a save state.\nref: Src/OSD/SDL/Main.cpp:1572-1592, 2425, 713-741, 775-798,\n     Src/OSD/DojoConfigFile.h:31, Src/Dojo/Replay.cpp:19-50\n\nTwo reads take a path the user chooses and have no fixed name: the MP3 tracks\nnamed inside Music.xml, and external GLSL vertex and fragment shaders for the\nlegacy 3D engine, whose config keys are empty by default so the built in shader\nsource is compiled instead.\nref: Src/Sound/MPEG/MpegAudio.cpp:71-86, Src/OSD/SDL/Main.cpp:1692-1693,\n     Src/Graphics/Shader.cpp:93-99\n\nThe repository publishes two release trains. The Dojo builds carry the\ndojo-preview tags, Preview 6 of 2025-04-27 being the current one, and ship\nsupermodel.exe, the dojo.exe launcher, Assets/ and Config/. The\nv0.3a-<date>-git-<rev> releases come from a workflow that fires only on the\nmaster branch, which tracks upstream: the archive of 2026-06-25 holds Games.xml,\nMusic.xml and both crosshair names in its binary and none of the Dojo strings.\nA build stamps its version from the commit date and short sha, and the tree\nfalls back to 0.3a-WIP.\nref: .github/workflows/release.yml:4-5, .github/workflows/release.yml:21,\n     Makefiles/Rules.inc:289-291, Src/Version.h:32\n\nES-DE reaches it through the SUPERMODEL-DOJO find rule, present in the Windows\nset alone among the seven, for the arcade, mame and model3 systems.\nref: es-de resources/systems/windows/es_find_rules.xml:1107-1116,\n     es-de resources/systems/windows/es_systems.xml:171, 1068, 1220\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/blueminder/supermodel-dojo",
        "source_commit": "ff8cde225298fe5c4ad47fba3c581b2cd19ffc41",
        "systems": [
          "sega-model3"
        ],
        "type": "standalone",
        "upstream": "https://github.com/trzy/Supermodel",
        "upstream_commit": "77d28eec84a5ededaa23bb31bc74db631cbe5530",
        "verification": "existence"
      }
    },
    {
      "id": "superzsnes",
      "profile": {
        "core_classification": "other",
        "core_version": "v0.230b",
        "cores": [
          "superzsnes",
          "SUPERZSNES"
        ],
        "display_name": "Nintendo - SNES / SFC (SUPER ZSNES)",
        "emulator": "SUPER ZSNES",
        "files": [
          {
            "aliases": [
              "SNES_dsp1b.rom"
            ],
            "crc32": "465c4e1c",
            "description": "NEC uPD7725 DSP-1B microcode",
            "name": "dsp1b.rom",
            "note": "Default for every DSP cartridge with no table entry, so it covers DSP-1 and DSP-1A titles as well. A mismatched CRC32 warns and the data is used anyway.",
            "required": true,
            "size": 8192,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:88-89 (name and expected CRC32 1180454428), DSP1.cs:151-155 (compare, warn on mismatch), Assets/Scripts/SpecialChips/DSP1Core.cs:756-769 (8192-byte layout)",
            "system": "nintendo-snes",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "SNES_dsp2.rom"
            ],
            "description": "NEC uPD7725 DSP-2 microcode",
            "name": "dsp2.rom",
            "note": "Selected for header title 'DUNGEON MASTER' (Dungeon Master).",
            "required": true,
            "size": 8192,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 1, title CRC32 0x84690f8b)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_dsp3.rom"
            ],
            "description": "NEC uPD7725 DSP-3 microcode",
            "name": "dsp3.rom",
            "note": "Selected for the half-width katakana header title of SD Gundam GX, 'SD' then $B6 $DE $DD $C0 $DE $D1 then 'GX'.",
            "required": true,
            "size": 8192,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 2, title CRC32 0xfa7f8076)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_dsp4.rom"
            ],
            "description": "NEC uPD7725 DSP-4 microcode",
            "name": "dsp4.rom",
            "note": "Selected for header title 'TOP GEAR 3000' (Top Gear 3000).",
            "required": true,
            "size": 8192,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 3, title CRC32 0x42578645)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st010.rom"
            ],
            "description": "Seta ST010 microcode",
            "name": "st010.rom",
            "note": "Selected for header title 'F1 ROC II' with $00 as the 21st byte (F1 ROC II: Race of Champions).",
            "required": true,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 4, title CRC32 0x04e7aca6)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st011.rom"
            ],
            "description": "Seta ST011 microcode",
            "name": "st011.rom",
            "note": "Selected for header title '2DAN MORITA SHOUGI' with $00 as the 21st byte (Hayazashi Nidan Morita Shougi).",
            "required": true,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 5, title CRC32 0xc96d71c1)",
            "system": "nintendo-snes"
          },
          {
            "aliases": [
              "SNES_st018.rom"
            ],
            "description": "Seta ST018 firmware",
            "name": "st018.rom",
            "note": "Selected for header title 'NIDAN MORITASHOGI2' (Hayazashi Nidan Morita Shougi 2).",
            "required": true,
            "source_ref": "Assets/Scripts/SpecialChips/DSP1.cs:98-114 (table lookup, no CRC32 check), SUPERZSNES_Data/level0 (VersionNo.dspDetections entry 6, title CRC32 0x85885c5e)",
            "system": "nintendo-snes"
          }
        ],
        "mode": "standalone",
        "notes": "Super Famicom emulator by zsKnight and _Demo_, written from scratch with a\nGPU-rendered PPU and unrelated to the ZSNES codebase. Shipped as binaries\nonly, for Windows, macOS, Linux and Android; the desktop builds are Unity\nMono, so the emulator is Assembly-CSharp.dll and the per-game tables are\nserialized into the level0 scene. The Windows and Linux 0.230b builds carry\nthe same tables and the same emulation sources.\n\nOne NEC uPD7725 interpreter serves every cartridge whose header declares a\nDSP. RomLoader.GetROMType reads the cartridge type byte at $FFD6 and returns\nCOProcessorType.DSP when the low nibble is 3 to 6 and the high nibble is 0,\nor when the high nibble is F and the subtype byte at $FFBF is 1 or 2.\nMainMemoryMap.InitSpecialChips builds the DSP1 object for that type alone.\nThe DSP1 constructor picks the filename from a table keyed on the CRC32 of\nthe 21 raw header title bytes, taken as Latin-1 and re-encoded UTF-8,\nfalling back to dsp1b.rom when no entry matches. Words are assembled little\nendian, 2048 24-bit program words from offset 0 then 1024 16-bit data words\nfrom offset 6144.\n\nThree locations are tried in order: the folder holding the loaded ROM, the\nUnity persistent data folder (ZEMU Software Inc./SUPERZSNES), then the\nfolder holding the executable. None of them goes through the srm and bps\npath overrides. When all three miss, a \"Need DSP ROM\" dialog names the file\nand the chip runs on a zero-filled 8192-byte buffer.\n\nNo other file is read. SA-1, SPC7110, S-RTC, Cx4, OBC-1, Super Game Boy and\nthe ST01x and ST018 enum entries build no chip, the SPC700 IPL is a 64-byte\narray in CPUSPC700, and the enhancement data, the audio replacement data and\ntestgame.smc are Unity resources inside the build. Save RAM, save states,\ncheats, bps patches and MSU-1 packs are all named after the loaded ROM.\n",
        "profiled_date": "2026-08-08",
        "source": "https://www.zsnes.com",
        "systems": [
          "nintendo-snes"
        ],
        "type": "standalone",
        "upstream": "https://www.zsnes.com"
      }
    },
    {
      "id": "suyu",
      "profile": {
        "analysis_commit": "c096d16 (Hengle/suyu-emu mirror, depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "community_fork",
        "core_version": "Yuzu EA 4176 based",
        "cores": [
          "suyu"
        ],
        "display_name": "Suyu (Nintendo Switch)",
        "emulator": "Suyu",
        "files": [
          {
            "mode": "standalone",
            "name": "prod.keys",
            "note": "Production keys for NCA decryption (master, key area, header, titlekek)",
            "path": "switch/",
            "required": true,
            "source_ref": "src/core/crypto/key_manager.cpp:654"
          },
          {
            "mode": "standalone",
            "name": "title.keys",
            "note": "Per-title encryption keys (rights_id to titlekey mappings)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:657"
          },
          {
            "mode": "standalone",
            "name": "console.keys",
            "note": "Console-specific keys (BIS, SD seed)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:658"
          },
          {
            "mode": "standalone",
            "name": "key_retail.bin",
            "note": "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)",
            "path": "switch/",
            "required": false,
            "size": 160,
            "source_ref": "src/core/hle/service/nfc/common/amiibo_crypto.cpp:273-294"
          }
        ],
        "mode": "standalone",
        "notes": "Suyu is a standalone Nintendo Switch emulator, community fork of yuzu after legal takedown.\ndev.keys can be used instead of prod.keys when use_dev_keys is enabled (for Switch dev units).\nFirmware (system NCAs) must be installed through Suyu's UI from a firmware ZIP or NCA folder.\nRequired for commercial games. Homebrew (.nro, .nso) can run without keys or firmware.\nOriginal repos DMCA'd by Nintendo. Analysis performed from community mirror (Hengle/suyu-emu).\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/suyu-emu/suyu",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://github.com/suyu-emu/suyu"
      }
    },
    {
      "id": "swan-emu",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.5.85",
        "cores": [
          "swan-emu",
          "Swan.emu",
          "SWAN-EMU"
        ],
        "display_name": "Bandai - WonderSwan / Color (Swan.emu)",
        "emulator": "Swan.emu",
        "files": [],
        "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 (Swan.emu/ios.mk, Swan.emu/pandora.mk). Published as\ncom.explusalpha.SwanEmu (Swan.emu/metadata/conf.mk:2,6,7) and reached by ES-DE\nthrough its SWAN-EMU find rule, which only the Android rule set carries.\nMednafen's WonderSwan module, itself descended from Cygne, is vendored under\nSwan.emu/src/wswan (Swan.emu/metadata/conf.mk:8,\nSwan.emu/src/main/AppMeta.cc:27) on the 1.32 line\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the\napp's own video, audio, input and save layers. Three files differ from the\nMednafen 1.32.1 release: the pixel format and sound rate hooks move to the app\nand the button latch is dropped for a value the input layer writes directly,\nthe save file calls are removed from loading and closing, and the SRAM and\nEEPROM writes signal the app's backup memory\n(Swan.emu/src/wswan/main.cpp:91,95, Swan.emu/src/main/Main.cc:96,104,119,\nSwan.emu/src/main/input.cc:97,102, Swan.emu/src/wswan/memory.cpp:160-164,\nSwan.emu/src/wswan/eeprom.cpp:164-169). The debugger and the disassembler are\nleft out of the build (Swan.emu/src/CMakeLists.txt:6-22). Content is read from\n.ws, .wsc and .bin files (Swan.emu/metadata/conf.mk:5,\nSwan.emu/src/main/AppMeta.cc:30); an archive is opened by the framework, which\nkeeps the first entry passing that same filter\n(EmuFramework/src/EmuSystem.cc:394-412).\n\nThe content image is the only one the app loads. It is read into a 64 MiB\nbuffer, refused under 64 KiB or over 64 MiB, rounded up to 64 KiB then to a\npower of two with the image sitting at the end of the buffer, and hashed for\nthe save file names (Swan.emu/src/main/Main.cc:91-97,\nEmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146,\nSwan.emu/src/wswan/main.cpp:236-257,294-299). Byte 5 of the footer selects\neither an EEPROM of 128, 1024 or 2048 bytes or battery RAM of 8 KiB to 512 KiB\n(Swan.emu/src/wswan/main.cpp:317-333). A 512 KiB image carrying ELISA at\n0x70000 whose last 16 bytes hash to crc32 0x0d05ed64, minus three blacklisted\nimages, is taken for WonderWitch firmware and read as content\n(Swan.emu/src/wswan/main.cpp:273-291,351-352).\n\nNo boot ROM is read. Reset writes a built-in table of 200 power-on values to\nthe I/O ports, less the four EEPROM data ports\n(Swan.emu/src/wswan/start.inc:12,\nSwan.emu/src/wswan/main.cpp:66-70) and the memory reset writes at 0x75AC the\neight identifier bytes the boot ROM would have left\n(Swan.emu/src/wswan/memory.cpp:801-808). The internal EEPROM is a built-in\n0x400 byte image copied at init, then personalized in place with the name,\nbirth date, sex and blood type of the WonderSwan User Profile menu; the\nlanguage flag reaches the hardware the same way\n(Swan.emu/src/wswan/eeprom.cpp:31,33,183-214,\nSwan.emu/src/wswan/memory.cpp:748-772, Swan.emu/src/wswan/main.cpp:377,\nSwan.emu/src/main/EmuMenuViews.cc:34-155,\nSwan.emu/src/main/options.cc:117-165).\n\nNo firmware path exists by construction: the app answers Mednafen's file name\nrequest for save states, saves and save backups only, and any other kind ends\nin unreachable() (Swan.emu/src/main/options.cc:179-189). The module's own save\nreader and writer, which would open a .sav and, for WonderWitch, a 524288 byte\n.flash image, are unreachable, both call sites of the Mednafen release having\nbeen removed from loading and closing (Swan.emu/src/wswan/memory.cpp:674-740,\nSwan.emu/src/wswan/main.cpp:223-226,377-379). The comms setting is answered\nfalse and its program path empty, so the serial link never forks a helper\n(Swan.emu/src/main/options.cc:159-160,173-174,\nSwan.emu/src/wswan/main.cpp:379, Swan.emu/src/wswan/comm.cpp:40-71). Cheat\nloading and IPS patching are compiled in from the shared Mednafen sources and\ncalled from nowhere (EmuFramework/src/shared/CMakeLists.txt:11-12,\nEmuFramework/src/shared/mednafen/mempatcher.cpp:251-254,\nEmuFramework/src/shared/mednafen/file.cpp:38-53), and the music rip player\nroutines are stubs (EmuFramework/src/shared/mednafen-emuex/MDFNApi.cc:87-88,\nSwan.emu/src/wswan/main.cpp:259-268).\n\nPer content the app writes and reads back one .sav holding the EEPROM followed\nby the battery RAM, plus save states and SwanEmu.config\n(Swan.emu/src/main/Main.cc:47-54,56-82, Swan.emu/src/main/system.ccm:155,\nSwan.emu/src/main/AppMeta.cc:28,\nEmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:76-122,\nEmuFramework/src/EmuSystem.cc:168-172). ui.png, gpOverlay.png and the shader\nsources are drawn from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:58-70,\nEmuFramework/src/VideoImageEffect.cc:163-173), as is the interface font on a\nbuild without fontconfig (imagine/src/font/FreetypeFont.cc:271-289). The app\ndeclares no bundled content, the framework definition defaulting to an empty\nspan (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": [
          "bandai-wswan",
          "bandai-wswanc"
        ],
        "type": "standalone",
        "upstream": "https://mednafen.github.io/"
      }
    },
    {
      "id": "swanstation",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.1",
        "cores": [
          "swanstation"
        ],
        "display_name": "Sony - PlayStation (SwanStation)",
        "emulator": "swanstation",
        "files": [
          {
            "aliases": [],
            "description": "SCPH-5500 (v3.0 09-09-96 J)",
            "hle_fallback": true,
            "md5": "8dd7d5296a650fac7319bce665a6a53c",
            "name": "scph5500.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "src/core/bios.cpp:49",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "aliases": [],
            "description": "SCPH-5501, 5503, 7003 (v3.0 11-18-96 A)",
            "hle_fallback": true,
            "md5": "490f666e1afb15b7362b406ed1cea246",
            "name": "scph5501.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "src/core/bios.cpp:50-51",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "aliases": [],
            "description": "SCPH-5502, 5552 (v3.0 01-06-97 E)",
            "hle_fallback": true,
            "md5": "32736f17079d0b2b7024407c39bd3050",
            "name": "scph5502.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "src/core/bios.cpp:52-53",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "aliases": [],
            "description": "PSP, SCPH-1000R (v4.5 05-25-00 J)",
            "hle_fallback": true,
            "md5": "c53ca5908936d412331790f4426c6c33",
            "name": "psxonpsp660.bin",
            "region": [
              "world"
            ],
            "required": false,
            "size": 524288,
            "source_ref": "src/core/bios.cpp:67-68",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "aliases": [],
            "description": "PS3 embedded PS1 BIOS (v5.0 06-23-03 A)",
            "hle_fallback": true,
            "md5": "81bbe60ba7a3d1cea1d48c14cbcc647b",
            "name": "ps1_rom.bin",
            "note": "Accepts PS1 (512KB), PS2 (4MB), and PS3 (0x3E66F0) sizes. Only first 512KB used.",
            "region": [
              "world"
            ],
            "required": false,
            "size": [
              524288,
              4194304,
              4089584
            ],
            "source_ref": "src/core/bios.h:9, src/core/bios.cpp:69-70, src/core/bios.cpp:81-90",
            "validation": [
              "size",
              "md5"
            ]
          }
        ],
        "notes": "Fork of DuckStation maintained by the libretro community after stenzek removed\nlibretro support. Frozen at an early DuckStation state.\n\nBoot loads a BIOS image; when none is found a built-in OpenBIOS copy\n(dep/openbios) boots instead.\nref: src/core/system.cpp:650,678-682\n\nAuto-detects BIOS by scanning system_dir for files of known sizes.\nref: src/core/host_interface.cpp:136-194 (FindBIOSImageInDirectory)\nAccepts PS1 (512 KB), PS2 (4 MB), and PS3 (0x3E66F0) BIOS images.\nOnly the first 512 KB are loaded (bios.cpp:84, Image(BIOS_SIZE)).\nref: src/core/bios.h:9 (BIOS_SIZE=0x80000, BIOS_SIZE_PS2=0x400000, BIOS_SIZE_PS3=0x3E66F0)\n\n27 known BIOS entries identified by MD5 hash.\nref: src/core/bios.cpp:28-71 (s_image_infos)\nEach entry has: description, region, hash, patch_compatible flag.\n\nUpstream DuckStation has evolved significantly (105 entries, PS2 BIOS, OpenBIOS,\npriority system). SwanStation is frozen at the fork point.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/swanstation",
        "source_commit": "5430a4a53b89fa5827c97b84ada29d23317245bc",
        "systems": [
          "sony-playstation"
        ],
        "type": "libretro",
        "upstream": "https://github.com/stenzek/duckstation"
      }
    },
    {
      "id": "swf-player",
      "profile": {
        "author": "issess.net",
        "core_classification": "launcher",
        "core_version": "1.90 free (build 507)",
        "cores": [
          "swf-player",
          "SWF Player",
          "SWF-PLAYER"
        ],
        "display_name": "Adobe Flash (SWF Player)",
        "emulator": "SWF Player",
        "exclusion_note": "Four files the package carries are left out because no code path opens them. The assets cached.swf, Hello2.swf and empty.html are named in no class; the cached.swf the AIR runtime reads is the copy of the user's movie written into the cache, not the one in the assets. libysshared.so, which exports only ysEncrypt and ysDecrypt, is loaded by nothing: the three loadLibrary calls in the package name swfplayer, c++_shared and Core, no library declares it as a DT_NEEDED, and its soname appears nowhere in the class tree. The market link to com.adobe.flashplayer is not a dependency either, being an intent to the store page rather than a load of Adobe's plugin.\n",
        "files": [
          {
            "bundled": true,
            "description": "Ruffle web loader and polyfill, nightly 2024-08-26",
            "md5": "c0263e609d1aef85891d56d6467a429c",
            "name": "ruffle.js",
            "note": "The only script the generated page includes. It replaces the shockwave-flash object with a Ruffle player and selects one of the two cores below by WebAssembly feature detection. Absent, nothing claims the object element and the page renders its fallback content instead, which reports back through CallJava.notInstalled.",
            "path": "assets/ruffle/ruffle.js",
            "required": true,
            "sha1": "c58c63e0ae8396018fd71f0fa7ebd4f8eb4f139f",
            "size": 344533,
            "source_ref": "assets/contents.html:28, FlashPlayerActivity.java:305 (/ruffle/ mapped to the package assets)",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Ruffle core bindings, WebAssembly extensions build",
            "md5": "5b1d64812875a1341ebd2a611e9324a1",
            "name": "core.ruffle.1c418e86b251861b5eca.js",
            "note": "Glue for the SIMD core, webpack module 791. Loaded on a device whose WebAssembly engine carries the extensions, which is what is_wasm_simd_used reports back.",
            "path": "assets/ruffle/core.ruffle.1c418e86b251861b5eca.js",
            "required": true,
            "sha1": "0eabbed786f3b8e5656d123e9f4573f918ba63d8",
            "size": 90386,
            "source_ref": "assets/ruffle/ruffle.js webpack module 791, assets/ruffle/core.ruffle.1c418e86b251861b5eca.js is_wasm_simd_used",
            "system": "flash",
            "unsourceable": "ships inside the application package",
            "variant_group": "ruffle-core"
          },
          {
            "bundled": true,
            "description": "Ruffle core, WebAssembly extensions build",
            "md5": "834f85979115fd740943a782887d0ab0",
            "name": "75a2b30a5d3fb1a3431d.wasm",
            "note": "The player itself for devices with the extensions. Its target features record simd128, which the baseline build below does not carry.",
            "path": "assets/ruffle/75a2b30a5d3fb1a3431d.wasm",
            "required": true,
            "sha1": "d27da38e4d37727a44bf04d7690a09135fad7115",
            "size": 13107470,
            "source_ref": "assets/ruffle/ruffle.js webpack module 791",
            "system": "flash",
            "unsourceable": "ships inside the application package",
            "variant_group": "ruffle-core"
          },
          {
            "bundled": true,
            "description": "Ruffle core bindings, baseline build",
            "md5": "5aee868a91c066cc15f8b06999af690b",
            "name": "core.ruffle.9fa2f1e6feaba5f6767a.js",
            "note": "Glue for the core without WebAssembly extensions, webpack module 797. Loaded when the device does not report them.",
            "path": "assets/ruffle/core.ruffle.9fa2f1e6feaba5f6767a.js",
            "required": true,
            "sha1": "45815723a1bdf4229e289906bf4e52dbfd78da56",
            "size": 94169,
            "source_ref": "assets/ruffle/ruffle.js webpack module 797, assets/ruffle/core.ruffle.9fa2f1e6feaba5f6767a.js is_wasm_simd_used",
            "system": "flash",
            "unsourceable": "ships inside the application package",
            "variant_group": "ruffle-core"
          },
          {
            "bundled": true,
            "description": "Ruffle core, baseline build",
            "md5": "fe843bd0152c714f0449493b0193108f",
            "name": "9541e862775deeb49470.wasm",
            "note": "The player itself for devices without the WebAssembly extensions.",
            "path": "assets/ruffle/9541e862775deeb49470.wasm",
            "required": true,
            "sha1": "fea8e60e86cba7a63258626b13e6adb69ed110f9",
            "size": 13323601,
            "source_ref": "assets/ruffle/ruffle.js webpack module 797",
            "system": "flash",
            "unsourceable": "ships inside the application package",
            "variant_group": "ruffle-core"
          },
          {
            "bundled": true,
            "description": "Template of the page the WebView loads",
            "md5": "39c997db73db15a6807b35f148fcc85a",
            "name": "contents.html",
            "note": "Read from the assets on every launch and rewritten into <cache>/assetLoader/swf.html with the movie URL and the display preferences substituted. It carries the ruffle.js include and the object element. Unreadable, the generator returns null and the WebView is pointed at a page with no movie in it.",
            "path": "assets/contents.html",
            "required": true,
            "sha1": "0aaf20633888d2d0a2da38e82773cb5d44e840eb",
            "size": 2421,
            "source_ref": "a2/b.java:327-333, FlashPlayerActivity.java:276-291",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Adobe AIR application descriptor, namespace 3.8",
            "md5": "de36d0dc1b74a39be2313749138d4d00",
            "name": "application.xml",
            "note": "Copied out of the assets into <cache>/app/<uniqueappversionid>/assets/META-INF/AIR/ before the AIR engine starts, and read from there by the runtime. It declares cached.swf as the initial window content, which is the name the movie is copied under, plus fullscreen, gpu rendering and auto orientation.",
            "path": "assets/META-INF/AIR/application.xml",
            "required": true,
            "sha1": "bc283d9ad8ad3bb99b632ca5b194a5bf27df1c22",
            "size": 1377,
            "source_ref": "BaseActivity.java:616-630, assets/META-INF/AIR/application.xml:19,27-35",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Adobe AIR 51.1.1.3 captive runtime",
            "md5": "7fa4474455635584fa683167ee7e948f",
            "name": "libCore.so",
            "note": "The AIR player, loaded by path first and then by name from the package. The runtime is captive: the wrapper classes live in the application's own dex and the library beside them, so no separate AIR package is consulted. The armeabi-v7a build of the same version is 14808220 bytes. Version read back from the library as \"AND 51,1,1,3\".",
            "path": "lib/arm64-v8a/libCore.so",
            "required": true,
            "sha1": "d6d91ca32cbceda054851e9aa78c2e9286bd8812",
            "size": 20951456,
            "source_ref": "AndroidActivityWrapper.java:455-481, AirPlayerBaseActivity.java:59-70",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "NDK C++ runtime for the AIR runtime",
            "md5": "77f7b0c9bba5c0b4c4339bc655d5613a",
            "name": "libc++_shared.so",
            "note": "Named by the wrapper ahead of the runtime itself, by path and then by name, and listed as a DT_NEEDED of libCore.so. The armeabi-v7a build is 657000 bytes.",
            "path": "lib/arm64-v8a/libc++_shared.so",
            "required": true,
            "sha1": "8db47ede06074dec3fbc05b69eb75f8c1c5e71a8",
            "size": 1058904,
            "source_ref": "AndroidActivityWrapper.java:459,472-478",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "JNI library of the application",
            "md5": "1301640830c754d20384243c97bd7854",
            "name": "libswfplayer.so",
            "note": "Loaded from the static initializer of the AIR activity's base class, so its absence stops that activity from being created. It exports one symbol, Java_com_issess_flashplayer_stringFromJNI, which nothing calls. The armeabi-v7a build is 2688 bytes.",
            "path": "lib/arm64-v8a/libswfplayer.so",
            "required": true,
            "sha1": "6118faa7947eb7abf4326f08f5ba94ab61e42808",
            "size": 3896,
            "source_ref": "AirPlayerBaseActivity.java:31-33",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Sample movie",
            "md5": "3d801b57e0b9e1a84d9cf28ef7505b3c",
            "name": "sample1.swf",
            "note": "Unpacked into <cache>/assetLoader on the sample list screen, then opened through a chooser like any other movie so either engine can take it.",
            "path": "assets/sample1.swf",
            "required": false,
            "sha1": "5194da518b3bbc77204e481c2cfed0381cf5df41",
            "size": 5889,
            "source_ref": "SampleListFragment.java:65-81, 109-117",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Sample movie",
            "md5": "c583c7db1c5456c0d9307d5f510a63f0",
            "name": "sample2.swf",
            "note": "Unpacked and opened on the same path as sample1.swf.",
            "path": "assets/sample2.swf",
            "required": false,
            "sha1": "bef0ab96169418441f43b9dae2ec92a990b89ade",
            "size": 54675,
            "source_ref": "SampleListFragment.java:65-81, 109-117",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          },
          {
            "bundled": true,
            "description": "Sample movie",
            "md5": "505834e937b0bd061695ff34f40301cb",
            "name": "sample3.swf",
            "note": "Unpacked and opened on the same path as sample1.swf.",
            "path": "assets/sample3.swf",
            "required": false,
            "sha1": "f5992aebd3ba298f6564681592be8b4626e89158",
            "size": 23563,
            "source_ref": "SampleListFragment.java:65-81, 109-117",
            "system": "flash",
            "unsourceable": "ships inside the application package"
          }
        ],
        "mode": "standalone",
        "notes": "Android package com.issess.flashplayer, closed source, published on Google Play and\nreached by ES-DE through its SWF-PLAYER find rule. The build read here is 1.90 free\n(build 507), versionCode 507, arm64-v8a and armeabi-v7a, sha256\n0a56e74d0f8bfdfbd984ce1b8aa2a700203fdd051f3aece3c95fb17f45d4383b, signed v1 and v2 with\nthe developer certificate O=issess.com, CN=issess, sha256\nc3a222b4339f9dde3a770bc1d0ceb551fa96e554679cdbd2056aadd0f1b843c8. Line numbers below are\nthose of that package: jadx output for the classes, the shipped file itself for\ncontents.html. The paid package com.issess.flashplayerpro, the other entry of the same\nfind rule, is built from this class tree, its activity being spelled\ncom.issess.flashplayer.player.FlashPlayerActivity. No genuine copy of it was obtainable:\napkpure and apkcombo bounce the download of a paid app, apkvision holds none, mi9 serves\nzero bytes and archive.org has no item for either package.\n\nTwo engines ship in the package, one activity each, both exported and both answering\nandroid.intent.action.VIEW for application/swf, application/x-shockwave-flash and\nvideo/x-flv. FlashPlayerActivity is labelled \"SWF Player by Ruffle\" and runs the movie\nin a WebView; AirPlayerActivity is labelled \"SWF Player by AdobeAIR\", lives in a :air\nprocess and drives a captive Adobe AIR runtime. ES-DE names the first one and passes the\nmovie as the content URI of its own provider, so it always gets the Ruffle engine.\nref: AndroidManifest.xml activity com.issess.flashplayer.player.FlashPlayerActivity and\n     .AirPlayerActivity, string play_ruffle_player, play_air_player, using_ruffle_plugin,\n     using_air_plugin\n\nThe movie itself never stays where the user put it. BaseActivity.E reads the intent Uri\nthrough the content resolver, or opens the path directly for a file:// intent, and writes\nthe bytes twice: to <cache>/assetLoader/cached.swf for the WebView engine and to\n<cache>/app/<uniqueappversionid>/assets/cached.swf for the AIR engine, next to a copy of\nthe bundled AIR descriptor. The AIR name is fixed because the descriptor declares\ncached.swf as its initial window content. A run with no Uri falls back to the last_swf\npreference.\nref: BaseActivity.java:607-654, BaseActivity.java:594-605 (uniqueappversionid),\n     a2/b.java:86-92 (asset copy), a2/b.java:115 (stream copy),\n     assets/META-INF/AIR/application.xml:28\n\nThe Ruffle engine serves everything over a virtual host. FlashPlayerActivity.g0 writes\n<cache>/assetLoader/swf.html from the bundled contents.html template, substituting the\nmovie URL and the wmode, scale, quality, background and density preferences;\nFlashPlayerActivity.h0 builds a WebViewAssetLoader on the domain localhost.issess.net\nmapping /ruffle/ to the package assets and / to that cache directory; i0 then loads\nhttps://localhost.issess.net/swf.html one second later. The template pulls\n/ruffle/ruffle/ruffle.js, which resolves to assets/ruffle/ruffle.js, and declares the\nmovie as a plain <object type=\"application/x-shockwave-flash\">, which the Ruffle polyfill\ntakes over. Ruffle is the web build, nightly 2024-08-26, commit\nc869505e88f792b1b6691cd8d6f0185bde4c21b9. The player controls are JavaScript calls on\nthat object and the frame counter comes back through the CallJava bridge.\nref: FlashPlayerActivity.java:262-291, 293-310, 312-346, 154, 349-386,\n     a2/b.java:327-373, c1/i.java:22-40 (assets handler), c1/i.java:77-95 (cache handler),\n     assets/contents.html:28,35-49, assets/ruffle/ruffle.js versionName field\n\nNothing is read from outside the package. The one mention of Adobe's own player is a main\nlist row that opens market://details?id=com.adobe.flashplayer, a store link that loads no\nfile, and the \"Flash Player Not Found!\" branch with its CallJava.notInstalled callback is\nthe fallback content of the object element, reached only when neither a plugin nor the\npolyfill claims it. No plugin binary, BIOS, firmware or key is named anywhere in the\nclass tree, and ES-DE's own table records no BIOS for this system.\nref: MainListFragment.java:360, a2/b.java:452-468 (market intent),\n     assets/contents.html:50-60, FlashPlayerActivity.java:179-183,\n     ES-DE ANDROID.md:928\n",
        "profiled_date": "2026-08-12",
        "source": "https://play.google.com/store/apps/details?id=com.issess.flashplayer",
        "systems": [
          "flash"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "syobonaction",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.3",
        "cores": [
          "syobonaction"
        ],
        "display_name": "Syobon Action",
        "emulator": "Syobon Action",
        "files": [
          {
            "category": "game_data",
            "description": "Player character sprites",
            "name": "player.PNG",
            "path": "SyobonAction/res/player.PNG",
            "required": true,
            "source_ref": "loadg.cpp:40"
          },
          {
            "category": "game_data",
            "description": "Block tileset",
            "name": "brock.PNG",
            "path": "SyobonAction/res/brock.PNG",
            "required": true,
            "source_ref": "loadg.cpp:42"
          },
          {
            "category": "game_data",
            "description": "Item sprites",
            "name": "item.PNG",
            "path": "SyobonAction/res/item.PNG",
            "required": true,
            "source_ref": "loadg.cpp:44"
          },
          {
            "category": "game_data",
            "description": "Enemy sprites",
            "name": "teki.PNG",
            "path": "SyobonAction/res/teki.PNG",
            "required": true,
            "source_ref": "loadg.cpp:46"
          },
          {
            "category": "game_data",
            "description": "Background graphics",
            "name": "haikei.PNG",
            "path": "SyobonAction/res/haikei.PNG",
            "required": true,
            "source_ref": "loadg.cpp:48"
          },
          {
            "category": "game_data",
            "description": "Alternate block tileset",
            "name": "brock2.PNG",
            "path": "SyobonAction/res/brock2.PNG",
            "required": true,
            "source_ref": "loadg.cpp:50"
          },
          {
            "category": "game_data",
            "description": "Bonus sprites",
            "name": "omake.PNG",
            "path": "SyobonAction/res/omake.PNG",
            "required": true,
            "source_ref": "loadg.cpp:52"
          },
          {
            "category": "game_data",
            "description": "Bonus sprites (set 2)",
            "name": "omake2.PNG",
            "path": "SyobonAction/res/omake2.PNG",
            "required": true,
            "source_ref": "loadg.cpp:54"
          },
          {
            "category": "game_data",
            "description": "Title screen",
            "name": "syobon3.PNG",
            "path": "SyobonAction/res/syobon3.PNG",
            "required": true,
            "source_ref": "loadg.cpp:56"
          },
          {
            "category": "game_data",
            "description": "Sazanami Gothic Japanese font for text rendering",
            "name": "sazanami-gothic.ttf",
            "path": "SyobonAction/res/sazanami-gothic.ttf",
            "required": true,
            "source_ref": "DxLib.cpp:73"
          },
          {
            "category": "game_data",
            "description": "Field stage music",
            "name": "field.ogg",
            "path": "SyobonAction/BGM/field.ogg",
            "required": false,
            "source_ref": "loadg.cpp:220"
          },
          {
            "category": "game_data",
            "description": "Dungeon stage music",
            "name": "dungeon.ogg",
            "path": "SyobonAction/BGM/dungeon.ogg",
            "required": false,
            "source_ref": "loadg.cpp:221"
          },
          {
            "category": "game_data",
            "description": "Star power music",
            "name": "star4.ogg",
            "path": "SyobonAction/BGM/star4.ogg",
            "required": false,
            "source_ref": "loadg.cpp:222"
          },
          {
            "category": "game_data",
            "description": "Castle stage music",
            "name": "castle.ogg",
            "path": "SyobonAction/BGM/castle.ogg",
            "required": false,
            "source_ref": "loadg.cpp:223"
          },
          {
            "category": "game_data",
            "description": "Puyo stage music",
            "name": "puyo.ogg",
            "path": "SyobonAction/BGM/puyo.ogg",
            "required": false,
            "source_ref": "loadg.cpp:224"
          },
          {
            "category": "game_data",
            "description": "Jump sound",
            "name": "jump.ogg",
            "path": "SyobonAction/SE/jump.ogg",
            "required": false,
            "source_ref": "loadg.cpp:228"
          },
          {
            "category": "game_data",
            "description": "Block break sound",
            "name": "brockbreak.ogg",
            "path": "SyobonAction/SE/brockbreak.ogg",
            "required": false,
            "source_ref": "loadg.cpp:230"
          },
          {
            "category": "game_data",
            "description": "Coin sound",
            "name": "coin.ogg",
            "path": "SyobonAction/SE/coin.ogg",
            "required": false,
            "source_ref": "loadg.cpp:231"
          },
          {
            "category": "game_data",
            "description": "Stomp sound",
            "name": "humi.ogg",
            "path": "SyobonAction/SE/humi.ogg",
            "required": false,
            "source_ref": "loadg.cpp:232"
          },
          {
            "category": "game_data",
            "description": "Shell sound",
            "name": "koura.ogg",
            "path": "SyobonAction/SE/koura.ogg",
            "required": false,
            "source_ref": "loadg.cpp:233"
          },
          {
            "category": "game_data",
            "description": "Pipe sound",
            "name": "dokan.ogg",
            "path": "SyobonAction/SE/dokan.ogg",
            "required": false,
            "source_ref": "loadg.cpp:234"
          },
          {
            "category": "game_data",
            "description": "Mushroom from block sound",
            "name": "brockkinoko.ogg",
            "path": "SyobonAction/SE/brockkinoko.ogg",
            "required": false,
            "source_ref": "loadg.cpp:235"
          },
          {
            "category": "game_data",
            "description": "Power-up sound",
            "name": "powerup.ogg",
            "path": "SyobonAction/SE/powerup.ogg",
            "required": false,
            "source_ref": "loadg.cpp:236"
          },
          {
            "category": "game_data",
            "description": "Star sound",
            "name": "kirra.ogg",
            "path": "SyobonAction/SE/kirra.ogg",
            "required": false,
            "source_ref": "loadg.cpp:237"
          },
          {
            "category": "game_data",
            "description": "Goal sound",
            "name": "goal.ogg",
            "path": "SyobonAction/SE/goal.ogg",
            "required": false,
            "source_ref": "loadg.cpp:238"
          },
          {
            "category": "game_data",
            "description": "Death sound",
            "name": "death.ogg",
            "path": "SyobonAction/SE/death.ogg",
            "required": false,
            "source_ref": "loadg.cpp:239"
          },
          {
            "category": "game_data",
            "description": "P-switch sound",
            "name": "Pswitch.ogg",
            "path": "SyobonAction/SE/Pswitch.ogg",
            "required": false,
            "source_ref": "loadg.cpp:240"
          },
          {
            "category": "game_data",
            "description": "Jump block sound",
            "name": "jumpBlock.ogg",
            "path": "SyobonAction/SE/jumpBlock.ogg",
            "required": false,
            "source_ref": "loadg.cpp:241"
          },
          {
            "category": "game_data",
            "description": "Hint block sound",
            "name": "hintBlock.ogg",
            "path": "SyobonAction/SE/hintBlock.ogg",
            "required": false,
            "source_ref": "loadg.cpp:242"
          },
          {
            "category": "game_data",
            "description": "Stage clear sound",
            "name": "4-clear.ogg",
            "path": "SyobonAction/SE/4-clear.ogg",
            "required": false,
            "source_ref": "loadg.cpp:243"
          },
          {
            "category": "game_data",
            "description": "All stages clear sound",
            "name": "allclear.ogg",
            "path": "SyobonAction/SE/allclear.ogg",
            "required": false,
            "source_ref": "loadg.cpp:244"
          },
          {
            "category": "game_data",
            "description": "Enemy fire sound",
            "name": "tekifire.ogg",
            "path": "SyobonAction/SE/tekifire.ogg",
            "required": false,
            "source_ref": "loadg.cpp:245"
          }
        ],
        "notes": "Libretro port of Open Syobon Action (Cat Mario), the SDL port of the Japanese platformer by z_gundam_tanosii. Game assets required in system_dir/SyobonAction/ with BGM/, SE/, and res/ subdirectories. Level data hardcoded in source. The original libretro/syobonaction-libretro repo was deleted; source points to the archived original by iyzsong. The .info display_version is \"0.1\" but the code reports \"0.3\".\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/iyzsong/syobonaction-libretro",
        "source_commit": "792c40cb590bcc7286cf720b5fb85807082b534e",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/akemin-dayo/OpenSyobonAction"
      }
    },
    {
      "id": "tamalibretro",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "1.0",
        "cores": [
          "tamalibretro"
        ],
        "display_name": "Bandai - Tamagotchi P1 (TamaLIBretro)",
        "emulator": "TamaLIBretro",
        "files": [],
        "notes": "Emulates Bandai Tamagotchi P1 hardware (Epson E0C6S46 CPU) via TamaLIB. Loads the Tamagotchi ROM (tama.b from MAME set) as content. No BIOS or system directory files required. .info firmware_count=0 matches the code.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/celerizer/tamalibretro",
        "source_commit": "ec83dc1a5ea8bdbcd02cee81779c6dbe0e996ed2",
        "source_ref": "main.c:345-365 (retro_load_game)",
        "systems": [
          "tamagotchi-p1"
        ],
        "type": "libretro",
        "upstream": "https://github.com/jcrona/tamalib"
      }
    },
    {
      "id": "tempgba",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "26731013",
        "cores": [
          "tempgba"
        ],
        "display_name": "Nintendo - Game Boy Advance (TempGBA)",
        "emulator": "TempGBA",
        "files": [
          {
            "name": "gba_bios.bin",
            "required": true,
            "size": 16384,
            "source_ref": "memory.c:3308-3323 (load_bios), libretro.c:238-314 (retro_load_game returns false if missing)",
            "system": "nintendo-gba"
          }
        ],
        "notes": "Fork chain: gpSP (Exophase) -> gpSP Kai (takka) -> TempGBA NDS\n(Nebuleon) -> TempGBA4PSP (unknown) -> TempGBA-libretro.\nPSP-optimized GBA emulator. No HLE BIOS: SWI calls execute from\nthe real BIOS ROM. The NDS version (ReGBA) added an open-source\nBIOS replacement (Normmatt), but TempGBA4PSP did not carry it over.\nBoot sequence skipped by default (PC starts at 0x08000000).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/TempGBA-libretro",
        "source_commit": "b0c2652797a4c11f3edd30f9e59a77a5b88ce5fb",
        "systems": [
          "nintendo-gba"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Nebuleon/ReGBA"
      }
    },
    {
      "id": "test",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "test"
        ],
        "display_name": "Test",
        "emulator": "test",
        "files": [],
        "notes": "Test core from libretro-samples. Software-rendered checkerboard pattern\nwith sine wave audio and input device testing (joypad, mouse, analog,\nlightgun, keyboard, rumble). No emulation, no system files.\n\nSource: tests/test/libretro-test.c. Single file, no file I/O.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "systems": [],
        "type": "test",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "test_netplay",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "1",
        "cores": [
          "test_netplay"
        ],
        "display_name": "Test for netplay",
        "emulator": "test_netplay",
        "exclusion_note": ".info declares no firmware (firmware_count absent). No source code found to analyze — searched libretro-samples, RetroArch cores, libretro-super, and the full libretro GitHub org.\n",
        "files": [],
        "notes": "Phantom .info: declared in libretro-core-info since 2017 but no source code,\nbuild recipe, or compiled binary exists anywhere in the libretro organization.\nNot on the buildbot. The .info has empty authors, license, and extensions.\n\nNo system files required.\n",
        "profiled_date": "2026-03-25",
        "systems": [],
        "type": "libretro"
      }
    },
    {
      "id": "testaudio_callback",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testaudio_callback"
        ],
        "display_name": "TestAudio Callback",
        "emulator": "testaudio_callback",
        "files": [],
        "notes": "Audio callback test core from libretro-samples. Tests the\nRETRO_ENVIRONMENT_SET_AUDIO_CALLBACK path where audio runs on a\nseparate thread managed by the frontend. Generates a 300 Hz sine\ntone to validate callback-driven audio output.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testaudio_no_callback",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testaudio_no_callback"
        ],
        "display_name": "TestAudio NoCallback",
        "emulator": "testaudio_no_callback",
        "files": [],
        "notes": "Audio test core from libretro-samples. Tests the synchronous audio path\nusing retro_audio_sample (no threaded callback). Generates a 300 Hz sine\nwave at 30 kHz sample rate.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testaudio_playback_wav",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testaudio_playback_wav"
        ],
        "display_name": "TestAudio Playback Wav",
        "emulator": "testaudio_playback_wav",
        "files": [],
        "notes": "WAV playback test core from libretro-samples. Loads a .wav file as content\nand plays it back through the libretro audio interface. Renders a progress\nbar on a 320x240 framebuffer. No emulation, no system files.\n\nSource: audio/audio_playback_wav/libretro-test.c. Single file, no file I/O.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testgl",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testgl"
        ],
        "display_name": "TestGL",
        "emulator": "testgl",
        "files": [],
        "notes": "OpenGL programmable pipeline test core from libretro-samples. Renders two\nspinning quads via GL 2.0+ / GLES 2.0+ shaders through the libretro\nhw_render interface. Shaders are embedded as string constants in the source.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "systems": [],
        "type": "test",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testgl_compute_shaders",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testgl_compute_shaders"
        ],
        "display_name": "TestGL ComputeShaders",
        "emulator": "testgl_compute_shaders",
        "files": [],
        "notes": "OpenGL compute shader test core from libretro-samples. Validates compute\nshader support through the libretro hw_render interface. Runs a compute\nshader kernel and renders the output, testing GL 4.3+ / GLES 3.1+\ncapability in the frontend. All visual assets (shaders, textures, mesh)\nare bundled in the core's app/ directory alongside the binary.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testgl_ff",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testgl_ff"
        ],
        "display_name": "TestGL (FF)",
        "emulator": "testgl_ff",
        "files": [],
        "notes": "OpenGL fixed-function pipeline test core from libretro-samples.\nRenders a colored quad using glBegin/glEnd and matrix stack (GL 1.4+ / GLES 1.x+).\nNo file loading of any kind. supports_no_game.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "source_ref": "video/opengl/libretro_test_gl_fixedfunction/libretro_gl_ff_test.c",
        "systems": [],
        "type": "libretro",
        "upstream": null
      }
    },
    {
      "id": "testinput_buttontest",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testinput_buttontest"
        ],
        "display_name": "Button Test",
        "emulator": "testinput_buttontest",
        "files": [],
        "notes": "Input button test core from libretro-samples. Renders an RLE-encoded\ncontroller image and highlights buttons in real time as pressed. Polls\njoypad and analog inputs. No file I/O.\n\nSource: input/button_test/libretro.c. Single file, no external dependencies.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testretroluxury",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testretroluxury"
        ],
        "display_name": "Test RetroLuxury",
        "emulator": "testretroluxury",
        "files": [],
        "notes": "Tech demo for the retroluxury middleware layer. All resources (sprites, audio,\nfonts) are embedded in the binary via xxd -i at compile time. No external\nfiles loaded at runtime.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/retroluxury",
        "source_commit": "fdcd94fe4099735edcbea638760da3f2297bc520",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/leiradel/retroluxury"
      }
    },
    {
      "id": "testsw",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testsw"
        ],
        "display_name": "TestSW",
        "emulator": "testsw",
        "files": [],
        "notes": "Software rendering test core from libretro-samples. Allocates a 320x240\nXRGB8888 framebuffer and renders a moving checkered pattern. Reference\nimplementation for core authors testing the software rendering path.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "source_ref": "video/software/rendering/libretro-test.c",
        "systems": [],
        "type": "libretro",
        "upstream": null
      }
    },
    {
      "id": "testsw_vram",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testsw_vram"
        ],
        "display_name": "TestSW VRAM",
        "emulator": "testsw_vram",
        "files": [],
        "notes": "Software rendering test core. Renders a checkered pattern directly to VRAM\nvia RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER, with fallback to\nstandard framebuffer copy. Single source file, no file I/O.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "source_ref": "video/software/rendering_direct_to_vram/libretro-test.c",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testvulkan",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testvulkan"
        ],
        "display_name": "TestVulkan",
        "emulator": "testvulkan",
        "files": [],
        "notes": "Vulkan test core from libretro-samples. Validates the Vulkan hardware\nrendering path in the frontend via the libretro hw_render_interface_vulkan\nAPI. Renders a rotating triangle using Vulkan command buffers and swapchain\nintegration. Shaders embedded at compile time (SPIR-V).\n\nNo system files, BIOS, or firmware required. Not an emulator.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "systems": [],
        "type": "test",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "testvulkan_async_compute",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v1",
        "cores": [
          "testvulkan_async_compute"
        ],
        "display_name": "TestVulkan AsyncCompute",
        "emulator": "testvulkan_async_compute",
        "files": [],
        "notes": "Vulkan async compute test core from libretro-samples. Exercises async\ncompute queue support via the libretro hw_render_interface_vulkan API.\nRenders a raymarching demo using concurrent graphics and compute workloads.\nCompute shader embedded at compile time (SPIR-V).\n\nNo system files, BIOS, or firmware required. Not an emulator.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-samples",
        "source_commit": "bce193bc1b8c9a3da43b2ead0158a69e28b37ed8",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/libretro/libretro-samples"
      }
    },
    {
      "id": "tgbdual",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.8.3",
        "cores": [
          "TGB Dual"
        ],
        "display_name": "Nintendo - Game Boy / Color (TGB Dual)",
        "emulator": "TGB Dual",
        "files": [],
        "notes": "Game Boy / Game Boy Color emulator by GIGO and Hii with link cable support\nfor two units side by side. Libretro port based on shinichiro.h's SDL port.\n\ncpu::reset() initializes PC to 0x100 and sets post-boot register values\n(AF=0x01B0 DMG, 0x11B0 CGB), bypassing the boot ROM via HLE.\nNo system directory access, no file I/O for firmware.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/tgbdual-libretro",
        "source_commit": "933707c0ba8f12360f6d79712f735a917713709a",
        "systems": [
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "libretro",
        "upstream": "http://gigo.retrogames.com/download.html#tgb-dual"
      }
    },
    {
      "id": "theodore",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "Git (post-3.1)",
        "cores": [
          "theodore"
        ],
        "display_name": "Thomson - MO/TO (Theodore)",
        "emulator": "Theodore",
        "files": [],
        "notes": "All system ROMs (monitor, BASIC, disk drive controller) are compiled into the binary as C arrays in src/rom/*.inc. Derived from Daniel Coulom's DCTO8D/DCTO9P/DCMO5 emulators. The .info declares no firmware (firmware_count absent), consistent with the code.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/Zlika/theodore",
        "source_commit": "242e932d838284a61b81aa7641c60d813934025e",
        "systems": [
          "thomson-to7",
          "thomson-to770",
          "thomson-to8",
          "thomson-to8d",
          "thomson-to9",
          "thomson-to9plus",
          "thomson-mo5",
          "thomson-mo6",
          "olivetti-pc128"
        ],
        "type": "libretro",
        "upstream": "http://dcmoto.free.fr/"
      }
    },
    {
      "id": "thepowdertoy",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v92.5.336",
        "cores": [
          "thepowdertoy"
        ],
        "display_name": "The Powder Toy",
        "emulator": "The Powder Toy",
        "files": [],
        "notes": "Falling-sand physics simulation game. All resources (fonts, shaders, images) compiled into the binary. GetSystemDir() declared but never called. No external files loaded from system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/ThePowderToy",
        "source_commit": "cb3cd4c2e5beddb98b34e6b800fa24e8f96322d9",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/ThePowderToy/The-Powder-Toy"
      }
    },
    {
      "id": "ti99sim",
      "profile": {
        "core_version": "0.16.0",
        "cores": [
          "ti99sim"
        ],
        "display_name": "TI-99/Sim",
        "emulator": "ti99sim",
        "files": [
          {
            "description": "Console ROM cartridge containing CPU ROMs, system GROMs, and RAM configuration",
            "name": "TI-994A.ctg",
            "note": "SHA1 is of .ctg format. v0.16.0 also recognizes console v2.2 (sha1 16e275faae427465ba4dd4c2bf8569f6546d32dd).",
            "required": true,
            "sha1": "1d63879573a201cab6c883327240ddc148732ccd",
            "source_ref": "src/core/ti994a.cpp:122-131 (v0.16.0), src/sdl/main.cpp:407-411 (v0.0.11)"
          },
          {
            "description": "TMS5220/TMS6100 Speech Synthesizer vocabulary ROM",
            "hle_fallback": true,
            "name": "spchrom.bin",
            "note": "Raw binary, not .ctg format. Must be exactly 32768 bytes. First byte must be 0xAA. Falls back to empty speech ROM if missing or invalid.",
            "required": false,
            "size": 32768,
            "source_ref": "src/core/tms5220.cpp:190-213 (v0.16.0), src/core/tms5220.cpp:194-213 (v0.0.11)",
            "validation": [
              "size"
            ]
          },
          {
            "description": "TI Disk Controller DSR ROM (CRU >1100)",
            "name": "ti-disk.ctg",
            "note": "SHA1 is of .ctg format. Disk emulation disabled without this file.",
            "required": false,
            "sha1": "a092153d87615d64e025c118b16a0c6ec70e6fe7",
            "source_ref": "src/core/device-support.cpp:52 (v0.16.0), src/sdl/main.cpp:452-476 (v0.0.11)"
          },
          {
            "description": "Miller Graphics Gram Kracker ROM manipulation peripheral",
            "name": "Gram Kracker.ctg",
            "note": "SHA1 is of the .ctg convert-ctg builds at the pinned commit. Gram Kracker features disabled without this file.",
            "required": false,
            "sha1": "56dd520570cdcdd60dda2eedc8af1e02a781dcc5",
            "source_ref": "src/core/ti994a-gk.cpp:56 (v0.16.0), src/sdl/ti994a-sdl.cpp:78 (v0.0.11)"
          },
          {
            "description": "TI P-Code Card (UCSD Pascal) DSR ROM",
            "name": "ti-pcard.ctg",
            "note": "SHA1 is of the .ctg convert-ctg builds at the pinned commit from the .dat in roms/ and the pre-0.174 MAME images scripts/setup fetches. v0.16.0+ only.",
            "required": false,
            "sha1": "c7bf5fcfea0502011dca76d12efcc242e23421b9",
            "source_ref": "src/core/device-support.cpp:53 (v0.16.0)"
          },
          {
            "description": "CF7+/nanoPEB CompactFlash interface DSR ROM",
            "name": "cf7+.ctg",
            "note": "SHA1 is of the .ctg convert-ctg builds at the pinned commit from the .dat in roms/ and the pre-0.174 MAME images scripts/setup fetches. v0.16.0+ only.",
            "required": false,
            "sha1": "698c638e1773244a6bf8a353c87d210047cce402",
            "source_ref": "src/core/device-support.cpp:51 (v0.16.0)"
          }
        ],
        "notes": "Marc Rousseau's TI-99/4A simulator (since 1993). Standalone only, no libretro port.\nUses proprietary .ctg cartridge format for ROM packaging (CPU ROM + GROMs + RAM config).\nRaw ROM dumps must be converted to .ctg via the convert-ctg utility.\nFile search order: CWD, CWD/console/ (v0.16.0) or CWD/roms/ (<=0.0.11),\n~/.ti99sim/console/, /opt/ti99sim/console/.\nv0.16.0 adds SHA1-based auto-discovery for device ROMs in the console/ directory.\nRecalbox packages ti99sim as a standalone emulator for the ti994a system.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/christianhaitian/ti99sim",
        "source_commit": "e3608541943b5258afe45b74e3f78e723df1fcbd",
        "systems": [
          "ti99"
        ],
        "type": "standalone",
        "upstream": "https://www.mrousseau.org/programs/ti99sim/"
      }
    },
    {
      "id": "tic80",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "0.80.0",
        "cores": [
          "tic80"
        ],
        "display_name": "TIC-80",
        "emulator": "TIC-80",
        "files": [],
        "notes": "Fantasy computer for making, playing and sharing tiny games.\nThe libretro repo wraps nesbox/TIC-80 as a submodule; the libretro\nwrapper (tic80_libretro.c) lives in the upstream repo itself.\n\nContent loaded entirely via libretro data buffer (need_fullpath = false,\ntic80_libretro.c:340). No call to RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY.\nNo code path reads any file from the system directory. All VM resources\n(sprites, palette, font, sound engine) are compiled into the binary.\n\nTIC_MODULE_EXT (dynamic scripting plugins) is disabled in libretro\nbuilds via #if !defined(__LIBRETRO__) in tic80_config.h:36.\n",
        "platform_details": {
          "cartridge_format": {
            "extensions": "tic, png",
            "note": ".tic is the native cartridge format. .png loads cartridges\nencoded as cover images (code stored in PNG metadata).\n",
            "source_ref": "tic80_libretro.c:339"
          },
          "runtime": {
            "note": "Entire runtime compiled into the binary. No external dependencies.\nState serialization uses TIC_PERSISTENT_SIZE * 4 bytes of pmem()\ndata (tic80_libretro.c:1203-1243).\n",
            "source_ref": "nesbox/TIC-80 (submodule at core/)"
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/TIC-80",
        "source_commit": "6412f72d0f4725c153ce3d245729b829e713542e",
        "systems": [
          "tic80"
        ],
        "type": "libretro",
        "upstream": "https://github.com/nesbox/TIC-80"
      }
    },
    {
      "id": "trident",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "git",
        "cores": [
          "trident"
        ],
        "display_name": "Nintendo - 3DS (Trident)",
        "emulator": "trident",
        "files": [
          {
            "description": "AES encryption keys for decrypting encrypted 3DS ROMs",
            "name": "aes_keys.txt",
            "required": false,
            "source_ref": "src/emulator.cpp:234,242-244 (path construction and existence check); src/core/crypto/aes_engine.cpp:13-92 (loadKeys, parses key=value text); src/core/loader/ncch.cpp:151-164 (panic if encrypted ROM loaded without keys)"
          },
          {
            "description": "seed database for seed-encrypted 3DS games",
            "name": "seeddb.bin",
            "required": false,
            "source_ref": "src/emulator.cpp:235,246-248 (path construction and existence check); src/core/crypto/aes_engine.cpp:94-153 (setSeedPath, loadSeeds, getSeedFromDB)"
          }
        ],
        "notes": "Libretro core wrapping Panda3DS, an HLE Nintendo 3DS emulator. Shared font, Mii data, country list and bad word list are embedded in the binary via CMRC and compiled-in headers. DSP firmware is loaded from the game ROM at runtime, not from an external file. DSP modes: HLE (default), LLE (Teakra), Null. Files are resolved from the RetroArch save directory (<save_dir>/Emulator Files/sysdata/), not the system directory.",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/DanAlexMorton/3dsTrident",
        "source_commit": "b97b0befa326105e181838bc6fa11c546de8294d",
        "systems": [
          "3ds"
        ],
        "type": "libretro",
        "upstream": "https://github.com/wheremyfoodat/Panda3DS"
      }
    },
    {
      "id": "triforce",
      "profile": {
        "core_classification": "enhanced_fork",
        "core_version": "2407",
        "cores": [
          "triforce",
          "dolphin-triforce"
        ],
        "display_name": "Namco / Sega / Nintendo - Triforce (Dolphin Triforce)",
        "emulator": "Triforce",
        "files": [
          {
            "description": "SegaBoot, the Triforce system disc image held on the AM-Mediaboard",
            "name": "segaboot.gcm",
            "note": "Read on every Triforce launch, Sys/Triforce only with no User fallback. Nothing is validated, min(file size, 2 MiB) is copied into the firmware buffer. The hash is the copy the fork's own Data/Sys tree carries, SegaBoot v3.11.\n",
            "path": "Sys/Triforce/segaboot.gcm",
            "required": true,
            "sha1": "87918619c632ac9de270d4fdf396a57eb57fc620",
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/DVD/AMMediaboard.cpp:215-233, Source/Core/Core/HW/DVD/DVDInterface.cpp:289-294",
            "system": "sega-triforce"
          },
          {
            "crc32": "d1883221",
            "description": "Triforce boot ROM, NTSC-U directory",
            "hle_fallback": true,
            "name": "IPL_TRI.bin",
            "note": "CRC32 is computed over the first 2 MiB and compared against the Redump table, 0xD1883221 being the Triforce revision. An unknown value warns and loading continues. A match also maps SegaBoot as firmware (Source/Core/Core/Boot/Boot.cpp:482-489).\n",
            "path": "GC/USA/IPL_TRI.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:149, Source/Core/Core/Config/MainSettings.cpp:614-625, Source/Core/Core/Boot/Boot.cpp:400,415-436",
            "system": "sega-triforce",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "d1883221",
            "description": "Triforce boot ROM, PAL directory",
            "hle_fallback": true,
            "name": "IPL_TRI.bin",
            "path": "GC/EUR/IPL_TRI.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/Config/MainSettings.cpp:620-623",
            "system": "sega-triforce",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "d1883221",
            "description": "Triforce boot ROM, NTSC-J directory",
            "hle_fallback": true,
            "name": "IPL_TRI.bin",
            "note": "JAP is the directory the legacy naming style returns for NTSC-J.",
            "path": "GC/JAP/IPL_TRI.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/Config/MainSettings.cpp:587-612,620-623",
            "system": "sega-triforce",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "Mediaboard network configuration",
            "name": "trinetcfg.bin",
            "path": "Triforce/trinetcfg.bin",
            "required": false,
            "source_ref": "Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,198",
            "system": "sega-triforce",
            "unsourceable": "created empty by the emulator on first Triforce launch, written by the guest, no hardware dump equivalent"
          },
          {
            "description": "Mediaboard network control block",
            "name": "trinetctrl.bin",
            "path": "Triforce/trinetctrl.bin",
            "required": false,
            "source_ref": "Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,199",
            "system": "sega-triforce",
            "unsourceable": "created empty by the emulator on first Triforce launch, written by the guest, no hardware dump equivalent"
          },
          {
            "description": "Mediaboard extra settings block",
            "name": "triextra.bin",
            "path": "Triforce/triextra.bin",
            "required": false,
            "source_ref": "Source/Core/Core/HW/DVD/AMMediaboard.cpp:169-177,200",
            "system": "sega-triforce",
            "unsourceable": "created empty by the emulator on first Triforce launch, written by the guest, no hardware dump equivalent"
          },
          {
            "description": "Marker that switches the emulated console to Wii Arcade mode",
            "name": "RVA.txt",
            "note": "Opened for read inside the System Menu title data. Success sets console type RVA and forces the RGB region settings. The RVA expansion device in slot A reaches the same console type without it (Source/Core/Core/IOS/IOSC.cpp:213-218).\n",
            "path": "Wii/title/00000001/00000002/data/RVA.txt",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:165, Source/Core/Core/Boot/Boot_BS2Emu.cpp:387-397",
            "system": "nintendo-wii-arcade",
            "unsourceable": "user-created marker inside the emulated NAND, only its presence is tested, no file is distributed"
          },
          {
            "description": "GameCube NTSC-U boot ROM",
            "hle_fallback": true,
            "name": "IPL.bin",
            "note": "Needed to boot the GameCube menu and to take the fonts from a real dump.",
            "path": "GC/USA/IPL.bin",
            "region": [
              "north-america"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Common/CommonPaths.h:148, Source/Core/Core/Config/MainSettings.cpp:627-630, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-118,182-183"
          },
          {
            "description": "GameCube PAL boot ROM",
            "hle_fallback": true,
            "name": "IPL.bin",
            "path": "GC/EUR/IPL.bin",
            "region": [
              "europe"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:184-185"
          },
          {
            "description": "GameCube NTSC-J boot ROM",
            "hle_fallback": true,
            "name": "IPL.bin",
            "path": "GC/JAP/IPL.bin",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 2097152,
            "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:186-187"
          },
          {
            "adler32_byteswap": true,
            "description": "DSP instruction ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0x66f334fe",
            "name": "dsp_rom.bin",
            "note": "LoadDSPRom rejects any file whose length differs from DSP_IROM_BYTE_SIZE and swaps every 16 bit word before storing it, so the Adler32 in the source is taken over the swapped data (Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:100-102). The pair is matched against seven known sets, the first being the Nintendo ROMs; a miss asks the user whether to stop (Source/Core/Core/DSP/DSPCore.cpp:60-84).\n",
            "path": "GC/dsp_rom.bin",
            "required": false,
            "size": 8192,
            "source_ref": "Source/Core/Common/CommonPaths.h:145, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,109-118, Source/Core/Core/DSP/DSPCore.h:44, Source/Core/Core/DSP/DSPCore.cpp:36-38",
            "validation": [
              "size"
            ]
          },
          {
            "adler32_byteswap": true,
            "description": "DSP coefficient ROM",
            "hle_fallback": true,
            "known_hash_adler32": "0xf3b93527",
            "name": "dsp_coef.bin",
            "note": "Also read by the HLE AX ucode for polyphase resampling. Adler32 is taken over the byte-swapped data (Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:100-102).\n",
            "path": "GC/dsp_coef.bin",
            "required": false,
            "size": 4096,
            "source_ref": "Source/Core/Common/CommonPaths.h:146, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-105,110-119, Source/Core/Core/DSP/DSPCore.h:58, Source/Core/Core/HW/DSPHLE/UCodes/AX.cpp:61-62",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Windows-1252 font used by GameCube and Wii text rendering",
            "hle_fallback": true,
            "name": "font_western.bin",
            "note": "Size is the official font length the code reads from an IPL dump, 0x2575 (Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:234-236). A standalone file is read without any check.\n",
            "path": "Sys/GC/font_western.bin",
            "required": false,
            "size": 9589,
            "source_ref": "Source/Core/Common/CommonPaths.h:142, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131,203-247"
          },
          {
            "description": "Shift-JIS font used by GameCube and Wii text rendering",
            "hle_fallback": true,
            "name": "font_japanese.bin",
            "note": "Size is the official font length read from an IPL dump, 0x4a24d.",
            "path": "Sys/GC/font_japanese.bin",
            "required": false,
            "size": 303693,
            "source_ref": "Source/Core/Common/CommonPaths.h:143, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130,203-247"
          },
          {
            "description": "GBA BIOS for the GameCube to Game Boy Advance link",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "Loaded into the integrated mGBA core, which fails to start without it. The path is overridable by the Main.GBA BIOS setting (Source/Core/Core/Config/MainSettings.cpp:361).\n",
            "path": "GBA/gba_bios.bin",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:155, Source/Core/Common/FileUtil.cpp:917-919, Source/Core/Core/HW/GBACore.cpp:202-206,336-353"
          },
          {
            "description": "Wii system configuration",
            "hle_fallback": true,
            "name": "SYSCONF",
            "note": "SysConf::Load rejects any size other than SYSCONF_SIZE and falls back to built-in defaults. Generated by the emulator, can come from a NAND backup instead.\n",
            "path": "Wii/shared2/sys/SYSCONF",
            "required": false,
            "size": 16384,
            "source_ref": "Source/Core/Common/CommonPaths.h:87,127, Source/Core/Core/SysConf.cpp:19,54-65",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Wii region, area and serial settings",
            "hle_fallback": true,
            "name": "setting.txt",
            "note": "Read into a fixed 256 byte buffer, then rewritten during Wii boot emulation from the region settings table.\n",
            "path": "Wii/title/00000001/00000002/data/setting.txt",
            "required": false,
            "size": 256,
            "source_ref": "Source/Core/Common/CommonPaths.h:163, Source/Core/Core/Boot/Boot_BS2Emu.cpp:412-424, Source/Core/Common/SettingsHandler.h:21,26"
          },
          {
            "description": "BootMii NAND backup, imported through the NAND importer",
            "hle_fallback": true,
            "name": "nand.bin",
            "note": "Accepted at 0x21000000 bytes, or 0x21000400 when the OTP and SEEPROM dump is appended. Any other size is rejected.\n",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:26-40,42-57"
          },
          {
            "description": "OTP and SEEPROM dump holding the console keys",
            "hle_fallback": true,
            "name": "keys.bin",
            "note": "Asked for at import time when not appended to the NAND image, and written to the Wii root. Read at every boot, absence falls back to the built-in default key set.\n",
            "path": "Wii/keys.bin",
            "required": false,
            "size": 1024,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:19,76-88,288-298, Source/Core/Core/IOS/IOSC.cpp:639-665"
          },
          {
            "description": "SSL client certificate extracted from IOS13",
            "hle_fallback": true,
            "name": "clientca.pem",
            "note": "Located inside the IOS13 content during NAND import by its leading bytes.",
            "path": "Wii/clientca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:201-286"
          },
          {
            "description": "SSL client private key extracted from IOS13",
            "hle_fallback": true,
            "name": "clientcakey.pem",
            "path": "Wii/clientcakey.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:237"
          },
          {
            "description": "SSL root certificate extracted from IOS13",
            "hle_fallback": true,
            "name": "rootca.pem",
            "path": "Wii/rootca.pem",
            "required": false,
            "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:238"
          },
          {
            "description": "Virtual SD card image for the Wii SD slot",
            "hle_fallback": true,
            "name": "WiiSD.raw",
            "note": "Created by the emulator, path overridable by the General WiiSDCardPath setting.",
            "path": "Load/WiiSD.raw",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:160, Source/Core/Common/FileUtil.cpp:909"
          },
          {
            "description": "Wii System Menu WAD, installed into the emulated NAND",
            "hle_fallback": true,
            "name": "Wii System Menu",
            "note": "Needed to boot the Wii Menu. Installed through Tools, Install WAD.",
            "path": null,
            "required": false,
            "source_ref": "Source/Core/DolphinQt/MenuBar.cpp:290,1098-1112"
          },
          {
            "description": "Gecko code handler used to apply cheat codes",
            "hle_fallback": true,
            "name": "codehandler.bin",
            "note": "Read from the Sys root. Cheats are refused when it is missing and when it exceeds the installer window.\n",
            "path": "Sys/codehandler.bin",
            "required": false,
            "source_ref": "Source/Core/Common/CommonPaths.h:167, Source/Core/Core/GeckoCode.cpp:121-134"
          }
        ],
        "mode": "standalone",
        "notes": "crediar's Dolphin fork, which adds the Triforce arcade boards (AM-Baseboard on\nthe serial interface, AM-Mediaboard on the disc interface) and the Wii Arcade\nboards on top of GameCube and Wii emulation. The tree self-reports Dolphin 2407\n(CMake/ScmRevGen.cmake:34-35) and builds DolphinQt. crediar publishes the source\non crediar.dev; the commit profiled here is the REG-Linux mirror of it, whose\nData/Sys tree matches the Hancock33 and ReaverTeknoGods mirrors byte for byte.\nES-DE looks for dolphin-emu-triforce on Linux and Triforce.exe or\nTriforce/DolphinWX.exe on Windows, RetroBat installs it as dolphin-triforce.\n\nsegaboot.gcm is the Triforce firmware. DVDInterface::Init calls\nAMMediaboard::Init only when EXI serial port 1 holds the AM Mediaboard, so the\nread happens on every Triforce launch and never otherwise\n(Source/Core/Core/HW/DVD/DVDInterface.cpp:289-294). Init resolves the file under\nSys/Triforce, with no User fallback, and copies min(file size, 2 MiB) into the\nfirmware buffer without checking anything\n(Source/Core/Core/HW/DVD/AMMediaboard.cpp:215-233). A missing file raises a\nmodal alert and returns before the buffer is filled, leaving it at 0xFF. The\nguest reads that buffer whenever the firmware is mapped\n(Source/Core/Core/HW/DVD/AMMediaboard.cpp:1083-1090), which is how the Service\nand Test menus are reached. The tree ships the copy documented below, SegaBoot\nv3.11 with a RELSAB header, and the mediaboard answers GetSegaBootVersion for\nboth 3.09 and 3.11 layouts\n(Source/Core/Core/HW/DVD/AMMediaboard.cpp:1268-1269, 1397-1398).\n\nTriforce mode also swaps the GameCube boot ROM name: GetBootROMPath returns\nIPL_TRI.bin instead of IPL.bin, User first then Sys\n(Source/Core/Core/Config/MainSettings.cpp:614-625). Load_BS2 reads at most 2 MiB,\nCRC32s what it read against a table of Redump dumps and accepts 0xD1883221 as\nthe Triforce revision (Source/Core/Core/Boot/Boot.cpp:391-436). On that match it\npatches OSReport and maps SegaBoot as firmware so the guest IPL can chain into\nit (Source/Core/Core/Boot/Boot.cpp:482-489). SkipIPL defaults to true\n(Source/Core/Core/Config/MainSettings.cpp:37) and EmulatedBS2 otherwise copies\nthe disc straight into DIMM memory and clears the firmware mapping\n(Source/Core/Core/Boot/Boot_BS2Emu.cpp:332-347), so games run without any IPL.\n\nBoot ROM directories follow the legacy naming: GetDirectoryForRegion defaults to\nRegionDirectoryStyle::Legacy (Source/Core/Core/Config/MainSettings.h:369-370) and\nevery boot ROM caller takes the default, so NTSC-J resolves to JAP. FindIPLDump\nprobes USA, EUR and JAP and stops there\n(Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:180-189).\n\nWii Arcade runs as IOSC console type RVA, reached three ways: the RVA expansion\ndevice in slot A (Source/Core/Core/IOS/IOSC.cpp:213-218), an RVA.txt file in the\nSystem Menu title data (Source/Core/Core/Boot/Boot_BS2Emu.cpp:387-397), or a\nticket issued by Root-CA10000000-XS10000000\n(Source/Core/Core/IOS/ES/Formats.cpp:490-493). That console type switches to the\ndevelopment common key and root key held in the binary\n(Source/Core/Core/IOS/IOSC.cpp:603-615).\n\nSave data the emulator creates on first run is keyed on the disc, so none of it\ncan be supplied: tridimm_<game-id>.bin and backup_<game-id>.bin\n(Source/Core/Core/HW/DVD/AMMediaboard.cpp:201-202), the baseboard backup\ntribackup_<game-id>.bin\n(Source/Core/Core/HW/EXI/EXI_DeviceAMBaseboard.cpp:77-100), the card reader image\ntricard_<game-id>.bin\n(Source/Core/Core/HW/SI/SI_DeviceAMBaseboard.cpp:1147-1310), and the three Wii\nArcade SRAM images under User/Arcade, sized 0x1400, 0x1A40 and 0x8000 by game\ntype (Source/Core/Core/HW/EXI/EXI_DeviceRVA.cpp:1249-1285).\n\nRecognised Triforce titles are F-Zero AX, F-Zero AX Monster Ride, Mario Kart\nArcade GP 1 and 2, Virtua Striker 3 and 4, Gekitou Pro Yakyuu and Key of Avalon\n(Source/Core/Core/HW/DVD/AMMediaboard.h:25-36).\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/REG-Linux/dolphin-triforce",
        "source_commit": "5c456e8ff0da0235be2cf1d55ba7bb2115b0cae2",
        "systems": [
          "sega-triforce",
          "nintendo-wii-arcade",
          "nintendo-gamecube",
          "nintendo-wii"
        ],
        "type": "standalone",
        "upstream": "https://github.com/dolphin-emu/dolphin"
      }
    },
    {
      "id": "tsugaru",
      "profile": {
        "cores": [
          "tsugaru"
        ],
        "display_name": "Tsugaru",
        "emulator": "tsugaru",
        "files": [
          {
            "description": "system ROM",
            "name": "FMT_SYS.ROM",
            "required": true,
            "size": 262144,
            "source_ref": "src/towns/memory/physmem.cpp:392, src/towns/memory/physmem.cpp:503-507",
            "validation": [
              "size"
            ]
          },
          {
            "description": "DOS ROM",
            "name": "FMT_DOS.ROM",
            "required": true,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:395, src/towns/memory/physmem.cpp:508-512",
            "validation": [
              "size"
            ]
          },
          {
            "description": "font ROM",
            "name": "FMT_FNT.ROM",
            "required": true,
            "size": 262144,
            "source_ref": "src/towns/memory/physmem.cpp:398, src/towns/memory/physmem.cpp:513-517",
            "validation": [
              "size"
            ]
          },
          {
            "description": "20-dot font ROM, filled with 0xFF if missing",
            "hle_fallback": true,
            "name": "FMT_F20.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:401, src/towns/memory/physmem.cpp:518-527",
            "validation": [
              "size"
            ]
          },
          {
            "description": "dictionary ROM",
            "name": "FMT_DIC.ROM",
            "required": true,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:404, src/towns/memory/physmem.cpp:528-532",
            "validation": [
              "size"
            ]
          },
          {
            "description": "serial ROM for machine identity, uses defaults if absent",
            "min_size": 32,
            "name": "MYTOWNS.ROM",
            "required": false,
            "source_ref": "src/towns/memory/physmem.cpp:407, src/towns/memory/physmem.cpp:533-539"
          },
          {
            "description": "combined ROM file, alternative to individual ROM files",
            "name": "FMT_ALL.ROM",
            "required": false,
            "source_ref": "src/towns/memory/physmem.cpp:420-500"
          },
          {
            "description": "Marty extra ROM 0, all 4 MAR_EX ROMs needed for Marty mode",
            "name": "MAR_EX0.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:410, src/towns/memory/physmem.cpp:541-564",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Marty extra ROM 1",
            "name": "MAR_EX1.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:412, src/towns/memory/physmem.cpp:541-564",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Marty extra ROM 2",
            "name": "MAR_EX2.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:414, src/towns/memory/physmem.cpp:541-564",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Marty extra ROM 3",
            "name": "MAR_EX3.ROM",
            "required": false,
            "size": 524288,
            "source_ref": "src/towns/memory/physmem.cpp:416, src/towns/memory/physmem.cpp:541-564",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "FM Towns / Marty emulator by CaptainYS. Takes a ROM directory as first\nargument. ROM format compatible with UNZ emulator. Free compatible ROMs\navailable at ysflight.com/FM/towns/FreeTOWNS/. FMT_ALL.ROM is an\nalternative combined format that bundles all individual ROM files.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/captainys/TOWNSEMU",
        "source_commit": "8ecfa27759919586e33f674038ed73d36e56c2b6",
        "systems": [
          "fmtowns"
        ],
        "type": "standalone",
        "upstream": "https://github.com/captainys/TOWNSEMU"
      }
    },
    {
      "id": "tyrquake",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "v0.62",
        "cores": [
          "tyrquake"
        ],
        "display_name": "Quake (TyrQuake)",
        "emulator": "TyrQuake",
        "files": [],
        "notes": "Quake engine source port by Kevin Shanahan (Tyrann). Plays Quake (id1), mission packs Scourge of Armagon (hipnotic) and Dissolution of Eternity (rogue), Quoth mod, and custom mods via -game parameter. Content is loaded directly from the PAK file path — the directory containing the PAK becomes basedir (libretro.c:988,1050). The engine auto-detects game variant by checking the content path for id1, hipnotic, rogue, or quoth substrings (libretro.c:1030-1070). All engine assets (gfx/palette.lmp, gfx/colormap.lmp, gfx.wad, textures, models, sounds) are loaded from within PAK files via COM_AddGameDirectory (common.c:1709), which tries pak0.pak through pak9.pak in both lowercase and uppercase. The core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. BGM as OGG tracks in music/ subfolder of each game directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/tyrquake",
        "source_commit": "471f2a72d2a7b0416f6a21eb945e5af831df06a4",
        "systems": [
          "quake"
        ],
        "type": "libretro",
        "upstream": "http://disenchant.net/tyrquake/"
      }
    },
    {
      "id": "uae4arm",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.5",
        "cores": [
          "uae4arm"
        ],
        "display_name": "Commodore - Amiga (UAE4ARM)",
        "emulator": "uae4arm",
        "files": [
          {
            "description": "Amiga 500 Kickstart v1.3 rev 34.005",
            "hle_fallback": true,
            "name": "kick34005.A500",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:77, 828, src/memory.cpp:745-760"
          },
          {
            "description": "Amiga 600 Kickstart v3.1 rev 40.063",
            "hle_fallback": true,
            "name": "kick40063.A600",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:78, 784"
          },
          {
            "description": "Amiga 1200 Kickstart v3.1 rev 40.068",
            "hle_fallback": true,
            "name": "kick40068.A1200",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:85, libretro/core/libretro-core.cpp:410"
          },
          {
            "description": "CDTV extended ROM v1.00 rev 34.005",
            "name": "kick34005.CDTV",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:80, 829, src/memory.cpp:640-662"
          },
          {
            "description": "CD32 Kickstart v3.1 rev 40.060",
            "name": "kick40060.CD32",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:81, 851, src/memory.cpp:745-760"
          },
          {
            "description": "CD32 extended ROM rev 40.060",
            "name": "kick40060.CD32.ext",
            "required": false,
            "source_ref": "libretro/core/libretro-core.cpp:82, 852, src/memory.cpp:644-662"
          },
          {
            "description": "Cloanto Amiga Forever decryption key",
            "name": "rom.key",
            "required": false,
            "source_ref": "src/memory.cpp:754 (addkeydir)"
          }
        ],
        "notes": "ARM-optimized Amiga emulator by TomB, ported to libretro by Chips-fr.\nBased on an older uae4arm version, intended for low-powered ARM hardware\nwhere PUAE cannot maintain full speed.\n\nCore options expose three models: A500, A600, A1200. Each selects its\nKickstart ROM automatically. Extended ROMs (CDTV/CD32) can be set via\n.uae config files but CD32/CDTV hardware emulation is absent from\nthis port (no akiko chip, CD support listed as missing).\n\nBuilt-in AROS Kickstart replacement used as fallback when no ROM is found.\n\nCloanto-encrypted ROMs require rom.key in the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/uae4arm-libretro",
        "source_commit": "16f63d30b98aa8070a996f25f64df6dfff82938b",
        "systems": [
          "commodore-amiga"
        ],
        "type": "libretro",
        "upstream": "https://github.com/PandTomB/uae4arm"
      }
    },
    {
      "id": "ume2015",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "0.159",
        "cores": [
          "ume2015"
        ],
        "display_name": "Multi (UME 2015)",
        "emulator": "UME 2015",
        "files": [
          {
            "category": "game_data",
            "name": "hiscore.dat",
            "note": "high score definitions, external file, not embedded",
            "path": "ume2015/hiscore.dat",
            "required": false,
            "source_ref": "src/emu/hiscore.c:335-337"
          },
          {
            "category": "bios_zip",
            "name": "neogeo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/neogeo.c:1529",
            "system": "snk-neogeo-mvs"
          },
          {
            "category": "bios_zip",
            "name": "pgm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pgm.c:4147",
            "system": "igs-pgm"
          },
          {
            "category": "bios_zip",
            "name": "naomi.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8960",
            "system": "sega-naomi"
          },
          {
            "category": "bios_zip",
            "name": "naomi2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8965",
            "system": "sega-naomi2"
          },
          {
            "category": "bios_zip",
            "name": "naomigd.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:8966",
            "system": "sega-naomigd"
          },
          {
            "category": "bios_zip",
            "name": "awbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/naomi.c:9275",
            "system": "sammy-atomiswave"
          },
          {
            "category": "bios_zip",
            "name": "hod2bios.zip",
            "note": "game-specific BIOS for House of the Dead 2",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8961"
          },
          {
            "category": "bios_zip",
            "name": "f355dlx.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8962"
          },
          {
            "category": "bios_zip",
            "name": "f355bios.zip",
            "note": "game-specific BIOS for Ferrari F355 Challenge twin",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8963"
          },
          {
            "category": "bios_zip",
            "name": "airlbios.zip",
            "note": "game-specific BIOS for Airline Pilots deluxe",
            "required": false,
            "source_ref": "src/mame/drivers/naomi.c:8964"
          },
          {
            "category": "bios_zip",
            "name": "stvbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/stv.c:3042",
            "system": "sega-stv"
          },
          {
            "category": "bios_zip",
            "name": "hikaru.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hikaru.c:744",
            "system": "sega-hikaru"
          },
          {
            "category": "bios_zip",
            "name": "chihiro.zip",
            "required": true,
            "source_ref": "src/mame/drivers/chihiro.c:2192",
            "system": "sega-chihiro"
          },
          {
            "category": "bios_zip",
            "name": "triforce.zip",
            "required": true,
            "source_ref": "src/mame/drivers/triforce.c:1021",
            "system": "sega-triforce"
          },
          {
            "category": "bios_zip",
            "name": "lindbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/lindbergh.c:569",
            "system": "sega-lindbergh"
          },
          {
            "category": "bios_zip",
            "name": "decocass.zip",
            "required": true,
            "source_ref": "src/mame/drivers/decocass.c:1647",
            "system": "deco-cassette"
          },
          {
            "category": "bios_zip",
            "name": "playch10.zip",
            "required": true,
            "source_ref": "src/mame/drivers/playch10.c:1639",
            "system": "nintendo-playch10"
          },
          {
            "category": "bios_zip",
            "name": "nss.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nss.c:1058",
            "system": "nintendo-nss"
          },
          {
            "category": "bios_zip",
            "name": "sfcbox.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sfcbox.c:572",
            "system": "nintendo-sfcbox"
          },
          {
            "category": "bios_zip",
            "name": "megaplay.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megaplay.c:942",
            "system": "sega-megaplay"
          },
          {
            "category": "bios_zip",
            "name": "megatech.zip",
            "required": true,
            "source_ref": "src/mame/drivers/megatech.c:1393",
            "system": "sega-megatech"
          },
          {
            "category": "bios_zip",
            "name": "cdibios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cdi.c:611",
            "system": "philips-cdi"
          },
          {
            "category": "bios_zip",
            "name": "cubo.zip",
            "required": true,
            "source_ref": "src/mame/drivers/cubo.c:1362",
            "system": "commodore-cubo"
          },
          {
            "category": "bios_zip",
            "name": "sys246.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:672",
            "system": "namco-system246"
          },
          {
            "category": "bios_zip",
            "name": "sys256.zip",
            "required": true,
            "source_ref": "src/mame/drivers/namcops2.c:705",
            "system": "namco-system256"
          },
          {
            "category": "bios_zip",
            "name": "sys573.zip",
            "required": true,
            "source_ref": "src/mame/drivers/ksys573.c:4678",
            "system": "namco-system573"
          },
          {
            "category": "bios_zip",
            "name": "kviper.zip",
            "required": true,
            "source_ref": "src/mame/drivers/viper.c:2609",
            "system": "konami-viper"
          },
          {
            "category": "bios_zip",
            "name": "konamigv.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigv.c:822",
            "system": "konami-gv"
          },
          {
            "category": "bios_zip",
            "name": "konamigx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/konamigx.c:3775"
          },
          {
            "category": "bios_zip",
            "name": "gq863.zip",
            "required": true,
            "source_ref": "src/mame/drivers/twinkle.c:1330",
            "system": "konami-twinkle"
          },
          {
            "category": "bios_zip",
            "name": "taitogn.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitogn.c:1081",
            "system": "taito-gnet"
          },
          {
            "category": "bios_zip",
            "name": "taitotz.zip",
            "required": true,
            "source_ref": "src/mame/drivers/taitotz.c:2951"
          },
          {
            "category": "bios_zip",
            "name": "taitofx1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4906"
          },
          {
            "category": "bios_zip",
            "name": "cpzn1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4800",
            "system": "capcom-zn1"
          },
          {
            "category": "bios_zip",
            "name": "cpzn2.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4823",
            "system": "capcom-zn2"
          },
          {
            "category": "bios_zip",
            "name": "atpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4853"
          },
          {
            "category": "bios_zip",
            "name": "acpsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4862"
          },
          {
            "category": "bios_zip",
            "name": "tps.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4873"
          },
          {
            "category": "bios_zip",
            "name": "vspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4896"
          },
          {
            "category": "bios_zip",
            "name": "psarc95.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4935"
          },
          {
            "category": "bios_zip",
            "name": "atluspsx.zip",
            "required": true,
            "source_ref": "src/mame/drivers/zn.c:4961"
          },
          {
            "category": "bios_zip",
            "name": "skns.zip",
            "required": true,
            "source_ref": "src/mame/drivers/suprnova.c:1734",
            "system": "super-kaneko-nova"
          },
          {
            "category": "bios_zip",
            "name": "mac2bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:747"
          },
          {
            "category": "bios_zip",
            "name": "macsbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/macs.c:746"
          },
          {
            "category": "bios_zip",
            "name": "3dobios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/3do.c:253",
            "system": "panasonic-3do"
          },
          {
            "category": "bios_zip",
            "name": "hng64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/hng64.c:1991",
            "system": "hyper-neogeo64"
          },
          {
            "category": "bios_zip",
            "name": "ar_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/arcadia.c:963"
          },
          {
            "category": "bios_zip",
            "name": "alg_bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/alg.c:772"
          },
          {
            "category": "bios_zip",
            "name": "aleck64.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aleck64.c:1161"
          },
          {
            "category": "bios_zip",
            "name": "atarisy1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/atarisy1.c:2368"
          },
          {
            "category": "bios_zip",
            "name": "maxaflex.zip",
            "required": true,
            "source_ref": "src/mame/drivers/maxaflex.c:536"
          },
          {
            "category": "bios_zip",
            "name": "crysbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/crystal.c:1134"
          },
          {
            "category": "bios_zip",
            "name": "galgbios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tmaster.c:1850"
          },
          {
            "category": "bios_zip",
            "name": "aristmk5.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk5.c:739"
          },
          {
            "category": "bios_zip",
            "name": "aristmk6.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk6.c:224"
          },
          {
            "category": "bios_zip",
            "name": "mk6nsw11.zip",
            "required": true,
            "source_ref": "src/mame/drivers/aristmk6.c:225"
          },
          {
            "category": "bios_zip",
            "name": "allied.zip",
            "required": true,
            "source_ref": "src/mame/drivers/allied.c:711"
          },
          {
            "category": "bios_zip",
            "name": "gp_110.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gp_1.c:531"
          },
          {
            "category": "bios_zip",
            "name": "gts1.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.c:978"
          },
          {
            "category": "bios_zip",
            "name": "gts1s.zip",
            "required": true,
            "source_ref": "src/mame/drivers/gts1.c:981"
          },
          {
            "category": "bios_zip",
            "name": "bubsys.zip",
            "required": true,
            "source_ref": "src/mame/drivers/nemesis.c:2707"
          },
          {
            "category": "bios_zip",
            "name": "isgsm.zip",
            "required": true,
            "source_ref": "src/mame/drivers/segas16b.c:7501"
          },
          {
            "category": "bios_zip",
            "name": "iteagle.zip",
            "required": true,
            "source_ref": "src/mame/drivers/iteagle.c:315"
          },
          {
            "category": "bios_zip",
            "name": "pyson.zip",
            "required": true,
            "source_ref": "src/mame/drivers/pyson.c:251"
          },
          {
            "category": "bios_zip",
            "name": "sammymdl.zip",
            "required": true,
            "source_ref": "src/mame/drivers/sigmab98.c:2277"
          },
          {
            "category": "bios_zip",
            "name": "shtzone.zip",
            "required": true,
            "source_ref": "src/mame/drivers/shtzone.c:121"
          },
          {
            "category": "bios_zip",
            "name": "su2000.zip",
            "required": true,
            "source_ref": "src/mame/drivers/su2000.c:296"
          },
          {
            "category": "bios_zip",
            "name": "tourvis.zip",
            "required": true,
            "source_ref": "src/mame/drivers/tourvis.c:612"
          },
          {
            "category": "bios_zip",
            "name": "v4bios.zip",
            "required": true,
            "source_ref": "src/mame/drivers/mpu4vid.c:3655"
          }
        ],
        "logo": "https://raw.githubusercontent.com/mamedev/mame/master/docs/source/images/MAMElogo.svg",
        "mame_version": "0.159",
        "notes": "Universal Machine Emulator — combined MAME + MESS before the official\nmerge at MAME 0.162. Same repo as mame2015 (mame2015-libretro), built\nwith -DWANT_UME including both mame.mak and mess.mak. 69 arcade BIOS\nroot sets (identical to mame2015), plus 619 MESS computer/console\ndrivers. Source version.c says 0.159, .info claims 0.160.\n\nPaths under system_dir/ume2015/ (samples, artwork, cheat, hash, ini).\nSoftware list hash XMLs in system_dir/ume2015/hash/ (375 files from\nrepo hash/ directory, required for MESS software list support).\nPer-game XML cheats in system_dir/ume2015/cheat/.\nhiscore.dat loaded via f.open(\"hiscore\", \".dat\") without explicit\nsearch path (libretro-specific path code disabled via #if 0).\n\nROM naming follows MAME 0.159 conventions.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/mame2015-libretro",
        "source_commit": "283e04b03c121db9be12632d6bad2fc3e8707248",
        "systems": [
          "snk-neogeo-mvs",
          "snk-neogeo-aes",
          "igs-pgm",
          "sega-naomi",
          "sega-naomi2",
          "sega-naomigd",
          "sammy-atomiswave",
          "sega-stv",
          "sega-lindbergh",
          "sega-hikaru",
          "sega-chihiro",
          "sega-triforce",
          "deco-cassette",
          "nintendo-playch10",
          "sega-megaplay",
          "sega-megatech",
          "nintendo-sfcbox",
          "nintendo-nss",
          "philips-cdi",
          "commodore-cubo",
          "namco-system246",
          "namco-system256",
          "namco-system573",
          "konami-viper",
          "taito-gnet",
          "super-kaneko-nova",
          "capcom-zn1",
          "capcom-zn2",
          "konami-gv",
          "panasonic-3do",
          "hyper-neogeo64",
          "konami-twinkle"
        ],
        "type": "libretro",
        "upstream": "https://github.com/mamedev/mame/tree/mame0159"
      }
    },
    {
      "id": "uw8",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "0.2.2",
        "cores": [
          "uw8"
        ],
        "display_name": "MicroW8",
        "emulator": "MicroW8",
        "files": [],
        "notes": "WebAssembly-based fantasy console. 320x240 screen, 32-color palette, 256KB memory. The WASM runtime (platform + loader modules) is compiled to C via wasm2c and embedded in the binary. No external files required. firmware_count=0 in .info is correct.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/uw8-libretro",
        "source_commit": "2dced6e1b990222033e269d5fb269b2e2f9ee543",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/exoticorn/microw8"
      }
    },
    {
      "id": "uxn",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.0.1",
        "cores": [
          "uxn"
        ],
        "display_name": "Uxn / Varvara (zuxn)",
        "emulator": "UXN",
        "exclusion_note": "Uxn/Varvara is a software-defined stack machine with 64KB of memory. The VM has no firmware or BIOS. ROMs compiled from Uxntal assembly are loaded directly via libretro game_info. The .info declares no firmware.\n",
        "files": [],
        "notes": "Libretro wrapper around the zuxn library (Zig implementation of the Uxn/Varvara spec by Hundred Rabbits). The file device in Varvara handles ROM-initiated I/O but does not load system files from the system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://codeberg.org/iyzsong/uxn-libretro",
        "source_commit": "65e28e59929a9946916221337397808a3d8c67a3",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/chmod222/zuxn"
      }
    },
    {
      "id": "uzem",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "v2.0",
        "cores": [
          "uzem"
        ],
        "display_name": "Uzebox (Uzem)",
        "emulator": "uzem",
        "files": [],
        "notes": {
          "open_source_console": "Fully open-source hardware and software designed by Alec Bourque. No proprietary BIOS or bootloader. Games are self-contained .uze files.\n",
          "sd_card": "Some games use SD card access for loading assets. The core reads from the libretro core assets directory to emulate a FAT16 SD card (game data, not system firmware).\n"
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-uzem",
        "source_commit": "cd6004ea143435cfdb6b12e7c6779dab499f7829",
        "systems": [
          "uzebox"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Uzebox/uzebox"
      }
    },
    {
      "id": "vaporspec",
      "profile": {
        "core_classification": "official_port",
        "core_version": "GIT",
        "cores": [
          "vaporspec"
        ],
        "display_name": "VaporSpec",
        "emulator": "VaporSpec",
        "files": [],
        "notes": "Fantasy console with fixed specs (256x192 display, 4-channel audio, 256-color palette). Runs .vaporbin cartridge bundles containing code and optional ROM data. All content is self-contained in the bundle passed by the frontend; no system directory files loaded. firmware_count=0 confirmed by code analysis.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/minkcv/vm",
        "source_commit": "02a3345cc9b5cb38c529eabe6967b25a95501559",
        "systems": [
          "vaporspec"
        ],
        "type": "libretro",
        "upstream": "https://github.com/minkcv/vm"
      }
    },
    {
      "id": "vba_m",
      "profile": {
        "alias_of": "vbam",
        "emulator": "VBA-M",
        "files": [],
        "note": "Legacy profile key retained for platform and buildbot compatibility.",
        "type": "alias"
      }
    },
    {
      "id": "vba_next",
      "profile": {
        "core_classification": "frozen_snapshot",
        "core_version": "SVN",
        "cores": [
          "vba_next"
        ],
        "display_name": "Nintendo - Game Boy Advance (VBA Next)",
        "emulator": "VBA-Next",
        "files": [
          {
            "description": "GBA BIOS",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "note": "Optional. HLE replacement handles all standard SWI calls. Real BIOS adds startup logo and may improve edge-case accuracy.",
            "required": false,
            "size": 16384,
            "source_ref": "libretro/libretro.c:213-218, src/gba.c:12954-12963",
            "system": "nintendo-gba",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Frozen snapshot of VBA-M circa 2011, optimized for libretro by Squarepusher.\n\nBuilt-in HLE BIOS (myROM array, src/gba.c:8930) handles all standard SWI\ncalls. No external BIOS file needed for most games.\n\nBIOS loading gated by HAVE_HLE_BIOS (build/Makefile.common:3) and core option\nvbanext_bios (default: enabled). When enabled, retro_init resolves gba_bios.bin\nin system_dir (libretro/libretro.c:213-218). CPUInit loads via utilLoad(),\nvalidates size == 0x4000, sets useBios = true (src/gba.c:12943-12950). On\nfailure, myROM is memcpy'd as HLE fallback (src/gba.c:12954-12956).\n\nWith real BIOS, execution starts at 0x00000000 (BIOS entry point). Without,\njumps to 0x08000000 (ROM entry), skipping boot animation\n(src/gba.c:13134-13151).\n\nUpstream VBA-M CPUInit (src/core/gba/gba.cpp:3674-3702) is functionally\nidentical. No divergences in BIOS handling.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vba-next",
        "source_commit": "2b96fd3a77025f3083daf61126b1852d5e0eace7",
        "systems": [
          "nintendo-gba"
        ],
        "type": "libretro",
        "upstream": "https://github.com/visualboyadvance-m/visualboyadvance-m"
      }
    },
    {
      "id": "vbam",
      "profile": {
        "core_classification": "official_port",
        "core_version": "2.1.4",
        "cores": [
          "vbam",
          "vba-m"
        ],
        "display_name": "Nintendo - Game Boy Advance (VBA-M)",
        "emulator": "VBA-M",
        "files": [
          {
            "description": "GBA BIOS",
            "hle_fallback": true,
            "name": "gba_bios.bin",
            "required": false,
            "size": 16384,
            "source_ref": "src/gba/GBA.cpp:3262-3272 (CPUInit size check), src/libretro/libretro.cpp:846-851 (gba_init)",
            "system": "nintendo-gba",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Boy boot ROM",
            "hle_fallback": true,
            "name": "gb_bios.bin",
            "required": false,
            "size": 256,
            "source_ref": "src/gb/GB.cpp:2172-2192 (gbCPUInit size check), src/libretro/libretro.cpp:861-879 (gb_init)",
            "system": "nintendo-gb",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Game Boy Color boot ROM",
            "hle_fallback": true,
            "name": "gbc_bios.bin",
            "required": false,
            "size": 2304,
            "source_ref": "src/gb/GB.cpp:2172-2192 (gbCPUInit size check), src/libretro/libretro.cpp:861-879 (gb_init)",
            "system": "nintendo-gbc",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Supports GB, GBC, GBA, and SGB (borders/palette only).\nBIOS usage controlled by vbam_usebios core option (default: disabled).\nBuilt-in HLE BIOS (myROM array) handles GBA SWI calls without external file.\nGB/GBC boot sequence skipped when BIOS absent.\nUpstream repo includes the libretro port in src/libretro/.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vbam-libretro",
        "source_commit": "e8b2875d6cad10fc3c7c9f57bb5f1acc324d7c10",
        "systems": [
          "nintendo-gba",
          "nintendo-gb",
          "nintendo-gbc"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/visualboyadvance-m/visualboyadvance-m"
      }
    },
    {
      "id": "vecx",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "SVN",
        "cores": [
          "vecx"
        ],
        "display_name": "GCE - Vectrex (vecx)",
        "emulator": "vecx",
        "files": [],
        "notes": "vecx is a GCE Vectrex emulator ported to libretro.\n\nThe Vectrex system ROM (8192 bytes) is fully embedded in the binary.\nThere are three compile-time BIOS variants in bios/:\n  - system.h (STANDARD_BIOS, default) - original Vectrex ROM\n  - fast.h   (FAST_BIOS) - modified BIOS with faster boot\n  - skip.h   - modified BIOS that skips the intro\n\nThe default build uses STANDARD_BIOS via #define at libretro.c:20.\nAt load time (retro_load_game, libretro.c:736):\n  memcpy(rom, bios_data, bios_data_size);\nThis copies the compiled-in BIOS data into the rom[8192] array\n(vecx.c:40, mapped at 0xE000-0xFFFF via vecx.c:437-439).\n\nThe core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY and has\nno code path to load an external BIOS file from disk. No .info file\nis shipped with the repo declaring firmware requirements.\n\nrom.dat in the repo root is identical to bios/system.bin (same MD5:\nab082fa8c8e632dd68589a8c7741388f), likely kept for standalone builds.\n",
        "platform_details": {
          "bios_mapping": {
            "note": "CPU reads from 0xE000-0xFFFF are served from rom[] via\naddress & 0x1FFF masking. The array is populated from the\ncompiled-in bios_data at retro_load_game() time.\n",
            "source_ref": "vecx.c:40 (unsigned char rom[8192]), vecx.c:437-439 (read handler)",
            "target": "0xE000-0xFFFF in Vectrex address space (8 KB)"
          },
          "embedded_bios": {
            "fast_bios": {
              "md5": "a970aed37cffd29ab3740f8e79518858",
              "sha1": "e0900be6d6858b985fd7f0999d864b2fceaf01a1",
              "size": 8192
            },
            "note": "All three variants are 8192 bytes, compiled as C arrays in\nbios/*.h headers. STANDARD_BIOS is the authentic Vectrex ROM.\nFAST_BIOS and skip are modified versions for faster startup.\nSelection is compile-time only (#ifdef chain, libretro.c:20-30).\n",
            "skip_bios": {
              "md5": "05f32c2b18b6fb168ab976989e86dfb1",
              "sha1": "6c891bd74acb201d54071b310bd6df6617cdf205",
              "size": 8192
            },
            "source_ref": "libretro.c:20-30, bios/system.h",
            "standard_bios": {
              "md5": "ab082fa8c8e632dd68589a8c7741388f",
              "sha1": "65d07426b520ddd3115d40f255511e0fd2e20ae7",
              "size": 8192
            }
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/libretro-vecx",
        "source_commit": "eacee1f6f029688b043ed802cece29dd3c320e21",
        "systems": [
          "gce-vectrex"
        ],
        "type": "libretro",
        "upstream": "https://github.com/jhawthorn/vecx"
      }
    },
    {
      "id": "veesem",
      "profile": {
        "analysis": {
          "generated_files": [
            {
              "note": "Save data rather than a dump to obtain. The 128K-word buffer is allocated before the stream is tested (ui.cc:210-211), so an absent or unreadable file leaves a blank NVRAM, and -art on its own selects the same cartridge type with no file at all (ui.cc:218-220). It backs the drawing area of V.Smile Art Studio (vsmile.cc:180-196) and is flushed to the same path when the machine is unloaded.\n",
              "source_ref": "src/main.cc:71-77 (flag), src/ui/ui.cc:206-221 (read), src/ui/ui.cc:153-170 (write)",
              "what": "Art Studio CSB2 NVRAM, -art-nvram FILE"
            }
          ],
          "settings_storage": {
            "note": "io.IniFilename is nullptr, so Dear ImGui reads and writes no imgui.ini. Every setting comes from the command line or the UI, and no other path in the tree is opened.\n",
            "source_ref": "src/ui/ui.cc:126"
          },
          "user_supplied_paths": {
            "entries": [
              {
                "note": "Read into a 4M-word buffer and mapped over ROMCSB, CSB1 and CSB2 (vsmile.cc:168-190). The dual-ROM cartridges pair a 4 MiB ROM on the first two banks with a 2 MiB ROM on CSB2, which the code reads from the same dump at word 0x200000.\n",
                "source_ref": "src/main.cc:119-126, src/ui/ui.cc:180-187",
                "what": "cartridge ROM, the positional argument"
              },
              {
                "source_ref": "src/main.cc:64-70, src/ui/ui.cc:189-197",
                "what": "system ROM, -sysrom"
              }
            ],
            "note": "Named on the command line, with no fixed filename"
          }
        },
        "core_classification": "other",
        "core_version": "0.2",
        "cores": [
          "veesem"
        ],
        "display_name": "VTech - V.Smile (veesem)",
        "emulator": "veesem",
        "files": [
          {
            "description": "V.Smile system ROM, revision 1.03",
            "hle_fallback": true,
            "name": "vsmile_v103.bin",
            "note": "Jumper 0x2 gives Italian and 0xa UK English without subtitle on this revision, the two values 1.02 assigns the other way round.\n",
            "required": false,
            "size": 2097152,
            "source_ref": "src/main.cc:64-70 (-sysrom), src/ui/ui.cc:189-197 (load), src/core/vsmile/vsmile.h:17 (buffer), src/core/vsmile/vsmile.cc:198-200 (CSB3), src/core/vsmile/vsmile.cc:5,13 (jumper values for 1.03)"
          },
          {
            "description": "V.Smile system ROM, revision 1.02",
            "hle_fallback": true,
            "name": "vsmile_v102.bin",
            "note": "The revision the \"1.02+\" entries describe: 0x0 and 0x1 suppress the V.Smile screen, 0x3 to 0x5 select US English variants and 0xe and 0xf carry the \"Learning System\" subtitle.\n",
            "required": false,
            "size": 2097152,
            "source_ref": "src/main.cc:64-70 (-sysrom), src/ui/ui.cc:189-197 (load), src/core/vsmile/vsmile.h:17 (buffer), src/core/vsmile/vsmile.cc:198-200 (CSB3), src/core/vsmile/vsmile.cc:4-9,13,17-18 (jumper values for 1.02+)"
          },
          {
            "description": "V.Smile system ROM, revision 1.00",
            "hle_fallback": true,
            "name": "vsmile_v100.bin",
            "note": "Its standard English subtitle is \"TV Learning System\", and with no cartridge and a region code below 0x6 it shows a blinking blue VTech logo in white.\n",
            "required": false,
            "size": 2097152,
            "source_ref": "src/main.cc:64-70 (-sysrom), src/ui/ui.cc:189-197 (load), src/core/vsmile/vsmile.h:17 (buffer), src/core/vsmile/vsmile.cc:198-200 (CSB3), src/core/vsmile/vsmile.cc:13,20-24 (jumper values and behaviour for 1.00)"
          }
        ],
        "mode": "standalone",
        "notes": "V.Smile emulator written from scratch on top of a SunPlus SPG200 (unSP)\nimplementation, distributed as source only. No distribution packages it;\nES-DE offers it for its vsmile system beside MAME and the MAME libretro\ncore, and finds it by the binary name or the com.github.sp1187.veesem\nflatpak.\n\nThe system ROM has no fixed name and no search path. -sysrom takes a path\n(main.cc:64-70) which is opened directly (ui.cc:191), and the open is the\nonly check the tree performs: the read asks for sizeof *sysrom, the\n1024*1024-word buffer of vsmile.h:17, so a shorter file keeps the zeros the\nbuffer was value-initialised with and anything past 2 MiB is never reached.\nNo size test, no hash, no signature anywhere. Every word is passed through\nSDL_SwapLE16 after the read (ui.cc:196-197), so the image is consumed as\nlittle-endian 16-bit words.\n\nWithout -sysrom the buffer is synthesised instead: zero-filled, with 0x31\nwritten into the odd word of each pair over 0xFFFC0-0xFFFDB, called a\n\"game-compatible dummy system ROM\" in the code (ui.cc:198-204) and a \"dummy\nROM without boot animation\" in the README.\n\nNothing boots from the system ROM. Extmem::Reset leaves address_decode at 0\n(extmem.cc:7-10), routing every external address to ROMCSB, and bank 0 stays\nthe cartridge under all three decode modes (extmem.cc:20-52). The CPU takes\nits reset vector from 0xfff7 (cpu.cc:91), FIQ from 0xfff6, IRQs from\n0xfff8+n and BREAK from 0xfff5 (cpu.cc:116,125,228), all inside bank 0, so\nthe vectors always come from the cartridge. The system ROM sits on CSB3\n(vsmile.cc:198-200), reachable at 0x300000-0x3FFFFF only once cartridge code\nselects decode mode 2 or 3.\n\nRegion is a jumper, not a file. The low nibble of Port C carries the region\ncode and bit 4 the VTech logo jumper (vsmile.cc:148-152), defaulting to 0xe\nwith the logo on (main.cc:44-45) and settable with -region and -novtech. One\nsystem ROM image serves every region; the table at vsmile.cc:3-25 maps the\nsixteen jumper values to the intro each revision produces, and names\nrevisions 1.00, 1.02 and 1.03.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/sp1187/veesem",
        "source_commit": "42fb8f07e7418f16ccfb7364127aef2217dda641",
        "systems": [
          "vtech-vsmile"
        ],
        "type": "standalone",
        "upstream": "https://github.com/sp1187/veesem"
      }
    },
    {
      "id": "vemulator",
      "profile": {
        "core_classification": "official_port",
        "core_version": "0.1",
        "cores": [
          "vemulator"
        ],
        "display_name": "VeMUlator",
        "emulator": "VeMUlator",
        "files": [],
        "notes": "Sega Dreamcast VMU/VMS emulator. Same author (Mahmoud Jaoune) ported\nthe original Android Java app to C++ for libretro. Emulates the Sanyo\nLC8670 CPU, 128 KB flash, 48x32 LCD, piezo buzzer, and timers.\n\nNo BIOS files required. The core uses HLE exclusively: startCPU()\nchecks BIOSExists (always false), then initializeHLE() sets SFR\nregisters and system RAM directly (vmu.cpp:193-222).\n\nA loadBIOS() function exists (vmu.cpp:82-137) handling encrypted and\nunencrypted BIOS images, but is never called from the libretro\ninterface. retro_load_game() only loads game flash data, with no\nsystem directory query. README lists BIOS support as planned.\n",
        "platform_details": {
          "hle_implementation": {
            "note": "HLE skips the BIOS boot sequence and jumps directly into the loaded\ngame. System clock, date, and button state are initialized in RAM.\nThe EXT register is set to 1 to signal HLE mode to the CPU\n(vmu.cpp:198-199). Games that depend on BIOS-initialized state\nbeyond what HLE provides may not work correctly.\n",
            "ram_init": [
              "0x31 = 0xFF (battery level)",
              "0x6E = 0xFF",
              "P3 = 0xFF (no buttons pressed)",
              "BCD date/time at 0x10-0x16, raw at 0x17-0x1D"
            ],
            "sfr_init": {
              "BTCR": "0x41",
              "IE": "0x80",
              "MCR": "0x08",
              "OCR": "0xA3",
              "P7": "0x02",
              "PSW": "0x02",
              "SP": "0x7F"
            },
            "source_ref": "vmu.cpp:195-222"
          },
          "unused_bios_loader": {
            "detection": "first byte 0x2A (JMPF) = unencrypted, otherwise encrypted",
            "encryption": "XOR 0x37 after stripping 4-byte header",
            "max_file_size": 61444,
            "note": "The loadBIOS() method is fully implemented but unreachable from the\nlibretro interface. No system directory query, no BIOS path construction,\nand no call site exists in main.cpp. A future update could wire this up\nto support real VMU firmware boot (file manager, clock, mini-games menu).\n",
            "rom_load_size": 61440,
            "source_ref": "vmu.cpp:82-137"
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vemulator-libretro",
        "source_commit": "45d7556667549bb1c1b84d27fbffb7d2a633f5d3",
        "systems": [
          "sega-vmu"
        ],
        "type": "libretro",
        "upstream": "closed-source Android app (removed from Google Play ~2020)"
      }
    },
    {
      "id": "vice",
      "profile": {
        "core_version": "3.9",
        "cores": [
          "vice_x64",
          "vice_x64sc",
          "vice_x64dtv",
          "vice_x128",
          "vice_xvic",
          "vice_xplus4",
          "vice_xpet",
          "vice_xcbm2",
          "vice_xcbm5x0",
          "vice_xscpu64"
        ],
        "display_name": "Commodore - C64 (VICE x64, fast)",
        "emulator": "VICE",
        "files": [
          {
            "crc32": "f833d117",
            "embedded": true,
            "hle_fallback": true,
            "md5": "57af4ae21d4b705c2991d98ed5c1f7b8",
            "name": "vice/C64/basic-901226-01.bin",
            "note": "C64 BASIC V2 ROM. Embedded in core.",
            "required": false,
            "sha1": "79015323128650c742a3694c9429aa91f355905e",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:31",
            "system": "commodore-c64"
          },
          {
            "crc32": "dbe3e7c7",
            "embedded": true,
            "hle_fallback": true,
            "md5": "39065497630802346bce17963f13c092",
            "name": "vice/C64/kernal-901227-03.bin",
            "note": "C64 Kernal Rev 3 (default). Embedded in core.",
            "required": false,
            "sha1": "1d503e56df85a62fee696e7618dc5b4e781df1bb",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:52",
            "system": "commodore-c64"
          },
          {
            "crc32": "dce782fa",
            "embedded": true,
            "hle_fallback": true,
            "md5": "1ae0ea224f2b291dafa2c20b990bb7d4",
            "name": "vice/C64/kernal-901227-01.bin",
            "note": "C64 Kernal Rev 1. Embedded in core.",
            "required": false,
            "sha1": "87cc04d61fc748b82df09856847bb5c2754a2033",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:50",
            "system": "commodore-c64"
          },
          {
            "crc32": "a5c687b3",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7360b296d64e18b88f6cf52289fd99a1",
            "name": "vice/C64/kernal-901227-02.bin",
            "note": "C64 Kernal Rev 2. Embedded in core.",
            "required": false,
            "sha1": "0e2e4ee3f2d41f00bed72f9ab588b83e306fdb13",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:51",
            "system": "commodore-c64"
          },
          {
            "crc32": "505365d4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "ddee89b0fed19572da5245ea68ff11b5",
            "name": "vice/C64/kernal-390852-01.bin",
            "note": "C64 GS (Games System) Kernal. Embedded in core.",
            "required": false,
            "sha1": "3ad6cc1837c679a11f551ad1cf1a32dd84ace719",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:53",
            "system": "commodore-c64"
          },
          {
            "crc32": "2c5965d4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "187b8c713b51931e070872bd390b472a",
            "name": "vice/C64/kernal-251104-04.bin",
            "note": "SX-64 Kernal. Embedded in core.",
            "required": false,
            "sha1": "aa136e91ecf3c5ac64f696b3dbcbfc5ba0871c98",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:54",
            "system": "commodore-c64"
          },
          {
            "crc32": "789c8cc5",
            "embedded": true,
            "hle_fallback": true,
            "md5": "da92801e3a03b005b746a4dd0b639c7c",
            "name": "vice/C64/kernal-901246-01.bin",
            "note": "PET64/Educator64 (4064) Kernal. Embedded in core.",
            "required": false,
            "sha1": "6c4fa9465f6091b174df27dfe679499df447503c",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:55",
            "system": "commodore-c64"
          },
          {
            "crc32": "3a9ef6f1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "479553fd53346ec84054f0b1c6237397",
            "name": "vice/C64/kernal-906145-02.bin",
            "note": "C64 Japanese Kernal. Embedded in core.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "4ff0f11e80f4b57430d8f0c3799ed0f0e0f4565d",
            "size": 8192,
            "source_ref": "vice/src/c64/c64rom.h:49",
            "system": "commodore-c64"
          },
          {
            "crc32": "ec4272ee",
            "embedded": true,
            "hle_fallback": true,
            "md5": "12a4202f5331d45af846af6c58fba946",
            "name": "vice/C64/chargen-901225-01.bin",
            "note": "C64 Character Generator ROM (default). Embedded in core.",
            "required": false,
            "sha1": "adc7c31e18c7c7413d54802ef2f4193da14711aa",
            "size": 4096,
            "source_ref": "vice/src/c64/c64rom.h:60",
            "system": "commodore-c64"
          },
          {
            "crc32": "1604f6c1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "cf32a93c0a693ed359a4f483ef6db53d",
            "name": "vice/C64/chargen-906143-02.bin",
            "note": "C64 Japanese Character Generator ROM. Embedded in core.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "0fad19dbcdb12461c99657b2979dbb5c2e47b527",
            "size": 4096,
            "source_ref": "vice/src/c64/c64rom.h:61",
            "system": "commodore-c64"
          },
          {
            "crc32": "ba456b8e",
            "embedded": true,
            "hle_fallback": true,
            "md5": "01f6903033b90cd506cde7802ec743c3",
            "name": "vice/C128/kernal-318020-05.bin",
            "note": "C128 Kernal (default international). Embedded in core.",
            "required": false,
            "sha1": "ceb6e1a1bf7e08eb9cbc651afa29e26adccf38ab",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:103",
            "system": "commodore-c128"
          },
          {
            "crc32": "bff7550b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "9837409b6bdb7ce055409fa3eb3e9cf0",
            "name": "vice/C128/kernal-315078-03.bin",
            "note": "C128 Kernal German. Embedded in core.",
            "region": [
              "germany"
            ],
            "required": false,
            "sha1": "3629b3fa28b6a30bcc027b647f26654929ed1b0f",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:105",
            "system": "commodore-c128"
          },
          {
            "crc32": "d311dab1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "90907477d39db1b8fe1732692278a0e9",
            "name": "vice/C128/kernal-325172-01.bin",
            "note": "C128 Kernal Swiss. Embedded in core.",
            "required": false,
            "sha1": "98c34e0dec9f52d7862b56bb287d2573eb3f6364",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:104",
            "system": "commodore-c128"
          },
          {
            "crc32": "1cf7f729",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7852922295c103f067ba3c0f56378a95",
            "name": "vice/C128/kernal-318034-01.bin",
            "note": "C128 Kernal Swedish. Embedded in core.",
            "region": [
              "sweden"
            ],
            "required": false,
            "sha1": "925177c99ee7e02870c32ad62a054db1327cf0c2",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:110",
            "system": "commodore-c128"
          },
          {
            "crc32": "d3ecea84",
            "embedded": true,
            "hle_fallback": true,
            "md5": "0a0eb549ec08624de11cf1f249f6f3dc",
            "name": "vice/C128/kernalfi",
            "note": "C128 Kernal Finnish (unidentified part number). Embedded in core.",
            "required": false,
            "sha1": "d08e7991a6df14a843e92daafaf6756337959ba4",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:106",
            "system": "commodore-c128"
          },
          {
            "crc32": "2df282b8",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7a7747aa70fd63402c6a95fba0bd6806",
            "name": "vice/C128/kernalfr",
            "note": "C128 Kernal French (unidentified part number). Embedded in core.",
            "region": [
              "france"
            ],
            "required": false,
            "sha1": "a0680d04db3232fa9f58598e5c9f09c4fe94f601",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:107",
            "system": "commodore-c128"
          },
          {
            "crc32": "74d6b084",
            "embedded": true,
            "hle_fallback": true,
            "md5": "142c8bd5934e9d97addb6776a2f2e8b8",
            "name": "vice/C128/kernalit",
            "note": "C128 Kernal Italian (unidentified part number). Embedded in core.",
            "region": [
              "italy"
            ],
            "required": false,
            "sha1": "592a626eb2b5372596ac374d3505c3ce78dd040f",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:108",
            "system": "commodore-c128"
          },
          {
            "crc32": "a5406848",
            "embedded": true,
            "hle_fallback": true,
            "md5": "498fdedaeab458931b6103d52d5a3ea1",
            "name": "vice/C128/kernalno",
            "note": "C128 Kernal Norwegian (unidentified part number). Embedded in core.",
            "required": false,
            "sha1": "00fe2fd610a812121befab1e7238fa882c0f8257",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:109",
            "system": "commodore-c128"
          },
          {
            "crc32": "9f9c355b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "b86ce827c9108fbc7b9e02c690e81a23",
            "name": "vice/C128/basiclo-318018-04.bin",
            "note": "C128 BASIC low (BASIC part). Embedded in core.",
            "required": false,
            "sha1": "d53a7884404f7d18ebd60dd3080c8f8d71067441",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:115",
            "system": "commodore-c128"
          },
          {
            "crc32": "6e2c91a7",
            "embedded": true,
            "hle_fallback": true,
            "md5": "87bb251707d0a2c915d6e0c69fdb0fed",
            "name": "vice/C128/basichi-318019-04.bin",
            "note": "C128 BASIC high (Editor part). Embedded in core.",
            "required": false,
            "sha1": "c4fb4a714e48a7bf6c28659de0302183a0e0d6c0",
            "size": 16384,
            "source_ref": "vice/src/c128/c128rom.h:116",
            "system": "commodore-c128"
          },
          {
            "embedded": true,
            "hle_fallback": true,
            "name": "vice/C128/basic-901226-01.bin",
            "note": "C64 BASIC V2 ROM, used by C128 in C64 mode. Libretro build uses C64 filename instead of basic64-901226-01.bin.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:123-127",
            "system": "commodore-c128"
          },
          {
            "embedded": true,
            "hle_fallback": true,
            "name": "vice/C128/kernal-901227-03.bin",
            "note": "C64 Kernal Rev 3, used by C128 in C64 mode. Libretro build uses C64 filename instead of kernal64-901227-03.bin.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:130-134",
            "system": "commodore-c128"
          },
          {
            "crc32": "dd2976d2",
            "embedded": true,
            "hle_fallback": true,
            "md5": "8fa940c39225d40f37ddf7082fba8b21",
            "name": "vice/C128/kernal64-325179-01.bin",
            "note": "C128 C64-mode Kernal Norwegian. Embedded in core.",
            "required": false,
            "sha1": "b4862cac7b9319d8e912887c97fc270d4c239349",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:136",
            "system": "commodore-c128"
          },
          {
            "crc32": "f10c2c25",
            "embedded": true,
            "hle_fallback": true,
            "md5": "27e26dbb267c8ebf1cd47105a6ca71e7",
            "name": "vice/C128/kernal64-325182-01.bin",
            "note": "C128 C64-mode Kernal Swedish. Embedded in core.",
            "region": [
              "sweden"
            ],
            "required": false,
            "sha1": "e4f52d9b36c030eb94524eb49f6f0774c1d02e5e",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:137",
            "system": "commodore-c128"
          },
          {
            "crc32": "6aaaafe6",
            "embedded": true,
            "hle_fallback": true,
            "md5": "46b3cb2140f244c0ed1150c819e7bdc4",
            "name": "vice/C128/chargen-390059-01.bin",
            "note": "C128 Character Generator (default international). Embedded in core.",
            "required": false,
            "sha1": "29ed066d513f2d5c09ff26d9166ba23c2afb2b3f",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:92",
            "system": "commodore-c128"
          },
          {
            "crc32": "fe5a2db1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "ec9e71614010c4efb851b83bcd685e9c",
            "name": "vice/C128/chargen-315079-01.bin",
            "note": "C128 Character Generator German. Embedded in core.",
            "region": [
              "germany"
            ],
            "required": false,
            "sha1": "638f8aff51c2ac4f99a55b12c4f8c985ef4bebd3",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:95",
            "system": "commodore-c128"
          },
          {
            "crc32": "bad36b88",
            "embedded": true,
            "hle_fallback": true,
            "md5": "de3e110a48de76457dbc9ad320e2caa5",
            "name": "vice/C128/chargen-325167-02.bin",
            "note": "C128 Character Generator Italian/French/Belgian. Embedded in core.",
            "region": [
              "italy",
              "france"
            ],
            "required": false,
            "sha1": "9119b27a1bf885fa4c76fff5d858c74c194dd2b8",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:93",
            "system": "commodore-c128"
          },
          {
            "crc32": "c8def186",
            "embedded": true,
            "hle_fallback": true,
            "md5": "5cc3635e434fdc7023d0035e965ce76f",
            "name": "vice/C128/chargen-325173-01D.bin",
            "note": "C128 Character Generator Swiss. Embedded in core.",
            "required": false,
            "sha1": "70eccd8b944146f6b60f1519b830a4ee8928d4fa",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:94",
            "system": "commodore-c128"
          },
          {
            "crc32": "ba95c625",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7eead22a114154c809b33320c9250e26",
            "name": "vice/C128/chargen-325078-02.bin",
            "note": "C128 Character Generator Norwegian. Embedded in core.",
            "required": false,
            "sha1": "5a87faa457979e7b6f434251a9e32f4483b337b3",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:99",
            "system": "commodore-c128"
          },
          {
            "crc32": "7a70d9b8",
            "embedded": true,
            "hle_fallback": true,
            "md5": "06e46af13d13aa869218275e64d48b00",
            "name": "vice/C128/chargen-325181-01.bin",
            "note": "C128 Character Generator Finnish/Swedish. Embedded in core.",
            "region": [
              "finland",
              "sweden"
            ],
            "required": false,
            "sha1": "aca3f7321ee7e6152f1f0afad646ae41964de4fb",
            "size": 8192,
            "source_ref": "vice/src/c128/c128rom.h:96",
            "system": "commodore-c128"
          },
          {
            "crc32": "242daa5a",
            "embedded": true,
            "hle_fallback": true,
            "md5": "d6efbc538195f53cfc209543640cde71",
            "name": "vice/C64DTV/dtvrom.bin",
            "note": "C64 DTV flash ROM (2 MB). Contains kernal, basic, chargen. Embedded in core.",
            "required": false,
            "sha1": "72b4c8da075646cc9940e4377004c81192c7b0b1",
            "size": 2097152,
            "source_ref": "vice/src/c64dtv/c64dtvflash.c:59-64",
            "system": "commodore-c64dtv"
          },
          {
            "crc32": "f833d117",
            "embedded": true,
            "hle_fallback": true,
            "md5": "57af4ae21d4b705c2991d98ed5c1f7b8",
            "name": "vice/C64DTV/basic-901226-01.bin",
            "note": "C64 BASIC V2 ROM (DTV copy). Embedded in core.",
            "required": false,
            "sha1": "79015323128650c742a3694c9429aa91f355905e",
            "size": 8192,
            "source_ref": "vice/data/C64DTV/basic-901226-01.bin",
            "system": "commodore-c64dtv"
          },
          {
            "crc32": "ec4272ee",
            "embedded": true,
            "hle_fallback": true,
            "md5": "12a4202f5331d45af846af6c58fba946",
            "name": "vice/C64DTV/chargen-901225-01.bin",
            "note": "C64 Character Generator (DTV copy). Embedded in core.",
            "required": false,
            "sha1": "adc7c31e18c7c7413d54802ef2f4193da14711aa",
            "size": 4096,
            "source_ref": "vice/data/C64DTV/chargen-901225-01.bin",
            "system": "commodore-c64dtv"
          },
          {
            "crc32": "dbe3e7c7",
            "embedded": true,
            "hle_fallback": true,
            "md5": "39065497630802346bce17963f13c092",
            "name": "vice/C64DTV/kernal-901227-03.bin",
            "note": "C64 Kernal Rev 3 (DTV copy). Embedded in core.",
            "required": false,
            "sha1": "1d503e56df85a62fee696e7618dc5b4e781df1bb",
            "size": 8192,
            "source_ref": "vice/data/C64DTV/kernal-901227-03.bin",
            "system": "commodore-c64dtv"
          },
          {
            "crc32": "db4c43c1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "8b9237706f47a9b3498d8f881ef0244d",
            "name": "vice/VIC20/basic-901486-01.bin",
            "note": "VIC-20 BASIC ROM. Embedded in core.",
            "required": false,
            "sha1": "587d1e90950675ab6b12d91248a3f0d640d02e8d",
            "size": 8192,
            "source_ref": "vice/src/vic20/vic20rom.h:43",
            "system": "commodore-vic20"
          },
          {
            "crc32": "4be07cb4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "f0587624dcd7685710a8fdb35939617f",
            "name": "vice/VIC20/kernal.901486-07.bin",
            "note": "VIC-20 Kernal PAL (default). Embedded in core.",
            "required": false,
            "sha1": "ce0137ed69f003a299f43538fa9eee27898e621e",
            "size": 8192,
            "source_ref": "vice/src/vic20/vic20rom.h:53",
            "system": "commodore-vic20"
          },
          {
            "crc32": "e5e7c174",
            "embedded": true,
            "hle_fallback": true,
            "md5": "0313e31e5f31e1f739c2377792460d67",
            "name": "vice/VIC20/kernal.901486-06.bin",
            "note": "VIC-20 Kernal NTSC. Embedded in core.",
            "required": false,
            "sha1": "06de7ec017a5e78bd6746d89c2ecebb646efeb19",
            "size": 8192,
            "source_ref": "vice/src/vic20/vic20rom.h:52",
            "system": "commodore-vic20"
          },
          {
            "crc32": "336900d7",
            "embedded": true,
            "hle_fallback": true,
            "md5": "317f93bcbc5ee15da085a51a306f2c61",
            "name": "vice/VIC20/kernal.901486-02.bin",
            "note": "VIC-20 Kernal Japanese NTSC Rev 2. Embedded in core.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "c9ead45e6674d1042ca6199160e8583c23aeac22",
            "size": 8192,
            "source_ref": "vice/src/vic20/vic20rom.h:51",
            "system": "commodore-vic20"
          },
          {
            "crc32": "83e032a6",
            "embedded": true,
            "hle_fallback": true,
            "md5": "d390e340e94e1bef0f2fdfe9fa850993",
            "name": "vice/VIC20/chargen-901460-03.bin",
            "note": "VIC-20 Character Generator (default). Embedded in core.",
            "required": false,
            "sha1": "4fd85ab6647ee2ac7ba40f729323f2472d35b9b4",
            "size": 4096,
            "source_ref": "vice/src/vic20/vic20rom.h:56",
            "system": "commodore-vic20"
          },
          {
            "crc32": "fcfd8a4b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7e6e41b5b60fec798743afd7063b42ed",
            "name": "vice/VIC20/chargen-901460-02.bin",
            "note": "VIC-20 Japanese Character Generator. Embedded in core.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "dae61ac03065aa2904af5c123ce821855898c555",
            "size": 4096,
            "source_ref": "vice/src/vic20/vic20rom.h:57",
            "system": "commodore-vic20"
          },
          {
            "crc32": "74eaae87",
            "embedded": true,
            "hle_fallback": true,
            "md5": "44a4ae400e3b4f7533a47ae0df1be78c",
            "name": "vice/PLUS4/basic-318006-01.bin",
            "note": "Plus/4 BASIC ROM. Embedded in core.",
            "required": false,
            "sha1": "161c96b4ad20f3a4f2321808e37a5ded26a135dd",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:33",
            "system": "commodore-plus4"
          },
          {
            "crc32": "71c07bd4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "89f5263665a8dc10c8f8abc38f5f7eb9",
            "name": "vice/PLUS4/kernal-318004-05.bin",
            "note": "Plus/4 Kernal PAL Rev 5 (default PAL). Embedded in core.",
            "required": false,
            "sha1": "7c7e07f016391174a557e790c4ef1cbe33512cdb",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:36",
            "system": "commodore-plus4"
          },
          {
            "crc32": "70295038",
            "embedded": true,
            "hle_fallback": true,
            "md5": "b3c450c36a88b491281d18fdf3e94ab0",
            "name": "vice/PLUS4/kernal-318005-05.bin",
            "note": "Plus/4 Kernal NTSC Rev 5 (default NTSC). Embedded in core.",
            "required": false,
            "sha1": "a3d9e5be091b98de39a046ab167fb7632d053682",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:37",
            "system": "commodore-plus4"
          },
          {
            "crc32": "dbdc3319",
            "embedded": true,
            "hle_fallback": true,
            "md5": "a213823557421b66f9813ff19af48c01",
            "name": "vice/PLUS4/kernal-318004-01.bin",
            "note": "Plus/4 Kernal NTSC Rev 1 (V232 prototype). Embedded in core.",
            "required": false,
            "sha1": "3c77caf72914c1c0a0875b3a7f6935cd30c54201",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:35",
            "system": "commodore-plus4"
          },
          {
            "crc32": "84fd4f7a",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7abb51257595b233a1a63ae58c330a65",
            "name": "vice/PLUS4/kernal-364.bin",
            "note": "Commodore 364 prototype Kernal. Embedded in core.",
            "required": false,
            "sha1": "b9a5b5dacd57ca117ef0b3af29e91998bf4d7e5f",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:38",
            "system": "commodore-plus4"
          },
          {
            "crc32": "4fd1d8cb",
            "embedded": true,
            "hle_fallback": true,
            "md5": "2994d5463ef8524deb4231a9c764767c",
            "name": "vice/PLUS4/3plus1-317053-01.bin",
            "note": "3-Plus-1 software ROM low. Embedded in core.",
            "required": false,
            "sha1": "3b69f6e7cb4c18bb08e203fb18b7dabfa853390f",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:40",
            "system": "commodore-plus4"
          },
          {
            "crc32": "109de2fc",
            "embedded": true,
            "hle_fallback": true,
            "md5": "ac34591c820fe607d527e04e95bce465",
            "name": "vice/PLUS4/3plus1-317054-01.bin",
            "note": "3-Plus-1 software ROM high. Embedded in core.",
            "required": false,
            "sha1": "0ad7ac2db7da692d972e586ca0dfd747d82c7693",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:41",
            "system": "commodore-plus4"
          },
          {
            "crc32": "5227c2ee",
            "embedded": true,
            "hle_fallback": true,
            "md5": "0073ace3874a2c5ca5de9cf64cdfbbd4",
            "name": "vice/PLUS4/c2lo-364.bin",
            "note": "Commodore 364 prototype function ROM low. Embedded in core.",
            "required": false,
            "sha1": "59af401cbb2194f689898271c6e8aafa28a7af11",
            "size": 16384,
            "source_ref": "vice/src/plus4/plus4rom.h:43",
            "system": "commodore-plus4"
          },
          {
            "crc32": "aff78300",
            "embedded": true,
            "hle_fallback": true,
            "md5": "f328e785835907006604423222db7bbf",
            "name": "vice/PET/basic-1.901439-09-05-02-06.bin",
            "note": "PET BASIC 1.0 ROM (PET 2001). Embedded in core.",
            "required": false,
            "sha1": "3be9cd41b646fefa00d80f1c3433a06146e97c59",
            "size": 8192,
            "source_ref": "vice/src/pet/petrom.h:55",
            "system": "commodore-pet"
          },
          {
            "crc32": "cf35e68b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "b69739387bebe999227ae0cf25aa1e91",
            "name": "vice/PET/basic-2.901465-01-02.bin",
            "note": "PET BASIC 2.0 ROM. Embedded in core.",
            "required": false,
            "sha1": "9322a9f0354b9049847d98d3a045fbec860a6264",
            "size": 8192,
            "source_ref": "vice/src/pet/petrom.h:56",
            "system": "commodore-pet"
          },
          {
            "crc32": "2a940f0a",
            "embedded": true,
            "hle_fallback": true,
            "md5": "d22d2a1912a0cdbd9e7c8b103541b2c6",
            "name": "vice/PET/basic-4.901465-23-20-21.bin",
            "note": "PET BASIC 4.0 ROM. Embedded in core.",
            "required": false,
            "sha1": "d70bec479e1e3a0d0908a4897066e9959bbc11c8",
            "size": 12288,
            "source_ref": "vice/src/pet/petrom.h:57",
            "system": "commodore-pet"
          },
          {
            "crc32": "f0186492",
            "embedded": true,
            "hle_fallback": true,
            "md5": "61b7e2fd04d63b0702951ba40899cd72",
            "name": "vice/PET/kernal-1.901439-04-07.bin",
            "note": "PET Kernal 1.0 (PET 2001). Embedded in core.",
            "required": false,
            "sha1": "32dc08828e88c74d6433156e64d402b564556308",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:51",
            "system": "commodore-pet"
          },
          {
            "crc32": "f02238e2",
            "embedded": true,
            "hle_fallback": true,
            "md5": "51a38bfef8f9e72cb64bf7d874b4c8c6",
            "name": "vice/PET/kernal-2.901465-03.bin",
            "note": "PET Kernal 2.0. Embedded in core.",
            "required": false,
            "sha1": "38742bdf449f629bcba6276ef24d3daeb7da6e84",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:52",
            "system": "commodore-pet"
          },
          {
            "crc32": "cc5298a1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "16ec21443ea5431ab63d511061054e6f",
            "name": "vice/PET/kernal-4.901465-22.bin",
            "note": "PET Kernal 4.0. Embedded in core.",
            "required": false,
            "sha1": "96a0fa56e0c937da92971d9c99d504e44e898806",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:53",
            "system": "commodore-pet"
          },
          {
            "crc32": "9e1c5cea",
            "embedded": true,
            "hle_fallback": true,
            "md5": "ef9bd0e62dfc47eb463fef20d0344826",
            "name": "vice/PET/edit-1-n.901439-03.bin",
            "note": "PET Editor 1.0 Normal (graphics keyboard). Embedded in core.",
            "required": false,
            "sha1": "f02f5fb492ba93dbbd390f24c10f7a832dec432a",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:59",
            "system": "commodore-pet"
          },
          {
            "crc32": "e459ab32",
            "embedded": true,
            "hle_fallback": true,
            "md5": "cb8e8404c0b28eda10469792dfd1dbc2",
            "name": "vice/PET/edit-2-n.901447-24.bin",
            "note": "PET Editor 2.0 Normal (graphics keyboard). Embedded in core.",
            "required": false,
            "sha1": "5e5502ce32f5a7e387d65efe058916282041e54b",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:60",
            "system": "commodore-pet"
          },
          {
            "crc32": "05db957e",
            "embedded": true,
            "hle_fallback": true,
            "md5": "7f87889ca7ee2537f0c1993d35d0fb18",
            "name": "vice/PET/edit-2-b.901474-01.bin",
            "note": "PET Editor 2.0 Business keyboard. Embedded in core.",
            "required": false,
            "sha1": "174ace3a8c0348cd21d39cc864e2adc58b0101a9",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:61",
            "system": "commodore-pet"
          },
          {
            "crc32": "3370e359",
            "embedded": true,
            "hle_fallback": true,
            "md5": "b76d756e7ac8752ae0035f3ce5f1383c",
            "name": "vice/PET/edit-4-40-n-50Hz.901498-01.bin",
            "note": "PET Editor 4.0, 40 col, Normal keyboard, 50Hz. Embedded in core.",
            "required": false,
            "sha1": "05af284c914d53a52987b5f602466de75765f650",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:62",
            "system": "commodore-pet"
          },
          {
            "crc32": "16fb070c",
            "embedded": true,
            "hle_fallback": true,
            "md5": "8e69e040489098522846b1b1c63682c2",
            "name": "vice/PET/edit-4-40-b-50Hz.ts.bin",
            "note": "PET Editor 4.0, 40 col, Business keyboard, 50Hz. Embedded in core.",
            "required": false,
            "sha1": "9f91fbabfdd532d003d2508f399574ba8ec6ee5f",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:65",
            "system": "commodore-pet"
          },
          {
            "crc32": "845a44e6",
            "embedded": true,
            "hle_fallback": true,
            "md5": "3a0e2ef328040aa30b30a8134426879a",
            "name": "vice/PET/edit-4-80-b-50Hz.901474-04_.bin",
            "note": "PET Editor 4.0, 80 col, Business keyboard, 50Hz. Embedded in core.",
            "required": false,
            "sha1": "81975eab31a8f4f51ae2a20d099a567c7b3f2dd1",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:63",
            "system": "commodore-pet"
          },
          {
            "crc32": "54f32f45",
            "embedded": true,
            "hle_fallback": true,
            "md5": "29a82eb54e73ebc5673c718c489b174b",
            "name": "vice/PET/characters-1.901447-08.bin",
            "note": "PET Character Generator 1 (original PET 2001). Embedded in core.",
            "required": false,
            "sha1": "3e067cc621e4beafca2b90cb8f6dba975df2855b",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:46",
            "system": "commodore-pet"
          },
          {
            "crc32": "d8408674",
            "embedded": true,
            "hle_fallback": true,
            "md5": "9880432e633b15998d58884ff34c4e70",
            "name": "vice/PET/characters-2.901447-10.bin",
            "note": "PET Character Generator 2. Embedded in core.",
            "required": false,
            "sha1": "0157a2d55b7ac4eaeb38475889ebeea52e2593db",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:47",
            "system": "commodore-pet"
          },
          {
            "crc32": "ee8229c4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "dd30641d9e6a221edd725d1e529dcbdb",
            "name": "vice/PET/characters.901640-01.bin",
            "note": "SuperPET Character Generator. Embedded in core.",
            "required": false,
            "sha1": "bf346f11595a3e65e55d6aeeaa2c0cec807b66c7",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:48",
            "system": "commodore-pet"
          },
          {
            "crc32": "728a998b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "6eb1c1bfa6ce1444737794432966dfcc",
            "name": "vice/PET/waterloo-a000.901898-01.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $A000. Embedded in core.",
            "required": false,
            "sha1": "0414b3ab847c8977eb05c2fcc72efcf2f9d92871",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:75",
            "system": "commodore-pet"
          },
          {
            "crc32": "6beb7c62",
            "embedded": true,
            "hle_fallback": true,
            "md5": "537498d75ecf761d4991f9ebd85129ca",
            "name": "vice/PET/waterloo-b000.901898-02.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $B000. Embedded in core.",
            "required": false,
            "sha1": "df154939b934d0aeeb376813ec1ba0d43c2a3378",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:76",
            "system": "commodore-pet"
          },
          {
            "crc32": "5db4983d",
            "embedded": true,
            "hle_fallback": true,
            "md5": "3e8dd04902dc9fee172084698f84695f",
            "name": "vice/PET/waterloo-c000.901898-03.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $C000. Embedded in core.",
            "required": false,
            "sha1": "6c5b0cce97068f8841112ba6d5cd8e568b562fa3",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:77",
            "system": "commodore-pet"
          },
          {
            "crc32": "f55fc559",
            "embedded": true,
            "hle_fallback": true,
            "md5": "80f4d2351ee19673820989919c7c1e9b",
            "name": "vice/PET/waterloo-d000.901898-04.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $D000. Embedded in core.",
            "required": false,
            "sha1": "b42a2050a319a1ffca7868a8d8d635fadd37ec37",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:78",
            "system": "commodore-pet"
          },
          {
            "crc32": "b2cee903",
            "embedded": true,
            "hle_fallback": true,
            "md5": "a740ff5d0d1132ab18cfc1974fca908d",
            "name": "vice/PET/waterloo-e000.901897-01.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $E000. Embedded in core.",
            "required": false,
            "sha1": "e8ce8347451a001214a5e71a13081b38b4be23bc",
            "size": 2048,
            "source_ref": "vice/src/pet/petrom.h:79",
            "system": "commodore-pet"
          },
          {
            "crc32": "f42df0cb",
            "embedded": true,
            "hle_fallback": true,
            "md5": "049e2d26fde71a741f6075ecbf0a432d",
            "name": "vice/PET/waterloo-f000.901898-05.bin",
            "note": "SuperPET Waterloo microEngine 6809 ROM at $F000. Embedded in core.",
            "required": false,
            "sha1": "9b4a5134d20345171e7303445f87c4e0b9addc96",
            "size": 4096,
            "source_ref": "vice/src/pet/petrom.h:80",
            "system": "commodore-pet"
          },
          {
            "crc32": "a8ff9372",
            "embedded": true,
            "hle_fallback": true,
            "md5": "3ad5c7182006bcad1597583dbc8505c9",
            "name": "vice/CBM-II/basic-901242+3-04a.bin",
            "note": "CBM-II BASIC 128 (CBM 610/620/710/720). Embedded in core.",
            "required": false,
            "sha1": "9409f92e167984096fe4d5913714bff6214c3b2d",
            "size": 16384,
            "source_ref": "vice/src/cbm2/cbm2rom.h:41",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "5db15870",
            "embedded": true,
            "hle_fallback": true,
            "md5": "6a505014e543c62e99668080a3b80b40",
            "name": "vice/CBM-II/basic-901240+1-03.bin",
            "note": "CBM-II BASIC 256 (CBM 710/720 with 256K). Embedded in core.",
            "required": false,
            "sha1": "53314b4d565cc405a67a0936b935e6e08955580d",
            "size": 16384,
            "source_ref": "vice/src/cbm2/cbm2rom.h:42",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "9a468e5d",
            "embedded": true,
            "hle_fallback": true,
            "md5": "5a9559ceaf1a0bef0e721242c67a030d",
            "name": "vice/CBM-II/basic-901235+6-02.bin",
            "note": "CBM-II BASIC 500 (CBM 510/P500). Embedded in core.",
            "required": false,
            "sha1": "e69531d45f5993f8e53c6bd9ab2a7bc10fe2d02f",
            "size": 16384,
            "source_ref": "vice/src/cbm2/cbm2rom.h:43",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "09a5667e",
            "embedded": true,
            "hle_fallback": true,
            "md5": "e0346953e77bd1353ebf53aaa5b6f0b0",
            "name": "vice/CBM-II/kernal-901244-04a.bin",
            "note": "CBM-II Kernal (CBM 610/620/710/720). Embedded in core.",
            "required": false,
            "sha1": "abb26418b9e1614a8f52bdeee0822d4a96071439",
            "size": 8192,
            "source_ref": "vice/src/cbm2/cbm2rom.h:45",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "f46bbd2b",
            "embedded": true,
            "hle_fallback": true,
            "md5": "1a19593625acdc5af96a5e78b1a23f37",
            "name": "vice/CBM-II/kernal-901234-02.bin",
            "note": "CBM-II Kernal 500 (CBM 510/P500). Embedded in core.",
            "required": false,
            "sha1": "097197d4d08e0b82e0466a5f1fbd49a24f3d2523",
            "size": 8192,
            "source_ref": "vice/src/cbm2/cbm2rom.h:46",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "ec4272ee",
            "embedded": true,
            "hle_fallback": true,
            "md5": "12a4202f5331d45af846af6c58fba946",
            "name": "vice/CBM-II/chargen-901225-01.bin",
            "note": "CBM-II Character Generator 500 (VIC-II based, CBM 510/P500). Embedded in core.",
            "required": false,
            "sha1": "adc7c31e18c7c7413d54802ef2f4193da14711aa",
            "size": 4096,
            "source_ref": "vice/src/cbm2/cbm2rom.h:37",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "1acf5098",
            "embedded": true,
            "hle_fallback": true,
            "md5": "2818722af27ceae6952c08cf83a076f9",
            "name": "vice/CBM-II/chargen-901237-01.bin",
            "note": "CBM-II Character Generator 600 (CBM 610/620). Embedded in core.",
            "required": false,
            "sha1": "e63bf18da48e5a53c99ef127c1ae721333d1d102",
            "size": 4096,
            "source_ref": "vice/src/cbm2/cbm2rom.h:38",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "3a350bc3",
            "embedded": true,
            "hle_fallback": true,
            "md5": "03f32477905d77e2135857076ec31efa",
            "name": "vice/CBM-II/chargen-901232-01.bin",
            "note": "CBM-II Character Generator 700 (CBM 710/720). Embedded in core.",
            "required": false,
            "sha1": "e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287",
            "size": 4096,
            "source_ref": "vice/src/cbm2/cbm2rom.h:39",
            "system": "commodore-cbm-ii"
          },
          {
            "crc32": "89c1a062",
            "embedded": true,
            "hle_fallback": true,
            "md5": "006862e9a52d987970435988e3803c71",
            "name": "vice/SCPU64/scpu64",
            "note": "SuperCPU64 internal ROM (default). Embedded in core.",
            "required": false,
            "sha1": "f5b6da17ee8206ff0d2258e1d6e8b798147c2650",
            "size": 65536,
            "source_ref": "retrodep/ui.c:269",
            "system": "commodore-c64"
          },
          {
            "crc32": "ec4272ee",
            "embedded": true,
            "hle_fallback": true,
            "md5": "12a4202f5331d45af846af6c58fba946",
            "name": "vice/SCPU64/chargen-901225-01.bin",
            "note": "C64 Character Generator (used by SCPU64). Embedded in core.",
            "required": false,
            "sha1": "adc7c31e18c7c7413d54802ef2f4193da14711aa",
            "size": 4096,
            "source_ref": "vice/src/scpu64/scpu64rom.h:36",
            "system": "commodore-c64"
          },
          {
            "crc32": "1604f6c1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "cf32a93c0a693ed359a4f483ef6db53d",
            "name": "vice/SCPU64/chargen-906143-02.bin",
            "note": "C64 Japanese Character Generator (used by SCPU64). Embedded in core.",
            "region": [
              "japan"
            ],
            "required": false,
            "sha1": "0fad19dbcdb12461c99657b2979dbb5c2e47b527",
            "size": 4096,
            "source_ref": "vice/src/scpu64/scpu64rom.h:37",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/SCPU64/scpu-dos-1.4.bin",
            "note": "SuperCPU DOS v1.40 external kernal. Optional, selected via core option. Goes in system/vice/SCPU64/.",
            "required": false,
            "source_ref": "retrodep/ui.c:266, libretro/libretro-core.c:2825",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/SCPU64/scpu-dos-2.04.bin",
            "note": "SuperCPU DOS v2.04 external kernal. Optional, selected via core option. Goes in system/vice/SCPU64/.",
            "required": false,
            "source_ref": "retrodep/ui.c:263, libretro/libretro-core.c:2827",
            "system": "commodore-c64"
          },
          {
            "crc32": "718d42b1",
            "embedded": true,
            "hle_fallback": true,
            "md5": "87e849da3c87549848550fe4dd4d1aae",
            "name": "vice/DRIVES/dos1540-325302+3-01.bin",
            "note": "1540 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "3477c14e0c79faa445224dad16534f04ed143e44",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:88",
            "system": "commodore-c64"
          },
          {
            "crc32": "57224cde",
            "embedded": true,
            "hle_fallback": true,
            "md5": "a0ce8439d1b8dcf2e1430461f7233a72",
            "name": "vice/DRIVES/dos1541-325302-01+901229-05.bin",
            "note": "1541 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "ab16f56989b27d89babe5f89c5a8cb3da71a82f0",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:89",
            "system": "commodore-c64"
          },
          {
            "crc32": "899fa3c5",
            "embedded": true,
            "hle_fallback": true,
            "md5": "ada295382a1f2df772a7e5c5c6f34215",
            "name": "vice/DRIVES/dos1541ii-251968-03.bin",
            "note": "1541-II drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "d3b78c3dbac55f5199f33f3fe0036439811f7fb3",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:90",
            "system": "commodore-c64"
          },
          {
            "crc32": "6d16d024",
            "embedded": true,
            "hle_fallback": true,
            "md5": "0c767bf0a84d7751af056e53a074c9e2",
            "name": "vice/DRIVES/dos1551-318008-01.bin",
            "note": "1551 drive DOS ROM (Plus/4 specific). Embedded in core.",
            "required": false,
            "sha1": "fae3c788ad9a6cc2dbdfbcf6c0264b2ca921d55e",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:92",
            "system": "commodore-plus4"
          },
          {
            "crc32": "5a0c7937",
            "embedded": true,
            "hle_fallback": true,
            "md5": "f0799353f0e22cf7d783e447adcafde2",
            "name": "vice/DRIVES/dos1570-315090-01.bin",
            "note": "1570 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "5fc06dc82ff6840f183bd43a4d9b8a16956b2f56",
            "size": 32768,
            "source_ref": "vice/src/drive/driverom.h:93",
            "system": "commodore-c64"
          },
          {
            "crc32": "5755bae3",
            "embedded": true,
            "hle_fallback": true,
            "md5": "dae964d64b7843ff86c008d396dda208",
            "name": "vice/DRIVES/dos1571-310654-05.bin",
            "note": "1571 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "f1be619c106641a685f6609e4d43d6fc9eac1e70",
            "size": 32768,
            "source_ref": "vice/src/drive/driverom.h:94",
            "system": "commodore-c64"
          },
          {
            "crc32": "f24efcc4",
            "embedded": true,
            "hle_fallback": true,
            "md5": "f9158328494b3e269f86ef419792c2e5",
            "name": "vice/DRIVES/dos1571cr-318047-01.bin",
            "note": "1571CR drive DOS ROM (cost-reduced, C128D internal). Embedded in core.",
            "required": false,
            "sha1": "14ee7a0fb7e1c59c51fbf781f944387037daa3ee",
            "size": 32768,
            "source_ref": "vice/src/drive/driverom.h:95",
            "system": "commodore-c128"
          },
          {
            "crc32": "a9011b84",
            "embedded": true,
            "hle_fallback": true,
            "md5": "6a82f92aea2a3afa190fe32d565f39e7",
            "name": "vice/DRIVES/dos1581-318045-02.bin",
            "note": "1581 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "01228eae6f066bd9b7b2b6a7fa3f667e41dad393",
            "size": 32768,
            "source_ref": "vice/src/drive/driverom.h:96",
            "system": "commodore-c64"
          },
          {
            "crc32": "87e6a94e",
            "embedded": true,
            "hle_fallback": true,
            "md5": "2d967790361aa77de87a24fb93e342f9",
            "name": "vice/DRIVES/dos1001-901887+8-01.bin",
            "note": "CBM 1001 (SFD-1001) drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "d50b093828888146596f17ae0df9ef3dfde71b05",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:70",
            "system": "commodore-pet"
          },
          {
            "crc32": "21b80fdf",
            "embedded": true,
            "hle_fallback": true,
            "md5": "3454c06fd2275f5bcbfe936dcdf8059b",
            "name": "vice/DRIVES/dos2031-901484-03+05.bin",
            "note": "CBM 2031 drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "c53e180a96649ceb3f421739e8dc66faba7cba44",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:73",
            "system": "commodore-pet"
          },
          {
            "crc32": "d04c1fbb",
            "embedded": true,
            "hle_fallback": true,
            "md5": "3efff682000fd841b4dd6560bf53e37c",
            "name": "vice/DRIVES/dos2040-901468-06+07.bin",
            "note": "CBM 2040 dual drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "e37b3bfd801eb19dea50cf8b4a6af8613c3520d3",
            "size": 8192,
            "source_ref": "vice/src/drive/driverom.h:76",
            "system": "commodore-pet"
          },
          {
            "crc32": "f4967a7f",
            "embedded": true,
            "hle_fallback": true,
            "md5": "139e72a58b7ddb2f92ceb18c8735c53c",
            "name": "vice/DRIVES/dos3040-901468-11-13.bin",
            "note": "CBM 3040 dual drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "02bd4b0c8508b3874b95799a9a63caf369c837de",
            "size": 12288,
            "source_ref": "vice/src/drive/driverom.h:79",
            "system": "commodore-pet"
          },
          {
            "crc32": "40e0ebaa",
            "embedded": true,
            "hle_fallback": true,
            "md5": "2fce6a76c738d1a10c189bf0660d868e",
            "name": "vice/DRIVES/dos4040-901468-14-16.bin",
            "note": "CBM 4040 dual drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "245abbe76581558d270cdbb6fe55f56748403d8e",
            "size": 12288,
            "source_ref": "vice/src/drive/driverom.h:82",
            "system": "commodore-pet"
          },
          {
            "crc32": "632a328e",
            "embedded": true,
            "hle_fallback": true,
            "md5": "d6d4df6f2811767de6f5bf46ad7fba69",
            "name": "vice/DRIVES/dos9000-300516+7-revC.bin",
            "note": "CBM D9090/D9060 hard drive DOS ROM. Embedded in core.",
            "required": false,
            "sha1": "c48df2cbb0eea656c3243df7ea8bfefcd171b8e8",
            "size": 16384,
            "source_ref": "vice/src/drive/driverom.h:85",
            "system": "commodore-pet"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_C64.bin",
            "note": "JiffyDOS C64 kernal replacement. Optional, proprietary. Requires True Drive Emulation + 1541/1571/1581 drive.",
            "required": false,
            "source_ref": "retrodep/ui.c:302, libretro/libretro-core.c:2855",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_SX-64.bin",
            "note": "JiffyDOS SX-64 kernal replacement. Used instead of JiffyDOS_C64.bin when SX-64 model is selected.",
            "required": false,
            "source_ref": "retrodep/ui.c:295",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_C128.bin",
            "note": "JiffyDOS C128 kernal replacement. Optional, proprietary. C128 core only.",
            "required": false,
            "source_ref": "retrodep/ui.c:309, libretro/libretro-core.c:2857",
            "system": "commodore-c128"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_1541-II.bin",
            "note": "JiffyDOS 1541-II drive ROM replacement. Optional, proprietary.",
            "required": false,
            "source_ref": "retrodep/ui.c:283",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_1571_repl310654.bin",
            "note": "JiffyDOS 1571 drive ROM replacement. Optional, proprietary.",
            "required": false,
            "source_ref": "retrodep/ui.c:285",
            "system": "commodore-c64"
          },
          {
            "embedded": false,
            "hle_fallback": true,
            "name": "vice/JiffyDOS_1581.bin",
            "note": "JiffyDOS 1581 drive ROM replacement. Optional, proprietary.",
            "required": false,
            "source_ref": "retrodep/ui.c:287",
            "system": "commodore-c64"
          }
        ],
        "logo": "https://raw.githubusercontent.com/VICE-Team/svn-mirror/main/vice/data/common/vice-logo-black.svg",
        "machine_directories": {
          "vice_x128": "C128",
          "vice_x64": "C64",
          "vice_x64dtv": "C64DTV",
          "vice_x64sc": "C64",
          "vice_xcbm2": "CBM-II",
          "vice_xcbm5x0": "CBM-II",
          "vice_xpet": "PET",
          "vice_xplus4": "PLUS4",
          "vice_xscpu64": "SCPU64",
          "vice_xvic": "VIC20"
        },
        "notes": "VICE is a multi-machine Commodore emulator covering C64, C128, VIC-20,\nPlus/4, PET, CBM-II, C64 DTV, and SuperCPU64. Each machine is built as a\nseparate libretro core.\n\nAll standard ROMs (kernal, basic, chargen, drive DOS, editor) are embedded\nin the core binary via USE_EMBEDDED. External ROM files are NOT required\nfor normal operation. The embedded ROMs are compiled from vice/data/<machine>/\nand ship with every build.\n\nThe core looks for optional external data in system/vice/<machine>/\n(e.g. system/vice/C64/, system/vice/C128/). This is used for:\n- JiffyDOS replacement kernals (proprietary, not included)\n- SuperCPU external kernals (scpu-dos-1.4.bin, scpu-dos-2.04.bin)\n- Cartridge images placed in system/vice/<machine>/\n- Custom keymaps (.vkm files)\n- Custom vicerc configuration\n\nJiffyDOS support (C64/C64SC/C128/SCPU64 only):\nRequires True Drive Emulation enabled and 1541/1571/1581 drive type.\nROMs are loaded from system/vice/:\n- JiffyDOS_C64.bin (C64 kernal replacement)\n- JiffyDOS_SX-64.bin (SX-64 model kernal replacement)\n- JiffyDOS_C128.bin (C128 kernal replacement, C128 core only)\n- JiffyDOS_1541-II.bin (1541-II drive DOS replacement)\n- JiffyDOS_1571_repl310654.bin (1571 drive DOS replacement)\n- JiffyDOS_1581.bin (1581 drive DOS replacement)\n\nSuperCPU kernal (SCPU64 core only):\nOption \"SuperCPU Kernal\" selects between Internal (embedded), 1.40, or 2.04.\nExternal kernals loaded from system/vice/SCPU64/:\n- scpu-dos-1.4.bin\n- scpu-dos-2.04.bin\nThese files are blacklisted from the cartridge scanner to prevent accidental\nloading as cartridges.\n\nC128 libretro specifics: the C128 core reuses C64 ROM filenames for C64 mode\n(basic-901226-01.bin, kernal-901227-03.bin) instead of the standalone VICE\nnames (basic64-901226-01.bin, kernal64-901227-03.bin). This is controlled\nby #ifdef __LIBRETRO__ in c128rom.h.\n\nDrive ROM notes: dos2000, dos4000, and CMDHD boot ROM are defined in\ndriverom.h but not shipped in vice/data/DRIVES/. These are for CMD hardware\n(FD-2000, FD-4000, CMD HD) which are rare peripherals.\n\nSource: retrodep/embedded/*.c (embedded ROM tables),\nvice/src/*/rom.h (ROM name defines), vice/src/drive/driverom.h (drive ROMs),\nretrodep/ui.c:274-315 (JiffyDOS loading), retrodep/ui.c:258-271 (SCPU kernal),\nlibretro/libretro-core.c:2800-2865 (core options for JiffyDOS/SCPU)\n",
        "profiled_date": "2026-03-18",
        "rom_path": "system/vice/",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-c64",
          "commodore-c128",
          "commodore-c64dtv",
          "commodore-vic20",
          "commodore-plus4",
          "commodore-pet",
          "commodore-cbm-ii"
        ],
        "type": "libretro"
      }
    },
    {
      "id": "vice_x128",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_x128",
          "x128"
        ],
        "display_name": "Commodore - C128 (VICE x128)",
        "emulator": "VICE x128",
        "files": [
          {
            "description": "JiffyDOS C128 kernal replacement",
            "name": "JiffyDOS_C128.bin",
            "note": "Loaded into KernalIntName when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:309-310"
          },
          {
            "description": "JiffyDOS C64 kernal replacement (GO64 mode)",
            "name": "JiffyDOS_C64.bin",
            "note": "Loaded into Kernal64Name when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:307-308"
          },
          {
            "description": "JiffyDOS 1541-II drive DOS replacement",
            "name": "JiffyDOS_1541-II.bin",
            "note": "Loaded into DosName1541ii when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:283-284"
          },
          {
            "description": "JiffyDOS 1571 drive DOS replacement",
            "name": "JiffyDOS_1571_repl310654.bin",
            "note": "Loaded into DosName1571 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:285-286"
          },
          {
            "description": "JiffyDOS 1581 drive DOS replacement",
            "name": "JiffyDOS_1581.bin",
            "note": "Loaded into DosName1581 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:287-288"
          }
        ],
        "notes": "System ROMs embedded in binary: C128 kernal (318020-05), chargen (390059-01), BASIC lo (318018-04), BASIC hi (318019-04), C64 kernal (901227-03), C64 BASIC (901226-01), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000). Embedded ROM check in sysfile_load takes priority over filesystem. Localized kernal/chargen variants (DE, FI, FR, IT, NO, SE, CH) are in the embedded list with NULL data pointers; selecting a non-international model produces uninitialized ROM data. JiffyDOS requires True Drive Emulation enabled and a 1541/1571/1581 drive type. C64 BASIC/kernal use shared names (basic-901226-01.bin, kernal-901227-03.bin) instead of upstream c128-specific names (basic64-901226-01.bin, kernal64-901227-03.bin) to share files with the C64 core in RetroArch's shared system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "c8c242db75a559246d6d51017e6dd4ecd75d6a9f",
        "systems": [
          "commodore-c128"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_x64",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_x64",
          "x64"
        ],
        "display_name": "Commodore - C64 (VICE x64, fast)",
        "emulator": "VICE x64",
        "files": [
          {
            "description": "JiffyDOS C64 kernal replacement",
            "name": "JiffyDOS_C64.bin",
            "note": "Loaded into KernalName when vice_jiffydos option is enabled (non-SX64 models).",
            "required": false,
            "source_ref": "retrodep/ui.c:302-303"
          },
          {
            "description": "JiffyDOS SX-64 kernal replacement",
            "name": "JiffyDOS_SX-64.bin",
            "note": "Loaded into KernalName when vice_jiffydos option is enabled and SX-64 model selected.",
            "required": false,
            "source_ref": "retrodep/ui.c:295-296"
          },
          {
            "description": "JiffyDOS 1541-II drive DOS replacement",
            "name": "JiffyDOS_1541-II.bin",
            "note": "Loaded into DosName1541ii when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:283-284"
          },
          {
            "description": "JiffyDOS 1571 drive DOS replacement",
            "name": "JiffyDOS_1571_repl310654.bin",
            "note": "Loaded into DosName1571 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:285-286"
          },
          {
            "description": "JiffyDOS 1581 drive DOS replacement",
            "name": "JiffyDOS_1581.bin",
            "note": "Loaded into DosName1581 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:287-288"
          },
          {
            "description": "C64 Kernal Rev 1",
            "name": "kernal-901227-01.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/C64/ when C64 OLD NTSC model selected.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c64/c64-resources.c:253, vice/src/c64/c64model.c:131",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C64 Kernal Rev 2",
            "name": "kernal-901227-02.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/C64/ when C64 OLD PAL model selected.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c64/c64-resources.c:254, vice/src/c64/c64rom.h:51",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "System ROMs embedded in binary: C64 BASIC (901226-01), chargen (901225-01), chargen Japanese (906143-02), kernal Rev 3 (901227-03), kernal GS (390852-01), kernal SX-64 (251104-04), kernal 4064 (901246-01), kernal Japanese (906145-02), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000) and VIC-II palettes. Embedded ROM check in sysfile_load takes priority over filesystem. Kernal Rev 1 (901227-01) and Rev 2 (901227-02) are NOT embedded; selecting C64 OLD NTSC or C64 OLD PAL model requires them on the filesystem in system/vice/C64/. JiffyDOS requires True Drive Emulation enabled and a 1541/1571/1581 drive type. SX-64 models use a separate JiffyDOS kernal (JiffyDOS_SX-64.bin) not declared in the .info.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-c64"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_x64dtv",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_x64dtv",
          "x64dtv"
        ],
        "display_name": "Commodore - C64DTV (VICE x64dtv)",
        "emulator": "VICE x64dtv",
        "files": [
          {
            "description": "C64 DTV 2MB flash ROM image",
            "hle_fallback": true,
            "name": "dtvrom.bin",
            "note": "Loaded via sysfile_load from system/vice/C64DTV/. All model variants (V2 PAL/NTSC, V3 PAL/NTSC, Hummer) default to this filename. If not found, the core copies embedded BASIC, kernal and chargen ROMs into flash memory. Without it, the DTV operates as a basic C64 without the built-in DTV games and firmware. The original DTV ROM has distorted colors; a patched ROM is recommended.\n",
            "required": false,
            "size": 2097152,
            "source_ref": "vice/src/c64dtv/c64dtvflash.c:59-64,470-471,488-505"
          }
        ],
        "notes": "System ROMs embedded in binary: C64 BASIC (901226-01), kernal Rev 3 (901227-03), chargen (901225-01), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000). Embedded ROM check in sysfile_load takes priority over filesystem. DTV has its own color system (viciidtv-color.c); external palette loading is disabled. JiffyDOS is not supported (excluded from build conditionals). The .info declares 4 JiffyDOS firmware (firmware_count=4) but the code never loads them for this core. The .info also omits dtvrom.bin.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "c8c242db75a559246d6d51017e6dd4ecd75d6a9f",
        "systems": [
          "commodore-c64dtv"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_x64sc",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_x64sc"
        ],
        "display_name": "Commodore - C64 (VICE x64sc, accurate)",
        "emulator": "VICE x64sc",
        "files": [
          {
            "description": "JiffyDOS C64 kernal replacement",
            "name": "JiffyDOS_C64.bin",
            "note": "Loaded into KernalName when vice_jiffydos option is enabled (non-SX64 models).",
            "required": false,
            "source_ref": "retrodep/ui.c:302-303"
          },
          {
            "description": "JiffyDOS SX-64 kernal replacement",
            "name": "JiffyDOS_SX-64.bin",
            "note": "Loaded into KernalName when vice_jiffydos option is enabled and SX-64 model selected.",
            "required": false,
            "source_ref": "retrodep/ui.c:295-296"
          },
          {
            "description": "JiffyDOS 1541-II drive DOS replacement",
            "name": "JiffyDOS_1541-II.bin",
            "note": "Loaded into DosName1541ii when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:283-284"
          },
          {
            "description": "JiffyDOS 1571 drive DOS replacement",
            "name": "JiffyDOS_1571_repl310654.bin",
            "note": "Loaded into DosName1571 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:285-286"
          },
          {
            "description": "JiffyDOS 1581 drive DOS replacement",
            "name": "JiffyDOS_1581.bin",
            "note": "Loaded into DosName1581 when vice_jiffydos option is enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:287-288"
          },
          {
            "description": "C64 Kernal Rev 1",
            "name": "kernal-901227-01.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/C64/ when C64 OLD NTSC model selected.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c64/c64-resources.c:253, vice/src/c64/c64scmodel.c:141",
            "validation": [
              "size"
            ]
          },
          {
            "description": "C64 Kernal Rev 2",
            "name": "kernal-901227-02.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/C64/ when C64 OLD PAL model selected.",
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/c64/c64-resources.c:254, vice/src/c64/c64scmodel.c:123",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Cycle-accurate C64 emulator using the viciisc VIC-II implementation. System ROMs embedded in binary: C64 BASIC (901226-01), chargen (901225-01), chargen Japanese (906143-02), kernal Rev 3 (901227-03), kernal GS (390852-01), kernal SX-64 (251104-04), kernal 4064 (901246-01), kernal Japanese (906145-02), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000) and VIC-II palettes. Embedded ROM check in sysfile_load takes priority over filesystem. Kernal Rev 1 (901227-01) and Rev 2 (901227-02) are NOT embedded; selecting C64 OLD NTSC or C64 OLD PAL model requires them on the filesystem in system/vice/C64/. JiffyDOS requires True Drive Emulation enabled and a 1541/1571/1581 drive type. SX-64 models use a separate JiffyDOS kernal (JiffyDOS_SX-64.bin) not declared in the .info.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "c8c242db75a559246d6d51017e6dd4ecd75d6a9f",
        "systems": [
          "commodore-c64"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xcbm2",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xcbm2",
          "xcbm2"
        ],
        "display_name": "Commodore - CBM-II 6x0/7x0 (VICE xcbm2)",
        "emulator": "VICE xcbm2",
        "files": [],
        "notes": "System ROMs embedded in binary: chargen 600 (901237-01), chargen 700 (901232-01), kernal (901244-04a), BASIC 128K (901242+3-04a), BASIC 256K (901240+1-03), plus all drive ROMs (1001, 2031, 2040, 3040, 4040, 9000) and CRTC palettes (amber, green, white). Embedded ROM check in sysfile_load takes priority over filesystem. Models: 610 PAL/NTSC, 620 PAL/NTSC, 620+ PAL/NTSC, 710 NTSC, 720 NTSC, 720+ NTSC. 600 series uses CRTC with 8 scanlines/char, 700 series uses 14 scanlines/char (different chargen ROM). CBM-II uses IEEE-488 bus (not IEC serial), so no JiffyDOS support. Cartridge slots (Cart1-Cart6) are user content, not system files.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-cbm-ii"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xcbm5x0",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xcbm5x0",
          "xcbm5x0"
        ],
        "display_name": "Commodore - CBM-II 5x0 (VICE xcbm5x0)",
        "emulator": "VICE xcbm5x0",
        "files": [],
        "notes": "System ROMs embedded in binary: chargen 500 (901225-01), kernal 500 (901234-02), BASIC 500 (901235+6-02), plus all drive ROMs (1001, 2031, 2040, 3040, 4040, 9000) and VIC-II palettes. Embedded ROM check in sysfile_load takes priority over filesystem. Models: 510 PAL/NTSC. CBM-5x0 (P500/C510) uses VIC-II chip instead of CRTC. IEEE-488 bus (not IEC serial), no JiffyDOS support. Cartridge slots (Cart1-Cart6) are user content, not system files.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-cbm-ii"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xpet",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xpet",
          "xpet"
        ],
        "display_name": "Commodore - PET (VICE xpet)",
        "emulator": "VICE xpet",
        "files": [],
        "notes": "System ROMs embedded in binary: kernal 1 (901439-04-07), kernal 2 (901465-03), kernal 4 (901465-22), BASIC 1 (901439-09-05-02-06), BASIC 2 (901465-01-02), BASIC 4 (901465-23-20-21), chargen 1 (901447-08), chargen 2 (901447-10), SuperPET chargen (901640-01), 6 editor ROMs (1g40, 2b40, 2g40, 4b40, 4b80, 4g40), 6 SuperPET Waterloo 6809 ROMs (a000-f000), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000) and CRTC palettes (amber, green, white). Embedded ROM check in sysfile_load takes priority over filesystem. Models: 2001, 3008, 3016, 3032, 3032B, 4016, 4032, 4032B, 8032, 8096, 8296, SuperPET. PET uses IEEE-488 bus (not IEC serial), so no JiffyDOS support. No cartridge support. Extension ROM slots ($9000/$A000/$B000) and German chargen (chargen.de) are standalone-only features not exposed via libretro core options.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-pet"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xplus4",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xplus4",
          "xplus4"
        ],
        "display_name": "Commodore - PLUS/4 (VICE xplus4)",
        "emulator": "VICE xplus4",
        "files": [],
        "notes": "All system ROMs embedded in binary: BASIC (318006-01), kernal PAL (318004-05), kernal NTSC (318005-05), kernal V232 (318004-01), kernal V364 (364), 3+1 function low (317053-01), 3+1 function high (317054-01), V364 speech ROM (c2lo-364). All drive ROMs embedded (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000). TED palettes embedded (colodore_ted, BT601, BT709, BT2020, yape-pal, yape-ntsc). Embedded check in sysfile_load takes priority over filesystem. Models: C16 PAL/NTSC, Plus/4 PAL/NTSC, V364 NTSC, 232 NTSC — all use embedded kernal variants. No JiffyDOS support (C64/C128/SCPU64 only). 3+1 function ROMs loaded for Plus/4 and V364 models, cleared to 0xFF for C16 and 232 models. c2lo loaded only for V364 model.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "8818c3a39146b9a26df23a1e4880b4420f93a255",
        "systems": [
          "commodore-plus4"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xscpu64",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xscpu64",
          "xscpu64"
        ],
        "display_name": "Commodore - C64 SuperCPU (VICE xscpu64)",
        "emulator": "VICE xscpu64",
        "files": [
          {
            "description": "CMD SuperCPU Kernal v2.04",
            "max_size": 524288,
            "min_size": 65536,
            "name": "scpu-dos-2.04.bin",
            "note": "Loaded as SCPU64Name when SuperCPU Kernal option set to 2.04. Size must be power of 2 between 64 KB and 512 KB. Stored in system/vice/SCPU64/.",
            "required": false,
            "source_ref": "retrodep/ui.c:262-263, vice/src/scpu64/scpu64rom.c:75-89",
            "validation": [
              "size"
            ]
          },
          {
            "description": "CMD SuperCPU Kernal v1.4",
            "max_size": 524288,
            "min_size": 65536,
            "name": "scpu-dos-1.4.bin",
            "note": "Loaded as SCPU64Name when SuperCPU Kernal option set to 1.40. Size must be power of 2 between 64 KB and 512 KB. Stored in system/vice/SCPU64/.",
            "required": false,
            "source_ref": "retrodep/ui.c:265-266, vice/src/scpu64/scpu64rom.c:75-89",
            "validation": [
              "size"
            ]
          },
          {
            "description": "JiffyDOS 1541-II drive DOS replacement",
            "name": "JiffyDOS_1541-II.bin",
            "note": "Loaded as DosName1541ii when JiffyDOS option enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:282-283"
          },
          {
            "description": "JiffyDOS 1571 drive DOS replacement",
            "name": "JiffyDOS_1571_repl310654.bin",
            "note": "Loaded as DosName1571 when JiffyDOS option enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:285-286"
          },
          {
            "description": "JiffyDOS 1581 drive DOS replacement",
            "name": "JiffyDOS_1581.bin",
            "note": "Loaded as DosName1581 when JiffyDOS option enabled.",
            "required": false,
            "source_ref": "retrodep/ui.c:287-288"
          }
        ],
        "notes": "Embedded SCPU64 ROM V0.07 (free replacement by Soci/Singular, 64 KB), chargen (901225-01, 906143-02), C64 BASIC (901226-01), all C64 kernals (Rev 3, GS, SX-64, 4064, Japanese), all drive ROMs (1540 through 9000), and VIC-II palettes. Embedded ROM check in sysfile_load takes priority over filesystem. External scpu-dos-*.bin provide the original CMD SuperCPU DOS kernals, loaded from system/vice/SCPU64/ when SuperCPU Kernal core option is changed from Internal. JiffyDOS requires True Drive Emulation enabled and a non-internal SuperCPU kernal (the internal ROM is not JiffyDOS-compatible). The .info incorrectly declares JiffyDOS_C64.bin (firmware_count=4); the C64 kernal replacement is only loaded for x64/x64sc/x128, never for xscpu64. Correct firmware_count=5 (2 SCPU64 kernals + 3 JiffyDOS drive DOSes).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "c8c242db75a559246d6d51017e6dd4ecd75d6a9f",
        "systems": [
          "commodore-c64-supercpu"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vice_xvic",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.10",
        "cores": [
          "vice_xvic",
          "xvic"
        ],
        "display_name": "Commodore - VIC-20 (VICE xvic)",
        "emulator": "VICE xvic",
        "files": [
          {
            "description": "VIC-1001 Kernal Rev 2 (Japanese NTSC)",
            "name": "kernal.901486-02.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/VIC20/ when VIC-1001 Japanese model selected via vicerc.",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "vice/src/vic20/vic20rom.h:49, vice/src/vic20/vic20model.c:60, vice/src/vic20/vic20rom.c:112-120",
            "validation": [
              "size"
            ]
          },
          {
            "description": "VIC-1001 Character ROM (Japanese)",
            "name": "chargen-901460-02.bin",
            "note": "Not embedded. Loaded via sysfile from system/vice/VIC20/ when VIC-1001 Japanese model selected via vicerc.",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "vice/src/vic20/vic20rom.h:53, vice/src/vic20/vic20model.c:60, vice/src/vic20/vic20rom.c:173-179",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "System ROMs embedded in binary: BASIC (901486-01), chargen (901460-03), kernal PAL Rev 7 (901486-07), kernal NTSC Rev 6 (901486-06), plus all drive ROMs (1540, 1541, 1541-II, 1551, 1570, 1571, 1571CR, 1581, 1001, 2031, 2040, 3040, 4040, 9000) and VIC palettes. Embedded ROM check in sysfile_load takes priority over filesystem. Japanese VIC-1001 model requires kernal Rev 2 (901486-02) and chargen (901460-02) on the filesystem in system/vice/VIC20/; this model is not exposed via core options (only via vicerc). No JiffyDOS support for VIC-20.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vice-libretro",
        "source_commit": "c8c242db75a559246d6d51017e6dd4ecd75d6a9f",
        "systems": [
          "commodore-vic20"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "vidtest",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "0.1",
        "cores": [
          "vidtest"
        ],
        "display_name": "VidTest",
        "emulator": "vidtest",
        "files": [],
        "notes": "Video mode and input test core for libretro frontends. Provides interactive\nGUI (Nuklear) to adjust resolution, aspect ratio, timing, and inspect full\ninput state across all device types. Renders directly to a software surface.\nNo system files required.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/schellingb/vidtest_libretro",
        "systems": [],
        "type": "test"
      }
    },
    {
      "id": "vircon32",
      "profile": {
        "core_classification": "official_port",
        "core_version": "2026.2.18",
        "cores": [
          "vircon32"
        ],
        "display_name": "Vircon32",
        "emulator": "Vircon32",
        "files": [
          {
            "description": "Vircon32 console BIOS (custom override)",
            "hle_fallback": true,
            "md5": "73f04397cbb2dafcf2047b19a856153a",
            "name": "Vircon32Bios.v32",
            "note": "Optional external BIOS placed in the system directory root.\nIf present, overrides the embedded Standard BIOS v1.2.\nThe hashes above correspond to the Standard BIOS v1.2 bundled\nin Assets/StandardBios.v32 of the source repo. Custom BIOSes\nwill have different hashes but must follow the V32 BIOS format.\n",
            "required": false,
            "sha1": "67ddbcd018f03ed74b6e013074d92cc5f1f51c80",
            "size": 1073060,
            "source_ref": "libretro.cpp:422-425",
            "system": "vircon32"
          }
        ],
        "notes": "Vircon32 is a libretro core for the Vircon32 fantasy console, a 32-bit\nvirtual game console with fixed hardware specs (60 fps, 640x360, 16\nsound channels, up to 4 gamepads).\n\nThe Standard BIOS v1.2 is embedded directly into the core binary as a\nC header (embedded/StandardBios.h), generated from Assets/StandardBios.v32\nat build time. The core never strictly requires an external BIOS file.\n\nBIOS loading logic (libretro.cpp:415-429):\n1. Check if system_dir/Vircon32Bios.v32 exists on disk\n2. If found, load it via Console.LoadBiosFile() (external override)\n3. If not found, load the embedded BIOS via LoadEmbeddedBios()\n\nThis runs inside context_reset() (libretro.cpp:473-474), which is called\nwhenever the OpenGL context is (re)created.\n\nThe BIOS file format is a V32 ROM with a specific signature\n(ROMFileFormat::BiosSignature). It must contain exactly 1 texture and\n1 sound. The loader validates the signature, file structure, and version\ncompatibility before loading program ROM, video ROM and audio ROM\n(V32Console.cpp:259-431).\n\nThe external BIOS file allows users to replace the boot animation with\na custom one. Game compatibility is not affected by BIOS choice.\n",
        "platform_details": {
          "bios_format": {
            "note": "A V32 BIOS ROM file must have:\n- BiosSignature in the header (distinct from CartridgeSignature)\n- Exactly 1 texture (boot screen graphics)\n- Exactly 1 sound (boot sound)\n- Program ROM, Video ROM and Audio ROM in sequential layout\nThe loader validates all of this before accepting the file.\n",
            "source_ref": "VirconDefinitions/FileFormats.hpp, V32Console.cpp:259-431"
          },
          "cartridge_format": {
            "extensions": "v32",
            "note": "Cartridges use CartridgeSignature with up to 256 textures and\n1024 sounds. Program ROM can be up to 128M words (512 MB).\n",
            "source_ref": "V32Console.cpp:468-696"
          },
          "embedded_bios": {
            "file_size": 1073060,
            "md5": "73f04397cbb2dafcf2047b19a856153a",
            "note": "The standard BIOS is compiled into the core binary as\nembedded_StandardBios[] via a generated header file. It provides\nthe boot animation (Vircon32 logo + startup sound). LoadEmbeddedBios()\nwrites the raw bytes into a stringstream and passes it to\nConsole.LoadBiosData().\n",
            "sha1": "67ddbcd018f03ed74b6e013074d92cc5f1f51c80",
            "source_ref": "libretro.cpp:28, Assets/StandardBios.v32",
            "version": "Standard BIOS v1.2"
          }
        },
        "profiled_date": "2026-03-25",
        "source": "https://github.com/vircon32/vircon32-libretro",
        "source_commit": "3a1b4ae3fb75c1216fab9cc8715e9a122c461a3a",
        "systems": [
          "vircon32"
        ],
        "type": "libretro",
        "upstream": "https://github.com/vircon32/ComputerSoftware"
      }
    },
    {
      "id": "virtual-virtual-boy",
      "profile": {
        "author": "Simon Gellis",
        "core_classification": "other",
        "core_version": "1.18.2",
        "cores": [
          "virtual-virtual-boy",
          "VIRTUAL-VIRTUAL-BOY",
          "vvb",
          "com.simongellis.vvb",
          "com.simongellis.vvb.leia"
        ],
        "display_name": "Nintendo - Virtual Boy (Virtual Virtual Boy)",
        "emulator": "Virtual Virtual Boy",
        "files": [
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by KR155E",
            "max_size": 16777216,
            "md5": "f82d4c9fdd81518537d88f70c6602bb5",
            "name": "BLOX.vb",
            "path": "games/BLOX.vb",
            "required": false,
            "sha1": "f2105349dff09bdc00e4548460991dde9ac7c2af",
            "source_ref": "app/src/main/res/raw/bundledgames.json:2-7, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by KR155E",
            "max_size": 16777216,
            "md5": "cc91d6389df2c9777919e8e8ab2c0e66",
            "name": "BLOX 2.vb",
            "path": "games/BLOX 2.vb",
            "required": false,
            "sha1": "66b2a25ef8e1af74bed4bbba4785951a9d6edce0",
            "source_ref": "app/src/main/res/raw/bundledgames.json:8-13, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by PizzaRollsRoyce",
            "max_size": 16777216,
            "md5": "8f7bcfdd0f412d9060b06a97a89fe202",
            "name": "Elevated Speed.vb",
            "path": "games/Elevated Speed.vb",
            "required": false,
            "sha1": "8b08f08f37127621483aa4e204a3e3b2312af196",
            "source_ref": "app/src/main/res/raw/bundledgames.json:14-19, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by thunderstruck",
            "max_size": 16777216,
            "md5": "61e38e4e0c43aa8d6274a89ebedd3063",
            "name": "Fishbone.vb",
            "path": "games/Fishbone.vb",
            "required": false,
            "sha1": "b1e5d5ab7e49f91050d3593bbcf48ff609c1c979",
            "source_ref": "app/src/main/res/raw/bundledgames.json:20-25, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by KR155E",
            "max_size": 16777216,
            "md5": "34e9a2ffd60f7ea565caada82d57f29f",
            "name": "Formula V Public Demo.vb",
            "path": "games/Formula V Public Demo.vb",
            "required": false,
            "sha1": "533672b887ec16aa50a5508488d1ab125dd5e749",
            "source_ref": "app/src/main/res/raw/bundledgames.json:26-31, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by Kresna and Nyrator",
            "max_size": 16777216,
            "md5": "9c372321204b9fa65f9324f98aae53ff",
            "name": "Red Square.vb",
            "path": "games/Red Square.vb",
            "required": false,
            "sha1": "a12529a0d7cf7f0711b913b8ae72fea193cebc17",
            "source_ref": "app/src/main/res/raw/bundledgames.json:32-37, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by Timothy Beck",
            "max_size": 16777216,
            "md5": "cdb404ff3e1df7b3c13214ac5409d512",
            "name": "The Red Castle.vb",
            "path": "games/The Red Castle.vb",
            "required": false,
            "sha1": "34e90abaa3ffc706882fd8a0d1a8101abc185734",
            "source_ref": "app/src/main/res/raw/bundledgames.json:38-43, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by KR155E",
            "max_size": 16777216,
            "md5": "ccfa400a0ff3d717dad36a3f736fd34d",
            "name": "VUE Snake.vb",
            "path": "games/VUE Snake.vb",
            "required": false,
            "sha1": "77ebaf5dbe667d8347d098b6749b6f3be09f5814",
            "source_ref": "app/src/main/res/raw/bundledgames.json:44-49, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Bundled homebrew game by KR155E",
            "max_size": 16777216,
            "md5": "c96d91fb97572a0af7d53f63b292e0f2",
            "name": "VUEngine Platformer Demo.vb",
            "path": "games/VUEngine Platformer Demo.vb",
            "required": false,
            "sha1": "b1b9893629bbec74e8b58d7b5983e7d35e202fe0",
            "source_ref": "app/src/main/res/raw/bundledgames.json:50-55, app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/AssetsProvider.kt:18-19, app/src/main/java/com/simongellis/vvb/game/GamePakLoader.kt:35-49",
            "system": "nintendo-virtualboy",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Index of the bundled homebrew titles",
            "md5": "04ecc37b70b23fdcc3f5207040f4d178",
            "name": "bundledgames.json",
            "note": "Read whole as a raw resource when the repository is built, and decoded into the list the load menu offers. Each record names the title, the content URI serving it, the authors and the MD5 of the image. The leia flavour replaces the file with one pointing at its own authority.",
            "path": "res/raw/bundledgames.json",
            "required": false,
            "sha1": "2ae5b46e78afb1bb95d11fa103d6176321573b91",
            "size": 1677,
            "source_ref": "app/src/main/java/com/simongellis/vvb/data/BundledGameRepository.kt:9-13, app/src/main/java/com/simongellis/vvb/data/BundledGame.kt:7-13, app/src/leia/res/raw/bundledgames.json:5",
            "system": "nintendo-virtualboy"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Left eye of the settings preview image",
            "md5": "793565cb6af20eb02c78322899e54172",
            "name": "vbtitlescreen_left.png",
            "path": "res/drawable-nodpi/vbtitlescreen_left.png",
            "required": false,
            "sha1": "480e9872ab20d8a137004e45486985608882983f",
            "size": 619,
            "source_ref": "app/src/main/java/com/simongellis/vvb/game/GameViewModel.kt:41-51, app/src/main/java/com/simongellis/vvb/game/PreviewActivity.kt:32,56",
            "system": "nintendo-virtualboy"
          },
          {
            "bundled": true,
            "category": "game_data",
            "description": "Right eye of the settings preview image",
            "md5": "6df7af05e6b0cb19a37615c2b29116d9",
            "name": "vbtitlescreen_right.png",
            "path": "res/drawable-nodpi/vbtitlescreen_right.png",
            "required": false,
            "sha1": "fc6c5857a0c298d9d6a73449044d1ef3c57fe050",
            "size": 620,
            "source_ref": "app/src/main/java/com/simongellis/vvb/game/GameViewModel.kt:41-51, app/src/main/java/com/simongellis/vvb/game/PreviewActivity.kt:32,56",
            "system": "nintendo-virtualboy"
          }
        ],
        "mode": "standalone",
        "notes": "Virtual Boy emulator for Android, published as com.simongellis.vvb\n(app/build.gradle:62,65-66) and reached by ES-DE through its\nVIRTUAL-VIRTUAL-BOY find rule, which hands the game over as an ACTION_VIEW\nintent on a content URI (MainActivity.kt:126-131, MainActivity.kt:40-45). The\nhardware sits in a Rust library packaged as libvvb.so and loaded when the\napplication starts (VvbApplication.kt:69, Cargo.toml [lib]); the Kotlin side\nowns the menus, the input mapping and every file access. Display goes through\nmono, anaglyph, stereo, Google Cardboard and Leia CNSDK renderers, each\ncarrying its GLSL as string constants in the Rust sources\n(src/video/renderers/mono.rs:10-26, src/video/renderers/stereo.rs:13-29).\n\nThe console has no boot ROM and the emulator loads none. The memory map\ndeclares Vram, Audio, Hardware, Dram, Sram and Rom, and load_game_pak takes\nthe cartridge image and its SRAM, leaving the Rom region unpopulated until a\ngame arrives (src/emulator/memory.rs:8-14, src/emulator/memory.rs:115,\nsrc/emulator/memory.rs:134-149).\n\nGames are read from .vb, .vboy and .bin, or from the first member of a zip\nanswering the same test (GamePakLoader.kt:20-27, GamePakLoader.kt:97-98). The\nimage has to be a power of two and at most 0x01000000 bytes, either test\naborting the load (GamePakLoader.kt:39-45, GamePakLoader.kt:57), and the core\napplies the same two limits again when the image reaches it\n(src/emulator/memory.rs:136-141). The MD5 of the image names the directory\nthat holds the save data, where the app writes .srm and\nsave_states/<slot>.sav as it runs (GamePakLoader.kt:30-32,\nGamePak.kt:8-9,30, src/emulator/state.rs:30-38). Cardboard lens parameters\ncome from scanning the viewer QR code and are kept by the SDK, the app asking\nfor them and starting a scan when none are saved\n(src/video/renderers/cardboard.rs:29-34).\n\nOne tree ships two flavours: playStore, and leia, which appends .leia to the\napplication id and renders through the CNSDK (app/build.gradle:92-100). Both\ncarry the same nine homebrew titles, stored uncompressed so they can be opened\nby descriptor (app/build.gradle:117).\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/SupernaviX/vvb",
        "source_commit": "0bf230bced628d78ff2c149baaf16f6fb8388cec",
        "systems": [
          "nintendo-virtualboy"
        ],
        "type": "standalone",
        "upstream": "https://github.com/SupernaviX/vvb",
        "upstream_commit": "0bf230bced628d78ff2c149baaf16f6fb8388cec"
      }
    },
    {
      "id": "virtualjaguar",
      "profile": {
        "analysis": {
          "bios_loading": {
            "external_loading": false,
            "load_address": "0xE00000",
            "load_size": "0x20000",
            "mechanism": "embedded",
            "note": "jagBootPath and CDBootPath struct fields are never set in the libretro\nport. The standalone Virtual Jaguar GUI uses them but that code path\nis not compiled into the libretro core.\n",
            "selection_logic": "biosType == BT_K_SERIES ? jaguarBootROM : jaguarBootROM2",
            "source_ref": "libretro.c:902-904"
          },
          "bios_type_enum": {
            "source_ref": "settings.h:46",
            "values": [
              "BT_K_SERIES",
              "BT_M_SERIES",
              "BT_STUBULATOR_1",
              "BT_STUBULATOR_2"
            ]
          },
          "core_option": {
            "default": "disabled",
            "description": "Use the Jaguar BIOS, required for some games.",
            "key": "virtualjaguar_bios",
            "label": "BIOS",
            "source_ref": "libretro_core_options.h:123"
          },
          "embedded_bios": {
            "cd_boot_rom": {
              "description": "Jaguar CD boot ROM",
              "filedb_crc": "0x687068D5",
              "filedb_name": "[BIOS] Atari Jaguar CD (World)",
              "header": "src/jagcdbios.h",
              "size": 262144,
              "source_file": "src/jagcdbios.c",
              "symbol": "jaguarCDBootROM"
            },
            "dev_cd_boot_rom": {
              "description": "Jaguar Developer CD boot ROM",
              "filedb_crc": "0x55A0669C",
              "filedb_name": "[BIOS] Atari Jaguar Developer CD (World)",
              "header": "src/jagdevcdbios.h",
              "size": 262144,
              "source_file": "src/jagdevcdbios.c",
              "symbol": "jaguarDevCDBootROM"
            },
            "k_series_boot_rom": {
              "description": "Jaguar K-series boot ROM",
              "filedb_crc": "0xFB731AAA",
              "filedb_name": "[BIOS] Atari Jaguar (World)",
              "header": "src/jagbios.h",
              "size": 131072,
              "source_file": "src/jagbios.c",
              "symbol": "jaguarBootROM"
            },
            "m_series_boot_rom": {
              "description": "Jaguar M-series boot ROM",
              "header": "src/jagbios2.h",
              "size": 131072,
              "source_file": "src/jagbios2.c",
              "symbol": "jaguarBootROM2"
            },
            "stubulator_93": {
              "description": "Jaguar Stubulator '93 dev BIOS",
              "filedb_crc": "0xE60277BB",
              "filedb_name": "[BIOS] Atari Jaguar Stubulator '93 (World)",
              "header": "src/jagstub1bios.h",
              "size": 131072,
              "source_file": "src/jagstub1bios.c",
              "symbol": "jaguarDevBootROM1"
            },
            "stubulator_94": {
              "description": "Jaguar Stubulator '94 dev BIOS",
              "filedb_crc": "0x8D15DBC6",
              "filedb_name": "[BIOS] Atari Jaguar Stubulator '94 (World)",
              "header": "src/jagstub2bios.h",
              "size": 131072,
              "source_file": "src/jagstub2bios.c",
              "symbol": "jaguarDevBootROM2"
            }
          }
        },
        "core_classification": "community_fork",
        "core_version": "v2.1.0",
        "cores": [
          "virtualjaguar"
        ],
        "display_name": "Atari - Jaguar (Virtual Jaguar)",
        "emulator": "Virtual Jaguar",
        "files": [],
        "notes": "Virtual Jaguar embeds all BIOS ROMs directly in the source code as C arrays\n(bin2c generated). No external BIOS files are loaded at runtime. The core\nselects between K-series and M-series boot ROMs based on vjs.biosType,\nthen copies 0x20000 bytes to jagMemSpace + 0xE00000 (libretro.c:902-904).\n\nThe \"BIOS\" core option (virtualjaguar_bios, disabled by default) controls\nwhether the embedded boot ROM is executed at startup. When enabled, the\nboot ROM entry point is copied to jaguarMainRAM (jaguar.c:644-645).\nWhen disabled, jaguarRunAddress is written directly, skipping the boot\nanimation. Either way the embedded ROM data is always present in memory.\n\nThe jagBootPath and CDBootPath fields in VJSettings exist in the struct\n(settings.h:36-37) but are never populated or used in the libretro port.\nNo call to RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY or fopen for BIOS files.\n\nJaguar CD emulation: the CD boot ROM (jaguarCDBootROM, 0x40000 bytes) is\nalso embedded but Jaguar CD support is incomplete in this core. The\ncdrom.c references \"CD BIOS\" in comments only.\n\nNo external BIOS files are required or loaded by this core.\n",
        "profiled_date": "2025-03-25",
        "source": "https://github.com/libretro/virtualjaguar-libretro",
        "source_commit": "48096c1f6f8b98cfff048a5cb4e6a86686631072",
        "systems": [
          "atari-jaguar"
        ],
        "type": "libretro",
        "upstream": "http://shamusworld.gotdns.org/git/virtualjaguar"
      }
    },
    {
      "id": "virtualxt",
      "profile": {
        "core_classification": "pure_libretro",
        "core_version": "2.1.0",
        "cores": [
          "virtualxt"
        ],
        "display_name": "VirtualXT",
        "emulator": "VirtualXT",
        "files": [],
        "notes": {
          "bios_approach": "All BIOS ROMs embedded at compile time via Odin #load() directive. Open-source replacements: GLaBIOS (GPL), Turbo XT BIOS 3.1, vgabios. No proprietary IBM PC/XT BIOS needed.\n",
          "supported_extensions": "img, ini, exe, com"
        },
        "profiled_date": "2026-03-25",
        "source": "https://codeberg.org/virtualxt/virtualxt",
        "source_commit": "ed177f5fb4f54d099bc217281930265ae1de9eca",
        "systems": [
          "ibm-pc"
        ],
        "type": "libretro",
        "upstream": "https://codeberg.org/virtualxt/virtualxt"
      }
    },
    {
      "id": "visual-pinball",
      "profile": {
        "analysis": {
          "generated_files": [
            {
              "note": "Created on first run under the preferences path, or read from beside the binary when one is there. Batocera seeds it from assets/Default_VPinballX.ini and rewrites it before every launch.",
              "source_ref": "lib/src/VPinballLib.cpp:192",
              "what": "VPinballX.ini, the settings file"
            },
            {
              "source_ref": "src/utils/Logger.cpp:167, standalone/README.md:512-534",
              "what": "VPReg.ini, per-table settings; vpinball.log"
            },
            {
              "note": "The ini directory is created when missing; the others are written by PinMAME as the machine runs.",
              "source_ref": "pinmame src/libpinmame/libpinmame.cpp:817-823, plugins/pinmame/Controller.cpp:166-171",
              "what": "PinMAME state: nvram/, cfg/, hi/, inp/, memcard/, sta/ and ini/"
            }
          ],
          "shipped_with_the_binary": {
            "entries": [
              {
                "source_ref": "src/parts/pintable.cpp:470-480, main.h:118-119, main.cpp:890-892, codeview.cpp:3233-3247",
                "what": "scripts/, the .vbs library tables include"
              },
              {
                "source_ref": "src/renderer/Renderer.cpp:204, src/parts/bumper.cpp:244, src/parts/kicker.cpp:274, src/core/TableDB.cpp:16, LiveUI.cpp:1705-1706, lib/src/WebServer.cpp:94",
                "what": "assets/, textures, TableSizes.csv, vpx.html, the two defaults"
              },
              {
                "source_ref": "src/renderer/Shader.cpp:1419",
                "what": "shader10.8.0/, .glfx and .fxh compiled at runtime"
              },
              {
                "source_ref": "plugins/flexdmd/UltraDMD.cpp:32, plugins/flexdmd/UltraDMD.cpp:20-22",
                "what": "flexdmd/, the bitmap fonts UltraDMD names as FlexDMD.Resources.*"
              },
              {
                "source_ref": "src/parts/pintable.cpp:484-521",
                "what": "user/ and tables/, the two roots exposed to table scripts as directory properties"
              }
            ],
            "note": "Copied into the build output next to the executable and installed as one unit by every distribution, so they arrive with the emulator rather than being sourced separately.",
            "source_ref": "CMakeLists.txt:948"
          },
          "shipped_without_a_reader": {
            "entries": [
              {
                "note": "InitBuiltinTable is one #ifndef __STANDALONE__ block; the editor's New Table entries are the only callers.",
                "source_ref": "src/ui/win/WinEditor.cpp:2240",
                "what": "assets/blankTable.vpx, exampleTable.vpx, lightSeqTable.vpx, strippedTable.vpx"
              },
              {
                "note": "The About dialog is not in the standalone source list.",
                "source_ref": "dialogs/AboutDialog.cpp:27-31, CMakeLists.txt:949",
                "what": "docs/Changelog.txt"
              }
            ],
            "note": "Copied into the build output but unreachable in the standalone binary"
          },
          "user_supplied_paths": {
            "entries": [
              {
                "note": "One zip per machine. The root is the pinmame folder beside the table when present, else the PinMAMEPath setting, else $HOME/.pinmame; Batocera patches that last fallback to <prefpath>/pinmame.",
                "source_ref": "plugins/pinmame/PinMAMEPlugin.cpp:448-451, pinmame src/libpinmame/libpinmame.cpp:816",
                "what": "PinMAME ROM sets, <pinmame root>/roms/<romname>.zip"
              },
              {
                "note": "Version-checked against the B2S server on load; absence only warns.",
                "source_ref": "plugins/b2slegacy/forms/FormBackglass.cpp:370",
                "what": "backglass, <table basename>.directb2s"
              },
              {
                "note": "Handed to libdmdutil as a path when the AltColor setting is on and the directory exists.",
                "source_ref": "plugins/serum/serum.cpp:60",
                "what": "Serum colorizations, the folder named by the SerumPath setting"
              },
              {
                "source_ref": "plugins/altsound/AltSoundPlugin.cpp:189-193",
                "what": "alternative sound packages, under the PinMAME root by ROM name"
              },
              {
                "source_ref": "plugins/pup/PUPManager.cpp:125, plugins/pup/PUPPlugin.cpp:288",
                "what": "PUP video packs, <table folder>/pupvideos"
              },
              {
                "source_ref": "src/audio/AudioPlayer.cpp:75-77, src/parts/pintable.cpp:524-545",
                "what": "table music, music/ beside the install, the table or the preferences path"
              },
              {
                "source_ref": "src/parts/pintable.cpp:704,794",
                "what": "table sidecars, the .vbs script override and the per-table .ini"
              }
            ],
            "note": "Per table, keyed on the table folder or the ROM name, with no fixed filename"
          }
        },
        "core_classification": "game_engine",
        "core_version": "10.8.0",
        "cores": [
          "vpinball",
          "visual-pinball"
        ],
        "display_name": "Visual Pinball X",
        "emulator": "visual-pinball",
        "files": [
          {
            "category": "game_data",
            "description": "MAME high score memory map database, read once per machine start",
            "name": "hiscore.dat",
            "note": "hs_open is called unconditionally at the top of cpu_run for every PinMAME machine, and the whole body sits behind `if (f)`, so an absent file is a no-op. It resolves to a bare filename against the working directory, which is the table's own folder: libpinmame sets paths for eight file types and FILETYPE_HIGHSCORE_DB is not among them, and the option table that would supply a default is linked only by the Windows COM build (pinmame src/libpinmame/libpinmame.cpp:816-823, pinmame src/libpinmame/fileio.c:140, pinmame src/win32com/VPinMAMEConfig.cpp:127).",
            "required": false,
            "source_ref": "pinmame src/hiscore.c:18,223-230, pinmame src/cpuexec.c:332-334,393,1755",
            "system": "vpinball"
          },
          {
            "category": "game_data",
            "description": "MAME cheat database, read when the per-ROM ini enables cheats",
            "name": "cheat.dat",
            "note": "Off by default: PinmameSetConfig zeroes options, and VPX only turns it on from the `cheat` key of <pinmame root>/ini/<romname>.ini, which it also rewrites on every run. With it on, InitCheat loads the database and an absent file leaves the menu showing \"cheat database not found\" (pinmame src/cheat.c:2463). Same bare-filename resolution as hiscore.dat.",
            "required": false,
            "source_ref": "pinmame src/cheat.c:8434,8602-8614, pinmame src/mame.c:578-583, plugins/pinmame/Controller.cpp:156",
            "system": "vpinball"
          }
        ],
        "mode": "standalone",
        "notes": "Pinball table simulator. The table is the content: .vpx and .vpt files are\nOLE Compound Documents holding the geometry, textures, sounds and a VBScript\nprogram, read through POLE on non-Windows platforms. The standalone branch\nports the Windows original by embedding Wine's VBScript engine, stubbing COM\nand ATL from Wine and ReactOS sources, and linking libpinmame, libaltsound,\nlibdmdutil, libdof and BASS in place of the Windows COM servers\n(standalone/README.md:11-120). ES-DE finds VPinballX_BGFX or VPinballX_GL and\nruns `<binary> -play <rom>`, Batocera builds the standalone tree at\n3ec37c7f9a into /usr/bin/vpinball and runs `VPinballX_GL -PrefPath <dir> -Ini\n<dir>/VPinballX.ini -Play <rom>`, RetroBat drives the Windows build with its\nregistered VPinMAME COM server.\n\nTwo path roots decide where everything is read from. m_szMyPath is the\ninstall directory, m_szMyPrefPath is ~/.vpinball or whatever -PrefPath names,\nand loading a table sets the working directory to the table's own folder\n(main.cpp:408, src/parts/pintable.cpp:2497,11165). Batocera's 001-default-path.patch\nredirects the PinMAME root from $HOME/.pinmame to <prefpath>/pinmame.\n\nTable scripts pull their libraries through GetTextFile, which walks seven\nlocations in order: the working directory, then user/, scripts/ and tables/\nunder the install directory, then the same three under the preferences path\n(src/parts/pintable.cpp:470-480, main.h:118-119, main.cpp:890-892). The\nscripts/ directory the build ships carries the ~70 .vbs files tables include\nby name, core.vbs and controller.vbs beside the per-manufacturer machine\nscripts (WPC.vbs, sam.vbs, s11.vbs, zac.vbs and the rest), and the editor's\ncompletion parser reads core.vbs over the same search order\n(codeview.cpp:3233-3247, CMakeLists.txt:948).\nThe same four roots are handed to table scripts as the UserDirectory,\nTablesDirectory, MusicDirectory and ScriptsDirectory properties, each falling\nback from the install directory to the table folder to the preferences path\n(src/parts/pintable.cpp:484-560).\n\nThe rest of the install tree is read the same way and ships with the binary:\nassets/ holds BallEnv.exr, AODither.webp and EnvMap.webp (src/renderer/Renderer.cpp:204),\nthe bumper and kicker textures (src/parts/bumper.cpp:244,\nsrc/parts/kicker.cpp:274), TableSizes.csv, which the live UI reads to\nguess the glass position of a table that does not declare one\n(src/core/TableDB.cpp:16, LiveUI.cpp:1705-1706), vpx.html for the built-in\nweb server (lib/src/WebServer.cpp:94) and\nDefault_gamecontrollerdb.txt; shader10.8.0/ holds the .glfx and .fxh sources\ncompiled at runtime (src/renderer/Shader.cpp:1419); flexdmd/ holds the bitmap\nfonts UltraDMD asks for by resource name, the FlexDMD.Resources. prefix being\nstripped before the lookup (plugins/flexdmd/UltraDMD.cpp:32,\nplugins/flexdmd/UltraDMD.cpp:20-22).\n\nTwo parts of that tree ship without a reader on this target. The four starter\ntables in assets/, blankTable.vpx, exampleTable.vpx, lightSeqTable.vpx and\nstrippedTable.vpx, are loaded only by InitBuiltinTable, whose body is one\n`#ifndef __STANDALONE__` block (src/ui/win/WinEditor.cpp:2240), and\ndocs/Changelog.txt is read by dialogs/AboutDialog.cpp:27-31, which is not in\nthe standalone source list at all.\n\nPinMAME is where the emulation happens. Tables that recreate a real solid\nstate machine hand a ROM name to the controller, which resolves its root as\nthe pinmame folder beside the table, else the PinMAMEPath setting, else\n$HOME/.pinmame (plugins/pinmame/PinMAMEPlugin.cpp:448-451). libpinmame then hangs roms,\nnvram, samples, cfg, hi, inp, memcard and sta off that root\n(pinmame src/libpinmame/libpinmame.cpp:816-823). Every ROM set is a game, one\nzip per machine; PinMAME declares no BIOS root set anywhere in its tree, and\ncarries neither GAME_IS_BIOS_ROOT nor ROM_SYSTEM_BIOS, so nothing in the ROM\npath is shared between machines.\n\nThree shared data files sit outside that per-machine content and are listed\nbelow. Two more that the MAME lineage would suggest are unreachable here. The\nmechanical sample set named by pinmame_sample_names, \"*pinmame\" followed by\neighteen .wav members (pinmame src/wpc/wpcsam.c:31-57), is dead twice over:\nreadsamples returns before opening anything unless options.use_samples is set\n(pinmame src/common.c:271), the two files that register that option live in\nsrc/windows/config.c and src/unix/sound.c and neither is in the libpinmame\nsource list, and PinmameSetConfig zeroes the whole options struct\n(pinmame src/libpinmame/libpinmame.cpp:807); independently, SAMPLESINTERFACE\nis defined at pinmame src/wpc/wpcsam.h:23 and no driver in the tree\nreferences it. history.dat and mameinfo.dat (pinmame src/datafile.c:619-623,\n649-653) are read only by displayhistory, a page of the MAME on-screen menu\n(pinmame src/usrintrf.c:2846-2851), and by the listing path in\npinmame src/info.c:820 which libpinmame never calls; VPX passes NULL for\nfn_IsKeyPressed, the thirteenth member of PinmameConfig\n(plugins/pinmame/Controller.cpp:73, pinmame src/libpinmame/libpinmame.h:418-433),\nso osd_is_key_pressed always answers 0\n(pinmame src/libpinmame/libpinmame.cpp:355-361) and the menu cannot be opened.\n\nThe pinmame observations were read at f102dc6cce7eb51e64427dd0b52bed37dbd2adea.\n",
        "profiled_date": "2026-08-08",
        "source": "https://github.com/vpinball/vpinball",
        "source_commit": "a8087ea9a3be7208c7def16045e4b5cc0330f80c",
        "systems": [
          "vpinball"
        ],
        "type": "standalone",
        "upstream": "https://github.com/vpinball/vpinball"
      }
    },
    {
      "id": "vita3k",
      "profile": {
        "core_version": "0.2.1",
        "cores": [
          "vita3k"
        ],
        "display_name": "Vita3K (PS Vita)",
        "emulator": "Vita3K",
        "files": [
          {
            "hle_fallback": true,
            "name": "PSVUPDAT.PUP",
            "note": "Main PS Vita firmware. Decrypted via SCE keys, extracts os0 (kernel), vs0 (system modules and apps), sa0 (fonts), pd0 (system data). Games load LLE modules from vs0/sys/external/*.suprx. Preload modules (libc, libSceFt2, libpvf) are always LLE. Without firmware most games fail. Some simple titles may run on HLE alone.\n",
            "path": "psvita/PSVUPDAT.PUP",
            "required": true,
            "source_ref": "vita3k/packages/src/pup.cpp:260-314, vita3k/app/src/app.cpp:175, vita3k/module/src/load_module.cpp:142-161, 187"
          },
          {
            "hle_fallback": true,
            "name": "PSP2UPDAT.PUP",
            "note": "Supplementary firmware font package. Populates the sa0 partition with system fonts (PVF format), which the renderer registers as the firmware font directory when the partition holds content.\n",
            "path": "psvita/PSP2UPDAT.PUP",
            "required": false,
            "source_ref": "vita3k/packages/src/pup.cpp:296-297, vita3k/app/src/app.cpp:176, vita3k/renderer/src/renderer.cpp:121-127"
          }
        ],
        "notes": "Standalone PS Vita emulator. No libretro core.\nFirmware installed via File > Install Firmware or CLI --firmware flag.\nPUP files validated by SCEUF magic header only (pup.cpp:119), no hash check.\nAfter install, four partitions are extracted:\n  os0 (FAT, kernel modules), vs0 (FAT, system modules/apps),\n  sa0 (FAT, fonts), pd0 (exFAT, system data/BGM).\nModule loading: app0:sce_module/{name}.suprx (game-bundled) then\nvs0:sys/external/{name}.suprx (firmware). Auto-LLE modules include\nlibhttp, libssl, libult, libsas, libpgf, libfios2, libsystemgesture,\nlibSceXml, libSceSqlite, librudp, libatrac, libface, libsmart,\nlibsceavplayer, libSceJson, and more (load_module.cpp:142-162).\nA third optional preinst firmware PUP (pd0 partition: system BGM, resources)\nis available from Sony but not commonly required for game compatibility.\n",
        "profiled_date": "2026-03-29",
        "source": "https://github.com/Vita3K/Vita3K",
        "source_commit": "80075ce556a9d5c2c8fbe27f70625fb539d3bbba",
        "systems": [
          "sony-playstation-vita"
        ],
        "type": "standalone",
        "upstream": "https://github.com/Vita3K/Vita3K"
      }
    },
    {
      "id": "vitaquake2",
      "profile": {
        "core_classification": "official_port",
        "core_version": "git",
        "cores": [
          "vitaquake2",
          "vitaquake2-rogue",
          "vitaquake2-xatrix",
          "vitaquake2-zaero"
        ],
        "display_name": "Quake II (vitaQuake 2)",
        "emulator": "vitaQuakeII",
        "files": [],
        "notes": "Quake II engine source port. Four separate cores are built from the same codebase via the basegame make variable: vitaquake2 (base game, baseq2), vitaquake2-rogue (Ground Zero expansion, compiled with -DROGUE), vitaquake2-xatrix (The Reckoning, compiled with -DXATRIX), and vitaquake2-zaero (Zaero mod, compiled with -DZAERO). Each core validates that the content path contains its expected game directory name (libretro.c:2073-2085,2173) and refuses to load mismatched content. The core accepts .pak extensions (retro_get_system_info sets valid_extensions = \"pak\"). Content is loaded from the PAK file path - the parent of the game subdirectory becomes basedir (libretro.c:2206-2209), then FS_InitFilesystem (files.c:778) adds baseq2/ and loads pak0.pak through pak9.pak sequentially from each game directory. For expansion cores, retro_run passes \"+set game rogue|xatrix|zaero\" (libretro.c:2232-2239) so the engine loads both baseq2/ and the expansion directory. PAK0_CHECKSUM 0x40e614e0 (files.c:30) matches the retail pak0.pak but is only used for directory CRC validation, not as a load gate. PAK files are game data (maps, textures, models, sounds) from the retail game, not engine firmware. No files are required in the RetroArch system directory. The core needs no BIOS or firmware. Optional CD music in OGG format can be placed in a music/ subdirectory alongside the PAK files.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vitaquake2",
        "source_commit": "34f088801e936f222f81e84f7d53d8620b2a9479",
        "systems": [
          "quake2"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Rinnegatamante/vitaQuakeII",
        "verification": "existence"
      }
    },
    {
      "id": "vitaquake3",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "git",
        "cores": [
          "vitaquake3"
        ],
        "display_name": "Quake III: Arena (vitaQuake 3)",
        "emulator": "vitaQuakeIII",
        "files": [],
        "notes": "Quake III Arena source port built from ioquake3 with the libretro backend. Also supports Team Arena (missionpack), OpenArena (baseoa), Quake3Rally (baseq3r), and Urban Terror (q3ut4) via path detection. Content is loaded from the .pk3 file path - the engine resolves the parent directory structure to find baseq3/ and loads pak0.pk3 through pak8.pk3 sequentially. Game data files (.pk3 archives) come from the retail game. No files are required in the RetroArch system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vitaquake3",
        "source_commit": "198e9959e2d5b692a592aa6fd7537e9a00869c42",
        "systems": [
          "quake3"
        ],
        "type": "libretro",
        "upstream": "https://github.com/ioquake/ioq3"
      }
    },
    {
      "id": "vitavoyager",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "git",
        "cores": [
          "vitavoyager"
        ],
        "display_name": "Star Trek: Voyager - Elite Force (vitaVoyager)",
        "emulator": "vitavoyager",
        "files": [],
        "notes": "Star Trek Voyager Elite Force Holomatch (multiplayer) source port built from Lilium Voyager (itself an ioquake3 fork) with the libretro backend. Content is loaded from the .pk3 file path - the engine resolves the parent directory structure to find baseEF/ and loads pak0.pk3 through pak3.pk3 sequentially. Game data files (.pk3 archives) come from the retail game. No files are required in the RetroArch system directory.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/vitavoyager",
        "source_commit": "58b70dd7ea891c2e8ddc37d03a5d58116b0ea118",
        "systems": [
          "quake3"
        ],
        "type": "libretro",
        "upstream": "https://github.com/zturtleman/lilium-voyager"
      }
    },
    {
      "id": "wasm4",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2.1.0",
        "cores": [
          "wasm4"
        ],
        "display_name": "WASM-4",
        "emulator": "WASM-4",
        "files": [],
        "notes": "Fantasy game console for WebAssembly. 160x160 display, 4-color palette, 1024 bytes persistent storage. Self-contained runtime, no external file dependencies. Libretro backend is in the upstream repo (no separate fork).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/aduros/wasm4",
        "source_commit": "59107843a639c3fd17e15dfdf7bbe65360f3080e",
        "systems": [],
        "type": "libretro",
        "upstream": "https://github.com/aduros/wasm4"
      }
    },
    {
      "id": "x1",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "0.60a",
        "cores": [
          "x1"
        ],
        "display_name": "Sharp X1 (X Millennium)",
        "emulator": "X Millennium",
        "files": [
          {
            "description": "X1 IPL ROM. Loaded when ROM_TYPE=1 (X1 model).",
            "hle_fallback": true,
            "name": "IPLROM.X1",
            "path": "xmil/IPLROM.X1",
            "required": false,
            "size": 32768,
            "source_ref": "io/memio.c:82,96-108"
          },
          {
            "description": "X1 Turbo/TurboZ IPL ROM. Loaded when ROM_TYPE=2 or 3.",
            "hle_fallback": true,
            "name": "IPLROM.X1T",
            "path": "xmil/IPLROM.X1T",
            "required": false,
            "size": 32768,
            "source_ref": "io/memio.c:83,97-108"
          },
          {
            "description": "8x8 ANK font ROM. Built-in defrom_ank fallback provides basic ASCII.",
            "hle_fallback": true,
            "name": "FNT0808.X1",
            "path": "xmil/FNT0808.X1",
            "required": false,
            "size": 2048,
            "source_ref": "font/fontdata.c:6, font/fontx1.c:79-87",
            "validation": [
              "size"
            ]
          },
          {
            "description": "8x16 ANK font ROM. Built-in fallback derived from defrom_ank/defrom_txt.",
            "hle_fallback": true,
            "name": "FNT0816.X1",
            "path": "xmil/FNT0816.X1",
            "required": false,
            "size": 4096,
            "source_ref": "font/fontdata.c:7, font/fontx1.c:89-103",
            "validation": [
              "size"
            ]
          },
          {
            "description": "16x16 Kanji font ROM. No built-in kanji data (zeroed). Required for Japanese text.",
            "name": "FNT1616.X1",
            "path": "xmil/FNT1616.X1",
            "required": false,
            "size": 306176,
            "source_ref": "font/fontdata.c:8, font/fontx1.c:105-120",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Place all files in: <system_dir>/xmil/\nThe core selects between IPLROM.X1 and IPLROM.X1T based on the \"X1_ROMTYPE\"\ncore option. A 575-byte built-in IPL stub provides limited boot without the\nreal ROMs. Font files add Japanese character support; the libretro port has a\npath resolution quirk where fonts are searched in \"./\" instead of \"xmil/\"\n(missing file_setcd call).\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/xmil-libretro",
        "source_commit": "3e7960a433c3bca820f8b8f5511a2b92bd666829",
        "systems": [
          "sharp-x1"
        ],
        "type": "libretro",
        "upstream": "http://amethyst.yui.ne.jp/svn/x1/xmil/trunk/"
      }
    },
    {
      "id": "x1-box",
      "profile": {
        "author": "izzy2lost",
        "core_classification": "community_fork",
        "core_version": "1.2.6",
        "cores": [
          "x1-box",
          "x1box"
        ],
        "display_name": "Microsoft - Xbox (X1 BOX)",
        "emulator": "X1 BOX",
        "exclusion_note": "Two file loads present in the tree are not reached by this build and are not listed. hw/xbox/chihiro.c falls back to the media board ROM when no path is given and maps a media board filesystem image beside it, but the whole driver is filtered out of the source list, so no Chihiro machine exists here. X1_Covers.xml ships in the assets and no code opens it, the library reading X1_Covers.txt instead. ref: hw/xbox/chihiro.c,\n     android/app/src/main/cpp/CMakeLists.txt:705,\n     android/app/src/main/assets/X1_Covers.xml,\n     android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt:901\n",
        "files": [
          {
            "config_key": "sys.files.bootrom_path",
            "description": "MCPX southbridge boot ROM",
            "md5": "d49c52a4102f6df7bcf8d0617ac475ed",
            "name": "mcpx_1.0.bin",
            "note": "The only file the app verifies by content. A pick is accepted just when its MD5 equals the value hardcoded in the wizard, which is the v1.0 boot ROM; anything else is refused with the expected hash quoted, and the 512-byte dump whose MD5 is 196a5f59a13382c185636e691d6c323d is named separately as a known bad dump to re-dump. The check runs again over the stored copy every time the wizard opens, so a file that stops matching is dropped. The loader then checks the size a second time and ends the process when it is not 512 bytes. The bytes are read over the last 512 of the flash image and the region stays writable so early retail kernels keep their cache quirk.",
            "path": "x1box/mcpx.bin",
            "required": true,
            "size": 512,
            "source_ref": "android/app/src/main/java/com/izzy2lost/x1box/SetupWizardActivity.kt:23-25, 67-91, 411-459, 461-500, android/app/src/main/res/values/strings.xml:19-21, system/vl.c:2998-3022, hw/xbox/xbox.c:143-172",
            "validation": [
              "size",
              "md5"
            ]
          },
          {
            "config_key": "sys.files.flashrom_path",
            "description": "Xbox flash ROM",
            "name": "Complex_4627.bin",
            "note": "Passed as -bios, and the one image whose absence stops the run on its own: a path that cannot be opened queues an error and clears autostart. The picker only refuses what looks like the boot ROM, a 512-byte file or either MCPX hash, and asks for a BIOS instead; there is no positive hash to match. The image is mapped at 0xFF000000 and mirrored to the top of the address space; a size that is zero or not a multiple of 64 KB, or a short read, falls back to 256 KB filled with 0xFF. A retail image cannot launch unsigned code, so a debug or modified image is what boots a title.",
            "path": "x1box/flash.bin",
            "required": true,
            "size_note": "Any non-zero multiple of 65536; 256 KB is assumed when the image cannot be read.",
            "size_options": [
              262144,
              524288,
              1048576
            ],
            "source_ref": "system/vl.c:3057-3072, hw/xbox/xbox.c:64-102, android/app/src/main/java/com/izzy2lost/x1box/SetupWizardActivity.kt:64, 93-116, 487-495",
            "validation": [
              "size"
            ]
          },
          {
            "config_key": "sys.files.hdd_path",
            "description": "Xbox hard disk image",
            "name": "xbox_hdd.qcow2",
            "note": "Taken in qcow2 or raw form and attached as index 0 with locked=on and cache=writethrough. An empty setting attaches no drive at all and an unopenable one only queues a message, but the launcher refuses to leave the wizard until the file resolves. The formatter builds FATX partitions inside an image that already exists and needs at least 0x1DD156000 bytes for the retail layout; it never creates the image. Partitions C and E of this image are what the dashboard import writes into.",
            "path": "x1box/hdd.img",
            "required": true,
            "source_ref": "system/vl.c:3078-3092, android/app/src/main/java/com/izzy2lost/x1box/SetupWizardActivity.kt:65, 118-139, android/app/src/main/java/com/izzy2lost/x1box/XboxHddFormatter.kt:7-16, 46-50, android/app/src/main/cpp/xemu_android.cpp:822-843"
          },
          {
            "config_key": "sys.files.eeprom_path",
            "description": "Xbox EEPROM image",
            "name": "eeprom.bin",
            "note": "Always pointed at x1box/eeprom.bin, a path the wizard never asks for. Generated as XBOX_EEPROM_VERSION_R1 when it does not exist, so a dump is needed only to carry over a console serial, region or HDD key. It is attached through the smbus-storage device; a size other than 256 bytes, or a generation that fails, clears autostart. Preparing Insignia and the EEPROM editor write to it in place.",
            "path": "x1box/eeprom.bin",
            "required": false,
            "size": 256,
            "source_ref": "system/vl.c:2921-2964, 3045-3055, android/app/src/main/cpp/xemu_android.cpp:757-759, 719, android/app/src/main/cpp/xemu_settings_android.cc:246-286, android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:2748-2751",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Retail dashboard boot executable",
            "load_from": "hdd_image",
            "name": "xboxdash.xbe",
            "note": "Imported to the root of partition C from the C directory of a user dashboard tree. The import treats this name as the boot entry: when it is absent the best scoring .xbe of the tree is copied to it, and the retail boot counts as ready only once the name exists. The start path of the emulator never reads partition C, and preparing Insignia finishes with a warning when the name is missing.",
            "path": "C/xboxdash.xbe",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1796-1797, 1842-1843, 1864-1911, android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:2370-2401, 2436-2445, 2518, 2536-2538"
          },
          {
            "description": "Retail dashboard executable kept beside the boot copy",
            "load_from": "hdd_image",
            "name": "msdash.xbe",
            "note": "Probed at the root of partition C and imported with the rest of the tree. Its presence beside the boot XBE is one of the marks the status line reads to call a dashboard install complete, and it is one of the names that decide which directory of a picked tree is taken as the source root.",
            "path": "C/msdash.xbe",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1798-1799, 1844-1845, android/app/src/main/java/com/izzy2lost/x1box/XboxInsigniaHelper.kt:13, 42-50, android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:2518, 2539-2541"
          },
          {
            "description": "Dashboard typeface",
            "load_from": "hdd_image",
            "name": "xbox.xtf",
            "note": "Probed at the root of partition C and imported with the rest of the tree, alongside the xodash, audio, fonts and xboxdashdata.* directories the root scan looks for.",
            "path": "C/xbox.xtf",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_fatx_import.c:1786-1794, 1800-1801, 1846-1847, android/app/src/main/java/com/izzy2lost/x1box/XboxInsigniaHelper.kt:12, 14-16, android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:2518, 2542-2543"
          },
          {
            "description": "Replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Imported through a picker into gpu_drivers under the external files directory, renamed after the name field of the meta.json it carries, then unpacked whole into gpu_driver in internal storage, entries that would escape that directory being refused. The minApi field is compared against the device before the archive is kept. Loading is offered only when /dev/kgsl-3d0 exists, and clearing the install directory returns the app to the system driver.",
            "required": false,
            "source_ref": "android/app/src/main/java/com/izzy2lost/x1box/GpuDriverHelper.kt:15, 19-35, 41-89, 91-131, 133-136, 170-197",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          },
          {
            "bundled": true,
            "description": "SDL controller mapping database",
            "name": "gamecontrollerdb.txt",
            "note": "Read from the assets of the package as the game controller subsystem comes up and handed to SDL as a memory stream. The asset manager reads inside the archive and the path is a constant, so there is no search order and nothing outside the package replaces this copy; an added pad mapping goes in through controller_map.txt instead. The revision shipped here is 589031 bytes and is not the one other releases carry under this name.",
            "required": false,
            "source_ref": "android/app/src/main/cpp/xemu_android.cpp:205-206, 236-275, 1192-1197",
            "unsourceable": "opened through the asset manager inside the package, so no file on disk reaches this load"
          },
          {
            "bundled": true,
            "description": "Cover art index for the game library",
            "name": "X1_Covers.txt",
            "note": "Read from the assets and turned into a lookup from normalised game name to a URL under the X1_Covers repository, which the library fetches and caches per title. Only lines ending in .png are kept.",
            "required": false,
            "source_ref": "android/app/src/main/java/com/izzy2lost/x1box/GameLibraryActivity.kt:103, 895-935"
          },
          {
            "description": "Extra SDL controller mappings",
            "load_from": "internal_storage",
            "name": "controller_map.txt",
            "note": "SDL builds this path from the internal storage directory of the package when SDL_GAMECONTROLLERCONFIG_FILE is unset, which it is here, and reads it while the game controller subsystem starts, after the mappings compiled in. It is the one mapping file a user can add without rebuilding the package. The SDL2 tree in thirdparty is what the build compiles, the local checkout taking precedence over the release archive CMake would otherwise fetch.",
            "required": false,
            "source_ref": "thirdparty/SDL2/src/joystick/SDL_gamecontroller.c:1873-1885, 1890-1907, android/app/src/main/cpp/CMakeLists.txt:61-72"
          }
        ],
        "mode": "standalone",
        "notes": "Original Xbox emulator for Android, package com.izzy2lost.x1box, arm64-v8a.\nA Kotlin front end carries the launcher, setup wizard, game library, settings\nand per-title overrides, and drives a whole xemu tree built through CMake\nagainst SDL2 and QEMU 10.2.0. The imgui interface, the monitor and the\nsnapshot entry points are stubbed, so that front end is the only interface.\n.LauncherActivity answers VIEW with a content or file URI, and that URI\nbecomes the disc slot before emulation opens.\nref: QEMU_VERSION,\n     android/app/build.gradle.kts:49, 55, 64-65, 68,\n     android/app/src/main/AndroidManifest.xml:13-30,\n     android/app/src/main/cpp/CMakeLists.txt:858, 867-868,\n     android/app/src/main/java/com/izzy2lost/x1box/LauncherActivity.kt:37,\n     92-121\n\nThe wizard walks four steps and each Next stays disabled until its own step\nresolves: the MCPX boot ROM, the flash ROM, the disk image and a games\nfolder. The two ROM pickers keep .bin, .rom and .img, the disk picker .qcow2\nand .img. A pick is fingerprinted before anything is written, and only a file\nthat passes is copied into x1box under the external files directory as\nmcpx.bin, flash.bin or hdd.img; a file chosen as a path in place is kept as\nthat path instead. Those names, the eeprom the wizard never asks for and the\ndisc are written to x1box/xemu.toml under sys.files. The disc is handed to\nQEMU as a file descriptor through -add-fd and only copied to x1box/dvd.iso\nwhen that fails.\nref: android/app/src/main/java/com/izzy2lost/x1box/SetupWizardActivity.kt:63-139,\n     243-278, 411-459,\n     android/app/src/main/cpp/xemu_android.cpp:717-721, 757-870, 1315-1325\n\nThe three images are what the app gates on. The launcher sends the user back\nthrough the wizard whenever the MCPX, the flash, the disk or the games folder\nstops resolving, and an intent from a frontend reaches the emulator only once\nthe three images resolve. The core underneath is looser: an empty MCPX path\nsimply leaves the machine property off, an empty disk path attaches no drive\nat index 0, and only the flash clears autostart on its own.\nref: android/app/src/main/java/com/izzy2lost/x1box/LauncherActivity.kt:117-135,\n     system/vl.c:3000-3022, 3057-3072, 3078-3092\n\nSettings imports a dashboard tree from a ZIP or a folder into the FATX\npartitions of the configured disk image, C at 0x8CA80000 and E at 0xABE80000,\nkeeping what it overwrites in a dated backup folder. The tree is searched for\na boot XBE beforehand and the best candidate is copied to C/xboxdash.xbe when\nthat name is missing, xboxdash.xbe, default.xbe, evoxdash.xbe, avalaunch.xbe,\nunleashx.xbe, xbmc.xbe and nexgen.xbe scoring in that order, with a name\ncarrying dash and a path under dashboard scoring above one under apps or\ngames. The status line probes C for xboxdash.xbe, msdash.xbe, xbox.xtf and\nthe directories xodash, audio, fonts and xboxdashdata.*, and calls the\ninstall complete when the boot XBE sits beside at least one of the others.\nref: android/app/src/main/cpp/xemu_fatx_import.c:51-54, 1786-1801, 1842-1847,\n     1864-1911,\n     android/app/src/main/java/com/izzy2lost/x1box/XboxInsigniaHelper.kt:10-53,\n     android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:2370-2445\n\nPreparing Insignia turns the NAT backend on and writes the DNS 46.101.64.175\ninto the config sector of the disk image and into the EEPROM at 0xAC.\nRegistration boots a Setup Assistant image the user picks, which goes in the\ndisc slot like any other game. The disk tools format an image that already\nexists and never create one: a retail layout needs at least 0x1DD156000\nbytes and the extended F and G layouts need room past that boundary. The\nEEPROM editor rewrites language, video standard, resolution flags, aspect\nratio and refresh rate in place and recomputes both checksums. The five\nmanaged files travel together through an x1box-files-*.zip archive that\nsettings both writes and reads back.\nref: android/app/src/main/java/com/izzy2lost/x1box/XboxInsigniaHelper.kt:7-8,\n     62-77,\n     android/app/src/main/java/com/izzy2lost/x1box/XboxEepromEditor.kt:17,\n     159-213,\n     android/app/src/main/java/com/izzy2lost/x1box/XboxHddFormatter.kt:7-16,\n     46-50,\n     android/app/src/main/java/com/izzy2lost/x1box/SettingsActivity.kt:48-56,\n     1030-1086, 1432-1445\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/izzy2lost/xemu",
        "source_commit": "3ed53f6843ac41147287468d996dfa939b40ad00",
        "systems": [
          "microsoft-xbox"
        ],
        "type": "standalone",
        "upstream": "https://github.com/xemu-project/xemu",
        "upstream_commit": "26fcbe54f17e496bdf530dad9f237e74e2f943fc"
      }
    },
    {
      "id": "x16emu",
      "profile": {
        "core_version": "r50",
        "cores": [
          "x16emu"
        ],
        "display_name": "Commander X16 (x16emu)",
        "emulator": "x16emu",
        "files": [
          {
            "description": "Commander X16 system ROM (KERNAL, BASIC, DOS, charset)",
            "name": "rom.bin",
            "note": "Default filename \"rom.bin\", loaded from executable directory or via -rom flag. ROM_SIZE = NUM_ROM_BANKS(32) * 16384 = 524288 bytes. exit(1) if file not found. Built from x16-rom repo (open source, derived from C64 KERNAL/BASIC).\n",
            "path": "commanderx16/rom.bin",
            "required": true,
            "size": 524288,
            "source_ref": "src/main.c:602, 626, 1163, src/glue.h:24"
          }
        ],
        "notes": "Standalone emulator for the Commander X16 retro computer by Michael Steil.\n65C02/65C816 CPU, VERA video, YM2151+PSG audio, SD card, cartridge support.\n\nSystem ROM built separately from the x16-rom repo (KERNAL + BASIC + DOS,\n32 banks x 16 KB = 512 KB). Emulator and ROM versions must match.\n\nBatocera configgen (x16emuGenerator.py) passes -rom /userdata/bios/commanderx16/rom.bin.\nAlso sets -ram 2048, -rtc, and scale/quality/widescreen per user config.\n",
        "profiled_date": "2026-03-26",
        "source_commit": "49b1fbd6d058cc8c6f126ed86d9b6ccfaaa8335b",
        "systems": [
          "commanderx16"
        ],
        "type": "standalone",
        "upstream": "https://github.com/X16Community/x16-emulator"
      }
    },
    {
      "id": "x64sdl",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "3.1",
        "cores": [
          "x64sdl"
        ],
        "display_name": "Commodore - C64 (VICE SDL)",
        "emulator": "x64sdl",
        "files": [
          {
            "description": "C64 Kernal ROM",
            "name": "kernal",
            "path": "data/C64/kernal",
            "required": true,
            "size": 8192,
            "source_ref": "src/c64/c64rom.c:133, src/c64/c64-resources.c:255"
          },
          {
            "description": "C64 BASIC ROM",
            "name": "basic",
            "path": "data/C64/basic",
            "required": true,
            "size": 8192,
            "source_ref": "src/c64/c64rom.c:192, src/c64/c64-resources.c:258"
          },
          {
            "description": "C64 character generator ROM",
            "name": "chargen",
            "path": "data/C64/chargen",
            "required": true,
            "size": 4096,
            "source_ref": "src/c64/c64rom.c:207, src/c64/c64-resources.c:252"
          },
          {
            "description": "SX-64 Kernal ROM",
            "name": "sxkernal",
            "note": "Loaded when SX64 PAL or SX64 NTSC model selected.",
            "path": "data/C64/sxkernal",
            "required": false,
            "size": 8192,
            "source_ref": "src/c64/c64model.c:142,147"
          },
          {
            "description": "Japanese C64 Kernal ROM",
            "name": "jpkernal",
            "note": "Loaded when C64 JAP NTSC model selected.",
            "path": "data/C64/jpkernal",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 8192,
            "source_ref": "src/c64/c64model.c:152"
          },
          {
            "description": "Japanese C64 character generator ROM",
            "name": "jpchrgen",
            "note": "Loaded when C64 JAP NTSC model selected.",
            "path": "data/C64/jpchrgen",
            "region": [
              "japan"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "src/c64/c64model.c:152"
          },
          {
            "description": "C64 Games System Kernal ROM",
            "name": "gskernal",
            "note": "Loaded when C64 GS PAL model selected.",
            "path": "data/C64/gskernal",
            "required": false,
            "size": 8192,
            "source_ref": "src/c64/c64model.c:157"
          },
          {
            "description": "PET64/Educator64 Kernal ROM",
            "name": "edkernal",
            "note": "Loaded when PET64 PAL or PET64 NTSC model selected.",
            "path": "data/C64/edkernal",
            "required": false,
            "size": 8192,
            "source_ref": "src/c64/c64model.c:162,167"
          },
          {
            "description": "1540 floppy drive ROM",
            "name": "dos1540",
            "note": "Hardware-level 1540 drive emulation. Absence disables this drive type.",
            "path": "data/DRIVES/dos1540",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:99, src/drive/iec/iec-resources.c:182"
          },
          {
            "description": "1541 floppy drive ROM",
            "name": "dos1541",
            "note": "Hardware-level 1541 drive emulation. Most common C64 drive.",
            "path": "data/DRIVES/dos1541",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:106, src/drive/iec/iec-resources.c:185"
          },
          {
            "description": "1541-II floppy drive ROM",
            "name": "d1541II",
            "path": "data/DRIVES/d1541II",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:113, src/drive/iec/iec-resources.c:187"
          },
          {
            "description": "1570 floppy drive ROM",
            "name": "dos1570",
            "path": "data/DRIVES/dos1570",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:121, src/drive/iec/iec-resources.c:189"
          },
          {
            "description": "1571 floppy drive ROM",
            "name": "dos1571",
            "path": "data/DRIVES/dos1571",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:127, src/drive/iec/iec-resources.c:191"
          },
          {
            "description": "1581 floppy drive ROM",
            "name": "dos1581",
            "path": "data/DRIVES/dos1581",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:133, src/drive/iec/iec-resources.c:193"
          },
          {
            "description": "CMD FD-2000 drive ROM",
            "name": "dos2000",
            "note": "Not shipped with VICE 3.1 data files.",
            "path": "data/DRIVES/dos2000",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:139, src/drive/iec/iec-resources.c:195"
          },
          {
            "description": "CMD FD-4000 drive ROM",
            "name": "dos4000",
            "note": "Not shipped with VICE 3.1 data files.",
            "path": "data/DRIVES/dos4000",
            "required": false,
            "source_ref": "src/drive/iec/iecrom.c:145, src/drive/iec/iec-resources.c:197"
          },
          {
            "description": "2031 IEEE drive ROM",
            "name": "dos2031",
            "note": "IEEE488 interface drive. Requires parallel IEEE488 extension.",
            "path": "data/DRIVES/dos2031",
            "required": false,
            "source_ref": "src/drive/ieee/ieee.c:115, src/drive/ieee/ieee-resources.c:93"
          },
          {
            "description": "2040 IEEE drive ROM",
            "name": "dos2040",
            "path": "data/DRIVES/dos2040",
            "required": false,
            "source_ref": "src/drive/ieee/ieee.c:116, src/drive/ieee/ieee-resources.c:96"
          },
          {
            "description": "3040 IEEE drive ROM",
            "name": "dos3040",
            "path": "data/DRIVES/dos3040",
            "required": false,
            "source_ref": "src/drive/ieee/ieee.c:117, src/drive/ieee/ieee-resources.c:98"
          },
          {
            "description": "4040 IEEE drive ROM",
            "name": "dos4040",
            "path": "data/DRIVES/dos4040",
            "required": false,
            "source_ref": "src/drive/ieee/ieee.c:118, src/drive/ieee/ieee-resources.c:100"
          },
          {
            "description": "1001/8050/8250 IEEE drive ROM",
            "name": "dos1001",
            "path": "data/DRIVES/dos1001",
            "required": false,
            "source_ref": "src/drive/ieee/ieee.c:119, src/drive/ieee/ieee-resources.c:102"
          },
          {
            "description": "MPS-803 printer character ROM",
            "name": "mps803",
            "note": "Loaded on demand when MPS-803 printer opened.",
            "path": "data/PRINTER/mps803",
            "required": false,
            "source_ref": "src/printerdrv/drv-mps803.c:420"
          },
          {
            "description": "NL10 printer ROM",
            "name": "nl10-cbm",
            "note": "Loaded on demand when NL10 printer opened.",
            "path": "data/PRINTER/nl10-cbm",
            "required": false,
            "source_ref": "src/printerdrv/drv-nl10.c:2210"
          }
        ],
        "notes": "Old port of VICE 3.1 using an SDL-to-libretro shim (r-type/sdlvice-libretro). Separate codebase from the newer vice-libretro port. Marked experimental and superseded. Unlike the newer port, this core does NOT embed system ROMs; all ROMs must be on disk in <system_dir>/data/C64/ and <system_dir>/data/DRIVES/. The .info declares firmware_count=0 which is incorrect. No JiffyDOS support. No save states, no netplay, no cheats.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/r-type/sdlvice-libretro",
        "source_commit": "baaaeed97ce1c0a07ed78e3e155cfbd6f508b472",
        "systems": [
          "commodore-c64"
        ],
        "type": "libretro",
        "upstream": "https://sourceforge.net/projects/vice-emu/"
      }
    },
    {
      "id": "xemu",
      "profile": {
        "core_version": "0.8.x",
        "cores": [
          "xemu"
        ],
        "display_name": "xemu (Xbox)",
        "emulator": "Xemu",
        "files": [
          {
            "config_key": "sys.files.bootrom_path",
            "description": "MCPX HLE boot ROM (v1.0)",
            "name": "mcpx_1.0.bin",
            "note": "Overlaid on the last 512 bytes of the flash ROM region at boot.\nMapped to 0xFFFFFE00-0xFFFFFFFF. Disabled after early init\nvia LPC config register write (hw/xbox/xbox_pci.c:362).\nMachine property: -machine xbox,bootrom=<path>\n",
            "required": true,
            "size": 512,
            "source_ref": "hw/xbox/xbox.c:151 (bootrom_size != 512 -> error)"
          },
          {
            "config_key": "sys.files.flashrom_path",
            "description": "Xbox flash ROM / BIOS (256 KB, kernel 4627)",
            "name": "Complex_4627.bin",
            "note": "Loaded as -bios argument (system/vl.c:3052-3053).\nMapped to 0xFF000000-0xFFFFFFFF with mirroring.\nCommon variants: Complex_4627 (1.0), Complex_4034 (debug),\nComplex_4817 (1.1). Any valid Xbox BIOS dump works.\n",
            "required": true,
            "size_note": "Must be a multiple of 64 KB. Default 256 KB.",
            "size_options": [
              262144,
              524288,
              1048576
            ],
            "source_ref": "hw/xbox/xbox.c:70-81 (bios_name, bios_size validation)"
          },
          {
            "config_key": "sys.files.eeprom_path",
            "description": "Xbox EEPROM dump (256 bytes)",
            "hle_fallback": true,
            "name": "eeprom.bin",
            "note": "Loaded via smbus-storage device (hw/xbox/smbus_storage.c:157).\nAuto-generated as XBOX_EEPROM_VERSION_R1 if missing\n(system/vl.c:2918-2919). Default path: <config_dir>/eeprom.bin.\nContains serial, MAC, HDD key, region, video standard.\nStructure defined in hw/xbox/eeprom_generation.h.\n",
            "required": false,
            "size": 256,
            "source_ref": "system/vl.c:2939 (size != 256 -> error)"
          },
          {
            "config_key": "sys.files.hdd_path",
            "description": "Xbox HDD image (8 GB, qcow2 format)",
            "name": "xbox_hdd.qcow2",
            "note": "Attached as IDE drive index=0 with locked=on.\nMust contain Xbox partitions (C, E, X, Y, Z).\nPre-built images available from xemu project.\nNot a BIOS file - excluded from retrobios packs.\n",
            "required": true,
            "source_ref": "system/vl.c:3060-3073 (hdd_path loading)"
          }
        ],
        "logo": "https://raw.githubusercontent.com/xemu-project/xemu/master/data/xemu_64x64.png",
        "machine_properties": {
          "avpack": "Video connector type: composite, scart, svideo, vga, rfu, hdtv, none",
          "bootrom": "MCPX boot ROM path (string)",
          "short-animation": "Skip Xbox boot animation (bool)",
          "smc-version": "SMC version string, 3 chars, default P01",
          "source_ref": "hw/xbox/xbox.c:446-497",
          "video-encoder": "Video encoder chip: conexant (default), focus, xcalibur"
        },
        "memory_layout": {
          "flash_rom": "0xFF000000-0xFFFFFFFF (mirrored per bios_size)",
          "mcpx_overlay": "Last bios_size bytes, overlays flash ROM at reset",
          "ram": "64 MB or 128 MB (configurable via sys.mem_limit)",
          "source_ref": "hw/xbox/xbox.c:64-173"
        },
        "notes": "Xemu is a free, open-source Xbox emulator based on QEMU.\nThree firmware files are required for operation: MCPX boot ROM,\nflash ROM (BIOS), and EEPROM image. A pre-built HDD image is\nalso needed. The EEPROM can be auto-generated by xemu if not\nprovided. Config stored in xemu.toml under sys.files section.\n",
        "profiled_date": "2026-03-18",
        "source": "https://github.com/xemu-project/xemu",
        "source_commit": "295c13e972338879ff74a3e9f0dd57b35e148c60",
        "systems": [
          "microsoft-xbox"
        ],
        "type": "standalone"
      }
    },
    {
      "id": "xendroid",
      "profile": {
        "author": "rfandango",
        "core_classification": "community_fork",
        "core_version": "b70d643",
        "cores": [
          "xendroid",
          "XENDROID"
        ],
        "display_name": "Microsoft - Xbox 360 (XenDroid)",
        "emulator": "XenDroid",
        "exclusion_note": "The file loads present in the vendored tree that this build does not reach are not listed. tahoma.ttf and msgothic.ttc are read by the Windows font paths only, and the two fontconfig matches are compiled out by XE_PLATFORM_LINUX && !(XE_PLATFORM_ANDROID || XE_PLATFORM_xendroid), because platform.h defines XE_PLATFORM_xendroid and XE_PLATFORM_LINUX for this target and leaves XE_PLATFORM_ANDROID commented out. gamecontrollerdb.txt belongs to the SDL input driver, and xenia-hid-sdl is absent from the link list, which carries xenia-hid-nop and the fork's own Android driver. portable.txt is read by xenia_main.cc, which is not compiled, the application supplying its own windowed app. The profile picture the gamercard dialog reads through ReadPngFromFile is never reached: the Android file picker returns false without showing anything, so no path is ever selected. librenderdoc.so is opened with RTLD_NOLOAD, which returns a handle only when the library is already mapped and never reads the file. Edge's in-binary patch bundle, its game compatibility bundle and its game title database are packed from build/data_repos, which xenia-build.py fetches and the Gradle build never runs, so the bundle compiled in is empty and the APK assets are the only patch source; the locale bundle is guarded off when the CMake system name is Android. Two profile files sit beside the Account and are not listed: tile_32.png is written and never read back, and tile_64.png is written by the frontend from a picture the user picks and read only to draw the avatar, the core testing its existence and nothing more. ref: emulator-core/src/main/cpp/xenia/src/xenia/ui/imgui_drawer.cc:389-405, 418-465, 474-490, 500-536,\n     emulator-core/src/main/cpp/xenia/src/xenia/base/platform.h:34-40,\n     emulator-core/src/main/cpp/xenia/src/xenia/hid/sdl/CMakeLists.txt:7-8,\n     emulator-core/src/main/cpp/CMakeLists.txt:112-152,\n     emulator-core/src/main/cpp/xenia/src/xenia/app/xenia_main.cc:95-99,\n     emulator-core/src/main/cpp/xenia/src/xenia/app/xenia_main.cc:561,\n     emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/ui/gamercard_ui.cc:339-368,\n     emulator-core/src/main/cpp/xenia/src/xenia/ui/file_picker_android.cc:27-34,\n     emulator-core/src/main/cpp/xenia/src/xenia/ui/renderdoc_api.cc:33-41,\n     emulator-core/src/main/cpp/xenia/src/xenia/patcher/CMakeLists.txt:6-7,\n     emulator-core/src/main/cpp/xenia/src/xenia/app/CMakeLists.txt:213-219,\n     emulator-core/src/main/cpp/xenia/src/xenia/ui/CMakeLists.txt:66-84,\n     emulator-core/src/main/cpp/xenia/tools/build/embed_bundle.py:55-57,\n     app/src/main/java/xendroid/compose/ui/profile/ProfileManagerViewModel.kt:173-181,\n     emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/profile_standalone.cc:140-141\n",
        "files": [
          {
            "config_key": "Vulkan|vulkan_lib_path",
            "description": "Replacement Vulkan driver package",
            "name": "<driver>.zip",
            "note": "Imported through a picker restricted to application/zip. The archive is read whole, meta.json names the library to keep, and a single .so is taken instead when no meta.json is present; the .so files and meta.json are unpacked into a directory named after the archive, in internal storage. The configured path is read before the instance is created and opened through adrenotools when the file exists, otherwise the system libvulkan.so is used. The row is hidden on devices without /dev/kgsl-3d0.",
            "required": false,
            "source_ref": "app/src/main/java/xendroid/compose/ui/settings/SettingRows.kt:175-200, app/src/main/java/xendroid/compose/settings/SettingsRepository.kt:34-35, 140, emulator-core/src/main/java/xendroid/compose/Utils.java:164-236, emulator-core/src/main/java/xendroid/compose/Application.java:21-24, emulator-core/src/main/cpp/xenia/src/xenia/ui/vulkan/vulkan_instance.cc:49, 168-192, 203",
            "unsourceable": "third-party Vulkan driver built for one GPU family, not an emulator artefact"
          },
          {
            "config_key": "UI|custom_font_path",
            "description": "Replacement face for the overlay text",
            "name": "<font>.ttf",
            "note": "Loaded when the configured path exists, over the glyph ranges the atlas is built with. A path that does not resolve, or a face that fails to build, leaves the embedded Inter face in place, so the absence is covered.",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/ui/imgui_drawer.cc:39-44, 353-366, 367-376",
            "unsourceable": "any TrueType face the user points the setting at, with no name or version the code expects"
          },
          {
            "config_key": "UI|achievement_sound_path",
            "description": "Sound played when an achievement unlocks",
            "name": "<sound>.wav",
            "note": "Read through miniaudio, which accepts WAV, MP3, OGG and FLAC. The engine is built the first time an achievement fires, and an empty or missing path leaves the notification silent. Config written under the older key General|notification_sound_path is carried to this cvar when the file is read, and that is the key the shipped template still carries.",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/ui/audio_helper.cc:21-24, 38-80, 97-101, emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/achievement_manager.cc:163-166, emulator-core/src/main/cpp/xenia/src/xenia/config.cc:174-190, emulator-core/src/main/cpp/xenia/src/xenia/ui/config_helpers.h:47",
            "unsourceable": "any sound file the user points the setting at, with no name or version the code expects"
          },
          {
            "bundled": true,
            "config_key": "General|apply_patches",
            "description": "Memory patch set for one title",
            "name": "<title_id> - <title>.patch.toml",
            "note": "Read from the patches directory under the storage root, keeping names that open with eight hexadecimal digits and close with .patch.toml. The title id and title name fields and a hash node are mandatory, the file is dropped without them, and each entry of the patch array is applied only when its is_enabled flag is set and the module hash matches. Patching is on by default.",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/patcher/patch_db.h:124-125, emulator-core/src/main/cpp/xenia/src/xenia/patcher/patch_db.cc:34-60, 63-105, emulator-core/src/main/cpp/xenia/src/xenia/patcher/patcher.cc:22-37, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:415"
          },
          {
            "config_key": "General|allow_plugins",
            "description": "Plugin manifest for one title",
            "name": "plugins.toml",
            "note": "Read from plugins/<TITLE_ID>/ under the storage root, where the directory name is eight hexadecimal digits. Each entry of the plugin array needs a hash node, and an entry without one is skipped. Plugin loading is off by default, so nothing under plugins is scanned until it is turned on.",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:16-21, 27-37, 40-56, 58-125, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:431-432",
            "unsourceable": "per-title manifest written by whoever authors the mod, with no distributed form"
          },
          {
            "description": "Plugin module named by a plugin manifest",
            "name": "<plugin>.xex",
            "note": "The title directory is mounted as the plugins device and each enabled entry whose hash matches the running module is loaded as a user module on its own thread.",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/patcher/plugin_loader.cc:175-233, 235-252, emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:2625-2630",
            "unsourceable": "homebrew module built for one title, distributed with the mod it belongs to"
          },
          {
            "description": "Encrypted profile account blob",
            "load_from": "content_dir",
            "name": "Account",
            "note": "A 0x10 hash, an 8 byte confounder and an encrypted X_XAMACCOUNTINFO. Read from the profile directory when the content tree is enumerated and from the mounted profile when a XUID is logged in, decrypted with the retail key first and the devkit key second, against the HMAC the first sixteen bytes carry. The frontend creates one for the gamertag XenDroid on first run when the tree holds none, and writes its XUID to the slot 0 setting.",
            "path": "content/<XUID>/FFFE07D1/00010000/<XUID>/Account",
            "required": false,
            "source_ref": "emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/profile_standalone.cc:24-52, 72-99, 129-141, emulator-core/src/main/cpp/xenia/src/xenia/kernel/xam/profile_manager.cc:256-296, app/src/main/java/xendroid/compose/core/ProfileBootstrap.kt:13-28, app/src/main/java/xendroid/compose/core/ProfilePaths.kt:6-13",
            "unsourceable": "per-user blob the emulator encrypts with the console key on first run"
          }
        ],
        "mode": "standalone",
        "notes": "Xbox 360 emulator for Android, package xendroid.compose, arm64-v8a only.\nXenia Edge is vendored whole under emulator-core/src/main/cpp/xenia and a\nKotlin and Compose frontend replaces the desktop front end: its own windowed\napp, AAudio and OpenSLES audio systems, an Android input driver, and Android\nproviders for the guest keyboard, the message box and disc swap. The library\nrecognises ISO, ZAR, GOD, extracted XEX folders and STFS containers, and the\nboot path reads the file signature before mounting.\nref: emulator-core/src/main/cpp/CMakeLists.txt:30-56, 112-152,\n     emulator-core/src/main/cpp/xendroid_emu.cpp:333-346, 671-676,\n     app/src/main/java/xendroid/compose/data/GameFormat.kt:6, 26-32\n\nReleases are tagged XenDroid-<short commit> and the version name is the git\nhash handed to the build, so b70d643 is both the head of main and the current\nrelease. version.h names canary_experimental dc561e4df, carried over from the\nax360e tree the project started as, and it does not describe the vendored\ncode. The Edge revision is named by the periodic merge pull request instead,\nand Edge rebases its branch, so that commit is no longer reachable there.\nref: app/build.gradle:34, emulator-core/src/main/cpp/version.h:4-5,\n     .github/workflows/XenDroid.yml:185-187\n\nNo Xbox 360 system file is read. xboxkrnl, xam and xbdm are HLE modules\nregistered at startup, the XEX1 retail, XEX2 retail and XEX2 devkit keys are\nconstant arrays tried in turn when an image is read, and every XConfig setting\nis answered from cvars and constants rather than from a flash image. When the\nlaunched title is itself a system title the kernel resolves xam.xex, then\n$flash_xam.xex, through the guest filesystem under the \\SystemRoot symlink\npointing at that title's own directory.\nref: emulator-core/src/main/cpp/xenia/src/xenia/emulator.cc:421-428, 757-772,\n     emulator-core/src/main/cpp/xenia/src/xenia/cpu/xex_module.cc:55-63, 925-935,\n     emulator-core/src/main/cpp/xenia/src/xenia/kernel/xconfig.cc:89-159\n\nThe storage root is the compose external files directory of the package and is\npassed as a launch argument beside the config path and the log path. content,\ncache, cache0, cache1, patches and plugins hang off it, the global\nconfiguration is xenia-canary.config.toml and per title overrides live in\nconfig/<TITLE_ID>.config.toml. The custom driver directory sits in internal\nstorage instead, because the external filesystem cannot carry an executable\nmapping.\nref: emulator-core/src/main/java/xendroid/compose/Application.java:14-33, 84-88,\n     app/src/main/java/xendroid/compose/EmulatorHostActivity.kt:231-236,\n     emulator-core/src/main/cpp/xendroid_emu.cpp:312-317, 355-381\n\n479 game patches ship inside the APK, synced at build time from the\nxenia-canary game-patches submodule pinned at 3553a5ae. The patch database\nreads the patches directory only, so a bundled patch reaches the emulator once\nthe user toggles it, which writes the asset out under the same name.\nref: app/build.gradle:12-19,\n     app/src/main/java/xendroid/compose/patches/PatchAssets.kt:17-23,\n     app/src/main/java/xendroid/compose/patches/PatchStore.kt:23-33,\n     emulator-core/src/main/cpp/xenia/src/xenia/patcher/patch_db.cc:34-60\n\nES-DE finds the emulator by the xendroid.compose/.EmulatorHostActivity package\nrule and hands the game over as the intent data URI.\nref: app/src/main/AndroidManifest.xml:54-73, docs/frontend-integration.md\n",
        "profiled_date": "2026-08-12",
        "source": "https://github.com/rfandango/XenDroid",
        "source_commit": "b70d64374f8733645e8ea63f50430165b7dbd684",
        "systems": [
          "microsoft-xbox-360"
        ],
        "type": "standalone",
        "upstream": "https://github.com/has207/xenia-edge",
        "upstream_commit": "84cf209221160590768f615a0369a9c4a1456bbf"
      }
    },
    {
      "id": "xenia",
      "profile": {
        "analysis_commit": "3efc88a (depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "community_fork",
        "core_version": "canary",
        "cores": [
          "xenia",
          "xenia-canary"
        ],
        "display_name": "Xenia Canary (Xbox 360)",
        "emulator": "Xenia Canary",
        "exclusion_note": "Xenia is a pure high-level emulation (HLE) Xbox 360 emulator. The entire Xbox 360 operating system (kernel, XAM dashboard services, XBDM debug manager) is reimplemented in C++ as HLE modules loaded at startup (emulator.cc:316-318). System configuration (XConfig) returns hardcoded values from xboxkrnl_xconfig.cc. Memory, CPU (JIT), GPU, APU, and HID subsystems are all software-emulated. No external BIOS, firmware, NAND flash dump, or system files are loaded from disk. The wiki confirms: \"Xenia doesn't require any Xbox 360 system files.\"\n",
        "files": [],
        "mode": "standalone",
        "notes": "Xenia Canary is an experimental open-source Xbox 360 emulator (BSD license)\noriginally by Ben Vanik, now maintained by the xenia-canary community. Pure\nHLE: the Xbox 360 kernel (xboxkrnl), XAM, and XBDM modules are fully\nreimplemented in C++. XConfig system settings are hardcoded with user-\nconfigurable overrides (language, region, audio, video). No BIOS, firmware,\nNAND dump, flash dump, or keyvault file is loaded at any point.\n\nEmuDeck installs xenia_canary.exe into the xbox360 ROMs folder. Config via\nxenia-canary.config.toml. Game patches downloaded separately into patches/.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/xenia-canary/xenia-canary",
        "source_commit": "57c1af465ac9bd9b934fe49e7f6fb7b6db69b4e9",
        "systems": [
          "microsoft-xbox-360"
        ],
        "type": "standalone",
        "upstream": "https://github.com/xenia-canary/xenia-canary"
      }
    },
    {
      "id": "xenia-edge",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "edge",
        "cores": [
          "xenia-edge"
        ],
        "display_name": "Xenia Edge (Xbox 360)",
        "emulator": "Xenia Edge",
        "files": [
          {
            "description": "DirectX Shader Compiler 1.9.2602.24, DXIL compilation for the Direct3D 12 backend",
            "name": "dxcompiler.dll",
            "note": "Loaded by full path from the D3D12 folder next to the executable, then by plain name from the system search path. PipelineCache::Initialize returns false without it because guest and system shaders are all DXIL, and that failure propagates to \"Failed to setup graphics_system!\" (emulator.cc:430-435). Windows defaults to gpu = \"d3d12\" (src/xenia/app/xenia_main.cc:70) and the backend factory only falls back when D3D12GraphicsSystem::IsAvailable() is false, which tests the D3D12 API itself, not the redistributable. Taken from bin/x64/dxcompiler.dll in dxc_2026_05_27.zip of DirectXShaderCompiler release v1.9.2602.24, pinned at sha256 cf658aacf070d3045e31b8f1f8a696c2945f37c1095019481ef7c513368db3b4; bin/arm64 on ARM64 builds.",
            "path": "D3D12/dxcompiler.dll",
            "required": true,
            "source_ref": "src/xenia/ui/d3d12/d3d12_provider.cc:279-322, src/xenia/gpu/d3d12/pipeline_cache.cc:121-134, src/xenia/ui/redist_installer_wx.cc:79-85, 119-122, 594-629",
            "system": "microsoft-xbox-360"
          },
          {
            "description": "DXIL signing and validation library shipped with DirectX Shader Compiler 1.9.2602.24",
            "name": "dxil.dll",
            "note": "Preloaded by full path so dxcompiler's own plain-name load resolves to it and the DXIL leaves signed; spirv_to_dxil queries its validator version to stamp the container the validator will accept. Same archive and pin as dxcompiler.dll, from bin/x64 or bin/arm64.",
            "path": "D3D12/dxil.dll",
            "required": true,
            "source_ref": "src/xenia/ui/d3d12/d3d12_provider.cc:286-292, src/xenia/gpu/d3d12/spirv_to_dxil_compiler.cc:154-169, 194-200, src/xenia/ui/redist_installer_wx.cc:79-85, 119-122",
            "system": "microsoft-xbox-360"
          },
          {
            "description": "DirectX 12 Agility SDK 1.619.3 runtime",
            "name": "D3D12Core.dll",
            "note": "The binary exports D3D12SDKVersion 619 and D3D12SDKPath \".\\D3D12\\\", so d3d12.dll loads it at the first device creation. The provider checks for it, offers the download, and returns false when it is still absent. Taken from build/native/bin/x64/D3D12Core.dll in the Microsoft.Direct3D.D3D12 1.619.3 NuGet package, pinned at sha256 43a7d5a3973812eb4b42623fae5275c790a005b8e48b8d7f5bb43cef39e073c5; build/native/bin/arm64 on ARM64 builds. The package version has to match the exported number.",
            "path": "D3D12/D3D12Core.dll",
            "required": true,
            "source_ref": "src/xenia/ui/d3d12/d3d12_provider.cc:325-336, src/xenia/ui/windowed_app_main_win.cc:25-28, src/xenia/ui/redist_installer_wx.cc:87-93, 123-126, 631-676",
            "system": "microsoft-xbox-360"
          },
          {
            "description": "Direct3D 12 debug layer from Agility SDK 1.619.3",
            "name": "D3D12SDKLayers.dll",
            "note": "Reached only when d3d12_debug is set, which defaults false (src/xenia/ui/d3d12/d3d12_provider.cc:23). Fetching it re-extracts D3D12Core.dll alongside, since the debug layer only loads under the Agility runtime. Same NuGet package and pin as D3D12Core.dll.",
            "path": "D3D12/D3D12SDKLayers.dll",
            "required": false,
            "source_ref": "src/xenia/ui/d3d12/d3d12_provider.cc:357-385, src/xenia/ui/redist_installer_wx.cc:127-134, 678-723",
            "system": "microsoft-xbox-360"
          },
          {
            "description": "Khronos Vulkan loader 1.4.350.0 for the Vulkan backend on Windows",
            "name": "vulkan-1.dll",
            "note": "Read only when the Vulkan backend is selected, and the plain-name load that follows finds the copy GPU drivers install system-wide, so the folder next to the executable is a fallback. Taken from VulkanRT-X64-1.4.350.0-Components/x64/vulkan-1.dll in LunarG's vulkan-runtime-components.zip 1.4.350.0, pinned at sha256 23ce69f32cef3e2799617e2b1776cd0c71030d23a91f8375821cc40d76b185b9. The zip carries x64 and x86 only, so the ARM64 build never offers the download.",
            "path": "Vulkan/vulkan-1.dll",
            "required": false,
            "source_ref": "src/xenia/ui/vulkan/vulkan_instance.cc:84-99, src/xenia/ui/redist_installer_wx.cc:95-105, 138-142, 725-764",
            "system": "microsoft-xbox-360"
          },
          {
            "description": "Microsoft Visual C++ 2015-2022 redistributable installer",
            "name": "vc_redist.x64.exe",
            "note": "Not loaded by the emulator. The runtime version is read from HKLM\\SOFTWARE\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\x64, and when it is older than 14.<_MSC_VER - 1900> clamped to 14.44 the installer is downloaded to %TEMP%\\xenia_vc_redist.exe and run with \"/install /passive /norestart\", after which the process relaunches. What the binary actually links is vcruntime140 and msvcp140, resolved by the OS loader. vc_redist.arm64.exe on ARM64 builds.",
            "required": false,
            "source_ref": "src/xenia/app/xenia_main.cc:578-582, src/xenia/ui/redist_installer_wx.cc:144-172, 379-409, 766-875",
            "system": "microsoft-xbox-360",
            "validation": [
              "signature"
            ]
          }
        ],
        "mode": "standalone",
        "notes": "Xbox 360 emulator forked from Xenia Canary, with a wxWidgets front end, a\ngame library, and Direct3D 12, Vulkan and Metal backends. Releases are tagged\nby short commit on the edge branch and ship as xenia_edge_linux.AppImage,\nxenia_edge_macos.dmg and xenia_edge_windows.zip. ES-DE finds it through the\nXENIA-EDGE rule and runs `xenia_edge <rom>`; RetroDECK unpacks the AppImage\ninto a xenia-edge component and executes bin/xenia_edge.\n\nNo Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules\nregistered at startup (emulator.cc:388-397), the XEX2 retail and devkit AES\nkeys are constant arrays in the binary (xex_module.cc:58-63), and every\nXConfig setting is synthesised from cvars and constants by BuildSetting\nrather than read from a flash image (xconfig.cc:87-246, 259-272). When the\nlaunched title is itself a system title the kernel resolves xam.xex, then\n$flash_xam.xex, through the guest filesystem under the \\SystemRoot symlink\npointing at that title's own directory (emulator.cc:718-733); that is a\ncompanion module inside the dump the user launched, not a host-side lookup.\n\nThe fork's data ships inside the executable. assets/font/Inter-VariableFont\nand assets/icon are linked in by xe_embed_binary_assets and the 33\nassets/locale catalogues are compiled to .mo at configure time and bundled,\nwith no .mo written next to the binary (src/xenia/ui/CMakeLists.txt:48-76).\nThe UI font is read from that buffer with AddFontFromMemoryTTF\n(imgui_drawer.cc:367-377), and xe::EmbeddedBundle decodes the SDL controller\nmappings (sdl_input_driver.cc:148-165), the canary game patches\n(patch_db.cc:304-310), the game-compatibility master.json\n(game_compat_db.cc:47-58) and the x360db games.json (game_title_db.cc:50-60).\n\nThree cvars accept a file and name none by default, so nothing is expected at\na fixed path: custom_font_path falls back to the embedded Inter\n(imgui_drawer.cc:39-44, 353-386), mappings_file to the embedded controller DB\n(sdl_input_driver.cc:35-38, 148-152), achievement_sound_path leaves the\nachievement sound silent (audio_helper.cc:21-24, 38-52). For glyphs the\nembedded font lacks, the host font comes from the OS: tahoma.ttf and\nmsgothic.ttc out of the Windows fonts folder, or the fontconfig sans-serif and\nCJK matches on Linux (imgui_drawer.cc:388-470, 472-556).\n\nEverything under the storage root is written by the emulator or dropped in by\nthe user: xenia-edge.config.toml and per-game .config.toml (config.cc:43-46),\npatches/*.patch.toml read on top of the embedded set (emulator.cc:383,\npatch_db.cc:34-58), plugins/<title id>/plugins.toml behind allow_plugins,\nwhich defaults false (plugin_loader.cc:16-38, 58-72), content, cache0, cache1,\nscratch and mu (emulator.cc:1412-1471). portable.txt next to the executable\nkeeps the storage root there instead of the user folder\n(src/xenia/app/xenia_main.cc:556-570).\n\nOn Windows the Direct3D 12 and Vulkan runtimes are not in the release zip,\nwhich holds only the build output (.github/workflows/build.yml:416-426). The\nemulator looks for them in D3D12/ and Vulkan/ beside the executable and\noffers to download pinned archives from Microsoft and LunarG, gated by\nd3d12_install_missing_runtime, vulkan_install_missing_loader and\nupdate_vc_runtime, all default true (src/xenia/ui/redist_installer_wx.cc:51-70). Each\narchive is checked against a SHA-256 held in the source before its members\nare extracted, so the hash covers the archive and never the extracted DLL,\nwhich is why no hash is declared on the entries below. The Linux and macOS\nbuilds need none of them: MoltenVK is statically linked and the Vulkan loader\ncomes from the system (src/xenia/ui/vulkan/vulkan_instance.cc:66-72, 81-83).\n",
        "profiled_date": "2026-08-10",
        "source": "https://github.com/has207/xenia-edge",
        "source_commit": "2fe66280ac26502261414703bc7187b77dacc8d3",
        "systems": [
          "microsoft-xbox-360"
        ],
        "type": "standalone",
        "upstream": "https://github.com/has207/xenia-edge"
      }
    },
    {
      "id": "xenios",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "2.0.1",
        "cores": [
          "xenios",
          "XENIOS"
        ],
        "display_name": "Microsoft - Xbox 360 (XeniOS)",
        "emulator": "XeniOS",
        "exclusion_note": "XeniOS emulates the Xbox 360 by high-level emulation and reads no BIOS, firmware, NAND image, flash dump or keyvault at any point: the kernel, XAM and XBDM are compiled-in modules, the XEX AES keys are constant arrays and XConfig is synthesised. Its own data (UI font, icons, locale catalogues, SDL controller mappings, game patches, compatibility lists) is compressed into the executable through xe_embed_binary_assets and xe_embed_compressed_bundle, so none of it exists as a file beside the binary; the shipped bundle carries only the executable, its property list, an icon, a compiled asset catalog and the two shader translation dylibs. The three cvars that accept a path default to empty and fall back to those embedded copies. libmetalirconverter.dylib and libdxilconv.dylib are linked at build time and resolved by the loader through @rpath, no code path names them, and they are obtained by the same download that provides the executable.\n",
        "files": [],
        "mode": "standalone",
        "notes": "Apple-focused fork of Xenia, based on Xenia Edge, published from the xenios\nbranch as xenios_macos_apple_silicon.dmg, xenios_macos_intel.dmg,\nxenios_macos_universal.dmg and xenios_ios_iphone_ipad.ipa. The macOS build\nnames its bundle and executable Xenia-edge, the iOS build XeniOS\n(src/xenia/app/CMakeLists.txt:11-13, 175, 339-341). ES-DE runs it through the\nXENIOS rule with the ROM and an optional .commands file of extra arguments.\n\nThe 2.0.1 disk image holds one bundle: beside its code signature it carries\nInfo.plist, MacOS/Xenia-edge, Resources/AppIcon.icns, Resources/Assets.car\nand two dylibs under Contents/Frameworks. Rendering runs on Metal. Guest DXBC\nis converted to DXIL through libdxilconv.dylib, built from the fork's own\nDirectX Shader Compiler branch, then to Metal IR through Apple's Metal Shader\nConverter (libmetalirconverter.dylib). Both are imported shared libraries\ncopied into Frameworks and reached by @rpath\n(third_party/CMakeLists.txt:432-456, src/xenia/app/CMakeLists.txt:348-360),\nso the code calls IRCompilerCreate and DxcCreateInstance as ordinary symbols\nand never names either file\n(src/xenia/gpu/metal/metal_shader_converter.cc:83,\nsrc/xenia/gpu/metal/dxbc_to_dxil_converter.cc:103). MoltenVK is statically\nlinked and its entry points resolve as real symbols, so the Vulkan backend\nloads no loader library (src/xenia/ui/vulkan/vulkan_instance.cc:30-39,\n81-83).\n\nNo Xbox 360 system file is read. xboxkrnl, xam and xbdm are C++ HLE modules\nregistered at startup (src/xenia/emulator.cc:425-427), the XEX1 and XEX2\nretail keys and the zeroed devkit key are constexpr arrays tried in turn\n(src/xenia/cpu/xex_module.cc:55-63, used at 344, 503 and 925-935), and every\nXConfig setting is assembled from cvars and constants by BuildSetting, in a\nfile that makes no filesystem call at all\n(src/xenia/kernel/xconfig.cc:87-246). Launching a system title symlinks\n\\SystemRoot to that title's own mount and resolves xam.xex, then\n$flash_xam.xex, through the guest filesystem\n(src/xenia/emulator.cc:744-759); spa.bin is resolved the same way inside an\ninstalled DLC package (src/xenia/kernel/xam/content_manager.cc:31, 425-426).\n\nThe fork's data ships inside the executable. The UI font and the app icon are\nlinked in by xe_embed_binary_assets, and the 33 locale catalogues are\ncompiled from .po to .mo at configure time and packed into one compressed\nbundle (src/xenia/ui/CMakeLists.txt:55-58, 60-82), which wx_locale.cc serves\nthrough a loader that replaces the wxWidgets file-based one\n(src/xenia/ui/wx_locale.cc:43-111, 139-140). The font is read from that\nbuffer with AddFontFromMemoryTTF (src/xenia/ui/imgui_drawer.cc:367-377), and\nxe::EmbeddedBundle decodes the SDL controller mappings\n(src/xenia/hid/sdl/sdl_input_driver.cc:148-166), the canary game patches\n(src/xenia/patcher/patch_db.cc:304-318) and the canary.json and stable.json\ncompatibility lists (src/xenia/app/game_compat_db.cc:65-78).\n\nThree cvars accept a file and name none by default, so nothing is expected at\na fixed path: custom_font_path falls back to the embedded font\n(src/xenia/ui/imgui_drawer.cc:39-42, 353-377), mappings_file to the embedded\ncontroller database (src/xenia/hid/sdl/sdl_input_driver.cc:35-38, 148-166),\nachievement_sound_path leaves the achievement sound silent\n(src/xenia/ui/audio_helper.cc:21-24, 44-53). The first two carry an\nUPDATE_from_path rule that clears the earlier default out of an existing\nconfig (src/xenia/ui/imgui_drawer.cc:43-44,\nsrc/xenia/hid/sdl/sdl_input_driver.cc:39).\n\nEverything under the storage root is written by the emulator or dropped in by\nthe user: xenia-edge.config.toml and per-title config/<title id>.config.toml\n(src/xenia/config.cc:44-52), patches/*.patch.toml read on top of the embedded\nset (src/xenia/patcher/patch_db.cc:29-59), plugins/<title id>/plugins.toml\nbehind allow_plugins, which defaults false\n(src/xenia/patcher/plugin_loader.cc:16-21, 32-34, 58-62), content, cache_host\nand the per-module executable_addr_flags.bin analysis cache\n(src/xenia/app/xenia_main.cc:588-613, src/xenia/cpu/xex_module.cc:1336-1343).\nportable.txt next to the executable keeps the storage root there instead of\nthe user folder (src/xenia/app/xenia_main.cc:556-570). On iOS the embedded\npatches are written out to Documents/patches on first run\n(src/xenia/app/xenia_main_ios.mm:226-253) and touch layouts live as\nDocuments/touch-layouts/<id>.toml, written by the layout editor\n(src/xenia/ui/ios/touch/touch_layout_store_ios.mm:133-140). The only bundle\nfile the code opens by name is embedded.mobileprovision, absent from the\npublished .ipa and present only once the user has signed it, read for a\nsingle log line reporting its size and two entitlements\n(src/xenia/app/xenia_main_ios.mm:170-193).\n",
        "profiled_date": "2026-08-23",
        "source": "https://github.com/xenios-jp/XeniOS",
        "source_commit": "87b176a078c316fde3adf67a217f0c44615b0e0d",
        "systems": [
          "microsoft-xbox-360"
        ],
        "type": "standalone",
        "upstream": "https://github.com/has207/xenia-edge",
        "upstream_commit": "07021f019cf55105bc26c0474e0b0835808353e2"
      }
    },
    {
      "id": "xm6pro68k",
      "profile": {
        "based_on": "XM6 v2.06 by PI.",
        "core_classification": "enhanced_fork",
        "core_version": "260726",
        "cores": [
          "xm6pro68k",
          "xm6pro",
          "XM6PRO68K",
          "XM6PRO68K-WINDOWS"
        ],
        "display_name": "XM6 Pro-68k (Sharp X68000)",
        "emulator": "xm6pro68k",
        "files": [
          {
            "description": "X68000 boot ROM, base SASI model",
            "has_builtin": true,
            "md5": "7fd4caabac1d9169e289f0f7bbf71d8e",
            "min_size": 131072,
            "name": "IPLROM.DAT",
            "note": "XM6.exe carries this ROM internally and only reads the file when it is present, so the emulator boots without it. The embedded copy sits at file offset 1337256 in .rdata of the Unicode build and 1288176 in the MBCS build, stored in the 16-bit pairwise swapped form the loader produces at vm/memory.cpp:278-285; unswapped it is the 131072-byte dump hashed here, catalogued by TOSEC as Sharp X68000 Boot ROM (1987)(Sharp), and it is the version 1.0 (05/07/1987) the startup warning recommends. README.txt:23-25 advises against installing the file at all because reading and swapping it only lengthens startup.",
            "required": false,
            "sha1": "0ed038ed2133b9f78c6e37256807424e0d927560",
            "source_ref": "Change Log.txt:125-126, README.txt:23-25, XM6 2.06 vm/memory.cpp:256-276",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 XVI boot ROM",
            "min_size": 131072,
            "name": "IPLROMXV.DAT",
            "note": "Probed after the base machine loads. Its presence, together with SCSIINROM.DAT, is what makes the XVI machine available; absent, the base X68000 still runs. No internal copy is compiled into XM6.exe.",
            "required": false,
            "source_ref": "XM6 2.06 vm/memory.cpp:178-180, 261-263",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 Compact boot ROM",
            "min_size": 131072,
            "name": "IPLROMCO.DAT",
            "note": "Probed after XVI. Selects the Compact machine when found, and that machine also needs SCSIINROM.DAT. No internal copy is compiled into XM6.exe.",
            "required": false,
            "source_ref": "XM6 2.06 vm/memory.cpp:181-185, 264-266",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68030 boot ROM",
            "min_size": 131072,
            "name": "IPLROM30.DAT",
            "note": "Probed last. Selects the X68030 machine, which also needs ROM30.DAT. No internal copy is compiled into XM6.exe.",
            "required": false,
            "source_ref": "XM6 2.06 vm/memory.cpp:186-190, 267-269",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68030 SCSI ROM",
            "min_size": 131072,
            "name": "ROM30.DAT",
            "note": "The SCSI half of the X68030 machine, and the only SCSI ROM read at 0x20000 bytes rather than 0x2000. Without it LoadROM(X68030) fails and the X68030 machine is not offered. README.txt:25 calls it non-critical and notes that installing it can cost performance.",
            "required": false,
            "source_ref": "README.txt:25, XM6 2.06 vm/memory.cpp:316-319, 334-337",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "X68000 character generator ROM",
            "md5": "cb0a5cfcf7247a7eab74bb2716260269",
            "min_size": 786432,
            "name": "CGROM.DAT",
            "note": "Supplies the glyphs for text the X68000 renders. Stock XM6 v2.06 fails initialisation when neither font file loads; XM6 Pro-68k dropped that requirement, so a missing font ROM shows garbage glyphs and the emulator keeps running, and what remains is the suppressible contents warning. The mandatory DLL Package ships this exact 786432-byte file, catalogued by TOSEC as Sharp X68000 CG ROM (1987)(Sharp); the hash identifies that copy and is not verified by the program.",
            "required": false,
            "sha1": "8d72c5b4d63bb14c5dbdac495244d659aa1498b6",
            "source_ref": "README.txt:277-278, Change Log.txt:129, XM6 2.06 vm/memory.cpp:287-295",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Synthesised font ROM, fallback when CGROM.DAT is absent",
            "min_size": 786432,
            "name": "CGROM.TMP",
            "note": "Read only when CGROM.DAT is missing, at the same size. Tools > Synthesize replacement CG-ROM writes it from the installed MS Gothic and MS Mincho fonts and fails when either is absent. No hash is declared because the output depends on the fonts of the machine that generated it. XM6 refuses to use it while CGROM.DAT is present.",
            "required": false,
            "source_ref": "README.txt:292-296, XM6 2.06 vm/memory.cpp:290-294",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "Internal SCSI interface ROM, X68000 SUPER and later",
            "md5": "aeb4607a14612606c833227437aaa16a",
            "min_size": 8192,
            "name": "SCSIINROM.DAT",
            "note": "Needed to use internal SCSI drives, and also loaded as part of the XVI and Compact machines, so those two models are unavailable without it whatever their IPL. The mandatory DLL Package ships this exact 8192-byte file and the hash identifies that copy; the startup contents check only warns.",
            "required": false,
            "sha1": "15a17798839a3f7f361119205aebc301c2df5967",
            "source_ref": "Reference Manual.txt:1529-1536, XM6 2.06 vm/memory.cpp:309-315",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "description": "External SCSI interface ROM, CZ-6BS1 board",
            "md5": "237be014374b74d327f15f250d4d62bf",
            "min_size": 8160,
            "name": "SCSIEXROM.DAT",
            "note": "Needed to use the external SCSI interface, which is the only SCSI variant that can coexist with SASI. The loader first reads 0x2000 bytes and, on failure, retries with the 0x1fe0-byte WinX68k layout loaded at buffer offset 0x20, so 8160 is the real floor. The mandatory DLL Package ships the 8192-byte form hashed here.",
            "required": false,
            "sha1": "49616c09a8986ffe6a12ad600febe512f7ba8ae4",
            "source_ref": "Reference Manual.txt:1529-1536, XM6 2.06 vm/memory.cpp:320-324, 346-357",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 SRAM image, boot device and memory switch settings",
            "name": "SRAM.DAT",
            "note": "Read at startup and rewritten on exit when the contents changed, so XM6 creates it on first run and a supplied image only preloads the settings. The Tools > SRAM menu reloads, duplicates and write-protects it, and the boot counter option updates it on exit. Size is the X68000 SRAM size and is not checked by the program.",
            "required": false,
            "size": 16384,
            "source_ref": "Reference Manual.txt:1366-1368, 2648-2651, XM6 2.06 vm/filepath.cpp:404",
            "system": "sharp-x68000"
          },
          {
            "bundled": true,
            "description": "7-Zip library for .7z, .zip and .xz support",
            "name": "7z.dll",
            "note": "Absent from the import directory and looked up by name at runtime, so XM6 starts without it and reports Optional DLL Not Present, Archive support is not available. Enables loading disk images and state files from archives and writing XZ-compressed state files.",
            "required": false,
            "source_ref": "README.txt:166-170, XM6.exe strings 7z.dll, Optional DLL Not Present",
            "system": "sharp-x68000"
          },
          {
            "bundled": true,
            "description": "zlib, used for PNG output and deflate archives",
            "name": "zlib1.dll",
            "note": "Looked up by name at runtime alongside 7z.dll and named in the same Optional DLL Not Present dialog. README.txt:322-323 credits the PNG Reference Library and zlib for the screenshot support.",
            "required": false,
            "source_ref": "README.txt:322-323, XM6.exe strings 7z.dll or zlib1.dll",
            "system": "sharp-x68000"
          }
        ],
        "mode": "standalone",
        "notes": "Closed-source Windows fork of PI's XM6 v2.06 (README.txt:6) by M.I.J.E.T.,\ndistributed only from mijet.eludevisibility.org as three 7-Zip packages: the\nprogram, a mandatory DLL Package and an optional Web Package that adds signed\nupdate downloads. Version.txt in the build analysed here reads 260726. The first\nrelease, 120303, forked XM6 v2.05. XM6.exe is a 32-bit MFC application whose\nimport directory names mfc90u.dll and MSVCR90.dll, so the Visual C++ 2008 runtime\ncarried by the DLL Package, or the redistributable, must sit beside the executable\nfor the process to start; a second non-Unicode build lives in MBCS/ and needs the\nsame files duplicated there. ES-DE launches it through the XM6PRO68K and\nXM6PRO68K-WINDOWS find rules with the working directory set to the emulator\nfolder, on Linux under Wine or Proton. RetroBat registers it as xm6pro\n(Program.cs:189, Installer.cs:151), runs XM6.exe from its own directory and\nrewrites XM6.ini before launch (Xm6pro.Generator.cs:22-79).\n\nSystem files are resolved beside XM6.exe. XM6 v2.06 declares them in\nFilepath::SystemFile[] (vm/filepath.cpp:394-405) and Filepath::SysFile\n(vm/filepath.cpp:121-137) builds each path from SystemDir when one is set and from\nthe executable's own directory otherwise. XM6 Pro-68k references all ten names,\nnine of them in one contiguous string block mirroring that table in reverse, and\nexposes no ROM directory setting, while README.txt:71-73 requires the DLL Package\nfiles to be extracted next to the executable rather than into a subdirectory.\nLoading goes through Fileio::Load and\nFileio::Read (vm/fileio.cpp:35-51, 175-192), which succeed only when the file\nholds at least the requested byte count, so every size below is a floor: a longer\nfile loads and its tail is ignored. The XM6 v2.06 sources cited throughout are\nreadable in mixerjdp/XM6_Libretro, which preserves the vm/ layer.\n\nMachine selection follows ROM presence. Memory::Init (vm/memory.cpp:171-196)\nloads the base SASI machine, then probes XVI, Compact and X68030 in that order and\nkeeps the first that succeeds. Memory::LoadROM (vm/memory.cpp:236-372) pairs each\nmachine with its ROMs: XVI and Compact need their IPL plus SCSIINROM.DAT, X68030\nneeds IPLROM30.DAT plus ROM30.DAT read at 0x20000 bytes instead of 0x2000, and the\nbase machine needs no SCSI ROM. Internal SCSI is the interface built into the\nX68000 SUPER and later models, external SCSI is the CZ-6BS1 add-on board\n(Reference Manual.txt:1529-1536).\n\nTwo files diverge from XM6 v2.06. The base IPL ROM is compiled into the\nexecutable: \"The program now includes an internal copy of the basic IPL ROM. It\nwill still try to load IPL ROMs externally first\" (Change Log.txt:125-126), and\nREADME.txt:23-25 tells users to leave IPLROM.DAT out because loading it only costs\nstartup time. The hard CG ROM requirement was dropped (Change Log.txt:129), so a\nmissing font ROM yields garbage glyphs instead of failing initialisation\n(README.txt:277-278).\n\nTwo menu tools synthesise replacements. Synthesize replacement CG-ROM builds\nCGROM.TMP from the installed MS Gothic and MS Mincho fonts and aborts when either\nis absent; README.txt:294-296 warns that different machines produce different\nfiles. Synthesize replacement SCSI ROMs asks for a Human68k version 3.02 disk\nimage, dialog default HUMAN302.XDF with filter *HUMAN*3*02*.???, extracts\n/BIN/FORMAT.X and writes SCSIINROM.DAT and SCSIEXROM.DAT.\n\nThe ROM Warning section of the Advanced options holds three startup checks, all\nenabled by default and individually suppressible: an IPLROM.DAT version check\nnaming version 1.0 (05/07/1987) as recommended, a CGROM.DAT contents check and a\nSCSIEXROM.DAT / SCSIINROM.DAT contents check. Each raises a dialog; none rejects\nthe file, so no hash below is enforced by the program.\n\nReference Manual.txt ships with the program and Software Notes.txt is fetched by\nthe Web Package through Scripts\\Update Notes.bat. Both are prose documents that\nthe Help menu and Help > Peruse Notes hand to a text editor, not data XM6 parses.\nXM6.ini and XM6U.ini are written by the program.\n",
        "profiled_date": "2026-08-10",
        "source": "https://mijet.eludevisibility.org/XM6%20Pro-68k/XM6%20Pro-68k.html",
        "systems": [
          "sharp-x68000"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "xm6typeg",
      "profile": {
        "based_on": "XM6 v2.06 by PI.",
        "core_classification": "enhanced_fork",
        "core_version": "3.38",
        "cores": [
          "xm6typeg",
          "XM6TYPEG",
          "XM6TYPEG-WINDOWS"
        ],
        "display_name": "XM6 TypeG (Sharp X68000)",
        "emulator": "xm6typeg",
        "files": [
          {
            "description": "X68000 boot ROM version 1.0, base models",
            "name": "IPLROM.DAT",
            "note": "Covers the first model, ACE, EXPERT, PRO and SUPER. LoadROM reads 0x20000 bytes and fails when fewer are returned, and the failure aborts initialisation. The startup warning naming version 1.00 (05/07/1987) as recommended only advises; it does not reject the file. The recommended source is the free X68BIOSE.LZH package (xm6g.pdf p.6).",
            "required": true,
            "size": 131072,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x1404fc9a5 (read at 0x1404fcbb7), xm6g.exe:0x14042920a, XM6 2.06 vm/memory.cpp:249-270",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 XVI boot ROM version 1.1",
            "name": "IPLROMXV.DAT",
            "note": "Selects the XVI machine, which also needs SCSIINROM.DAT. The options page offers the machine only when this file is exactly 131072 bytes.",
            "required": false,
            "size": 131072,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x14042927c, XM6 2.06 vm/memory.cpp:256-258",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 Compact boot ROM version 1.2",
            "name": "IPLROMCO.DAT",
            "note": "Selects the Compact machine, which also needs SCSIINROM.DAT. Same exact size test as the other IPL ROMs.",
            "required": false,
            "size": 131072,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x14042946b, XM6 2.06 vm/memory.cpp:259-261",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68030 boot ROM version 1.3, $FE0000-$FFFFFF half",
            "name": "IPLROM30.DAT",
            "note": "Upper half of the X68030 and X68030 Compact boot ROM, paired with ROM30.DAT. It carries the SCSI ROM for those machines, so neither SCSIINROM.DAT nor SCSIEXROM.DAT applies to them.",
            "required": false,
            "size": 131072,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x14042965a, XM6 2.06 vm/memory.cpp:262-264",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68030 boot ROM version 1.3, $FC0000-$FDFFFF half",
            "min_size": 131072,
            "name": "ROM30.DAT",
            "note": "Lower half of the X68030 boot ROM, loaded through the SCSI ROM slot and the only one of those read at 0x20000 bytes rather than 0x2000. Without it the X68030 machine does not load.",
            "required": false,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x1404fd1f8, XM6 2.06 vm/memory.cpp:311-313, 328-335",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Expansion boot ROM, $FE0000-$FEFFFF",
            "min_size": 131072,
            "name": "IPLROM30S.DAT",
            "note": "Read in place of IPLROM30.DAT when Expansion ROM is checked on the X68030 options tab, the setting stored as EXTROM. Paired with ROM30S.DAT and intended for ROMs patched for 060turbo.",
            "required": false,
            "source_ref": "xm6g.pdf p.16-17, xm6g.exe:0x140592350 index 4",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Expansion boot ROM, lower half",
            "min_size": 131072,
            "name": "ROM30S.DAT",
            "note": "The other half of the expansion pair, loaded through the same SCSI ROM slot as ROM30.DAT and read at the same size.",
            "required": false,
            "source_ref": "xm6g.pdf p.16, xm6g.exe:0x1404fd201",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 character generator ROM",
            "min_size": 786432,
            "name": "CGROM.DAT",
            "note": "Supplies the glyphs the X68000 renders, mapped at $F00000-$FBFFFF. Used by the base models and as the fallback for every machine whose own CG ROM is absent. Initialisation fails when neither this file nor CGROM.TMP loads.",
            "required": true,
            "source_ref": "xm6g.pdf p.17-18, xm6g.exe:0x1404fcf11 (read at 0x1404fd013), XM6 2.06 vm/memory.cpp:283-289",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 XVI character generator ROM",
            "min_size": 786432,
            "name": "CGROMXV.DAT",
            "note": "Preferred when the XVI machine is selected. CGROM.DAT is used when it is missing.",
            "required": false,
            "source_ref": "xm6g.pdf p.17-18, xm6g.exe:0x1404fcd99",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68000 Compact character generator ROM",
            "min_size": 786432,
            "name": "CGROMCO.DAT",
            "note": "Preferred when the Compact machine is selected, with the same fallback to CGROM.DAT.",
            "required": false,
            "source_ref": "xm6g.pdf p.17-18, xm6g.exe:0x1404fcdac",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "X68030 character generator ROM",
            "min_size": 786432,
            "name": "CGROM30.DAT",
            "note": "Preferred when X68030 or X68030 Compact is selected, with the same fallback to CGROM.DAT.",
            "required": false,
            "source_ref": "xm6g.pdf p.17-18, xm6g.exe:0x1404fcc36 (read at 0x1404fcd42)",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Synthesised font ROM, fallback when no CG ROM is present",
            "min_size": 786432,
            "name": "CGROM.TMP",
            "note": "Read at the same size, only after CGROM.DAT fails. XM6 Utility builds it from the fonts installed on the machine that generated it, so no hash is declared. XM6 TypeG treats it as non-recommended and raises a suppressible startup warning whenever it is in use.",
            "required": false,
            "source_ref": "xm6g.pdf p.18, p.6, xm6g.exe:0x1404fd041, XM6 2.06 vm/memory.cpp:286-289",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "Internal SCSI interface ROM, SUPER and later",
            "min_size": 8192,
            "name": "SCSIINROM.DAT",
            "note": "Required by SUPER, XVI and Compact, and by any machine whose SCSI interface option is set to internal, that option defaulting to none. The loader tries 0x20000 bytes first and falls back to 0x2000. A copy carrying \"XM6 \" at offset 0x1ff8 was synthesised by XM6 Utility and raises the startup warning.",
            "required": false,
            "size_options": [
              8192,
              131072
            ],
            "source_ref": "xm6g.pdf p.17, xm6g.exe:0x1404fd1ef (reads at 0x1404fd327, 0x1404fd3dd), XM6 2.06 vm/memory.cpp:305-310, 328-345",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "External SCSI interface ROM, CZ-6BS1 board",
            "min_size": 8160,
            "name": "SCSIEXROM.DAT",
            "note": "Drives the CZ-6BS1 board, the only SCSI variant the first model, ACE, EXPERT and PRO can take, and mutually exclusive with the internal interface everywhere else. After 0x20000 and 0x2000 the loader retries at 0x1fe0 bytes into buffer offset 0x20, the WinX68k high-speed layout, so 8160 is the real floor.",
            "required": false,
            "size_options": [
              8160,
              8192,
              131072
            ],
            "source_ref": "xm6g.pdf p.17, xm6g.exe:0x1404fd20a (retry at 0x1404fd419), XM6 2.06 vm/memory.cpp:316-318, 341-352",
            "system": "sharp-x68000",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SRAM image for EXPERT and the other base models",
            "name": "SRAM.DAT",
            "note": "Holds the boot device and memory switch settings for the first model, ACE, EXPERT, PRO and SUPER. A supplied image preloads those settings. The standard capacity is the 16 KB X68000 SRAM; the SRAM64K modification the emulator reproduces raises it to 64 KB. No size is enforced.",
            "required": false,
            "size_options": [
              16384,
              65536
            ],
            "source_ref": "xm6g.pdf p.18, xm6g.exe:0x140592350 index 14, XM6 2.06 vm/sram.cpp:70-81, 112",
            "system": "sharp-x68000"
          },
          {
            "description": "SRAM image for XVI",
            "name": "SRAMXVI.DAT",
            "note": "Per-model SRAM introduced by XM6 TypeG, which keeps one image per machine instead of the single SRAM.DAT of XM6 v2.06.",
            "required": false,
            "size_options": [
              16384,
              65536
            ],
            "source_ref": "xm6g.pdf p.18, xm6g.exe:0x140592350 index 15",
            "system": "sharp-x68000"
          },
          {
            "description": "SRAM image for Compact",
            "name": "SRAMCMP.DAT",
            "note": "Read when the Compact machine is selected.",
            "required": false,
            "size_options": [
              16384,
              65536
            ],
            "source_ref": "xm6g.pdf p.18, xm6g.exe:0x140592350 index 16",
            "system": "sharp-x68000"
          },
          {
            "description": "SRAM image for X68030, 040turbo and 060turbo",
            "name": "SRAM030.DAT",
            "note": "Shared by X68030, X68030 Compact and the 040turbo and 060turbo configurations.",
            "required": false,
            "size_options": [
              16384,
              65536
            ],
            "source_ref": "xm6g.pdf p.18, xm6g.exe:0x140592350 index 17",
            "system": "sharp-x68000"
          },
          {
            "description": "RTC alarm settings for timer start",
            "name": "RTC.DAT",
            "note": "Alarm registers of the battery-backed clock, used by the timer start feature and applying to every machine. XM6 TypeG creates it on exit when it is absent.",
            "required": false,
            "source_ref": "xm6g.pdf p.18, xm6g.exe:0x140592350 index 18",
            "system": "sharp-x68000"
          },
          {
            "description": "YM2608 ADPCM-A rhythm ROM, ymfm engine",
            "name": "ym2608_adpcm_rom.bin",
            "note": "Rhythm source for the Mercury Unit OPN when the FM engine is set to ymfm. The name is appended to a directory and the file is read whole; when it is absent the rhythm section stays silent and the emulator runs.",
            "required": false,
            "source_ref": "xm6g.exe:0x140574eb0 (name at 0x140574fec, read at 0x140575095)",
            "system": "sharp-x68000"
          },
          {
            "description": "Mercury Unit rhythm sample, bass drum",
            "name": "2608_BD.WAV",
            "note": "One of the six rhythm samples the fmgen and X68Sound engines read for the Mercury Unit OPN. The name is built as 2608_ plus the table entry plus .WAV. A missing file is handled through ERROR_FILE_NOT_FOUND and leaves that instrument silent.",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090, CreateFileW at 0x1404ed8bf",
            "system": "sharp-x68000"
          },
          {
            "description": "Mercury Unit rhythm sample, snare drum",
            "name": "2608_SD.WAV",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090",
            "system": "sharp-x68000"
          },
          {
            "description": "Mercury Unit rhythm sample, top cymbal",
            "name": "2608_TOP.WAV",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090",
            "system": "sharp-x68000"
          },
          {
            "description": "Mercury Unit rhythm sample, hi-hat",
            "name": "2608_HH.WAV",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090",
            "system": "sharp-x68000"
          },
          {
            "description": "Mercury Unit rhythm sample, tom-tom",
            "name": "2608_TOM.WAV",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090",
            "system": "sharp-x68000"
          },
          {
            "aliases": [
              "2608_RYM.WAV"
            ],
            "description": "Mercury Unit rhythm sample, rim shot",
            "name": "2608_RIM.WAV",
            "note": "Last of the six. This entry alone has a second accepted name, 2608_RYM.WAV, the spelling carried by widely circulated sample sets.",
            "required": false,
            "source_ref": "xm6g.exe:0x1404ed610, name table 0x1405c0090, 0x1404ed808-0x1404ed841",
            "system": "sharp-x68000"
          },
          {
            "description": "FM synthesis engine by m_puusan",
            "name": "X68Sound.dll",
            "note": "One of the three FM engines the sound options offer, alongside the built-in fmgen and ymfm. Not shipped in the archive; without it that engine cannot be selected.",
            "required": false,
            "source_ref": "xm6g.pdf p.29, p.31, xm6g.exe:LoadLibraryW at 0x140488dfb",
            "system": "sharp-x68000"
          },
          {
            "description": "Control library for external OPM hardware",
            "name": "c86ctl.dll",
            "note": "Loaded by name to drive a real YM2151 through a C86BOX class device instead of software synthesis. The executable reads its file version before use.",
            "required": false,
            "source_ref": "xm6g.exe:0x1404b2da6, version query at 0x1404b2daa",
            "system": "sharp-x68000"
          },
          {
            "description": "PCI access library used by the debug interface",
            "name": "pcidebug.dll",
            "note": "Loaded on demand and freed again. Absent, the feature that needs it is unavailable and the emulator continues.",
            "required": false,
            "source_ref": "xm6g.exe:LoadLibraryW at 0x1404fa344, FreeLibrary at 0x1404fa2f5",
            "system": "sharp-x68000"
          },
          {
            "description": "Roland Sound Canvas VA plugin used as MIDI output",
            "name": "SOUND Canvas VA.dll",
            "note": "Hosted as the MIDI output device when the VSTi option is selected. The path is fixed to the Roland installation directory and the setting is stored as VstSCVA.",
            "path": "%ProgramFiles%/Roland/Sound Canvas VA/SOUND Canvas VA.dll",
            "required": false,
            "source_ref": "xm6g.exe:0x14048418a, INI key VstSCVA",
            "system": "sharp-x68000"
          }
        ],
        "mode": "standalone",
        "notes": "Closed-source Windows fork of XM6 v2.06, extended by GIMONS from 2010 and\nmaintained again by PI. since version 3.34 (xm6g.pdf p.1, p.3). Distributed from\nPI's XM6 page as a single archive, xm6_typeg_338_20260223.zip, holding an x64\nxm6g.exe, the Visual C++ 2015-2019 runtime it imports (mfc140u.dll,\nmsvcp140.dll, vcruntime140.dll, vcruntime140_1.dll) and the 32-page manual\nxm6g.pdf. No source is published; the analysis below reads xm6g.exe, and the\nXM6 v2.06 sources cited alongside are PI's own release, xm6_206s.zip from the\nsame page. ES-DE launches it through the XM6TYPEG and XM6TYPEG-WINDOWS find\nrules with the working directory set to the emulator folder, on Linux under\nWine or Proton. The archive alone does not run: the manual opens with that\nwarning (xm6g.pdf p.5).\n\nMachines emulated are X68000, XVI, Compact, X68030 and the 040turbo and\n060turbo accelerator configurations (xm6g.pdf p.3). System files are resolved\nbeside xm6g.exe. A twenty-entry name table at xm6g.exe:0x140592350 holds them,\nagainst ten in Filepath::SystemFile[] (XM6 2.06 vm/filepath.cpp:472-483), and\neach path is built by copying the name, splitting it, and refilling drive and\ndirectory from GetModuleFileNameW, the sequence XM6 2.06 spells out in\nFilepath::SysFile and Filepath::SetBaseDir (vm/filepath.cpp:88-105, 172-186).\nThe path is rebuilt from the module path on every load, with no configured\ndirectory taking part. Loading reads a fixed byte count and compares it\nagainst the count returned, so every min_size below is a floor: a longer file\nloads and its tail is ignored.\n\nTwo files are mandatory. LoadROM (xm6g.exe:0x1404fc9a5) leaves through its\nfailure exit when the IPL read fails, and the CG read falls back to CGROM.TMP\nbefore failing the same way, which is the string \"XM6 requires two ROM files,\nIPLROM.DAT file and CGROM.DAT(or CGROM.TMP) file.\" Nothing in the executable\nsubstitutes for either. The system options page probes IPLROM.DAT,\nIPLROMXV.DAT, IPLROMCO.DAT and IPLROM30.DAT with GetFileSizeEx and accepts a\nfile only at exactly 131072 bytes (xm6g.exe:0x140428f80, size test at\n0x14042920a).\n\nXM6 Utility, published separately at the same address, synthesises CGROM.TMP\nfrom the installed Windows fonts and SCSIINROM.DAT or SCSIEXROM.DAT from the\nHuman68k version 3.02 disk image HUMAN302.XDF, which it requires at 0x134000\nbytes (XM6Util scsirom.cpp:86-90). It stamps the SCSI ROMs with \"XM6 \" at\noffset 0x1ff8 and a version at 0x1ffc (XM6Util scsirom.cpp:243-245), and\nxm6g.exe reads both files back and tests that signature\n(xm6g.exe:0x14050147c, 0x1405015e0) to raise the startup warning that names\nthese files as substitutes and discourages them. Nothing rejects the file, and\nno genuine ROM is hashed anywhere in the executable.\n\nSCSI ROM requirements follow the machine (xm6g.pdf p.17). SCSIINROM.DAT is\nneeded by SUPER, XVI and Compact and by any machine set to the internal SCSI\ninterface; SCSIEXROM.DAT drives the CZ-6BS1 external board, which is the only\nSCSI variant the SASI models can take. X68030 needs neither, its SCSI ROM\nbeing part of IPLROM30.DAT or IPLROM30S.DAT. IPLROM30S.DAT and ROM30S.DAT are\na pair used only when Expansion ROM is enabled on the X68030 options tab, for\nROMs patched for 060turbo (xm6g.pdf p.17).\n\nThe Mercury Unit carries an OPN (YMF288) whose rhythm section is sampled from\nexternal files. The fmgen and X68Sound engines read six WAV files named from a\ntable at xm6g.exe:0x1405c0090 (0x1404ed610, CreateFileW at 0x1404ed8bf); the\nymfm engine reads ym2608_adpcm_rom.bin instead (0x140574fec, ReadFile at\n0x140575095), which is why the rhythm level control is documented as inert for\nymfm.\n\nxm6g.ini and the state file STATE.XM6, the twentieth table entry, are written\nby the program and are not listed below. RTC.DAT and the SRAM files are listed\nbecause they are battery-backed images with hardware counterparts that preload\nsettings when supplied, even though XM6 TypeG creates them on exit when they\nare absent (xm6g.pdf p.18).\n",
        "profiled_date": "2026-08-10",
        "source": "http://retropc.net/pi/xm6/index.html",
        "systems": [
          "sharp-x68000"
        ],
        "type": "standalone",
        "upstream": "closed-source"
      }
    },
    {
      "id": "xrick",
      "profile": {
        "analysis": {
          "compiled_in_data": [
            "dat_ents.c (entity/NPC tables)",
            "dat_maps.c (level map data)",
            "dat_picsPC.c, dat_picsST.c (background images, PC and Atari ST)",
            "dat_screens.c (screen layout data)",
            "dat_snd.c (sound metadata/indices)",
            "dat_spritesPC.c, dat_spritesST.c (sprite graphics)",
            "dat_tilesPC.c, dat_tilesST.c (tile graphics)"
          ],
          "content_extensions": [
            "*",
            "zip"
          ],
          "content_type": "game_engine",
          "data_files_location": "system/xrick/data.zip (standalone) or content path (with content)",
          "external_data": {
            "sounds": [
              "bombshht.wav, bonus.wav, box.wav, bullet.wav, crawl.wav, die.wav",
              "ent0.wav through ent8.wav (9 entity sound effects)",
              "explode.wav, gameover.wav, jump.wav, pad.wav",
              "sbonus1.wav, sbonus2.wav, stick.wav, walk.wav",
              "tune0.wav through tune5.wav (6 music tracks)"
            ]
          },
          "supports_no_content": true,
          "system_directory_used": true
        },
        "core_classification": "game_engine",
        "core_version": "1.0.0.6",
        "cores": [
          "xrick"
        ],
        "display_name": "Rick Dangerous (XRick)",
        "emulator": "XRick",
        "files": [
          {
            "category": "game_data",
            "description": "Rick Dangerous sound data (29 WAV files: sfx and music tracks)",
            "md5": "a471e64e9f69afbe59c10cc94ed1b184",
            "name": "xrick/data.zip",
            "note": "Placed in system/xrick/data.zip. Contains sounds/ directory with 29 WAV files from the original xrick 0.21212 release. Without this file, standalone mode fails with 'XRick game files missing from frontend system directory'. Ships in the libretro repo root.",
            "required": true,
            "sha1": "ecfc092fe6371dbf38e238a8ba5f90785b5db52d",
            "size": 1457440,
            "source_ref": "libretro/core/libretro-core.c:324-326 (path construction), libretro/core/libretro-core.c:328-357 (missing file error), libretro/core/libretro-core.c:441 (final path confirmation)",
            "system": "xrick"
          }
        ],
        "notes": "XRick is an open-source reimplementation of the Rick Dangerous engine (Core Design, 1989),\nported to libretro. It is not a general-purpose emulator; it only plays Rick Dangerous.\n\nThe core sets need_fullpath = true, valid_extensions = \"*|zip\", and supports launching\nwithout content (RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME = true, libretro/core/libretro-core.c:93-97).\n\nGame data handling works in two modes (retro_load_game, libretro/core/libretro-core.c:312-360):\n  1. Content provided: the content path is passed directly as the -data argument\n     (line 318: snprintf \"xrick\" \"-data\" \"%s\"). Content can be data.zip or a directory.\n  2. No content (standalone): the core builds the path {system_dir}/xrick/data.zip\n     using fill_pathname_join_special_ext(RETRO_DIR, \"xrick\", \"data\", \".zip\") at lines\n     324-326. If this file is missing, a \"game files missing\" error is displayed (line 337)\n     and loading fails.\n\nThe fallback data path at line 359 confirms the expected location:\n  snprintf(RPATH, ... \"xrick\" \"-data\" \"%s/xrick/data.zip\", RETRO_DIR)\n\nAll game graphics, maps, tile data, entity tables, and screen layouts are compiled directly\ninto the binary from dat_*.c source files (dat_ents.c, dat_maps.c, dat_picsPC.c,\ndat_picsST.c, dat_screens.c, dat_snd.c, dat_spritesPC.c, dat_spritesST.c, dat_tilesPC.c,\ndat_tilesST.c). Only the sound files are external.\n\ndata.zip contains 29 WAV files in a sounds/ subdirectory: sound effects (bombshht, bonus,\nbox, bullet, crawl, die, ent0-ent8, explode, gameover, jump, pad, sbonus1, sbonus2, stick,\nwalk) and music tracks (tune0 through tune5). The data.c module handles opening files from\neither a .zip archive (via unzip.c) or a flat directory, selected by extension detection\n(data.c:56-73).\n\nxrick.c:23 shows the hardcoded fallback: data_setpath(\"data.zip\") when no -data argument\nis provided.\n\nsystem_dir is obtained via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY (libretro/core/libretro-core.c:185-189),\nfalling back to \".\" if unavailable.\n\nThe data.zip file ships in the xrick-libretro repository root and is the original xrick\n0.21212 game data release from 2002 by BigOrno.\n",
        "profiled_date": "2026-03-30",
        "source": "https://github.com/libretro/xrick-libretro",
        "source_commit": "fcfde3623a04b4e986548e06d46630fcd0bd1e18",
        "systems": [
          "xrick"
        ],
        "type": "libretro",
        "upstream": "https://github.com/fabiensanglard/xrick"
      }
    },
    {
      "id": "xroar",
      "profile": {
        "core_version": "1.10",
        "cores": [
          "xroar"
        ],
        "display_name": "Dragon / CoCo / MC-10 (XRoar)",
        "emulator": "XRoar",
        "files": [
          {
            "aliases": [
              "dragon32",
              "d32rom",
              "Dragon Data Ltd - Dragon 32 - IC17"
            ],
            "crc32": "e3879310",
            "description": "Dragon 32 BASIC ROM",
            "name": "d32.rom",
            "note": "Combined 16K ROM. Loaded into a single 16384-byte rombank slot.",
            "required": true,
            "size": 16384,
            "source_ref": "xroar.c:643 (romlist d32), dragon.c:792,798-803,820-821 (load + CRC)",
            "system": "dragon32",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "d64rom1",
              "dragrom",
              "Dragon Data Ltd - Dragon 64 - IC17",
              "Dragon Data Ltd - TANO IC18",
              "Eurohard S.A. - Dragon 200 IC18"
            ],
            "crc32": "84f68bf9",
            "description": "Dragon 64 32K mode BASIC ROM",
            "name": "d64_1.rom",
            "note": "IC17 ROM. Required for the machine to start.",
            "required": true,
            "size": 16384,
            "source_ref": "xroar.c:641 (romlist d64_1), xroar.c:647 (romlist dragon64), dragon64.c:138-141,155-157 (load + CRC)",
            "system": "dragon64",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "d64rom2",
              "Dragon Data Ltd - Dragon 64 - IC18",
              "Dragon Data Ltd - TANO IC17",
              "Eurohard S.A. - Dragon 200 IC17"
            ],
            "crc32": "17893a42",
            "description": "Dragon 64 64K mode BASIC ROM",
            "name": "d64_2.rom",
            "note": "IC18 ROM. 64K mode alternate BASIC. Machine starts without it (32K mode only).",
            "required": false,
            "size": 16384,
            "source_ref": "xroar.c:642 (romlist d64_2), xroar.c:648 (romlist dragon64_alt), dragon64.c:146-152,160-162 (load + CRC)",
            "system": "dragon64",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "d200e_rom1",
              "ic18_v1.4e.ic34"
            ],
            "crc32": "95af0a0a",
            "description": "Dragon 200-E BASIC IC18 (Spanish)",
            "name": "d200e_1.rom",
            "note": "Required for Dragon 200-E. Falls back to d64_1 then generic dragon if not found.",
            "region": [
              "spain"
            ],
            "required": true,
            "size": 16384,
            "source_ref": "xroar.c:644 (romlist d200e_1), xroar.c:650 (romlist dragon200e), xroar.c:735 (crclist)",
            "system": "dragon64",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "d200e_rom2",
              "ic17_v1.4e.ic37"
            ],
            "description": "Dragon 200-E BASIC IC17 (Spanish)",
            "name": "d200e_2.rom",
            "note": "64K mode alternate. Falls back to d64_2 if not found.",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 16384,
            "source_ref": "xroar.c:645 (romlist d200e_2), xroar.c:651 (romlist dragon200e_alt)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "rom26.ic1"
            ],
            "description": "Dragon 200-E external character generator ROM",
            "name": "d200e_26.rom",
            "note": "Spanish character set. Loaded into a 4096-byte rombank. Machine works without it (uses standard charset).",
            "region": [
              "spain"
            ],
            "required": false,
            "size": 4096,
            "source_ref": "xroar.c:652 (romlist dragon200e_charset), dragon.c:523-539 (ext_charset load)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "alpha_bt_10",
              "Dragon Data Ltd - Dragon Alpha Boot v1.0 150584"
            ],
            "crc32": "c3dab585",
            "description": "Dragon Professional (Alpha) boot ROM v1.0",
            "name": "alpha-boot-v1.0.rom",
            "note": "Required for Dragon Professional machine. Loaded as extbas_rom into the BOOT bank. rombank_verify_crc accepts any member of @dragonpro_boot, which also holds 0xd6172b56 for the v0.4 slot.",
            "required": true,
            "size": 8192,
            "source_ref": "xroar.c:654 (romlist dragonpro_boot), xroar.c:741 (crclist), dragonpro.c:226 (BOOT bank 8192), dragonpro.c:231-234 (load), dragonpro.c:249 (0xc3dab585 = Dragon Pro BOOT 1.0)",
            "system": "dragon64",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "alpha_bt_04"
            ],
            "description": "Dragon Professional (Alpha) boot ROM v0.4",
            "name": "alpha-boot-v0.4.rom",
            "note": "Fourth and fifth candidates of the dragonpro_boot romlist, tried when no v1.0 image is found. The crclist carries 0xd6172b56 next to the v1.0 value, but the source labels only the latter, so no crc32 is declared here.",
            "required": false,
            "size": 8192,
            "source_ref": "xroar.c:654 (romlist dragonpro_boot), xroar.c:741 (crclist), dragonpro.c:226 (BOOT bank 8192)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "alpha_ba",
              "Dragon Data Ltd - Dragon Alpga Basic"
            ],
            "crc32": "84f68bf9",
            "description": "Dragon Professional (Alpha) BASIC ROM",
            "name": "alpha-basic.rom",
            "note": "Loaded as altbas_rom into the 32K BASIC bank. Falls back to d64_1 if not found.",
            "required": true,
            "size": 16384,
            "source_ref": "xroar.c:655 (romlist dragonpro_basic), xroar.c:742 (crclist = @d64_1), dragonpro.c:227 (ROM0 bank 16384), dragonpro.c:240-243 (load), dragonpro.c:254 (0x84f68bf9 = Dragon 64 32K mode BASIC)",
            "system": "dragon64",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "d8f4d15e",
            "description": "Tandy CoCo Colour BASIC 1.3",
            "name": "bas13.rom",
            "note": "Default Colour BASIC. First tried in the @coco romlist. 8K ROM loaded into slot 1 of a 2-slot rombank.",
            "required": true,
            "size": 8192,
            "source_ref": "xroar.c:657 (romlist coco), xroar.c:747 (crclist bas13), dragon.c:807-812,824-826 (load + CRC)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "Color Basic v1.2 (1982)(Tandy)"
            ],
            "crc32": "54368805",
            "description": "Tandy CoCo Colour BASIC 1.2",
            "name": "bas12.rom",
            "note": "Alternative to bas13. Second in fallback order.",
            "required": false,
            "size": 8192,
            "source_ref": "xroar.c:657 (romlist coco), xroar.c:746 (crclist bas12)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "6270955a",
            "description": "Tandy CoCo Colour BASIC 1.1",
            "name": "bas11.rom",
            "note": "Used by CoCo 1E. Third in fallback order.",
            "required": false,
            "size": 8192,
            "source_ref": "xroar.c:657 (romlist coco), xroar.c:745 (crclist bas11)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "00b50aaa",
            "description": "Tandy CoCo Colour BASIC 1.0",
            "name": "bas10.rom",
            "note": "Earliest version. Used by original CoCo 1. Last in fallback order.",
            "required": false,
            "size": 8192,
            "source_ref": "xroar.c:657 (romlist coco), xroar.c:744 (crclist bas10)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "a82a6254",
            "description": "Tandy CoCo Extended Colour BASIC 1.1",
            "name": "extbas11.rom",
            "note": "Default Extended BASIC. 8K ROM loaded into slot 0 of a 2-slot rombank.",
            "required": true,
            "size": 8192,
            "source_ref": "xroar.c:658 (romlist coco_ext), xroar.c:752 (crclist extbas11), dragon.c:798-803,828-829 (load + CRC)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "e031d076",
            "description": "Tandy CoCo Extended Colour BASIC 1.0",
            "name": "extbas10.rom",
            "note": "Earlier version. Second in fallback order.",
            "required": false,
            "size": 8192,
            "source_ref": "xroar.c:658 (romlist coco_ext), xroar.c:751 (crclist extbas10)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "b4c88d6c",
            "description": "CoCo 3 Super Extended Colour BASIC (NTSC)",
            "name": "coco3.rom",
            "note": "32K combined ROM. Single required ROM for CoCo 3 NTSC.",
            "required": true,
            "size": 32768,
            "source_ref": "xroar.c:688 (romlist coco3), xroar.c:762 (crclist coco3), coco3.c:254-256,512-526 (load + CRC)",
            "system": "coco3",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "CoCo 3 Super Extended Colour BASIC (PAL)",
            "name": "coco3p.rom",
            "note": "PAL variant of the CoCo 3 ROM. Required for PAL CoCo 3 machines.",
            "required": true,
            "size": 32768,
            "source_ref": "xroar.c:689 (romlist coco3p), xroar.c:505,514 (machine config), coco3.c:254-256",
            "system": "coco3"
          },
          {
            "crc32": "11fda97e",
            "description": "Tandy MC-10 Microcolour BASIC",
            "name": "mc10.rom",
            "note": "Single required ROM for MC-10.",
            "required": true,
            "size": 8192,
            "source_ref": "xroar.c:695 (romlist mc10), xroar.c:767 (crclist mc10), mc10.c:157-158,397-407 (load + CRC)",
            "system": "mc10",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "f876abe9",
            "description": "Matra & Hachette Alice Microcolour BASIC",
            "name": "alice.rom",
            "note": "French Alice variant. Required for Alice machine. MC-10 compatible.",
            "region": [
              "france"
            ],
            "required": true,
            "size": 8192,
            "source_ref": "xroar.c:697 (romlist alice), xroar.c:769 (crclist alice), mc10.c:157-158",
            "system": "mc10",
            "validation": [
              "crc32"
            ]
          },
          {
            "aliases": [
              "adv070_u24"
            ],
            "crc32": "1cce231e",
            "description": "Tandy Deluxe CoCo Advanced BASIC (bank 0)",
            "name": "deluxe.rom",
            "note": "Primary ROM for the Deluxe CoCo prototype. Loaded as extbas_rom.",
            "required": true,
            "source_ref": "xroar.c:673 (romlist deluxecoco), xroar.c:757 (crclist), deluxecoco.c:191-194 (load)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "Tandy Deluxe CoCo ROM bank 1",
            "name": "adv071_u24.rom",
            "required": false,
            "source_ref": "xroar.c:675 (romlist deluxecoco1), deluxecoco.c:201-204 (load)",
            "system": "coco"
          },
          {
            "description": "Tandy Deluxe CoCo ROM bank 2",
            "name": "adv072_u24.rom",
            "required": false,
            "source_ref": "xroar.c:676 (romlist deluxecoco2), deluxecoco.c:208-211 (load)",
            "system": "coco"
          },
          {
            "aliases": [
              "adv073_u24"
            ],
            "description": "Tandy Deluxe CoCo ROM bank 3",
            "name": "adv073-2_u24.rom",
            "required": false,
            "source_ref": "xroar.c:677 (romlist deluxecoco3), deluxecoco.c:215-218 (load)",
            "system": "coco"
          },
          {
            "aliases": [
              "mx1600bas_zephyr"
            ],
            "crc32": "d918156e",
            "description": "Dynacom MX-1600 Colour BASIC",
            "name": "mx1600bas.rom",
            "note": "Required for MX-1600. Zephyr-patched variant (CRC32 d11b1c96) is an alias.",
            "required": true,
            "source_ref": "xroar.c:679 (romlist mx1600), xroar.c:748 (crclist mx1600)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "322a3d58",
            "description": "Dynacom MX-1600 Extended Colour BASIC",
            "name": "mx1600extbas.rom",
            "required": true,
            "source_ref": "xroar.c:680 (romlist mx1600ext), xroar.c:753 (crclist mx1600ext)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "0b2903d4",
            "description": "Prologica CP-400 Colour BASIC",
            "name": "cp400bas.rom",
            "required": true,
            "source_ref": "xroar.c:682 (romlist cp400), xroar.c:749 (crclist cp400)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "crc32": "114accbc",
            "description": "Prologica CP-400 Extended Colour BASIC",
            "name": "cp400ext.rom",
            "required": true,
            "source_ref": "xroar.c:683 (romlist cp400ext), xroar.c:754 (crclist cp400ext)",
            "system": "coco",
            "validation": [
              "crc32"
            ]
          },
          {
            "description": "Tandy RS-DOS 1.1 (CoCo floppy disk controller)",
            "name": "disk11.rom",
            "note": "Primary CoCo disk controller ROM. disk10.rom (RS-DOS 1.0) is an earlier version used as fallback.",
            "required": false,
            "source_ref": "xroar.c:708 (romlist rsdos), rsdos.c:176 (default @rsdos)",
            "system": "coco"
          },
          {
            "description": "RS-DOS with Becker port (DriveWire)",
            "name": "hdbdw3bck.rom",
            "note": "For CoCo with Becker port hardware. Enables DriveWire connectivity.",
            "required": false,
            "source_ref": "xroar.c:718 (romlist rsdos_becker), xroar.c:572-574 (cart becker)",
            "system": "coco"
          },
          {
            "description": "DragonDOS 1.2a (Dragon floppy disk controller)",
            "name": "ddos12a.rom",
            "note": "Latest DragonDOS version. Fallback chain tries DOSPlus -> SuperDOS -> DragonDOS -> Cumana. Older versions: ddos12, ddos40, ddos15, ddos10.",
            "required": false,
            "source_ref": "xroar.c:702 (romlist dragondos), dragondos.c:173 (default @dragondos_compat)",
            "system": "dragon64"
          },
          {
            "description": "DOSPlus 4.9b (Dragon compatible DOS)",
            "name": "dplus49b.rom",
            "note": "First tried in DragonDOS-compatible cartridge. Enhanced Dragon DOS. Older version: dplus48 (alias: dosplus-4.8, DOSPLUS).",
            "required": false,
            "source_ref": "xroar.c:703 (romlist dosplus)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "PNP - SuperDOS E6"
            ],
            "description": "SuperDOS E6 (Dragon compatible DOS)",
            "name": "sdose6.rom",
            "note": "Latest SuperDOS. Older versions: sdose5, sdose4.",
            "required": false,
            "source_ref": "xroar.c:704 (romlist superdos)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "CDOS20",
              "CumanaDOSv2.0"
            ],
            "description": "Cumana DOS 2.0 (Dragon compatible DOS)",
            "name": "cdos20.rom",
            "required": false,
            "source_ref": "xroar.c:705 (romlist cumana)",
            "system": "dragon64"
          },
          {
            "aliases": [
              "Premier Micros - DeltaDOS"
            ],
            "description": "Delta System 2 (Premier Microsystems disk controller)",
            "name": "delta2.rom",
            "note": "Latest Delta version. Older versions: delta1a, delta19, delta, deltados.",
            "required": false,
            "source_ref": "xroar.c:711 (romlist delta), deltados.c:160 (default @delta)",
            "system": "dragon64"
          },
          {
            "description": "Prologica CP-450 DOS cartridge",
            "name": "cp450dsk.rom",
            "note": "Falls back to RS-DOS if not found.",
            "required": false,
            "source_ref": "xroar.c:709 (romlist cp450)",
            "system": "coco"
          },
          {
            "description": "Orchestra-90 CC sound cartridge ROM",
            "name": "orch90.rom",
            "note": "Sound synthesis cartridge. Loaded directly (no romlist fallback).",
            "required": false,
            "source_ref": "orch90.c:122 (default rom = orch90)",
            "system": "coco"
          },
          {
            "aliases": [
              "MCX_Basic_21"
            ],
            "description": "MCX128 memory expansion BASIC ROM",
            "name": "mcx128.rom",
            "note": "128K memory expansion for MC-10. Adds enhanced BASIC.",
            "required": false,
            "source_ref": "xroar.c:724 (romlist mcx128), mcx128.c:208 (default @mcx128)",
            "system": "mc10"
          },
          {
            "aliases": [
              "MCX_Basic_21_AZERTY"
            ],
            "description": "MCX128 memory expansion BASIC ROM (AZERTY)",
            "name": "mcx128a.rom",
            "note": "AZERTY keyboard variant for Alice. Same MCX128 hardware.",
            "required": false,
            "source_ref": "xroar.c:725 (romlist mcx128_azerty), xroar.c:632-633 (cart mcx128a)",
            "system": "mc10"
          },
          {
            "description": "YADOS (Glenside IDE interface ROM)",
            "name": "yados.rom",
            "note": "IDE hard disk interface. Fallback: hdblba.rom (alternative IDE ROM).",
            "required": false,
            "source_ref": "xroar.c:690 (romlist glenside_ide), idecart.c:204 (default @glenside_ide)",
            "system": "coco"
          },
          {
            "description": "SDBDOS (MOOH memory cartridge ROM)",
            "name": "sdbdos.rom",
            "note": "SD card boot DOS for MOOH cartridge. Loaded directly.",
            "required": false,
            "source_ref": "mooh.c:254 (default rom = sdbdos)",
            "system": "dragon64"
          },
          {
            "description": "Ikon Ultra Drive Dragonfly ROM 2.3",
            "name": "dragonfly-2.3.rom",
            "note": "Experimental. Ikon Ultra Drive storage interface. First candidate of the ikon romlist.",
            "required": false,
            "source_ref": "xroar.c:715 (romlist ikon), ikon.c:151 (default @ikon)",
            "system": "dragon64",
            "unsourceable": "not yet dumped, only v1.3 publicly available, XRoar support is experimental (#ifdef WANT_EXPERIMENTAL)"
          },
          {
            "description": "Ikon Ultra Drive Dragonfly ROM 1.3",
            "name": "dragonfly-1.3.rom",
            "note": "Experimental. Second candidate of the ikon romlist, loaded when dragonfly-2.3 is absent. romlist_find appends the extensions \"\", .rom, .ROM, .dgn, .DGN in that order. ikon.c loads the bank through cart_rom_init and checks nothing: no crclist entry names this ROM.",
            "required": false,
            "source_ref": "xroar.c:715 (romlist ikon), ikon.c:151 (default @ikon), romlist.c:46-48 (extensions tried)",
            "system": "dragon64"
          }
        ],
        "notes": "XRoar by Ciaran Anscomb emulates Dragon 32/64, Tandy CoCo 1/2/3,\nMC-10, Alice, and clones (MX-1600, CP-400, Dragon 200-E, Deluxe CoCo).\nROM files are searched in a configurable rompath directory with automatic\nextension appending (.rom, .ROM, .dgn, .DGN). Batocera sets rompath to\n/userdata/bios/xroar/.\n\nThe romlist mechanism defines fallback filenames per ROM slot. Each machine\ntype has a default romlist that tries filenames in priority order. CRC32 is\ncomputed for loaded ROMs and matched against known-good values for breakpoint\nand feature detection, but mismatches do not prevent loading.\n\nMachine selection: Batocera maps system names to default machines via\nxroarGenerator.py (mc10 -> mc10, dragon64 -> dragon64, others -> coco2bus).\n",
        "profiled_date": "2026-03-26",
        "source": "https://www.6809.org.uk/git/xroar.git",
        "systems": [
          "dragon32",
          "dragon64",
          "coco",
          "coco3",
          "mc10"
        ],
        "type": "standalone",
        "upstream": "https://www.6809.org.uk/xroar/"
      }
    },
    {
      "id": "yabasanshiro",
      "profile": {
        "core_classification": "official_port",
        "core_version": "v2.6.8",
        "cores": [
          "yabasanshiro",
          "yabasanshiro-2"
        ],
        "display_name": "Sega - Saturn (YabaSanshiro)",
        "emulator": "yabasanshiro",
        "files": [
          {
            "hle_fallback": true,
            "name": "saturn_bios.bin",
            "note": "Primary Saturn BIOS. Any region accepted.",
            "priority": 1,
            "required": true,
            "source_ref": "yabause/src/libretro/libretro.c:1048",
            "system": "sega-saturn"
          },
          {
            "hle_fallback": true,
            "name": "sega_101.bin",
            "note": "Saturn BIOS v1.01 (Japan). Fallback if saturn_bios.bin missing.",
            "priority": 2,
            "region": [
              "japan"
            ],
            "required": false,
            "source_ref": "yabause/src/libretro/libretro.c:1052",
            "system": "sega-saturn"
          },
          {
            "hle_fallback": true,
            "name": "mpr-17933.bin",
            "note": "Saturn BIOS v1.003 (NA/EU). Last fallback.",
            "priority": 3,
            "region": [
              "north-america",
              "europe"
            ],
            "required": false,
            "source_ref": "yabause/src/libretro/libretro.c:1056",
            "system": "sega-saturn"
          }
        ],
        "notes": "YabaSanshiro is a Sega Saturn emulator by devmiyax, forked from Yabause.\nRequires OpenGL 3.3 or OpenGL ES 3.0.\n\nSaturn BIOS search order:\n  1. {system}/saturn_bios.bin\n  2. {system}/sega_101.bin\n  3. {system}/mpr-17933.bin\nFirst file found wins. Real BIOS required for normal operation.\nHLE available via yabasanshiro_force_hle_bios core option (deprecated,\ndebug only).\n\nAddon cartridges: 1M/4M RAM expansion via core option (no files needed).\nROM cartridge and MPEG card ROM loading disabled in libretro port\n(cartpath = empty, mpegpath = NULL).\n\nBIOS loading: libretro.c retro_load_game() lines 1048-1069.\nCore load: memory.c LoadBios() line 1353, T123Load() memory.h lines 219-280.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/yabause/tree/yabasanshiro",
        "source_commit": "8926b0c6c347f8c5c755911ddb0ac695420ffbf8",
        "systems": [
          "sega-saturn"
        ],
        "type": "libretro",
        "upstream": "https://github.com/devmiyax/yabause"
      }
    },
    {
      "id": "yabause",
      "profile": {
        "core_classification": "community_fork",
        "core_version": "v0.9.15",
        "cores": [
          "yabause"
        ],
        "display_name": "Sega - Saturn (Yabause)",
        "emulator": "yabause",
        "files": [
          {
            "hle_fallback": true,
            "max_size": 524288,
            "name": "saturn_bios.bin",
            "note": "Primary Saturn BIOS. Any region accepted.",
            "priority": 1,
            "required": true,
            "source_ref": "yabause/src/libretro/libretro.c:1035",
            "system": "sega-saturn",
            "validation": [
              "max_size"
            ]
          },
          {
            "hle_fallback": true,
            "max_size": 524288,
            "name": "sega_101.bin",
            "note": "Saturn BIOS v1.01 (Japan). Fallback if saturn_bios.bin missing.",
            "priority": 2,
            "region": [
              "japan"
            ],
            "required": false,
            "source_ref": "yabause/src/libretro/libretro.c:1039",
            "system": "sega-saturn",
            "validation": [
              "max_size"
            ]
          },
          {
            "hle_fallback": true,
            "max_size": 524288,
            "name": "mpr-17933.bin",
            "note": "Saturn BIOS (NA/EU). Last fallback.",
            "priority": 3,
            "region": [
              "north-america",
              "europe"
            ],
            "required": false,
            "source_ref": "yabause/src/libretro/libretro.c:1043",
            "system": "sega-saturn",
            "validation": [
              "max_size"
            ]
          }
        ],
        "notes": "Yabause is a software-rendered Sega Saturn emulator. Upstream project is\ndead; libretro port maintained by the community on the master branch of\nlibretro/yabause.\n\nSaturn BIOS search order:\n  1. {system}/saturn_bios.bin\n  2. {system}/sega_101.bin\n  3. {system}/mpr-17933.bin\nFirst file found wins. HLE BIOS available via yabause_force_hle_bios core\noption (reduced compatibility). Multi-disc (m3u) requires real BIOS.\n\nAddon cartridges: 1M/4M RAM expansion via core option (no files needed).\nROM cartridge loading, SH1 ROM (CD Block LLE), and MPEG card ROM are\nstandalone-only features disabled in the libretro port.\n\nBIOS loading: libretro.c retro_load_game() lines 1035-1049.\nCore load: memory.c LoadBios() line 1260, T123Load() memory.h lines 196-264.\n",
        "profiled_date": "2026-03-25",
        "source": "https://github.com/libretro/yabause",
        "source_commit": "8926b0c6c347f8c5c755911ddb0ac695420ffbf8",
        "systems": [
          "sega-saturn"
        ],
        "type": "libretro",
        "upstream": "https://github.com/Yabause/yabause"
      }
    },
    {
      "id": "ymir",
      "profile": {
        "core_classification": "community_fork",
        "core_version": {
          "libretro": "PR#746",
          "standalone": "v0.2.1"
        },
        "cores": [
          "ymir"
        ],
        "display_name": "Sega - Saturn (Ymir)",
        "emulator": "ymir",
        "files": [
          {
            "aliases": [
              "mpr-17933.bin",
              "saturn_bios.bin"
            ],
            "description": "Saturn IPL ROM (BIOS). Any region accepted.",
            "name": "sega_101.bin",
            "required": true,
            "size": 524288,
            "source_ref": {
              "libretro": "apps/ymir-libretro/src/libretro.cpp:260-263,534-558",
              "standalone": "apps/ymir-sdl3/src/util/rom_loader.cpp:9-22, apps/ymir-sdl3/src/app/rom_manager.cpp:14-56, libs/ymir-core/include/ymir/sys/memory_defs.hpp:9"
            },
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "description": "SH1 CD Block ROM for low-level CD drive emulation. Scans cdb/ subdirectory for any matching file.",
            "hle_fallback": true,
            "name": "cdb/cdb_rom.bin",
            "required": false,
            "size": 65536,
            "source_ref": {
              "libretro": "apps/ymir-libretro/src/libretro.cpp:565-591",
              "standalone": "apps/ymir-sdl3/src/util/rom_loader.cpp:25-38, apps/ymir-sdl3/src/app/rom_manager.cpp:58-93, libs/ymir-core/include/ymir/hw/sh1/sh1_defs.hpp:7"
            },
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "category": "game_data",
            "description": "ROM cartridge for The King of Fighters '95.",
            "name": "mpr-18811-mx.ic1",
            "required": false,
            "size": 2097152,
            "source_ref": {
              "libretro": "apps/ymir-libretro/src/libretro.cpp:621, 598-618",
              "standalone": "apps/ymir-sdl3/src/app/rom_manager.cpp:96-131, libs/ymir-core/include/ymir/db/rom_cart_db.hpp:19-22"
            },
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          },
          {
            "category": "game_data",
            "description": "ROM cartridge for Ultraman: Hikari no Kyojin Densetsu.",
            "name": "mpr-19367-mx.ic1",
            "required": false,
            "size": 2097152,
            "source_ref": {
              "libretro": "apps/ymir-libretro/src/libretro.cpp:622, 598-618",
              "standalone": "apps/ymir-sdl3/src/app/rom_manager.cpp:96-131, libs/ymir-core/include/ymir/db/rom_cart_db.hpp:25-28"
            },
            "system": "sega-saturn",
            "validation": [
              "size"
            ]
          }
        ],
        "notes": "Ymir is a Sega Saturn emulator by StrikerX3. The libretro port by\nwarmenhoven wraps the shared ymir-core library (PR #746, not yet merged).\nNo .info file exists in libretro-core-info.\n\nStandalone: scans configured directories recursively for files matching\nthe expected size. No specific filenames required. Identifies known ROMs\nby XXH128 hash from an internal database (19 IPL variants, 4 CD Block\nversions, 2 ROM carts). Unknown files are accepted if size matches.\n\nLibretro: searches {system}/sega_101.bin, mpr-17933.bin, saturn_bios.bin\nin order. First file found with exact 512 KiB size wins.\n\nBatocera standalone: configgen maps IPLROMImages to /userdata/bios,\nCDBlockROMImages to /userdata/roms/saturn/cdb/, ROMCartImages to\n/userdata/roms/saturn.\n\nNo HLE fallback for IPL ROM. CD Block LLE is optional; falls back to\nHLE when disabled or no ROM found. Known CDB versions: 1.04, 1.05, 1.06.\n\nROM cartridges: KoF95 and Ultraman shipped with physical ROM carts.\nAuto-detected from game database when loading a disc.\n\nAddon cartridges: 1M/4M DRAM expansion handled via core option (no files).\n\nXXH128 hashes used for ROM identification only, not validation.\nAll file loading validates size only.\n",
        "profiled_date": "2026-03-26",
        "source": {
          "libretro": "https://github.com/warmenhoven/Emir/tree/libretro",
          "standalone": "https://github.com/StrikerX3/Ymir"
        },
        "source_commit": {
          "libretro": "5d99cbbf813206736f38b3574ecca7a8aedc07e5",
          "standalone": "5e9310410baa47cb7da5b068f399c9e4a34eedbc"
        },
        "systems": [
          "sega-saturn"
        ],
        "type": "standalone + libretro",
        "upstream": "https://github.com/StrikerX3/Ymir"
      }
    },
    {
      "id": "yuzu",
      "profile": {
        "analysis_commit": "15e6e48 (yuzu-emu-mirror, depth=1)",
        "analysis_date": "2026-03-26",
        "core_classification": "official_port",
        "core_version": "EA 4176",
        "cores": [
          "yuzu"
        ],
        "display_name": "Yuzu (Nintendo Switch)",
        "emulator": "Yuzu",
        "files": [
          {
            "mode": "standalone",
            "name": "prod.keys",
            "note": "Production keys for NCA decryption (master, key area, header, titlekek)",
            "path": "switch/",
            "required": true,
            "source_ref": "src/core/crypto/key_manager.cpp:655-656"
          },
          {
            "mode": "standalone",
            "name": "title.keys",
            "note": "Per-title encryption keys (rights_id to titlekey mappings)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:659-660"
          },
          {
            "mode": "standalone",
            "name": "console.keys",
            "note": "Console-specific keys (BIS, SD seed)",
            "path": "switch/",
            "required": false,
            "source_ref": "src/core/crypto/key_manager.cpp:661-662"
          },
          {
            "mode": "standalone",
            "name": "key_retail.bin",
            "note": "Amiibo decryption keys (two InternalKey structs, 0x50 bytes each)",
            "path": "switch/",
            "required": false,
            "size": 160,
            "source_ref": "src/core/hle/service/nfc/common/amiibo_crypto.cpp:273-294"
          }
        ],
        "mode": "standalone",
        "notes": "Yuzu is the original standalone Nintendo Switch emulator, created by bunnei (author of Citra).\nLegally shut down by Nintendo in March 2024 via lawsuit settlement. Permanently frozen.\ndev.keys can be used instead of prod.keys when use_dev_keys is enabled (for Switch dev units).\nFirmware (system NCAs) must be installed through Yuzu's UI from a firmware directory.\nRequired for commercial games. Homebrew (.nro, .nso) can run without keys or firmware.\nCommunity forks: Citron, Suyu, Eden. Original GitHub repos DMCA'd.\n",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/yuzu-emu-mirror/yuzu",
        "systems": [
          "nintendo-switch"
        ],
        "type": "standalone",
        "upstream": "https://github.com/yuzu-emu/yuzu"
      }
    },
    {
      "id": "zc210",
      "profile": {
        "core_classification": "game_engine",
        "core_version": "2.10 Beta 5",
        "cores": [
          "zc210"
        ],
        "display_name": "Zelda Classic v2.10 (ZC210)",
        "emulator": "Zelda Classic v2.10",
        "files": [
          {
            "description": "main engine data (fonts, palette, SFX samples, MIDI tracks)",
            "name": "zcdata.dat",
            "path": "zc210/zcdata.dat",
            "required": true,
            "source_ref": "zc/zelda.cpp:1173-1181"
          },
          {
            "description": "default SoundFont for MIDI music playback",
            "name": "default.sf2",
            "path": "zc210/sf2/default.sf2",
            "required": true,
            "source_ref": "zc/zc_sys.cpp:2234-2238"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom0.sf2",
            "path": "zc210/sf2/custom0.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom1.sf2",
            "path": "zc210/sf2/custom1.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom2.sf2",
            "path": "zc210/sf2/custom2.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom3.sf2",
            "path": "zc210/sf2/custom3.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom4.sf2",
            "path": "zc210/sf2/custom4.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom5.sf2",
            "path": "zc210/sf2/custom5.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom6.sf2",
            "path": "zc210/sf2/custom6.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom7.sf2",
            "path": "zc210/sf2/custom7.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom8.sf2",
            "path": "zc210/sf2/custom8.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "alternative SoundFont (selectable via core option)",
            "name": "custom9.sf2",
            "path": "zc210/sf2/custom9.sf2",
            "required": false,
            "source_ref": "zc/zc_sys.cpp:2234-2238, libretro.cpp:147"
          },
          {
            "description": "Zelda A Link to the Past SFX replacement",
            "name": "LinkTothePast.dat",
            "path": "zc210/sfx/LinkTothePast.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Zelda Link's Awakening SFX replacement",
            "name": "LinksAwakening.dat",
            "path": "zc210/sfx/LinksAwakening.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "BS Zelda SFX replacement",
            "name": "BSZelda.dat",
            "path": "zc210/sfx/BSZelda.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Metroid NES SFX replacement",
            "name": "Metroid.dat",
            "path": "zc210/sfx/Metroid.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Link to Tortuga quest SFX replacement",
            "name": "Tortuga.dat",
            "path": "zc210/sfx/Tortuga.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Castle Hunt quest SFX replacement",
            "name": "Castle.dat",
            "path": "zc210/sfx/Castle.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Search for Elise quest SFX replacement",
            "name": "Elise.dat",
            "path": "zc210/sfx/Elise.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "description": "Swang Song quest SFX replacement",
            "name": "SwangSong.dat",
            "path": "zc210/sfx/SwangSong.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148"
          },
          {
            "category": "game_data",
            "description": "user-provided custom SFX replacement",
            "name": "Custom.dat",
            "path": "zc210/sfx/Custom.dat",
            "required": false,
            "source_ref": "zc/zelda.cpp:1193-1218, libretro.cpp:148",
            "unsourceable": "user placeholder slot, README says 'rename your own SFX dat file to this name'"
          }
        ],
        "notes": "Libretro port of Zelda Classic 2.10 quest player by netux79. Removed Allegro dependency, runs .qst quest files. No ZQuest editor, no ZC Music (mp3/ogg), no menus. MIDI playback via SoundFont (SF2). Data files distributed with the core source in the datfile/ directory.",
        "profiled_date": "2026-03-26",
        "source": "https://github.com/netux79/zc210-libretro",
        "source_commit": "b6426da40b074245fda097fd345fa7c9cdbf152a",
        "systems": [
          "zc210"
        ],
        "type": "libretro",
        "upstream": "https://www.zeldaclassic.com/"
      }
    },
    {
      "id": "zesarux",
      "profile": {
        "core_classification": "other",
        "core_version": "13.1-SN",
        "cores": [
          "zesarux"
        ],
        "display_name": "Sinclair - ZX Spectrum and clones (ZEsarUX)",
        "emulator": "ZEsarUX",
        "files": [
          {
            "bundled": true,
            "fast_boot": "tbblue",
            "name": "48.rom",
            "note": "48K BASIC. Also loaded four times over as the TBBlue fast-boot image (src/cpu.c:3543-3551).",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3168-3177 (16K/48K, CZ 2000, CZ Spectrum), src/cpu.c:3263 (tbblue fast boot), src/utils.c:3528 (size)",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "48es.rom",
            "note": "Spanish 48K+ ROM, selected for MACHINE_ID_SPECTRUM_48_PLUS_SPA.",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3267-3268, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "inves.rom",
            "note": "Investronica Inves Spectrum+. Loaded at memoria_spectrum[65536] (src/cpu.c:3441-3447).",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3179-3181, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "128.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3202-3203, src/utils.c:3530",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "128s.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3206-3207, src/utils.c:3530",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2.rom",
            "note": "ZX Spectrum +2.",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3213-3214, src/utils.c:3530",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2f.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3217-3218, src/utils.c:3530",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2s.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3221-3222, src/utils.c:3530",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2a40.rom",
            "note": "+2A/+3 ROM v4.0.",
            "required": true,
            "size": 65536,
            "source_ref": "src/cpu.c:3227-3229, src/utils.c:3532",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2a41.rom",
            "note": "+2A/+3 ROM v4.1.",
            "required": true,
            "size": 65536,
            "source_ref": "src/cpu.c:3232-3234, src/utils.c:3532",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "p2as.rom",
            "required": true,
            "size": 65536,
            "source_ref": "src/cpu.c:3237-3239, src/utils.c:3532",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "pentagon.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3271-3272, src/utils.c:3530 (MACHINE_IS_SPECTRUM_128_P2 covers Pentagon, src/cpu.h:545)",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "se.rom",
            "note": "Chloe 140SE/280SE, SE Basic IV.",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3247-3249, src/utils.c:3536",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "chrome.rom",
            "required": true,
            "size": 65536,
            "source_ref": "src/cpu.c:3296-3297, src/utils.c:3542",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "prism.rom",
            "note": "20 pages of 16K. Page map documented at src/cpu.c:3512-3528.",
            "required": true,
            "size": 327680,
            "source_ref": "src/cpu.c:3258-3259, src/utils.c:3538",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "prism_failsafe.rom",
            "note": "Loaded straight after prism.rom by prism_load_failsafe_rom(). The only ROM whose absence is fatal: the loader calls cpu_panic both when the file is missing and when the read is not 16384 bytes.",
            "required": true,
            "size": 16384,
            "source_ref": "src/machines/prism.h:61, src/machines/prism.c:581-590, src/cpu.c:3536",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxuno_bootloader.rom",
            "required": true,
            "size": 8126,
            "size_note": "Read caps at 8192 bytes and only errors when fewer than 1 byte is read, so no exact size check. get_rom_size returns 214 for ZX-Uno (src/utils.c:3534) but that value is unused on this path.",
            "source_ref": "src/cpu.c:3243-3244, src/cpu.c:3486-3490",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "zxevo_tsconf.rom",
            "required": true,
            "size": 524288,
            "source_ref": "src/cpu.c:3300-3301, src/utils.c:3544",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxevo_baseconf.rom",
            "required": true,
            "size": 524288,
            "source_ref": "src/cpu.c:3304-3305, src/utils.c:3546",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tbblue_loader.rom",
            "note": "FPGA loader, mirrored to 16K at src/cpu.c:3555. Bypassed when --tbblue-fast-boot-mode selects 48.rom instead.",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3262-3264, src/cpu.c:3553-3559, src/utils.c:3540",
            "system": "sinclair-zx-spectrum-next",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tbblue.mmc",
            "note": "SD card image carrying the Next system software. Assigned as MMC card 0 by the local-tbblue menu action; the emulator reports 'tbblue.mmc image not found' when absent.",
            "required": false,
            "size": 67108864,
            "size_note": "64 MB, so it needs storage: large_file once the image is acquired and uploaded as a release asset.",
            "source_ref": "src/menu/menu_items_storage.c:12144-12155, src/configure:1909",
            "system": "sinclair-zx-spectrum-next"
          },
          {
            "bundled": true,
            "name": "tk90x.rom",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3184-3185, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tk90xs.rom",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3188-3189, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tk95.rom",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3192-3193, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tk95es.rom",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3196-3197, src/utils.c:3528",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tc2048.rom",
            "required": true,
            "size": 16384,
            "source_ref": "src/cpu.c:3308-3309, src/utils.c:3528 (TC2048 falls under MACHINE_IS_SPECTRUM_16_48, src/cpu.h:543)",
            "system": "timex-tc2048",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ts2068.rom",
            "note": "Read as two blocks: 16384 into the main ROM table, then 8192 into the EX ROM table. Serves TS2068 and TC2068.",
            "required": true,
            "size": 24576,
            "source_ref": "src/cpu.c:3253-3255, src/cpu.c:3589-3600, src/utils.c:3548",
            "system": "timex-ts2068",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ts1500.rom",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3332-3334, src/utils.c:3564",
            "system": "timex-ts1500",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zx80.rom",
            "note": "Serves ZX80, TK80 and TK82. An 8192-byte file is accepted as-is so the ZX81 ROM can run on a ZX80 (src/cpu.c:3648).",
            "required": true,
            "size": 4096,
            "size_options": [
              4096,
              8192
            ],
            "source_ref": "src/cpu.c:3312-3317, src/cpu.c:3644-3654, src/utils.c:3560",
            "system": "sinclair-zx80",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zx81.rom",
            "note": "Serves ZX81, Timex TS1000, TK82C, TK83 and the Czerweny CZ 1000/1500 models.",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3319-3330, src/utils.c:3564",
            "system": "sinclair-zx81",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "tk85.rom",
            "note": "The TK85 test precedes the generic ZX81 test in get_rom_size, so 10240 wins over 8192.",
            "required": true,
            "size": 10240,
            "source_ref": "src/cpu.c:3338-3340, src/utils.c:3562",
            "system": "microdigital-tk85",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxpand_zx81.rom",
            "note": "ZXpand interface firmware. A short read disables ZXpand emulation.",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/zxpand.c:71, src/storage/zxpand.c:240, src/storage/zxpand.c:246-254",
            "system": "sinclair-zx81",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxpand_zx80.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/zxpand.c:72, src/storage/zxpand.c:240, src/storage/zxpand.c:246-254",
            "system": "sinclair-zx80",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ace.rom",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3344-3346, src/utils.c:3566",
            "system": "jupiter-ace",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "min_size": 16384,
            "name": "ql_js.rom",
            "required": true,
            "size": 49152,
            "size_note": "Reads up to 131072 bytes and errors only below 16384, so the check is a minimum rather than an exact size.",
            "source_ref": "src/cpu.c:3379-3380, src/cpu.c:3719-3728",
            "system": "sinclair-ql",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ql_jm.rom",
            "note": "JM release. Reachable through --romfile; the switch selects ql_js.rom.",
            "required": false,
            "size": 49152,
            "source_ref": "src/cpu.c:3383 (commented alternative), src/start.c:998",
            "system": "sinclair-ql"
          },
          {
            "bundled": true,
            "name": "Z88OZ47.rom",
            "required": true,
            "size": 524288,
            "size_note": "Reads up to 512K and errors only when nothing is read; z88_internal_rom_size is derived from the byte count, so any size is accepted.",
            "source_ref": "src/cpu.c:3350-3352, src/cpu.c:3675-3685",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "mk14.rom",
            "required": true,
            "size": 512,
            "source_ref": "src/cpu.c:3386-3387, src/utils.c:3578",
            "system": "science-of-cambridge-mk14",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "cpc464.rom",
            "note": "Serves CPC 464 and CPC 4128.",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3358-3363, src/utils.c:3570",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "cpc664.rom",
            "required": true,
            "size": 49152,
            "source_ref": "src/cpu.c:3366-3367, src/utils.c:3572",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "cpc6128.rom",
            "required": true,
            "size": 49152,
            "source_ref": "src/cpu.c:3370-3371, src/utils.c:3572",
            "system": "amstrad-cpc",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "pcw_boot.rom",
            "note": "Boot block the PCW pulls into RAM rather than a mapped ROM (src/cpu.c:3739). Serves PCW 8256 and 8512.",
            "required": true,
            "size": 275,
            "source_ref": "src/cpu.c:3390-3396, src/cpu.c:3740-3746, src/utils.c:3580",
            "system": "pcw",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "pcw_8x_boot1.dsk",
            "note": "LocoScript boot disc, inserted by pcw_boot_locoscript().",
            "required": false,
            "size": 194864,
            "source_ref": "src/machines/pcw.c:1431-1469",
            "system": "pcw"
          },
          {
            "bundled": true,
            "name": "pcw_8x_boot2.dsk",
            "note": "CP/M boot disc, inserted by pcw_boot_cpm() with boot end address 0x607.",
            "required": false,
            "size": 194864,
            "source_ref": "src/machines/pcw.c:1431-1474",
            "system": "pcw"
          },
          {
            "bundled": true,
            "name": "samcoupe.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3374-3376, src/utils.c:3574",
            "system": "sam-coupe",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "atomlite.rom",
            "note": "Replaces samcoupe.rom when Atom Lite emulation is on.",
            "required": false,
            "size": 32768,
            "source_ref": "src/cpu.c:3375, src/utils.c:3574",
            "system": "sam-coupe",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "samram.rom",
            "note": "SamRam interface firmware, opened from a path the user selects.",
            "required": false,
            "size": 32768,
            "source_ref": "src/storage/samram.c:46, src/storage/samram.c:482-484, src/storage/samram.c:497-500",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "samram_eng.rom",
            "note": "English SamRam firmware, same user-selected path.",
            "required": false,
            "size": 32768,
            "source_ref": "src/storage/samram.c:482-484, src/storage/samram.c:497-500",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "coleco.rom",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3275-3276, src/utils.c:3550",
            "system": "colecovision",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "sg1000.rom",
            "required": true,
            "size": 155,
            "size_note": "Nothing is read from this file. The SG-1000 branch is empty and the source comment states the file only has to exist for the open to succeed.",
            "source_ref": "src/cpu.c:3279-3280, src/cpu.c:3613-3617",
            "system": "sg-1000"
          },
          {
            "bundled": true,
            "name": "sms.rom",
            "required": true,
            "size": 8192,
            "source_ref": "src/cpu.c:3283-3284, src/utils.c:3554",
            "system": "sega-mastersystem",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "msx.rom",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3287-3288, src/utils.c:3556",
            "system": "msx",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "svi.rom",
            "note": "Serves SVI-318 and SVI-328.",
            "required": true,
            "size": 32768,
            "source_ref": "src/cpu.c:3291-3293, src/utils.c:3558",
            "system": "spectravideo",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "esxmmc085.rom",
            "note": "divMMC esxdos firmware, the default when --divmmc-rom is unset. Needed by --enable-esxdos-handler, which the ES-DE zxnext command line sets.",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/divmmc.c:45, src/storage/divmmc.c:95-103, src/storage/diviface.h:27, src/storage/diviface.c:758-765",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "esxide085.rom",
            "note": "divIDE esxdos firmware, the default when --divide-rom is unset.",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/divide.c:40, src/storage/divide.c:93, src/storage/diviface.h:27, src/storage/diviface.c:758-765",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "unodos3.rom",
            "note": "divMMC firmware substituted for esxmmc085.rom on Chloe machines.",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/divmmc.c:96-99, src/storage/diviface.h:27, src/storage/diviface.c:758-765",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "trdos.rom",
            "note": "Beta Disk / TR-DOS firmware.",
            "required": false,
            "size": 16384,
            "source_ref": "src/storage/betadisk.c:67, src/storage/betadisk.c:400, src/storage/betadisk.h:27, src/storage/betadisk.c:409-416",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "if1-v1.rom",
            "note": "Interface 1 firmware version 1, selected when if1_rom_version is 1. The load accepts 8192 or 16384 bytes and disables Interface 1 emulation otherwise.",
            "required": false,
            "size": 8192,
            "size_options": [
              8192,
              16384
            ],
            "source_ref": "src/storage/if1.c:57, src/storage/if1.c:336-340, src/storage/if1.c:369, src/storage/if1.c:381",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "if1-v2.rom",
            "note": "Interface 1 firmware version 2, the default branch of if1_return_rom_name().",
            "required": false,
            "size": 8192,
            "size_options": [
              8192,
              16384
            ],
            "source_ref": "src/storage/if1.c:58, src/storage/if1.c:336-340, src/storage/if1.c:369, src/storage/if1.c:381",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "hilow_datadrive.rom",
            "note": "HiLow Data Drive firmware.",
            "required": false,
            "size": 8192,
            "source_ref": "src/storage/hilow_datadrive.h:27, src/storage/hilow_datadrive.h:30, src/storage/hilow_datadrive.c:1722",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxmmcplus.flash",
            "note": "ZXMMC+ flash ROM image, the default for --zxmmcplus-flash-file.",
            "required": false,
            "size": 1048576,
            "size_note": "The image holds ROM and RAM together, so the check is ZXMMCPLUS_FLASHROM_SIZE + ZXMMCPLUS_RAM_SIZE, not the 512K ROM constant alone.",
            "source_ref": "src/storage/zxmmcplus.h:30, src/start.c:1690, src/storage/zxmmcplus.c:756, src/storage/zxmmcplus.c:768-775",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "zxuno.flash",
            "note": "ZX-Uno SPI flash image, loaded by zxuno_load_spi_flash() right after the bootloader. Default for --zxunospifile. ZXUNO_SPI_SIZE is 4096 KB.",
            "required": false,
            "size": 4194304,
            "source_ref": "src/machines/zxuno.h:29, src/machines/zxuno.h:80, src/start.c:1712, src/cpu.c:3494, src/machines/zxuno.c:1198-1205",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mf1.rom",
            "note": "Multiface One. The file selector rejects anything that is not exactly 8 KB.",
            "required": false,
            "size": 8192,
            "source_ref": "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mf128.rom",
            "note": "Multiface 128.",
            "required": false,
            "size": 8192,
            "source_ref": "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mf3.rom",
            "note": "Multiface 3.",
            "required": false,
            "size": 8192,
            "source_ref": "src/copy_interfaces/multiface.c:224, src/copy_interfaces/multiface.c:232-242, src/menu/menu_items.c:41985-41988",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "specmate.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/copy_interfaces/specmate.h:27, src/copy_interfaces/specmate.h:29, src/copy_interfaces/specmate.c:189-205",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "phoenix3.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/phoenix.h:27, src/copy_interfaces/phoenix.h:29, src/copy_interfaces/phoenix.c:142",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "defcon.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/defcon.h:27, src/copy_interfaces/defcon.h:29, src/copy_interfaces/defcon.c:139",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "dinamid3.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/copy_interfaces/dinamid3.h:27, src/copy_interfaces/dinamid3.h:29, src/copy_interfaces/dinamid3.c:142",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "interface007.rom",
            "required": false,
            "size": 2048,
            "source_ref": "src/copy_interfaces/interface007.h:27, src/copy_interfaces/interface007.h:29, src/copy_interfaces/interface007.c:143",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ramjet2.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/ramjet.h:27, src/copy_interfaces/ramjet.h:28-30, src/copy_interfaces/ramjet.c:165",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "ramjet3.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/ramjet.h:28, src/copy_interfaces/ramjet.c:165",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "transtape2.rom",
            "note": "Selected when transtape_version is 2.",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/transtape.h:27, src/copy_interfaces/transtape.h:31, src/copy_interfaces/transtape.c:354, src/copy_interfaces/transtape.c:360",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "transtape3-vC.rom",
            "note": "Default for Transtape version 3.",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/transtape.h:28, src/copy_interfaces/transtape.c:355, src/copy_interfaces/transtape.c:360",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "transtape3-vA.rom",
            "note": "Revision A, reached through the user-set transtape_rom_filename and loaded by the same size-checked path as the defaults.",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/transtape.c:349-350, src/copy_interfaces/transtape.c:360-375",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "transtape3-vB.rom",
            "note": "Revision B, reached through the user-set transtape_rom_filename.",
            "required": false,
            "size": 16384,
            "source_ref": "src/copy_interfaces/transtape.c:349-350, src/copy_interfaces/transtape.c:360-375",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "hilow_barbanegra.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/copy_interfaces/hilow_barbanegra.h:27, src/copy_interfaces/hilow_barbanegra.h:30, src/copy_interfaces/hilow_barbanegra.c:282",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mhpokeador.rom",
            "required": false,
            "size": 1024,
            "source_ref": "src/copy_interfaces/mhpokeador.h:27, src/copy_interfaces/mhpokeador.h:39, src/copy_interfaces/mhpokeador.c:264",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mhpokeador-transfer.rom",
            "required": false,
            "size": 1024,
            "source_ref": "src/copy_interfaces/mhpokeador.h:28, src/copy_interfaces/mhpokeador.c:264",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mhpokeador-salvapan.rom",
            "required": false,
            "size": 1024,
            "source_ref": "src/copy_interfaces/mhpokeador.h:29, src/copy_interfaces/mhpokeador.c:264",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "mantransfev3.bin",
            "note": "Spectrum program the emulator injects to dump RAM to tape.",
            "required": false,
            "size": 200,
            "source_ref": "src/menu/menu_items.c:41529-41545",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "gs105a.rom",
            "note": "General Sound firmware v1.05a. GS_ROM_SIZE is in KB and the read is GS_ROM_SIZE*1024.",
            "required": false,
            "size": 32768,
            "source_ref": "src/soundchips/gs.h:34, src/soundchips/gs.h:29, src/soundchips/gs.c:525-545",
            "system": "sinclair-zx-spectrum",
            "validation": [
              "size"
            ]
          },
          {
            "bundled": true,
            "name": "gs104.rom",
            "note": "General Sound firmware v1.04. Shipped alongside gs105a.rom, but GS_ROM_NAME is fixed and there is no option to point the loader elsewhere, so it is usable only in place of gs105a.rom.",
            "required": false,
            "size": 32768,
            "source_ref": "src/configure:1909",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "80-lec.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/start.c:998, src/cpu.c:3410-3413",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "tk90x_v1br.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/ALTERNATEROMS:97, src/start.c:998, src/cpu.c:3410-3413",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "tk90x_v2es.rom",
            "note": "Corrected TK90X ROM.",
            "required": false,
            "size": 16384,
            "source_ref": "src/ALTERNATEROMS:98, src/start.c:998, src/cpu.c:3410-3413",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "tk95es_modif.rom",
            "note": "TK95 Spanish ROM with message and symbol fixes by Rodolfo Edison Guerra.",
            "required": false,
            "size": 16384,
            "source_ref": "src/ALTERNATEROMS:101-106, src/start.c:998, src/cpu.c:3410-3413",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "Z88OZ431.rom",
            "required": false,
            "size": 524288,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88OZ441.rom",
            "required": false,
            "size": 524288,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88OZ45.rom",
            "required": false,
            "size": 524288,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88OZ46.rom",
            "required": false,
            "size": 524288,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88UK220.rom",
            "required": false,
            "size": 131072,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88UK300.rom",
            "required": false,
            "size": 131072,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "Z88UK400.rom",
            "required": false,
            "size": 131072,
            "source_ref": "src/ALTERNATEROMS:83-92, src/start.c:998",
            "system": "cambridge-z88"
          },
          {
            "bundled": true,
            "name": "aszmice07.rom",
            "note": "ASZMIC E07 replacement ROM with assembler and debugger. The 4K image is stored twice to reach 8K.",
            "path": "alternate_roms/aszmice07.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/ALTERNATEROMS:4-5, src/start.c:998",
            "system": "sinclair-zx81"
          },
          {
            "bundled": true,
            "name": "sp-rom.rom",
            "note": "Comprocsys SP ROM add-on card, loaded at address 2000H.",
            "path": "alternate_roms/sp-rom.rom",
            "required": false,
            "size": 4096,
            "source_ref": "src/ALTERNATEROMS:7-9, src/start.c:998",
            "system": "sinclair-zx81"
          },
          {
            "bundled": true,
            "name": "ace.rom",
            "note": "Jupiter Ace ROM patched by Dutra Lacerda, distinct from the root ace.rom.",
            "path": "alternate_roms/ace.rom",
            "required": false,
            "size": 8192,
            "source_ref": "src/ALTERNATEROMS:11-12, src/start.c:998",
            "system": "jupiter-ace",
            "variant_group": "jupiter-ace-rom"
          },
          {
            "bundled": true,
            "name": "opense.rom",
            "note": "OpenSE BASIC 3.1.2 for the 48K.",
            "path": "alternate_roms/opense.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/ALTERNATEROMS:14-15, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "sebasic4_rom1.rom",
            "note": "SE BASIC 4.1.0 standalone ROM 1 for the 48K.",
            "path": "alternate_roms/sebasic4_rom1.rom",
            "required": false,
            "size": 16384,
            "source_ref": "src/ALTERNATEROMS:18-19, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "derby_p_32K.rom",
            "note": "Derby+ for 128K machines with 32K of ROM.",
            "path": "alternate_roms/derby_p_32K.rom",
            "required": false,
            "size": 32768,
            "source_ref": "src/ALTERNATEROMS:21-23, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "derby_pp_64K.rom",
            "note": "Derby++ for 128K machines with 64K of ROM.",
            "path": "alternate_roms/derby_pp_64K.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/ALTERNATEROMS:21-23, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus2c.rom",
            "note": "Unofficial +2C ROM by Andrew Owen, for 128K/+2.",
            "path": "alternate_roms/plus2c.rom",
            "required": false,
            "size": 32768,
            "source_ref": "src/ALTERNATEROMS:40-41, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus2b.rom",
            "note": "+2B ROM set for +2A/+3: 128 editor, 48K BASIC, BBC BASIC, OpenSE BASIC 3.1.1.",
            "path": "alternate_roms/plus2b.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/ALTERNATEROMS:46-76, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus3e_mmcen3eE.rom",
            "note": "+3e v1.38 English for MMC. Resolved by name through find_sharedfile for the +2e/+3e MMC machine preset.",
            "path": "alternate_roms/plus3e_mmcen3eE.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/menu/menu_items.c:30627-30630, src/ALTERNATEROMS:26-30",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus3e_mmces3eE.rom",
            "note": "+3e v1.38 Spanish for MMC.",
            "path": "alternate_roms/plus3e_mmces3eE.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/ALTERNATEROMS:26-30, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus3e_sm8en3eE.rom",
            "note": "+3e v1.38 English for simple 8-bit IDE.",
            "path": "alternate_roms/plus3e_sm8en3eE.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/ALTERNATEROMS:32-36, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          },
          {
            "bundled": true,
            "name": "plus3e_sm8es3eE.rom",
            "note": "+3e v1.38 Spanish for simple 8-bit IDE.",
            "path": "alternate_roms/plus3e_sm8es3eE.rom",
            "required": false,
            "size": 65536,
            "source_ref": "src/ALTERNATEROMS:32-36, src/start.c:998",
            "system": "sinclair-zx-spectrum"
          }
        ],
        "notes": "Multi-machine Sinclair emulator. Every ROM is read from disk at run time;\nnone is compiled into the binary. `rom_load` (src/cpu.c:3158-3751) maps\n`current_machine_type` to a filename through a switch, then resolves it with\n`find_sharedfile` (src/utils.c:1310-1348), which searches the current directory,\n`../Resources/`, `INSTALL_PREFIX/share/zesarux/` and the directory holding the\nbinary, in that order.\n\nZEsarUX ships these files and installs them next to the binary: `src/configure:1909`\nlists `*.rom`, `zxuno.flash`, `zxmmcplus.flash`, `tbblue.mmc`, `pcw_8x_boot*dsk`,\n`mantransfev3.bin` and `alternate_roms` in COMMONFILES. A normal install\ntherefore already carries every entry below, which is why they are marked\n`bundled: true`.\n\nA missing machine ROM is not fatal: `rom_load` logs an error and returns\n(src/cpu.c:3420-3428), the panic having been removed deliberately. The machine then\nruns on uninitialised memory, so the ROMs the switch names are marked required\nfor the machine they serve. The one hard failure is `prism_failsafe.rom`, which\n`prism_load_failsafe_rom` loads through its own path and which calls `cpu_panic`\nwhen missing or short (src/machines/prism.c:581-590).\n\nThe emulator verifies no hash on any of these files. It does check size: the\nmachine ROMs are compared against `get_rom_size` (src/utils.c:3514-3588) and the\ninterface ROMs against their own `*_ROM_SIZE` constants, with a mismatch logged\nas an error. `validation: [size]` is set only where the code makes that\ncomparison.\n\n`--romfile` (src/start.c:998) overrides the machine ROM with any file the user\npicks (src/cpu.c:3410-3413); the ROMs under `alternate_roms/` and the extra\nvariants in the install root exist for that path and are documented in the\nshipped src/ALTERNATEROMS file. Interface ROMs are equally overridable\n(`--divide-rom`, `--divmmc-rom`, `--dandanator-rom`, `--ifrom-rom`,\n`--kartusho-rom`), and each falls back to the bundled default named here.\n\nES-DE drives ZEsarUX for its `zxnext` system with `--machine tbblue\n--tbblue-fast-boot-mode --enable-esxdos-handler`. Fast boot swaps\n`tbblue_loader.rom` for `48.rom` (src/cpu.c:3263-3264), and the esxdos handler needs\nthe divMMC firmware `esxmmc085.rom`, so that path loads `48.rom`, `esxmmc085.rom`\nand the `tbblue.mmc` card image rather than a dedicated Next ROM.\n\nZEsarUX also loads UI and bundled-software resources through the same\n`find_sharedfile` path: `keyboards/*.bmp` on-screen keyboard art\n(src/menu/menu_items.c:19210, 21731, 21752), `z88_shortcuts.bmp`\n(src/video/screen.c:11078) and the `my_soft/` homebrew collection\n(src/menu/menu_items.c:32146, 32205; src/menu/menu_items_storage.c:582). They are\napplication resources rather than system firmware and carry no entry below.\n`PrismChime.bin` sits in the source tree but no code reads it and COMMONFILES\ndoes not install it.\n",
        "profiled_date": "2026-08-10",
        "source": "https://github.com/chernandezba/zesarux",
        "source_commit": "ffccfcd819654d6237b6e1c1df7e261a22e8b728",
        "systems": [
          "sinclair-zx-spectrum",
          "sinclair-zx-spectrum-next",
          "sinclair-zx80",
          "sinclair-zx81",
          "sinclair-ql",
          "cambridge-z88",
          "jupiter-ace",
          "timex-ts1500",
          "timex-tc2048",
          "timex-ts2068",
          "microdigital-tk85",
          "amstrad-cpc",
          "pcw",
          "sam-coupe",
          "colecovision",
          "sg-1000",
          "sega-mastersystem",
          "msx",
          "spectravideo",
          "science-of-cambridge-mk14"
        ],
        "type": "standalone",
        "upstream": "https://github.com/chernandezba/zesarux",
        "verification": "existence"
      }
    }
  ],
  "kind": "emulators",
  "schema_version": 1
}
