# emulators

id: sdl2trs
name: SDL2TRS
type: standalone
classification: community_fork
source: https://gitlab.com/jengun/sdltrs
upstream: http://sdltrs.sourceforge.net
source_commit: 4ba6cd076fd0c966c0dcb384663211cf691d6649
profile_json:
{"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
name: SDLPAL
type: libretro
classification: official_port
source: https://github.com/sdlpal/sdlpal
upstream: https://github.com/sdlpal/sdlpal
source_commit: a2e13e5ff83cf33448b3de3b8b612c07e28eacd7
profile_json:
{"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
name: shadps4
type: standalone
source: https://github.com/shadps4-emu/shadPS4
upstream: https://github.com/shadps4-emu/shadPS4
source_commit: 891612c865f84fabbf6218e57278ce9e5a7722f0
profile_json:
{"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
name: SheepShaver
type: standalone
classification: other
source: https://github.com/cebix/macemu
upstream: https://github.com/cebix/macemu
source_commit: 96e512bd6376e78a2869f16dcc8a9028bce5ee72
profile_json:
{"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
name: SimCoupe
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-simcoupe
upstream: https://github.com/simonowen/simcoupe
source_commit: c28046241ac6a4d79e55326b6e354dc02f92fa34
profile_json:
{"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
name: simple64
type: standalone
classification: community_fork
source: https://github.com/simple64/simple64
upstream: https://github.com/simple64/simple64
source_commit: d8c969c7b932e3d76e6a25549d76348839dbaefd
profile_json:
{"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
name: sixtyforce
type: standalone
classification: embedded_hle
source: https://sixtyforce.com/
upstream: https://sixtyforce.com/
profile_json:
{"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
name: skyemu
type: standalone + libretro
classification: official_port
source: https://github.com/skylersaleh/SkyEmu/blob/v5/src/libretro.c
upstream: https://github.com/skylersaleh/SkyEmu
source_commit: 01516d6798e3652b583e6a366085bb51c43b528d
profile_json:
{"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
name: Skyline
type: standalone
classification: other
source: https://github.com/skyline-emu/skyline
upstream: https://github.com/skyline-emu/skyline
source_commit: dc20a615275f66bee20a4fd851ef0231daca4f14
profile_json:
{"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
name: SMS Plus GX
type: standalone + libretro
classification: enhanced_fork
source: https://github.com/libretro/smsplus-gx
upstream: https://github.com/ekeeke/smsplus-gx
source_commit: c642bbd0680b5959180a420036108893d0aec961
profile_json:
{"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
name: snes9x
type: libretro
classification: official_port
source: https://github.com/libretro/snes9x
upstream: https://github.com/snes9xgit/snes9x
source_commit: ed750a49d0583a8d8fed40c50239efd13a86dfd3
profile_json:
{"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
name: Snes9x EX+
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: https://github.com/snes9xgit/snes9x
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"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
name: Snes9x 2002
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/snes9x2002
upstream: https://github.com/snes9xgit/snes9x
source_commit: a0709ec7dcd6de2fbebb43106bd757b649e3b7cf
profile_json:
{"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
name: Snes9x 2005
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/snes9x2005
upstream: https://github.com/ShadauxCat/CATSFC
source_commit: 74d871db9b4dba6dbe6c5ecebc88cbf255be5349
profile_json:
{"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
name: Snes9x 2005 Plus
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/snes9x2005
upstream: https://github.com/ShadauxCat/CATSFC
source_commit: 74d871db9b4dba6dbe6c5ecebc88cbf255be5349
profile_json:
{"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
name: Snes9x 2010
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/snes9x2010
upstream: https://github.com/snes9xgit/snes9x
source_commit: 214cb51f22ddec66952c304fe1e5e01fd83a9ac6
profile_json:
{"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
name: solarus
type: standalone
classification: game_engine
source: https://gitlab.com/solarus-games/solarus
upstream: https://gitlab.com/solarus-games/solarus
source_commit: c817554d21e4fcbf726e74b0e402f34d95286a9e
profile_json:
{"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
name: Speccy
type: standalone
classification: other
source: https://fms.komkon.org/Speccy/
upstream: closed-source
profile_json:
{"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
name: SquirrelJME
type: libretro
classification: official_port
source: https://github.com/SquirrelJME/SquirrelJME
upstream: https://github.com/SquirrelJME/SquirrelJME
source_commit: 72a06de002d720ec35c299ce7379273f0420d330
profile_json:
{"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
name: SSF
type: standalone
classification: other
source: https://github.com/shimazzz/SEGASaturnEmulator-SSF
upstream: closed-source
profile_json:
{"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
name: Starboard
type: standalone
classification: other
source: https://github.com/get-starboard/starboard
upstream: closed-source
profile_json:
{"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
name: Stella
type: alias
source: https://github.com/libretro/stella-libretro
profile_json:
{"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
name: Stella 2014
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/stella2014-libretro
upstream: https://github.com/stella-emu/stella
source_commit: 4a7da82595d27b8df7af1ecb467a64b642a41bc9
profile_json:
{"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
name: Stella 2023
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/stella2023
upstream: https://github.com/stella-emu/stella
source_commit: 878a9c8d5f03ef0b7cd190b5713d6bf31c48df38
profile_json:
{"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
name: Stone Soup
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/crawl-ref
upstream: https://github.com/crawl/crawl
source_commit: cc2530f377a3a5d686d4b6a360d88b01de0fbc59
profile_json:
{"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
name: SUPER3
type: standalone
classification: community_fork
source: https://github.com/izzy2lost/Super3
upstream: https://github.com/trzy/Supermodel
source_commit: b435c80a88fd496d4a9858be0681260e84342c85
profile_json:
{"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
name: Super Bros War
type: libretro
classification: game_engine
source: https://github.com/libretro/superbroswar-libretro
upstream: https://github.com/mmatyas/supermariowar
source_commit: ae824f626ad80c8b7ee848698b3d1dcebe9a5ccb
profile_json:
{"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
name: Supermodel
type: standalone
source: https://github.com/trzy/Supermodel
upstream: https://github.com/trzy/Supermodel
source_commit: d6dec3dcf0922459801907950d966e5767c674de
profile_json:
{"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
name: Supermodel Dojo
type: standalone
classification: enhanced_fork
source: https://github.com/blueminder/supermodel-dojo
upstream: https://github.com/trzy/Supermodel
source_commit: ff8cde225298fe5c4ad47fba3c581b2cd19ffc41
profile_json:
{"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
name: SUPER ZSNES
type: standalone
classification: other
source: https://www.zsnes.com
upstream: https://www.zsnes.com
profile_json:
{"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
name: Suyu
type: standalone
classification: community_fork
source: https://github.com/suyu-emu/suyu
upstream: https://github.com/suyu-emu/suyu
profile_json:
{"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
name: Swan.emu
type: standalone
classification: community_fork
source: https://github.com/Rakashazi/emu-ex-plus-alpha
upstream: https://mednafen.github.io/
source_commit: 1c12fac5ce49badaadff2e2f210dcc30b89f4943
profile_json:
{"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
name: swanstation
type: libretro
classification: community_fork
source: https://github.com/libretro/swanstation
upstream: https://github.com/stenzek/duckstation
source_commit: 5430a4a53b89fa5827c97b84ada29d23317245bc
profile_json:
{"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
name: SWF Player
type: standalone
classification: launcher
source: https://play.google.com/store/apps/details?id=com.issess.flashplayer
upstream: closed-source
profile_json:
{"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
name: Syobon Action
type: libretro
classification: community_fork
source: https://github.com/iyzsong/syobonaction-libretro
upstream: https://github.com/akemin-dayo/OpenSyobonAction
source_commit: 792c40cb590bcc7286cf720b5fb85807082b534e
profile_json:
{"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
name: TamaLIBretro
type: libretro
classification: community_fork
source: https://github.com/celerizer/tamalibretro
upstream: https://github.com/jcrona/tamalib
source_commit: ec83dc1a5ea8bdbcd02cee81779c6dbe0e996ed2
profile_json:
{"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
name: TempGBA
type: libretro
classification: community_fork
source: https://github.com/libretro/TempGBA-libretro
upstream: https://github.com/Nebuleon/ReGBA
source_commit: b0c2652797a4c11f3edd30f9e59a77a5b88ce5fb
profile_json:
{"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
name: test
type: test
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
profile_json:
{"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
name: test_netplay
type: libretro
classification: pure_libretro
profile_json:
{"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
name: testaudio_callback
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testaudio_no_callback
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testaudio_playback_wav
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testgl
type: test
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
profile_json:
{"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
name: testgl_compute_shaders
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testgl_ff
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testinput_buttontest
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testretroluxury
type: libretro
classification: pure_libretro
source: https://github.com/libretro/retroluxury
upstream: https://github.com/leiradel/retroluxury
source_commit: fdcd94fe4099735edcbea638760da3f2297bc520
profile_json:
{"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
name: testsw
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testsw_vram
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: testvulkan
type: test
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
profile_json:
{"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
name: testvulkan_async_compute
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-samples
upstream: https://github.com/libretro/libretro-samples
source_commit: bce193bc1b8c9a3da43b2ead0158a69e28b37ed8
profile_json:
{"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
name: TGB Dual
type: libretro
classification: community_fork
source: https://github.com/libretro/tgbdual-libretro
upstream: http://gigo.retrogames.com/download.html#tgb-dual
source_commit: 933707c0ba8f12360f6d79712f735a917713709a
profile_json:
{"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
name: Theodore
type: libretro
classification: pure_libretro
source: https://github.com/Zlika/theodore
upstream: http://dcmoto.free.fr/
source_commit: 242e932d838284a61b81aa7641c60d813934025e
profile_json:
{"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
name: The Powder Toy
type: libretro
classification: pure_libretro
source: https://github.com/libretro/ThePowderToy
upstream: https://github.com/ThePowderToy/The-Powder-Toy
source_commit: cb3cd4c2e5beddb98b34e6b800fa24e8f96322d9
profile_json:
{"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
name: ti99sim
type: standalone
source: https://github.com/christianhaitian/ti99sim
upstream: https://www.mrousseau.org/programs/ti99sim/
source_commit: e3608541943b5258afe45b74e3f78e723df1fcbd
profile_json:
{"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
name: TIC-80
type: libretro
classification: game_engine
source: https://github.com/libretro/TIC-80
upstream: https://github.com/nesbox/TIC-80
source_commit: 6412f72d0f4725c153ce3d245729b829e713542e
profile_json:
{"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
name: trident
type: libretro
classification: community_fork
source: https://github.com/DanAlexMorton/3dsTrident
upstream: https://github.com/wheremyfoodat/Panda3DS
source_commit: b97b0befa326105e181838bc6fa11c546de8294d
profile_json:
{"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
name: Triforce
type: standalone
classification: enhanced_fork
source: https://github.com/REG-Linux/dolphin-triforce
upstream: https://github.com/dolphin-emu/dolphin
source_commit: 5c456e8ff0da0235be2cf1d55ba7bb2115b0cae2
profile_json:
{"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
name: tsugaru
type: standalone
source: https://github.com/captainys/TOWNSEMU
upstream: https://github.com/captainys/TOWNSEMU
source_commit: 8ecfa27759919586e33f674038ed73d36e56c2b6
profile_json:
{"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
name: TyrQuake
type: libretro
classification: game_engine
source: https://github.com/libretro/tyrquake
upstream: http://disenchant.net/tyrquake/
source_commit: 471f2a72d2a7b0416f6a21eb945e5af831df06a4
profile_json:
{"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
name: uae4arm
type: libretro
classification: community_fork
source: https://github.com/libretro/uae4arm-libretro
upstream: https://github.com/PandTomB/uae4arm
source_commit: 16f63d30b98aa8070a996f25f64df6dfff82938b
profile_json:
{"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
name: UME 2015
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/mame2015-libretro
upstream: https://github.com/mamedev/mame/tree/mame0159
source_commit: 283e04b03c121db9be12632d6bad2fc3e8707248
profile_json:
{"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
name: MicroW8
type: libretro
classification: pure_libretro
source: https://github.com/libretro/uw8-libretro
upstream: https://github.com/exoticorn/microw8
source_commit: 2dced6e1b990222033e269d5fb269b2e2f9ee543
profile_json:
{"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
name: UXN
type: libretro
classification: community_fork
source: https://codeberg.org/iyzsong/uxn-libretro
upstream: https://github.com/chmod222/zuxn
source_commit: 65e28e59929a9946916221337397808a3d8c67a3
profile_json:
{"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
name: uzem
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-uzem
upstream: https://github.com/Uzebox/uzebox
source_commit: cd6004ea143435cfdb6b12e7c6779dab499f7829
profile_json:
{"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
name: VaporSpec
type: libretro
classification: official_port
source: https://github.com/minkcv/vm
upstream: https://github.com/minkcv/vm
source_commit: 02a3345cc9b5cb38c529eabe6967b25a95501559
profile_json:
{"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
name: VBA-M
type: alias
profile_json:
{"alias_of": "vbam", "emulator": "VBA-M", "files": [], "note": "Legacy profile key retained for platform and buildbot compatibility.", "type": "alias"}


id: vba_next
name: VBA-Next
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/vba-next
upstream: https://github.com/visualboyadvance-m/visualboyadvance-m
source_commit: 2b96fd3a77025f3083daf61126b1852d5e0eace7
profile_json:
{"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
name: VBA-M
type: standalone + libretro
classification: official_port
source: https://github.com/libretro/vbam-libretro
upstream: https://github.com/visualboyadvance-m/visualboyadvance-m
source_commit: e8b2875d6cad10fc3c7c9f57bb5f1acc324d7c10
profile_json:
{"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
name: vecx
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-vecx
upstream: https://github.com/jhawthorn/vecx
source_commit: eacee1f6f029688b043ed802cece29dd3c320e21
profile_json:
{"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
name: veesem
type: standalone
classification: other
source: https://github.com/sp1187/veesem
upstream: https://github.com/sp1187/veesem
source_commit: 42fb8f07e7418f16ccfb7364127aef2217dda641
profile_json:
{"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
name: VeMUlator
type: libretro
classification: official_port
source: https://github.com/libretro/vemulator-libretro
upstream: closed-source Android app (removed from Google Play ~2020)
source_commit: 45d7556667549bb1c1b84d27fbffb7d2a633f5d3
profile_json:
{"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
name: VICE
type: libretro
source: https://github.com/libretro/vice-libretro
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE x128
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: c8c242db75a559246d6d51017e6dd4ecd75d6a9f
profile_json:
{"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
name: VICE x64
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE x64dtv
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: c8c242db75a559246d6d51017e6dd4ecd75d6a9f
profile_json:
{"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
name: VICE x64sc
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: c8c242db75a559246d6d51017e6dd4ecd75d6a9f
profile_json:
{"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
name: VICE xcbm2
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE xcbm5x0
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE xpet
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE xplus4
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: 8818c3a39146b9a26df23a1e4880b4420f93a255
profile_json:
{"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
name: VICE xscpu64
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: c8c242db75a559246d6d51017e6dd4ecd75d6a9f
profile_json:
{"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
name: VICE xvic
type: libretro
classification: community_fork
source: https://github.com/libretro/vice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: c8c242db75a559246d6d51017e6dd4ecd75d6a9f
profile_json:
{"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
name: vidtest
type: test
classification: pure_libretro
source: https://github.com/schellingb/vidtest_libretro
profile_json:
{"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
name: Vircon32
type: libretro
classification: official_port
source: https://github.com/vircon32/vircon32-libretro
upstream: https://github.com/vircon32/ComputerSoftware
source_commit: 3a1b4ae3fb75c1216fab9cc8715e9a122c461a3a
profile_json:
{"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
name: Virtual Virtual Boy
type: standalone
classification: other
source: https://github.com/SupernaviX/vvb
upstream: https://github.com/SupernaviX/vvb
source_commit: 0bf230bced628d78ff2c149baaf16f6fb8388cec
profile_json:
{"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
name: Virtual Jaguar
type: libretro
classification: community_fork
source: https://github.com/libretro/virtualjaguar-libretro
upstream: http://shamusworld.gotdns.org/git/virtualjaguar
source_commit: 48096c1f6f8b98cfff048a5cb4e6a86686631072
profile_json:
{"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
name: VirtualXT
type: libretro
classification: pure_libretro
source: https://codeberg.org/virtualxt/virtualxt
upstream: https://codeberg.org/virtualxt/virtualxt
source_commit: ed177f5fb4f54d099bc217281930265ae1de9eca
profile_json:
{"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
name: visual-pinball
type: standalone
classification: game_engine
source: https://github.com/vpinball/vpinball
upstream: https://github.com/vpinball/vpinball
source_commit: a8087ea9a3be7208c7def16045e4b5cc0330f80c
profile_json:
{"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
name: Vita3K
type: standalone
source: https://github.com/Vita3K/Vita3K
upstream: https://github.com/Vita3K/Vita3K
source_commit: 80075ce556a9d5c2c8fbe27f70625fb539d3bbba
profile_json:
{"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
name: vitaQuakeII
type: libretro
classification: official_port
source: https://github.com/libretro/vitaquake2
upstream: https://github.com/Rinnegatamante/vitaQuakeII
source_commit: 34f088801e936f222f81e84f7d53d8620b2a9479
profile_json:
{"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
name: vitaQuakeIII
type: libretro
classification: community_fork
source: https://github.com/libretro/vitaquake3
upstream: https://github.com/ioquake/ioq3
source_commit: 198e9959e2d5b692a592aa6fd7537e9a00869c42
profile_json:
{"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
name: vitavoyager
type: libretro
classification: community_fork
source: https://github.com/libretro/vitavoyager
upstream: https://github.com/zturtleman/lilium-voyager
source_commit: 58b70dd7ea891c2e8ddc37d03a5d58116b0ea118
profile_json:
{"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
name: WASM-4
type: libretro
classification: game_engine
source: https://github.com/aduros/wasm4
upstream: https://github.com/aduros/wasm4
source_commit: 59107843a639c3fd17e15dfdf7bbe65360f3080e
profile_json:
{"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
name: X Millennium
type: libretro
classification: community_fork
source: https://github.com/libretro/xmil-libretro
upstream: http://amethyst.yui.ne.jp/svn/x1/xmil/trunk/
source_commit: 3e7960a433c3bca820f8b8f5511a2b92bd666829
profile_json:
{"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
name: X1 BOX
type: standalone
classification: community_fork
source: https://github.com/izzy2lost/xemu
upstream: https://github.com/xemu-project/xemu
source_commit: 3ed53f6843ac41147287468d996dfa939b40ad00
profile_json:
{"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
name: x16emu
type: standalone
upstream: https://github.com/X16Community/x16-emulator
source_commit: 49b1fbd6d058cc8c6f126ed86d9b6ccfaaa8335b
profile_json:
{"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
name: x64sdl
type: libretro
classification: community_fork
source: https://github.com/r-type/sdlvice-libretro
upstream: https://sourceforge.net/projects/vice-emu/
source_commit: baaaeed97ce1c0a07ed78e3e155cfbd6f508b472
profile_json:
{"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
name: Xemu
type: standalone
source: https://github.com/xemu-project/xemu
source_commit: 295c13e972338879ff74a3e9f0dd57b35e148c60
profile_json:
{"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"}


