# emulators

id: nethersx2-turnip-classic
name: NetherSX2-Turnip Classic
type: standalone
classification: community_fork
source: https://github.com/nckstwrt/NetherSX2-Turnip
upstream: https://github.com/Trixarian/AetherSX2
source_commit: 8e17e584884e19b0a912f1988730d576d6d5aa84
profile_json:
{"author": "nckstwrt", "bios_directory": "bios/", "bios_mode": "agnostic", "core_classification": "community_fork", "core_version": "2.2n-3668-Turnip-v0.7", "cores": ["nethersx2-turnip-classic", "NetherSX2-Turnip-Classic", "NETHERSX2-TURNIP-CLASSIC"], "display_name": "Sony - PlayStation 2 (NetherSX2-Turnip Classic)", "emulator": "NetherSX2-Turnip Classic", "exclusion_note": "Left out are the libraries the package carries for the dynamic linker rather than for its own code. libc.so, libm.so, libdl.so, ld-android.so, liblog.so and libc++_shared.so sit beside the drivers so the namespace built over that directory can satisfy their DT_NEEDED, and no code path names any of them; android_linker_ns.o is a relocatable object nothing can open. libc++.so and libsync.so are named in the fallback and promote arrays but the package carries neither, and the promote call passes RTLD_NOLOAD, which never reads from disk. libfile_redirect_hook.so and libgsl_alloc_hook.so are reachable only under feature flags the shim never sets, the only flag passed being the custom driver one. The system Vulkan loader and libandroid.so come from the platform. Also left out are the assets no code path on this platform opens: game_controller_db.txt, whose name appears in neither the library nor the dex, pad input arriving through handleControllerButtonEvent and handleControllerAxisEvent; the seven Direct3D shader sources under shaders/dx11; icons/AppIconLarge.png and cover-placeholder.png; fonts/Roboto-Regular-copyright and sounds/achievements/README.txt, which are licence and credit texts; and dexopt/baseline.prof and baseline.profm, which the Android runtime consumes. Everything the emulator produces for itself under the data directory is out as well: memory cards as Mcd<nnn>.ps2 and Mcd-Multitap<n>-Slot<nn>.ps2, DEV9hdd.raw for the internal disk, save states, screenshots, covers, texture dumps, playtime.dat, emulog.txt, imgui.ini, per-game settings, input profiles, the gamedb and gl_programs caches, and vulkan_shim.log. ref: VulkanShim2/vulkan_shim.cpp:1099-1105, VulkanShim2/vulkan_shim.cpp:1150,\n     VulkanShim2/vulkan_shim.cpp:1179-1194,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x4a8c7c\n", "files": [{"description": "PS2 BIOS image", "max_size": 8388608, "min_size": 4194304, "name": "ps2-0230a-20080220.bin", "note": "Any image whose romdir holds RESET and a readable ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; an image named in the configuration skips both that range and the romdir test.", "path": "bios/ps2-0230a-20080220.bin", "required": true, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:27-28, aethersx2/pcsx2/ps2/BiosTools.cpp:235-260, nethersx2-turnip-classic v0.7 libemucore.so 0x81bc00-0x81bc24 (size window), nethersx2-turnip-classic v0.7 libemucore.so 0x81c1c0 (acceptance flag set outright)", "validation": ["size"]}, {"description": "DVD player ROM", "max_size": 4194304, "name": "ps2-0230a-20080220.rom1", "note": "Tried as {bios}.rom1 then {biosbase}.rom1. Read at 0x2404000 of the EE memory block and truncated to 4 MB. Logged and skipped when absent.", "path": "bios/ps2-0230a-20080220.rom1", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2-turnip-classic v0.7 libemucore.so 0x81b688-0x81b810"}, {"aliases": ["SCPH-90006_BIOS_VX_HK _230.ROM2"], "description": "Chinese ROM extension", "max_size": 524288, "name": "ps2-0230a-20080220.rom2", "note": "Same two-step naming as rom1. Read at 0x2804000 of the EE memory block and truncated to 512 KB. Only present on Chinese region consoles.", "path": "bios/ps2-0230a-20080220.rom2", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:193-218, nethersx2-turnip-classic v0.7 libemucore.so 0x81b820-0x81b994"}, {"description": "Console NVRAM", "hle_fallback": true, "min_size": 1024, "name": "ps2-0230a-20080220.nvm", "note": "Read at the BIOS path with the extension replaced by nvm, opened r+b. Carries the console id, the iLink id, the language and the OSD configuration. A 1024 byte image is written when the file is missing or shorter, zeroed except for a fixed iLink id and the language defaults of the BIOS region.", "path": "bios/ps2-0230a-20080220.nvm", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:158-226, nethersx2-turnip-classic v0.7 libemucore.so 0x790470-0x7906c8, nethersx2-turnip-classic v0.7 libemucore.so 0x790820-0x790944", "validation": ["size"]}, {"description": "Mechacon version", "hle_fallback": true, "min_size": 4, "name": "ps2-0230a-20080220.mec", "note": "Read at the BIOS path with the extension replaced by mec. Written as 03 06 02 00 when the file is missing or shorter than 4 bytes.", "path": "bios/ps2-0230a-20080220.mec", "required": false, "source_ref": "aethersx2/pcsx2/CDVD/CDVD.cpp:120-144, nethersx2-turnip-classic v0.7 libemucore.so 0x791700-0x7918f4", "validation": ["size"]}, {"description": "DEV9 EEPROM", "hle_fallback": true, "name": "eeprom.dat", "note": "Opened O_RDWR by bare name when the network adapter starts and mapped over 64 bytes. A compiled-in image stands in when the file is missing or cannot be mapped.", "required": false, "size": 64, "source_ref": "aethersx2/pcsx2/DEV9/DEV9.cpp:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160, nethersx2-turnip-classic v0.7 libemucore.so 0x7bb620-0x7bb680"}, {"description": "DEV9 SmartMedia flash image", "hle_fallback": true, "max_size": 8650752, "name": "flash.dat", "note": "Opened rb by bare name at network adapter init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent.", "required": false, "source_ref": "aethersx2/pcsx2/DEV9/flash.cpp:76-103, nethersx2-turnip-classic v0.7 libemucore.so 0x7bb5cc-0x7bb61c"}, {"description": "IOP module injected at boot", "name": "<module>.irx", "note": "Opened at the path the configuration holds once it is four characters or longer, and read into the ROM region at 0x3C0000, capped at 0x40000 bytes. The field is empty by default and names no file of its own.", "required": false, "source_ref": "aethersx2/pcsx2/ps2/BiosTools.cpp:220-233, aethersx2/pcsx2/ps2/BiosTools.cpp:327-328, nethersx2-turnip-classic v0.7 libemucore.so 0x81b9a4-0x81bac4", "unsourceable": "any IOP module the user points at, under no name the code expects"}, {"bundled": true, "description": "Vulkan loader shim", "md5": "1a68e1ac1eec29005c19df924146cf19", "name": "libvulkad.so", "note": "Opened as libvulkad.so.1 then libvulkad.so where the stock library names libvulkan.so, and vkCreateInstance is resolved from it. Without it the Vulkan backend does not open and the message names the shim. This package carries the build committed for v0.6, one revision behind the emulator library beside it.", "path": "lib/arm64-v8a/libvulkad.so", "required": false, "sha1": "2655469eca935d89a6d8fe0c3998fe3ec0dd2d65", "size": 484560, "source_ref": "VulkanShim2/vulkan_shim.cpp:969-1272 (the constructor that runs on load), nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624"}, {"bundled": true, "description": "Driver load hook", "md5": "c2a10d75f7a186f78debc79dd2204841", "name": "libhook_impl.so", "note": "Opened into the adrenotools-libvulkan namespace and asked for init_hook_param, which receives the driver directory and driver name. Its hook_android_dlopen_ext is what replaces the vendor driver with the Turnip one, and it reopens itself in each driver namespace it creates.", "path": "lib/arm64-v8a/libhook_impl.so", "required": false, "sha1": "5a86d24c83f4a0867a3526638182c8dc67e0033b", "size": 461856, "source_ref": "VulkanShim2/vulkan_shim.cpp:1138-1156, VulkanShim2/hook_impl.cpp:38-140"}, {"bundled": true, "description": "Namespace interposer", "md5": "3ded83b3f45773199b82bf81c86f8c89", "name": "libmain_hook.so", "note": "Loaded RTLD_GLOBAL into the same namespace before the system Vulkan library, so its android_dlopen_ext and android_load_sphal_library are the ones that library binds to.", "path": "lib/arm64-v8a/libmain_hook.so", "required": false, "sha1": "e2ee6c00247fc05b88afe43237fa4bfa90212c54", "size": 5648, "source_ref": "VulkanShim2/vulkan_shim.cpp:1159-1160, VulkanShim2/main_hook.c:3-9"}, {"bundled": true, "description": "Turnip driver, default branch", "md5": "315f4b037b77dea81ea099e13e94fa11", "name": "libvulkan_freedreno_T28.so", "note": "Chosen when no other branch matches. Loaded by name from the library directory through the hook; a load failure falls back to the vendor driver.", "path": "lib/arm64-v8a/libvulkan_freedreno_T28.so", "required": false, "sha1": "83406408d328d8529ffa2faf7ab878664a5c7a79", "size": 18606849, "source_ref": "VulkanShim2/vulkan_shim.cpp:1011, VulkanShim2/vulkan_shim.cpp:1079-1080, VulkanShim2/hook_impl.cpp:127-135"}, {"bundled": true, "description": "Turnip driver, Adreno 8xx branch", "md5": "7f6dbc9ec12cb53b1802c418cf532f9b", "name": "libvulkan_freedreno_a8xx-turnip-gen8-V31.so", "note": "Chosen whenever the Adreno model reads non-zero, model 810 and 825 included. Model 825 also turns off framebuffer fetch.", "path": "lib/arm64-v8a/libvulkan_freedreno_a8xx-turnip-gen8-V31.so", "required": false, "sha1": "2dc32726b7a68ced6a40ea2c6cc60848716907ab", "size": 14509832, "source_ref": "VulkanShim2/vulkan_shim.cpp:1010, VulkanShim2/vulkan_shim.cpp:1037-1052, nethersx2-turnip-classic v0.7 libvulkad.so 0x22770-0x23108"}, {"bundled": true, "description": "Turnip driver, Adreno 810 branch", "md5": "e90d691859e0ff8f0221f3fb497cca5d", "name": "libvulkan_freedreno_T24.so", "note": "The Adreno 810 branch writes this path and the block it falls into overwrites it with the 8xx driver before anything reads it, so this revision never opens the file. The branch gained its own exit after the revision this package was built from.", "path": "lib/arm64-v8a/libvulkan_freedreno_T24.so", "required": false, "sha1": "d28f7c64a8296a6d1886b348946d01433c10b493", "size": 18003849, "source_ref": "VulkanShim2/vulkan_shim.cpp:1039-1043, nethersx2-turnip-classic v0.7 libvulkad.so 0x22784-0x230d4"}, {"bundled": true, "description": "Turnip driver, Adreno 710 and 720 branch", "md5": "3f1b01295ab08d070bede8122ebd0aea", "name": "libvulkan_freedreno_25.3.0_R6_Gmem.so", "note": "Chosen when the model is unreadable and the GPU name holds 710 or 720.", "path": "lib/arm64-v8a/libvulkan_freedreno_25.3.0_R6_Gmem.so", "required": false, "sha1": "2159a5172176f9ee0076370314d2d100de2fe1b1", "size": 12048553, "source_ref": "VulkanShim2/vulkan_shim.cpp:1056-1059"}, {"bundled": true, "description": "Turnip driver, SD845 to SD888 branch", "md5": "7af55500464d372a609084fb4698e16d", "name": "libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so", "note": "Chosen when the platform reads SM8250, kona, SM8350, lahaina, sdm845 or napali.", "path": "lib/arm64-v8a/libvulkan_freedreno_v24.1.0_R18.a6xx-Patched.so", "required": false, "sha1": "1abf76c578cb1330e354d5588634b87cef4bc057", "size": 9407968, "source_ref": "VulkanShim2/vulkan_shim.cpp:1027-1033"}, {"bundled": true, "description": "Turnip driver, SM6125 branch", "md5": "5f953080ba9ac858a99f3742c8302055", "name": "libvulkan_freedreno_T19.so", "note": "Chosen when the platform reads SM6125 or trinket.", "path": "lib/arm64-v8a/libvulkan_freedreno_T19.so", "required": false, "sha1": "4dc276dfd5842302c978ce9b2996f961dc6452f1", "size": 11581209, "source_ref": "VulkanShim2/vulkan_shim.cpp:1020-1023"}, {"description": "Turnip driver override", "name": "libvulkan_freedreno.so", "note": "Tested with access before any detection runs. When it exists it becomes the driver and the driver directory becomes /data/local/tmp/, so none of the six packed drivers is consulted.", "path": "data/local/tmp/libvulkan_freedreno.so", "required": false, "source_ref": "VulkanShim2/vulkan_shim.cpp:1009, VulkanShim2/vulkan_shim.cpp:1012-1017", "unsourceable": "any Turnip build the user places at that path"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "eae5ccb3f801b3333ec0e65592ce8a87", "name": "libbase.so", "note": "Opened RTLD_GLOBAL from the library directory only when the namespace approach failed and the shim falls back to patching the global offset table.", "path": "lib/arm64-v8a/libbase.so", "required": false, "sha1": "fecf95a804a7cb57e210f55d5482a56826c8684c", "size": 255352, "source_ref": "VulkanShim2/vulkan_shim.cpp:1179-1194"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "185cd93c21cce12ab4c3bc2430934684", "name": "libcutils.so", "note": "Same fallback list as libbase.so, and a dependency of every packed driver.", "path": "lib/arm64-v8a/libcutils.so", "required": false, "sha1": "63e55bcae5ee690cf6bc7db69a5077c5502e4334", "size": 91200, "source_ref": "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1248-1255"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "aa5065cca6695aa4b8cfdd3c164f3d28", "name": "libvndksupport.so", "note": "Same fallback list as libbase.so. Its android_load_sphal_library is the call the shim stubs so a vendor load can be redirected.", "path": "lib/arm64-v8a/libvndksupport.so", "required": false, "sha1": "a6f2d8498a2f0a00776dd69c58f012cdbb75a308", "size": 66881, "source_ref": "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1257-1269"}, {"bundled": true, "description": "Platform support library for the fallback path", "md5": "71e06a0726aa60b010e066d37021d36a", "name": "libhardware.so", "note": "Same fallback list as libbase.so, and a dependency of every packed driver.", "path": "lib/arm64-v8a/libhardware.so", "required": false, "sha1": "555a6203cd7c23c2b49916d70615e5df7973aa87", "size": 66961, "source_ref": "VulkanShim2/vulkan_shim.cpp:1179-1194, VulkanShim2/vulkan_shim.cpp:1235-1246"}, {"bundled": true, "description": "Game database", "md5": "3f33de7bf8e40e00a05cf27c18a6be0c", "name": "GameIndex.yaml", "note": "Read from the package by name, keyed by serial, and carrying the per-game fixes, patches and settings overrides. Parsed into gamedb.cache in the cache folder.", "path": "assets/GameIndex.yaml", "required": false, "sha1": "58fb1f8ea6cf2d526904349640453e682fe388a1", "size": 1758721, "source_ref": "aethersx2/pcsx2/GameDatabase.cpp:35, nethersx2-turnip-classic v0.7 libemucore.so 0x2e45fc"}, {"bundled": true, "description": "Widescreen patch archive", "md5": "cc19970629feb0a25b9b95263194f08f", "name": "cheats_ws.zip", "note": "Per-game pnach entries matched on the disc CRC, read from the package when widescreen patches are enabled. The cheats_ws folder under the data directory takes precedence and the archive is skipped when it holds a match.", "path": "assets/cheats_ws.zip", "required": false, "sha1": "1caae7ddf0cbba5f1f6d7404b2309300d913778c", "size": 1694454, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x804464"}, {"bundled": true, "description": "No-interlacing patch archive", "md5": "fb2a43dcea094a19db4f4bcdc4ad32eb", "name": "cheats_ni.zip", "note": "Same form as cheats_ws.zip, read when no-interlacing patches are enabled, with the cheats_ni folder taking precedence.", "path": "assets/cheats_ni.zip", "required": false, "sha1": "31cbff66380f255d359ff9ee09b6edc06102579a", "size": 223122, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x80460c"}, {"bundled": true, "description": "Interface font", "md5": "86da78cb59576328483a11c6ef74bc2b", "name": "Roboto-Regular.ttf", "note": "Read as the standard font when the interface comes up. An empty read aborts the process.", "path": "assets/fonts/Roboto-Regular.ttf", "required": true, "sha1": "00d62fbdc8d5dec4c659005e116d0ba2ee63b547", "size": 305608, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1e78-0x7d1e8c, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"}, {"bundled": true, "description": "Fixed-width interface font", "md5": "8ad82b1dc550319993a7d6c932b2656d", "name": "RobotoMono-Medium.ttf", "note": "Read for the fixed-width font. An empty read aborts the process.", "path": "assets/fonts/RobotoMono-Medium.ttf", "required": true, "sha1": "9056e59b69c6f1160fdfb92a0773f17f6307f3ad", "size": 86820, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1ecc-0x7d1ee0, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"}, {"bundled": true, "description": "Font Awesome icon font", "md5": "dffd9504fcb1894620fa41c700172994", "name": "fa-solid-900.ttf", "note": "Read for the interface icon glyphs. An empty read aborts the process.", "path": "assets/fonts/fa-solid-900.ttf", "required": true, "sha1": "694b8a2445ff39de415bf4791845442a7b1b81e5", "size": 204528, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d1f20-0x7d1f34, nethersx2-turnip-classic v0.7 libemucore.so 0x7d2270"}, {"bundled": true, "description": "FidelityFX common header", "md5": "2c539b603dcb15dcdcfdc420eda56ced", "name": "ffx_a.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_a.h", "required": false, "sha1": "726370c10154ad092c15c251b98c79185e980c7c", "size": 161481, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x627178"}, {"bundled": true, "description": "FidelityFX CAS header", "md5": "f8a3d7f48ae19fc372cd0d5d375d5a8d", "name": "ffx_cas.h", "note": "Prepended to the sharpening shader of both backends.", "path": "assets/shaders/common/ffx_cas.h", "required": false, "sha1": "a1d1a687577f7a607fda35bc88950f57c2129ca5", "size": 63512, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x627188"}, {"bundled": true, "description": "FXAA shader source", "md5": "5cdeb2963c1b68c3ffb04a789cc66d6e", "name": "fxaa.fx", "note": "Read by both backends when FXAA is enabled.", "path": "assets/shaders/common/fxaa.fx", "required": false, "sha1": "3ac5f68049ed00d8ff3d2811bd09ef0c036efd0a", "size": 19420, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x67c710, nethersx2-turnip-classic v0.7 libemucore.so 0x685fd0"}, {"bundled": true, "description": "OpenGL shader preamble", "md5": "86a37e282f029d20f395cfd05263fddd", "name": "common_header.glsl", "note": "Prepended to every OpenGL program the renderer builds.", "path": "assets/shaders/opengl/common_header.glsl", "required": false, "sha1": "9c391aae0daddf0c2ba3f0d5265aee9b491286e4", "size": 1938, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x674618"}, {"bundled": true, "description": "OpenGL format conversion shader", "md5": "0dba3321d9f902439a50b79680b220c7", "name": "convert.glsl", "path": "assets/shaders/opengl/convert.glsl", "required": false, "sha1": "26a17de3b4abc30e5c19987efad4ceac22e9a369", "size": 10361, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x674f78"}, {"bundled": true, "description": "OpenGL presentation shader", "md5": "afbb9a89f17ead2d8ce7252c1b44186f", "name": "present.glsl", "path": "assets/shaders/opengl/present.glsl", "required": false, "sha1": "bf2688971a8ef2f2c262c3c2ec579d3dd39793e6", "size": 9458, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x675480"}, {"bundled": true, "description": "OpenGL frame merge shader", "md5": "2c4d70f62928eac933eec932d7bfa0b3", "name": "merge.glsl", "path": "assets/shaders/opengl/merge.glsl", "required": false, "sha1": "d1a3c11a1273e1d6c740e4eacc3159842f206683", "size": 455, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x675780"}, {"bundled": true, "description": "OpenGL deinterlacing shader", "md5": "0e537dd838a7ecd3b687f3f7cc60a7be", "name": "interlace.glsl", "path": "assets/shaders/opengl/interlace.glsl", "required": false, "sha1": "e74e58f530abb4af02c0875c2f04d507e854869e", "size": 6246, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x675aac"}, {"bundled": true, "description": "OpenGL brightness and contrast shader", "md5": "3d1e2be521a66cbfc2c5ff32057e7bf4", "name": "shadeboost.glsl", "path": "assets/shaders/opengl/shadeboost.glsl", "required": false, "sha1": "8d8b8966afd2ad840151f7fcb494739041708c89", "size": 1457, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x675cb8"}, {"bundled": true, "description": "OpenGL sharpening shader", "md5": "f8a684763e24557c97e3f5d05935bb3b", "name": "cas.glsl", "path": "assets/shaders/opengl/cas.glsl", "required": false, "sha1": "1a69a0fc522caff98fc3829ebf3f12a6a006a058", "size": 2448, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x676fa0"}, {"bundled": true, "description": "OpenGL texture function vertex and geometry shader", "md5": "a97e9616f298bb9041bf9e45ee2ec597", "name": "tfx_vgs.glsl", "path": "assets/shaders/opengl/tfx_vgs.glsl", "required": false, "sha1": "0e9e98f766c9250b465af776d0077f49f797fed2", "size": 5756, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x677318"}, {"bundled": true, "description": "OpenGL texture function fragment shader", "md5": "9d80855607a6da1014f083340741b845", "name": "tfx_fs.glsl", "path": "assets/shaders/opengl/tfx_fs.glsl", "required": false, "sha1": "919c3308c8850852d529d0127ce94e873375bfd2", "size": 25906, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x677328"}, {"bundled": true, "description": "Vulkan texture function shader", "md5": "ebc0ffa3de6fd0a7a4dea17f8b74d806", "name": "tfx.glsl", "path": "assets/shaders/vulkan/tfx.glsl", "required": false, "sha1": "b4ebf3f7f20fc88f91cda033552a7489a9ff179c", "size": 28290, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x682098"}, {"bundled": true, "description": "Vulkan format conversion shader", "md5": "553d33859963a1abe5508e8e45f1cb1e", "name": "convert.glsl", "path": "assets/shaders/vulkan/convert.glsl", "required": false, "sha1": "7a133d4cf115dc49cd1921bd7049ea64ad58acce", "size": 8025, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x68394c, nethersx2-turnip-classic v0.7 libemucore.so 0x685fb8"}, {"bundled": true, "description": "Vulkan presentation shader", "md5": "72626d625bb963c6cd7074d4dfd0adda", "name": "present.glsl", "path": "assets/shaders/vulkan/present.glsl", "required": false, "sha1": "4871ee00b249b41d16232769e2f661bedd1c83db", "size": 8177, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x684728"}, {"bundled": true, "description": "Vulkan deinterlacing shader", "md5": "bf3caa2532873593218bc4a09e924d4e", "name": "interlace.glsl", "path": "assets/shaders/vulkan/interlace.glsl", "required": false, "sha1": "f8d14d80036f11707c7e94db2a77531d582019dd", "size": 6707, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x684f74"}, {"bundled": true, "description": "Vulkan frame merge shader", "md5": "b776383d21609db24d5348c381c2c286", "name": "merge.glsl", "path": "assets/shaders/vulkan/merge.glsl", "required": false, "sha1": "b09de39d6459c70ffab28dcb3e3ef879b1648674", "size": 669, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x6857c4"}, {"bundled": true, "description": "Vulkan brightness and contrast shader", "md5": "366b45b6c4e9ed8e6b7454eebcb5d010", "name": "shadeboost.glsl", "path": "assets/shaders/vulkan/shadeboost.glsl", "required": false, "sha1": "26b29f57685d8108cf519c4f1d340d43aacbff6e", "size": 1741, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x686284"}, {"bundled": true, "description": "Vulkan sharpening shader", "md5": "56f3cf4de895dd4d32d6c79d564d0c5b", "name": "cas.glsl", "path": "assets/shaders/vulkan/cas.glsl", "required": false, "sha1": "709fd5393188f7cff0fe4230d0e3e8b69a82f5b9", "size": 2624, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x6869c4"}, {"bundled": true, "description": "Achievement unlock sound", "md5": "4d035ee86f836bfed422a975cf65c9cc", "name": "unlock.wav", "note": "Joined to the file:///android_asset base and handed to playSoundAsync, which opens it from the package and plays it through MediaPlayer.", "path": "assets/sounds/achievements/unlock.wav", "required": false, "sha1": "eb488a76217629f620e40287567d7e2b30337680", "size": 87714, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x811190"}, {"bundled": true, "description": "Leaderboard submission sound", "md5": "fa6a7030a9f259ee7300dd0bd49f24f3", "name": "lbsubmit.wav", "path": "assets/sounds/achievements/lbsubmit.wav", "required": false, "sha1": "5ad1e110dcf0ffd26405981398892a82e4f3bad1", "size": 82096, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x811814"}, {"bundled": true, "description": "Achievement notification sound", "md5": "d66b0bccd743bd11eaca55bcaec925da", "name": "message.wav", "path": "assets/sounds/achievements/message.wav", "required": false, "sha1": "c54f04b63ac6f04e0a0944ef260b5497e4494dbd", "size": 15696, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x810254"}, {"bundled": true, "description": "Fallback interface texture", "md5": "8f846541ccbf088ee7f8c49c8dcb3a6a", "name": "placeholder.png", "note": "Requested from the texture cache when a notification or a loading screen has no image of its own. A miss logs that it cannot continue and the caller tears the interface down instead of bringing it up.", "path": "assets/placeholder.png", "required": false, "sha1": "c36292ab7e16bf5a6cbc4063f638e24872349c45", "size": 2762, "source_ref": "nethersx2-turnip-classic v0.7 libemucore.so 0x7d21fc, nethersx2-turnip-classic v0.7 libemucore.so 0x817be0, nethersx2-turnip-classic v0.7 libemucore.so 0x7ec54c"}, {"bundled": true, "description": "Game list region flag", "name": "<region>.png", "note": "Loaded as icons/flags/<region>.png with the region string of the entry. Thirty are carried, seven NTSC and twenty-two PAL plus Other.", "path": "assets/icons/flags/NTSC-U.png", "required": false, "source_ref": "nethersx2-turnip-classic v0.7 classes.dex icons/flags/%s.png"}, {"bundled": true, "description": "Game list compatibility rating icon", "name": "star-<rating>.png", "note": "Loaded as icons/star-<rating>.png for ratings 0 to 5.", "path": "assets/icons/star-0.png", "required": false, "source_ref": "nethersx2-turnip-classic v0.7 classes.dex icons/star-%d.png"}, {"bundled": true, "description": "Help page", "md5": "c2a64e0bcc401da9b0a3c7adf3cff410", "name": "faq.html", "note": "Opened under the android_asset scheme by the setup wizard's browser view.", "path": "assets/faq.html", "required": false, "sha1": "9163d4a3d19b87483f843e4bf3afe236a50a72d2", "size": 14048, "source_ref": "nethersx2-turnip-classic v0.7 classes.dex android_asset faq.html"}, {"bundled": true, "description": "Third party notices page", "md5": "fb4ff036f3e4769aa6daefdc4c5dba57", "name": "3rdparty.html", "note": "Opened under the android_asset scheme in the built-in browser view.", "path": "assets/3rdparty.html", "required": false, "sha1": "7743bf1d7e6e09a02f1b2972aa63bd8a9f26050d", "size": 90296, "source_ref": "nethersx2-turnip-classic v0.7 classes.dex android_asset 3rdparty.html"}], "mode": "standalone", "notes": "PlayStation 2 emulator for Android, package xyz.aethersx2.cturnip, activity\nxyz.aethersx2.android.EmulationActivity, version name v2.2n-3668, label\nNetherSX2 Classic (Turnip). It sits on the 3668 line: the library it starts\nfrom is NetherSX2 Classic v2.2n-3668, itself a patch of the AetherSX2\nv1.5-3668 package, and the library still names itself NetherSX2 v2.2n-3668\n(Classic). Everything below was read from the v0.7 package:\nlib/arm64-v8a/libemucore.so, libvulkad.so, the dex and the assets.\nref: nethersx2-turnip-classic v0.7 AndroidManifest.xml,\n     nethersx2-turnip-classic v0.7 libemucore.so 0xcdcba\n\nThe package pairs two revisions of the project. libemucore.so is the blob the\nv0.7 commit carries, byte for byte; libvulkad.so is the one committed for\nv0.6 and reports its own build date. libhook_impl.so, libmain_hook.so and the\nsix packed drivers are the same at both revisions. The shim rules described\nhere are therefore those of the older revision, which this profile pins:\nSM8350, lahaina, sdm845 and napali still route to the a6xx-Patched driver,\nand SM6475, SM6650 and SM7325 are not known to it.\nref: VulkanShim2/vulkan_shim.cpp:1027-1059,\n     nethersx2-turnip-classic v0.7 libvulkad.so\n\nThe patch rewrites twenty-four places in the library it starts from. Three are\nthe strings libvulkan.so, libvulkan.so.1 and the message naming them, each\nturned into libvulkad.so, so the Vulkan loader opens the shim instead of the\nsystem driver. Sixteen turn comparisons into unconditional paths, among them\nthe memchr scan for the twenty-two byte pattern that precedes the certificate\ntest and two byte-wise string comparisons whose result is forced to equal,\nwhich is what lets the package be resigned under a new application id. Five\nmove settings defaults: the renderer enum from 12 to 14, the upscale\nmultiplier fallback from 1.0 to 2.0 with the configuration read\nshort-circuited, the hardware download mode default, and the warning text that\nwent with it. The same five sites carry their unpatched forms in the 4248\nlibrary this project also starts from, which is what places them here rather\nthan in the base. None of them is in a file loading path.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x105f5b,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x829ae0-0x82a018,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82d10c-0x82d5c0,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82e41c,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x82fbac-0x82fcac,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x8034c4,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x833d04,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x83401c-0x834028,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x834cb0\n\nA BIOS image is required and boot stops without one, the application raising a\nstartup error saying it needs a PS2 BIOS in the bios folder of the data\ndirectory. The data directory is getExternalFilesDir(null) with getDataDir()\nbehind it, so it follows the application id, and the folder names under it\ncome from the Folders section, Bios defaulting to bios. An image imported\nthrough the interface is written to that folder under the CRC32 of its\ncontents, as %08X.bin.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x8057dc,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x7dfaf0-0x7dfb10,\n     xyz/aethersx2/android/NativeLibrary initializeOnce,\n     xyz/aethersx2/android/NativeLibrary importBIOS\n\nDetection is by content. The scan lists the BIOS folder with a * mask, keeps\nfiles between 4194304 and 8388608 bytes, and accepts an image whose romdir\ncarries a RESET entry followed by a readable ROMVER; the fifth ROMVER\ncharacter gives the zone, A for USA, C for China, E for Europe, H for Asia,\nJ for Japan, P for Free, T for T10K and X for Test, any other character\nstanding for itself. The sixth character is read only to pick the word\nConsole or Devel for the description, and the acceptance flag is set outright\nonce ROMVER has been read, so development images pass with nothing patched\nhere. RESET and ROMVER are the only two names the scan compares. An image\nnamed in the configuration is combined with the BIOS folder and opened at that\npath when it exists, without the size filter and without the romdir test. No\nname and no hash is matched anywhere. The image is read into the 4 MB ROM\nregion and truncated to it, and one shorter than 2465792 bytes turns off the\nOSDSys parameter HLE.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:27-28,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:62-175,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:235-260,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:272-332,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81bc00-0x81bc24,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81be44-0x81c1c0,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b5e8-0x81b62c\n\nCompanions derive from the selected image. rom1 and rom2 are appended to the\nfull name first, then substituted for the existing extension, so an image at\nps2-0230a-20080220.bin is followed by ps2-0230a-20080220.bin.rom1 then\nps2-0230a-20080220.rom1. The nvm and the mec are read at the substituted\nextension only, and both are written with defaults when they are absent or too\nshort. This code line loads no erom: the extension is named nowhere in the\nlibrary and the boot path goes from rom2 straight to the IRX.\nref: aethersx2/pcsx2/ps2/BiosTools.cpp:193-218,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:120-144,\n     aethersx2/pcsx2/CDVD/CDVD.cpp:158-226,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b688-0x81b9a4\n\nThe network adapter opens eeprom.dat and flash.dat by bare name, so they\nresolve against the process working directory, which the application never\nsets. A compiled-in image stands in for the first and a card filled with 0xFF\nfor the second. DEV9hdd.raw is the default name of the empty disk image its\nsettings page writes. An IRX named in the configuration is read into the ROM\nregion at 0x3C0000 at boot; the field is empty by default and names no file of\nits own.\nref: aethersx2/pcsx2/DEV9/DEV9.cpp:73, aethersx2/pcsx2/DEV9/DEV9.cpp:145-160,\n     aethersx2/pcsx2/DEV9/flash.cpp:76-103,\n     aethersx2/pcsx2/ps2/BiosTools.cpp:220-233,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x7bb5cc-0x7bb680,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x81b9a4-0x81bac4\n\nThe Vulkan path is the reason this build exists. libemucore.so opens\nlibvulkad.so.1 then libvulkad.so where the stock library names libvulkan.so,\nand vkCreateInstance is resolved from it. That shim reads the Adreno model and\nthe platform name from the kgsl sysfs nodes, picks one of six Turnip drivers\npacked beside it, creates a linker namespace over its own library directory\nand loads libhook_impl.so and libmain_hook.so into it. The system\n/system/lib64/libvulkan.so is then opened inside that namespace with its\nsoname patched, so its own driver load lands in the hook, which opens the\nchosen Turnip driver instead of the vendor ICD. A driver present at\n/data/local/tmp/libvulkan_freedreno.so is tested first and wins over all six.\nWhen the namespace cannot be built the shim falls back to patching the system\nlibrary's global offset table, and that path alone loads libbase.so,\nlibcutils.so, libvndksupport.so and libhardware.so from the library directory.\nThe shim derives the package name from its own library path and appends to\nvulkan_shim.log under the files folder of that package.\nref: VulkanShim2/vulkan_shim.cpp:43-73,\n     VulkanShim2/vulkan_shim.cpp:1008-1085,\n     VulkanShim2/vulkan_shim.cpp:1107-1175,\n     VulkanShim2/vulkan_shim.cpp:1179-1194,\n     VulkanShim2/hook_impl.cpp:38-140,\n     nethersx2-turnip-classic v0.7 libemucore.so 0x8a45ec-0x8a4624\n\nResources are read out of the package itself. The library has no asset manager\nof its own and calls back into readPackageFile, readPackageFileToString and\nplaySoundAsync, each taking an asset-relative name, so the game database, the\npatch archives, the interface fonts, the shader sources every backend compiles\nat startup and the achievement sounds are versioned with the build and never\nlooked for on disk. The sound names are joined to a file:///android_asset base\nbefore they cross into Java. The game list draws its region flags and rating\nstars from the same assets. The game database is this build's own, and five of\nthe shader sources differ from the ones the 4248 line carries: the OpenGL\npreamble, its format conversion and texture function fragment shaders, and the\nVulkan texture function and format conversion shaders.\nref: nethersx2-turnip-classic v0.7 libemucore.so 0x828110,\n     xyz/aethersx2/android/NativeLibrary readPackageFile,\n     xyz/aethersx2/android/NativeLibrary playSoundAsync\n", "profiled_date": "2026-08-12", "source": "https://github.com/nckstwrt/NetherSX2-Turnip", "source_commit": "8e17e584884e19b0a912f1988730d576d6d5aa84", "systems": ["sony-playstation-2"], "type": "standalone", "upstream": "https://github.com/Trixarian/AetherSX2", "upstream_commit": "1d1f795dfc70e38da67724c7298779260f513889"}


id: ngp-emu
name: NGP.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": ["ngp-emu", "NGP.emu", "NGP-EMU"], "display_name": "SNK - Neo Geo Pocket / Color (NGP.emu)", "emulator": "NGP.emu", "files": [], "mode": "standalone", "notes": "Member of the EX Emulator series by Robert Broglia, which targets Android and\nLinux (README.md:1,3-4,12-13) and keeps iOS and Pandora build shortcuts in the\ntree (NGP.emu/ios.mk, NGP.emu/pandora.mk). Published as com.explusalpha.NgpEmu\n(NGP.emu/metadata/conf.mk:2,4,6,7) and reached by ES-DE through its NGP-EMU\nfind rule, which only the Android rule set carries. Mednafen's Neo Geo Pocket\nmodule, itself descended from NeoPop, is vendored under NGP.emu/src/ngp\n(NGP.emu/metadata/conf.mk:8, NGP.emu/src/main/AppMeta.cc:27) on the 1.32 line\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the\napp's own video, audio, input and save layers. Three files differ from the\nMednafen 1.32.1 release, all of it frontend plumbing: the pixel format and\nsound rate hooks, the input latch and the flash file I/O move to the app\n(NGP.emu/src/main/Main.cc:84,102,118-131, NGP.emu/src/main/system.ccm:87,93).\nThe TLCS-900h disassembler is left out of the build\n(NGP.emu/src/CMakeLists.txt:6-32). Content is read from .ngp, .ngc, .npc and\n.ngpc files (NGP.emu/metadata/conf.mk:5, NGP.emu/src/main/AppMeta.cc:31-34,\nNGP.emu/src/ngp/neopop.cpp:336-337); an archive is opened by the framework,\nwhich keeps the first entry passing that same filter\n(EmuFramework/src/EmuSystem.cc:392-412).\n\nThe content image is the only one the app loads. It is read into a 4 MiB\nbuffer, hashed for the save file names and handed to the module, which refuses\nan image over 8 MiB (NGP.emu/src/main/Main.cc:80-85,\nEmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146,\nNGP.emu/src/ngp/neopop.cpp:183-193). The BIOS is built in memory rather than\nread: bios_install fills a 64 KiB array with the 27 system call vectors, writes\nopcode 0x1F at each target, copies an 0x800 byte system font held in the binary\nto 0x8DCF and closes the image with a RETI and an infinite loop\n(NGP.emu/src/ngp/bios.cpp:29,50-180,182-239, NGP.emu/src/ngp/neopop.cpp:211).\nThat opcode is bound to the HLE handler in the interpreter decode table, and\nthe handler answers only from the 0xFF0000 region\n(NGP.emu/src/ngp/TLCS-900h/TLCS900h_interpret.cpp:921-926,\nNGP.emu/src/ngp/biosHLE.cpp:43-47). The same array is what the memory map\nreturns for the BIOS region and where the font routine reads its glyphs\n(NGP.emu/src/ngp/mem.cpp:121, NGP.emu/src/ngp/biosHLE.cpp:221). The NGP\nLanguage menu item feeds the ngp.language setting, written to RAM at boot\nrather than selecting a file (NGP.emu/src/main/EmuMenuViews.cc:31-40,\nNGP.emu/src/main/options.cc:82-83, NGP.emu/src/ngp/mem.cpp:620,\nNGP.emu/src/ngp/neopop.cpp:286-299).\n\nNo firmware path exists by construction: the app answers Mednafen's file name\nrequest for save states, saves and save backups only, and any other kind ends\nin unreachable() (NGP.emu/src/main/options.cc:96-106). Cheat loading and IPS\npatching are compiled in from the shared Mednafen sources and called from\nnowhere (EmuFramework/src/shared/mednafen/mempatcher.cpp:251-254,\nEmuFramework/src/shared/mednafen/file.cpp:38-53). Per content the app writes\nand reads back a .ngf image holding the cartridge flash, plus save states and\nNgpEmu.config (NGP.emu/src/main/Main.cc:53-73,118-131,\nNGP.emu/src/main/system.ccm:76, NGP.emu/src/main/AppMeta.cc:28). ui.png,\ngpOverlay.png and the shader sources are drawn from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:58-65,\nEmuFramework/src/VideoImageEffect.cc:163-173). The app declares no bundled\ncontent, the framework definition defaulting to an empty span\n(EmuFramework/src/AppMeta.cc:40,\nEmuFramework/include/emuframework/AppMeta.hh:66-68).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["snk-ngp", "snk-ngpc"], "type": "standalone", "upstream": "https://mednafen.github.io/"}


id: noods
name: NooDS
type: libretro
classification: community_fork
source: https://github.com/jonian/libretro-noods
upstream: https://github.com/Hydr8gon/NooDS
source_commit: 9a2665306927ede64f4b5c109df79f4015607dbc
profile_json:
{"core_classification": "community_fork", "core_version": "Git", "cores": ["noods"], "display_name": "Nintendo - DS (NooDS)", "emulator": "NooDS", "files": [{"description": "ARM9 BIOS", "hle_fallback": true, "name": "bios9.bin", "note": "HLE fallback for all SWI calls; native needed for firmware boot and logo verification (copyBiosLogo)", "required": false, "size": 4096, "source_ref": "src/memory.cpp:130-141", "system": "nintendo-ds"}, {"description": "ARM7 BIOS", "hle_fallback": true, "name": "bios7.bin", "note": "HLE fallback for all SWI calls; native needed for firmware boot", "required": false, "size": 16384, "source_ref": "src/memory.cpp:144-155", "system": "nintendo-ds"}, {"description": "NDS firmware image", "hle_fallback": true, "name": "firmware.bin", "note": "Auto-generated 128KB non-bootable firmware as fallback; native dump (>128KB) needed for firmware boot", "required": false, "source_ref": "src/spi.cpp:62-160", "system": "nintendo-ds"}, {"description": "GBA BIOS", "hle_fallback": true, "name": "gba_bios.bin", "note": "HLE fallback via swiTableGba; native BIOS disables HLE and enables real GBA boot", "required": false, "size": 16384, "source_ref": "src/memory.cpp:158-168, src/core.cpp:252-256", "system": "nintendo-gba"}, {"description": "DLDI SD card image for homebrew", "name": "nds_sd_card.bin", "note": "Opened on DLDI startup() call from homebrew ROMs; user-created FAT image", "required": false, "source_ref": "src/dldi.cpp:80-83, src/libretro/libretro.cpp:324", "system": "nintendo-ds"}], "notes": "Full HLE BIOS for ARM9, ARM7 and GBA SWI routines (hle_bios.cpp:24-60).\nAll BIOS files optional when direct boot is enabled (default). When missing,\nHLE handler activated via special opcode at offset 3 (memory.cpp:139-168).\nFirmware auto-generated (128KB non-bootable) if not provided, with default\nWiFi config, touch calibration and user settings (spi.cpp:90-160). Native\nBIOS+firmware required only for firmware boot (non-direct-boot mode).\nBootable firmware threshold: >128KB (spi.cpp:87). DLDI patching provides\nSD card access for homebrew via nds_sd_card.bin (dldi.cpp:29-77).\nFile loading code identical between upstream and libretro port.\n", "profiled_date": "2026-03-24", "source": "https://github.com/jonian/libretro-noods", "source_commit": "9a2665306927ede64f4b5c109df79f4015607dbc", "systems": ["nintendo-ds", "nintendo-gba"], "type": "libretro", "upstream": "https://github.com/Hydr8gon/NooDS"}


id: np2kai
name: NP2kai
type: libretro
classification: enhanced_fork
source: https://github.com/libretro/NP2kai
upstream: https://github.com/AZO234/NP2kai
source_commit: 76b354b72b7541115c8c5a79f14538370e65e1d4
profile_json:
{"core_classification": "enhanced_fork", "core_version": "0.86", "cores": ["np2kai"], "display_name": "NEC - PC-98 (Neko Project II Kai)", "emulator": "NP2kai", "files": [{"hle_fallback": true, "name": "bios.rom", "note": "PC-9801 system BIOS ROM (96 KB). The core boots without it using the built-in BIOS simulator, but some software requires the real BIOS.\n", "path": "np2kai/bios.rom", "required": false, "size": 98304, "source_ref": "bios/bios.c:430-436, common/strres.c:60"}, {"aliases": ["FONT.ROM", "font.rom", "FONT.BMP"], "hle_fallback": true, "name": "font.bmp", "note": "PC-98 font bitmap. Required for correct Japanese kanji display. Without this, only basic ASCII renders using built-in 8x8 data. FONT.ROM (V98 format) is also accepted.\n", "path": "np2kai/font.bmp", "required": false, "source_ref": "sdl/libretro/libretro.c:1813, font/font.c:86-125, font/fontdata.c:11"}, {"hle_fallback": true, "name": "sound.rom", "note": "FM sound board BIOS ROM (16 KB). Generic fallback for all sound boards. Board-specific variants are tried first: sound26.rom (PC-9801-26K), sound86.rom (86), sound118.rom (118), soundSPB.rom (Speak Board), soundMO.rom (MO), sound14.rom (14).\n", "path": "np2kai/sound.rom", "required": false, "size": 16384, "source_ref": "sound/soundrom.c:15-16,21-55,93-106"}, {"aliases": ["2608_BD.WAV"], "name": "2608_bd.wav", "note": "YM2608 OPNA rhythm sample: bass drum", "path": "np2kai/2608_bd.wav", "required": false, "source_ref": "sound/rhythmc.c:11,60-71, sound/fmgen/fmgen_opna.cpp:1431"}, {"aliases": ["2608_SD.WAV"], "name": "2608_sd.wav", "note": "YM2608 OPNA rhythm sample: snare drum", "path": "np2kai/2608_sd.wav", "required": false, "source_ref": "sound/rhythmc.c:12, sound/fmgen/fmgen_opna.cpp:1432"}, {"aliases": ["2608_TOP.WAV"], "name": "2608_top.wav", "note": "YM2608 OPNA rhythm sample: top cymbal", "path": "np2kai/2608_top.wav", "required": false, "source_ref": "sound/rhythmc.c:13, sound/fmgen/fmgen_opna.cpp:1432"}, {"aliases": ["2608_HH.WAV"], "name": "2608_hh.wav", "note": "YM2608 OPNA rhythm sample: hi-hat", "path": "np2kai/2608_hh.wav", "required": false, "source_ref": "sound/rhythmc.c:14, sound/fmgen/fmgen_opna.cpp:1432"}, {"aliases": ["2608_TOM.WAV"], "name": "2608_tom.wav", "note": "YM2608 OPNA rhythm sample: tom", "path": "np2kai/2608_tom.wav", "required": false, "source_ref": "sound/rhythmc.c:15, sound/fmgen/fmgen_opna.cpp:1432"}, {"aliases": ["2608_RIM.WAV", "2608_RYM.WAV"], "name": "2608_rim.wav", "note": "YM2608 OPNA rhythm sample: rim shot. fmgen also accepts 2608_RYM.WAV.", "path": "np2kai/2608_rim.wav", "required": false, "source_ref": "sound/rhythmc.c:16, sound/fmgen/fmgen_opna.cpp:1431-1441"}, {"aliases": ["d8000.rom", "bank3.bin", "bios9821.rom"], "hle_fallback": true, "name": "ide.rom", "note": "IDE controller BIOS ROM (8 KB). For IDE HDD boot support. Without this, a simulated IDE BIOS is used.\n", "path": "np2kai/ide.rom", "required": false, "size": 8192, "source_ref": "cbus/ideio.c:1913-1941"}, {"hle_fallback": true, "name": "scsi.rom", "note": "SCSI controller BIOS ROM (16 KB). The core includes a built-in SCSI BIOS stub as fallback.\n", "path": "np2kai/scsi.rom", "required": false, "size": 16384, "source_ref": "cbus/scsiio.c:214-231"}, {"hle_fallback": true, "name": "sasi.rom", "note": "SASI controller BIOS ROM (4 KB). The core includes a built-in SASI BIOS stub as fallback.\n", "path": "np2kai/sasi.rom", "required": false, "size": 4096, "source_ref": "cbus/sasiio.c:451-467"}, {"aliases": ["bank0.bin"], "hle_fallback": true, "name": "pci.rom", "note": "PCI BIOS ROM (32 KB). For PC-9821 PCI bus emulation. Without this, the built-in PCI BIOS simulator is used.\n", "path": "np2kai/pci.rom", "required": false, "size": 32768, "source_ref": "io/pcidev.c:356-382"}, {"name": "gpib.rom", "note": "GP-IB interface BIOS ROM (8 KB). If missing, GP-IB emulation is disabled entirely.\n", "path": "np2kai/gpib.rom", "required": false, "size": 8192, "source_ref": "cbus/gpibio.c:320-356", "unsourceable": "never publicly dumped, GP-IB emulation is stub code (source comment: not implemented)"}, {"hle_fallback": true, "name": "key.txt", "note": "Keyboard remapping configuration (text file). User-created file for custom keyboard layout. The core uses built-in defaults if absent.\n", "path": "np2kai/key.txt", "required": false, "source_ref": "keystat.c:43,113-148", "unsourceable": "user-created keyboard config, no default distributed in any NP2kai release"}], "profiled_date": "2026-03-24", "source": "https://github.com/libretro/NP2kai", "source_commit": "76b354b72b7541115c8c5a79f14538370e65e1d4", "systems": ["pc-98"], "type": "libretro", "upstream": "https://github.com/AZO234/NP2kai"}


id: numero
name: Numero
type: libretro
classification: community_fork
source: https://github.com/nbarkhina/numero
upstream: https://github.com/sputt/wabbitemu
source_commit: c0b07a39782feafebcde0c8ccfa91fc92732c999
profile_json:
{"core_classification": "community_fork", "core_version": "v1.0", "cores": ["numero"], "display_name": "Texas Instruments TI-83 (Numero)", "emulator": "Numero", "files": [{"description": "TI-83 Plus Silver Edition ROM dump", "name": "ti83se.rom", "note": "Checked first. Recommended for largest storage capacity.", "priority": 1, "required": false, "source_ref": "libnumero/libretro/libretronew.cpp:576-578", "system": "ti-83"}, {"description": "TI-83 Plus ROM dump", "name": "ti83plus.rom", "note": "Checked second, used if ti83se.rom is missing.", "priority": 2, "required": false, "source_ref": "libnumero/libretro/libretronew.cpp:583-585", "system": "ti-83"}, {"description": "TI-83 ROM dump", "name": "ti83.rom", "note": "Checked last. Original TI-83 (non-Plus).", "priority": 3, "required": false, "source_ref": "libnumero/libretro/libretronew.cpp:591-593", "system": "ti-83"}], "notes": "Libretro port of Wabbitemu, a TI-83 family calculator emulator.\nSupports TI-83, TI-83 Plus and TI-83 Plus Silver Edition.\n\nA calculator ROM dump is required. The core searches sequentially in the\nsystem directory (libretronew.cpp:575-594): ti83se.rom first, then\nti83plus.rom, then ti83.rom. The first found is loaded via rom_load()\n(libretronew.cpp:608). file_present_in_system() checks existence only\nvia VFS open/close (libretronew.cpp:451-472). No hash or size validation.\n\nWithout any ROM, the core shows a blank screen listing the expected\nfilenames (libretronew.cpp:1030-1042). No HLE fallback.\n\nSupports no-content launch (libretronew.cpp:556). Content files\n(.8xp/.8xk/.8xg) are loaded on top of the running ROM via link cable\nsimulation. Auto-saves calculator state every 10 seconds\n(libretronew.cpp:1050-1063).\n\nUpstream Wabbitemu supports a wider model range (TI-73 through TI-84+CSE)\nbut the libretro wrapper only searches for TI-83 family filenames. The\nunderlying engine (calc.cpp:rom_load) auto-detects the model from the ROM\nheader.\n", "profiled_date": "2026-03-24", "source": "https://github.com/nbarkhina/numero", "source_commit": "c0b07a39782feafebcde0c8ccfa91fc92732c999", "systems": ["ti-83"], "type": "libretro", "upstream": "https://github.com/sputt/wabbitemu"}


id: nxengine
name: NXEngine
type: libretro
classification: game_engine
source: https://github.com/libretro/nxengine-libretro
upstream: https://github.com/Rox64/NXEngine
source_commit: a1c45fd4d045333f4ea523e556469b545be82b0a
profile_json:
{"core_classification": "game_engine", "core_version": "1.0.0.6", "cores": ["nxengine", "nx"], "display_name": "Cave Story (NXEngine)", "emulator": "NXEngine", "files": [{"category": "game_data", "description": "Cave Story freeware executable (data source for music, sfx, bitmaps, wavetable)", "md5": "38695d3d69d7a0ada8178072dad4c58b", "name": "Doukutsu.exe", "note": "Placed in system/nxengine/. The core extracts ORG music, PXT sounds, stage tile attributes, BMP graphics, and wavetable from this binary at each launch.", "path": "nxengine/Doukutsu.exe", "required": true, "sha1": "bb2d0441e073da9c584f23c2ad8c7ab8aac293bf", "size": 1478656, "source_ref": "main.cpp:77-78 (opened for extraction), nxengine/libretro/libretro.cpp:258 (existence check)", "system": "cave-story"}, {"category": "game_data", "description": "Full game asset directory tree (399 files: sprites, NPC sheets, stage maps, scripts, backgrounds)", "name": "data/", "note": "Must contain root assets (Arms.pbm, MyChar.pbm, etc.), Npc/ (36 sprite sheets), and Stage/ (333 map/script/tileset files). All files from the original freeware release.", "path": "nxengine/data/", "required": true, "source_ref": "nxengine/extract-auto/cachefiles.c:38-439 (filenames[] array loaded at init)", "system": "cave-story"}, {"category": "game_data", "description": "NPC attribute table (entity behavior flags, HP, damage, display rect offsets)", "name": "data/npc.tbl", "note": "Located in system/nxengine/data/. Used to validate data directory presence and to load NPC behavior attributes.", "path": "nxengine/data/npc.tbl", "required": true, "source_ref": "main.cpp:50 (existence check for data/ directory), ai/ai.cpp:56-59 (loaded for NPC properties)", "system": "cave-story"}, {"category": "game_data", "description": "Sprite information file (sprite positions, sizes, animation data)", "hle_fallback": true, "name": "data/sprites.sif", "note": "Not shipped in the freeware distribution. If missing, the core uses a compiled-in copy (sprites_sif.h).", "path": "nxengine/data/sprites.sif", "required": false, "source_ref": "nxengine/extract-auto/cachefiles.c:101 (in filenames[]), nxengine/extract-auto/cachefiles.c:515-521 (compiled-in fallback from sprites_sif.h)", "system": "cave-story"}, {"category": "game_data", "description": "Tile attribute lookup table (maps tile codes to collision/behavior attributes)", "hle_fallback": true, "name": "tilekey.dat", "note": "Not part of the freeware distribution. Generated by the standalone NXEngine extraction tool. The libretro core has hardcoded defaults in map.cpp:30.", "path": "nxengine/tilekey.dat", "required": false, "source_ref": "map.cpp:290-303 (loaded at init, hardcoded default if missing)", "system": "cave-story"}], "notes": "NXEngine is an open-source reimplementation of the Cave Story (Doukutsu\nMonogatari) engine by Studio Pixel, authored by Caitlin Shaw. It is not\nan emulator but a source port that loads the original freeware game data.\n\nThe core requires the freeware Cave Story distribution placed in\n{system_dir}/nxengine/. When launched without content, it looks for\nDoukutsu.exe there (libretro.cpp:257-262). When launched with a .exe\ncontent file, it uses the parent directory of that file (libretro.cpp:240).\n\nAt startup (main.cpp:75-90), the core opens Doukutsu.exe and extracts:\nORG music (extractorg.c), PXT sound effects (extractpxt.c), stage tile\nattributes (extractstages.c), 18 credit BMPs + pixel.bmp (endpic/),\nand the wavetable (cachefiles.c:464-485). All kept in memory.\n\nThe data/ directory (399 files from the freeware release) is loaded into\nan in-memory cache at init (cachefiles.c:38-439, 497-540). All subsequent\nfile access goes through this cache. The core verifies data/ by checking\nfor data/npc.tbl (main.cpp:47-58).\n\nThe font is compiled-in (bitmap_font.h). The upstream standalone version\nuses font.ttf via SDL_ttf.\n\nValid content extension: .exe (libretro.cpp:112).\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/nxengine-libretro", "source_commit": "a1c45fd4d045333f4ea523e556469b545be82b0a", "systems": ["cave-story"], "type": "libretro", "upstream": "https://github.com/Rox64/NXEngine"}


id: o2em
name: O2EM
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-o2em
upstream: https://sourceforge.net/projects/o2em/
source_commit: 679d6fec04963f6e70a7ec217e3d0ebb1fe472fc
profile_json:
{"core": "o2em_libretro", "core_classification": "community_fork", "core_version": "1.18", "cores": ["o2em_libretro"], "display_name": "Magnavox - Odyssey2 / Philips Videopac+ (O2EM)", "emulator": "O2EM", "files": [{"crc32": "8016a315", "md5": "562d5ebf9e030a40d6fabfc2f33139fd", "name": "o2rom.bin", "note": "Odyssey2 BIOS (G7000 NTSC). Default, vpp=0.", "region": ["north-america"], "required": true, "sha1": "b2e1955d957a475de2411770452eff4ea19f4cee", "size": 1024, "source_ref": "libretro.c:1143-1147", "system": "odyssey2", "validation": ["size", "crc32"]}, {"crc32": "a318e8d6", "md5": "f1071cdb0b6b10dde94d3bc8a6146387", "name": "c52.bin", "note": "Videopac G7000 European BIOS. vpp=0, auto-sets PAL.", "region": ["europe"], "required": true, "sha1": "a6120aed50831c9c0d95dbdf707820f601d9452e", "size": 1024, "source_ref": "libretro.c:1149-1155", "system": "videopac", "validation": ["size", "crc32"]}, {"crc32": "e20a9f41", "md5": "c500ff71236068e0dc0d0603d265ae76", "name": "g7400.bin", "note": "Videopac+ G7400 European BIOS. vpp=1.", "region": ["europe"], "required": true, "sha1": "5130243429b40b01a14e1304d0394b8459a6fbae", "size": 1024, "source_ref": "libretro.c:1156-1161", "system": "videopac", "validation": ["size", "crc32"]}, {"crc32": "11647ca5", "md5": "279008e4a0db2dc5f1c048853b033828", "name": "jopac.bin", "note": "Videopac+ G7400 French BIOS (JoPac). vpp=1.", "region": ["france"], "required": true, "sha1": "54b8d2c1317628de51a85fc1c424423a986775e4", "size": 1024, "source_ref": "libretro.c:1162-1167", "system": "videopac", "validation": ["size", "crc32"]}, {"category": "game_data", "name": "voice/", "note": "The Voice speech synthesis WAV samples. 9 banks (E4, E8-EF) × 128 samples.", "required": false, "source_ref": "src/voice.c:38-90, libretro.c:1130-1137"}], "notes": "Libretro port of O2EM, an Odyssey2/Videopac emulator by Daniel Boris\nand André de la Rocha. Port by Arlindo M. de Oliveira.\n\nOne BIOS ROM selected via o2em_bios core option (default o2rom.bin).\nLoaded into rom_table[0] (1024 bytes), identified by CRC32.\nvpp=1 for Videopac+ variants (g7400.bin, jopac.bin).\nCore fails to load without the selected BIOS.\n\nVoice module (\"The Voice\" speech synthesis add-on) emulation via WAV\nsamples in system/voice/. 9 banks × 128 samples, named {bank}{sample}.WAV\n(e.g. E480.WAV). Compiled with HAVE_VOICE=1 on most platforms. Optional:\ncore works without samples, speech is silently skipped.\n\nBIOS loading: libretro.c load_bios() lines 145-212.\nBIOS selection: libretro_core_options.h lines 52-64.\nVoice loading: voice.c init_voice() lines 38-79, called from libretro.c:1060-1067.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-o2em", "source_commit": "679d6fec04963f6e70a7ec217e3d0ebb1fe472fc", "systems": ["odyssey2", "videopac"], "type": "libretro", "upstream": "https://sourceforge.net/projects/o2em/"}


id: oberon
name: Oberon
type: libretro
classification: community_fork
source: https://github.com/libretro/oberon-risc-emu
upstream: https://github.com/pdewacht/oberon-risc-emu
source_commit: 532b44c31190640628fea388bb593cc247814612
profile_json:
{"core_classification": "community_fork", "core_version": "2020-07-01", "cores": ["oberon"], "display_name": "Oberon RISC Emulator", "emulator": "Oberon", "files": [], "notes": {"boot_process": "Bootloader embedded in ROM reads boot sector from SPI disk, loads Oberon inner core into RAM. Content is raw sector .dsk images.\n"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/oberon-risc-emu", "source_commit": "532b44c31190640628fea388bb593cc247814612", "systems": ["oberon"], "type": "libretro", "upstream": "https://github.com/pdewacht/oberon-risc-emu"}


id: onscripter
name: ONScripter
type: libretro
classification: community_fork
source: https://github.com/iyzsong/onscripter-libretro
upstream: https://github.com/ogapee/onscripter
source_commit: ec4ff1842d498faaa844d570becf561d088deea0
profile_json:
{"core_classification": "community_fork", "core_version": "0.3", "cores": ["onscripter"], "display_name": "ONScripter", "emulator": "ONScripter", "files": [], "notes": "Clone of NScripter, a Japanese visual novel engine. The libretro port\nwraps upstream ogapee/onscripter (tag 20230825) via an SDL-to-libretro\nshim.\n\nNo system files required. The .info declares no firmware. The core\nnever calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All files\n(scripts, fonts, archives, config) are loaded from the game directory\nvia archive_path (libretro.cpp:120-121, ScriptHandler.cpp:148-161).\n\ndefault.ttf, registry.txt, dll.txt are per-game assets shipped with\neach visual novel, not system-level files.\n\nExperimental core. No save state support (retro_serialize_size = 0).\n", "profiled_date": "2026-03-24", "source": "https://github.com/iyzsong/onscripter-libretro", "source_commit": "ec4ff1842d498faaa844d570becf561d088deea0", "systems": ["onscripter"], "type": "libretro", "upstream": "https://github.com/ogapee/onscripter"}


id: onsyuri
name: ONScripter Yuri
type: libretro
classification: game_engine
source: https://github.com/YuriSizuku/OnscripterYuri
upstream: https://github.com/YuriSizuku/OnscripterYuri
source_commit: ec954a3475c3bf41517d0bdb84f48cd28c0f4f72
profile_json:
{"core_classification": "game_engine", "core_version": "0.7.4+2", "cores": ["onsyuri"], "display_name": "ONScripter Yuri", "emulator": "ONScripter Yuri", "files": [], "notes": "Clone of the NScripter visual novel engine, forked from ONScripter-Jh.\nThe libretro port lives in the upstream repo (src/onsyuri_libretro/).\nNo system files required. Game scripts (0.txt, nscript.dat, etc.),\nfonts (default.ttf), and assets are loaded from the game directory.\nThe core does not use RetroArch's system directory.\n", "profiled_date": "2026-03-24", "source": "https://github.com/YuriSizuku/OnscripterYuri", "source_commit": "ec954a3475c3bf41517d0bdb84f48cd28c0f4f72", "systems": ["onscripter"], "type": "libretro", "upstream": "https://github.com/YuriSizuku/OnscripterYuri"}


id: openbor
name: openbor
type: standalone
classification: game_engine
source: https://github.com/DCurrent/openbor
upstream: https://github.com/DCurrent/openbor
source_commit: 0ece95d1c113c1ce86f2da826b3c25b521ee116d
profile_json:
{"core_classification": "game_engine", "core_version": "4.0 Build 7949", "cores": ["openbor", "openbor4432", "openbor6330", "openbor6412", "openbor6510", "openbor7142", "openbor7530"], "display_name": "OpenBOR Game Engine", "emulator": "openbor", "files": [], "mode": "standalone", "notes": "Sprite based side scrolling engine continuing Senile Team's Beats of Rage,\nbuilt for beat em up and shooter style 2D games. A game is a module: a .pak\narchive carrying its own data tree, and that archive is what the frontends\nhand over as content. ES-DE runs the .pak on macOS, the game's own AppImage,\n.exe or .lnk on Linux and Windows, and opens the engine UI on Android since\nthe package takes no file argument. Batocera runs OpenBOR<build> <rom> after\nreading a four digit build tag out of the file name in openborGenerator.py,\nwhich is why it packages several engine versions side by side. RetroDECK\nlaunches the 4.0 Linux AppImage, RetroBat runs OpenBOR.exe from a per build\nfolder.\n\npackfile holds \"bor.pak\" until argv[1] names a path that exists, and with no\nsuch argument the built in menu lists Paks/ and the player picks one\n(engine/sdl/sdlport.c:25,124-135, engine/sdl/menu.c:172-203,802).\npackfile_supported accepts any name containing .pak and skips menu.pak\n(engine/source/gamelib/packfile.c:1577-1584).\n\nEverything read for a running game comes out of that module. buffer_pakfile\ntries the real filesystem first through fopen, then the same path inside the\narchive (engine/openbor.c:921-965,969-1018), so data/models.txt,\ndata/levels.txt, data/video.txt, data/menu.txt, the scene scripts and the\nsprites and sounds under data/ resolve either from an unpacked data/ directory\nbeside the binary (engine/source/gamelib/packfile.c:781-810) or from the pak.\nFour names take precedence over their in-pak copy when they exist on disk:\ntranslation/translation.txt and translation/menu.txt over data/translation.txt\n(engine/source/gamelib/translation.c:102-106, engine/openbor.c:5975,53240),\nsaves/lifebar.txt over data/lifebar.txt (engine/openbor.c:4965-4972), and on\nAndroid Saves/<module>/touch.txt then Saves/touch.txt over data/touch.txt\n(engine/android/app/jni/openbor/video.c:210-218). Each holds text or a control\nlayout written for one module. The engine/translation.txt copied into the\nrelease folder by CMakeLists.txt:239 is a blank msgid template whose own first\nline sends it to the module data folder, and the published Windows archive for\nv7533 contains only OpenBOR.exe.\n\nStartup reads nothing. Logo, menu and log viewer artwork are PNG byte arrays\ncompiled in from engine/resources (engine/sdl/menu.c:20-27), menu text draws\nfrom the embedded hankaku face (engine/sdl/menu.c:16,228), the GLSL fragment\nshaders are string literals (engine/sdl/opengl.c:45-116), and the Android\ntouch skin is a header (engine/android/app/jni/openbor/video.c:49). No gamepad\nmapping file is read, nothing is dlopened at runtime, the Android package\nships an empty assets directory, and the SecurePAK paths compile out of every\nbuild because no build file defines SPK_SUPPORTED\n(engine/source/gamelib/packfile.c:36, engine/source/gamelib/packfile.h:9,135).\n\nFiles the engine writes rather than expects: Paks, Saves, Logs and ScreenShots\nare created at startup when missing (engine/sdl/sdlport.c:30-33,119-122),\nsettings and progress land in Saves as <module>.cfg, .sav, .hi, .scr and .inp\nalongside default.cfg (engine/source/utils.c:284-312,\nengine/openbor.c:2675-3040), and the viewer reads back Logs/OpenBorLog.txt and\nLogs/ScriptLog.txt (engine/source/utils.c:47-62, engine/sdl/menu.c:652-700).\npaks/logoff.txt is a marker whose existence alone skips the startup logo, so\nthe player creates it empty (engine/sdl/menu.c:707-716). Module script can\nopen any path it names through openfilestream\n(engine/openborscript.c:10505-10600).\n", "profiled_date": "2026-08-12", "source": "https://github.com/DCurrent/openbor", "source_commit": "0ece95d1c113c1ce86f2da826b3c25b521ee116d", "systems": ["openbor"], "type": "standalone", "upstream": "https://github.com/DCurrent/openbor"}


id: openlara
name: OpenLara
type: libretro
classification: game_engine
source: https://github.com/libretro/OpenLara
upstream: https://github.com/XProger/OpenLara
source_commit: 8574118ddd87d47d41c1cd1d34393760b618957d
profile_json:
{"core_classification": "game_engine", "core_version": "v1", "cores": ["openlara"], "display_name": "Tomb Raider (OpenLara)", "emulator": "OpenLara", "files": [], "notes": "Open-source reimplementation of the classic Tomb Raider engine (TR1-TR4). Accepts phd|psx|tr2|sat extensions (main.cpp:246). need_fullpath is true - the core resolves game assets relative to the content directory. retro_load_game (main.cpp:602) derives contentDir from the level file path and strips level/ if present. Game version auto-detected by probing for known level files (gameflow.h:1047-1071). Audio tracks loaded from audio/ subdirectories as .ogg/.mp3/.wav files or cdaudio.wad (gameflow.h:1272-1356). System directory used only for shader cache at {system_dir}/openlara/cache/ (main.cpp:177-197). No BIOS, firmware, or engine data files required in system directory. .info omits sat from supported_extensions (code declares it).\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/OpenLara", "source_commit": "8574118ddd87d47d41c1cd1d34393760b618957d", "systems": ["tomb-raider"], "type": "libretro", "upstream": "https://github.com/XProger/OpenLara", "verification": "existence"}


id: openmsx
name: openMSX
type: standalone
source: https://github.com/openMSX/openMSX
upstream: https://github.com/openMSX/openMSX
source_commit: 632d46cc00015bc37be6cbb63cacb70e90434094
profile_json:
{"core_version": "21.0", "cores": ["openmsx"], "display_name": "MSX / ColecoVision / Spectravideo (openMSX)", "emulator": "openMSX", "files": [{"description": "NMS 8245 combined system ROM (BIOS+BASIC 0x0000-0x7FFF, Sub ROM 0x8000-0xBFFF, FDC 0xC000-0xFFFF)", "name": "NMS8245SystemROM1.08.bin", "required": true, "sha1": "cc57c1dcd7249ea9f8e2547244592e7d97308ed0", "size": 65536, "source_ref": "share/machines/Boosted_MSX2_EN.xml:24,65,111", "validation": ["sha1"]}, {"description": "Panasonic SW-M004 FMPAC (FM-PAC) sound cartridge ROM", "name": "fmpac.rom", "required": true, "sha1": "fec451b9256570a0e4869355a40329c57f40705f", "source_ref": "share/machines/Boosted_MSX2_EN.xml:83", "validation": ["sha1"]}, {"description": "Sanyo PHC-70FD2 MSX-BASIC Kun compiler ROM", "name": "phc-70fd2_basickun.rom", "required": true, "sha1": "22b3191d865010264001b9d896186a9818478a6b", "source_ref": "share/machines/Boosted_MSX2_EN.xml:89, share/machines/Boosted_MSX2+_JP.xml:167, share/machines/Boosted_MSXturboR_with_IDE.xml:79", "validation": ["sha1"]}, {"description": "Yamaha YRW801 MoonSound wavetable ROM", "name": "yrw801.rom", "required": true, "sha1": "32760893ce06dbe3930627755ba065cc3d8ec6ca", "source_ref": "share/machines/Boosted_MSX2_EN.xml:186, share/machines/Boosted_MSX2+_JP.xml:120, share/machines/Boosted_MSXturboR_with_IDE.xml:203", "validation": ["sha1"]}, {"description": "FS-A1WSX MSX2+ BIOS and BASIC ROM", "name": "fs-a1wsx_basic-bios2p.rom", "required": true, "sha1": "f4433752d3bf876bfefb363c749d4d2e08a218b6", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:143", "validation": ["sha1"]}, {"description": "FS-A1WSX MSX-MUSIC (OPLL) ROM", "name": "fs-a1wsx_fmbasic.rom", "required": true, "sha1": "aad42ba4289b33d8eed225d42cea930b7fc5c228", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:155", "validation": ["sha1"]}, {"description": "FS-A1WSX MSX2+ Sub ROM", "name": "fs-a1wsx_msx2psub.rom", "required": true, "sha1": "fe0254cbfc11405b79e7c86c7769bd6322b04995", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:218", "validation": ["sha1"]}, {"description": "FS-A1WSX Kanji Driver with BASIC ROM", "name": "fs-a1wsx_kanjibasic.rom", "required": true, "sha1": "dcc3a67732aa01c4f2ee8d1ad886444a4dbafe06", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:225", "validation": ["sha1"]}, {"description": "FS-A1WSX FDC (TC8566AF) disk controller ROM", "name": "fs-a1wsx_disk.rom", "required": true, "sha1": "7ed7c55e0359737ac5e68d38cb6903f9e5d7c2b6", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:237", "validation": ["sha1"]}, {"description": "FS-A1WSX Panasonic firmware ROM", "name": "fs-a1wsx_firmware.rom", "required": true, "sha1": "3330d9b6b76e3c4ccb7cf252496ed15d08b95d3f", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:251", "validation": ["sha1"]}, {"aliases": ["fs-a1gt_kanjifont.rom"], "description": "Kanji font ROM (shared by FS-A1WSX and FS-A1GT machines)", "name": "fs-a1wsx_kanjifont.rom", "required": true, "sha1": "5aff2d9b6efc723bc395b0f96f0adfa83cc54a49", "source_ref": "share/machines/Boosted_MSX2+_JP.xml:28, share/machines/Boosted_MSXturboR_with_IDE.xml:216", "validation": ["sha1"]}, {"description": "FS-A1GT turboR combined firmware (512KB, contains BIOS, Sub ROM, Kanji, FDC, MSX-MUSIC, Opening ROM)", "name": "fs-a1gt_firmware.rom", "required": true, "sha1": ["e779c338eb91a7dea3ff75f3fde76b8af22c4a3a", "5fa3aa79aeba2c0441f349e78e9a16d9d64422ea"], "source_ref": "share/machines/Boosted_MSXturboR_with_IDE.xml:23", "validation": ["sha1"]}, {"description": "Sunrise IDE 2.50 interface ROM", "name": "ide250.dat", "required": true, "sha1": "93e41c7d479bc90c1d1f6d081af20fd9924b8ada", "source_ref": "share/machines/Boosted_MSXturboR_with_IDE.xml:49", "validation": ["sha1"]}, {"description": "ColecoVision system BIOS ROM", "name": "COLECO.ROM", "required": true, "sha1": "45bedc4cbdeac66c7df59e9e599195c778d86a92", "source_ref": "share/machines/ColecoVision_SGM.xml:57", "validation": ["sha1"]}, {"description": "SVI-328 BASIC v1.11 ROM", "name": "svi-3x8_v111.rom", "required": true, "sha1": "10349ce675f6d6d47f0976e39cb7188eba858d89", "source_ref": "share/machines/Spectravideo_SVI-328.xml:52", "validation": ["sha1"]}, {"description": "Pioneer PX-7 MSX1 BIOS and BASIC ROM", "name": "px-7_basic-bios1.rom", "required": true, "sha1": "302afb5d8be26c758309ca3df611ae69cced2821", "source_ref": "share/machines/Pioneer_PX-7.xml:67", "validation": ["sha1"]}, {"description": "Pioneer PX-7 LaserDisc PBASIC controller ROM", "name": "px-7_pbasic.rom", "required": true, "sha1": "665d805f96616e1037f1823050657b7849899283", "source_ref": "share/machines/Pioneer_PX-7.xml:82", "validation": ["sha1"]}], "notes": "Standalone MSX emulator supporting MSX1 through turboR, ColecoVision,\nSpectravideo, and Pioneer LaserDisc hardware. Uses XML machine definitions\n(share/machines/) that describe complete hardware configurations and\nreference system ROMs by filename and SHA1 hash.\n\nROM resolution via FilePool (src/file/FilePool.cc, FilePoolCore.cc):\nsearches configured directories for files matching SHA1 checksums.\nFilenames are secondary hints; SHA1 is the primary lookup key.\nFiles may be gzipped or individually zipped.\n\nBatocera configgen (openmsxGenerator.py) configures filepool paths\n(/userdata/bios/Machines position 1, /userdata/bios/openmsx position 2)\nand selects machines per system type:\n  msx1, msx2 -> Boosted_MSX2_EN (enhanced Philips NMS 8245)\n  msx2+      -> Boosted_MSX2+_JP (enhanced Panasonic FS-A1WSX)\n  msxturbor  -> Boosted_MSXturboR_with_IDE (enhanced Panasonic FS-A1GT)\n  colecovision -> ColecoVision_SGM\n  spectravideo -> Spectravideo_SVI-328\n  laserdisc (.ogv) -> Pioneer_PX-7\n\nC-BIOS (open source MSX BIOS replacement) is shipped with openMSX in\nContrib/cbios/ and supports cartridge-only games. Not used by Batocera.\n\n237 machine definitions exist in total. Each machine has its own ROM\nrequirements. Only ROMs for Batocera-selected machines are listed here.\nUsers selecting other machines via openMSX GUI need additional ROMs.\n", "profiled_date": "2026-03-26", "source": "https://github.com/openMSX/openMSX", "source_commit": "632d46cc00015bc37be6cbb63cacb70e90434094", "systems": ["msx", "msx1", "msx2", "msx2+", "msxturbor", "colecovision", "spectravideo"], "type": "standalone", "upstream": "https://github.com/openMSX/openMSX"}


id: opentyrian
name: OpenTyrian
type: libretro
classification: game_engine
source: https://github.com/trapexit/libretro-opentyrian
upstream: https://github.com/opentyrian/opentyrian
source_commit: 3e9df7a6bc486190ad5085586d0c4e9cb1baf14c
profile_json:
{"core_classification": "game_engine", "core_version": "1.0.0.6", "cores": ["opentyrian", "tyrian"], "display_name": "Tyrian (OpenTyrian)", "emulator": "OpenTyrian", "files": [{"category": "game_data", "description": "Main shape tables (12 sprite banks: fonts, interface, options, game sprites)", "name": "tyrian.shp", "required": true, "source_ref": "src/sprite.c:669-722 (JE_loadMainShapeTables)", "system": "tyrian"}, {"category": "game_data", "description": "Color palette data (all palettes used by the game)", "name": "palette.dat", "required": true, "source_ref": "src/palette.c:45 (JE_loadPals)", "system": "tyrian"}, {"category": "game_data", "description": "Help and item data (weapons, ships, shields, enemies, help text)", "name": "tyrian.hdt", "required": true, "source_ref": "src/episodes.c:60 (JE_loadItemDat), src/helptext.c:184 (JE_loadHelpText)", "system": "tyrian"}, {"category": "game_data", "description": "Picture data (menu backgrounds, cutscene images)", "name": "tyrian.pic", "required": true, "source_ref": "src/picload.c:32 (JE_loadPic)", "system": "tyrian"}, {"category": "game_data", "description": "Credits text (encrypted pascal strings)", "name": "tyrian.cdt", "required": true, "source_ref": "src/mainint.c:2002 (JE_drawCredits)", "system": "tyrian"}, {"category": "game_data", "description": "Sound effects", "name": "tyrian.snd", "required": true, "source_ref": "src/nortsong.c:112, src/opentyr.c:333 (JE_loadSndFile)", "system": "tyrian"}, {"category": "game_data", "description": "Voice samples", "name": "voices.snd", "required": true, "source_ref": "src/nortsong.c:134, src/opentyr.c:333 (JE_loadSndFile)", "system": "tyrian"}, {"category": "game_data", "description": "Music data (all game tracks)", "name": "music.mus", "required": true, "source_ref": "src/loudness.c:196 (load_music)", "system": "tyrian"}, {"category": "game_data", "description": "Episode 1 level data (also used as data directory detection marker)", "name": "tyrian1.lvl", "required": true, "source_ref": "src/file.c:51 (data_dir probe), src/episodes.c:274 (JE_scanForEpisodes)", "system": "tyrian"}, {"category": "game_data", "description": "Episode 1 level definitions", "name": "levels1.dat", "required": true, "source_ref": "src/episodes.c:263 (JE_initEpisode), src/tyrian2.c:2434", "system": "tyrian"}, {"category": "game_data", "description": "Episode 1 datacube text (in-game story lore)", "name": "cubetxt1.dat", "required": true, "source_ref": "src/episodes.c:262 (JE_initEpisode), src/game_menu.c:1723", "system": "tyrian"}, {"category": "game_data", "description": "Episode 2 level data", "name": "tyrian2.lvl", "required": false, "source_ref": "src/episodes.c:274", "system": "tyrian"}, {"category": "game_data", "description": "Episode 2 level definitions", "name": "levels2.dat", "required": false, "source_ref": "src/episodes.c:263", "system": "tyrian"}, {"category": "game_data", "description": "Episode 2 datacube text", "name": "cubetxt2.dat", "required": false, "source_ref": "src/episodes.c:262", "system": "tyrian"}, {"category": "game_data", "description": "Episode 3 level data", "name": "tyrian3.lvl", "required": false, "source_ref": "src/episodes.c:274", "system": "tyrian"}, {"category": "game_data", "description": "Episode 3 level definitions", "name": "levels3.dat", "required": false, "source_ref": "src/episodes.c:263", "system": "tyrian"}, {"category": "game_data", "description": "Episode 3 datacube text", "name": "cubetxt3.dat", "required": false, "source_ref": "src/episodes.c:262", "system": "tyrian"}, {"category": "game_data", "description": "Episode 4 level data", "name": "tyrian4.lvl", "required": false, "source_ref": "src/episodes.c:274", "system": "tyrian"}, {"category": "game_data", "description": "Episode 4 level definitions", "name": "levels4.dat", "required": false, "source_ref": "src/episodes.c:263", "system": "tyrian"}, {"category": "game_data", "description": "Episode 4 datacube text", "name": "cubetxt4.dat", "required": false, "source_ref": "src/episodes.c:262", "system": "tyrian"}, {"category": "game_data", "description": "Episode 5 level data", "name": "tyrian5.lvl", "required": false, "source_ref": "src/episodes.c:274", "system": "tyrian"}, {"category": "game_data", "description": "Episode 5 level definitions", "name": "levels5.dat", "required": false, "source_ref": "src/episodes.c:263", "system": "tyrian"}, {"category": "game_data", "description": "Episode 5 datacube text", "name": "cubetxt5.dat", "required": false, "source_ref": "src/episodes.c:262", "system": "tyrian"}, {"category": "game_data", "name": "shapes).dat", "required": true, "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131", "system": "tyrian"}, {"category": "game_data", "name": "shapesw.dat", "required": true, "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131", "system": "tyrian"}, {"category": "game_data", "name": "shapesx.dat", "required": true, "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131", "system": "tyrian"}, {"category": "game_data", "name": "shapesy.dat", "required": true, "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131", "system": "tyrian"}, {"category": "game_data", "name": "shapesz.dat", "required": true, "source_ref": "src/tyrian2.c:3039, 3079, src/lvlmast.c:128-131", "system": "tyrian"}, {"category": "game_data", "description": "Compressed sprites (arrows, mouse cursor)", "name": "newsh1.shp", "required": false, "source_ref": "src/mainint.c:493, src/mainint.c:884, src/mainint.c:1462 (JE_loadCompShapes '1')", "system": "tyrian"}, {"category": "game_data", "description": "Compressed sprites (explosions)", "name": "newsh6.shp", "required": false, "source_ref": "src/tyrian2.c:771 (JE_loadCompShapes '6')", "system": "tyrian"}, {"category": "game_data", "description": "Compressed sprites (destruct mode)", "name": "newsh~.shp", "required": false, "source_ref": "src/destruct.c:569 (JE_loadCompShapes '~')", "system": "tyrian"}, {"category": "game_data", "description": "Christmas mode shape tables (replaces tyrian.shp at Xmas)", "name": "tyrianc.shp", "required": false, "source_ref": "src/opentyr.c:301-309", "system": "tyrian"}, {"category": "game_data", "description": "Christmas mode voice samples (replaces voices.snd at Xmas)", "name": "voicesc.snd", "required": false, "source_ref": "src/opentyr.c:301, src/opentyr.c:333", "system": "tyrian"}, {"category": "game_data", "description": "Ending animation sequence", "name": "tyrend.anm", "required": false, "source_ref": "src/tyrian2.c:2473 (JE_playAnim)", "system": "tyrian"}, {"category": "game_data", "description": "Additional ship graphics (PCX image)", "name": "tshp2.pcx", "required": false, "source_ref": "src/tyrian2.c:2757, src/pcxload.c:25-29", "system": "tyrian"}, {"category": "game_data", "description": "Ending sequence character sprites", "name": "estsc.shp", "required": false, "source_ref": "src/mainint.c:1995 (load_sprites_file EXTRA_SHAPES)", "system": "tyrian"}, {"category": "game_data", "description": "Demo replay file 1", "name": "demo.1", "required": false, "source_ref": "src/mainint.c:1781-1786", "system": "tyrian"}, {"category": "game_data", "description": "Demo replay file 2", "name": "demo.2", "required": false, "source_ref": "src/mainint.c:1781-1786", "system": "tyrian"}, {"category": "game_data", "description": "Demo replay file 3", "name": "demo.3", "required": false, "source_ref": "src/mainint.c:1781-1786", "system": "tyrian"}, {"category": "game_data", "description": "Demo replay file 4", "name": "demo.4", "required": false, "source_ref": "src/mainint.c:1781-1786", "system": "tyrian"}, {"category": "game_data", "description": "Demo replay file 5", "name": "demo.5", "required": false, "source_ref": "src/mainint.c:1781-1786", "system": "tyrian"}], "notes": "OpenTyrian is a source port of the DOS vertical scrolling shooter Tyrian,\nported to libretro. It loads the Tyrian 2.1 freeware game data directly.\nTyrian 1.x, 2.0, and Tyrian 2000 data files are NOT compatible.\n\nThe core's .info file sets supports_no_game = true. The core locates the\ndata directory by probing for tyrian1.lvl in several paths (file.c:33-58):\n  1. custom_data_dir (set via --data= CLI argument, params.c:120)\n  2. TYRIAN_DIR (compile-time constant, Makefile:5-8)\n  3. \"data\" (relative subdirectory)\n  4. \".\" (current working directory)\nThe first path containing tyrian1.lvl wins.\n\nOn startup (opentyr.c:270-388), the core:\n  - Scans for episodes by checking tyrian1.lvl through tyrian5.lvl\n    (episodes.c:270-277)\n  - Loads palette data from palette.dat (palette.c:45)\n  - Loads main shape tables from tyrian.shp (sprite.c:669-722, 12 sprite\n    banks packed in one file: fonts, interface, option sprites, game sprites,\n    weapon sprites, etc.)\n  - Loads sound effects from tyrian.snd and voice samples from voices.snd\n    (nortsong.c:112-134, opentyr.c:333)\n  - Loads music from music.mus (loudness.c:196)\n  - Loads help/item data from tyrian.hdt (helptext.c:184, episodes.c:60)\n  - Loads picture data from tyrian.pic (picload.c:32)\n  - Loads credits from tyrian.cdt (mainint.c:2002)\n\nEach episode loads additional files dynamically (episodes.c:261-263):\n  - tyrianN.lvl (level data, N=1-5)\n  - levelsN.dat (episode level definitions)\n  - cubetxtN.dat (datacube text for story mode)\n\nThe game engine also loads shape files on demand:\n  - shapesX.dat where X is a character read from the level file (5 used: ), W, X, Y, Z)\n    (lvlmast.c:23-27, tyrian2.c:3079). Characters used:\n    2,4,7,8,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,5,#,V,0,@,3,^,9\n  - newshX.shp loaded via JE_loadCompShapes (sprite.c:469-481) using the\n    same character set plus '~' for destruct mode (destruct.c:569) and\n    '1' for arrow/mouse cursor sprites (mainint.c:493,884,1462) and\n    '6' for explosion sprites (tyrian2.c:771)\n\nAdditional optional files:\n  - tyrianc.shp and voicesc.snd for Christmas mode (opentyr.c:301-309)\n  - tyrend.anm for ending animation (tyrian2.c:2473)\n  - tshp2.pcx loaded during gameplay (tyrian2.c:2757, pcxload.c:25)\n  - estsc.shp for ending sequence sprites (mainint.c:1995)\n  - demo.1 through demo.5 for demo playback (mainint.c:1781-1786)\n\nAll filenames must be lowercase on case-sensitive filesystems. The repo\nincludes lower-script.sh for batch renaming.\n\nThe Tyrian 2.1 freeware data is available at:\nhttps://camanis.net/tyrian/tyrian21.zip\n\nNo separate BIOS or firmware is needed. The freeware game data set is the\nsole system requirement.\n", "profiled_date": "2026-03-24", "source": "https://github.com/trapexit/libretro-opentyrian", "source_commit": "3e9df7a6bc486190ad5085586d0c4e9cb1baf14c", "systems": ["tyrian"], "type": "libretro", "upstream": "https://github.com/opentyrian/opentyrian", "verification": "existence"}


id: opera
name: Opera (4DO)
type: libretro
classification: community_fork
source: https://github.com/libretro/opera-libretro
upstream: https://sourceforge.net/projects/freedo/
source_commit: 636a8dd6340bce7073168ddefd29841fc5e2d213
profile_json:
{"core": "opera_libretro", "core_classification": "community_fork", "core_version": "1.0.0", "cores": ["opera"], "display_name": "The 3DO Company - 3DO (Opera)", "emulator": "Opera (4DO)", "files": [{"md5": "f47264dd47fe30f73ab3c010015c155b", "name": "panafz1.bin", "note": "Panasonic FZ-1 (U). Version unknown, dated 1993-08-03.", "region": ["north-america"], "required": true, "sha1": "34bf189111295f74d7b7dfc1f304d98b8d36325a", "size": 1048576, "source_ref": "libopera/opera_bios.c:6-17", "system": "3do"}, {"md5": "a496cfdded3da562759be3561317b605", "name": "panafz1j.bin", "note": "Panasonic FZ-1 (J). Version 1.54, dated 1994-01-22.", "region": ["japan"], "required": true, "sha1": "ec7ec62d60ec0459a14ed56ebc66761ef3c80efc", "size": 1048576, "source_ref": "libopera/opera_bios.c:19-30", "system": "3do"}, {"md5": "f6c71de7470d16abe4f71b1444883dc8", "name": "panafz1j-norsa.bin", "note": "Panasonic FZ-1 (J) with RSA check removed. Version 1.54.", "region": ["japan"], "required": false, "sha1": "a417587ae3b0b8ef00c830920c21af8bee88e419", "size": 1048576, "source_ref": "libopera/opera_bios.c:32-43", "system": "3do"}, {"md5": "51f2f43ae2f3508a14d9f56597e2d3ce", "name": "panafz10.bin", "note": "Panasonic FZ-10 (U). Version 1.59.1.1, dated 1994-08-25.", "region": ["north-america"], "required": true, "sha1": "3c912300775d1ad730dc35757e279c274c0acaad", "size": 1048576, "source_ref": "libopera/opera_bios.c:45-56", "system": "3do"}, {"md5": "1477bda80dc33731a65468c1f5bcbee9", "name": "panafz10-norsa.bin", "note": "Panasonic FZ-10 (U) with RSA check removed. Version 1.59.1.1.", "region": ["north-america"], "required": false, "sha1": "f05e642322c03694f06a809c0b90fc27ac73c002", "size": 1048576, "source_ref": "libopera/opera_bios.c:58-69", "system": "3do"}, {"md5": "a48e6746bd7edec0f40cff078f0bb19f", "name": "panafz10e-anvil.bin", "note": "Panasonic FZ-10 (E) ANVIL. Version 1.66.1.1, dated 1994-09-22.", "region": ["europe"], "required": true, "sha1": "a900371f0cdcdc03f79557f11d406fd71251a5fd", "size": 1048576, "source_ref": "libopera/opera_bios.c:71-82", "system": "3do"}, {"md5": "cf11bbb5a16d7af9875cca9de9a15e09", "name": "panafz10e-anvil-norsa.bin", "note": "Panasonic FZ-10 (E) ANVIL with RSA check removed. Version 1.66.1.1.", "region": ["europe"], "required": false, "sha1": "2765c7b4557cc838b32567d2428d088980295159", "size": 1048576, "source_ref": "libopera/opera_bios.c:84-95", "system": "3do"}, {"md5": "8639fd5e549bd6238cfee79e3e749114", "name": "goldstar.bin", "note": "Goldstar GDO-101M. Version 1.59, dated 1994-05-10.", "region": ["north-america"], "required": true, "sha1": "c4a2e5336f77fb5f743de1eea2cda43675ee2de7", "size": 1048576, "source_ref": "libopera/opera_bios.c:97-108", "system": "3do"}, {"md5": "35fa1a1ebaaeea286dc5cd15487c13ea", "name": "sanyotry.bin", "note": "Sanyo Try IMP-21J. Version 1.59, dated 1994-05-10.", "region": ["japan"], "required": true, "sha1": "b01c53da256dde43ffec4ad3fc3adfa8d635e943", "size": 1048576, "source_ref": "libopera/opera_bios.c:110-121", "system": "3do"}, {"md5": "8970fc987ab89a7f64da9f8a8c4333ff", "name": "3do_arcade_saot.bin", "note": "3DO Arcade SAOT board BIOS. Half the size of consumer BIOS ROMs.", "region": ["north-america"], "required": false, "sha1": "520d3d1b5897800af47f92efd2444a26b7a7dead", "size": 524288, "source_ref": "libopera/opera_bios.c:123-134", "system": "3do"}, {"md5": "b8dc97f778a6245c58e064b0312e8281", "name": "panafz1-kanji.bin", "note": "Kanji font ROM for FZ-1. Version 16.4, dated 1993-08-03. Optional, Japanese text only.", "region": ["japan"], "required": false, "sha1": "acd39a8fee1b9d2950d5ab447846c11fb31af63e", "size": 933636, "source_ref": "libopera/opera_bios.c:141-152", "system": "3do"}, {"md5": "c23fb5d5e6bb1c240d02cf968972be37", "name": "panafz1j-kanji.bin", "note": "Kanji font ROM for FZ-1J. Version 16.4, dated 1993-08-03. Optional, Japanese text only.", "region": ["japan"], "required": false, "sha1": "884515605ee243577ab20767ef8c1a7368e4e407", "size": 1048576, "source_ref": "libopera/opera_bios.c:154-165", "system": "3do"}, {"md5": "428577250f43edc902ea239c50d2240d", "name": "panafz10ja-anvil-kanji.bin", "note": "Kanji font ROM for FZ-10JA ANVIL. Version 16.4. Optional, Japanese text only.", "region": ["japan"], "required": false, "sha1": "2e857b957803d0331fd229328df01f3ffab69eee", "size": 1048576, "source_ref": "libopera/opera_bios.c:167-178", "system": "3do"}], "notes": "Opera is the libretro port of the 4DO/FreeDO 3DO Interactive Multiplayer emulator.\nThe core requires exactly one system BIOS ROM (rom1) selected via the opera_bios\ncore option. BIOS files are loaded from the system directory with\nread_file_from_system_directory() and byteswapped on little-endian hosts.\nThe core will not start without a valid BIOS ROM.\n\nThe user selects which BIOS to use from the core option dropdown, which only\nlists BIOS files physically present in the system directory. Any single BIOS\nfrom the list below is sufficient to run games from its region.\n\nKanji font ROMs (rom2) are optional and only needed for Japanese text rendering.\nThey are loaded via opera_lr_opts_set_font() and selected via opera_font core option.\n\nAll BIOS files are exactly 1 MB (1048576 bytes) except 3do_arcade_saot.bin (512 KB)\nand panafz1-kanji.bin (933636 bytes).\n\nBIOS definitions: libopera/opera_bios.c BIOSES[] lines 3-136.\nBIOS loading: opera_lr_opts.c opera_lr_opts_set_bios() lines 239-270.\nFont loading: opera_lr_opts.c opera_lr_opts_get_font() lines 274-293,\nopera_lr_opts_set_font() lines 297-328.\nCore option: libretro_core_options.c opera_bios / opera_font.\n", "platform_details": {"3do": {"bios_selection": "core option opera_bios, user picks from detected files", "byteswap": "rom1 is byteswapped on little-endian (opera_mem_rom1_byteswap32_if_le)", "font_selection": "core option opera_font, optional", "hle_available": false, "rom1_arcade_size": 524288, "rom1_size": 1048576, "rom2_max_size": 1048576, "source_ref": "opera_lr_opts.c:239-270, libopera/opera_bios.c:3-180"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/opera-libretro", "source_commit": "636a8dd6340bce7073168ddefd29841fc5e2d213", "systems": ["3do"], "type": "libretro", "upstream": "https://sourceforge.net/projects/freedo/"}


id: oricutron
name: Oricutron
type: standalone
classification: other
source: https://github.com/pete-gordon/oricutron
upstream: https://www.petergordon.org.uk/oricutron/
source_commit: 002279fce9fa756d1d63cdc40ae97939eb7de7ed
profile_json:
{"analysis": {"generated_files": {"note": "Produced by the emulator, none is user-supplied", "written_only": ["printer_out.txt", "AVI captures", "snapshots", "tape captures", "debugger log and memory dumps"]}, "gui_images": {"conditional_entries": {"note": "gfx_oric1kbd.bmp sits behind WWW_NO_ORIC1 and gfx_pravetzkbd.bmp behind WWW_NO_PRAVETZ (gui.c:112-118, gui.h:114-120), both of which only cut down the emscripten build. A native build carries all fifteen.\n"}, "fatal": true, "files": ["statusbar.bmp", "disk_ejected.bmp", "disk_idle.bmp", "disk_active.bmp", "disk_modified.bmp", "disk_modactive.bmp", "tape_ejected.bmp", "tape_pause.bmp", "tape_play.bmp", "tape_stop.bmp", "tape_record.bmp", "avirec.bmp", "gfx_oric1kbd.bmp", "gfx_atmoskbd.bmp", "gfx_pravetzkbd.bmp"], "lookup": "program directory + IMAGEPREFIX, which is images/ everywhere except AmigaOS and the emscripten build (system.h:38-68)", "non_fatal": [{"filename": "winicon.bmp", "note": "Read with SDL_LoadBMP and passed to SDL_COMPAT_WM_SetIcon, which takes a null surface.", "source_ref": "gui.c:2306-2307"}], "note": "init_gui returns SDL_FALSE on the first image it cannot read and the emulator exits (main.c:1416-1420). The set ships in the source tree and in the binary releases, and packagers install it beside the binary: the RetroDECK recipe copies the whole images directory (RetroDECK/components archive_later/oricutron/component_recipe.json) and the ES-DE guide has Linux users take images and roms out of the Windows archive (USERGUIDE.md:3377-3391).\n", "source_ref": "gui.c:100-117 (gimgs table), gui.c:425-492 (gimg_load), gui.c:2464-2466 (init_gui)", "unused": [{"filename": "status_bar.bmp", "reason": "the gimgs table names statusbar.bmp; no code path reads this second file"}], "validation": "uncompressed 24-bit BMP, one plane, at the exact width and height declared in the table"}, "rom_sidecars": {"note": "Both sidecars are keyed on the ROM basename from the config, so renaming or relocating a ROM moves them with it.\n", "patches": {"note": "Read for the machine ROMs only, never for the disk controller ROMs. Carries the keyboard layout, the CLOAD/CSAVE filename decoding addresses, the tape turbo hook addresses and any number of literal byte patches. An absent file returns silently and leaves pch_tt_available false (machine.c:1810-1815), so tape turbo stays off and tapes load at real speed (tape.c:243, 1322-1462).\n", "pattern": "<rom basename>.pch", "referenced_but_not_shipped": ["teleass.pch", "hyperbas.pch"], "shipped": ["basic10.pch", "basic11b.pch", "pravetzt.pch", "telmon24.pch"], "source_ref": "machine.c:1726-1740 (load_patches), machine.c:1933,1970,2007,2033,2083 (call sites)"}, "symbols": {"note": "Read for all ten ROMs right after the ROM itself, with verbose off, so an absent file is silent. Fills the debugger symbol tables and nothing else. Compiled out under WWW_NO_MONITOR.\n", "pattern": "<rom basename>.sym", "referenced_but_not_shipped": ["hyperbas.sym"], "shipped": ["basic10.sym", "basic11b.sym", "pravetzt.sym", "teleass.sym", "telmon24.sym", "microdis.sym", "jasmin.sym", "bd500.sym", "8dos2.sym"], "source_ref": "machine.c:1129-1133 (load_rom), monitor.c:2676-2691 (mon_new_symbols)"}, "unconfigured_basenames": {"files": [{"filename": "Bas122uk.pch", "implies": "Oric BASIC 1.22 UK, as an atmosrom value"}, {"filename": "Bas122fr.pch", "implies": "Oric BASIC 1.22 French, as an atmosrom value"}, {"filename": "Bas122de.pch", "implies": "Oric BASIC 1.22 German, as an atmosrom value"}, {"filename": "pravetzt-1.0.pch", "implies": "Pravetz BASIC revision 1.0, as a pravetzrom value"}, {"filename": "pravetzt-1.0.sym", "implies": "Pravetz BASIC revision 1.0, as a pravetzrom value"}, {"filename": "8dos.sym", "implies": "the earlier Pravetz 8-DOS boot PROM, offered as pravetz8drom in oricutron.cfg:44"}, {"filename": "cumana.sym", "implies": "a Cumana controller ROM; its symbols run from $F800, the window jasminrom feeds"}, {"filename": "sedoric.sym", "implies": "a Sedoric DOS ROM; its symbols name the Microdisc FDC registers at $310-$318"}], "note": "These sidecars ship for ROM basenames no default config names. They take effect only once a config key points at that basename, and each one implies a ROM dump Oricutron can run.\n"}}, "unused_resources": [{"filename": "empty_orix.rom", "reason": "no reference anywhere in the tree; not named by any config default nor by twilighte.cfg"}, {"filename": "orixbank1.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank2.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank3.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank4.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank5.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank6.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}, {"filename": "orixbank7.rom", "reason": "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"}], "user_supplied_paths": {"entries": [{"source_ref": "main.c:1361-1504, oricutron.cfg:63-86", "what": "disk, tape and snapshot images"}, {"source_ref": "main.c:1533-1545", "what": "debugger symbol file, -s or --symbols"}, {"source_ref": "main.c:1547-1574", "what": "breakpoint list, -r or --breakpoint with a leading colon"}, {"source_ref": "main.c:665 (config key), main.c:2188, keyboard.c:587-598, oricutron.cfg:220", "what": "keyboard mapping, autoload_keyboard_mapping"}, {"source_ref": "plugins/ch376/ch376.c:1186, ReadMe.txt:512-514", "what": "CH376 sdcard and usbdrive trees, telestrat mode"}], "note": "Named on the command line or in the config, with no fixed filename"}}, "core_classification": "other", "core_version": "1.2.0", "cores": ["oricutron"], "display_name": "Tangerine - Oric (Oricutron)", "emulator": "Oricutron", "files": [{"description": "Oric Atmos BASIC 1.1b ROM", "max_size": 16384, "name": "basic11b.rom", "note": "Atmos is the machine oricutron.cfg selects, so this is the ROM a stock configuration needs. Also named by twilbankrom06 in the Twilighte board config (plugins/twilighte_board/twilighte.cfg:3).\n", "required": true, "source_ref": "gui.c:2283 (default roms/basic11b), main.c:553 (atmosrom), machine.c:2006-2007 (MACH_ATMOS)", "validation": ["size"]}, {"description": "Oric-1 BASIC 1.0 ROM", "max_size": 16384, "name": "basic10.rom", "note": "Serves both the 48K Oric-1 and the 16K Oric-1, selected with -m oric1 or -m o16k.", "required": true, "source_ref": "gui.c:2284 (default roms/basic10), main.c:554 (oric1rom), machine.c:1932-1933 (MACH_ORIC1_16K), machine.c:1969-1970 (MACH_ORIC1)", "validation": ["size"]}, {"description": "Pravetz 8D BASIC ROM", "max_size": 16384, "name": "pravetzt.rom", "note": "Selected with -m pravetz. roms/pravetzt-1.0.pch and .sym ship for an earlier revision of this ROM.", "required": true, "source_ref": "gui.c:2288 (default roms/pravetzt), main.c:558 (pravetzrom), machine.c:2082-2083 (MACH_PRAVETZ)", "validation": ["size"]}, {"description": "Telestrat TELEASS ROM, bank 5", "max_size": 16384, "name": "teleass.rom", "required": true, "source_ref": "gui.c:2295 (default roms/teleass), main.c:588-589 (telebank5), machine.c:2029-2033 (MACH_TELESTRAT)", "validation": ["size"]}, {"description": "Telestrat HYPER BASIC ROM, bank 6", "max_size": 16384, "name": "hyperbas.rom", "required": true, "source_ref": "gui.c:2296 (default roms/hyperbas), main.c:588-589 (telebank6), machine.c:2029-2033 (MACH_TELESTRAT)", "validation": ["size"]}, {"description": "Telestrat TELEMON 2.4 ROM, bank 7", "max_size": 16384, "name": "telmon24.rom", "note": "Bank 7 is the bank mapped at reset (machine.c:2041-2043).", "required": true, "source_ref": "gui.c:2297 (default roms/telmon24), main.c:588-589 (telebank7), machine.c:2029-2033 (MACH_TELESTRAT)", "validation": ["size"]}, {"description": "Microdisc disk controller ROM", "min_size": 8192, "name": "microdis.rom", "note": "Conditional: needed for the Microdisc controller, which is the drive type a disk image falls back to when none is given (main.c:1409-1410, 1488-1489). Loaded whatever the machine and not fatal, and setup_for_microdisc raises romdis, so an absent file leaves the $E000 overlay reading zeroes.\n", "required": false, "source_ref": "gui.c:2285 (default roms/microdis), main.c:555 (mdiscrom), machine.c:1251, machine.c:904-911 (mapped at $E000)", "validation": ["size"]}, {"description": "ByteDrive BD-500 disk controller ROM", "min_size": 8192, "name": "bd500.rom", "note": "Conditional: needed for the BD-500 controller, selected with -k bd500 or by autodetecting a BD-500 image (main.c:1478-1481). Same non-fatal load and same zeroed overlay as the Microdisc ROM. The rom16 and dos70 config keys change how ROMDIS disables the chips (oricutron.cfg:98-106).\n", "required": false, "source_ref": "gui.c:2286 (default roms/bd500), main.c:556 (bd500rom), machine.c:1252, machine.c:937-944 (mapped at $E000)", "validation": ["size"]}, {"description": "Jasmin disk controller ROM", "min_size": 2048, "name": "jasmin.rom", "note": "Conditional: needed for the Jasmin controller, selected with -k jasmin or by autodetecting a Jasmin image (main.c:1468-1471). setup_for_jasmin leaves romdis clear, so the machine still boots from its BASIC ROM.\n", "required": false, "source_ref": "gui.c:2287 (default roms/jasmin), main.c:557 (jasminrom), machine.c:1253, machine.c:836-844 (mapped at $F800)", "validation": ["size"]}, {"description": "Pravetz 8D floppy controller boot PROM", "min_size": 512, "name": "8dos2.rom", "note": "Conditional: needed for the Pravetz 8D drive. The only disk ROM whose load flag is read back, so the Pravetz machine boots without it and only the drive is lost. oricutron.cfg:44-45 gives roms/8dos as the other value for this key, and roms/8dos.sym ships for it.\n", "required": false, "source_ref": "gui.c:2289 (default roms/8dos2), main.c:559 (pravetz8drom), machine.c:1254, machine.c:1053-1058 (mapped at $320-$3FF)", "validation": ["size"]}, {"description": "Orix kernel, Twilighte board ROM bank 7", "max_size": 16384, "name": "kernel.rom", "note": "Loaded only when twilighte_board is on (main.c:660). A configured bank file that cannot be read makes twilighte_oric_init return NULL. ReadMe.txt:506-519 records the copy in the tree as Orix v2022.1 and points at repo.orix.oric.org for later builds.\n", "required": false, "source_ref": "plugins/twilighte_board/twilighte.cfg:2 (twilbankrom07), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)", "validation": ["size"]}, {"description": "Orix shell, Twilighte board ROM bank 5", "max_size": 16384, "name": "shell.rom", "note": "Loaded only when twilighte_board is on (main.c:660). ReadMe.txt:506 names kernel.rom in bank 7 and shell.rom in bank 5 as the minimum configuration for the board to start.\n", "required": false, "source_ref": "plugins/twilighte_board/twilighte.cfg:4 (twilbankrom05), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)", "validation": ["size"]}], "mode": "standalone", "notes": "Oric-1, Oric-1 16K, Oric Atmos, Telestrat and Pravetz 8D emulator by Peter\nGordon. Recalbox packages it for its oricatmos system, ES-DE offers it for\noric alongside MAME and starts it with the working directory set to the\nemulator directory.\n\nROM names are configured without the extension: load_rom appends \".rom\"\n(machine.c:1089-1093). The defaults are set in preinit_gui (gui.c:2283-2297)\nbehind ROMPREFIX, which is \"roms/\" everywhere except AmigaOS\n(\"PROGDIR:roms/\") and the emscripten build (\"assets/roms/\") (system.h:38-68).\nA path read from oricutron.cfg goes through read_config_path\n(main.c:341-347), which prepends the program directory resolved from argv[0]\n(main.c:196-236), so a relative path resolves against the directory holding\nthe binary rather than the working directory.\n\nThe machine ROM is loaded by init_machine for the selected machine type and\na failure returns SDL_FALSE, after which the emulator exits\n(main.c:1442-1446). The four disk controller ROMs are loaded once at startup\nby load_diskroms (main.c:1407, machine.c:1249-1255) whatever the machine and\nthe drive setting; a failure only clears the matching flag and startup\ncontinues. Of those flags only pravetzrom_valid is read afterwards\n(machine.c:1055): the Microdisc, BD-500 and Jasmin buffers are mapped into\nthe CPU address space whether or not the file was read, so a missing file\nleaves the selected controller running on zeroed memory.\n\nSize is the only property the code checks. A machine ROM is rejected above\n16384 bytes and is loaded right-aligned in its bank, so a shorter file is\naccepted (machine.c:1101-1118). A disk controller ROM is read as one\nfixed-length block, which fails when the file is shorter than that length\nand ignores anything past it (machine.c:1120-1126). No hash is computed\nanywhere in the tree.\n\nTelestrat banks 0 to 4 hold RAM unless the config names a file for them\n(machine.c:2029-2038). The Twilighte board is off by default and is switched\non with twilighte_board in oricutron.cfg (main.c:660). Its bank config is\nopened as a bare relative path (oric_twilighte_board_plugin.c:132) and the\nbank filenames in it are read with read_config_string rather than\nread_config_path (oric_twilighte_board_plugin.c:174,182), so both resolve\nagainst the working directory and not the program directory.\n", "profiled_date": "2026-08-08", "source": "https://github.com/pete-gordon/oricutron", "source_commit": "002279fce9fa756d1d63cdc40ae97939eb7de7ed", "systems": ["oric", "oricatmos"], "type": "standalone", "upstream": "https://www.petergordon.org.uk/oricutron/"}


id: panda3ds
name: Panda3DS
type: standalone + libretro
classification: official_port
source: https://github.com/panda3ds-emu/panda3ds
upstream: https://github.com/panda3ds-emu/panda3ds
source_commit: 3787358bdae41d5532ccd00c8998a527ae949949
profile_json:
{"core_classification": "official_port", "core_name": "panda3ds_libretro", "core_version": "Git", "cores": ["panda3ds"], "display_name": "Nintendo - 3DS (Panda3DS)", "emulator": "Panda3DS", "files": [{"description": "AES encryption keys for decrypting encrypted ROMs", "load_from": "save_dir", "name": "aes_keys.txt", "note": "Loaded at ROM load time from appDataRoot/sysdata/aes_keys.txt.\nIn libretro mode, appDataRoot = <save_dir>/Emulator Files/.\nContains key slot entries (generator, keyX, keyY, normalKey).\nOnly needed for encrypted .3ds/.cci/.cxi/.app files.\nDecrypted dumps work without this file.\n", "path": "Emulator Files/sysdata/aes_keys.txt", "required": false, "source_ref": "src/emulator.cpp:229,237-238, src/core/crypto/aes_engine.cpp:13-92"}, {"description": "Seed database for seed-encrypted games", "load_from": "save_dir", "name": "seeddb.bin", "note": "Used for titles with seed encryption (firmware 9.6+).\nPlaced alongside aes_keys.txt in the sysdata directory.\nWithout it, seed-encrypted titles fail to load with a warning.\n", "path": "Emulator Files/sysdata/seeddb.bin", "required": false, "source_ref": "src/emulator.cpp:230,241-242, src/core/loader/ncch.cpp:78-93"}], "notes": "HLE 3DS emulator. Most games run without system files.\nEncrypted ROMs need AES keys in sysdata/aes_keys.txt, and seed-encrypted\ntitles (9.6+) also need sysdata/seeddb.bin.\nDSP firmware is loaded from the game itself (HLE/LLE/Null modes via core\noption panda3ds_dsp_emulation). System archives (shared font, bad word\nlist, country list, mii data) are compiled into the binary via cmrc.\nThe libretro core uses the save directory, not RetroArch's system\ndirectory. Files go under <save_dir>/Emulator Files/sysdata/.\nThe .info declares firmware_count=0. is_experimental = true.\n", "profiled_date": "2026-03-24", "source": "https://github.com/panda3ds-emu/panda3ds", "source_commit": "3787358bdae41d5532ccd00c8998a527ae949949", "systems": ["nintendo-3ds"], "type": "standalone + libretro", "upstream": "https://github.com/panda3ds-emu/panda3ds"}


id: parallel-launcher
name: Parallel Launcher
type: standalone
classification: launcher
source: https://gitlab.com/parallel-launcher/parallel-launcher
upstream: https://gitlab.com/parallel-launcher/parallel-n64
source_commit: 8f2924c213f7c98118ab5a86fc21c452b77a7057
profile_json:
{"core_classification": "launcher", "core_version": "9.0.5", "cores": ["parallel-launcher", "ca.parallel_launcher.ParallelLauncher"], "display_name": "Nintendo - Nintendo 64 (Parallel Launcher)", "emulator": "Parallel Launcher", "files": [{"description": "64DD IPL ROM", "name": "64DD_IPL.bin", "note": "Read from the system directory root when disk content is loaded, with no size or hash check. The core drops into its dead-emulator loop when it is absent. Content counts as disk when its header carries a 64DD magic word, or when it arrives on the second slot of the cart-and-disk subsystem.", "required": false, "source_ref": "libretro/libretro.c:622-666", "system": "nintendo-64dd"}, {"description": "glN64 per-ROM settings database", "name": "gles2n64rom.conf", "note": "Read at plugin init when the glN64 graphics plugin is selected, keyed on the name in the ROM header. Global settings stand when absent.", "required": false, "source_ref": "gles2n64/src/glN64Config.c:185-228", "system": "nintendo-64"}], "notes": "Qt front end that installs and drives its own RetroArch and its own fork of\nParaLLEl N64. RetroArch is fetched from buildbot.libretro.com as a stable\nrelease archive (retroarch-updater.cpp:24-30). The core,\nparallel_n64_next_libretro, is fetched from parallel-launcher.ca\n(updates.cpp:190-213) into retro-data/cores. Core version at this profiling\nis 2.28.\n\nNeither lands in a user RetroArch install. The system directory the core\nreads from is retro-data/system under the launcher's own data directory,\nwritten into a private retroarch.cfg on every launch (retroarch.cpp:100-129).\nRetroArch is spawned as `-L <core> --config <cfg> <rom>`\n(retroarch.cpp:760-781). The launcher also rewrites the core's .info into\nretro-data/info at every startup (main.cpp:149-156), which is how RetroArch\nlearns of the 64DD firmware entry.\n\nContent is restricted to cartridge formats at every entry point: command line\nand file associations take .z64 .n64 .v64 .bps (main.cpp:65-94), the add-ROM\ndialog the same (main-window.cpp:607-616), the library scanner *.[nvz]64\n(rom-finder.cpp:271-278), romhacking.com downloads .z64 (sync.cpp:238). A .bps\nis patched to a cartridge ROM before launch (play.cpp:721-757). No --subsystem\nargument is passed either, so neither route into the core's disk path opens:\nthe header check at libretro.c:545-548 and the cart-and-disk subsystem at\nlibretro.c:104-114.\n\nGraphics plugin is chosen per ROM among ParaLLEl-RDP, Glide64, angrylion,\nGLideN64, Rice, glN64 and OGRE (settings.hpp:13-22, retroarch.cpp:55-64).\n\nSelecting glN64 also reads gles2n64.conf from the system directory root at\nplugin init, and writes it out with defaults when it is absent\n(glN64Config.c:246-254, Config_WriteConfig at glN64Config.c:95).\n\nThree paths the fork computes but never reads. GLideN64 builds without\nFreeType here, so the font file name it resolves for on-screen text is\nassigned and dropped (TextDrawer.cpp:145-188). Its per-game ini is compiled in\nas a header and the external copy is skipped because the launcher writes INI\nBehaviour as disabled on every launch (retroarch.cpp:468,\nConfig_mupenplus.cpp:170-241, libretro.c:2030-2040). Rice's ini reader and\nwriter sit behind #if 0 (RiceConfig.cpp:453-463, Video.cpp:327-333).\n", "profiled_date": "2026-08-08", "source": "https://gitlab.com/parallel-launcher/parallel-launcher", "source_commit": "8f2924c213f7c98118ab5a86fc21c452b77a7057", "systems": ["nintendo-64", "nintendo-64dd"], "type": "standalone", "upstream": "https://gitlab.com/parallel-launcher/parallel-n64", "upstream_commit": "11574ac28d27faaaef4b5bc3c1ca50fb2ed98b83"}


id: parallel_n64
name: ParaLLEl N64
type: libretro
classification: community_fork
source: https://github.com/libretro/parallel-n64
upstream: https://github.com/mupen64plus/mupen64plus-core
source_commit: 37605bb45964c7a2695e6301e80f5c6a4feb5558
profile_json:
{"core_classification": "community_fork", "core_version": "2.0-rc2", "cores": ["parallel_n64", "parallel_n64_debug"], "display_name": "Nintendo - Nintendo 64 (ParaLLEl N64)", "emulator": "ParaLLEl N64", "files": [{"description": "64DD IPL ROM", "name": "64DD_IPL.bin", "note": "Only loaded when a 64DD disk image (.ndd) is present via subsystem API. Core fails to load disk games without it.", "path": "64DD_IPL.bin", "required": false, "source_ref": "libretro/libretro.c:723"}], "notes": {"dd_note": "64DD IPL ROM loaded from system_dir/64DD_IPL.bin when disk_data is present. Loaded via fopen with no hash or size validation.\n", "divergence_note": "Fork of mupen64plus-core with significant divergence. Includes legacy GPU plugins (Glide64, glN64, Rice, angrylion) and ParaLLEl-RDP/RSP. Uses flat path 64DD_IPL.bin unlike mupen64plus-next which uses Mupen64plus/IPL.n64 subdirectory.\n", "hle_available": true, "hle_note": "PIF boot ROM is fully HLE'd (mupen64plus-core/src/device/pif/bootrom_hle.c:48). CIC challenge/response handled in software (n64_cic_nus_6105.c). No BIOS files needed for standard cartridge games.\n"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/parallel-n64", "source_commit": "37605bb45964c7a2695e6301e80f5c6a4feb5558", "systems": ["nintendo-64", "nintendo-64dd"], "type": "libretro", "upstream": "https://github.com/mupen64plus/mupen64plus-core"}


id: parallel_n64_debug
name: parallel_n64_debug
type: alias
profile_json:
{"alias_of": "parallel_n64", "core_version": "2.0-rc2", "cores": ["parallel_n64_debug"], "display_name": "Nintendo - Nintendo 64 (ParaLLEl) (Debug)", "emulator": "parallel_n64_debug", "files": [], "note": "Debug build of parallel_n64. Same codebase and firmware requirements.", "profiled_date": "2026-03-24", "type": "alias"}


id: pascal_pong
name: Pascal Pong
type: libretro
classification: pure_libretro
source: https://github.com/libretro/pascal-pong-libretro
upstream: https://github.com/libretro/pascal-pong-libretro
source_commit: 2a0cfd44652c0b215862de3ef56916d1384ad8a0
profile_json:
{"core_classification": "pure_libretro", "core_version": "v1.0", "cores": ["pascal_pong"], "display_name": "PascalPong", "emulator": "Pascal Pong", "files": [], "notes": "Pong clone written in Pascal for libretro. Self-contained, all assets embedded in the binary. No external files loaded.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/pascal-pong-libretro", "source_commit": "2a0cfd44652c0b215862de3ef56916d1384ad8a0", "systems": [], "type": "libretro", "upstream": "https://github.com/libretro/pascal-pong-libretro"}


id: pce-emu
name: pce-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": ["pce-emu", "PCE.emu", "pceemu", "PCE-EMU", "com.PceEmu"], "display_name": "PCE.emu", "emulator": "pce-emu", "files": [{"category": "bios", "description": "Super CD-ROM2 System Card 3.0", "min_size": 262144, "name": "syscard3.pce", "note": "min_size comes from the fixed 262144-byte read in pce_fast (huc.cpp:302) with Stream::read throwing on a short file (Stream.h:88); a 262656-byte dump passes through the copier-header skip at huc.cpp:299. The pce module imposes no minimum.\n", "required": true, "source_ref": "src/main/Main.cc:80-91 (throws without it), src/main/options.cc:275-301 (path resolution), src/main/EmuMenuViews.cc:176-191 (selection), src/pce_fast/pce.cpp:477-483 + src/pce_fast/huc.cpp:284-304 (default module load), src/pce/pce.cpp:645-653 (accurate module load), src/pce_fast/pce.cpp:663 + src/pce/pce.cpp:1094 (name)", "validation": ["existence", "size"]}, {"category": "bios", "description": "Games Express CD Card", "name": "gecard.pce", "note": "Reached only when the accurate module runs and DetectGECD matches the disc; pce_fast has no Games Express branch. Served through the same System Card setting, so the user points it at this image to boot those discs.\n", "required": false, "source_ref": "src/pce/pce.cpp:512-551 (DetectGECD), src/pce/pce.cpp:644-646 (gecdbios branch), src/pce/huc.cpp:225-316 (size-agnostic read), src/pce/pce.cpp:1095 (name)", "validation": ["existence"]}], "notes": "Android and desktop application by Robert Broglia built on EmuFramework, vendoring Mednafen's pce_fast and pce modules. Both are compiled and selectable at runtime; pce_fast is what an unset core option resolves to (system.ccm:125).\nHuCard content (.pce, .sgx) loads with no external file. CD content (.cue, .toc, .ccd, .chd) requires a System Card image: loadContent throws \"No System Card Set\" when the path is unset or the file is gone (Main.cc:88-91).\nThe System Card is a single path the user picks through a file browser filtered to .pce and .sgx (EmuMenuViews.cc:176-191), stored as CFGKEY_SYSCARD_PATH. No filename is fixed and no directory is scanned. MDFN_GetSettingS returns an empty string for pce.cdbios, pce_fast.cdbios and pce.gecdbios, and MDFN_MakeFName answers every MDFNMKF_FIRMWARE request with that one path (options.cc:275-301), so the Games Express branch reads whichever image the setting points at. Mednafen's settings table still carries the syscard3.pce and gecard.pce defaults but settings.cpp is not compiled, so they are never read.\nA path with an archive extension is opened as an archive and the first member ending in .pce, .bin or .bios is used (MDFNFILE.cc:41-76).\nNeither module hashes the image. pce_fast skips a 512-byte copier header then reads a fixed 262144 bytes (huc.cpp:299-302); pce reads min(rounded length, length) and accepts any size (huc.cpp:225-316). HuC_Load is always called with SYSCARD_3, or SYSCARD_ARCADE when Arcade Card emulation is on (pce.cpp:653).\nSuperGrafx is enabled by the .sgx extension, by a CRC match against the built-in sgx_table (pce.cpp:345, 382-395), or by DetectSGXCD on disc. HES playback is compiled out (pce.cpp:76) and cheats are disabled (options.cc:245-246).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["nec-pc-engine", "nec-pc-engine-cd", "nec-supergrafx"], "type": "standalone", "upstream": "https://mednafen.github.io/", "verification": "existence"}


id: pcem
name: PCem
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-pcem
upstream: https://github.com/sarah-walker-pcem/pcem
source_commit: 1955c2127990cfdf4c594b35b466e8503d626fa7
profile_json:
{"core_classification": "community_fork", "core_version": "v11 (PCem-mooch, based on PCem v10.1)", "cores": ["pcem"], "display_name": "PC (PCem)", "emulator": "PCem", "files": [{"name": "MDA font ROM", "note": "MDA/Hercules character generator ROM. Loaded unconditionally by loadbios() via loadfont() at startup, regardless of selected video card.\n", "path": "mda.rom", "required": true, "source_ref": "src/mem.c:107"}, {"name": "XT-IDE BIOS", "note": "XT-IDE Universal BIOS for XT-class machines. Loaded as option ROM at 0xC8000. Used by IBM PC, IBM XT, Generic XT, DTK XT, AMI XT, Tandy, Amstrad, Euro PC, Olivetti, PC2086, PC3086, and other XT clones.\n", "path": "roms/ide_xt.bin", "required": false, "source_ref": "src/mem.c:60-72"}, {"name": "AT-IDE BIOS", "note": "XT-IDE Universal BIOS for AT-class machines. Loaded as option ROM. Used by IBM AT, Compaq Deskpro 386, Phoenix 386, DTK 386.\n", "path": "roms/ide_at.bin", "required": false, "source_ref": "src/mem.c:74-86"}, {"name": "AT-IDE BIOS v1.1.5", "note": "XT-IDE Universal BIOS v1.1.5 for AT-class machines. Used specifically by IBM PS/1 model 2011.\n", "path": "roms/ide_at_1_1_5.bin", "required": false, "source_ref": "src/mem.c:88-100"}, {"name": "IBM PC BIOS", "note": "IBM 5150 PC BIOS dated 10/27/82 (8 KB).", "path": "roms/ibmpc/pc102782.bin", "required": false, "source_ref": "src/mem.c:382-386"}, {"name": "IBM PC BASIC C1.1 F6", "note": "IBM Cassette BASIC C1.1 ROM, bank F6. Optional for IBM PC.", "path": "roms/ibmpc/basicc11.f6", "required": false, "source_ref": "src/mem.c:387-388"}, {"name": "IBM PC BASIC C1.1 F8", "note": "IBM Cassette BASIC C1.1 ROM, bank F8.", "path": "roms/ibmpc/basicc11.f8", "required": false, "source_ref": "src/mem.c:391-393"}, {"name": "IBM PC BASIC C1.1 FA", "note": "IBM Cassette BASIC C1.1 ROM, bank FA.", "path": "roms/ibmpc/basicc11.fa", "required": false, "source_ref": "src/mem.c:395-397"}, {"name": "IBM PC BASIC C1.1 FC", "note": "IBM Cassette BASIC C1.1 ROM, bank FC.", "path": "roms/ibmpc/basicc11.fc", "required": false, "source_ref": "src/mem.c:399-401"}, {"name": "IBM XT BIOS (combined)", "note": "IBM 5160 XT BIOS (64 KB combined ROM). Fallback: if this file is missing, the core tries the split ROMs 5000027.u19 + 1501512.u18.\n", "path": "roms/ibmxt/xt.rom", "required": false, "source_ref": "src/mem.c:203-222"}, {"name": "IBM XT BIOS U19", "note": "IBM XT BIOS low chip. Used when xt.rom is not present.", "path": "roms/ibmxt/5000027.u19", "required": false, "source_ref": "src/mem.c:206"}, {"name": "IBM XT BIOS U18", "note": "IBM XT BIOS high chip. Used when xt.rom is not present.", "path": "roms/ibmxt/1501512.u18", "required": false, "source_ref": "src/mem.c:207"}, {"name": "IBM PCjr BIOS", "note": "IBM PCjr BIOS (64 KB). Required for PCjr machine model.", "path": "roms/ibmpcjr/bios.rom", "required": false, "source_ref": "src/mem.c:226-229"}, {"name": "IBM AT BIOS U27", "note": "IBM 5170 AT BIOS low chip. Paired with 62x0821.u47.", "path": "roms/ibmat/62x0820.u27", "required": false, "source_ref": "src/mem.c:299"}, {"name": "IBM AT BIOS U47", "note": "IBM 5170 AT BIOS high chip. Paired with 62x0820.u27.", "path": "roms/ibmat/62x0821.u47", "required": false, "source_ref": "src/mem.c:300"}, {"name": "IBM PS/1 model 2011 BIOS", "note": "IBM PS/1 model 2011 BIOS (128 KB). 64 KB is read from offset 0x60000. Also loaded separately by PS/1 motherboard init as a high ROM at 0xF80000.\n", "path": "roms/ibmps1es/f80000.bin", "required": false, "source_ref": "src/mem.c:513-517, src/ps1.c:127-128"}, {"name": "Tandy 1000 BIOS", "note": "Tandy 1000 BIOS v01.020 (64 KB).", "path": "roms/tandy/tandy1t1.020", "required": false, "source_ref": "src/mem.c:165-168"}, {"name": "Tandy 1000 HX BIOS", "note": "Tandy 1000 HX BIOS (128 KB).", "path": "roms/tandy1000hx/v020000.u12", "required": false, "source_ref": "src/mem.c:172-176"}, {"name": "Tandy 1000 SL/2 BIOS low", "note": "Tandy 1000 SL/2 BIOS low chip. Paired with 8079048.hu2. Also loaded by tandy_rom.c for full bank-switched ROM (512 KB).\n", "path": "roms/tandy1000sl2/8079047.hu1", "required": false, "source_ref": "src/mem.c:180, src/tandy_rom.c:58"}, {"name": "Tandy 1000 SL/2 BIOS high", "note": "Tandy 1000 SL/2 BIOS high chip. Paired with 8079047.hu1. Also loaded by tandy_rom.c for full bank-switched ROM (512 KB).\n", "path": "roms/tandy1000sl2/8079048.hu2", "required": false, "source_ref": "src/mem.c:181, src/tandy_rom.c:59"}, {"name": "Amstrad PC1512 BIOS low", "note": "Amstrad PC1512 BIOS low chip.", "path": "roms/pc1512/40043.v1", "required": false, "source_ref": "src/mem.c:121"}, {"name": "Amstrad PC1512 BIOS high", "note": "Amstrad PC1512 BIOS high chip.", "path": "roms/pc1512/40044.v1", "required": false, "source_ref": "src/mem.c:122"}, {"name": "Amstrad PC1512 font ROM", "note": "Amstrad PC1512 character generator ROM.", "path": "roms/pc1512/40078.ic127", "required": false, "source_ref": "src/mem.c:132"}, {"name": "Amstrad PC1640 BIOS low", "note": "Amstrad PC1640 BIOS low chip.", "path": "roms/pc1640/40044.v3", "required": false, "source_ref": "src/mem.c:135"}, {"name": "Amstrad PC1640 BIOS high", "note": "Amstrad PC1640 BIOS high chip.", "path": "roms/pc1640/40043.v3", "required": false, "source_ref": "src/mem.c:136"}, {"name": "Amstrad PC1640 video BIOS", "note": "Amstrad PC1640 built-in EGA video BIOS. Also used by vid_pc1640 device.", "path": "roms/pc1640/40100", "required": false, "source_ref": "src/mem.c:145, src/vid_pc1640.c:124"}, {"name": "Sinclair PC200 BIOS high", "note": "Sinclair PC200 BIOS high chip.", "path": "roms/pc200/pc20v2.1", "required": false, "source_ref": "src/mem.c:151"}, {"name": "Sinclair PC200 BIOS low", "note": "Sinclair PC200 BIOS low chip.", "path": "roms/pc200/pc20v2.0", "required": false, "source_ref": "src/mem.c:152"}, {"name": "Sinclair PC200 font ROM", "note": "Sinclair PC200 character generator ROM.", "path": "roms/pc200/40109.bin", "required": false, "source_ref": "src/mem.c:162"}, {"name": "Amstrad PC2086 BIOS low", "note": "Amstrad PC2086 BIOS low chip.", "path": "roms/pc2086/40179.ic129", "required": false, "source_ref": "src/mem.c:261"}, {"name": "Amstrad PC2086 BIOS high", "note": "Amstrad PC2086 BIOS high chip.", "path": "roms/pc2086/40180.ic132", "required": false, "source_ref": "src/mem.c:262"}, {"name": "Amstrad PC2086 video BIOS", "note": "Amstrad PC2086 Paradise PVGA1A video BIOS.", "path": "roms/pc2086/40186.ic171", "required": false, "source_ref": "src/mem.c:273, src/vid_paradise.c:329"}, {"name": "Amstrad PC3086 BIOS", "note": "Amstrad PC3086 system BIOS (16 KB).", "path": "roms/pc3086/fc00.bin", "required": false, "source_ref": "src/mem.c:281"}, {"name": "Amstrad PC3086 video BIOS", "note": "Amstrad PC3086 Paradise PVGA1A video BIOS.", "path": "roms/pc3086/c000.bin", "required": false, "source_ref": "src/mem.c:285, src/vid_paradise.c:338"}, {"name": "Generic XT BIOS", "note": "Generic XT clone BIOS (8 KB).", "path": "roms/genxt/pcxt.rom", "required": false, "source_ref": "src/mem.c:233-236"}, {"name": "DTK XT BIOS", "note": "DTK XT clone BIOS (8 KB).", "path": "roms/dtk/DTK_ERSO_2.42_2764.bin", "required": false, "source_ref": "src/mem.c:240-243"}, {"name": "AMI XT BIOS", "note": "AMI 8088 XT clone BIOS dated 31 Jan 1989 (8 KB).", "path": "roms/amixt/AMI_8088_BIOS_31JAN89.BIN", "required": false, "source_ref": "src/mem.c:539-542"}, {"name": "VTech Laser Turbo XT BIOS", "note": "VTech Laser Turbo XT BIOS (8 KB).", "path": "roms/ltxt/27C64.bin", "required": false, "source_ref": "src/mem.c:547-550"}, {"name": "VTech Laser XT3 BIOS", "note": "VTech Laser XT3 BIOS (8 KB).", "path": "roms/lxt3/27C64D.bin", "required": false, "source_ref": "src/mem.c:555-558"}, {"name": "Phoenix XT BIOS", "note": "Phoenix XT clone BIOS (8 KB).", "path": "roms/pxxt/000p001.bin", "required": false, "source_ref": "src/mem.c:585-588"}, {"name": "Juko PC BIOS", "note": "Juko XT clone BIOS (8 KB).", "path": "roms/jukopc/000o001.bin", "required": false, "source_ref": "src/mem.c:593-596"}, {"name": "Euro PC BIOS", "note": "Schneider Euro PC BIOS (32 KB).", "path": "roms/europc/50145", "required": false, "source_ref": "src/mem.c:374-377"}, {"name": "Olivetti M24 BIOS low", "note": "Olivetti M24 BIOS low chip, version 1.43.", "path": "roms/olivetti_m24/olivetti_m24_version_1.43_low.bin", "required": false, "source_ref": "src/mem.c:247"}, {"name": "Olivetti M24 BIOS high", "note": "Olivetti M24 BIOS high chip, version 1.43.", "path": "roms/olivetti_m24/olivetti_m24_version_1.43_high.bin", "required": false, "source_ref": "src/mem.c:248"}, {"name": "Commodore PC 30 III BIOS even", "note": "Commodore PC 30 III BIOS even chip.", "path": "roms/cmdpc30/commodore pc 30 iii even.bin", "required": false, "source_ref": "src/mem.c:312"}, {"name": "Commodore PC 30 III BIOS odd", "note": "Commodore PC 30 III BIOS odd chip.", "path": "roms/cmdpc30/commodore pc 30 iii odd.bin", "required": false, "source_ref": "src/mem.c:313"}, {"name": "AMI 286 BIOS", "note": "AMI 286 clone BIOS (64 KB).", "path": "roms/ami286/amic206.bin", "required": false, "source_ref": "src/mem.c:365-368"}, {"name": "Dell System 200 BIOS low", "note": "Dell System 200 BIOS low chip.", "path": "roms/dells200/dell0.bin", "required": false, "source_ref": "src/mem.c:326"}, {"name": "Dell System 200 BIOS high", "note": "Dell System 200 BIOS high chip.", "path": "roms/dells200/dell1.bin", "required": false, "source_ref": "src/mem.c:327"}, {"name": "Compaq Deskpro 386 BIOS U11", "note": "Compaq Deskpro 386 BIOS low chip.", "path": "roms/deskpro386/109592-005.U11.bin", "required": false, "source_ref": "src/mem.c:524"}, {"name": "Compaq Deskpro 386 BIOS U13", "note": "Compaq Deskpro 386 BIOS high chip.", "path": "roms/deskpro386/109591-005.U13.bin", "required": false, "source_ref": "src/mem.c:525"}, {"name": "Acer 386SX BIOS", "note": "Acer 386SX/25N BIOS (64 KB).", "path": "roms/acer386/acer386.bin", "required": false, "source_ref": "src/mem.c:353-356"}, {"name": "Acer 386SX OTI-067 video BIOS", "note": "OTI-067 video BIOS for Acer 386SX (on-board video).", "path": "roms/acer386/oti067.bin", "required": false, "source_ref": "src/mem.c:359, src/vid_oti067.c:184"}, {"name": "Phoenix 386 BIOS low", "note": "Phoenix 386 clone BIOS low chip.", "path": "roms/px386/3iip001l.bin", "required": false, "source_ref": "src/mem.c:563"}, {"name": "Phoenix 386 BIOS high", "note": "Phoenix 386 clone BIOS high chip.", "path": "roms/px386/3iip001h.bin", "required": false, "source_ref": "src/mem.c:564"}, {"name": "DTK 386 BIOS", "note": "DTK 386SX clone BIOS with NEAT chipset (64 KB).", "path": "roms/dtk386/3cto001.bin", "required": false, "source_ref": "src/mem.c:577-580"}, {"name": "Amstrad MegaPC BIOS low", "note": "Amstrad MegaPC BIOS low chip.", "path": "roms/megapc/41651-bios lo.u18", "required": false, "source_ref": "src/mem.c:407"}, {"name": "Amstrad MegaPC BIOS high", "note": "Amstrad MegaPC BIOS high chip.", "path": "roms/megapc/211253-bios hi.u19", "required": false, "source_ref": "src/mem.c:408"}, {"name": "AMI 386 BIOS", "note": "AMI 386 clone BIOS with Headland/OPTi 82C495 chipset (64 KB).", "path": "roms/ami386/ami386.bin", "required": false, "source_ref": "src/mem.c:345-348"}, {"name": "AMI 486 BIOS", "note": "AMI 486 clone BIOS with ALi M1429 chipset (64 KB).", "path": "roms/ami486/ami486.BIN", "required": false, "source_ref": "src/mem.c:422-425"}, {"name": "AMI WinBIOS 486", "note": "AMI WinBIOS 486 with ALi M1429G chipset (64 KB).", "path": "roms/win486/ALI1429G.AMW", "required": false, "source_ref": "src/mem.c:431-434"}, {"name": "HOT-433 PCI 486 BIOS", "note": "HOT-433 PCI 486 BIOS with UMC UM8881F chipset (128 KB).", "path": "roms/hot-433/hot-433.ami", "required": false, "source_ref": "src/mem.c:439-443"}, {"name": "DTK 486 BIOS", "note": "DTK PKM-0038S E-2 BIOS with SiS 85C471 chipset (64 KB).", "path": "roms/dtk486/4siw005.bin", "required": false, "source_ref": "src/mem.c:601-604"}, {"name": "Award SiS 496 BIOS", "note": "Award BIOS for SiS 496/497 chipset (128 KB).", "path": "roms/sis496/SIS496-1.AWA", "required": false, "source_ref": "src/mem.c:448-452"}, {"name": "Rise R418 BIOS", "note": "Rise Computer R418 BIOS with SiS 496/497 chipset (128 KB).", "path": "roms/r418/r418i.bin", "required": false, "source_ref": "src/mem.c:608-612"}, {"name": "Intel Premiere/PCI (Batman) BIOS", "note": "Intel Premiere/PCI BIOS (430LX, code-name Batman). Main BIOS block.", "path": "roms/revenge/1009AF2_.BIO", "required": false, "source_ref": "src/mem.c:469-471"}, {"name": "Intel Premiere/PCI (Batman) BIOS ext", "note": "Intel Premiere/PCI BIOS extension block.", "path": "roms/revenge/1009AF2_.BI1", "required": false, "source_ref": "src/mem.c:474-478"}, {"name": "Intel Premiere/PCI II (Plato) BIOS", "note": "Intel Premiere/PCI II BIOS (430NX). Main BIOS block.", "path": "roms/plato/1016AX1_.BIO", "required": false, "source_ref": "src/mem.c:617-620"}, {"name": "Intel Premiere/PCI II (Plato) BIOS ext", "note": "Intel Premiere/PCI II BIOS extension block.", "path": "roms/plato/1016AX1_.BI1", "required": false, "source_ref": "src/mem.c:622-625"}, {"name": "Intel Advanced/EV (Endeavor) BIOS", "note": "Intel Advanced/EV BIOS (430FX). Main BIOS block.", "path": "roms/endeavor/1006CB0_.BIO", "required": false, "source_ref": "src/mem.c:483-485"}, {"name": "Intel Advanced/EV (Endeavor) BIOS ext", "note": "Intel Advanced/EV BIOS extension block.", "path": "roms/endeavor/1006CB0_.BI1", "required": false, "source_ref": "src/mem.c:488-491"}, {"name": "PC Partner MB500N BIOS", "note": "PC Partner MB500N BIOS (430FX, Award, 128 KB).", "path": "roms/mb500n/031396S.BIN", "required": false, "source_ref": "src/mem.c:632-635"}, {"name": "ASUS P/I-P54TP4XE BIOS", "note": "ASUS P/I-P54TP4XE BIOS (430FX, Award, 128 KB).", "path": "roms/p54tp4xe/T15I0302.AWD", "required": false, "source_ref": "src/mem.c:640-643"}, {"name": "Acer M3A BIOS", "note": "Acer M3A BIOS (430HX, 128 KB).", "path": "roms/acerm3a/r01-b3.bin", "required": false, "source_ref": "src/mem.c:648-651"}, {"name": "Acer V35N BIOS", "note": "Acer V35N BIOS (430HX, 128 KB).", "path": "roms/acerv35n/V35ND1S1.BIN", "required": false, "source_ref": "src/mem.c:656-659"}, {"name": "ASUS P/I-P55T2P4 BIOS", "note": "ASUS P/I-P55T2P4 BIOS (430HX, Award, 128 KB).", "path": "roms/p55t2p4/0207_J2.BIN", "required": false, "source_ref": "src/mem.c:664-667"}, {"name": "Award 430VX BIOS", "note": "Award 430VX PCI BIOS (128 KB).", "path": "roms/430vx/55XWUQ0E.BIN", "required": false, "source_ref": "src/mem.c:459-463"}, {"name": "Epox P55-VA BIOS", "note": "Epox P55-VA BIOS (430VX, Award, 128 KB).", "path": "roms/p55va/VA021297.BIN", "required": false, "source_ref": "src/mem.c:672-675"}, {"name": "IBM EGA BIOS", "note": "IBM EGA card BIOS (32 KB).", "path": "roms/ibm_6277356_ega_card_u44_27128.bin", "required": false, "source_ref": "src/vid_ega.c:957, 1078"}, {"name": "Compaq EGA BIOS", "note": "Compaq EGA card BIOS (32 KB).", "path": "roms/108281-001.bin", "required": false, "source_ref": "src/vid_ega.c:997, 1083"}, {"name": "Chips & Technologies SuperEGA BIOS", "note": "Chips & Technologies SuperEGA BIOS (32 KB).", "path": "roms/lega.vbi", "required": false, "source_ref": "src/vid_ega.c:1041, 1088"}, {"name": "IBM VGA BIOS", "note": "IBM VGA card BIOS. Also used by PS/1 VGA (same availability check).", "path": "roms/ibm_vga.bin", "required": false, "source_ref": "src/vid_vga.c:89, 127"}, {"name": "Compaq/Paradise VGA BIOS", "note": "Compaq/Paradise PVGA1A VGA BIOS dated 1988-05-18.", "path": "roms/1988-05-18.rom", "required": false, "source_ref": "src/vid_paradise.c:366, 373"}, {"name": "ATI VGA Edge-16 BIOS", "note": "ATI VGA Edge-16 (ATI-18800) video BIOS.", "path": "roms/vgaedge16.vbi", "required": false, "source_ref": "src/vid_ati18800.c:135, 155"}, {"name": "ATI VGA Charger BIOS", "note": "ATI VGA Charger (ATI-28800) video BIOS.", "path": "roms/bios.bin", "required": false, "source_ref": "src/vid_ati28800.c:160, 180"}, {"name": "OAK OTI-067 BIOS", "note": "OAK OTI-067 standalone video BIOS.", "path": "roms/oti067/bios.bin", "required": false, "source_ref": "src/vid_oti067.c:158, 194"}, {"name": "Trident TVGA8900D BIOS", "note": "Trident TVGA8900D video BIOS.", "path": "roms/TRIDENT.BIN", "required": false, "source_ref": "src/vid_tvga.c:292, 307"}, {"name": "Tseng ET4000AX BIOS", "note": "Tseng ET4000AX video BIOS.", "path": "roms/et4000.BIN", "required": false, "source_ref": "src/vid_et4000.c:153, 168"}, {"name": "Tseng ET4000/W32p BIOS", "note": "Diamond Stealth 32 (Tseng ET4000/W32p) video BIOS.", "path": "roms/et4000w32.bin", "required": false, "source_ref": "src/vid_et4000w32.c:1081, 1103"}, {"name": "S3 Vision864 BIOS", "note": "Paradise Bahamas 64 (S3 Vision864) video BIOS.", "path": "roms/bahamas64.BIN", "required": false, "source_ref": "src/vid_s3.c:2001, 2015"}, {"name": "S3 Trio64 BIOS (Number Nine 9FX)", "note": "Number Nine 9FX (S3 764/Trio64) video BIOS.", "path": "roms/s3_764.bin", "required": false, "source_ref": "src/vid_s3.c:2020, 2034"}, {"name": "S3 Trio32 BIOS (Phoenix)", "note": "Phoenix S3 732/Trio32 video BIOS.", "path": "roms/86C732P.bin", "required": false, "source_ref": "src/vid_s3.c:2039, 2055"}, {"name": "S3 Trio64 BIOS (Phoenix)", "note": "Phoenix S3 764/Trio64 video BIOS.", "path": "roms/86c764x1.bin", "required": false, "source_ref": "src/vid_s3.c:2060, 2076"}, {"name": "S3 ViRGE BIOS", "note": "Diamond Stealth 3D 2000 (S3 ViRGE) video BIOS.", "path": "roms/s3virge.bin", "required": false, "source_ref": "src/vid_s3_virge.c:3746, 3936"}, {"name": "S3 ViRGE/DX BIOS", "note": "S3 ViRGE/DX (86C375) video BIOS.", "path": "roms/86c375_1.bin", "required": false, "source_ref": "src/vid_s3_virge.c:3836, 3941"}, {"name": "ATI Mach64 GX BIOS", "note": "ATI Graphics Pro Turbo (Mach64 GX) video BIOS. Also loaded by the Cirrus Logic init path (copy/paste in source).\n", "path": "roms/mach64gx/bios.bin", "required": false, "source_ref": "src/vid_ati_mach64.c:2341, src/vid_cirrus.c:2324"}, {"name": "Cirrus Logic CL-GD5429 BIOS", "note": "Cirrus Logic CL-GD5429 video BIOS.", "path": "roms/5429.vbi", "required": false, "source_ref": "src/vid_cl5429.c:847, 872"}, {"name": "Trident TGUI9440 BIOS", "note": "Trident TGUI9440 video BIOS.", "path": "roms/9440.vbi", "required": false, "source_ref": "src/vid_tgui9440.c:495, 517"}, {"name": "Paradise WD90C11 BIOS", "note": "Paradise WD90C11 video BIOS for MegaPC. Uses the MegaPC BIOS ROMs (same files as the MegaPC machine BIOS).\n", "path": "roms/megapc/41651-bios lo.u18", "required": false, "source_ref": "src/vid_paradise.c:348-358"}, {"name": "nVidia RIVA 128 BIOS", "note": "nVidia RIVA 128 video BIOS (64 KB). Marked experimental.", "path": "roms/riva128.bin", "required": false, "source_ref": "src/vid_nv_riva128.c:1096, 1152"}, {"name": "nVidia RIVA TNT BIOS", "note": "nVidia RIVA TNT video BIOS (64 KB). Marked experimental.", "path": "roms/rivatnt.bin", "required": false, "source_ref": "src/vid_nv_rivatnt.c:1126, 1182"}, {"name": "Sound Blaster AWE32 ROM", "note": "Creative Sound Blaster AWE32 sample ROM for EMU8000 synth chip. Required when SB AWE32 sound card is selected.\n", "path": "roms/awe32.raw", "required": false, "source_ref": "src/sound_emu8k.c:679, src/sound_sb.c:479"}, {"name": "Realtek RTL8029AS boot ROM", "note": "Realtek RTL8029AS PCI Ethernet boot ROM (32 KB).", "path": "roms/rtl8029as.rom", "required": false, "source_ref": "src/ne2000.c:1694"}, {"name": "NE2000 boot ROM", "note": "NE2000 ISA Ethernet boot ROM (64 KB).", "path": "roms/ne2000.rom", "required": false, "source_ref": "src/ne2000.c:1701"}, {"name": "NVR: Amstrad PC1512", "note": "CMOS/NVRAM template for Amstrad PC1512.", "path": "pc1512.nvr", "required": false, "source_ref": "src/nvr.c:390"}, {"name": "NVR: Amstrad PC1640", "note": "CMOS/NVRAM template for Amstrad PC1640.", "path": "pc1640.nvr", "required": false, "source_ref": "src/nvr.c:391"}, {"name": "NVR: Sinclair PC200", "note": "CMOS/NVRAM template for Sinclair PC200.", "path": "pc200.nvr", "required": false, "source_ref": "src/nvr.c:392"}, {"name": "NVR: Amstrad PC2086", "note": "CMOS/NVRAM template for Amstrad PC2086.", "path": "pc2086.nvr", "required": false, "source_ref": "src/nvr.c:393"}, {"name": "NVR: Amstrad PC3086", "note": "CMOS/NVRAM template for Amstrad PC3086.", "path": "pc3086.nvr", "required": false, "source_ref": "src/nvr.c:394"}, {"name": "NVR: IBM AT", "note": "CMOS/NVRAM template for IBM AT.", "path": "at.nvr", "required": false, "source_ref": "src/nvr.c:395"}, {"name": "NVR: IBM PS/1 model 2011", "note": "CMOS/NVRAM template for IBM PS/1 model 2011.", "path": "ibmps1_2011.nvr", "required": false, "source_ref": "src/nvr.c:396"}, {"name": "NVR: Commodore PC 30 III", "note": "CMOS/NVRAM template for Commodore PC 30 III.", "path": "cmdpc30.nvr", "required": false, "source_ref": "src/nvr.c:397"}, {"name": "NVR: AMI 286", "note": "CMOS/NVRAM template for AMI 286 clone.", "path": "ami286.nvr", "required": false, "source_ref": "src/nvr.c:398"}, {"name": "NVR: Dell System 200", "note": "CMOS/NVRAM template for Dell System 200.", "path": "dell200.nvr", "required": false, "source_ref": "src/nvr.c:399"}, {"name": "NVR: IBM AT 386", "note": "CMOS/NVRAM template for IBM AT 386.", "path": "at386.nvr", "required": false, "source_ref": "src/nvr.c:400"}, {"name": "NVR: Compaq Deskpro 386", "note": "CMOS/NVRAM template for Compaq Deskpro 386.", "path": "deskpro386.nvr", "required": false, "source_ref": "src/nvr.c:401"}, {"name": "NVR: Acer 386SX", "note": "CMOS/NVRAM template for Acer 386SX/25N.", "path": "acer386.nvr", "required": false, "source_ref": "src/nvr.c:402"}, {"name": "NVR: Amstrad MegaPC", "note": "CMOS/NVRAM template for Amstrad MegaPC.", "path": "megapc.nvr", "required": false, "source_ref": "src/nvr.c:403"}, {"name": "NVR: AMI 386", "note": "CMOS/NVRAM template for AMI 386 clone.", "path": "ami386.nvr", "required": false, "source_ref": "src/nvr.c:404"}, {"name": "NVR: AMI 486", "note": "CMOS/NVRAM template for AMI 486 clone.", "path": "ami486.nvr", "required": false, "source_ref": "src/nvr.c:405"}, {"name": "NVR: AMI WinBIOS 486", "note": "CMOS/NVRAM template for AMI WinBIOS 486.", "path": "win486.nvr", "required": false, "source_ref": "src/nvr.c:406"}, {"name": "NVR: HOT-433 PCI 486", "note": "CMOS/NVRAM template for HOT-433 PCI 486.", "path": "hot-433.nvr", "required": false, "source_ref": "src/nvr.c:407"}, {"name": "NVR: Award SiS 496", "note": "CMOS/NVRAM template for Award SiS 496/497.", "path": "sis496.nvr", "required": false, "source_ref": "src/nvr.c:408"}, {"name": "NVR: Award 430VX", "note": "CMOS/NVRAM template for Award 430VX PCI.", "path": "430vx.nvr", "required": false, "source_ref": "src/nvr.c:409"}, {"name": "NVR: Intel Premiere/PCI (Batman)", "note": "CMOS/NVRAM template for Intel Premiere/PCI.", "path": "revenge.nvr", "required": false, "source_ref": "src/nvr.c:410"}, {"name": "NVR: Intel Advanced/EV (Endeavor)", "note": "CMOS/NVRAM template for Intel Advanced/EV.", "path": "endeavor.nvr", "required": false, "source_ref": "src/nvr.c:411"}, {"name": "NVR: Phoenix 386", "note": "CMOS/NVRAM template for Phoenix 386 clone.", "path": "px386.nvr", "required": false, "source_ref": "src/nvr.c:412"}, {"name": "NVR: DTK 386", "note": "CMOS/NVRAM template for DTK 386SX clone.", "path": "dtk386.nvr", "required": false, "source_ref": "src/nvr.c:413"}, {"name": "NVR: DTK 486", "note": "CMOS/NVRAM template for DTK 486.", "path": "dtk486.nvr", "required": false, "source_ref": "src/nvr.c:414"}, {"name": "NVR: Rise R418", "note": "CMOS/NVRAM template for Rise Computer R418.", "path": "r418.nvr", "required": false, "source_ref": "src/nvr.c:415"}, {"name": "NVR: Intel Premiere/PCI II (Plato)", "note": "CMOS/NVRAM template for Intel Premiere/PCI II.", "path": "plato.nvr", "required": false, "source_ref": "src/nvr.c:416"}, {"name": "NVR: PC Partner MB500N", "note": "CMOS/NVRAM template for PC Partner MB500N.", "path": "mb500n.nvr", "required": false, "source_ref": "src/nvr.c:417"}, {"name": "NVR: Acer M3A", "note": "CMOS/NVRAM template for Acer M3A.", "path": "acerm3a.nvr", "required": false, "source_ref": "src/nvr.c:418"}, {"name": "NVR: Acer V35N", "note": "CMOS/NVRAM template for Acer V35N.", "path": "acerv35n.nvr", "required": false, "source_ref": "src/nvr.c:419"}, {"name": "NVR: ASUS P/I-P55T2P4", "note": "CMOS/NVRAM template for ASUS P/I-P55T2P4.", "path": "p55t2p4.nvr", "required": false, "source_ref": "src/nvr.c:420"}, {"name": "NVR: Epox P55-VA", "note": "CMOS/NVRAM template for Epox P55-VA.", "path": "p55va.nvr", "required": false, "source_ref": "src/nvr.c:421"}, {"name": "Tandy 1000 HX EEPROM", "note": "Tandy 1000 HX EEPROM state (128 bytes). Initializes to zeros if absent.", "path": "tandy1000hx.bin", "required": false, "source_ref": "src/tandy_eeprom.c:128"}, {"name": "Tandy 1000 SL/2 EEPROM", "note": "Tandy 1000 SL/2 EEPROM state (128 bytes). Initializes to zeros if absent.", "path": "tandy1000sl2.bin", "required": false, "source_ref": "src/tandy_eeprom.c:131"}, {"name": "AdLib Gold EEPROM", "note": "AdLib Gold sound card EEPROM state (24 bytes). Initializes to defaults if absent.", "path": "nvr/adgold.bin", "required": false, "source_ref": "src/sound_adlibgold.c:789"}], "notes": {"info_divergence": "The .info declares zero firmware (no firmware_count field). The core actually loads 89+ ROM files plus NVR/EEPROM templates.\n", "libretro_version": "The libretro port is PCem-mooch v11, a community fork based on PCem v10.1. Upstream PCem has evolved to v17 with many more machines and devices.\n", "minimum_requirement": "At minimum, mda.rom (font) and one machine BIOS set are required. The video card ROM for the selected GPU is also needed unless the machine has built-in video (PCjr, Tandy, Amstrad, Acer 386SX, PS/1).\n", "nvr_files": "NVR files are CMOS/NVRAM templates providing pre-configured BIOS settings. Shipped with the PCem distribution. Without them the BIOS starts with blank CMOS (user must manually configure). The emulator also writes these back on shutdown.\n", "rom_structure": "All ROM files are loaded relative to the RetroArch system directory via romfopen(). Machine BIOS ROMs go in roms/<machine_name>/ subdirectories. Video card ROMs go directly in roms/ (or roms/<card>/ for some). Which ROMs are needed depends on the selected machine model and video card.\n", "runtime_state": "The emulator creates additional state files during operation: ATI EEPROM (ati18800.nvr, ati28800.nvr, mach64.nvr), Intel flash (dmi.bin, escd.bin per Pentium machine). These are emulator-generated and not included here.\n"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-pcem", "source_commit": "1955c2127990cfdf4c594b35b466e8503d626fa7", "systems": ["ibm-pc", "ibm-xt", "ibm-at", "ibm-pcjr", "ibm-ps1", "tandy-1000"], "type": "libretro", "upstream": "https://github.com/sarah-walker-pcem/pcem"}


id: pcsx1
name: PCSX1
type: libretro
classification: community_fork
source: https://github.com/libretro/pcsx1-libretro
upstream: https://github.com/notaz/pcsx_rearmed
source_commit: 35dabb85ff3af6825820f54090d344945f65d24e
profile_json:
{"core_classification": "community_fork", "core_version": "r22", "cores": ["pcsx1"], "display_name": "Sony - PlayStation (PCSX1)", "emulator": "PCSX1", "files": [{"description": "SCPH-1001 (v2.2 12-04-95 A)", "hle_fallback": true, "name": "scph1001.bin", "priority": 1, "required": false, "size": 524288, "source_ref": "frontend/libretro.c:1229 (bios[0]), :1181 (size check)", "validation": ["size"]}, {"description": "SCPH-5501 (v3.0 11-18-96 A)", "hle_fallback": true, "name": "scph5501.bin", "priority": 2, "required": false, "size": 524288, "source_ref": "frontend/libretro.c:1229 (bios[1]), :1181 (size check)", "validation": ["size"]}, {"description": "SCPH-7001 (v4.1 12-16-97 A)", "hle_fallback": true, "name": "scph7001.bin", "priority": 3, "required": false, "size": 524288, "source_ref": "frontend/libretro.c:1229 (bios[2]), :1181 (size check)", "validation": ["size"]}], "notes": "Never-completed fork of PCSX-ReARMed targeting general PC hardware. Experimental, abandoned since 2018. HLE BIOS built-in: if no BIOS file found, core warns and falls back to HLE automatically. BIOS search order: scph1001.bin, scph5501.bin, scph7001.bin by exact filename, then scans system directory for any file matching \"scph*\" (case-insensitive) with size == 512 KB. No region detection, no hash validation. First valid BIOS found is used regardless of region. .info declares scph5500/5501/5502 but code explicitly searches scph1001/5501/7001 first.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/pcsx1-libretro", "source_commit": "35dabb85ff3af6825820f54090d344945f65d24e", "systems": ["sony-playstation"], "type": "libretro", "upstream": "https://github.com/notaz/pcsx_rearmed"}


id: pcsx2
name: PCSX2
type: standalone
classification: official_port
source: https://github.com/PCSX2/pcsx2
upstream: https://github.com/PCSX2/pcsx2
source_commit: 5c611f85e13ba250a69c155c678482b219b10d48
profile_json:
{"bios_mode": "agnostic", "core_classification": "official_port", "core_version": "Git", "cores": ["pcsx2"], "display_name": "Sony - PlayStation 2 (PCSX2)", "emulator": "PCSX2", "files": [{"max_size": 8388608, "min_size": 4194304, "name": "ps2-0230a-20080220.bin", "note": "Accepts any file 4-8 MB with valid romdir (RESET + ROMVER). Naming convention ps2-VVVVr-YYYYMMDD.bin (version, region, date).", "required": true, "source_ref": "pcsx2/ps2/BiosTools.cpp:258-362", "validation": ["size"]}, {"max_size": 4194304, "name": "rom1.bin", "note": "DVD player ROM. Tries {biospath}.rom1 then {biosbase}.rom1. Silently skipped if missing.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241,366"}, {"max_size": 4194304, "name": "ROM2.BIN", "note": "Chinese ROM extension. Same naming convention as rom1. Only present on Chinese region consoles.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:214-241,367"}, {"name": "EROM.BIN", "note": "Extended ROM. Present in some BIOS dumps but not loaded by PCSX2 code via LoadExtraRom.", "path": null, "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp"}, {"hle_fallback": true, "name": "eeprom.dat", "note": "DEV9 network adapter EEPROM. Falls back to built-in defaults if missing.", "required": false, "size": 64, "source_ref": "pcsx2/DEV9/DEV9.cpp:110-160"}, {"mode": "libretro", "name": "GameIndex.yaml", "note": "Game compatibility database. OSD warning if missing.", "path": "pcsx2/resources/GameIndex.yaml", "required": false, "source_ref": "pcsx2/GameDatabase.cpp:46, pcsx2/GameDatabase.cpp:888"}, {"mode": "libretro", "name": "cheats_ws.zip", "note": "Widescreen patches archive.", "path": "pcsx2/resources/cheats_ws.zip", "required": false, "source_ref": "pcsx2/VMManager.cpp:345-358"}, {"mode": "libretro", "name": "cheats_ni.zip", "note": "No-interlacing patches archive.", "path": "pcsx2/resources/cheats_ni.zip", "required": false, "source_ref": "pcsx2/VMManager.cpp:380-393"}], "notes": "Filename-agnostic BIOS detection. Scans bios/ for any file between 4-8 MB\nwith valid romdir structure (RESET + ROMVER entries). No hash validation.\nCompanion files (.rom1, .rom2, .nvm, .mec) derive paths from selected BIOS.\nROM1 (DVD player) and ROM2 (Chinese extension) silently skipped if missing.\nNVM and MEC auto-created with defaults if missing.\n", "profiled_date": "2026-03-30", "source": "https://github.com/PCSX2/pcsx2", "source_commit": "5c611f85e13ba250a69c155c678482b219b10d48", "systems": ["sony-playstation-2"], "type": "standalone", "upstream": "https://github.com/PCSX2/pcsx2"}


id: pcsx2-legacy
name: PCSX2 Legacy
type: standalone
classification: frozen_snapshot
source: https://github.com/PCSX2/pcsx2
upstream: https://github.com/PCSX2/pcsx2
source_commit: aaaf29557fe63870ede815dd6d2e48a98279ca59
profile_json:
{"bios_mode": "agnostic", "core_classification": "frozen_snapshot", "core_version": "1.6.0", "cores": ["pcsx2-legacy", "PCSX2-LEGACY"], "display_name": "Sony - PlayStation 2 (PCSX2 Legacy)", "emulator": "PCSX2 Legacy", "files": [{"description": "PS2 console BIOS", "name": "ps2-0230a-20080220.bin", "note": "Any file in the BIOS folder whose romdir holds RESET and ROMVER is accepted, whatever its name or size. Naming convention ps2-VVVVr-YYYYMMDD.bin carries version, region and date.", "required": true, "source_ref": "pcsx2/ps2/BiosTools.cpp:261-323, pcsx2/ps2/BiosTools.cpp:74-167", "system": "sony-playstation-2"}, {"description": "DVD player ROM", "max_size": 262144, "name": "rom1.bin", "note": "Tried as {bios}.rom1 then {biosbase}.rom1. Read into the 256 KB ROM1 region and truncated to it. Logged and skipped when absent.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:298, pcsx2/MemoryTypes.h:22", "system": "sony-playstation-2"}, {"description": "Chinese ROM extension", "max_size": 524288, "name": "ROM2.BIN", "note": "Tried as {bios}.rom2 then {biosbase}.rom2. Read into the 512 KB ROM2 region and truncated to it. Present on Chinese region consoles.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:299, pcsx2/MemoryTypes.h:23", "system": "sony-playstation-2"}, {"description": "DVD player extension ROM", "max_size": 1835008, "name": "EROM.BIN", "note": "Tried as {bios}.erom then {biosbase}.erom. Read into the 1.75 MB EROM region and truncated to it.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:300, pcsx2/MemoryTypes.h:24", "system": "sony-playstation-2"}, {"description": "DEV9 network adapter EEPROM", "hle_fallback": true, "name": "eeprom.dat", "note": "Opened by the DEV9ghzdrk plugin from the working directory and mapped over 64 bytes. A compiled-in EEPROM holding the default MAC stands in when the file is missing or cannot be mapped.", "required": false, "size": 64, "source_ref": "plugins/dev9ghzdrk/DEV9.cpp:176-227, plugins/dev9ghzdrk/DEV9.cpp:71-81", "system": "sony-playstation-2"}, {"description": "DEV9 SmartMedia flash image", "hle_fallback": true, "max_size": 8650752, "name": "flash.dat", "note": "Opened by the DEV9ghzdrk plugin from the working directory at init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent or short.", "required": false, "source_ref": "plugins/dev9ghzdrk/flash.cpp:60-83, plugins/dev9ghzdrk/flash.cpp:21-28", "system": "sony-playstation-2"}], "mode": "standalone", "notes": "wxWidgets line, frozen at 1.6.0. Emulation is split across separate plugin\nbinaries loaded at runtime: GSdx, Spu2-X, LilyPad, cdvdGigaherz, DEV9ghzdrk,\nUSBnull and FWnull. Default BIOS folder is bios/ under the user documents\ndirectory.\nref: pcsx2/gui/AppConfig.cpp:76-80, pcsx2/gui/AppConfig.cpp:192-195\n\nBIOS selection lists every file in the folder with a *.* mask and keeps the\nones whose romdir carries a RESET entry followed by a readable ROMVER, which\nsupplies the version, the zone letter and the build date. Neither size nor\nhash is checked; the length test that would reject small images is commented\nout. A missing or zero-length image raises BiosLoadFailed.\nref: pcsx2/gui/Panels/BiosSelectorPanel.cpp:151-177,\n     pcsx2/ps2/BiosTools.cpp:74-167, pcsx2/ps2/BiosTools.cpp:325-341,\n     pcsx2/ps2/BiosTools.cpp:261-323\n\nThe three companion ROMs derive from the selected BIOS path. Each extension\nis first appended to the full name, then substituted for the existing one, so\na BIOS at scph39001.bin is followed by scph39001.bin.rom1 then scph39001.rom1.\nA missing companion is logged and skipped, and a read error is downgraded to a\nwarning. Every read is truncated to its destination region: 256 KB for rom1,\n512 KB for rom2, 1.75 MB for erom.\nref: pcsx2/ps2/BiosTools.cpp:190-229, pcsx2/ps2/BiosTools.cpp:298-300,\n     pcsx2/MemoryTypes.h:21-24\n\nThe nvm and mec companions follow the same naming rule and are written with\ndefaults when absent, so neither is user-supplied: 1024 zero bytes plus an\niLink id for nvm, the four bytes 03 06 02 00 for mec.\nref: pcsx2/CDVD/CDVD.cpp:93-122, pcsx2/CDVD/CDVD.cpp:138-182\n\nTwo entries pair an XOR fold of the whole 4 MB ROM region with a ROMVER\nversion to select debugger thread offsets. They gate nothing and cover no\nfile on disk.\nref: pcsx2/ps2/BiosTools.cpp:57-62, pcsx2/ps2/BiosTools.cpp:175-181,\n     pcsx2/ps2/BiosTools.cpp:305-313\n\nAn IRX image is injected at ROM+0x3C0000 when one is named on the command\nline. The path is whatever the user passes, so there is no fixed file.\nref: pcsx2/ps2/BiosTools.cpp:302-303, pcsx2/gui/AppInit.cpp:542\n\nShipped in the distribution tree and read from it: GameIndex.dbf, the\nwidescreen patch archive cheats_ws.zip, which is skipped when a cheats_ws\nfolder holds the patches, the pcsx2_Main and pcsx2_Iconized catalogs under\nLangs, and the external shader pair shaders/GSdx.fx and\nshaders/GSdx_FX_Settings.ini, off by default.\nref: pcsx2/gui/AppGameDatabase.h:53, pcsx2/gui/AppCoreThread.cpp:459-465,\n     pcsx2/gui/i18n.cpp:82-89, plugins/GSdx/GSdx.cpp:441-443\n\nhost.irx sits behind a comment. ps2hw.dat is read only by zerogs and\nzzogl-pg, both gated on EXTRA_PLUGINS, which carries no default and is off,\nand both absent from the Windows solution that builds the release. USBqemu\nships in the same disused solution and GSdx_legacy is gated on GSDX_LEGACY.\nref: pcsx2/ps2/BiosTools.cpp:296, cmake/SelectPcsx2Plugins.cmake:178-209,\n     cmake/BuildParameters.cmake:41-50, old_plugins.sln\n", "profiled_date": "2026-08-08", "source": "https://github.com/PCSX2/pcsx2", "source_commit": "aaaf29557fe63870ede815dd6d2e48a98279ca59", "systems": ["sony-playstation-2"], "type": "standalone", "upstream": "https://github.com/PCSX2/pcsx2"}


id: pcsx2x6
name: PCSX2x6
type: standalone
classification: enhanced_fork
source: https://github.com/PS2Homebrew-arcade/pcsx2x6
upstream: https://github.com/PCSX2/pcsx2
source_commit: e69b265ef4bc98565deffb7c4a4b7d08143d4cf9
profile_json:
{"bios_mode": "agnostic", "core_classification": "enhanced_fork", "core_version": "v0.2.20", "cores": ["pcsx2x6", "PCSX2X6"], "display_name": "Namco - System 246 / 256 (PCSX2x6)", "emulator": "PCSX2x6", "files": [{"aliases": ["COH-H31000.BIN", "246C.bin", "256.BIN"], "description": "COH-H arcade board BIOS", "max_size": 8388608, "min_size": 4194304, "name": "COH-H31100.rom0", "note": "Any image whose romdir holds RESET and ROMVER is accepted, whatever its name. The 4 to 8 MB range gates the folder scan; a manually selected image skips it. Named after the board model by the dumper, extension rom0. The aliases are the three board dumps held here, COH-H31000, System 246C and System 256; each carries its romdir at 0x2740 and answers the same test.", "required": true, "source_ref": "pcsx2/ps2/BiosTools.cpp:268-292, pcsx2/ps2/BiosTools.cpp:80-207, pcsx2/ps2/BiosTools.cpp:327-379", "system": "namco-system246", "validation": ["size"]}, {"description": "ROM1 board region", "max_size": 4194304, "name": "COH-H31100.rom1", "note": "Tried as {bios}.rom1 then {biosbase}.rom1. Read into the 4 MB ROM1 region and truncated to it. Logged and skipped when absent. Mapped at 0xB0000000, where rom0:ACDEV declares rom1: on a COH-H.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/ps2/BiosTools.cpp:376, pcsx2/MemoryTypes.h:14, pcsx2/Memory.cpp:416", "system": "namco-system246"}, {"description": "ROM2 board region", "max_size": 4194304, "name": "COH-H31100.rom2", "note": "Tried as {bios}.rom2 then {biosbase}.rom2. Read into the 4 MB ROM2 region and truncated to it. The dumper reads 512 KB off the board.", "required": false, "source_ref": "pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/ps2/BiosTools.cpp:377, pcsx2/MemoryTypes.h:15", "system": "namco-system246"}, {"aliases": ["COH-H31000.NVM", "246C.nvm", "256.NVM"], "description": "Board NVRAM", "hle_fallback": true, "name": "COH-H31100.nvm", "note": "Read from the BIOS path with the extension replaced by nvm. Carries the iLinkId the 256 games read as a regional signature; a hardcoded id stands in when the file is missing or blank there. A default image is built when the file cannot be read.", "required": false, "size": 1024, "source_ref": "pcsx2/CDVD/CDVD.cpp:47, pcsx2/CDVD/CDVD.cpp:140-178, pcsx2/CDVD/CDVD.cpp:2608", "system": "namco-system246"}, {"aliases": ["COH-H31000.MEC", "246C.mec", "256.MEC"], "description": "Mechacon version", "hle_fallback": true, "name": "COH-H31100.mec", "note": "Read from the BIOS path with the extension replaced by mec. Written with 0x0104020A, the version of a COH-H31100, when absent.", "required": false, "size": 4, "source_ref": "pcsx2/CDVD/CDVD.cpp:51-52, pcsx2/CDVD/CDVD.cpp:196-209", "system": "namco-system246"}, {"description": "DEV9 EEPROM", "hle_fallback": true, "name": "eeprom.dat", "note": "Opened from the working directory at DEV9 init and mapped over 64 bytes. A compiled-in 64 byte image stands in when the file is missing or cannot be mapped.", "required": false, "size": 64, "source_ref": "pcsx2/DEV9/DEV9.cpp:67-77, pcsx2/DEV9/DEV9.cpp:116-167", "system": "namco-system246"}, {"description": "DEV9 SmartMedia flash image", "hle_fallback": true, "max_size": 8650752, "name": "flash.dat", "note": "Opened from the working directory at DEV9 init and read as 1024 blocks of 16 pages of 512 bytes plus 16 ECC bytes. The card is filled with 0xFF when the file is absent or short.", "required": false, "source_ref": "pcsx2/DEV9/flash.cpp:9-16, pcsx2/DEV9/flash.cpp:62-86, pcsx2/DEV9/DEV9.cpp:114", "system": "namco-system246"}, {"description": "Arcade game database", "name": "GameIndex.yaml", "note": "Keyed by NM gameid, one entry per arcade title, carrying the board variant, the media type, the boot program and the GS fixes. Supplies the platform and media values a minimal .acgame leaves out. Console error when missing.", "path": "bin/resources/GameIndex.yaml", "required": false, "source_ref": "pcsx2/GameDatabase.cpp:39, pcsx2/GameDatabase.cpp:979-990, pcsx2/VMManager.cpp:1385-1415", "system": "namco-system246"}, {"description": "Disc hash database", "name": "RedumpDatabase.yaml", "note": "Read on demand to match a disc against its catalogue entry in the game summary. Console error when missing.", "path": "bin/resources/RedumpDatabase.yaml", "required": false, "source_ref": "pcsx2/GameDatabase.cpp:1086, pcsx2/GameDatabase.cpp:1143-1152", "system": "namco-system246"}, {"description": "Bundled patch archive", "name": "patches.zip", "note": "Opened read-only from the resources folder. Built-in patches are unavailable and an on-screen error is shown when it cannot be opened. Fetched from the patches repository at build time, not committed.", "path": "bin/resources/patches.zip", "required": false, "source_ref": "pcsx2/Patch.cpp:117, pcsx2/Patch.cpp:289-315, .github/workflows/linux_build_qt.yml:129", "system": "namco-system246"}, {"description": "SDL controller mapping database", "name": "game_controller_db.txt", "note": "A copy in the user data root takes precedence over the one in resources. Fed to SDL as a hint; without either, SDL falls back to its built-in mappings and an error is logged.", "path": "bin/resources/game_controller_db.txt", "required": false, "source_ref": "pcsx2/Input/SDLInputSource.cpp:24, pcsx2/Input/SDLInputSource.cpp:614-629", "system": "namco-system246"}], "notes": "Namco System 246 and 256 arcade boards, which are Sony COH-H PlayStation 2\nmotherboards. The Namco hardware sits on the DEV9 bus: ATA and ATAPI media,\nthe ACCORE interrupt controller, JVS input, the expansion RAM board and the\nsettings SRAM. Super 256 is the 256 with a higher bus clock, selected by\nplatform=super256 in the game config.\nref: pcsx2/DEV9/ACATA.cpp, pcsx2/DEV9/ACCORE.cpp, pcsx2/DEV9/ACJV.cpp,\n     pcsx2/DEV9/ACRAM.cpp, pcsx2/DEV9/ACSRAM.cpp, pcsx2/VMManager.cpp:1382-1418\n\nThe BIOS must come from a COH-H board. A romver whose region letter is T\nfollowed by Z is read as zone COH-H, region 11, and the EXTINFO serial names\nthe board: 20040519-145634 for System 256, 20021119-163841 for System 246\nRack C, 20000901-114731 for the COH-H A-000-010. Boot aborts when no image\nloads.\nref: pcsx2/ps2/BiosTools.cpp:149-153, pcsx2/ps2/BiosTools.cpp:178-181,\n     pcsx2/VMManager.cpp:1657-1667\n\nDetection is by content. The scan lists the BIOS folder with a * mask, keeps\nfiles between 4 and 8 MB, and accepts the ones whose romdir carries a RESET\nentry followed by a readable ROMVER; EXTINFO supplies the serial. The picker\nin the settings window runs the same romdir test without the size filter, so\na manually selected image of any length is accepted. No name and no hash is\nmatched anywhere.\nref: pcsx2/ps2/BiosTools.cpp:16-17, pcsx2/ps2/BiosTools.cpp:80-207,\n     pcsx2/ps2/BiosTools.cpp:268-292,\n     pcsx2-qt/Settings/BIOSSettingsWidget.cpp:65-73\n\nCompanions derive from the selected BIOS path. Each extension is appended to\nthe full name first, then substituted for the existing one, so an image at\nCOH-H31100.rom0 is followed by COH-H31100.rom0.rom1 then COH-H31100.rom1.\nThe project's dumper writes that exact set from a live board: .rom0 of\n0x400000, .rom1 of 0x400000, .rom2 of 0x80000, .nvm of 1024 bytes and .mec\nof 4 bytes, all named after the board model.\nref: pcsx2/ps2/BiosTools.cpp:224-251, pcsx2/CDVD/CDVD.cpp:164-167,\n     biosdrain dump.c:32-36, biosdrain dump.c:70-120\n\nA game is launched from an .acgame config in INI form. It names the boot elf,\nthe security dongle image in the memcards folder, an optional save card, the\nCD/DVD/HDD image and the settings SRAM, and everything but the seven\ncharacter NM gameid can be resolved from the shipped database. Those files\nare the game itself, one set per title.\nref: pcsx2/VMManager.cpp:1345-1490, pcsx2/VMManager.cpp:2667-2670,\n     pcsx2/DEV9/ACSRAM.cpp:17-40\n\nThe 256 regional signature normally comes from the iLinkId held in the nvm.\nA 256Region entry in the .acgame feeds ASIA4, ASIA5 or JAPAN into the\nmechacon read instead, which the Taiko games use to pick their region.\nref: pcsx2/CDVD/CDVD.cpp:2595-2608, pcsx2/VMManager.cpp:1371-1378\n\nRead from the distribution tree and versioned with the build: the shader\nsources every GS backend compiles at startup, the OSD fonts and fullscreen\nUI textures, and the achievement notification sounds.\nref: pcsx2/GS/Renderers/Common/GSDevice.cpp:363-366,\n     pcsx2/ImGui/ImGuiFullscreen.cpp:300, pcsx2/ImGui/ImGuiFullscreen.cpp:396,\n     pcsx2/Achievements.cpp:1158, pcsx2/Achievements.cpp:1214,\n     pcsx2/Achievements.cpp:1339\n", "profiled_date": "2026-08-08", "source": "https://github.com/PS2Homebrew-arcade/pcsx2x6", "source_commit": "e69b265ef4bc98565deffb7c4a4b7d08143d4cf9", "systems": ["namco-system246", "namco-system256"], "type": "standalone", "upstream": "https://github.com/PCSX2/pcsx2", "upstream_commit": "5c611f85e13ba250a69c155c678482b219b10d48"}


id: pcsx_rearmed
name: PCSX-ReARMed
type: libretro
classification: embedded_hle
source: https://github.com/libretro/pcsx_rearmed
upstream: https://github.com/notaz/pcsx_rearmed
source_commit: da2cb8ecd17fd0932ab6d94774c0522beebce6e3
profile_json:
{"core_classification": "embedded_hle", "core_version": "r25", "cores": ["pcsx_rearmed", "pcsx_rearmed_neon", "pcsx_rearmed_interpreter"], "display_name": "Sony - PlayStation (PCSX ReARMed)", "emulator": "PCSX-ReARMed", "files": [{"description": "SCPH-5500 (v3.0 09-09-96 J)", "hle_fallback": true, "name": "scph5500.bin", "note": "Preferred JP BIOS, searched first by exact filename.", "region": ["japan"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[0])", "validation": ["size"]}, {"description": "SCPH-5501 (v3.0 11-18-96 A)", "hle_fallback": true, "name": "scph5501.bin", "note": "Preferred US BIOS, searched first by exact filename.", "region": ["north-america"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[1])", "validation": ["size"]}, {"description": "SCPH-5502 (v3.0 01-06-97 E)", "hle_fallback": true, "name": "scph5502.bin", "note": "Preferred EU BIOS, searched first by exact filename.", "region": ["europe"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[2])", "validation": ["size"]}, {"description": "PSP embedded PS1 BIOS (region detected at runtime)", "hle_fallback": true, "name": "psxonpsp660.bin", "note": "Region detected from content at runtime. Must be 512 KB in libretro context.", "region": ["world"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[3])", "validation": ["size"]}, {"description": "SCPH-101 (v4.4 03-24-00 A) - PSone US", "hle_fallback": true, "name": "scph101.bin", "note": "PSone slim model.", "region": ["north-america"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[4])", "validation": ["size"]}, {"description": "SCPH-7001 (v4.1 12-16-97 A)", "hle_fallback": true, "name": "scph7001.bin", "region": ["north-america"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[5])", "validation": ["size"]}, {"description": "SCPH-1001 (v2.2 12-04-95 A)", "hle_fallback": true, "name": "scph1001.bin", "note": "Original US model. Last in the explicit filename search list.", "region": ["north-america"], "required": false, "size": 524288, "source_ref": "frontend/libretro.c:3721-3724 (listed_bios[6])", "validation": ["size"]}], "notes": "HLE BIOS built-in: core option pcsx_rearmed_bios = \"HLE\" bypasses real BIOS entirely. Default is \"auto\" which searches system dir for listed filenames, then scans all files. Region detection reads bytes at offset 0x7ff51: \" E\" = EU, \" J\" = JP, else US. Three CRC32 hardcoded as JP override: 0x18D0F7D8, 0x3B601FC8, 0x3539DEF6 (psxonpsp, scph1000). BIOS validity check: byte pattern at offset 1 (\\x00\\x08\\x3c\\x3f) or string \"PS compatible\" at 0x12c. Files named \"unirom\" (case-insensitive) are explicitly skipped. Region fallback: if the matching-region BIOS is missing, any available region BIOS is used over HLE. Three region slots: US (index 0), JP (index 1), EU (index 2) stored in Config.Bios[].\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/pcsx_rearmed", "source_commit": "da2cb8ecd17fd0932ab6d94774c0522beebce6e3", "systems": ["sony-playstation"], "type": "libretro", "upstream": "https://github.com/notaz/pcsx_rearmed"}


id: pd777
name: PD777
type: libretro
classification: community_fork
source: https://github.com/mittonk/PD777
upstream: https://github.com/W88DodPECuThLOl/PD777
source_commit: 9ce5af01c7c0fd16f7e034fe549380854ee61338
profile_json:
{"core_classification": "community_fork", "core_version": "v1.0.0", "cores": ["pd777"], "display_name": "Epoch - Cassette Vision (PD777)", "emulator": "PD777", "files": [], "notes": "PD777 is an Epoch Cassette Vision emulator (NEC uPD777C CPU), by\nW88DodPECuThLOl. Libretro port by Ken Mitton (mittonk).\n\nNo BIOS or firmware files required. The .info file declares firmware_count = 0.\n\nGame loading in source/libretro/libretro.cpp:retro_load_game() (line 404-532).\nThe core loads a code ROM file (.bin777) directly from the content path, then\nattempts to load a pattern ROM file (.ptn777) by replacing the extension.\n\nIf neither file is found, the core falls back to hardcoded ROM data compiled\nfrom source/core/rom.cpp (Battle Vader program + pattern ROM dumps from\noguchi-rd.com).\n\nThe code ROM supports three formats:\n  - Raw order: exactly 0xF00 bytes, program words in sequential address order\n  - Raw address: address/data pairs (compiled-in rawRom[] array)\n  - Formatted: header starting with \"_CassetteVision_000\" magic, version 0 or 1,\n    includes key mapping, title, and code section at offset 0x100\n\nThe pattern ROM supports three formats:\n  - Formatted: 0x340 bytes, header \"*CassetteVision*0000\", 7x7 + 8x7 CG patterns\n  - Raw bitstream: 0x4D0 bytes, bit-packed 7x7 and 8x7 character patterns\n  - Built-in: fallback to patternRom[] / patternRom8[] arrays in rom.cpp\n\nThe system directory path is retrieved via RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY\nbut is not used for any file loading.\n\nGame identification uses a checksum over the loaded ROM to detect known cassettes\n(Battle Vader, Galaxian, etc.) and apply per-game key mappings and bent character\ntables. 11 cassette IDs are recognized (1-9, 11, 12).\n\nSupported extensions: zip, bin777, ptn777.\n", "platform_details": {"cpu": "NEC uPD777C (uPD774 variant)", "notes": "The Cassette Vision uses a NEC uPD777C (or uPD774 variant) as its main\nprocessor. Program ROM and pattern/character ROM are per-cartridge, not\nsystem-level. There is no system BIOS - the CPU executes directly from\nthe cartridge ROM.\n\nThe emulator supports analog paddles (4 paddles mapped to 2 analog sticks),\nlever switches, push buttons, course switch, and a lightgun peripheral.\n", "region": "Japan", "system": "Epoch Cassette Vision (1981)"}, "profiled_date": "2026-03-24", "source": "https://github.com/mittonk/PD777", "source_commit": "9ce5af01c7c0fd16f7e034fe549380854ee61338", "systems": ["epochcv"], "type": "libretro", "upstream": "https://github.com/W88DodPECuThLOl/PD777"}


id: picodrive
name: PicoDrive
type: libretro
classification: official_port
source: https://github.com/libretro/picodrive
upstream: https://github.com/irixxxx/picodrive
source_commit: 6248b51ffbe212ce441de023ccea6b10fa4d7082
profile_json:
{"core_classification": "official_port", "core_version": "1.99", "cores": ["picodrive"], "display_name": "Sega - MS/GG/MD/CD/32X (PicoDrive)", "emulator": "PicoDrive", "files": [{"name": "carthw.cfg", "note": "Cartridge hardware database for special mapper and EEPROM detection. Built-in fallback compiled into the core.", "required": false, "source_ref": "platform/libretro/libretro.c:1619, pico/cart.c:1020-1022"}, {"name": "us_scd2_9306.bin", "note": "US Sega CD Model 2 BIOS (September 1993). First in US search order.", "priority": 1, "region": ["north-america"], "required": true, "size": 131072, "source_ref": "platform/libretro/libretro.c:1265", "system": "sega-segacd"}, {"name": "SegaCDBIOS9303.bin", "note": "US Sega CD BIOS (March 1993). Second in US search order.", "priority": 2, "region": ["north-america"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1265", "system": "sega-segacd"}, {"name": "us_scd1_9210.bin", "note": "US Sega CD Model 1 BIOS (October 1992). Third in US search order.", "priority": 3, "region": ["north-america"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1265", "system": "sega-segacd"}, {"name": "bios_CD_U.bin", "note": "US Sega CD BIOS (generic name). Last in US search order.", "priority": 4, "region": ["north-america"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1265", "system": "sega-segacd"}, {"name": "eu_mcd2_9306.bin", "note": "EU Mega CD Model 2 BIOS (June 1993). First in EU search order.", "priority": 1, "region": ["europe"], "required": true, "size": 131072, "source_ref": "platform/libretro/libretro.c:1268", "system": "sega-megacd"}, {"name": "eu_mcd2_9303.bin", "note": "EU Mega CD Model 2 BIOS (March 1993). Second in EU search order.", "priority": 2, "region": ["europe"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1268", "system": "sega-megacd"}, {"name": "eu_mcd1_9210.bin", "note": "EU Mega CD Model 1 BIOS (October 1992). Third in EU search order.", "priority": 3, "region": ["europe"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1268", "system": "sega-megacd"}, {"name": "bios_CD_E.bin", "note": "EU Mega CD BIOS (generic name). Last in EU search order.", "priority": 4, "region": ["europe"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1268", "system": "sega-megacd"}, {"name": "jp_mcd2_921222.bin", "note": "JP Mega CD Model 2 BIOS (December 1992). First in JP search order.", "priority": 1, "region": ["japan"], "required": true, "size": 131072, "source_ref": "platform/libretro/libretro.c:1271", "system": "sega-megacd"}, {"name": "jp_mcd1_9112.bin", "note": "JP Mega CD Model 1 BIOS (December 1991). Second in JP search order.", "priority": 2, "region": ["japan"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1271", "system": "sega-megacd"}, {"name": "jp_mcd1_9111.bin", "note": "JP Mega CD Model 1 BIOS (November 1991). Third in JP search order.", "priority": 3, "region": ["japan"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1271", "system": "sega-megacd"}, {"name": "bios_CD_J.bin", "note": "JP Mega CD BIOS (generic name). Last in JP search order.", "priority": 4, "region": ["japan"], "required": false, "size": 131072, "source_ref": "platform/libretro/libretro.c:1271", "system": "sega-megacd"}, {"hle_fallback": true, "name": "32X_G_BIOS.BIN", "note": "32X 68K (Genesis-side) BIOS. HLE replacement generated when NULL.", "required": false, "size": 256, "source_ref": "pico/32x/memory.c:2206-2243", "system": "sega-32x"}, {"hle_fallback": true, "name": "32X_M_BIOS.BIN", "note": "32X Master SH2 BIOS. HLE replacement generated when NULL.", "required": false, "size": 2048, "source_ref": "pico/32x/memory.c:2249-2276", "system": "sega-32x"}, {"hle_fallback": true, "name": "32X_S_BIOS.BIN", "note": "32X Slave SH2 BIOS. HLE replacement generated when NULL.", "required": false, "size": 1024, "source_ref": "pico/32x/memory.c:2279-2297", "system": "sega-32x"}], "notes": "PicoDrive is a fast Mega Drive / Genesis emulator with Mega CD, 32X, Master\nSystem, Game Gear, SG-1000, SC-3000 and Sega Pico support. The libretro port\nis part of the PicoDrive source tree (platform/libretro/).\n\nMega CD / Sega CD games require a region-matching BIOS file. The core searches\nthe system directory for each name in order, trying .bin then .zip extension,\nand uses the first file found. If no BIOS is found, CD games fail to load with\nPM_BAD_CD_NO_BIOS. MSU-MD games can run without BIOS.\n\nBIOS filename search order (platform/libretro/libretro.c:1264-1328):\n  US: us_scd2_9306, SegaCDBIOS9303, us_scd1_9210, bios_CD_U\n  EU: eu_mcd2_9306, eu_mcd2_9303, eu_mcd1_9210, bios_CD_E\n  JP: jp_mcd2_921222, jp_mcd1_9112, jp_mcd1_9111, bios_CD_J\n\n32X BIOS files (m68k, master SH2, slave SH2) are fully optional. The engine\nhas built-in HLE that generates replacement code at startup when the BIOS\npointers are NULL (pico/32x/memory.c:2199 get_bios(), pico/32x/32x.c:172).\nNo current frontend (libretro or standalone) loads these files; the standalone\nloading code is disabled (#if 0 in platform/common/emu.c:1529).\n\ncarthw.cfg is a cartridge hardware database loaded from the system directory.\nA built-in version is compiled into the core (pico/carthw_cfg.c). The external\nfile supplements or overrides game-specific hardware detection (SVP, EEPROM\ntypes, special mappers, copy protection).\n\nMaster System, Game Gear, SG-1000, SC-3000: no BIOS file loaded. The core\ninitializes VDP registers and RAM to simulate post-BIOS state\n(pico/sms.c:1080-1097).\n", "platform_details": {"32x": {"hle_available": true, "m68k_bios_size": 256, "master_sh2_bios_size": 2048, "slave_sh2_bios_size": 1024, "source_ref": "pico/pico.h:54-55, pico/pico_int.h:679-693"}, "megacd": {"bios_size": 131072, "extensions_tried": [".bin", ".zip"], "hle_available": false, "region_specific": true, "source_ref": "pico/pico_int.h:559, platform/libretro/libretro.c:1309-1317"}, "sms": {"hle_available": true, "note": "No BIOS file loaded. VDP/RAM initialized to post-BIOS state.", "source_ref": "pico/sms.c:1080-1097"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/picodrive", "source_commit": "6248b51ffbe212ce441de023ccea6b10fa4d7082", "systems": ["sega-megadrive", "sega-genesis", "sega-megacd", "sega-segacd", "sega-32x", "sega-mastersystem", "sega-gamegear", "sega-sg1000", "sega-sc3000", "sega-pico"], "type": "libretro", "upstream": "https://github.com/irixxxx/picodrive"}


id: pizza-boy-gba
name: Pizza Boy GBA
type: standalone
classification: embedded_hle
source: https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygbapro
upstream: closed-source
profile_json:
{"author": "Pizza Emulators", "core_classification": "embedded_hle", "core_version": "2.8.13", "cores": ["pizza-boy-gba", "Pizza Boy GBA", "PIZZA-BOY-GBA"], "display_name": "Nintendo - Game Boy Advance (Pizza Boy GBA)", "emulator": "Pizza Boy GBA", "files": [{"agnostic": true, "config_key": "bios_file", "description": "Game Boy Advance BIOS", "has_builtin": true, "hle_fallback": true, "name": "gba_bios.bin", "note": "Chosen from any location under any name through the document picker, or, when the picked document is named .zip, taken from its first entry; the legacy browser offers .gba, .bin and .zip and writes the entry it extracts to bios.bin under the application directory. The absolute path is stored and handed to the library, which copies it into a 256 byte buffer. At load time the 16 KB BIOS area is first filled with a 744 byte replacement compiled into the library, then, if the path is set, the file is opened and up to 16384 bytes are read over it and a flag records that a real image is installed. Nothing about the file is examined: any read returning at least one byte is accepted, and no size, name or hash test exists on either side of the bridge. A read of zero bytes leaves the replacement in place and logs \"Cannot read BIOS file\".", "required": false, "size": 16384, "source_ref": "Pizza Boy GBA Pro 2.8.13 SettingsActivity.java:116-140 (import), :143-183 (preference and picker), FileDialog.java:57,72,77,846-857 (legacy browser, zip entry to bios.bin), Common.java:85-105 (copy to temp), :160-190 (single entry unzip), MainActivity.java:833,835,865 (bridge), :10936-10941 (gate and handoff), res/xml/pref_general.xml (defaults); Pizza Boy A Basic 2.3.3 libpizzaboy-jni.so pizza.c:932-938 (path buffer), :945-946 (boot flag), :632-642 (low precision BIOS), global.c:93-95 (defaults), mmu.c:1522-1543 (replacement, gate, read, flag), :2106-2110 (forced HLE), cpu.c:40 (boot vector)", "system": "nintendo-gba"}], "mode": "standalone", "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy A name, reached by ES-DE through its PIZZA-BOY-GBA find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboygbapro, the paid build\nthe rule names first, and it.dbtecno.pizzaboygba, the free one. Two Play distribution\nbuilds are read here, both carrying the source stamp: Pro 2.8.13 (versionCode 343,\nPlay App Signing certificate sha256\n6b5547246e41921f25eba8abb1bc018729c4f0b8db029debbd3380a2b1ec2fe1), which supplies the\nJava and the resources, and Basic 2.3.3 (versionCode 236, developer certificate sha256\nb3ee584096acf4667bb9346daa9cce19237ef7ce95c99e9260ac89be0f7d6130, CN=Davide Berra,\nO=DBTecno), whose arm64-v8a libpizzaboy-jni.so ships DWARF and an unstripped symbol\ntable and supplies every native reference below as its own file and line. Java line\nnumbers are those of Pro 2.8.13. Two rebuilt copies of Pro 1.35.11 were rejected on\ntheir certificate, one signed C=debugging with no source stamp and one signed\nO=APKMODY. 69 of the 77 native methods the Pro declares are exported by the Basic\ncore, the three BIOS entry points among them: one core, compiled per package.\n\nOne system is emulated, Game Boy Advance: the core is built from a tree named\npizzaboyadvance whose compilation units carry gba.c and no Game Boy core, and the\nthree Game Boy Color and Super Game Boy methods the Pro still declares are among the\neight the library does not export.\n\nThe BIOS is the one file the user supplies, and it is read only while Load BIOS file\nis on, off by default; the picker and the Run BIOS animation switch, on by default,\nboth depend on that box (res/xml/pref_general.xml). In the free package the same\nthree preferences are declared android:enabled=\"false\".\n\nA per rom Low precision BIOS set to On clears the stored path and makes the core keep\nits own replacement, and one cartridge, checksum 0xc7d89508, forces the same at load\ntime. When a real image is installed the boot animation starts execution at 0 rather\nthan at the cartridge entry, and a multiplayer session exchanges the CRC32 of the file\nso that both peers run the same one.\n\nEverything else the app opens it makes itself: boxart.db and cheat.db are created by\ntheir own CREATE TABLE, the default skins, the shaders and the cheat descriptors are\nraw resources unpacked at first run, and <rom>.keys is an input recording. The\nobfuscated assets are PairIP tamper protection.\n", "profiled_date": "2026-08-12", "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboygbapro", "systems": ["nintendo-gba"], "type": "standalone", "upstream": "closed-source"}


id: pizza-boy-gbc
name: Pizza Boy GBC
type: standalone
classification: embedded_hle
source: https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboypro
upstream: closed-source
profile_json:
{"author": "Pizza Emulators", "core_classification": "embedded_hle", "core_version": "6.0.6", "cores": ["pizza-boy-gbc", "Pizza Boy GBC", "PIZZA-BOY-GBC"], "display_name": "Nintendo - Game Boy / Color (Pizza Boy GBC)", "emulator": "Pizza Boy GBC", "files": [{"agnostic": true, "config_key": "bios_file", "description": "Game Boy (DMG) boot ROM", "hle_fallback": true, "name": "dmg_boot.bin", "note": "Chosen from any location under any name through the document picker and copied into the application directory under the name the picker reports; the legacy browser offers .gbc, .gb, .bin and .zip and writes the entry it extracts from a zip to bios.bin. The absolute path is stored and handed to the library, which copies it into a 256 byte buffer. It is used when the ROM name ends in .gb or .sgb, and only on the first run of that ROM and with no multiplayer peer connected. The file is read into a second MMU image, up to 8192 bytes, and a count of exactly 256 starts the run as a Game Boy, keeping the default palette. Nothing else is examined: no name, size range, header or hash test exists on either side of the bridge, and a count that is neither 256 nor 2304 is refused. A multiplayer session exchanges the CRC32 of this file so that both peers run the same one.", "required": false, "size": 256, "source_ref": "Pizza Boy GBC Pro 6.0.6 MainActivity.java:702 (native method), :8067-8081 (gate and slot selection), :1734-1757 (CRC32 of the file), :1907, :2136 (multiplayer handshake), SettingsActivity.java:40-41 (request codes), :96-113 (picker result and copy), :116-192 (both preferences), Common.java:42 (copy to the application directory), FileDialog.java:949-975 (legacy browser, zip entry to bios.bin), res/xml/pref_general.xml:89-99 (defaults); Pizza Boy C Basic 4.1.6 libpizzaboy-jni.so pizza.c:1023-1024 (path into global_bios_file), global.c:28 (char[256]), mmu.c:431-463 (open, 64 KB clear, 8192 byte read, cartridge header copy, 256 and 2304 gate, refusal), gameboy.c:1161-1168 (conditions and call), :1171, :1238 (failure), :1179-1198 (model, MMU switch, program counter at 0, accumulator), :1201-1235 (run to 0x100, return to the cartridge)", "system": "nintendo-gb", "validation": ["size"]}, {"agnostic": true, "config_key": "bios_file_cgb", "description": "Game Boy Color (CGB) boot ROM", "hle_fallback": true, "name": "cgb_boot.bin", "note": "Same picker, same copy and same handoff as the Game Boy slot, used for every ROM whose name does not end in .gb or .sgb. A count of exactly 2304 starts the run as a Game Boy Color, which sets the accumulator to 0x11 and keeps the hardware palettes instead of reloading the default one. The 0x100 to 0x1FF window of the image is overwritten with the cartridge header before execution, which is the gap the 2304 byte layout leaves for it.", "required": false, "size": 2304, "source_ref": "Pizza Boy GBC Pro 6.0.6 MainActivity.java:8073-8078 (slot selection), SettingsActivity.java:98 (preference key), :158-192 (preference and picker), res/xml/pref_general.xml:97-99; Pizza Boy C Basic 4.1.6 libpizzaboy-jni.so mmu.c:435-452 (read, header copy, 2304 gate), gameboy.c:1179 (model from the return value), :1189-1198 (program counter, accumulator, palette)", "system": "nintendo-gbc", "validation": ["size"]}], "mode": "standalone", "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy C name, reached by ES-DE through its PIZZA-BOY-GBC find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboypro, the paid build the\nrule names first, and it.dbtecno.pizzaboy, the free one. Two Play distribution builds\nare read here, both carrying the developer certificate sha256\nb3ee584096acf4667bb9346daa9cce19237ef7ce95c99e9260ac89be0f7d6130 (CN=Davide Berra,\nO=DBTecno) and a source stamp: Pro 6.0.6 (versionCode 231), which supplies the Java\nand the resources, and Basic 4.1.6 (versionCode 202), whose arm64-v8a\nlibpizzaboy-jni.so ships DWARF and an unstripped symbol table and supplies every\nnative reference below as its own file and line. Java line numbers are those of Pro\n6.0.6. The Pro on the store is 7.4.5 (versionCode 324) and no genuine copy of it is\nreachable: apkcombo bounces the download page of a paid app back to the app page,\napkvision carries no copy, and archive.org holds 6.0.6 alone. The Pro ships its core\nas a stripped armeabi-v7a build; it carries the same log strings and the same\nconstants as the Basic core, the 64 KB clear, the 8192 byte read cap, the 256 byte\nheader copy and the 256 and 2304 byte gate, and 65 of the 70 entry points it exports\nare exported by the Basic core as well. The Pro also ships libpizza-jni.so, an\nolder core exporting the free package JNI names and carrying no BIOS entry point,\nwhich no loadLibrary call reaches.\n\nThree systems are emulated from one tree named pizzaboy, whose compilation units\ncarry gameboy.c, mmu.c, sgb.c and camera.c: Game Boy, Game Boy Color and Super Game\nBoy. The SGB command set, borders and palettes are handled by sgb.c behind a Super\nGame Boy switch that is on by default, with a preference that gives Game Boy Color\nprecedence over Super Game Boy on a cartridge that offers both. camera.c drives the\nGame Boy Camera cartridge from the device camera, and the Game Boy Printer is served\nover the link port.\n\nThe boot ROM is the one file the user supplies, in two slots, Gameboy Classic ROMs\nBIOS and Gameboy Color ROMs BIOS, and it is read only while Load BIOS file is on,\noff by default (res/xml/pref_general.xml:89-99). In the free package the same three\npreferences are declared android:enabled=\"false\" behind a paid badge. A ROM whose\nname ends in .gb or .sgb takes the first slot, every other name takes the second.\n\nThe library never examines the name, the extension or the content: the byte count of\nthe read decides the machine. A file of 256 bytes runs the cartridge as a Game Boy,\none of 2304 bytes as a Game Boy Color, and any other length is refused with \"Unknown\nBIOS file\", after which the run continues with the boot skipped. The image is read\ninto a second MMU whose 0x100 to 0x1FF window is overwritten with the cartridge\nheader from the active one, the program counter starts at 0 instead of at the\ncartridge entry, and the animation runs until it reaches 0x100, at which point the\nactive MMU returns to the cartridge and the accumulator is restored. A multiplayer\nsession exchanges the CRC32 of the Game Boy slot so that both peers run the same\nfile.\n\nEverything else the app opens it makes itself: the default skins and the cheat\ndescriptors are raw resources unpacked at first run, the box art, cheat, sticker,\nlayout and per-ROM databases are created by their own CREATE TABLE, and the save\nstates, the RTC files, the screenshots and the GIF captures are outputs. No boot ROM\nis compiled into the library: neither Game Boy image nor the Nintendo logo appears\nanywhere in the loaded sections, and the post-boot register state comes from the\nreset path instead.\n", "profiled_date": "2026-08-12", "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboypro", "systems": ["nintendo-gb", "nintendo-gbc", "nintendo-sgb"], "type": "standalone", "upstream": "closed-source"}


id: pizza-boy-sc
name: Pizza Boy SC
type: standalone
classification: other
source: https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboyscpro
upstream: closed-source
profile_json:
{"author": "Pizza Emulators", "core_classification": "other", "core_version": "1.2.4", "cores": ["pizza-boy-sc", "Pizza Boy SC", "PIZZA-BOY-SC", "it.dbtecno.pizzaboyscpro", "it.dbtecno.pizzaboyscbasic"], "display_name": "Sega - MS/GG/MD/CD (Pizza Boy SC)", "emulator": "Pizza Boy SC", "files": [{"agnostic": true, "description": "Sega CD boot ROM", "name": "bios_CD_U.bin", "note": "Chosen from any location under any name through the document picker, or, when the picked document is named .zip, taken from its first entry. The stored path is read at engine start and the byte count compared with 131072; the machine compares it a second time and panics when it differs. An absent path ends the run with \"MegaCD Bios not provided\", an empty one with \"MegaCD BIOS path is missing\", a failed read with \"Error loading BIOS file\", and a wrong length with \"Invalid BIOS len\". The core holds one Mega CD slot and applies no other test, so the boot ROM of any region satisfies it; the three are listed because the region of the discs decides which one has to be installed.", "required": true, "size": 131072, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (four slot handoff), :517 (SegaCD branch), :564 (absent), :567 (validation entry), :573 (empty path), :580 (read failure), :592 (length), :596 (accepted); emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157 (second length test and panic); SettingsActivity.java:177-219 (picker, zip entry, stored path), res/xml/pref_general.xml:105-123 (preferences and defaults)", "system": "sega-megacd", "validation": ["size"], "variant_group": "megacd-boot-rom"}, {"agnostic": true, "description": "Mega CD boot ROM", "name": "bios_CD_E.bin", "note": "Same slot, same picker and same length test as the other Mega CD boot ROMs.", "required": true, "size": 131072, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:567-596, emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157", "system": "sega-megacd", "validation": ["size"], "variant_group": "megacd-boot-rom"}, {"agnostic": true, "description": "Mega CD boot ROM (Japan)", "name": "bios_CD_J.bin", "note": "Same slot, same picker and same length test as the other Mega CD boot ROMs.", "required": true, "size": 131072, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:567-596, emulated/systems/mega_cd/src/megacd_main_machine.rs:156-157", "system": "sega-megacd", "validation": ["size"], "variant_group": "megacd-boot-rom"}, {"agnostic": true, "description": "Master System boot ROM", "name": "bios_U.sms", "note": "Picked and stored like the Mega CD image and handed to the machine as a path. Nothing about the file is examined on either side of the bridge, and an empty slot is not an error: the cartridge runs with the boot sequence skipped.", "required": false, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :538 (branch reading the Master System and Game Gear slots), emulated/systems/sms/src/system.rs:202 (path logged into the machine)", "system": "sega-mastersystem", "variant_group": "mastersystem-boot-rom"}, {"agnostic": true, "description": "Master System boot ROM (Europe)", "name": "bios_E.sms", "note": "Same slot and same absence of tests as the other Master System boot ROMs.", "required": false, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:538, emulated/systems/sms/src/system.rs:202", "system": "sega-mastersystem", "variant_group": "mastersystem-boot-rom"}, {"agnostic": true, "description": "Master System boot ROM (Japan)", "name": "bios_J.sms", "note": "Same slot and same absence of tests as the other Master System boot ROMs.", "required": false, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:538, emulated/systems/sms/src/system.rs:202", "system": "sega-mastersystem", "variant_group": "mastersystem-boot-rom"}, {"agnostic": true, "description": "Game Gear boot ROM", "name": "bios.gg", "note": "Its own slot, separate from the Master System one, both read on the branch that serves the two machines. Picked and stored the same way, handed to the machine as a path, and never examined; an empty slot is not an error.", "required": false, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :481 (system name match, GameGear), :538 (branch reading the Master System and Game Gear slots)", "system": "sega-gamegear"}, {"agnostic": true, "description": "Mega Drive TMSS boot ROM", "name": "bios_MD.bin", "note": "Read on the Genesis branch, the one engine start falls through to when the system name is neither SMS, GameGear nor SegaCD. Picked and stored the same way and never examined; the machine reports it as \"BIOS detected\" and runs without it when the slot is empty.", "required": false, "source_ref": "Pizza Boy SC Basic 1.2.4 libsc.so frontend/android/src/lib.rs:424 (slot), :550 (Genesis branch and slot read), emulated/systems/genesis/src/system.rs:270 (path logged into the machine), emulated/systems/genesis/src/genesis_machine.rs:135 (detection)", "system": "sega-megadrive"}], "mode": "standalone", "notes": "Two Android packages, closed source, sold and given away on Google Play under the\nPizza Boy SC name, reached by ES-DE through its PIZZA-BOY-SC find rule and started\nwith the game passed as the rom_uri extra: it.dbtecno.pizzaboyscpro, the paid build\nthe rule names first, and it.dbtecno.pizzaboyscbasic, the free one. The build read\nhere is Basic 1.2.4 (versionCode 33), a Play distribution drop carrying the source\nstamp and signed by the Play App Signing certificate sha256\n5ae32245362ccafab6977e759f658dda66bac81cebdd804581cb55db2f219149. The Pro on the\nstore is 1.4.25 and no genuine copy of it is reachable: apkcombo bounces the\ndownload page of a paid app back to the app page, apkmirror carries no SC build,\narchive.org holds none, and the one apkvision copy, labelled Pro 1.3.7, is signed\nCN=APKVISION.ORG with no source stamp and was rejected. The Basic library serves\nboth packages: besides its own entry points it exports\nJava_it_dbtecno_pizzaboyscpro_MainActivity_jniEnableCallback.\n\nThe core is libsc.so, a Rust tree built as one workspace whose compilation units\nare named in its own panic and log records: emulated/systems/genesis,\nemulated/systems/sms, emulated/systems/mega_cd, emulated/components/cdrom,\nemulated/common and frontend/android. The armeabi-v7a build shipped in the split\nis stripped and carries no DWARF, so the file and line of every reference below\ncomes from the Location records the Rust log and panic paths embed. Four machines\nrun: engine start compares the system name against SMS, GameGear and SegaCD and\nfalls through to Genesis (lib.rs:481, 517, 538, 550), which covers Master System\nand Mark III, Game Gear, Mega Drive and Genesis, and Mega CD and Sega CD. Discs\nare read from cue and chd images through components/cdrom.\n\nFour BIOS slots exist, one per machine, set in one call whose log reads\n\"jni setBIOSFiles sms: {} gg: {} cd: {} md: {}\" (lib.rs:424); a fifth setter stores\na single path in a slot of its own that engine start never reads (lib.rs:416), and\nsetBIOSBoot logs \"TODO jni setBIOSboot\" and does nothing. Each branch reads the\nslots its machines use, the Master System one reading the Game Gear slot as well,\nand an empty slot is an ordinary case for Master System, Game Gear and Mega Drive.\nOnly the Mega CD slot is mandatory: without it the run stops at \"MegaCD Bios not\nprovided\" (lib.rs:564) and engine start returns its failure code.\n\nThe Mega CD image is the only file the core examines. It is read and its length\ncompared with 131072, then handed to the machine, which repeats the same\ncomparison and panics on a mismatch (megacd_main_machine.rs:156-157). Nothing else\nabout it is tested: no name, no header, no hash, and no region, the Game Region\nsetting being passed separately as jap, usa or eu and never selecting a file.\n\nThe user supplies each file through the document picker, which filters nothing:\nthe chosen document is copied into the application temp directory under the name\nthe picker reports, or, when that name ends in zip, the first entry is extracted\nthere instead, and the absolute path of the copy is stored. In the free package the\nBIOS preferences are declared android:enabled=\"false\" behind a paid badge, and its\nJava never hands a path to the core.\n\nEverything else the app opens it makes itself: the default skins, the cheat\ndescriptors and the two shaders are raw resources unpacked at first run, and the\nbox art, cheat, layout, sticker and per-ROM databases are created by their own\nCREATE TABLE.\n", "profiled_date": "2026-08-12", "source": "https://play.google.com/store/apps/details?id=it.dbtecno.pizzaboyscpro", "systems": ["sega-mastersystem", "sega-gamegear", "sega-megadrive", "sega-megacd"], "type": "standalone", "upstream": "closed-source"}


id: plastic
name: Plastic
type: standalone
classification: other
source: https://github.com/Amjad50/plastic
upstream: https://github.com/Amjad50/plastic
source_commit: 74152adb3acd890d3abee2ff5906408f26a199e2
profile_json:
{"core_classification": "other", "core_version": "0.3.5", "cores": ["plastic"], "display_name": "Nintendo - NES / Famicom (Plastic)", "emulator": "Plastic", "files": [], "mode": "standalone", "notes": "NES emulator written in Rust by Amjad Alsharafi. The emulation lives in the\nplastic_core crate and two binaries drive it: plastic, an egui window, and\nplastic_tui, a terminal frontend (docs/man/plastic.1). Both take the ROM\npath as their first argument (plastic_ui/src/main.rs:418-424,\nplastic_tui/src/main.rs:5-38).\n\nA cartridge boots with nothing supplied. The 2A03, the PPU and every mapper\nare emulated in software and the console has no boot ROM, so no BIOS or\nfirmware is read. Cartridge::from_file accepts a path only when its\nextension is nes and its first four bytes are the iNES magic\n(plastic_core/src/cartridge/mod.rs:184-263, :157-165). get_mapper implements\n0, 1, 2, 3, 4, 7, 9, 10, 11, 12 and 66, and any other number returns\nMapperNotImplemented (:280-296). No Famicom Disk System path exists and\ntherefore no disksys.rom.\n\nThe NES to RGB table is a constant compiled into the binary\n(plastic_core/src/display/color.rs:22-87, selected at :158) and the 32 bytes\nat 0x3F00 are the PPU palette RAM (plastic_core/src/ppu2c02/palette.rs:6-19),\nso no palette file is opened. The window icon is embedded at build time\n(plastic_ui/src/main.rs:430).\n\nThe emulator reads back only what it wrote itself. A cartridge whose header\ncarries the battery bit gets <rom>.nes.sav beside the ROM, written on drop\nand reloaded on the next run (plastic_core/src/cartridge/mod.rs:319-348,\n:457-463). Save state slots 0 to 9 are <rom-stem>_<slot>.pst under the data\ndirectory, ~/.local/share/plastic/saved_states on Linux\n(plastic_ui/src/main.rs:16-32,95-118; plastic_tui/src/ui.rs:38-51,144-176;\nplastic_core/src/nes.rs:393-406).\n\nGamepad support comes from gilrs, which compiles the SDL controller database\ninto the binary and takes its only override from the SDL_GAMECONTROLLERCONFIG\nenvironment variable rather than a file (gilrs src/mapping/mod.rs:477-485).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Amjad50/plastic", "source_commit": "74152adb3acd890d3abee2ff5906408f26a199e2", "systems": ["nintendo-nes"], "type": "standalone", "upstream": "https://github.com/Amjad50/plastic"}


id: play
name: play
type: libretro
classification: official_port
source: https://github.com/jpd002/Play-
upstream: https://github.com/jpd002/Play-
source_commit: 2193ca112b576896a3022478a225661a7f84feb5
profile_json:
{"core_classification": "official_port", "core_version": "Git", "cores": ["play", "play!"], "display_name": "Sony - PlayStation 2 (Play!)", "emulator": "play", "files": [], "notes": "Full HLE emulator. No BIOS or firmware files required. firmware_count=0 confirmed by source.\n", "profiled_date": "2026-03-24", "source": "https://github.com/jpd002/Play-", "source_commit": "2193ca112b576896a3022478a225661a7f84feb5", "systems": ["sony-playstation-2"], "type": "libretro", "upstream": "https://github.com/jpd002/Play-"}


id: pocketcdg
name: PocketCDG
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-pocketcdg
upstream: https://github.com/redbug26/libretro-pocketcdg
source_commit: b48b807e770aeea9a9e8f7af36f5e04ed4727aaa
profile_json:
{"core_classification": "pure_libretro", "core_version": "Git", "cores": ["pocketcdg"], "display_name": "PocketCDG", "emulator": "PocketCDG", "files": [], "notes": "CD+G (CD+Graphics) karaoke player. Renders subcode graphics from .cdg files synchronized with MP3 audio. Font and MP3 decoder (libmad) embedded in the binary.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-pocketcdg", "source_commit": "b48b807e770aeea9a9e8f7af36f5e04ed4727aaa", "systems": [], "type": "libretro", "upstream": "https://github.com/redbug26/libretro-pocketcdg"}


id: pokemini
name: PokeMini
type: libretro
classification: community_fork
source: https://github.com/libretro/PokeMini
upstream: https://sourceforge.net/projects/pokemini/
source_commit: 132111b76343559860532a1ccc094f93f1ed5650
profile_json:
{"core_classification": "community_fork", "core_version": "v0.60", "cores": ["pokemini"], "display_name": "Nintendo - Pokemon Mini (PokeMini)", "emulator": "PokeMini", "files": [{"description": "Pokemon Mini official BIOS", "hle_fallback": true, "name": "bios.min", "note": "Mapped at $000000-$000FFF (4 KB). Read via Hardware.c:144-145. Falls back to embedded FreeBIOS if missing.", "required": false, "size": 4096, "source_ref": "source/PokeMini.c:189-206 (PokeMini_LoadBIOSFile), libretro/libretro.c:565 (path)", "system": "nintendo-pokemon-mini"}], "notes": "PokeMini is a Pokemon Mini handheld emulator ported to libretro.\n\nThe core has an embedded FreeBIOS (open-source replacement) compiled\ndirectly into the binary from freebios/freebios.c. This means the\nreal BIOS is never strictly required -- games will run with FreeBIOS\nalone, though compatibility may differ from the original firmware.\n\nBIOS loading sequence in the libretro port:\n\n1. PokeMini_Create() clears PM_BIOS (4096 bytes at $000000-$000FFF),\n   then loads FreeBIOS into it via memcpy (source/PokeMini.c:116).\n   PokeMini_FreeBIOS is set to 1.\n\n2. retro_load_game() calls PokeMini_Reset(0) after loading the ROM.\n\n3. PokeMini_Reset() checks forcefreebios (hardcoded to 0 in the\n   libretro port, libretro.c:499). Since FreeBIOS is currently loaded\n   and forcefreebios is 0, it enters the real-BIOS path\n   (source/PokeMini.c:503-508):\n     - Reloads FreeBIOS as a safety fallback\n     - Checks if CommandLine.bios_file exists on disk\n     - If found, overwrites PM_BIOS with the real BIOS via\n       PokeMini_LoadBIOSFile(), sets PokeMini_FreeBIOS to 0\n\n4. If bios.min is missing, FreeBIOS stays loaded and emulation\n   proceeds normally.\n\nFile path construction (libretro.c:565):\n  sprintf(CommandLine.bios_file, \"%s%cbios.min\", g_system_dir, slash)\nThe core looks for bios.min directly in the system directory root,\nno subdirectory.\n\nThere is no core option to toggle FreeBIOS in the libretro port.\nThe standalone PokeMini has a forcefreebios setting, but the libretro\nwrapper hardcodes it to 0 (always prefer real BIOS when available).\n\nFreeBIOS (freebios/freebios.min) is 4096 bytes, a clean-room\nreimplementation. It is NOT the official Nintendo Pokemon Mini BIOS.\n", "platform_details": {"bios_mapping": {"note": "PM_BIOS is a 4096-byte array. CPU reads from address range\n$000000-$000FFF are served directly from this buffer. The BIOS\nhandles interrupt vectors, hardware init, and the startup logo.\n", "source_ref": "source/PokeMini.h:38, source/Hardware.c:144-145", "target": "$000000-$000FFF in Pokemon Mini address space (4 KB)"}, "freebios_fallback": {"freebios_hashes": {"md5": "d6c3ff5abc88f7c42f1a5edd6889f9cf", "sha1": "b40421defb005e836913e4e39dc1a18aa3b8887e", "size": 4096}, "note": "FreeBIOS is a 4096-byte open-source replacement embedded in the\nbinary as a C array. It provides basic interrupt vectors and\nstartup code. Loaded by default at PokeMini_Create() and used\nas fallback when bios.min is not found on disk.\n", "source_ref": "freebios/freebios.c, source/PokeMini.c:209-214"}, "load_priority": {"note": "During PokeMini_Reset(), the core first reloads FreeBIOS as a\nsafe baseline, then attempts to load bios.min from disk. If\nthe file exists and is exactly 4096 bytes, it replaces FreeBIOS.\nThe forcefreebios flag (hardcoded 0 in libretro) controls this:\nwhen 0, the core always prefers real BIOS over FreeBIOS.\n", "source_ref": "source/PokeMini.c:515-523"}}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/PokeMini", "source_commit": "132111b76343559860532a1ccc094f93f1ed5650", "systems": ["nintendo-pokemon-mini"], "type": "libretro", "upstream": "https://sourceforge.net/projects/pokemini/"}


id: potator
name: Potator
type: libretro
classification: community_fork
source: https://github.com/libretro/potator
upstream: https://github.com/alekmaul/potator
source_commit: ad87bc6068ef126e48339b440465fb0bf5a2794f
profile_json:
{"core_classification": "community_fork", "core_version": "1.0.5", "cores": ["potator"], "display_name": "Watara - Supervision (Potator)", "emulator": "Potator", "files": [], "notes": "Watara Supervision emulator. No BIOS required.\nThe Supervision has no BIOS ROM; games execute directly from cartridge.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/potator", "source_commit": "ad87bc6068ef126e48339b440465fb0bf5a2794f", "systems": ["watara-supervision"], "type": "libretro", "upstream": "https://github.com/alekmaul/potator"}


id: ppsspp
name: PPSSPP
type: standalone + libretro
classification: official_port
source: https://github.com/libretro/ppsspp
upstream: https://github.com/hrydgard/ppsspp
source_commit: 7b4ddb426bbe9e287bb7f19b0cfaebb4ea0d41d8
profile_json:
{"core_classification": "official_port", "core_version": "Git", "cores": ["ppsspp"], "data_directories": [{"destination": "", "ref": "ppsspp-assets", "source_ref": "libretro/libretro.cpp:537,549"}], "display_name": "Sony - PlayStation Portable (PPSSPP)", "emulator": "PPSSPP", "files": [{"description": "PPGe dialog texture atlas for save/load dialogs, on-screen keyboard, system UI", "name": "ppge_atlas.zim", "note": "PanicAlert if missing. System dialogs render without graphics but core continues running.", "path": "PPSSPP/ppge_atlas.zim", "required": false, "source_ref": "Core/Util/PPGeDraw.cpp:227-228"}, {"description": "PPGe atlas metadata (glyph positions, UV coords)", "name": "ppge_atlas.meta", "note": "Loaded after ppge_atlas.zim. Without it, dialog UI has no glyph layout.", "path": "PPSSPP/ppge_atlas.meta", "required": false, "source_ref": "Core/Util/PPGeDraw.cpp:235-237"}], "notes": "Full HLE emulator. No Sony firmware or BIOS required.\nAll PSP kernel modules (flash0:/kd/*.prx) are reimplemented in C++.\nLibretro core loads assets from system/PPSSPP/ via VFS.\nAssets include replacement PGF fonts (18 files in flash0/font/),\ngame compatibility database (compat.ini), language mapping (langregion.ini),\nand post-processing shaders (shaders/).\nLibretro fork (2020-03-18) behind upstream.\nPSP_DEFAULT_FIRMWARE = 660 (Core/ConfigValues.h:40).\n", "pack_structure": {"libretro": "PPSSPP"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/ppsspp", "source_commit": "7b4ddb426bbe9e287bb7f19b0cfaebb4ea0d41d8", "systems": ["sony-psp"], "type": "standalone + libretro", "upstream": "https://github.com/hrydgard/ppsspp"}


id: prboom
name: PrBoom
type: libretro
classification: game_engine
source: https://github.com/libretro/libretro-prboom
upstream: http://prboom.sourceforge.net/
source_commit: b4046cef3641d6bb28c0394915bfcc732cc49652
profile_json:
{"core_classification": "game_engine", "core_version": "v2.5.0", "cores": ["prboom"], "display_name": "Doom (PrBoom)", "emulator": "PrBoom", "files": [{"crc32": "a5751b99", "description": "PrBoom engine data WAD (fonts, palette, colormaps, tables, menu graphics)", "hle_fallback": true, "md5": "72ae1b47820fcc93cc0df9c428d0face", "name": "prboom.wad", "note": "Searched in system/prboom/ then system/. Falls back to internal defaults if missing, but menus and HUD may render incorrectly without it.", "required": false, "sha1": "5f4aed208301449c2e9514edfd325fe9dead76fa", "size": 143312, "source_ref": "src/d_main.c:1402-1440 (PACKAGE .wad load), libretro/libretro.c:3974-4050 (I_FindFile search), src/config.h:39 (PACKAGE=prboom)", "system": "doom"}], "notes": "PrBoom is a Doom source port based on MBF (Marine's Best Friend), itself\nderived from Boom. The libretro port plays Doom, Doom II, Final Doom,\nFreeDoom, and custom WADs/PWADs.\n\nThe core requires prboom.wad, a small engine data WAD containing internal\nresources: font glyphs, palette, colormaps, sine/tangent tables, gamma\ntables, menu graphics, and a null sprite (TNT1A0). It is NOT a game WAD.\nThe file is generated at build time by the rdatawad tool from raw PPM\ngraphics and LMP lumps (see Makefile.prboomdata), but ships pre-built\nin the repository root.\n\nWithout prboom.wad the core falls back to hardcoded internal defaults\n(d_main.c:1073-1074), so the file is technically optional but expected\nfor correct rendering of menus, HUD digits, and extended features.\n\nFile search order (libretro.c I_FindFile, line 1742):\n1. WAD directory (same folder as the loaded game WAD)\n2. system/prboom/ subdirectory\n3. system/ directory directly\n4. Parent folders of WAD directory (recursive, if enabled)\n\nThe core accepts .wad, .iwad, .pwad, and .lmp extensions. Game IWADs\nit recognizes (d_main.c:140-152): doom2f.wad, doom2.wad, plutonia.wad,\ntnt.wad, freedoom2.wad, doom.wad, doomu.wad, freedoom1.wad,\nfreedoom.wad, doom1.wad.\n\nThe src/ directory contains a second, larger prboom.wad (228743 bytes,\nmd5 23afd6143cb1ffec99a46755f9209ea6) which is the upstream PrBoom\noriginal. The root copy (143312 bytes) is the libretro-specific build.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-prboom", "source_commit": "b4046cef3641d6bb28c0394915bfcc732cc49652", "systems": ["doom"], "type": "libretro", "upstream": "http://prboom.sourceforge.net/"}


id: prboom-plus
name: PrBoom+
type: standalone
classification: game_engine
source: https://github.com/coelckers/prboom-plus
upstream: https://github.com/coelckers/prboom-plus
source_commit: 969515162c5aebea4ad7a125ee178dcad3d576ad
profile_json:
{"analysis": {"engine_wad_contents": {"colormaps": "WATERMAP, between C_START and C_END", "flats": "-N0_TEX-, between FF_START and FF_END", "graphics": "the DIG* status bar digits, STBR*, the BOX* frame pieces, STKEYS6-8, STCFN096, M_BUTT1/2, M_COLORS, M_PALNO, M_PALSEL, M_VBOX, CROSS1-3", "lumps": ["SWITCHES, ANIMATED", "the CR* colour translation tables"], "note": "What rdatawad packs into prboom-plus.wad, in the order the command line builds it.\n", "palette": "palette.rgb", "sounds": "DSDGSIT, DSDGATK, DSDGACT, DSDGDTH, DSDGPAIN", "source_ref": "data/CMakeLists.txt:24-340 (rdatawad input lists), data/CMakeLists.txt:342-362 (WAD_SRC and WAD_CMDLINE)", "sprites": "TNT1A0, the DOGS* frames, PLS1* and PLS2*, between SS_START and SS_END", "tables": {"entries": ["SINETABL, TANGTABL, TANTOANG, GAMMATBL", "CHEXDEH, BFGBEX, NERVEBEX", "GLSHADOW, GLFP, GLVP", "-PRBHUD-, read by hu_stuff.c:1144", "the M_* OpenGL automap icons listed in gl_map.c:48-68"], "note": "Between B_START and B_END"}}, "external_programs": {"entries": [{"source_ref": "prboom2/src/m_misc.c:1062-1064 (cap_soundcommand, cap_videocommand, cap_muxcommand)", "what": "ffmpeg, video capture and muxing"}, {"source_ref": "d_client.c:236-257 (execlp), doc/prboom-plus.6:200-206", "what": "wget then unzip, fetching a WAD a game server asks for"}, {"source_ref": "r_demo.c:1641-1704 (D_TryGetWad), prboom2/src/m_misc.c:1029 (default empty, so the path is inert until configured)", "what": "getwad_cmdline, run through system() when a needed WAD is missing"}], "note": "Invoked as processes, not read as data files"}, "generated_files": {"entries": [{"filename": "prboom-plus.cfg", "source_ref": "prboom2/src/m_misc.c:1586-1600 (BOOM_CFG, path from I_DoomExeDir), prboom2/src/m_misc.c:1606 (read)"}, {"filename": "RGB2PAL.dat", "note": "A 24-bit RGB to palette lookup table built from V_GetPlaypal, so its contents follow whichever IWAD is loaded. gl_hires.c:920-936 prefers an RGB2PAL lump of the right length when a WAD supplies one.\n", "source_ref": "gl_hires.c:938-953 (read), gl_hires.c:962-967 (opened wb and written)"}, {"filename": "<hires image>.cache", "note": "Keyed on the source image mtime and discarded when it differs.", "source_ref": "gl_hires.c:1144-1147 (read), gl_hires.c:1179 (gld_HiRes_WriteCache)"}, {"filename": "levelstat.txt", "source_ref": "e6y.c:968"}, {"filename": "levelinfo.txt", "source_ref": "prboom2/src/d_main.c:1049-1060, behind GL_DOOM and PRBOOM_DEBUG"}, {"filename": "temp_a.nut, temp_v.nut", "source_ref": "prboom2/src/m_misc.c:1065-1066 (cap_tempfile1, cap_tempfile2)"}], "note": "Written by the program itself, none is user-supplied"}, "shader_override": {"files": ["shaders/glvp.txt", "shaders/glfp.txt"], "note": "Read from the config directory when present. ReadLump falls back to the GLVP and GLFP lumps in the ns_prboom namespace when the file is missing, and those lumps are built into prboom-plus.wad (data/CMakeLists.txt:60-61). No distribution ships the .txt form: it is an override slot, and the shipped content is already covered by the WAD.\n", "source_ref": "gl_shader.c:144-152 (path built from I_DoomExeDir), gl_shader.c:84-129 (ReadLump)"}, "user_supplied_paths": {"entries": [{"source_ref": "prboom2/src/d_main.c:144-165 (standard_iwads), prboom2/src/d_main.c:977-990 (FindIWADFile)", "what": "IWAD, -iwad or autodetected from the standard names"}, {"source_ref": "prboom2/src/d_main.c:1906-1927", "what": "PWADs, -file"}, {"source_ref": "prboom2/src/d_main.c:2036-2055, prboom2/src/d_main.c:2081-2099, prboom2/src/m_misc.c:336-337", "what": "DEHACKED and BEX patches, -deh, plus the dehfile_1 and dehfile_2 config keys and the autoload directories"}, {"source_ref": "prboom2/src/m_misc.c:334-335, prboom2/src/d_main.c:1873-1895", "what": "extra autoloaded WADs, wadfile_1 and wadfile_2"}, {"source_ref": "prboom2/src/d_main.c:1400-1414 (GetAutoloadBaseDir), prboom2/src/d_main.c:1500-1519 (D_AutoloadIWadDir)", "what": "autoload directories, <config dir>/autoload/doom-all and one per IWAD"}, {"source_ref": "r_demo.c:89-119, g_game.c:2570, g_game.c:3150", "what": "demos, -playdemo, -fastdemo, -record"}, {"source_ref": "gl_hires.c:467-631 (hires_paths), gl_hires.c:703-719 (gl_texture_hires_dir or I_DoomExeDir)", "what": "external high resolution texture packs, under textures/, flats/ and patches/"}, {"source_ref": "prboom2/src/d_main.c:1019-1032, m_menu.c:957", "what": "savegames, DOOMSAVEDIR or the config directory"}, {"source_ref": "prboom2/src/d_main.c:1094-1112", "what": "response files, @name"}], "note": "Named on the command line or in the config, with no fixed filename"}}, "core_classification": "game_engine", "core_version": "2.6.66", "cores": ["prboom-plus"], "display_name": "Doom (PrBoom+)", "emulator": "PrBoom+", "files": [{"crc32": "a4626dfa", "description": "PrBoom+ engine data WAD", "md5": "1164ae723c9181698cc41dde6a341132", "name": "prboom-plus.wad", "note": "The code checks existence only, then rejects a file whose header is neither IWAD nor PWAD (prboom2/src/w_wad.c:216-218). Hashes are those of the file rdatawad produces from the data/ assets at this revision, which matches the copy in the v2.6.66 release archive byte for byte. They identify the 2.6.66 build; other versions carry different lumps.\n", "required": true, "sha1": "8a799c6615702aac72016b784e30ea1abd3e197b", "size": 357768, "source_ref": "prboom2/src/m_misc.c:1723-1724 (I_FindFile then I_Error), prboom2/src/d_main.c:1873-1895 (autoload), prboom2/src/w_wad.c:185-196 (LUMP_PRBOOM tagging), prboom2/CMakeLists.txt:41 (PACKAGE_TARNAME), prboom2/CMakeLists.txt:234-235 (WAD_DATA), prboom2/data/CMakeLists.txt:364-370 (rdatawad build and install)", "system": "doom"}, {"description": "General MIDI soundfont for the fluidsynth MIDI player", "hle_fallback": true, "name": "TimGM6mb.sf2", "note": "Named by the Windows default of snd_soundfont, where snd_midiplayer also defaults to fluidsynth, so a stock Windows configuration reads it. Any soundfont works: the value is a config string and I_FindFile2 appends .sf2 only when the name as written is missing. A load failure returns 0 from fl_init, and the song falls through to the next player on the list, the built-in OPL2 synth.\n", "required": false, "source_ref": "prboom2/src/m_misc.c:445-446 (_WIN32 defaults for snd_midiplayer and snd_soundfont), prboom2/src/MUSIC/flplayer.c:193-202 (I_FindFile2 then fluid_synth_sfload)", "system": "doom"}, {"description": "General MIDI soundfont named by the non-Windows soundfont default", "hle_fallback": true, "name": "default-GM.sf3", "note": "The default is an absolute path, which resolves through the unprefixed working directory entry of the search table. Reached once snd_midiplayer is set away from its sdl default, since sdl keeps the fluidsynth player out of the picture entirely. Same fallback to the OPL2 synth as the Windows default.\n", "required": false, "source_ref": "prboom2/src/m_misc.c:448-449 (non-_WIN32 defaults, /usr/share/sounds/sf3/default-GM.sf3), prboom2/src/MUSIC/flplayer.c:193-202 (I_FindFile2 then fluid_synth_sfload)", "system": "doom"}], "mode": "standalone", "notes": "Doom source port forked from PrBoom, with the software and OpenGL renderers\nin a single binary. FindIWADFile accepts doom2f, doom2, plutonia, tnt, doom,\ndoom1, doomu, freedoom2, freedoom1, freedm, hacx, chex, rekkrsa, bfgdoom2\nand bfgdoom (prboom2/src/d_main.c:144-165). ES-DE runs it as \"prboom-plus -iwad <file>\",\nso the IWAD is content, not a system file.\n\nprboom-plus.wad holds the engine's own lumps: the palette, the water\ncolormap, the sine, tangent and gamma tables, the HUD layouts, the status\nbar digits, the crosshairs, the dog and plasma sprites, the GLSL shader\nsources, and the DEHACKED patches applied to Chex Quest, the BFG Edition\nand NERVE.WAD. M_LoadDefaults installs it as wad_files[0] and aborts with\n\"PrBoom-Plus.wad not found. Can't continue.\" when I_FindFile returns\nnothing (prboom2/src/m_misc.c:1723-1724). It loads even under -noload, which caps the\nautoload loop at that one entry (prboom2/src/d_main.c:1877-1879). Lumps coming from it\nare tagged LUMP_PRBOOM so a PWAD can override them (prboom2/src/w_wad.c:185-196).\n\nThe tree ships the inputs, not the file: data/CMakeLists.txt builds it with\nthe rdatawad tool from the raw palette, lumps, PPM graphics and WAV sounds\nunder data/, then installs it into PRBOOMDATADIR, which is\n<prefix>/share/prboom-plus (CMakeLists.txt:188-189, data/CMakeLists.txt:370).\n\nI_FindFile searches, in order: the config directory, the working directory,\nPRBOOMDATADIR, $DOOMWADDIR, the build-time DOOMWADDIR, $HOME/doom, $HOME,\n/usr/local/share/games/doom, /usr/share/games/doom, /usr/local/share/doom,\n/usr/share/doom, then every entry of $DOOMWADPATH (SDL/i_system.c:437-449,\n471-505). The working directory entry carries no prefix, so an absolute\nname resolves on that pass. Existence is the only test, and the requested\nextension is appended only when the name as written is missing\n(SDL/i_system.c:532-538). The config directory is the directory holding the\nbinary on Windows (SDL/i_system.c:289-311), and ~/.prboom-plus or the\nXDG path from SDL_GetPrefPath elsewhere (SDL/i_system.c:347-383). The macOS\nbuild replaces the list with ~/Library/Application Support/PrBoom-Plus, the\nbundle resource path, and the bare name (MAC/i_system.m:57-59, 117-142).\n\nsnd_midiplayer picks the MIDI backend and defaults to fluidsynth on Windows,\nsdl elsewhere (prboom2/src/m_misc.c:444-450). Only the sdl value leaves\nuse_experimental_music clear and routes MIDI through SDL_mixer\n(SDL/i_sound.c:1662-1668, 1221-1225); every other value brings up the\nin-tree players. Their init results are recorded once at startup\n(SDL/i_sound.c:1383-1384) and consulted per song, a player that failed to\ninit being logged and passed over for the next entry of music_player_order\n(SDL/i_sound.c:1511-1538). fluidsynth is the only one reading an external\nfile. The OPL2 player that follows it takes its instruments from the IWAD\nGENMIDI lump (MUSIC/oplplayer.c:337-354).\n", "profiled_date": "2026-08-08", "source": "https://github.com/coelckers/prboom-plus", "source_commit": "969515162c5aebea4ad7a125ee178dcad3d576ad", "systems": ["doom"], "type": "standalone", "upstream": "https://github.com/coelckers/prboom-plus"}


id: primehack
name: PrimeHack
type: standalone
classification: enhanced_fork
source: https://github.com/shiiion/dolphin
upstream: https://github.com/dolphin-emu/dolphin
source_commit: 5e7cc91d8c9a43ca189b288937f65c9763af9c22
profile_json:
{"analysis_commit": "b10f147 (depth=1)", "analysis_date": "2026-03-26", "core_classification": "enhanced_fork", "core_version": "1.0.8", "cores": ["primehack"], "data_directories": [{"destination": "Sys", "ref": "dolphin-sys", "source_ref": "Source/Core/Common/CommonPaths.h:128-141"}], "display_name": "PrimeHack (Dolphin fork for Metroid Prime)", "emulator": "PrimeHack", "files": [{"hle_fallback": true, "mode": "standalone", "name": "IPL.bin", "note": "GameCube NTSC-U boot ROM. HLE available but real IPL needed for GC menu boot and accurate fonts", "path": "GC/USA/IPL.bin", "region": ["north-america"], "required": false, "size": 2097152, "source_ref": "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:109-110"}, {"hle_fallback": true, "mode": "standalone", "name": "IPL.bin", "note": "GameCube PAL boot ROM", "path": "GC/EUR/IPL.bin", "region": ["europe"], "required": false, "size": 2097152, "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:184"}, {"hle_fallback": true, "mode": "standalone", "name": "IPL.bin", "note": "GameCube NTSC-J boot ROM. JAP is the legacy directory name", "path": "GC/JAP/IPL.bin", "region": ["japan"], "required": false, "size": 2097152, "source_ref": "Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:186"}, {"adler32_byteswap": true, "hle_fallback": true, "known_hash_adler32": "0x66f334fe", "mode": "standalone", "name": "dsp_rom.bin", "note": "DSP instruction ROM for LLE audio. Free replacement (v0.4) included", "path": "GC/dsp_rom.bin", "required": false, "size": 8192, "source_ref": "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/DSPLLE/DSPLLE.cpp:87-117", "validation": ["size"]}, {"adler32_byteswap": true, "hle_fallback": true, "known_hash_adler32": "0xf3b93527", "mode": "standalone", "name": "dsp_coef.bin", "note": "DSP coefficient ROM for LLE audio. Free replacement included", "path": "GC/dsp_coef.bin", "required": false, "size": 4096, "source_ref": "Source/Core/Common/CommonPaths.h:138, Source/Core/Core/DSP/DSPCore.cpp:32-38", "validation": ["size"]}, {"hle_fallback": true, "mode": "standalone", "name": "font_western.bin", "note": "Windows-1252 font for GC/Wii text rendering. Free alternative bundled, real one from IPL dump preferred", "path": "GC/font_western.bin", "required": false, "size": 9589, "source_ref": "Source/Core/Common/CommonPaths.h:132, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:131,203-218"}, {"hle_fallback": true, "mode": "standalone", "name": "font_japanese.bin", "note": "Shift-JIS font for Japanese text. Free alternative bundled, real one from IPL dump preferred", "path": "GC/font_japanese.bin", "required": false, "size": 303693, "source_ref": "Source/Core/Common/CommonPaths.h:135, Source/Core/Core/HW/EXI/EXI_DeviceIPL.cpp:130"}, {"hle_fallback": true, "mode": "standalone", "name": "gba_bios.bin", "note": "GBA BIOS for GC-GBA link feature (uses integrated mGBA). Path configurable in settings", "path": "GBA/gba_bios.bin", "required": false, "source_ref": "Source/Core/Common/CommonPaths.h:144, Source/Core/Core/HW/GBACore.cpp:344-361"}, {"hle_fallback": true, "mode": "standalone", "name": "SYSCONF", "note": "Wii system configuration. Auto-generated by PrimeHack, can be imported from NAND backup", "path": "Wii/shared2/sys/SYSCONF", "required": false, "source_ref": "Source/Core/Common/CommonPaths.h:118, Source/Core/Core/WiiRoot.cpp:266"}, {"hle_fallback": true, "mode": "standalone", "name": "setting.txt", "note": "Wii region/language settings. Auto-generated during Wii boot emulation", "path": "Wii/title/00000001/00000002/data/setting.txt", "required": false, "size": 256, "source_ref": "Source/Core/Common/CommonPaths.h:152, Source/Core/Core/Boot/Boot_BS2Emu.cpp:377-454"}, {"hle_fallback": true, "mode": "standalone", "name": "nand.bin", "note": "BootMii NAND backup. Can be imported to populate Wii NAND with channels, saves, system menu", "path": null, "required": false, "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:26-89"}, {"hle_fallback": true, "mode": "standalone", "name": "keys.bin", "note": "OTP/SEEPROM dump (Wii encryption keys). Needed if not appended to nand.bin for NAND import", "path": null, "required": false, "size": 1024, "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:19,76-88"}, {"hle_fallback": true, "mode": "standalone", "name": "WiiSD.raw", "note": "Virtual SD card image for Wii homebrew. Auto-created, supports SD/SDHC up to 4GB", "path": "Load/WiiSD.raw", "required": false, "source_ref": "Source/Core/Common/CommonPaths.h:149"}, {"hle_fallback": true, "mode": "standalone", "name": "codehandler.bin", "note": "Gecko/Ocarina cheat code handler. Shipped with PrimeHack in Sys/", "path": null, "required": false, "source_ref": "Source/Core/Common/CommonPaths.h:154, Source/Core/Core/GeckoCode.cpp:121"}, {"hle_fallback": true, "mode": "standalone", "name": "Wii System Menu", "note": "Wii System Menu WAD. Installed to NAND via Tools > Install WAD, needed for Wii Menu boot", "path": null, "required": false, "source_ref": "Source/Core/DolphinQt/MenuBar.cpp:331, Source/Core/DolphinQt/MenuBar.cpp:1461-1469"}, {"hle_fallback": true, "mode": "standalone", "name": "clientca.pem", "note": "SSL client certificate. Auto-extracted from IOS13 content during NAND import", "path": "Wii/clientca.pem", "required": false, "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:201-285"}, {"hle_fallback": true, "mode": "standalone", "name": "clientcakey.pem", "note": "SSL client private key. Auto-extracted from IOS13 content during NAND import", "path": "Wii/clientcakey.pem", "required": false, "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:237"}, {"hle_fallback": true, "mode": "standalone", "name": "rootca.pem", "note": "SSL root CA certificate. Auto-extracted from IOS13 content during NAND import", "path": "Wii/rootca.pem", "required": false, "source_ref": "Source/Core/DiscIO/NANDImporter.cpp:238"}, {"mode": "standalone", "name": "rtl8723a_fw.bin", "note": "Realtek 8723A BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8723a_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:379"}, {"mode": "standalone", "name": "rtl8723b_fw.bin", "note": "Realtek 8723B BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8723b_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:516-519"}, {"mode": "standalone", "name": "rtl8723d_fw.bin", "note": "Realtek 8723D BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8723d_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:383"}, {"mode": "standalone", "name": "rtl8761a_fw.bin", "note": "Realtek 8761A BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8761a_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:385"}, {"mode": "standalone", "name": "rtl8761bu_fw.bin", "note": "Realtek 8761BU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8761bu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:387"}, {"mode": "standalone", "name": "rtl8821a_fw.bin", "note": "Realtek 8821A BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8821a_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:389"}, {"mode": "standalone", "name": "rtl8821c_fw.bin", "note": "Realtek 8821C BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8821c_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:391"}, {"mode": "standalone", "name": "rtl8822b_fw.bin", "note": "Realtek 8822B BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8822b_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:395"}, {"mode": "standalone", "name": "rtl8822cu_fw.bin", "note": "Realtek 8822CU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8822cu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:393"}, {"mode": "standalone", "name": "rtl8851bu_fw.bin", "note": "Realtek 8851BU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8851bu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:397"}, {"mode": "standalone", "name": "rtl8852au_fw.bin", "note": "Realtek 8852AU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8852au_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:399"}, {"mode": "standalone", "name": "rtl8852bu_fw.bin", "note": "Realtek 8852BU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8852bu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:401"}, {"mode": "standalone", "name": "rtl8852cu_fw.bin", "note": "Realtek 8852CU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8852cu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:403"}, {"mode": "standalone", "name": "rtl8852btu_fw.bin", "note": "Realtek 8852BT/8852BE-VT BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8852btu_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:405"}, {"mode": "standalone", "name": "rtl8922au_fw.bin", "note": "Realtek 8922AU BT firmware for Wiimote passthrough", "path": "Load/Firmware/rtl_bt/rtl8922au_fw.bin", "required": false, "source_ref": "Source/Core/Core/IOS/USB/Bluetooth/RealtekFirmwareLoader.cpp:407"}], "mode": "standalone", "notes": {"bt_passthrough_note": "Bluetooth passthrough allows connecting real Wiimotes via USB Bluetooth adapters. Realtek chipsets require firmware files in Load/Firmware/rtl_bt/. PrimeHack can auto-download these from kernel-firmware/linux-firmware on GitLab.\n", "dsp_rom_note": "DSP ROMs are verified at load time via Adler32 hash. Official Nintendo hashes: irom=0x66f334fe, drom=0xf3b93527.\n", "hle_available": true, "hle_note": "PrimeHack provides HLE for GameCube IPL (boot ROM), DSP, and Wii system functions (same as Dolphin). No BIOS files are strictly required for most games.\n", "ipl_regions": ["USA", "EUR", "JAP", "JPN", "DEV"]}, "pack_structure": {"standalone": ""}, "profiled_date": "2026-03-26", "source": "https://github.com/shiiion/dolphin", "source_commit": "5e7cc91d8c9a43ca189b288937f65c9763af9c22", "systems": ["nintendo-gamecube", "nintendo-wii"], "type": "standalone", "upstream": "https://github.com/dolphin-emu/dolphin"}


id: project64
name: project64
type: standalone
classification: other
source: https://github.com/project64/project64
upstream: https://github.com/project64/project64
source_commit: 6188e9a88dd2e7487df346fecc445716654e18ec
profile_json:
{"core_classification": "other", "core_version": "Dev-4.0.0", "cores": ["project64"], "display_name": "Nintendo - Nintendo 64 (Project64)", "emulator": "project64", "files": [{"aliases": ["64DD_IPL.bin", "64DD_IPL_JP.n64", "64dd_ipl_J.bin"], "description": "64DD IPL ROM (Japanese retail)", "name": "64DD_IPL_v12_JPN.bin", "note": "Loaded when the disk image reports Country_Japan. The path is the free text Disk IPL ROM Path setting, typed or pasted into a plain edit box, so the code fixes no filename and no directory. SelectAndLoadFileImageIPL tests that the path exists, warns and returns false if not, and the disk never starts. The file is accepted on two content checks and nothing else: the first word must be one of the four image magics, 0x40072780 being the 64DD one, and the boot block sum must be 0xD2E53EF008. Size is not checked and no file hash is computed.\n", "region": ["japan"], "required": true, "source_ref": "Source/Project64-core/Settings.cpp:316, Source/Project64-core/N64System/N64System.cpp:577,599,649-652,673-677,690-704, Source/Project64-core/N64System/N64Rom.cpp:303,479-498,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:13,18,47,140", "system": "nintendo-64dd", "validation": ["signature"]}, {"aliases": ["64DD_IPL_US.n64", "64dd_ipl_U.bin"], "description": "64DD IPL ROM (American retail)", "name": "64DD_IPL_USA.bin", "note": "Loaded when the disk image reports Country_NorthAmerica, from the Disk IPL USA ROM Path setting. Same acceptance path as the Japanese image, matched on boot block sum 0xD2E53E5DDA. The chip differs from the Japanese one, and CalculateRomCrc carries a separate seed and a 0xA0000 length for it.\n", "region": ["north-america"], "required": true, "source_ref": "Source/Project64-core/Settings.cpp:317, Source/Project64-core/N64System/N64System.cpp:653-656,673-677, Source/Project64-core/N64System/N64Rom.cpp:305,369-372,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:14,19,56,142", "system": "nintendo-64dd", "validation": ["signature"]}, {"aliases": ["64DD_IPL_DEV.n64", "64dd_ipl_DEV.bin"], "description": "64DD IPL ROM (development)", "name": "64DD_IPL_DEV.bin", "note": "Loaded from the Development 64DD IPL ROM Path setting for disks whose country byte is unknown, which is what development and prototype disks carry. Matched on boot block sum 0xD2E53EF39F. When a cartridge and a disk are launched together and this path is empty, the loader falls back to the Japanese image and then to the American one, so the development image is only unavoidable for a development disk on its own.\n", "required": true, "source_ref": "Source/Project64-core/Settings.cpp:318, Source/Project64-core/N64System/N64System.cpp:657-670,673-677, Source/Project64-core/N64System/N64Rom.cpp:304,377-380,500-511, Source/Project64/UserInterface/Settings/SettingsPage-DiskDrive.cpp:15,20,65,144", "system": "nintendo-64dd", "validation": ["signature"]}, {"bundled": true, "description": "ROM settings database", "name": "Project64.rdb", "note": "Sections keyed by the ROM identifier CRC1-CRC2-C:country. Backs the whole Rdb_ setting family, among them RDRAM size, counter factor, save chip, VI refresh rate, disk seek timing and the overclock modifier, so it decides how the machine is configured per game. It also carries the microcode identifier table. Absent, every lookup falls through to the Defaults section and the ROM browser lists no known titles.\n", "path": "Config/Project64.rdb", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:87-88,134-145,151-188, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:63,117, Source/Project64-core/RomList/RomList.cpp:47,52,58-61, Source/Project64-core/N64System/N64Rom.cpp:722,914", "system": "nintendo-64"}, {"bundled": true, "description": "Per game video plugin settings", "name": "Video.rdb", "note": "Second ini opened by the ROM database setting type, keyed on the same ROM identifier, holding the microcode CRCs the ucode detector matches and the per game video overrides. Without it the plugin asks the user to add an unknown microcode CRC.\n", "path": "Config/Video.rdb", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:89-90, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:64,118", "system": "nintendo-64"}, {"bundled": true, "description": "Per game audio plugin settings", "name": "Audio.rdb", "note": "Third ini opened by the ROM database setting type, same key, carrying the per game audio overrides such as FPSBuffer, Fixed Audio and Sync Audio.\n", "path": "Config/Audio.rdb", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:91-92, Source/Project64-core/Settings/SettingType/SettingsType-RomDatabase.cpp:65,119", "system": "nintendo-64"}, {"bundled": true, "description": "ROM database extension", "name": "Project64.rdx", "note": "Extended per game information the ROM browser shows, loaded into the romlist as m_ExtIniFile alongside the ROM database itself. Absent, the browser columns it feeds stay empty.\n", "path": "Config/Project64.rdx", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:103-104, Source/Project64-core/RomList/RomList.cpp:46,51", "system": "nintendo-64"}, {"bundled": true, "description": "Shipped cheat database", "name": "Config/Cheats/*.cht", "note": "Directory scanned for that pattern, one file per game, sections keyed on the ROM identifier and holding the GameShark style codes. The user directory Config/Cheats-User is scanned straight after and is where the UI writes. 671 files ship in the installer.\n", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:93-96, Source/Project64-core/N64System/Enhancement/Enhancements.cpp:629,647, Source/Installer/Installer.iss:29", "system": "nintendo-64"}, {"bundled": true, "description": "Shipped enhancement database", "name": "Config/Enhancements/*.enh", "note": "Directory scanned for that pattern, same per game keying as the cheat files, holding the patches offered under Enhancements such as widescreen hacks. The user directory Config/Enhancements-User is scanned straight after. 115 files ship in the installer.\n", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:97-100, Source/Project64-core/N64System/Enhancement/Enhancements.cpp:665,684, Source/Installer/Installer.iss:30", "system": "nintendo-64"}, {"bundled": true, "description": "Interface translations", "name": "Lang/*.pj.Lang", "note": "Directory scanned for that pattern, each file naming its language in a header string. English is compiled in through the DEF_STR table, so an empty directory leaves the interface in English.\n", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:127-128, Source/Project64-core/Multilanguage/Language.cpp:9-571,656-673, Source/Installer/Installer.iss:33", "system": "nintendo-64"}, {"bundled": true, "description": "Jabo's Direct3D8 video plugin", "name": "Jabo_Direct3D8.dll", "note": "Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager. No source for it exists in the tree, so a build from source cannot produce it. Project64-Video is the default graphics plugin, so it is only selected when the user picks it.\n", "path": "Plugin/GFX/Jabo_Direct3D8.dll", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:383, Source/Installer/Installer.iss:36, Source/Script/package_zip.cmd:60", "system": "nintendo-64"}, {"bundled": true, "description": "Jabo's DirectSound audio plugin", "name": "Jabo_Dsound.dll", "note": "Committed as a prebuilt binary under Plugin/Win32 and copied by both the installer and the nightly packager, with no source in the tree. Project64-Audio is the default audio plugin.\n", "path": "Plugin/Audio/Jabo_Dsound.dll", "required": false, "source_ref": "Source/Project64-core/Settings.cpp:385, Source/Installer/Installer.iss:34, Source/Script/package_zip.cmd:58", "system": "nintendo-64"}], "mode": "standalone", "notes": "Nintendo 64 and 64DD emulator for Windows. Project64.exe plus the plugin DLLs\nthe same solution builds, driven by the plugin spec in Source/Project64-plugin-spec.\nES-DE passes the ROM as the only argument. AppVeyor builds Win32 and x64 only;\nSource/Android holds no build file.\n\nCartridge boot reads no file. PostPif is hardcoded true, so Reset seeds the\ngeneral purpose registers from the CIC identified in the ROM image, points the\nprogram counter at 0xA4000040 and the boot block is copied into SP DMEM. The\nbranch that would start at the PIF ROM address is unreachable and the PIF ROM\nread in the memory handler is commented out, so neither a PIF ROM nor a CIC ROM\nis opened (Source/Project64-core/N64System/N64System.cpp:911-916,\nSource/Project64-core/N64System/Mips/Register.cpp:342,371-373,395-535,\nSource/Project64-core/N64System/MemoryHandler/PifRamHandler.cpp:26).\n\nThe CIC is identified from the boot block. ByteSwapRom normalises the image so\neach 32-bit read yields the ROM's big-endian word, then GetCicChipID sums those\nwords from 0x40 to 0x1000 and matches the total against a table of constants.\nThree of them are 64DD IPL images: 0xD2E53EF008 for the Japanese retail chip\n8303, 0xD2E53E5DDA for the American retail chip 8501, 0xD2E53EF39F for the\ndevelopment chip 8401. IsLoadedRomDDIPL is that test\n(Source/Project64-core/N64System/N64Rom.cpp:240-273,281-305,500-511).\n\nAleck64 images are recognised by the same table, through a second sum taken at\n0xC00, and get their own boot register seed. No arcade hardware is emulated and\nno Aleck64 file is opened\n(Source/Project64-core/N64System/N64Rom.cpp:283,310-316,\nSource/Project64-core/N64System/Mips/Register.cpp:477-479).\n\nTransfer Pak reads a Game Boy cartridge image and its save from paths the user\nsets per game. Both are the user's own cartridge dump, and no Game Boy boot ROM\nis involved (Source/Project64-core/N64System/Mips/GBCart.cpp:695-698,744,788,\nSource/Project64-core/Settings.cpp:242-243).\n\nThe support files under Config ship in the installer and in the nightly package.\nCIniFile returns silently when the path does not exist, so each of them degrades\nto the defaults registered in AddHandler rather than failing\n(Source/Common/IniFile.cpp:493-522, Source/Project64-core/Settings.cpp:134-145).\n\nGLideN64 ships as a bundled plugin, pinned as a submodule at\ngonetz/GLideN64 c8ef81c7d9aede9f67f6ed3d3426c90541f9f13e, and brings its own\nGLideN64.ini, GLideN64.custom.ini and translations. Project64's own code names\nnone of them; only Installer.iss and package_zip.cmd copy them\n(Source/Installer/Installer.iss:38, Source/Script/package_zip.cmd:42-47).\n\nGenerated at runtime, never supplied: Project64.cfg, Project64.rdn,\nProject64.cache3, Project64.zcache, Config/Cheats-User, Config/Enhancements-User,\nSave, Screenshots, Logs and the texture caches.\n", "profiled_date": "2026-08-12", "source": "https://github.com/project64/project64", "source_commit": "6188e9a88dd2e7487df346fecc445716654e18ec", "systems": ["nintendo-64", "nintendo-64dd"], "type": "standalone", "upstream": "https://github.com/project64/project64"}


id: prosystem
name: ProSystem
type: libretro
classification: community_fork
source: https://github.com/libretro/prosystem-libretro
upstream: https://github.com/gstanton/ProSystem1_3
source_commit: 363b6dfbd3e240762e022c2b4897b4fe55722be3
profile_json:
{"core_classification": "community_fork", "core_version": "1.3e", "cores": ["prosystem"], "display_name": "Atari - 7800 (ProSystem)", "emulator": "ProSystem", "files": [{"description": "NTSC/US BIOS, loaded when cartridge_region != REGION_PAL", "hle_fallback": true, "name": "7800 BIOS (U).rom", "region": ["north-america"], "required": false, "size": 4096, "source_ref": "core/libretro.c:585", "system": "atari-7800"}, {"description": "PAL/EU BIOS, loaded when cartridge_region == REGION_PAL", "hle_fallback": true, "name": "7800 BIOS (E).rom", "region": ["europe"], "required": false, "size": 16384, "source_ref": "core/libretro.c:583", "system": "atari-7800"}], "notes": "Atari 7800 emulator by Greg Stanton, ported to libretro by community\ncontributors. The upstream is a Windows-only application with a single\nuser-configured BIOS path. The libretro port adds automatic region-based\nBIOS selection: PAL carts get (E), everything else gets (U).\n\nRegion is read from cartridge header byte 57 (core/Cartridge.c:214) or\noverridden by the internal database (core/Database.c:1739-1757).\n\nBoth BIOS files are optional. The core runs without them but some titles\nhave compatibility issues (startup encryption check). bios_Store() maps\nthe BIOS into ROM at address (65536 - bios_size).\n\nNo core option controls BIOS loading. If the file exists in the system\ndirectory, it is loaded automatically. No hash or size validation is\nperformed on the BIOS file.\n\nThe .info declares firmware_count=1 (U only), missing the PAL BIOS.\n", "profiled_date": "2026-03-24", "source": "https://github.com/libretro/prosystem-libretro", "source_commit": "363b6dfbd3e240762e022c2b4897b4fe55722be3", "systems": ["atari-7800"], "type": "libretro", "upstream": "https://github.com/gstanton/ProSystem1_3"}


id: puae
name: PUAE (P-UAE)
type: libretro
classification: community_fork
source: https://github.com/libretro/libretro-uae
upstream: https://github.com/GnoStiC/PUAE
source_commit: 96ebfcfc2c66233ad37f6dc99ee991211dc719ad
profile_json:
{"core_classification": "community_fork", "core_version": "5.3.1", "cores": ["puae", "uae"], "display_name": "Commodore - Amiga (PUAE)", "emulator": "PUAE (P-UAE)", "files": [{"aliases": ["amiga-os-110-ntsc.rom", "Kickstart v1.1 rev 31.34 (1985)(Commodore)(A1000)(NTSC).rom"], "hle_fallback": true, "name": "kick31034.A1000", "note": "Kickstart 1.1 rev 31.34 (1985) NTSC. A1000 only.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:170-174", "system": "commodore-amiga"}, {"aliases": ["amiga-os-110-pal.rom", "Kickstart v1.1 rev 32.34 (1986)(Commodore)(A1000)(PAL).rom"], "hle_fallback": true, "name": "kick32034.A1000", "note": "Kickstart 1.1 rev 32.34 (1986) PAL. A1000 only.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:176-179", "system": "commodore-amiga"}, {"aliases": ["amiga-os-120.rom", "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom", "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom"], "hle_fallback": true, "name": "kick33180.A500", "note": "Kickstart 1.2 rev 33.180 (1986). A500/A2000. Also used by WHDLoad.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:182-185", "system": "commodore-amiga"}, {"aliases": ["amiga-os-130.rom", "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom", "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom"], "name": "kick34005.A500", "note": "Kickstart 1.3 rev 34.5 (1987). Default for A500/A2000OG/CDTV models. Also used by WHDLoad.", "required": true, "size": 262144, "source_ref": "libretro/libretro-core.h:187-190", "system": "commodore-amiga"}, {"aliases": ["amiga-os-204.rom", "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom", "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom"], "hle_fallback": true, "name": "kick37175.A500", "note": "Kickstart 2.04 rev 37.175 (1991). Default for A500+ model.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:192-195", "system": "commodore-amiga"}, {"aliases": ["amiga-os-205-a600.rom", "Kickstart v2.05 rev 37.350 (1992)(Commodore)(A600HD)[!].rom"], "hle_fallback": true, "name": "kick37350.A600", "note": "Kickstart 2.05 rev 37.350 (1992). A600HD.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:198-201", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a600.rom", "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom", "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom"], "hle_fallback": true, "name": "kick40063.A600", "note": "Kickstart 3.1 rev 40.63 (1993). Default for A600/A2000 models. Also used by WHDLoad.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:203-206", "system": "commodore-amiga"}, {"aliases": ["amiga-os-300-a1200.rom", "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom"], "hle_fallback": true, "name": "kick39106.A1200", "note": "Kickstart 3.0 rev 39.106 (1992). A1200.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:209-212", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a1200.rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom"], "name": "kick40068.A1200", "note": "Kickstart 3.1 rev 40.68 (1993). Default for A1200/A1200OG models. Also used by WHDLoad.", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:214-217", "system": "commodore-amiga"}, {"aliases": ["amiga-os-300-a4000.rom", "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A4000)[!].rom"], "hle_fallback": true, "name": "kick39106.A4000", "note": "Kickstart 3.0 rev 39.106 (1992). A4000.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:220-223", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a4000.rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom"], "hle_fallback": true, "name": "kick40068.A4000", "note": "Kickstart 3.1 rev 40.68 (1993). Default for A4030/A4040 models.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:225-228", "system": "commodore-amiga"}, {"aliases": ["amiga-os-130-cdtv-ext.rom", "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom", "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom"], "name": "kick34005.CDTV", "note": "CDTV Extended ROM v1.0 (1991). Required as extended ROM for CDTV model. Main kickstart is kick34005.A500.", "required": true, "size": 262144, "source_ref": "libretro/libretro-core.h:231-234", "system": "commodore-cdtv"}, {"aliases": ["amiga-os-310-cd32.rom", "Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom"], "name": "kick40060.CD32", "note": "CD32 Kickstart 3.1 rev 40.60 (1993). Main ROM for CD32 and CD32FR models.", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:236-239", "system": "commodore-amiga-cd32"}, {"aliases": ["amiga-os-310-cd32-ext.rom", "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"], "name": "kick40060.CD32.ext", "note": "CD32 Extended ROM rev 40.60 (1993). Required when main ROM is <= 512 KB (not combined).", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:241-244", "system": "commodore-amiga-cd32"}, {"name": "rom.key", "note": "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad.", "required": false, "source_ref": "libretro/libretro-core.c:5967-5978", "system": "commodore-amiga"}, {"name": "WHDLoad.key", "note": "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use.", "required": false, "source_ref": "libretro/libretro-core.c:5983-5996", "system": "commodore-amiga", "unsourceable": "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"}, {"name": "WHDLoad.prefs", "note": "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present.", "required": false, "source_ref": "libretro/libretro-core.c:6000-6023", "system": "commodore-amiga"}], "model_kickstart_map": {"A1200": {"ext": null, "kickstart": "kick40068.A1200"}, "A1200OG": {"ext": null, "kickstart": "kick40068.A1200"}, "A2000": {"ext": null, "kickstart": "kick40063.A600"}, "A2000OG": {"ext": null, "kickstart": "kick34005.A500"}, "A4030": {"ext": null, "kickstart": "kick40068.A4000"}, "A4040": {"ext": null, "kickstart": "kick40068.A4000"}, "A500": {"ext": null, "kickstart": "kick34005.A500"}, "A500OG": {"ext": null, "kickstart": "kick34005.A500"}, "A500PLUS": {"ext": null, "kickstart": "kick37175.A500"}, "A600": {"ext": null, "kickstart": "kick40063.A600"}, "CD32": {"ext": "kick40060.CD32.ext", "kickstart": "kick40060.CD32"}, "CD32FR": {"ext": "kick40060.CD32.ext", "kickstart": "kick40060.CD32"}, "CDTV": {"ext": "kick34005.CDTV", "kickstart": "kick34005.A500"}}, "notes": "PUAE is a port of UAE (Unix Amiga Emulator) to libretro. It emulates the\nAmiga 500, 500+, 600, 1200, 2000, 4000, CD32, and CDTV. Kickstart ROMs\nare loaded from the RetroArch system directory.\n\nAROS (open-source Kickstart replacement) is available as a built-in fallback\nwhen no Kickstart ROM is found. Compatibility is limited compared to real ROMs.\n\nThe core scans the system directory for files starting with \"kick\", \"amiga-os\",\nor \"KS ROM\". Each filename is matched against a table of known naming\nconventions: standard (kick*.A*), Amiga Forever (amiga-os-*.rom), and\nTOSEC (Kickstart v*.rom). The first valid match is used.\n\nDefault kickstart per model (automatic selection):\n  A500, A500OG, A2000OG, CDTV -> kick34005.A500 (KS 1.3)\n  A500+                        -> kick37175.A500 (KS 2.04)\n  A600                         -> kick40063.A600 (KS 3.1)\n  A1200, A1200OG               -> kick40068.A1200 (KS 3.1)\n  A2000                        -> kick40063.A600 (KS 3.1)\n  A4030, A4040                 -> kick40068.A4000 (KS 3.1)\n  CD32, CD32FR                 -> kick40060.CD32 (KS 3.1)\n  CDTV (ext)                   -> kick34005.CDTV\n  CD32 (ext)                   -> kick40060.CD32.ext\n\nExtended ROM handling: CD32 and CDTV require an extended ROM in addition\nto the main kickstart. If the main ROM filesize is <= 512 KB, the extended\nROM is loaded separately. Combined ROMs (main + ext in one file) skip the\nextended ROM search.\n\nWHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,\nkick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad\nslave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key\n(license) from the system directory.\n\nROM search order (libretro-core.c retro_config_kickstart):\n  1. Exact filename in system directory\n  2. Amiga Forever naming (amiga-os-*.rom)\n  3. TOSEC modified naming (with [!] suffix)\n  4. TOSEC naming (without [!] suffix)\n\ncapsimg.so/capsimg.dll is an optional shared library for IPF floppy image\nsupport (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.\n\nSource: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5610-5750,\nlibretro/libretro-core.c:6044-6093\n", "platform_details": {"aros_fallback": true, "naming_conventions": {"amiga_forever": "amiga-os-{version}.rom", "standard": "kick{rev}.{model}", "tosec": "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"}, "rom_sizes": {"ROM_SIZE_128": 131072, "ROM_SIZE_256": 262144, "ROM_SIZE_512": 524288}, "scan_prefixes": ["kick", "amiga-os", "KS ROM"], "source_ref": "libretro/libretro-core.c:2649-2676"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-uae", "source_commit": "96ebfcfc2c66233ad37f6dc99ee991211dc719ad", "systems": ["commodore-amiga", "commodore-amiga-cd32", "commodore-cdtv"], "type": "libretro", "upstream": "https://github.com/GnoStiC/PUAE", "whdload_kickstarts": ["kick33180.A500", "kick34005.A500", "kick40063.A600", "kick40068.A1200"]}


id: puae2021
name: PUAE 2021
type: libretro
classification: frozen_snapshot
source: https://github.com/libretro/libretro-uae/tree/2.6.1
upstream: https://github.com/GnoStiC/PUAE
source_commit: 96ebfcfc2c66233ad37f6dc99ee991211dc719ad
profile_json:
{"core_classification": "frozen_snapshot", "core_version": "2.6.1", "cores": ["puae2021"], "display_name": "Commodore - Amiga (PUAE 2021)", "emulator": "PUAE 2021", "files": [{"aliases": ["amiga-os-110-ntsc.rom", "Kickstart v1.1 rev 31.34 (1985)(Commodore)(A1000)(NTSC).rom"], "hle_fallback": true, "name": "kick31034.A1000", "note": "Kickstart 1.1 rev 31.34 (1985) NTSC. A1000 only.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:170-174", "system": "commodore-amiga"}, {"aliases": ["amiga-os-110-pal.rom", "Kickstart v1.1 rev 32.34 (1986)(Commodore)(A1000)(PAL).rom"], "hle_fallback": true, "name": "kick32034.A1000", "note": "Kickstart 1.1 rev 32.34 (1986) PAL. A1000 only.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:176-179", "system": "commodore-amiga"}, {"aliases": ["amiga-os-120.rom", "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A2000)[!].rom", "Kickstart v1.2 rev 33.180 (1986)(Commodore)(A500-A1000-A2000).rom"], "hle_fallback": true, "name": "kick33180.A500", "note": "Kickstart 1.2 rev 33.180 (1986). A500/A2000. Also used by WHDLoad.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:182-185", "system": "commodore-amiga"}, {"aliases": ["amiga-os-130.rom", "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV)[!].rom", "Kickstart v1.3 rev 34.5 (1987)(Commodore)(A500-A1000-A2000-CDTV).rom"], "name": "kick34005.A500", "note": "Kickstart 1.3 rev 34.5 (1987). Default for A500/A2000OG/CDTV models. Also used by WHDLoad.", "required": true, "size": 262144, "source_ref": "libretro/libretro-core.h:187-190", "system": "commodore-amiga"}, {"aliases": ["amiga-os-204.rom", "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+)[!].rom", "Kickstart v2.04 rev 37.175 (1991)(Commodore)(A500+).rom"], "hle_fallback": true, "name": "kick37175.A500", "note": "Kickstart 2.04 rev 37.175 (1991). Default for A500+ model.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:192-195", "system": "commodore-amiga"}, {"aliases": ["amiga-os-205-a600.rom", "Kickstart v2.05 rev 37.350 (1992)(Commodore)(A600HD)[!].rom"], "hle_fallback": true, "name": "kick37350.A600", "note": "Kickstart 2.05 rev 37.350 (1992). A600HD.", "required": false, "size": 262144, "source_ref": "libretro/libretro-core.h:198-201", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a600.rom", "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000)[!].rom", "Kickstart v3.1 rev 40.63 (1993)(Commodore)(A500-A600-A2000).rom"], "hle_fallback": true, "name": "kick40063.A600", "note": "Kickstart 3.1 rev 40.63 (1993). Default for A600/A2000 models. Also used by WHDLoad.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:203-206", "system": "commodore-amiga"}, {"aliases": ["amiga-os-300-a1200.rom", "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A1200)[!].rom"], "hle_fallback": true, "name": "kick39106.A1200", "note": "Kickstart 3.0 rev 39.106 (1992). A1200.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:209-212", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a1200.rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200)[!].rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A1200).rom"], "name": "kick40068.A1200", "note": "Kickstart 3.1 rev 40.68 (1993). Default for A1200/A1200OG models. Also used by WHDLoad.", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:214-217", "system": "commodore-amiga"}, {"aliases": ["amiga-os-300-a4000.rom", "Kickstart v3.0 rev 39.106 (1992)(Commodore)(A4000)[!].rom"], "hle_fallback": true, "name": "kick39106.A4000", "note": "Kickstart 3.0 rev 39.106 (1992). A4000.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:220-223", "system": "commodore-amiga"}, {"aliases": ["amiga-os-310-a4000.rom", "Kickstart v3.1 rev 40.68 (1993)(Commodore)(A4000).rom"], "hle_fallback": true, "name": "kick40068.A4000", "note": "Kickstart 3.1 rev 40.68 (1993). Default for A4030/A4040 models.", "required": false, "size": 524288, "source_ref": "libretro/libretro-core.h:225-228", "system": "commodore-amiga"}, {"aliases": ["amiga-os-130-cdtv-ext.rom", "CDTV Extended-ROM v1.0 (1991)(Commodore)(CDTV)[!].rom", "CDTV Extended-ROM v1.0 (1992)(Commodore)(CDTV).rom"], "name": "kick34005.CDTV", "note": "CDTV Extended ROM v1.0 (1991). Required as extended ROM for CDTV model. Main kickstart is kick34005.A500.", "required": true, "size": 262144, "source_ref": "libretro/libretro-core.h:231-234", "system": "commodore-cdtv"}, {"aliases": ["amiga-os-310-cd32.rom", "Kickstart v3.1 rev 40.60 (1993)(Commodore)(CD32).rom"], "name": "kick40060.CD32", "note": "CD32 Kickstart 3.1 rev 40.60 (1993). Main ROM for CD32 and CD32FR models.", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:236-239", "system": "commodore-amiga-cd32"}, {"aliases": ["amiga-os-310-cd32-ext.rom", "CD32 Extended-ROM rev 40.60 (1993)(Commodore)(CD32).rom"], "name": "kick40060.CD32.ext", "note": "CD32 Extended ROM rev 40.60 (1993). Required when main ROM is <= 512 KB (not combined).", "required": true, "size": 524288, "source_ref": "libretro/libretro-core.h:241-244", "system": "commodore-amiga-cd32"}, {"name": "rom.key", "note": "Amiga Forever ROM decryption key. Copied to saves/WHDLoad/Devs/Kickstarts/ for WHDLoad.", "required": false, "source_ref": "libretro/libretro-core.c:5885-5896", "system": "commodore-amiga"}, {"name": "WHDLoad.key", "note": "WHDLoad license key. Copied to saves/WHDLoad/L/ for registered WHDLoad use.", "required": false, "source_ref": "libretro/libretro-core.c:5901-5914", "system": "commodore-amiga", "unsourceable": "per-user signed registration key, never distributed generically, WHDLoad free since v18.2"}, {"name": "WHDLoad.prefs", "note": "WHDLoad preferences. Copied to saves/WHDLoad/S/ when present.", "required": false, "source_ref": "libretro/libretro-core.c:5918-5941", "system": "commodore-amiga"}], "model_kickstart_map": {"A1200": {"ext": null, "kickstart": "kick40068.A1200"}, "A1200OG": {"ext": null, "kickstart": "kick40068.A1200"}, "A2000": {"ext": null, "kickstart": "kick40063.A600"}, "A2000OG": {"ext": null, "kickstart": "kick34005.A500"}, "A4030": {"ext": null, "kickstart": "kick40068.A4000"}, "A4040": {"ext": null, "kickstart": "kick40068.A4000"}, "A500": {"ext": null, "kickstart": "kick34005.A500"}, "A500OG": {"ext": null, "kickstart": "kick34005.A500"}, "A500PLUS": {"ext": null, "kickstart": "kick37175.A500"}, "A600": {"ext": null, "kickstart": "kick40063.A600"}, "CD32": {"ext": "kick40060.CD32.ext", "kickstart": "kick40060.CD32"}, "CD32FR": {"ext": "kick40060.CD32.ext", "kickstart": "kick40060.CD32"}, "CDTV": {"ext": "kick34005.CDTV", "kickstart": "kick34005.A500"}}, "notes": "Frozen snapshot of PUAE at WinUAE 2.6.1 era. Less accurate than current PUAE\n(5.x), intended for weaker devices. BIOS handling is identical to the current\nversion.\n\nPUAE is a port of UAE (Unix Amiga Emulator) to libretro, continuing E-UAE.\nEmulates A500, 500+, 600, 1200, 2000, 4000, CD32, and CDTV. Kickstart ROMs\nare loaded from the RetroArch system directory.\n\nAROS (open-source Kickstart replacement) is available as a built-in fallback\nwhen no Kickstart ROM is found. Compatibility is limited compared to real ROMs.\n\nThe core scans the system directory for files starting with \"kick\", \"amiga-os\",\nor \"KS ROM\". Each filename is matched against a table of known naming\nconventions: standard (kick*.A*), Amiga Forever (amiga-os-*.rom), and\nTOSEC (Kickstart v*.rom). The first valid match is used.\n\nDefault kickstart per model (automatic selection):\n  A500, A500OG, A2000OG, CDTV -> kick34005.A500 (KS 1.3)\n  A500+                        -> kick37175.A500 (KS 2.04)\n  A600                         -> kick40063.A600 (KS 3.1)\n  A1200, A1200OG               -> kick40068.A1200 (KS 3.1)\n  A2000                        -> kick40063.A600 (KS 3.1)\n  A4030, A4040                 -> kick40068.A4000 (KS 3.1)\n  CD32, CD32FR                 -> kick40060.CD32 (KS 3.1)\n  CDTV (ext)                   -> kick34005.CDTV\n  CD32 (ext)                   -> kick40060.CD32.ext\n\nExtended ROM handling: CD32 and CDTV require an extended ROM in addition\nto the main kickstart. If the main ROM filesize is <= 512 KB, the extended\nROM is loaded separately. Combined ROMs (main + ext in one file) skip the\nextended ROM search.\n\nWHDLoad support copies kick33180.A500, kick34005.A500, kick40063.A600,\nkick40068.A1200 into saves/WHDLoad/Devs/Kickstarts/ for use by WHDLoad\nslave files. Also copies rom.key (Amiga Forever decryption) and WHDLoad.key\n(license) from the system directory.\n\nROM search order (libretro-core.c retro_config_kickstart):\n  1. Exact filename in system directory\n  2. Amiga Forever naming (amiga-os-*.rom)\n  3. TOSEC modified naming (with [!] suffix)\n  4. TOSEC naming (without [!] suffix)\n\ncapsimg.so/capsimg.dll is an optional shared library for IPF floppy image\nsupport (SPS/CAPS format). Not a BIOS file, loaded dynamically at runtime.\n\nSource: libretro/libretro-core.h:140-245, libretro/libretro-core.c:5534-5700,\nlibretro/libretro-core.c:5786-5945\n", "platform_details": {"aros_fallback": true, "naming_conventions": {"amiga_forever": "amiga-os-{version}.rom", "standard": "kick{rev}.{model}", "tosec": "Kickstart v{version} rev {rev} ({year})(Commodore)({model}).rom"}, "rom_sizes": {"ROM_SIZE_128": 131072, "ROM_SIZE_256": 262144, "ROM_SIZE_512": 524288}, "scan_prefixes": ["kick", "amiga-os", "KS ROM"], "source_ref": "libretro/libretro-core.c:2617-2656"}, "profiled_date": "2026-03-24", "source": "https://github.com/libretro/libretro-uae/tree/2.6.1", "source_commit": "96ebfcfc2c66233ad37f6dc99ee991211dc719ad", "systems": ["commodore-amiga", "commodore-amiga-cd32", "commodore-cdtv"], "type": "libretro", "upstream": "https://github.com/GnoStiC/PUAE", "whdload_kickstarts": ["kick33180.A500", "kick34005.A500", "kick40063.A600", "kick40068.A1200"]}


id: punes
name: puNES
type: standalone
classification: other
source: https://github.com/punesemu/puNES
upstream: https://github.com/punesemu/puNES
source_commit: 2ed5b1b2cffcde48ff36f359091756d17d8fe193
profile_json:
{"core_classification": "other", "core_version": "0.112", "cores": ["punes"], "display_name": "Nintendo - NES / Famicom (puNES)", "emulator": "puNES", "files": [{"description": "Family Computer Disk System BIOS", "name": "disksys.rom", "note": "8192 bytes are read into PRG ROM and mapped at 0xE000. When none of the four locations holds the file, fds_load_bios logs FDS;bios not found and returns EXIT_ERROR, which the caller propagates, so the disk image does not load. A short read only logs FDS;error on reading bios.", "required": true, "size": 8192, "source_ref": "src/core/fds.c:34,259-332 (fds_load_bios); src/core/fds.c:191-193 (caller); src/core/mappers/mapper_FDS.c:81 (mapping)", "system": "nintendo-fds"}, {"description": "Game Genie ROM, booted in place of the cartridge to reach the code entry screen", "name": "gamegenie.rom", "note": "Loaded only while the cheat mode is set to Game Genie. The whole file is read, its length taken from the file itself. Absent, gamegenie_load_rom returns early and the cartridge boots directly.", "required": false, "source_ref": "src/core/cheat.c:30,69-120 (gamegenie_check_rom_present),121-179 (gamegenie_load_rom); src/core/ines.c:97-99 (caller)", "system": "nintendo-nes"}, {"description": "NES 2.0 header database, matched by ROM hash", "name": "nes20db.xml", "note": "Supplies mapper, submapper, mirroring, region, RAM sizes and Vs. System hardware for dumps whose own header is absent or wrong. A miss leaves info.mapper.nes20db.in_use false and the header carried by the ROM is used.", "required": false, "source_ref": "src/gui/nes20db.cpp:31,49-81 (nes20db_search); src/core/ines.c:276-278, src/core/unif.c:316 (callers); CMakeLists.txt:227 (install)", "system": "nintendo-nes"}, {"description": "DIP switch database for multicart and Vs. System boards, keyed by CRC32", "name": "dip.cfg", "note": "Read on every mapper init. A miss leaves dipswitch.used false, which mappers 001, 043, 045, 176, 215, 412 and 447 and the selection dialog at src/gui/qt.cpp:754 all guard on, so the board runs on its reset value.", "required": false, "source_ref": "src/gui/dipswitch.cpp:30,60-86 (dipswitch_search); src/core/mappers.c:44 (caller); CMakeLists.txt:228 (install)", "system": "nintendo-nes"}], "mode": "standalone", "notes": "Qt emulator of the NES, the Famicom and the Family Computer Disk System,\nalso playing NSF and NSFE music files. A cartridge boots with nothing\nsupplied: the 2A03, the PPU and every mapper are emulated in software.\n\nFour names are fixed by the code. disksys.rom and gamegenie.rom share one\nfour-step lookup (src/core/fds.c:265-309, src/core/cheat.c:74-108): the path\nrecorded in the configuration, the working directory, the directory holding\nthe loaded image, then the bios folder of the data directory. nes20db.xml\nand dip.cfg are read from the XDG data directories under a puNES\nsubdirectory, then the base of the data directory, then the application\ndirectory (src/gui/nes20db.cpp:50-79, src/gui/dipswitch.cpp:61-85); the\ninstaller writes both into the shared data directory\n(CMakeLists.txt:227-228).\n\nThe data directory is the application directory under --portable,\n%APPDATA%/puNES on Windows and ~/.local/share/puNES elsewhere\n(src/gui/qt.cpp:561-575), so the bios folder is ~/.local/share/puNES/bios.\n\nNo length and no hash is ever compared. fds_load_bios computes a CRC32 of\nthe BIOS it loaded (src/core/fds.c:329) and the only reader of that value is\nthe log line at src/core/fds.c:502-503.\n\nThe iNES 1.0 game database is compiled in as src/core/database.h and carries\nthe Vs. System PPU type and the region, so Vs. System titles need no\nexternal file. The uPD7756 ADPCM samples of mappers 018, 086 and 072 come\nfrom the Misc ROM area of the NES 2.0 dump itself\n(src/core/mappers/mapper_018.c:51, mapper_086.c:56, mapper_072.c:45).\nloadWaveFiles, which would read <data>/samples/<name>/NN.wav\n(src/core/mappers/waveFile.cpp:76-84), is declared and defined but called\nfrom nowhere in the tree, so no wave file is ever opened.\n\nPalettes, shaders, cheat imports and soft patches are opened from paths the\nuser picks in a file dialog and no name is fixed by the code, so they carry\nno file entry here. A palette shorter than 192 bytes is refused and a\nbuilt-in table is used instead (src/core/palette.c:39-64,\nsrc/video/gfx.c:323-334).\n", "profiled_date": "2026-08-08", "source": "https://github.com/punesemu/puNES", "source_commit": "2ed5b1b2cffcde48ff36f359091756d17d8fe193", "systems": ["nintendo-nes", "nintendo-fds"], "type": "standalone", "upstream": "https://github.com/punesemu/puNES"}


id: puzzlescript
name: PuzzleScript
type: libretro
classification: game_engine
source: https://github.com/nwhitehead/pzretro
upstream: https://github.com/increpare/PuzzleScript
source_commit: 6d859b47092f585a7ec05804c1d51a1676a06531
profile_json:
{"core_classification": "game_engine", "core_version": "0.2.1", "cores": ["puzzlescript"], "display_name": "PuzzleScript (pzretro)", "emulator": "PuzzleScript", "files": [], "notes": "Libretro port of PuzzleScript, an open-source HTML5 puzzle game engine\nby Stephen Lavelle (increpare). Runs .pz and .pzp puzzle definition files.\nAlso supports PuzzleScript Plus (Auroriax fork) for .pzp files.\n\nThe PuzzleScript and PuzzleScript Plus JavaScript engines are compiled into\nthe binary via QuickJS. No external files required.\n", "profiled_date": "2026-03-25", "source": "https://github.com/nwhitehead/pzretro", "source_commit": "6d859b47092f585a7ec05804c1d51a1676a06531", "systems": [], "type": "libretro", "upstream": "https://github.com/increpare/PuzzleScript"}


id: px68k
name: px68k
type: libretro
classification: community_fork
source: https://github.com/libretro/px68k-libretro
upstream: https://github.com/hissorii/px68k
source_commit: cc45b55983b4d30c961a313a77df9bcf9461dc63
profile_json:
{"core_classification": "community_fork", "core_version": "0.15+", "cores": ["px68k"], "display_name": "Sharp - X68000 (PX68k)", "emulator": "px68k", "files": [{"name": "iplrom.dat", "note": "X68000 IPL ROM (original model). 128 KB, loaded at IPL buffer offset 0x20000. The core tries iplrom.dat first, then iplrom30.dat, iplromco.dat, iplromxv.dat in order. At least one must be present or the core fails to start.\n", "path": "keropi/iplrom.dat", "priority": 1, "required": true, "size": 131072, "source_ref": "libretro.c:850-867"}, {"name": "iplrom30.dat", "note": "X68030 IPL ROM. Alternative to iplrom.dat for X68030 model emulation. Only used if iplrom.dat is not found.\n", "path": "keropi/iplrom30.dat", "priority": 2, "required": false, "size": 131072, "source_ref": "libretro.c:851"}, {"name": "iplromco.dat", "note": "X68000 Compact IPL ROM. Alternative to iplrom.dat. Only used if iplrom.dat and iplrom30.dat are not found.\n", "path": "keropi/iplromco.dat", "priority": 3, "required": false, "size": 131072, "source_ref": "libretro.c:851"}, {"name": "iplromxv.dat", "note": "X68000 XVI IPL ROM. Last fallback in the IPL search order. Only used if the three other IPL variants are not found.\n", "path": "keropi/iplromxv.dat", "priority": 4, "required": false, "size": 131072, "source_ref": "libretro.c:851"}, {"name": "cgrom.dat", "note": "X68000 character generator ROM. 768 KB, provides the font glyphs for text display. If missing, the core falls back to cgrom.tmp (user-generated font cache). Core fails to start if neither file exists.\n", "path": "keropi/cgrom.dat", "required": true, "size": 786432, "source_ref": "libretro.c:853, libretro.c:881-891"}, {"name": "cgrom.tmp", "note": "Alternative font file, used as fallback when cgrom.dat is absent. Typically a font cache generated by the emulator itself on other platforms.\n", "path": "keropi/cgrom.tmp", "required": false, "size": 786432, "source_ref": "libretro.c:854, libretro.c:884-888"}], "notes": {"ipl_selection": "The four IPL ROM variants correspond to different X68000 hardware revisions. The core uses whichever it finds first in order: iplrom.dat (original X68000), iplrom30.dat (X68030), iplromco.dat (Compact), iplromxv.dat (XVI). Most users only need iplrom.dat. The IPL also determines SASI vs SCSI disk support based on vectors found at offsets 0x30600-0x30c00.\n", "sram": "sram.dat (16 KB) is read/write runtime state, not a BIOS file. The core creates it automatically on first shutdown. It stores X68000 NVRAM settings (boot count, boot device preferences, SRAM-resident programs).\n", "subdirectory": "All files must be placed in <system_dir>/keropi/ subdirectory. The core sets this path at init via sprintf(retro_system_conf, \"%s/keropi\", system_dir) and then calls file_setcd() to make it the base for all file_open_c() calls.\n"}, "profiled_date": "2026-03-25", "source": "https://github.com/libretro/px68k-libretro", "source_commit": "cc45b55983b4d30c961a313a77df9bcf9461dc63", "systems": ["sharp-x68000"], "type": "libretro", "upstream": "https://github.com/hissorii/px68k"}


id: qemu
name: QEMU
type: libretro
classification: community_fork
source: https://github.com/io12/qemu-libretro
upstream: https://github.com/qemu/qemu
source_commit: 486f2d58930f7f0bea5717b6fc06e7fa3dd109ed
profile_json:
{"core_classification": "community_fork", "core_version": "0.1.0", "cores": ["qemu"], "display_name": "QEMU", "emulator": "QEMU", "files": [{"md5": "e9ca30100c47a26b66488444c5b0bd15", "name": "SeaBIOS (128 KB)", "note": "SeaBIOS legacy BIOS for x86/x86_64 PC emulation. Default firmware loaded by pc_sysfw.c for standard PC machine types.\n", "path": "qemu/bios.bin", "required": true, "sha1": "f402170ee4f374c304a7ce0b139d6cecb1732aff", "size": 131072, "source_ref": "hw/i386/pc_sysfw.c:222,243"}, {"md5": "d3dab3095c73cad67afd3cc16a88479c", "name": "SeaBIOS (256 KB)", "note": "SeaBIOS 256 KB variant. Some machine types or configurations may prefer this larger image.\n", "path": "qemu/bios-256k.bin", "required": false, "sha1": "5fe6078506094333106e6b3f33c7185dea7f0268", "size": 262144, "source_ref": "pc-bios/meson.build:30"}, {"md5": "9f0ddaf6f3b213798bd414273505f2ff", "name": "SeaBIOS microvm", "note": "Minimal SeaBIOS for the microvm machine type, a stripped-down x86 virtual machine with reduced device set.\n", "path": "qemu/bios-microvm.bin", "required": false, "sha1": "56f33ced7ea0f7581d776396a0ac6cfe2c7c9257", "size": 131072, "source_ref": "hw/i386/microvm.c:58"}, {"md5": "387c48aef9497c6c2b914b1e6b9bc7aa", "name": "qboot ROM", "note": "Minimal x86 firmware for fast Linux kernel booting.", "path": "qemu/qboot.rom", "required": false, "sha1": "339d3a93c967491c9f1fffe963484386f48bd22c", "size": 16384, "source_ref": "pc-bios/meson.build:32"}, {"md5": "ecef0b49f8f4e61874f012eb12ba0e36", "name": "VGA BIOS (ISA)", "note": "Standard VGA BIOS from LGPL VGA BIOS project. Loaded by ISA VGA device (vga-isa). Default VGA for older machine types.\n", "path": "qemu/vgabios.bin", "required": true, "sha1": "63d87e2a6618c3a9b2aabecf03ac2456e5e63410", "size": 38912, "source_ref": "hw/display/vga-isa.c:88, hw/display/vga_int.h:191"}, {"md5": "fcd3d3c0b07a9096693d69425cd940f6", "name": "VGA BIOS Cirrus", "note": "Cirrus Logic GD5446 VGA BIOS.", "path": "qemu/vgabios-cirrus.bin", "required": false, "sha1": "883eb2657ce29661a0466b6b41ce75411f37aad9", "size": 38912, "source_ref": "hw/display/cirrus_vga.c:3001, hw/display/cirrus_vga_isa.c:67"}, {"md5": "8117c3fd986fbbe327badfe38e77db1d", "name": "VGA BIOS stdvga", "note": "Standard VGA PCI BIOS (Bochs VBE extensions).", "path": "qemu/vgabios-stdvga.bin", "required": false, "sha1": "87fbc0ecb1ee7d4d8c8c88c7d8a2fb3ec8f99ea5", "size": 39424, "source_ref": "hw/display/vga-pci.c:387"}, {"md5": "83e39bd3e056291ee50d2b5d937bab3e", "name": "VGA BIOS bochs-display", "note": "Bochs display device VGA BIOS.", "path": "qemu/vgabios-bochs-display.bin", "required": false, "sha1": "9e2edd3d835219cde63a20e2cd58107d7e96ef5b", "size": 28672, "source_ref": "hw/display/bochs-display.c:365"}, {"md5": "c55512e313c4cb08ec5a36198fdfef33", "name": "VGA BIOS ramfb", "note": "RAM framebuffer VGA BIOS.", "path": "qemu/vgabios-ramfb.bin", "required": false, "sha1": "49df9be557f0f0277c8fedb889257e279586d536", "size": 28672, "source_ref": "hw/display/ramfb.c:150"}, {"md5": "013cb287a295dc6c039921c6883a767e", "name": "VGA BIOS ATI", "note": "ATI VGA BIOS for emulated ATI display adapter.", "path": "qemu/vgabios-ati.bin", "required": false, "sha1": "ded141cacdebf557ec552597cbf57cd989cec3e2", "size": 39424, "source_ref": "hw/display/ati.c:1066"}, {"md5": "558420a5ad839b10906d5d73e92a4160", "name": "VGA BIOS QXL", "note": "QXL paravirtual display VGA BIOS.", "path": "qemu/vgabios-qxl.bin", "required": false, "sha1": "527227abd5f3348c382d4b02703389fbeb83b067", "size": 39424, "source_ref": "hw/display/qxl.c:2512"}, {"md5": "8f1e5e497342c503f62a50912f0447e0", "name": "VGA BIOS VirtIO", "note": "VirtIO GPU VGA BIOS.", "path": "qemu/vgabios-virtio.bin", "required": false, "sha1": "cddc53b94793609d1e837d78cd5468fcc1ed9164", "size": 39424, "source_ref": "hw/display/virtio-vga.c:233"}, {"md5": "6635fe944eab228ae01c814107674199", "name": "VGA BIOS VMware", "note": "VMware SVGA II display VGA BIOS.", "path": "qemu/vgabios-vmware.bin", "required": false, "sha1": "c54901ab8f526ab201ebf1b3ecdf711e38e6c259", "size": 39424, "source_ref": "hw/display/vmware_vga.c:1349"}, {"md5": "b8cec9572e408a3259914f9aba8664cb", "name": "KVM VAPIC", "note": "KVM virtual APIC option ROM for APIC acceleration on x86.", "path": "qemu/kvmvapic.bin", "required": false, "sha1": "670c9cc79b4859944705eece710dc332188b79b4", "size": 9216, "source_ref": "hw/i386/vapic.c:733"}, {"md5": "ab40dea9ff35ec29b506fdae5bf11463", "name": "Linux boot ROM", "note": "Option ROM for direct Linux kernel booting via -kernel.", "path": "qemu/linuxboot.bin", "required": false, "sha1": "fd19bef7f5647960952520389f448364762ed948", "size": 1024, "source_ref": "hw/i386/x86-common.c:964"}, {"md5": "8cb622dc1c9290a019a801e972c9e4f9", "name": "Linux boot DMA ROM", "note": "DMA-capable option ROM for direct Linux kernel booting.", "path": "qemu/linuxboot_dma.bin", "required": false, "sha1": "0bff50c10727bd9c85c831ea92b7a52699959992", "size": 1536, "source_ref": "hw/i386/x86-common.c:966"}, {"md5": "552a0c03c40bb3ec292f5349ea29cf86", "name": "Multiboot ROM", "note": "Option ROM for Multiboot kernel loading.", "path": "qemu/multiboot.bin", "required": false, "sha1": "a8b58ae464fc6fb26799432ae867bf57c546ff80", "size": 1024, "source_ref": "hw/i386/multiboot.c:408"}, {"md5": "e942cc4f612050c7331d33a34b0d5192", "name": "Multiboot DMA ROM", "note": "DMA-capable Multiboot option ROM.", "path": "qemu/multiboot_dma.bin", "required": false, "sha1": "32ab1cf336b674bfb154eb7a939a3e3275a92647", "size": 1024, "source_ref": "hw/i386/multiboot.c:406"}, {"md5": "bb045d6f0380ad2af3531edeff92a117", "name": "PVH boot ROM", "note": "Option ROM for PVH (paravirtualized hardware) ELF booting.", "path": "qemu/pvh.bin", "required": false, "sha1": "c2191e6495103c1f43e9b6ca8930e44c2245e476", "size": 2048, "source_ref": "hw/i386/x86-common.c:735"}, {"md5": "898d7d0b3ed4a030c877b9185b4ef6be", "name": "PXE e1000", "note": "iPXE PXE boot ROM for Intel e1000 NIC (8086:100e).", "path": "qemu/pxe-e1000.rom", "required": false, "sha1": "368e8e9827ae8757a7449319831078b6d5efb83f", "size": 67072, "source_ref": "pc-bios/meson.build:47"}, {"md5": "2f8279177fdc2ce5abc47d9f1e303db1", "name": "PXE eepro100", "note": "iPXE PXE boot ROM for Intel eepro100 NIC (8086:1209). Device default romfile.", "path": "qemu/pxe-eepro100.rom", "required": false, "sha1": "b19572c9c2a11f03282df81c0397aceed409a86c", "size": 61440, "source_ref": "hw/net/eepro100.c:2077"}, {"md5": "095cdf2b26084ce22adb883e9c43fc5a", "name": "PXE ne2k_pci", "note": "iPXE PXE boot ROM for NE2000 PCI NIC (1050:0940).", "path": "qemu/pxe-ne2k_pci.rom", "required": false, "sha1": "f37f43f89dc99afe0442ee0b7a431ee790ad6bf6", "size": 61440, "source_ref": "pc-bios/meson.build:49"}, {"md5": "15e38b82922a058c6df6eaffbad1b916", "name": "PXE pcnet", "note": "iPXE PXE boot ROM for AMD PCnet NIC (1022:2000).", "path": "qemu/pxe-pcnet.rom", "required": false, "sha1": "13a039bf9916f1db42d3a019591d372b4cf4aee9", "size": 61440, "source_ref": "pc-bios/meson.build:50"}, {"md5": "22f4b6ae5650988f999ee651a3734462", "name": "PXE rtl8139", "note": "iPXE PXE boot ROM for Realtek RTL8139 NIC (10ec:8139).", "path": "qemu/pxe-rtl8139.rom", "required": false, "sha1": "7b512c0a7a13bc3c254a25237e4d4612170f4391", "size": 61440, "source_ref": "pc-bios/meson.build:51"}, {"md5": "91ad9770f5717a89d518534f45f1332d", "name": "PXE virtio", "note": "iPXE PXE boot ROM for VirtIO NIC (1af4:1000).", "path": "qemu/pxe-virtio.rom", "required": false, "sha1": "3e3f77cfe70af904133db94f27ec24e3c9c43648", "size": 60416, "source_ref": "pc-bios/meson.build:52"}, {"md5": "d8330b99643e31b51e7710fa26c7e859", "name": "EFI e1000", "note": "iPXE EFI boot ROM for Intel e1000 NIC. Device default romfile.", "path": "qemu/efi-e1000.rom", "required": false, "sha1": "a3df5fc33ab0190f470b34104ff3c0679cecbab6", "size": 159232, "source_ref": "hw/net/e1000.c:1708"}, {"md5": "a55bf3f4988d4a736c71a1300636cd69", "name": "EFI e1000e", "note": "iPXE EFI boot ROM for Intel e1000e NIC. Device default romfile.", "path": "qemu/efi-e1000e.rom", "required": false, "sha1": "1d37f3ae6748d4deefe9fd5188a2f557bf265d61", "size": 159232, "source_ref": "hw/net/e1000e.c:689"}, {"md5": "d2a2f92710f5a9f77281e9492a249afb", "name": "EFI eepro100", "note": "iPXE EFI boot ROM for Intel eepro100 NIC.", "path": "qemu/efi-eepro100.rom", "required": false, "sha1": "956d9592fea33374ef0f1900a185b6e1109ea765", "size": 159232, "source_ref": "pc-bios/meson.build:54"}, {"md5": "10b66275b3644af301c64a3c545c3daf", "name": "EFI ne2k_pci", "note": "iPXE EFI boot ROM for NE2000 PCI NIC. Device default romfile.", "path": "qemu/efi-ne2k_pci.rom", "required": false, "sha1": "adb7199f545fdb66c325b142c8dbc4cddb99a20d", "size": 157696, "source_ref": "hw/net/ne2000-pci.c:111"}, {"md5": "374696f4fffa83c9cf18272212c21d83", "name": "EFI pcnet", "note": "iPXE EFI boot ROM for AMD PCnet NIC. Device default romfile.", "path": "qemu/efi-pcnet.rom", "required": false, "sha1": "9e5a4bb247c6a1777c89117ca091f94342b9046d", "size": 157696, "source_ref": "hw/net/pcnet-pci.c:267"}, {"md5": "f81dbbd7001a8db631f2a548b7d08c4e", "name": "EFI rtl8139", "note": "iPXE EFI boot ROM for Realtek RTL8139 NIC. Device default romfile.", "path": "qemu/efi-rtl8139.rom", "required": false, "sha1": "99a1e431cc0cb0a78d5803875dfa687e12a947f4", "size": 160768, "source_ref": "hw/net/rtl8139.c:3423"}, {"md5": "d3887f04c23035cae3f0e1075deea459", "name": "EFI virtio", "note": "iPXE EFI boot ROM for VirtIO NIC. Device default romfile.", "path": "qemu/efi-virtio.rom", "required": false, "sha1": "1596e9b97f0bc8b5ff3e444235690a549ee982c6", "size": 160768, "source_ref": "hw/virtio/virtio-net-pci.c:73"}, {"md5": "ea1ba222dbd5aa356ea1f29393ae55e1", "name": "EFI vmxnet3", "note": "iPXE EFI boot ROM for VMware vmxnet3 NIC. Device default romfile.", "path": "qemu/efi-vmxnet3.rom", "required": false, "sha1": "6557242402387a6319a0db6abb916ada48e1391c", "size": 156672, "source_ref": "hw/net/vmxnet3.c:2508"}, {"name": "EDK2 x86_64 UEFI", "note": "TianoCore UEFI firmware for x86_64. Built from edk2-stable202302.", "path": "qemu/edk2-x86_64-code.fd", "required": false, "sha1": "eac1a94b8e0d7c53fd5df001c36794ec34c7c724", "size": 3653632, "source_ref": "pc-bios/meson.build:12"}, {"name": "EDK2 x86_64 Secure Boot UEFI", "note": "TianoCore UEFI firmware for x86_64 with Secure Boot support.", "path": "qemu/edk2-x86_64-secure-code.fd", "required": false, "sha1": "617abe2746696bb4a309d72cecb446dc76a2a61e", "size": 3653632, "source_ref": "pc-bios/meson.build:13"}, {"name": "EDK2 i386 UEFI", "note": "TianoCore UEFI firmware for i386.", "path": "qemu/edk2-i386-code.fd", "required": false, "sha1": "45b8faebdfaaf19d16e3a7c5f60d69214685071c", "size": 3653632, "source_ref": "pc-bios/meson.build:9"}, {"name": "EDK2 i386 Secure Boot UEFI", "note": "TianoCore UEFI firmware for i386 with Secure Boot support.", "path": "qemu/edk2-i386-secure-code.fd", "required": false, "sha1": "6982abec8ef2ed7c8293163d5a0bd69a01a2126f", "size": 3653632, "source_ref": "pc-bios/meson.build:10"}, {"name": "EDK2 i386 UEFI vars template", "note": "UEFI variable store template for i386/x86_64 EDK2 firmware.", "path": "qemu/edk2-i386-vars.fd", "required": false, "sha1": "b62e676c9317a32aaa9ee1d76268d8c55663bd6e", "size": 540672, "source_ref": "pc-bios/meson.build:11"}, {"name": "EDK2 AArch64 UEFI", "note": "TianoCore UEFI firmware for AArch64 (ARM 64-bit).", "path": "qemu/edk2-aarch64-code.fd", "required": false, "sha1": "514edbce58bfa877170673c1799351a7dab3b6df", "size": 67108864, "source_ref": "pc-bios/meson.build:4"}, {"name": "EDK2 ARM UEFI", "note": "TianoCore UEFI firmware for ARM (32-bit).", "path": "qemu/edk2-arm-code.fd", "required": false, "sha1": "c20f01c28b59b388abb9d0febeec45d801a632f0", "size": 67108864, "source_ref": "pc-bios/meson.build:5"}, {"name": "EDK2 ARM UEFI vars template", "note": "UEFI variable store template for ARM/AArch64 EDK2 firmware.", "path": "qemu/edk2-arm-vars.fd", "required": false, "sha1": "b051167e0e57bd13d77ed92ef7b474872f44ec6d", "size": 67108864, "source_ref": "pc-bios/meson.build:6"}, {"name": "EDK2 RISC-V UEFI", "note": "TianoCore UEFI firmware for RISC-V 64-bit.", "path": "qemu/edk2-riscv-code.fd", "required": false, "sha1": "2c8633d881ece0c4794d740138a318f7e9af480c", "size": 33554432, "source_ref": "pc-bios/meson.build:7"}, {"name": "EDK2 RISC-V UEFI vars template", "note": "UEFI variable store template for RISC-V EDK2 firmware.", "path": "qemu/edk2-riscv-vars.fd", "required": false, "sha1": "c4e6cce4247ba8f32f528c1c69f49228f616677f", "size": 33554432, "source_ref": "pc-bios/meson.build:8"}, {"name": "OpenBIOS PowerPC", "note": "OpenBIOS (IEEE 1275 Open Firmware) for PowerPC emulation. Default for -M mac99, -M g3beige and other PPC machines.\n", "path": "qemu/openbios-ppc", "required": false, "sha1": "0ef5051dcb318c0bc45d1908f8318d6eece8686a", "size": 677196, "source_ref": "hw/ppc/mac_oldworld.c:60, hw/ppc/mac_newworld.c:86"}, {"name": "SLOF (Slimline Open Firmware)", "note": "IBM SLOF firmware for pSeries (POWER) machine type. Built from qemu-slof-20230918.", "path": "qemu/slof.bin", "required": false, "sha1": "a03a94acfe555804d66cc6c74760ae1375a71a64", "size": 995000, "source_ref": "hw/ppc/spapr.c:106"}, {"name": "skiboot", "note": "OPAL firmware for OpenPOWER PowerNV (non-virtualized) machine type.", "path": "qemu/skiboot.lid", "required": false, "sha1": "8052069aa9714c23be05b4e62fb245a3d572cb0f", "size": 2527328, "source_ref": "hw/ppc/pnv.c:63"}, {"name": "VOF (Virtual Open Firmware)", "note": "Minimal Open Firmware shim for -machine pseries,x-vof=on. Also default for Pegasos II.", "path": "qemu/vof.bin", "required": false, "sha1": "fc737b34a390f5752cb7e35b33d71f4f438ab607", "size": 3456, "source_ref": "hw/ppc/spapr.c:107, hw/ppc/pegasos2.c:43"}, {"name": "VOF NVRAM", "note": "NVRAM template for VOF (Virtual Open Firmware).", "path": "qemu/vof-nvram.bin", "required": false, "sha1": "5d1184609b87f78635f0575467a1c3f440900ff0", "size": 16384, "source_ref": "pc-bios/meson.build:83"}, {"name": "U-Boot e500", "note": "U-Boot for PowerPC e500 (qemu-ppce500 target). Built from upstream denx u-boot, commit 2072e72.", "path": "qemu/u-boot.e500", "required": false, "sha1": "9ea03f249f856cdcb4399cc1f5a5031729379911", "size": 421720, "source_ref": "hw/ppc/e500.c:1184"}, {"name": "U-Boot SAM460", "note": "U-Boot for Sam460ex (AmigaOne) PowerPC board.", "path": "qemu/u-boot-sam460-20100605.bin", "required": false, "sha1": "0399a79ac0cf77f0da70af9baec7548a3b368f0a", "size": 524288, "source_ref": "pc-bios/meson.build:74"}, {"name": "QEMU VGA Mac driver", "note": "QemuMacDrivers VGA driver for PPC MacOS guests.", "path": "qemu/qemu_vga.ndrv", "required": false, "sha1": "638c6262a6eb579ec3d1c9292566ac94c942dc15", "size": 18752, "source_ref": "hw/ppc/mac_oldworld.c:58, hw/ppc/mac_newworld.c:84"}, {"name": "OpenBIOS Sparc32", "note": "OpenBIOS for Sparc32 emulation (sun4m).", "path": "qemu/openbios-sparc32", "required": false, "sha1": "5a4f2124c8f093f8aee99fbcebcf5d17d789ff26", "size": 382080, "source_ref": "hw/sparc/sun4m.c:79"}, {"name": "OpenBIOS Sparc64", "note": "OpenBIOS for Sparc64 (UltraSPARC) emulation (sun4u).", "path": "qemu/openbios-sparc64", "required": false, "sha1": "c6e215fe460629d35688ab8e51faf6f765827cd6", "size": 1593408, "source_ref": "hw/sparc64/sun4u.c:67"}, {"name": "QEMU TCX display", "note": "TCX framebuffer FCode driver for Sparc32 OpenBIOS.", "path": "qemu/QEMU,tcx.bin", "required": false, "sha1": "5f1792a73ee47d78b2160191ecb2c92f353f93ad", "size": 1402, "source_ref": "hw/display/tcx.c:38,827"}, {"name": "QEMU cgthree display", "note": "CG3 framebuffer FCode driver for Sparc32 OpenBIOS.", "path": "qemu/QEMU,cgthree.bin", "required": false, "sha1": "619b86fb02faf8f682474be3f0653b58015008ba", "size": 850, "source_ref": "hw/display/cg3.c:44,303"}, {"name": "U-Boot LEON3", "note": "U-Boot for LEON3 SPARC board. Not shipped with QEMU, user-supplied.", "path": "qemu/u-boot.bin", "required": false, "source_ref": "hw/sparc/leon3.c:53"}, {"name": "Alpha PALcode", "note": "PALcode firmware for Alpha (Clipper/DP264) machine emulation.", "path": "qemu/palcode-clipper", "required": false, "sha1": "47b0870aaa45a7aa0d48847fd905908fb06f3e9f", "size": 153728, "source_ref": "hw/alpha/dp264.c:139"}, {"name": "OpenSBI RISC-V 32", "note": "OpenSBI (Supervisor Binary Interface) firmware for RISC-V 32-bit.", "path": "qemu/opensbi-riscv32-generic-fw_dynamic.bin", "required": false, "sha1": "7a23dfdeef3d78ffc89d86e89fc06a36f1e4386f", "size": 268312, "source_ref": "hw/riscv/boot.c:92"}, {"name": "OpenSBI RISC-V 64", "note": "OpenSBI firmware for RISC-V 64-bit.", "path": "qemu/opensbi-riscv64-generic-fw_dynamic.bin", "required": false, "sha1": "6883bfd1991c0ef0d67b0967e7dcbd60420dd480", "size": 272504, "source_ref": "hw/riscv/boot.c:92"}, {"name": "S390 CCW firmware", "note": "Channel Command Word boot firmware for s390x emulation.", "path": "qemu/s390-ccw.img", "required": false, "sha1": "7b4fa888d32ca8ddbc752f7442e4d055cee1871a", "size": 42608, "source_ref": "hw/s390x/ipl.c:149"}, {"name": "S390 network boot", "note": "Network boot firmware for s390x emulation.", "path": "qemu/s390-netboot.img", "required": false, "sha1": "f6cec671408117bd9a31e982682662f27ef4fb2c", "size": 67232, "source_ref": "hw/s390x/ipl.c:497"}, {"name": "HP-PA firmware (32-bit)", "note": "SeaBIOS-hppa firmware for 32-bit HP-PARISC emulation.", "path": "qemu/hppa-firmware.img", "required": false, "sha1": "605c36ede6c120c6cc7efe147a75a3dc4b7e4fb0", "size": 167820, "source_ref": "hw/hppa/machine.c:424"}, {"name": "HP-PA firmware (64-bit)", "note": "SeaBIOS-hppa firmware for 64-bit HP-PARISC emulation.", "path": "qemu/hppa-firmware64.img", "required": false, "sha1": "b42f6d4ca74073de6c038579b4a9323ad0a6b398", "size": 206024, "source_ref": "hw/hppa/machine.c:424"}, {"name": "MIPS BIOS (big-endian)", "note": "Default BIOS for big-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU.", "path": "qemu/mips_bios.bin", "required": false, "source_ref": "hw/mips/malta.c:97"}, {"name": "MIPS BIOS (little-endian)", "note": "Default BIOS for little-endian MIPS machines (Malta, MIPSsim, Jazz). Not shipped with QEMU.", "path": "qemu/mipsel_bios.bin", "required": false, "source_ref": "hw/mips/malta.c:99"}, {"name": "Loongson3 BIOS", "note": "Default BIOS for Loongson3 virtual MIPS machine. Not shipped with QEMU.", "path": "qemu/bios_loongson3.bin", "required": false, "source_ref": "hw/mips/loongson3_virt.c:63"}, {"name": "PMON Fuloong2e", "note": "PMON monitor for Fuloong2e MIPS board. Not shipped with QEMU.", "path": "qemu/pmon_2e.bin", "required": false, "source_ref": "hw/mips/fuloong2e.c:58"}, {"name": "Macintosh ROM", "note": "Apple Macintosh ROM for Quadra 800 emulation. Not shipped with QEMU.", "path": "qemu/MacROM.bin", "required": false, "source_ref": "hw/m68k/q800.c:62"}, {"name": "Canon A1100 ROM", "note": "Canon PowerShot A1100 IS DIGIC camera ROM. Not shipped with QEMU.", "path": "qemu/canon-a1100-rom1.bin", "required": false, "source_ref": "hw/arm/digic_boards.c:131"}, {"name": "NPCM7xx boot ROM", "note": "Boot ROM for Nuvoton NPCM7xx BMC (ARM Cortex-A9).", "path": "qemu/npcm7xx_bootrom.bin", "required": false, "sha1": "22a75d26a0591d2c7763765b6381fa2f73de43e1", "size": 768, "source_ref": "hw/arm/npcm7xx_boards.c:56"}, {"name": "Bamboo DTB (PPC)", "note": "Device tree blob for PowerPC Bamboo (440EP) board.", "path": "qemu/bamboo.dtb", "required": false, "sha1": "ebdf1745479f4ec88459bbd9ef16ee1114018508", "size": 3211, "source_ref": "hw/ppc/ppc440_bamboo.c:38"}, {"name": "Canyonlands DTB (PPC)", "note": "Device tree blob for PowerPC Canyonlands (460EX) / Sam460ex board.", "path": "qemu/canyonlands.dtb", "required": false, "sha1": "8a2fda0b4f23a92eb44776b5d7ffe951987062da", "size": 9779, "source_ref": "hw/ppc/sam460ex.c:45"}, {"name": "Petalogix ML605 DTB (MicroBlaze)", "note": "Device tree blob for Xilinx Petalogix ML605 MicroBlaze board. MicroBlaze target not built in libretro core.", "path": "qemu/petalogix-ml605.dtb", "required": false, "sha1": "892d265838866869b8a8ef104252ff5b2fda156f", "size": 9882, "source_ref": "pc-bios/meson.build:91"}, {"name": "Petalogix S3ADSP1800 DTB (MicroBlaze)", "note": "Device tree blob for Xilinx Petalogix S3ADSP1800 MicroBlaze board. MicroBlaze target not built in libretro core.", "path": "qemu/petalogix-s3adsp1800.dtb", "required": false, "sha1": "976600e3f89ecc1f3564b7077f53c58e0b565280", "size": 8161, "source_ref": "pc-bios/meson.build:90"}, {"name": "Virtex ML507 DTB (PPC)", "note": "Device tree blob for Xilinx Virtex ML507 PowerPC board. Not shipped with QEMU.", "path": "qemu/virtex-ml507.dtb", "required": false, "source_ref": "hw/ppc/virtex_ml507.c:148"}], "notes": {"bios_directory": "All files go in {retroarch_system_dir}/qemu/. The libretro core adds this path via qemu_add_data_dir() in ui/libretro.c:659-660.\n", "default_usage": "For typical x86/x86_64 usage (loading .iso/.img/.qcow files directly), only bios.bin (or bios-256k.bin) and vgabios.bin are strictly needed. Other VGA BIOS variants are loaded depending on the emulated GPU. PXE/EFI ROMs are only needed for network booting.\n", "edk2": "EDK2 UEFI firmware is shipped as bz2-compressed blobs in pc-bios/. These provide UEFI boot for x86, ARM, and RISC-V machine types. Users specify them via -bios or pflash in .qemu_cmd_line files.\n", "experimental": "This core is marked is_experimental=true in its .info file.", "multi_arch": "The libretro build targets 17 architectures. Non-x86 firmware is only needed when using .qemu_cmd_line files that invoke a different qemu-system-* binary (e.g. qemu-system-ppc for MacOS 9).\n", "version": "Based on QEMU 9.0.50 (io12/qemu-libretro)"}, "profiled_date": "2026-03-25", "source": "https://github.com/io12/qemu-libretro", "source_commit": "486f2d58930f7f0bea5717b6fc06e7fa3dd109ed", "systems": ["ibm-pc", "x86", "x86-64", "ppc", "ppc64", "sparc", "sparc64", "arm", "aarch64", "mips", "mips64", "riscv32", "riscv64", "s390x", "m68k", "alpha", "hppa"], "type": "libretro", "upstream": "https://github.com/qemu/qemu"}


id: quasi88
name: QUASI88
type: libretro
classification: community_fork
source: https://github.com/libretro/quasi88-libretro
upstream: https://www.retropc.net/showzoh/quasi88/
source_commit: b5a0e044a914c9a6b8d7b2dd2ddd152f93d35687
profile_json:
{"core_classification": "community_fork", "core_version": "0.6.4", "cores": ["quasi88"], "display_name": "NEC - PC-8000 / PC-8800 series (QUASI88)", "emulator": "QUASI88", "files": [{"aliases": ["N88.ROM"], "hle_fallback": true, "name": "n88.rom", "note": "N88-BASIC main ROM (32 KB). Falls back to pseudo-BIOS if missing.", "path": "quasi88/n88.rom", "required": true, "size": 32768, "source_ref": "src/LIBRETRO/libretro.c:550-551"}, {"aliases": ["N88_0.ROM", "N88EXT0.ROM", "n88ext0.rom"], "name": "n88_0.rom", "note": "N88-BASIC V2 extension ROM 0 (8 KB). Needed by most software.", "path": "quasi88/n88_0.rom", "required": true, "size": 8192, "source_ref": "src/LIBRETRO/libretro.c:555"}, {"aliases": ["N88_1.ROM", "N88EXT1.ROM", "n88ext1.rom"], "name": "n88_1.rom", "note": "N88-BASIC V1H extension ROM 1 (8 KB). For V1 High-speed mode.", "path": "quasi88/n88_1.rom", "required": false, "size": 8192, "source_ref": "src/LIBRETRO/libretro.c:556"}, {"aliases": ["N88_2.ROM", "N88EXT2.ROM", "n88ext2.rom"], "name": "n88_2.rom", "note": "N88-BASIC V1S extension ROM 2 (8 KB). For V1 Standard mode.", "path": "quasi88/n88_2.rom", "required": false, "size": 8192, "source_ref": "src/LIBRETRO/libretro.c:557"}, {"aliases": ["N88_3.ROM", "N88EXT3.ROM", "n88ext3.rom"], "name": "n88_3.rom", "note": "N88-BASIC extension ROM 3 (8 KB). Older V2 extension.", "path": "quasi88/n88_3.rom", "required": false, "size": 8192, "source_ref": "src/LIBRETRO/libretro.c:558"}, {"aliases": ["N88N.ROM", "N80.ROM", "n80.rom"], "name": "n88n.rom", "note": "N-BASIC ROM (32 KB). For PC-8001 compatible N-BASIC mode.", "path": "quasi88/n88n.rom", "required": false, "size": 32768, "source_ref": "src/LIBRETRO/libretro.c:559"}, {"aliases": ["DISK.ROM", "N88SUB.ROM", "n88sub.rom"], "hle_fallback": true, "name": "disk.rom", "note": "Disk subsystem ROM (2 KB, 2D type). Falls back to pseudo-BIOS if missing.", "path": "quasi88/disk.rom", "required": false, "size": 2048, "source_ref": "src/LIBRETRO/libretro.c:552-553"}, {"aliases": ["N88KNJ1.ROM", "KANJI1.ROM", "kanji1.rom"], "name": "n88knj1.rom", "note": "Kanji ROM level 1 (128 KB). Required for Japanese text display.", "path": "quasi88/n88knj1.rom", "required": false, "size": 131072, "source_ref": "src/LIBRETRO/libretro.c:560"}, {"aliases": ["N88KNJ2.ROM", "KANJI2.ROM", "kanji2.rom"], "name": "n88knj2.rom", "note": "Kanji ROM level 2 (128 KB). Extended kanji character set.", "path": "quasi88/n88knj2.rom", "required": false, "size": 131072, "source_ref": "src/LIBRETRO/libretro.c:561"}, {"aliases": ["N88JISHO.ROM", "JISYO.ROM", "jisyo.rom"], "name": "n88jisho.rom", "note": "Dictionary ROM (512 KB). Japanese dictionary lookup.", "path": "quasi88/n88jisho.rom", "required": false, "size": 524288, "source_ref": "src/LIBRETRO/libretro.c:562"}, {"aliases": ["FONT.ROM"], "hle_fallback": true, "name": "font.rom", "note": "ANK font ROM (2 KB). Falls back to built-in font or kanji ROM glyphs.", "path": "quasi88/font.rom", "required": false, "size": 2048, "source_ref": "src/LIBRETRO/libretro.c:566"}, {"aliases": ["FONT2.ROM"], "hle_fallback": true, "name": "font2.rom", "note": "Second font ROM (up to 4 KB). Falls back to built-in ANH font.", "path": "quasi88/font2.rom", "required": false, "size": 4096, "source_ref": "src/LIBRETRO/libretro.c:576"}, {"aliases": ["FONT3.ROM"], "hle_fallback": true, "name": "font3.rom", "note": "Third font ROM (up to 4 KB). Zeroed out if missing.", "path": "quasi88/font3.rom", "required": false, "size": 4096, "source_ref": "src/LIBRETRO/libretro.c:588"}], "notes": "Files go in <system_dir>/quasi88/ or directly in <system_dir>/.\nThe pseudo-BIOS covers N88-BASIC V2 and the disk subsystem at a basic\nlevel. For full compatibility (N-BASIC, V1H/V1S modes, dictionary lookup,\nkanji display), real ROM files are needed.\n\nCore option \"quasi88_basic_mode\" selects N88 V2, N88 V1H, N88 V1S,\nor N mode. Each mode requires its corresponding ROM. N mode emulates\nPC-8001 series (N-BASIC) and requires n88n.rom.\n", "profiled_date": "2026-03-29", "source": "https://github.com/libretro/quasi88-libretro", "source_commit": "b5a0e044a914c9a6b8d7b2dd2ddd152f93d35687", "systems": ["nec-pc-88", "nec-pc-80"], "type": "libretro", "upstream": "https://www.retropc.net/showzoh/quasi88/"}


id: quicknes
name: QuickNES
type: libretro
classification: community_fork
source: https://github.com/libretro/QuickNES_Core
upstream: https://github.com/kode54/QuickNES
source_commit: dbf19f73e3eb9701d1c7f5898f57c097e05c9fbd
profile_json:
{"core_classification": "community_fork", "core_version": "1.0-WIP", "cores": ["quicknes"], "display_name": "Nintendo - NES / Famicom (QuickNES)", "emulator": "QuickNES", "files": [], "notes": "NES emulator by blargg (Shay Green), maintained by kode54.\nNES has no BIOS. All palettes compiled in.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/QuickNES_Core", "source_commit": "dbf19f73e3eb9701d1c7f5898f57c097e05c9fbd", "systems": ["nintendo-nes"], "type": "libretro", "upstream": "https://github.com/kode54/QuickNES"}


id: race
name: RACE (Neo Geo Pocket)
type: libretro
classification: community_fork
source: https://github.com/libretro/RACE
upstream: https://github.com/8bitpsp/race
source_commit: 171950ea64c96ead503340ed60fa7ba18f56325c
profile_json:
{"analysis": {"npbios": {"filename": "NPBIOS.BIN", "loaded_by": "race-memory.c:loadBIOS()", "note": "loadBIOS() is wrapped in #if 0 and always returns 0 in the libretro port.\nIn upstream (8bitpsp/race, alekmaul/race), the function is live and loads\nNPBIOS.BIN optionally, falling back to HLE if not found.\n", "size": 65536, "source_ref": "race-memory.c:337-361", "status": "disabled", "upstream_ref": "memory.cpp:346-365 (8bitpsp/race)", "upstream_status": "optional"}}, "core_classification": "community_fork", "core_version": "v2.16", "cores": ["race"], "display_name": "SNK - Neo Geo Pocket / Color (RACE)", "emulator": "RACE (Neo Geo Pocket)", "files": [], "notes": "RACE is a Neo Geo Pocket and Neo Geo Pocket Color emulator originally by\nJudge_ (MHE), ported to GP2X by Flavor, to PSP by Akop Karapetyan, modified\nby theelf, then adapted for libretro.\n\nNo external BIOS files are required. The upstream versions (GP2X, PSP) support\noptional loading of NPBIOS.BIN, but the libretro port disabled it entirely\nwith #if 0 in race-memory.c:loadBIOS(). The comment explains: \"Using a real\nbios file causes nothing but issues.\"\n\nThe core uses a software HLE approach: a compiled-in koyote_bin RAM dump\n(post-boot console state) is copied into mainram at startup, a fake SWI jump\ntable is built at cpurom[0xE000], and doBios() in tlcs900h.c handles 33 BIOS\nfunctions in software. The Z80 sound CPU is emulated via cz80 or DrZ80.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/RACE", "source_commit": "171950ea64c96ead503340ed60fa7ba18f56325c", "systems": ["snk-ngp", "snk-ngpc"], "type": "libretro", "upstream": "https://github.com/8bitpsp/race"}


id: real3doplayer
name: Real3DOPlayer
type: standalone
classification: other
source: http://www.arts-union.ru/node/23
upstream: closed-source
profile_json:
{"author": "AltmerSoft (Maxim Grishin)", "core_classification": "other", "core_version": "1.0.32", "cores": ["real3doplayer", "Real3DOPlayer", "REAL3DOPLAYER"], "display_name": "The 3DO Company - 3DO (Real3DOPlayer)", "emulator": "Real3DOPlayer", "files": [{"agnostic": true, "config_key": "ext-rom", "description": "3DO system BIOS ROM", "max_size": 3145727, "name": "panafz10e-anvil.bin", "note": "Any 3DO system ROM is accepted, under any name and from any directory the user picks. The file is measured, then searched on four byte boundaries for the RomTag signature, and it is taken as the BIOS when the header names itself \"rom\". A file of 3 MB or more is rejected unread. The emulator will not start until one is found, and the interface lists it above the discs.", "required": true, "source_ref": "Real3DOPlayer 1.0.32 MainActivity.java:100-101 (scan and BIOS name), MainActivity.java:539-543,583-584 (refusal without it), MainActivity.java:412,469 (ext-rom), libphoenixcore.so arm64-v8a 0xaa0e0-0xaa118 (size gate), 0xaa140-0xaa1b0 (RomTag scan and header read), 0xaa218-0xaa27c (\"rom\" test), 0xdc43c-0xdc53c (dispatch and list), 0xdd228-0xdd2e0 (nameOfBios), 0xdd390-0xdd908 (directory scan and extensions), 0x8f6f0-0x8f71c (1 MB window)", "system": "3do", "validation": ["size"]}, {"agnostic": true, "config_key": "ext-font", "description": "3DO kanji font ROM", "max_size": 3145727, "name": "panafz1j-kanji.bin", "note": "Found by the same scan of the same directory, and taken as the font when the RomTag header names itself \"rom2\". Held in its own list and mapped into a second 1 MB window of the machine. Japanese titles draw their kanji from it; the emulator starts and runs without one, and the core carries GRAFERR_NO_FONT and GRAFERR_BADFONTFILE for that case.", "required": false, "source_ref": "Real3DOPlayer 1.0.32 MainActivity.java:413,471 (ext-font), libphoenixcore.so arm64-v8a 0xaa2e8-0xaa34c (\"rom2\" test), 0xdc4d0-0xdc52c (dispatch and list), 0xdd9dc-0xdd9e0 (third scan pass), 0xe98bc-0xe98cc (Library/FONT-ROM), 0x8f74c-0x8f780 (1 MB window)", "system": "3do", "validation": ["size"]}], "mode": "standalone", "notes": "Android package ru.vastness.altmer.real3doplayer, closed source, published by the\nauthor of the Phoenix Emulation Project and reached by ES-DE through its\nREAL3DOPLAYER find rule. The build read here is app-release.apk of 2019-11-19,\ntaken from real3DOPlayer_free_1.0.32.zip on the author's own site, carrying the\ncertificate sha256 336dca7bf758d4d4d3e31783a1cb3f777cf0f0791ff6b1a8bbf698892f8860a9\n(C=RU, L=Tula, O=AltmerSoft, CN=MAXIM GRISHIN): versionCode 33, minSdk 14,\ntargetSdk 23, seven ABIs. Java line numbers below are jadx output of that build and\nnative addresses are its arm64-v8a library; the armeabi-v7a library carries the same\nstrings and the same constants. The decompiled tree published as\nBoUnCe587/Real3DOPlayer was rejected: it is signed with the AOSP test key\na40da80a59d170caa950cf15c18c454d47a39b26989d8b640ecd745ba71bf5dc.\n\nOne system is emulated, 3DO Interactive Multiplayer, in libphoenixcore.so behind a\nJNI bridge (NativeCore.java:6-51). The library names itself \"PhoenixEmuProject core\n2.8.21\" and builds the console out of MADAM, CLIO, SPORT, CD-ROM, BIOS, FONT-ROM,\nFMV-ROM and NVRAM devices.\n\nThe user points the app at one directory holding both the discs and the ROMs, shown\nas \"Current ISOs and BIOS path\". countGames lists it, keeping the extensions bin,\ncdi, img, iso, nrg and rom, and offers every file to three adapters in turn: CD\nimage, then BIOS, then font ROM (0xdd390-0xdd9e0, dispatch at 0xdc43c). An external\nlauncher can instead pass explicit paths through the intent extras rom, cd and font,\nwhich become the config keys ext-rom, ext-cd and ext-font\n(MainActivity.java:469-471,412-414).\n\nNothing is recognised by name. A ROM candidate is measured, and a file of 3 MB or\nmore is dropped before it is read; the remainder is scanned on four byte boundaries\nfor the RomTag signature 01 5A 5A 5A 5A 5A 01 00, and the 0x84 byte header at that\npoint is read back. The null terminated string at header offset 0x28 is what sorts\nthe file: \"rom\" fills the BIOS list, \"rom2\" the font list, and \"fmvrom\" is compared\nfor but never requested (0xaa0e0-0xaa350). Running that scan over the published 3DO\ndumps sorts every system BIOS into \"rom\" and every kanji dump into \"rom2\", the\n512 KB arcade ROM and the 933636 byte FZ-1 font included.\n\nThe BIOS is the one file the app refuses to run without: an empty\nNativeCore.nameOfBios() raises \"BIOS not found.\" and returns instead of starting the\nemulator, and at startup it raises \"Select 3DO directory on SD card with BIOS and\nCD-images.\" (MainActivity.java:539-543,583-584). Nothing gates on the font ROM.\n\nThe md5 of the loaded BIOS is compared against a48e6746bd7edec0f40cff078f0bb19f, the\nPanasonic FZ-10 PAL ANVIL dump, and the outcome is passed as one construction\nargument of the device set (0x8eea0-0x8ef58, again at 0x916c0-0x916f4). It selects\nbehaviour for that dump and is not an acceptance test: acceptance is the RomTag.\nFour further md5 constants (5df7f21286290b2b4e9bd939f747f985,\ndacffcf51e54e76b68fb62ec73faff42, 0da811a327361f9a3d7dca63ad503f30,\n2536bf786f05af221038313a3e28f9aa) are all compared against the md5 taken for the\nCD-ROM device, so they identify game discs rather than firmware.\n\nThe FMV-ROM device is built but can never be fed: the ROM adapter is only ever\nconstructed for tags \"rom\" and \"rom2\" (0xdc4e8, 0xe9784, 0xe98bc), the frontend\nregisters only Library/CD-ROM, Library/BIOS and Library/FONT-ROM (0xe965c, 0xe9794,\n0xe98cc), and no ext-fmv key exists.\n\nFiles the app makes for itself, in its storage directory rather than the scan\ndirectory: nvram.bin, the 32 KB console save area, erasable from the interface;\nconfigs.xml and settings.ini; save states; and the controller maps. madam.bin and\nclio.bin name 2 KB and 64 KB regions of the emulator's own state blob and are\nreached only in mode 2 (0x8ce8c-0x8d064).\n", "profiled_date": "2026-08-12", "source": "http://www.arts-union.ru/node/23", "systems": ["3do"], "type": "standalone", "upstream": "closed-source"}


id: redbook
name: Redbook
type: libretro
classification: pure_libretro
source: https://github.com/libretro/redbook
source_commit: 43544bb988f37a8f3df5af5d2c6f89dd255b8235
profile_json:
{"core_classification": "pure_libretro", "core_version": "1.0", "cores": ["redbook"], "display_name": "Redbook Audio Player", "emulator": "Redbook", "files": [], "notes": "Audio CD player core. Plays Red Book audio CDs and CUE/BIN images.\nOriginal libretro creation by Brad Parker, no upstream emulator.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/redbook", "source_commit": "43544bb988f37a8f3df5af5d2c6f89dd255b8235", "systems": [], "type": "libretro"}


id: redream
name: Redream
type: libretro
source: https://github.com/libretro/redream
profile_json:
{"cores": ["redream"], "emulator": "Redream", "files": [{"destination": "dc/boot.bin", "md5": "e10c53c2f8b90bab96ead2d368858623", "name": "dc_bios.bin", "required": true, "sha1": "8951d1bb219ab2ff8583033d2119c899cc81f18c", "size": 2097152, "system": "sega-dreamcast"}, {"destination": "dc/flash.bin", "md5": "0a93f7940c455905bea6e392dfde92a4", "name": "dc_flash.bin", "required": true, "sha1": "94d44d7f9529ec1642ba3771ed3c5f756d5bc872", "size": 131072, "system": "sega-dreamcast"}], "source": "https://github.com/libretro/redream", "systems": ["sega-dreamcast"], "type": "libretro"}


id: reminiscence
name: REminiscence
type: libretro
classification: community_fork
source: https://github.com/libretro/REminiscence
upstream: https://github.com/cyxx/REminiscence
source_commit: e80d7b1aa287010e30c54f72252a9303173f1c7e
profile_json:
{"analysis": {"content_extensions": ["map"], "content_type": "game_data", "data_files_location": "same directory as loaded content", "detection_order": [{"file": "DEMO_UK.ABA", "type": "DOS Demo"}, {"file": "INTRO.SEQ", "type": "DOS CD"}, {"file": "LEVEL1.MAP", "type": "DOS Floppy"}, {"file": "LEVEL1.LEV", "type": "Amiga (rejected by libretro port)"}, {"file": "DEMO.LEV", "type": "Amiga Demo (rejected by libretro port)"}], "filesystem_access": true, "game_data_files": {"demo": {"archive": "DEMO_UK.ABA (contains all demo data in a single archive)"}, "dos_cd": {"additional": ["INTRO.SEQ, CREDITS.SEQ, and other .SEQ cutscene videos (SEQ playback disabled in libretro build)"]}, "dos_floppy": {"optional": ["intro, options, journal, etc. (.mod files for cutscene music)", "VOICE.VCE (SegaCD voice data)"], "required": ["LEVEL1.MAP through LEVEL7.MAP (level map data)", "LEVEL1.* (MBK, PGE, PAL, CT, SPC, RP, ANI, OBJ, TBN, SGD, BNQ, LEV)", "GLOBAL.ICN, GLOBAL.SPC, GLOBAL.FIB", "PERSO.SPR, PERSO.OFF", "FB_TXT.FNT", "ENGCINE.TXT or equivalent language file", "ENGCINE.BIN or equivalent"]}}, "system_directory_used": false}, "core_classification": "community_fork", "core_version": "0.3.6", "cores": ["reminiscence"], "display_name": "Flashback (REminiscence)", "emulator": "REminiscence", "exclusion_note": "Game engine core. All data files (game data, music, voice) are loaded from the content directory alongside the .MAP file via FileSystem. The core never accesses the system directory (RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY is never called). The .info declares firmware_count=0, consistent with the code.\n", "files": [], "notes": "Game engine re-implementation of Flashback (Delphine Software, 1992) by Gregory Montoir,\nported to libretro by Stuart Carnie. Version 0.3.6 (upstream is at 0.5.5).\n\nThe core sets need_fullpath = true and valid_extensions = \"map\" (libretro.cpp:66).\nContent loading (retro_load_game) extracts the parent directory from the provided .MAP\nfile path and uses it as the data root via FileSystem (libretro.cpp:194-196).\n\nVersion detection (libretro.cpp:125-148) probes for these files in order:\n  DEMO_UK.ABA -> DOS Demo\n  INTRO.SEQ   -> DOS CD\n  LEVEL1.MAP  -> DOS\n  LEVEL1.LEV  -> Amiga\n  DEMO.LEV    -> Amiga Demo\nOnly kResourceTypeDOS is accepted (line 199); Amiga data is rejected.\n\nLanguage detection (libretro.cpp:150-174) probes for:\n  ENGCINE.TXT -> English\n  FR_CINE.TXT -> French\n  GERCINE.TXT -> German\n  SPACINE.TXT -> Spanish\n  ITACINE.TXT -> Italian\n  FRCINE.TXT  -> French (Amiga)\nFalls back to English if none found.\n\nAll game data files are loaded from the content directory via FileSystem (fs.cpp),\nwhich scans the directory and matches filenames case-insensitively (strcasecmp at\nfs.cpp:52). The resource system (resource.cpp) loads files by constructing names\nlike \"LEVEL1.MAP\", \"GLOBAL.ICN\", \"PERSO.SPR\", \"FB_TXT.FNT\", etc.\n\nThe core never calls RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY. All data files must live\nalongside the loaded .MAP content file. No BIOS or firmware files; the required files\nare the original Flashback DOS game data.\n\nMusic loaded from .mod files (mod_player.cpp, staticres.cpp:3198-3225). Optional;\nthe core has a built-in SFX player for in-game action music (sfx_player.cpp with\nembedded music data in staticres.cpp).\n\nVOICE.VCE from the SegaCD version can be placed in the data directory for in-game\nvoice playback (resource.cpp:900-941). Optional.\n\nSEQ cutscene playback is disabled in the libretro build: g_options is zero-initialized\n(game.cpp:30) and rs.cfg is never parsed, so use_seq_cutscenes defaults to false.\nThe core always uses polygon-based cutscenes (cutscene.cpp).\n\nUpstream (0.5.5) additionally supports Amiga, Macintosh, PC98 data, MIDI music,\nOGG playback, SEQ cutscenes, and widescreen modes. None of these are in the\nlibretro port.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/REminiscence", "source_commit": "e80d7b1aa287010e30c54f72252a9303173f1c7e", "systems": ["flashback"], "type": "libretro", "upstream": "https://github.com/cyxx/REminiscence"}


id: remotejoy
name: RemoteJoy
type: libretro
classification: pure_libretro
source: https://github.com/libretro/libretro-remotejoy
upstream: https://github.com/akiraink/RemoteJoyLite
source_commit: 61211d841d06955081cf730e8f78fa69ba5dec6a
profile_json:
{"core_classification": "pure_libretro", "core_version": "v1", "cores": ["remotejoy"], "display_name": "PSP RemotePlay (RemoteJoy)", "emulator": "RemoteJoy", "files": [], "notes": "USB streaming receiver for PSP. Connects via libusb to a PSP running the\nRemoteJoy plugin (Sony VID 0x054C, PIDs 0x01C9/0x02D2) and displays\nvideo frames at 480x272. No file I/O. Protocol reimplemented from\nRemoteJoyLite Win32 client constants, not a port.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/libretro-remotejoy", "source_commit": "61211d841d06955081cf730e8f78fa69ba5dec6a", "systems": [], "type": "libretro", "upstream": "https://github.com/akiraink/RemoteJoyLite"}


id: retro8
name: Retro8
type: libretro
classification: game_engine
source: https://github.com/libretro/retro8
upstream: https://github.com/Jakz/retro8
source_commit: a235ff8e3ca1b44bcf88293748d5a492c76a2c7b
profile_json:
{"core_classification": "game_engine", "core_version": "0.1b", "cores": ["retro8"], "display_name": "PICO-8 (Retro8)", "emulator": "Retro8", "exclusion_note": "all engine resources (font, Lua API, color palette, audio synth) compiled into the binary", "files": [], "notes": "Open-source PICO-8 fantasy console reimplementation by Jacopo Santoni.\nRuns .p8 and .p8.png cartridge files. The PICO-8 font is compiled into the\nbinary as a byte array (gen/pico_font.h, loaded in gfx.cpp:9). The Lua API\nshim is compiled as a string constant (gen/lua_api.h, loaded in\nlua_bridge.cpp:1126). The core never calls GET_SYSTEM_DIRECTORY and performs\nno file I/O from the system directory.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/retro8", "source_commit": "a235ff8e3ca1b44bcf88293748d5a492c76a2c7b", "systems": ["pico8"], "type": "libretro", "upstream": "https://github.com/Jakz/retro8"}


id: retrodream
name: RetroDream
type: libretro
classification: community_fork
source: https://github.com/libretro/redream-next
upstream: https://github.com/inolen/redream
source_commit: d826ece7f987c6fed336246e7272e2ded6cefa69
profile_json:
{"core_classification": "community_fork", "core_version": "Git", "cores": ["retrodream"], "display_name": "Sega - Dreamcast (RetroDream)", "emulator": "RetroDream", "files": [{"hle_fallback": true, "md5": ["a5c6a00818f97c5e3e91569ee22416dc", "37c921eb47532cae8fb70e5d987ce91c", "f2cd29d09f3e29984bcea22ab2e006fe", "e10c53c2f8b90bab96ead2d368858623"], "name": "boot.bin", "note": "Dreamcast boot ROM. Four known variants accepted.", "path": "boot.bin", "required": false, "size": 2097152, "source_ref": "src/guest/rom/boot.c:12-80", "system": "sega-dreamcast", "validation": ["size", "md5"]}, {"name": "flash.bin", "note": "Dreamcast flash memory. Written back on shutdown.", "path": "flash.bin", "required": false, "size": 131072, "source_ref": "src/guest/rom/flash.c:25-71", "system": "sega-dreamcast", "validation": ["size"]}], "notes": "Fork of the last GPLv3 release of redream (inolen) before it went closed-source.\nThe core has HLE bootstrap -- when boot.bin is missing, bios_invalid_instr()\ntraps at PC=0x0 and calls bios_boot(), which loads IP.BIN and 1ST_READ.BIN\ndirectly from disc, sets up syscall vectors, and starts execution at 0xac008300.\n\nThe fork sets appdir to the RetroArch system directory root\n(retro_host.c:216-217), unlike the upstream which appends /dc\n(upstream retro_host.c:196-198). The .info still declares dc/ prefix paths\nmatching the upstream, not this fork.\n\nboot.bin is validated against four known MD5 hashes (boot.c:25-30).\nValidation failure logs a warning but the core continues via HLE.\n\nflash.bin is read/write. If missing, bios_validate_flash() resets all\npartitions to defaults. Saved back to disk on shutdown (flash.c:197-199).\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/redream-next", "source_commit": "d826ece7f987c6fed336246e7272e2ded6cefa69", "systems": ["sega-dreamcast"], "type": "libretro", "upstream": "https://github.com/inolen/redream"}


id: romcleaner
name: ROM Cleaner
type: libretro
classification: pure_libretro
source: https://github.com/JesseTG/rom-cleaner
upstream: https://github.com/JesseTG/rom-cleaner
source_commit: d2f474a439ab1a642aaed11caa4419d3663062c1
profile_json:
{"core_classification": "pure_libretro", "core_version": "1.0.0", "cores": ["romcleaner"], "display_name": "ROM Cleaner", "emulator": "ROM Cleaner", "files": [], "notes": "Utility core that simulates blowing dust off a cartridge via microphone\ninput. All visual and audio assets are compiled into the binary.\nNo external files required.\n", "profiled_date": "2026-03-25", "source": "https://github.com/JesseTG/rom-cleaner", "source_commit": "d2f474a439ab1a642aaed11caa4419d3663062c1", "systems": [], "type": "libretro", "upstream": "https://github.com/JesseTG/rom-cleaner"}


id: rosalies-mupen-gui
name: Rosalie's Mupen GUI
type: standalone
classification: community_fork
source: https://github.com/Rosalie241/RMG
upstream: https://github.com/Rosalie241/RMG
source_commit: 9dced048f747085f942f55941dd4304279acc145
profile_json:
{"core_classification": "community_fork", "core_version": "v0.9.0", "cores": ["rosalies-mupen-gui", "RMG", "com.github.Rosalie241.RMG"], "display_name": "Nintendo - Nintendo 64 (Rosalie's Mupen GUI)", "emulator": "Rosalie's Mupen GUI", "files": [{"aliases": ["64DD_IPL_v12_JPN.bin", "64DD_IPL.bin"], "description": "64DD IPL ROM (Japanese retail)", "name": "64DD_IPL_JP.n64", "note": "Selected when the disk system data holds the Japanese region word 0xe848d316, which covers the retail library. The path is set in the settings dialog and no name is fixed by the code. Loaded whole, then byteswapped after identifying the first word as one of 0x80270740 (z64), 0x40072780 (n64) or 0x27804007 (v64); any other value disables 64DD. Size is not checked and no hash is computed.\n", "region": ["japan"], "required": true, "source_ref": "Source/RMG-Core/MediaLoader.cpp:47-74, Source/RMG-Core/Settings.cpp:284-286, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:434-445", "system": "nintendo-64dd"}, {"aliases": ["64DD_IPL_USA.bin", "IPL_USA.n64"], "description": "64DD IPL ROM (American retail)", "name": "64DD_IPL_US.n64", "note": "Selected when the disk system data holds the US region word 0x2263ee56. The other two IPL settings are not consulted for such a disk, so no substitution is possible. Same load path, format check and absence of size or hash validation as the Japanese image.\n", "region": ["north-america"], "required": true, "source_ref": "Source/RMG-Core/MediaLoader.cpp:54-56, Source/RMG-Core/Settings.cpp:287-289, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:434-445", "system": "nintendo-64dd"}, {"aliases": ["64DD_IPL_DEV.bin", "IPL_DEV.n64"], "description": "64DD IPL ROM (Japanese development)", "name": "64DD_IPL_DEV.n64", "note": "Selected when the disk system data holds the development region word 0x00000000, and also whenever the valid system data block sits at index 2, 3, 10 or 11, which is the development disk layout. Same load path, format check and absence of size or hash validation as the Japanese image.\n", "required": true, "source_ref": "Source/RMG-Core/MediaLoader.cpp:57-59, Source/RMG-Core/Settings.cpp:290-292, Source/3rdParty/mupen64plus-core/src/main/main.c:1190-1255, Source/3rdParty/mupen64plus-core/src/device/dd/disk.c:412-475", "system": "nintendo-64dd"}], "mode": "standalone", "notes": "Qt front end by Rosalie Wanders built around its own vendored fork of\nmupen64plus-core, compiled with OSD=0, NEW_DYNAREC=1 and VULKAN=0\n(Source/3rdParty/CMakeLists.txt:74-96). Forks of the RSP plugins hle, cxd4\nand parallel, the video plugins GLideN64, parallel and angrylion-plus, and\nthe raphnetraw input plugin are vendored alongside it, plus RMG's own audio\nand input plugins. ES-DE runs it as `--nogui -q <rom>` for both n64 and\nn64dd. Against mupen64plus-core 6dca4c15 the media loader, the DD region\nenum and load_dd_rom are unchanged; the fork diverges on SDL3, video\ncapture, netplay and the dynarec.\n\nCartridge boot needs no boot ROM. The PIF boot ROM is simulated\n(device/pif/bootrom_hle.c:48, reached from r4300/interrupt.c:448,499) and the\nCIC-NUS-6105 challenge is answered by an algorithm rather than a stored\ntable (device/pif/n64_cic_nus_6105.c:93).\n\nWhich 64DD IPL is used is not a user choice. scan_and_expand_disk_format\naccepts a disk only when one of eight candidate blocks holds system data\ncarrying a known region word, and marks it development when that block sits\nat index 2, 3, 10 or 11 (device/dd/disk.c:412-475). The core hands the\nresulting region to the front end, which answers with one of three\nconfigured paths, or with nothing when the region stayed unknown\n(RMG-Core/MediaLoader.cpp:47-74). All three settings default to empty\n(RMG-Core/Settings.cpp:284-292) and are filled from a file dialog filtered\non *.n64 (RMG/UserInterface/Dialog/SettingsDialog.cpp:1377-1390).\n\nA bare .ndd or .d64 opens as a disk with no cartridge\n(RMG-Core/Rom.cpp:111-133), which is the route ES-DE takes, so the IPL is\nthe only boot ROM and the core bails before starting when it is absent\n(main/main.c:1723-1739). Passing a cartridge with --disk\n(RMG/main.cpp:219,232,287) boots the cartridge and switches 64DD off instead.\nDisk content inside a .zip or .7z is extracted to the user cache directory\nfirst (RMG-Core/MediaLoader.cpp:164-215, RMG-Core/Archive.cpp:188-227).\n\nTransfer Pak carts come from the input profile, which copies its GameboyRom\nand GameboySave paths into the per player core settings\n(RMG-Input/main.cpp:317-318,469-480, RMG-Core/MediaLoader.cpp:76-114). The\ncore rejects a ROM under 32 KiB and an unknown cart type byte at 0x147\n(device/gb/gb_cart.c:999-1012) and fixes no name, size or hash, so neither\nthe cart nor its save carries an entry here.\n\nData the install places in the shared data directory (CMakeLists.txt:130-153;\n/usr/share/RMG, or Data beside the executable for portable and Windows\nbuilds, Directories.cpp:406-431): mupen64plus.ini, read as the ROM database\n(main/rom.c:585-604) and used by GLideN64 to locate that same directory\n(mupenplus/CommonAPIImpl_mupenplus.cpp:77-85); GLideN64.custom.ini, per ROM\noverrides keyed on the uppercased header name\n(mupenplus/Config_mupenplus.cpp:329-348); font.ttf, reached only after the\nconfigured font name fails both as a system font path and as a full path\n(TextDrawer.cpp:202-230); Cheats/<name>.cht, named from the header CRC pair\nand country code, or from the ROM MD5 when all three are zero, and merged\nwith a user copy under the config directory\n(RMG-Core/Cheats.cpp:82-116,579-598); InputProfileDB.json\n(RMG-Input/Utilities/InputProfileDB.cpp:26-36); gamecontrollerdb.txt\n(RMG-Input/main.cpp:1063-1069); and for VRU builds\nvosk-model-small-en-us-0.15.zip, extracted into the user data directory when\nany of the thirteen model files it checks for is missing\n(RMG-Input/VRU.cpp:154-232). The published AppImage is the features-on build,\nso the model ships with it (.github/workflows/build.yml:10,79,91).\n\nOptional files with no canonical artifact: a .qss stylesheet under Styles in\nthe shared data directory (RMG/UserInterface/MainWindow.cpp:405-425), hi-res\ntexture packs under hires_texture in the user data directory\n(GLideN64 Config.cpp:118-123), and alp_screen.vert and alp_screen.frag, which\nangrylion-plus opens as working directory relative paths before falling back\nto its embedded shaders (angrylion-plus output/vdac.c:120-175,257-258).\n\nWritten rather than obtained: mupen64plus.cfg in the config directory,\nGLideN64.ini written there by the plugin settings pages and read back from\nboth that directory and the shared data directory\n(GLideNUI/Config_GLideNUI.cpp:20-21,45-46, GLideNUI/Settings.cpp:352-368),\nthe mempak, eeprom, flashram and sram saves opened with default\ncontent when absent (main/main.c:1712-1716), 64DD disk saves in the format\nthe SaveDiskFormat setting selects (main/main.c:1286-1298), savestates,\nscreenshots, the ROM browser header cache\n(RMG-Core/CachedRomHeaderAndSettings.cpp:152), the GLideN64 texture cache and\ntexture dumps (GLideN64 Config.cpp:120-123) and the parallel-rdp pipeline\ncache (video-parallel vulkan/device.cpp:760,834).\n\nTwo files in the tree this build never reads: the vendored core's\ndata/mupencheat.txt, which RMG neither installs nor parses since cheats use\nits own .cht format and the core's cheat.c opens no file, and cxd4's\nrsp_conf.bin, whose reader is the zilmar variant of update_conf behind\n#if !defined(M64P_PLUGIN_API); the variant this build compiles takes settings\nfrom the core config API and ignores its filename argument\n(mupen64plus-rsp-cxd4/module.c:89-99,652-673).\n", "profiled_date": "2026-08-08", "source": "https://github.com/Rosalie241/RMG", "source_commit": "9dced048f747085f942f55941dd4304279acc145", "systems": ["nintendo-64", "nintendo-64dd"], "type": "standalone", "upstream": "https://github.com/Rosalie241/RMG"}


id: rpcs3
name: RPCS3
type: standalone
classification: official_port
source: https://github.com/RPCS3/rpcs3
upstream: https://github.com/RPCS3/rpcs3
source_commit: 3d587726a23f514be0e7c3ac43e2db0cf2fe931a
profile_json:
{"core_classification": "official_port", "core_version": "0.0.35", "cores": ["rpcs3"], "dev_flash": {"bdplayer": {"files": [{"name": "bdp_bdmv.self", "purpose": "BD-MV player"}, {"name": "bdj.self", "purpose": "BD-J (Java) player"}], "note": "Blu-ray disc player modules", "path": "dev_flash/bdplayer/", "source_ref": "rpcs3/Crypto/key_vault.h:257-258"}, "certs": {"note": "SSL root certificates for PSN and HTTPS connections", "path": "dev_flash/data/cert/", "source_ref": "rpcs3/Emu/Cell/Modules/cellSsl.cpp:110"}, "fonts": {"files": [{"name": "SCE-PS3-RD-R-LATIN.TTF", "required": true, "type": "Rodin Sans Serif Regular Latin"}, {"name": "SCE-PS3-RD-L-LATIN.TTF", "type": "Rodin Sans Serif Light Latin"}, {"name": "SCE-PS3-RD-B-LATIN.TTF", "type": "Rodin Sans Serif Bold Latin"}, {"name": "SCE-PS3-RD-R-LATIN2.TTF", "type": "Rodin Sans Serif Regular Latin2"}, {"name": "SCE-PS3-RD-L-LATIN2.TTF", "type": "Rodin Sans Serif Light Latin2"}, {"name": "SCE-PS3-RD-B-LATIN2.TTF", "type": "Rodin Sans Serif Bold Latin2"}, {"name": "SCE-PS3-MT-R-LATIN.TTF", "type": "Matisse Serif Regular Latin"}, {"name": "SCE-PS3-NR-R-JPN.TTF", "type": "NewRodin Gothic Regular Japanese"}, {"name": "SCE-PS3-NR-L-JPN.TTF", "type": "NewRodin Gothic Light Japanese"}, {"name": "SCE-PS3-NR-B-JPN.TTF", "type": "NewRodin Gothic Bold Japanese"}, {"name": "SCE-PS3-YG-R-KOR.TTF", "type": "YD Gothic Regular Korean"}, {"name": "SCE-PS3-SR-R-LATIN.TTF", "type": "Seurat Maru Gothic Regular Latin"}, {"name": "SCE-PS3-SR-R-LATIN2.TTF", "type": "Seurat Maru Gothic Regular Latin2"}, {"name": "SCE-PS3-SR-R-JPN.TTF", "type": "Seurat Maru Gothic Regular Japanese"}, {"name": "SCE-PS3-VR-R-LATIN.TTF", "type": "VAGR Sans Serif Round Latin"}, {"name": "SCE-PS3-VR-R-LATIN2.TTF", "type": "VAGR Sans Serif Round Latin2"}, {"name": "SCE-PS3-DH-R-CGB.TTF", "subdir": "SONY-CC/", "type": "Chinese GB font"}], "note": "PS3 system fonts used by cellFont API. Loaded from dev_flash/data/font/ and dev_flash/data/font/SONY-CC/ subdirectory. Games using cellFont will fail to render text without these.\n", "path": "dev_flash/data/font/", "source_ref": "rpcs3/Emu/Cell/Modules/cellFont.cpp:226-281"}, "ps1emu": {"files": [{"name": "ps1_newemu.self", "purpose": "PS1 emulator binary"}], "note": "PS1 Classics emulator. Booted when running PS1 game via ps1_newemu.self", "path": "dev_flash/ps1emu/", "source_ref": "rpcs3/Emu/System.cpp:1954"}, "ps2emu": {"note": "PS2 emulator components. Only present on fat PS3 models (CECHA/B/C/E). Includes me_iso_for_ps2emu.self and sv_iso_for_ps2emu.self (since FW 3.70).\n", "path": "dev_flash/ps2emu/", "source_ref": "rpcs3/Crypto/key_vault.h:219"}, "pspemu": {"files": [{"name": "psp_emulator.self", "purpose": "PSP emulator main binary"}, {"name": "psp_translator.self", "purpose": "PSP translator"}, {"name": "release/emulator_api.sprx", "purpose": "Emulator API"}, {"name": "release/emulator_drm.sprx", "purpose": "DRM handling"}], "note": "PSP emulator for PS3. Contains psp_emulator.self, psp_translator.self, and release/*.sprx", "path": "dev_flash/pspemu/", "source_ref": "rpcs3/Emu/System.cpp:1982, rpcs3/Crypto/key_vault.h:285-290"}, "sys_external": {"critical_file": "liblv2.sprx", "modules": ["liblv2.sprx", "libsysmodule.sprx", "libfs_utility_init.sprx", "libadec.sprx", "libatrac3plus.sprx", "libcelp8dec.sprx", "libcelpdec.sprx", "libcelpenc.sprx", "libddpdec.sprx", "libdtslbrdec.sprx", "libdtsdec.sprx", "libdtshdcoredec.sprx", "libdtshddec.sprx", "libm2aac.sprx", "libm2bc.sprx", "libm4aac.sprx", "libm4aac2ch.sprx", "libm4aac2chmod.sprx", "libmp3dec.sprx", "libmp3sdec.sprx", "libmpl1dec.sprx", "libtrhddec.sprx", "libwmadec.sprx", "libwmaprodec.sprx", "libwmalslbrdec.sprx", "libac3dec.sprx", "libvdec.sprx", "libdmux.sprx", "libdmuxpamf.sprx", "libpamf.sprx", "libvpost.sprx", "libsail.sprx", "libsailrec.sprx", "libgcm_sys.sprx", "libresc.sprx", "libio.sprx", "libcamera.sprx", "libgem.sprx", "libmic.sprx", "libusbpspcm.sprx", "libusbd.sprx", "libnetctl.sprx", "librudp.sprx", "libssl.sprx", "libhttp.sprx", "libhttps.sprx", "libhttputil.sprx", "libsysnet.sprx", "libsysutil.sprx", "libsysutil_ap.sprx", "libsysutil_avc2.sprx", "libsysutil_avc_ext.sprx", "libsysutil_np_eula.sprx", "libaudio.sprx", "libvoice.sprx", "libavconfext.sprx", "libsavedata.sprx", "libgame.sprx", "libgameexec.sprx", "libuserinfo.sprx", "libosklialog.sprx", "libsysconf.sprx", "libgifdec.sprx", "libjpgdec.sprx", "libjpgenc.sprx", "libpngdec.sprx", "libpngenc.sprx", "libsceNp.sprx", "libsceNp2.sprx", "libsceNpBasicLimited.sprx", "libsceNpClans.sprx", "libsceNpCommerce2.sprx", "libsceNpMatchingInt.sprx", "libsceNpPlus.sprx", "libsceNpSns.sprx", "libsceNpTrophy.sprx", "libsceNpTus.sprx", "libsceNpUtil.sprx", "libfont.sprx", "libfontFT.sprx", "libfreetype2.sprx", "librtc.sprx", "librtcalarm.sprx", "libl10n.sprx", "libkey2char.sprx", "libimejp.sprx", "libcrosscontroller.sprx", "libfiber.sprx", "libspurs_jq.sprx", "libspudll.sprx", "libmixer.sprx", "libsnd3.sprx", "libsynth2.sprx", "libovis.sprx", "libprint.sprx", "librec.sprx", "libremoteplay.sprx", "libscreenshot.sprx", "libsearch.sprx", "libmusic.sprx", "libmusicdecode.sprx", "libmusicexport.sprx", "libphoto.sprx", "libphotoexport.sprx", "libphotoimportutil.sprx", "libvideo.sprx", "libvideoplayer.sprx", "libvideoupload.sprx", "libnetaoi.sprx", "libpesmutility.sprx", "libbgdl.sprx", "libsubdisplay.sprx", "libdtcpiputility.sprx", "libsheap.sprx", "libsync2.sprx", "libminisSavedata.sprx", "libauthdialogutility.sprx", "libcrashdump.sprx", "liblv2dbg.sprx"], "note": "Primary firmware module directory. Contains decrypted .sprx modules loaded by liblv2.sprx at boot. RPCS3 can run these via LLE (low-level emulation) or fall back to HLE (high-level emulation) per module. liblv2.sprx is the kernel loader.\n", "path": "dev_flash/sys/external/", "source_ref": "rpcs3/Emu/Cell/PPUModule.cpp:2579"}, "sys_internal": {"note": "Internal system modules, e.g. libfs_utility_init.sprx", "path": "dev_flash/sys/internal/", "source_ref": "rpcs3/Emu/Cell/lv2/sys_prx.cpp:33"}, "vsh": {"files": [{"path": "vsh/module/vsh.self", "purpose": "XMB main executable", "required_for": "Boot VSH / XrossMediaBar"}, {"path": "vsh/etc/version.txt", "purpose": "Firmware version string"}, {"path": "vsh/module/eseibrd.sprx", "purpose": "System module (precompiled at boot)"}, {"path": "vsh/module/msmw2.sprx", "purpose": "Media streaming"}, {"path": "vsh/resource/explore/user/*.png", "purpose": "User avatar icons (000.png - 025.png)"}, {"path": "vsh/resource/explore/icon/icon_home.png", "purpose": "Home icon for game list"}], "note": "PS3 XMB interface. vsh.self is the main executable, booted via 'Boot VSH' menu.", "path": "dev_flash/vsh/", "source_ref": "rpcs3/rpcs3qt/main_window.cpp:272,734"}}, "dev_flash2": {"device": "CELL_FS_IOS:BUILTIN_FLSH2", "filesystem": "CELL_FS_FAT", "note": "Second flash partition, used for additional system data", "path": "dev_flash2/", "source_ref": "rpcs3/Emu/Cell/lv2/sys_fs.cpp:29"}, "dev_flash3": {"device": "CELL_FS_IOS:BUILTIN_FLSH3", "filesystem": "CELL_FS_FAT", "note": "Third flash partition", "path": "dev_flash3/", "source_ref": "rpcs3/Emu/Cell/lv2/sys_fs.cpp:28"}, "display_name": "Sony - PlayStation 3 (RPCS3)", "emulator": "RPCS3", "files": [{"name": "PS3UPDAT.PUP", "note": "PUP firmware package. Validated via SCEUF magic + HMAC-SHA1 per entry. Extracted to dev_flash/ at install time.", "required": true, "source_ref": "rpcs3/Loader/PUP.cpp:23-77", "storage": "large_file"}], "notes": "RPCS3 requires the official PS3 firmware (PS3UPDAT.PUP) from Sony. The PUP file is\na signed update package containing multiple TAR archives prefixed with \"dev_flash_\".\nDuring installation, RPCS3 extracts these TARs into the dev_flash/ directory structure.\n\nThe most critical component is dev_flash/sys/external/liblv2.sprx - without it, no\nPS3 game can boot. RPCS3 checks for its presence and shows a firmware install prompt\nif missing.\n\nMost sys/external modules can run in either LLE (real firmware code) or HLE (RPCS3\nreimplementation) mode. By default, liblv2.sprx loads libsysmodule.sprx which chains\nall other modules. Users can toggle individual modules between LLE/HLE.\n\nThe dev_flash/ structure mirrors the real PS3 NAND layout:\n- sys/external/  : Loadable firmware PRX modules\n- sys/internal/  : Internal system modules\n- vsh/           : Visual Shell (XMB interface)\n- data/font/     : System TTF fonts (16+ files)\n- data/cert/     : SSL certificates\n- ps1emu/        : PS1 backward compat emulator\n- ps2emu/        : PS2 backward compat emulator (fat models only)\n- pspemu/        : PSP emulator\n- bdplayer/      : Blu-ray disc player\n\nFirmware versions follow the X.XX format (e.g. 4.90). RPCS3 reads the version from\ndev_flash/vsh/etc/version.txt at startup.\n", "profiled_date": "2026-03-30", "source": "https://github.com/RPCS3/rpcs3", "source_commit": "3d587726a23f514be0e7c3ac43e2db0cf2fe931a", "systems": ["sony-playstation-3"], "type": "standalone", "upstream": "https://github.com/RPCS3/rpcs3"}


id: ruffle
name: ruffle
type: standalone
classification: game_engine
source: https://github.com/ruffle-rs/ruffle
upstream: https://github.com/ruffle-rs/ruffle
source_commit: f3a1263e164dc4cb56211ab1f113e1907730ce89
profile_json:
{"core_classification": "game_engine", "core_version": "0.5.0", "cores": ["ruffle"], "display_name": "Adobe Flash (Ruffle)", "emulator": "ruffle", "files": [{"description": "OpenH264 2.4.1 decoder library, Linux x86_64", "name": "libopenh264-2.4.1-linux64.7.so", "path": "video/libopenh264-2.4.1-linux64.7.so", "required": false, "sha256": "1392d21466bc638e68151b716d5b2086d54cd812afd43253f1adb5b6e0185f51", "source_ref": "video/external/src/decoder/openh264.rs:65-68, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, Linux aarch64", "name": "libopenh264-2.4.1-linux-arm64.7.so", "path": "video/libopenh264-2.4.1-linux-arm64.7.so", "required": false, "sha256": "e8ea7e42855ceb4a90e7bd0b3abeba0c58b5f97166e8b0a30eefd58e099557a4", "source_ref": "video/external/src/decoder/openh264.rs:73-76, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, Linux arm", "name": "libopenh264-2.4.1-linux-arm.7.so", "path": "video/libopenh264-2.4.1-linux-arm.7.so", "required": false, "sha256": "fd1dfb27d30bb72e903c9d2b4c650104a4369d2e7ffe8a4a533e8db2e7e9b19e", "source_ref": "video/external/src/decoder/openh264.rs:69-72, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, Linux x86", "name": "libopenh264-2.4.1-linux32.7.so", "path": "video/libopenh264-2.4.1-linux32.7.so", "required": false, "sha256": "b7cf0e407f99056d90cbf62787a34820a7595b2129b165319d50766e00a66704", "source_ref": "video/external/src/decoder/openh264.rs:61-64, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, macOS aarch64", "name": "libopenh264-2.4.1-mac-arm64.dylib", "path": "video/libopenh264-2.4.1-mac-arm64.dylib", "required": false, "sha256": "213ff93831cfa3dd6d7ad0c3a3403a6ceedf4ac1341e1278b5b869d42fefb496", "source_ref": "video/external/src/decoder/openh264.rs:81-84, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, macOS x86_64", "name": "libopenh264-2.4.1-mac-x64.dylib", "path": "video/libopenh264-2.4.1-mac-x64.dylib", "required": false, "sha256": "cc0ba518a63791c37571f3c851f0aa03a4fbda5410acc214ecd4f24f8d1c478e", "source_ref": "video/external/src/decoder/openh264.rs:77-80, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, Windows x86_64", "name": "openh264-2.4.1-win64.dll", "path": "video/openh264-2.4.1-win64.dll", "required": false, "sha256": "081b0c081480d177cbfddfbc90b1613640e702f875897b30d8de195cde73dd34", "source_ref": "video/external/src/decoder/openh264.rs:89-92, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}, {"description": "OpenH264 2.4.1 decoder library, Windows x86", "name": "openh264-2.4.1-win32.dll", "path": "video/openh264-2.4.1-win32.dll", "required": false, "sha256": "83270149640469c994a62cc32a6d8c0413cd7b802b7f1f2f532159f5bdc1cedd", "source_ref": "video/external/src/decoder/openh264.rs:85-88, 104-146, 173-191", "system": "flash", "validation": ["sha256"]}], "mode": "standalone", "notes": "Flash Player and Adobe AIR runtime written in Rust, playing SWF files of any\nActionScript version, as a desktop binary or as a WebAssembly browser build.\nDistribution is by nightly build: Batocera compiles the nightly-2026-01-31 tag\nand installs ruffle_desktop as ruffle, RetroDECK pulls the rs.ruffle.Ruffle\nFlathub build. ES-DE runs it as `ruffle --fullscreen <rom>`, Batocera as\n`ruffle <rom>`, RetroBat as `ruffle.exe --graphics <renderer> --force-align\n-q <quality> <rom>`, RetroDECK as `ruffle --graphics vulkan --config\n/var/data/ruffle --save-directory <saves>/ruffle <rom>`. The ActionScript\nclass library is compiled by build_playerglobal into playerglobal_avm1.swf and\nplayerglobal_avm2.swf and linked into the binary from OUT_DIR\n(core/src/avm1/globals.rs:89, core/src/avm2/globals.rs:546), so startup reads\nnothing. Locale texts, wgsl shaders, the window icon and the OpenH264 license\nare embedded the same way (desktop/src/gui/locale.rs:7-12,\ndesktop/src/app.rs:449, render/wgpu/src/shaders.rs:28-76).\n\nH.264 video is the one external dependency. external_video is a default\nfeature and pulls ruffle_video_external with openh264\n(desktop/Cargo.toml:26,83,90), and enable_openh264 defaults to true\n(desktop/src/preferences.rs:283,307). OpenH264Codec::load first dlopens the\nsystem sonames libopenh264.so.7, libopenh264.so.2.4.1 and libopenh264.so on\nLinux, then falls back to <cache>/ruffle/video/ and fetches the Cisco binary\nfrom ciscobinary.openh264.org bz2-compressed into it\n(video/external/src/decoder/openh264.rs:53-56,109-133,173-191,\ndesktop/src/player.rs:234-241). Whether the library was already there or was\njust downloaded, its SHA-256 is checked before loading and the size is read\nonly to format the mismatch message\n(video/external/src/decoder/openh264.rs:135-146), and WelsGetCodecVersion must\nanswer 2.4.1 exactly (video/external/src/decoder/openh264.rs:46,153-166). The\ncache root comes from dirs::cache_dir(), ~/.cache/ruffle by default, and\n--cache-directory moves it (desktop/src/cli.rs:29-33,140). Without the library\nthe player still starts: ExternalVideoBackend wraps SoftwareVideoBackend, so\nH.263, Screen Video and VP6 keep decoding and only H.264 streams fail\n(video/external/src/backend.rs:41,51-69,73-80).\n\nText uses system fonts. fontdb::Database::load_system_fonts() fills the\ndatabase at startup (desktop/src/app.rs:418-419), and both the Flash device\nfonts and the egui menu bar resolve family names against it, mmapping whatever\nface the host answers with (desktop/src/backends/ui.rs:281-314,395-421,\ndesktop/src/gui/controller.rs:690-733). The families asked for are Times New\nRoman, Arial, Courier New and their metric-compatible substitutes, plus the\nCJK, Hebrew, Arabic and Thai faces (desktop/src/player.rs:361-412,\ndesktop/src/gui/controller.rs:569-641), and on Unix fontconfig sorts the\nfallback chain (desktop/src/backends/ui.rs:318-329,460-472). No name, path,\nsize or hash is fixed anywhere. The compiled-in Noto Sans subset sits behind\nthe default_font feature, which the desktop build does not enable\n(core/src/player.rs:82-83, core/Cargo.toml:82,96, desktop/Cargo.toml:22), so\nan unmatched family leaves the run without that face rather than falling back\nto a bundled one.\n\nFiles the player writes rather than expects: preferences.toml, bookmarks.toml\nand recents.toml under --config, each defaulted when absent\n(desktop/src/preferences.rs:53-95), .sol SharedObjects under --save-directory\n(frontend-utils/src/backends/storage.rs:31-60), and the log file\n(desktop/src/main.rs:156-166). ruffle-bundle.toml is the manifest inside a\n.ruf bundle, which is content alongside the .swf rather than a runtime input\n(frontend-utils/src/bundle/info.rs:11, frontend-utils/src/bundle.rs:42-53).\nmms.cfg is not\nimplemented, the name appears only in an AVM2 error string\n(core/src/avm2/error_messages.rs:237).\n", "profiled_date": "2026-08-08", "source": "https://github.com/ruffle-rs/ruffle", "source_commit": "f3a1263e164dc4cb56211ab1f113e1907730ce89", "systems": ["flash"], "type": "standalone", "upstream": "https://github.com/ruffle-rs/ruffle"}


id: rustation
name: Rustation
type: libretro
classification: official_port
source: https://github.com/libretro/rustation-libretro
upstream: https://github.com/simias/rustation
source_commit: 3e328e3967e312e1f239aeeecd479a7b4bfda850
profile_json:
{"core_classification": "official_port", "core_version": "v1", "cores": ["rustation"], "display_name": "Sony - PlayStation (Rustation)", "emulator": "Rustation", "files": [{"description": "SCPH-5500 (v3.0 J)", "md5": "8dd7d5296a650fac7319bce665a6a53c", "name": "scph5500.bin", "region": ["japan"], "required": true, "sha256": "9c0421858e217805f4abe18698afea8d5aa36ff0727eb8484944e00eb5e7eadb", "size": 524288, "source_ref": "src/bios/db.rs:158-167 (v3.0 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-5501 (v3.0 A)", "md5": "490f666e1afb15b7362b406ed1cea246", "name": "scph5501.bin", "region": ["north-america"], "required": true, "sha256": "11052b6499e466bbf0a709b1f9cb6834a9418e66680387912451e971cf8a1fef", "size": 524288, "source_ref": "src/bios/db.rs:168-177 (v3.0 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "SCPH-5502 (v3.0 E)", "md5": "32736f17079d0b2b7024407c39bd3050", "name": "scph5502.bin", "region": ["europe"], "required": true, "sha256": "1faaa18fa820a0225e488d9f086296b8e6c46df739666093987ff7d8fd352c09", "size": 524288, "source_ref": "src/bios/db.rs:178-187 (v3.0 Europe)", "validation": ["size", "sha256"]}, {"description": "SCPH-1000 (v1.0 J)", "name": "scph1000.bin", "region": ["japan"], "required": false, "sha256": "cfc1fc38eb442f6f80781452119e931bcae28100c1c97e7e6c5f2725bbb0f8bb", "size": 524288, "source_ref": "src/bios/db.rs:38-47 (v1.0 Japan)", "validation": ["size", "sha256"]}, {"description": "v1.1 J", "name": "scph_v11j.bin", "region": ["japan"], "required": false, "sha256": "5eb3aee495937558312b83b54323d76a4a015190decd4051214f1b6df06ac34b", "size": 524288, "source_ref": "src/bios/db.rs:48-57 (v1.1 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-3000 (v2.1 J)", "name": "scph3000.bin", "region": ["japan"], "required": false, "sha256": "6f71ca1e716da761dc53187bd39e00c213f566e55090708fd3e2b4b425c8c989", "size": 524288, "source_ref": "src/bios/db.rs:78-87 (v2.1 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-3500 (v2.2 J)", "name": "scph3500.bin", "note": "A known-bad v2.2 J dump also exists in the DB but is rejected.", "region": ["japan"], "required": false, "sha256": "0c8359870cbac0ea091f1c87f188cd332dcc709753b91cafd9fd44a4a6188197", "size": 524288, "source_ref": "src/bios/db.rs:108-117 (v2.2 Japan)", "validation": ["size", "sha256"]}, {"description": "v2.2 J (alt)", "name": "scph5000.bin", "region": ["japan"], "required": false, "sha256": "4018749b3698b8694387beebcbabfb48470513066840f9441459ee4c9f0f39bc", "size": 524288, "source_ref": "src/bios/db.rs:148-157 (v2.2 Japan alt)", "validation": ["size", "sha256"]}, {"description": "SCPH-7000 (v4.0 J)", "name": "scph7000.bin", "region": ["japan"], "required": false, "sha256": "e900504d1755f021f861b82c8258c5e6658c7b592f800cccd91f5d32ea380d28", "size": 524288, "source_ref": "src/bios/db.rs:198-207 (v4.0 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-7500 (v4.1 J)", "name": "scph7500.bin", "region": ["japan"], "required": false, "sha256": "b3aa63cf30c81e0a40641740f4a43e25fda0b21b792fa9aaef60ce1675761479", "size": 524288, "source_ref": "src/bios/db.rs:208-217 (v4.1 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-9000 (v4.3 J)", "name": "scph9000.bin", "region": ["japan"], "required": false, "sha256": "b29b4b5fcddef369bd6640acacda0865e0366fcf7ea54e40b2f1a8178004f89a", "size": 524288, "source_ref": "src/bios/db.rs:238-247 (v4.3 Japan)", "validation": ["size", "sha256"]}, {"description": "SCPH-1001 (v2.0 A)", "name": "scph1001.bin", "region": ["north-america"], "required": false, "sha256": "42e4124be7623e2e28b1db0d8d426539646faee49d74b71166d8ba5bd7c472ed", "size": 524288, "source_ref": "src/bios/db.rs:58-67 (v2.0 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "SCPH-5001 (v2.1 A)", "name": "scph5001.bin", "region": ["north-america"], "required": false, "sha256": "6ad5521d105a6b86741f1af8da2e6ea1c732d34459940618c70305a105e8ec10", "size": 524288, "source_ref": "src/bios/db.rs:88-97 (v2.1 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "v2.2 A", "name": "scph_v22a.bin", "region": ["north-america"], "required": false, "sha256": "71af94d1e47a68c11e8fdb9f8368040601514a42a5a399cda48c7d3bff1e99d3", "size": 524288, "source_ref": "src/bios/db.rs:128-137 (v2.2 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "SCPH-7001 (v4.1 A)", "name": "scph7001.bin", "region": ["north-america"], "required": false, "sha256": "39dcc1a0717036c9b6ac52fefd1ee7a57d3808e8cfbc755879fa685a0a738278", "size": 524288, "source_ref": "src/bios/db.rs:218-227 (v4.1 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "SCPH-101 (v4.5 A)", "name": "scph101.bin", "region": ["north-america"], "required": false, "sha256": "aca9cbfa974b933646baad6556a867eca9b81ce65d8af343a7843f7775b9ffc8", "size": 524288, "source_ref": "src/bios/db.rs:258-267 (v4.5 NorthAmerica)", "validation": ["size", "sha256"]}, {"description": "SCPH-1002 (v2.0 E)", "name": "scph1002.bin", "region": ["europe"], "required": false, "sha256": "0af2be3468d30b6018b3c3b0d98b8b64347e255e16d874d55f0363648973dbf0", "size": 524288, "source_ref": "src/bios/db.rs:68-77 (v2.0 Europe)", "validation": ["size", "sha256"]}, {"description": "v2.1 E", "name": "scph_v21e.bin", "region": ["europe"], "required": false, "sha256": "1efb0cfc5db8a8751a884c5312e9c6265ca1bc580dc0c2663eb2dea3bde9fcf7", "size": 524288, "source_ref": "src/bios/db.rs:98-107 (v2.1 Europe)", "validation": ["size", "sha256"]}, {"description": "v2.2 E", "name": "scph_v22e.bin", "region": ["europe"], "required": false, "sha256": "3d06d2c469313c2a2128d24fe2e0c71ff99bc2032be89a829a62337187f500b7", "size": 524288, "source_ref": "src/bios/db.rs:138-147 (v2.2 Europe)", "validation": ["size", "sha256"]}, {"description": "SCPH-7002 (v4.1 E)", "name": "scph7002.bin", "region": ["europe"], "required": false, "sha256": "5e84a94818cf5282f4217591fefd88be36b9b174b3cc7cb0bcd75199beb450f1", "size": 524288, "source_ref": "src/bios/db.rs:228-237 (v4.1 Europe)", "validation": ["size", "sha256"]}, {"description": "SCPH-102 (v4.4 E)", "name": "scph102.bin", "region": ["europe"], "required": false, "sha256": "5c0166da24e27deaa82246de8ff0108267fe4bb59f6df0fdec50e05e62448ca4", "size": 524288, "source_ref": "src/bios/db.rs:248-257 (v4.4 Europe)", "validation": ["size", "sha256"]}, {"description": "v4.5 E", "name": "scph102_v45.bin", "region": ["europe"], "required": false, "sha256": "42244b0c650821519751b7e77ad1d3222a0125e75586df2b4e84ba693b9809dc", "size": 524288, "source_ref": "src/bios/db.rs:268-277 (v4.5 Europe)", "validation": ["size", "sha256"]}], "notes": "Scans every file in the system directory, filters by exact 512 KB size, then validates the full binary against an internal SHA-256 database (lifted from Mednafen). Region must match the loaded disc. Known-bad dumps are rejected. No filename requirement. No HLE fallback. \"Boot to BIOS menu\" core option allows booting without a disc. Database contains 24 entries (22 good, 2 known-bad rejected) covering BIOS versions 1.0 through 4.5. .info declares firmware_count=0; incorrect. Project abandoned, superseded by rustation-ng.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/rustation-libretro", "source_commit": "3e328e3967e312e1f239aeeecd479a7b4bfda850", "systems": ["sony-playstation"], "type": "libretro", "upstream": "https://github.com/simias/rustation"}


id: rvvm
name: RVVM
type: libretro
classification: official_port
source: https://github.com/LekKit/RVVM
upstream: https://github.com/LekKit/RVVM
source_commit: 7195d47431b1f9643a61a306bed6650571e6ecca
profile_json:
{"core_classification": "official_port", "core_version": "0.6-git", "cores": ["rvvm"], "display_name": "RVVM", "emulator": "RVVM", "files": [{"name": "fw_payload.bin", "note": "M-mode firmware loaded at 0x80000000. Typically OpenSBI with U-Boot payload (fw_payload.bin) or standalone (fw_jump.bin). Referenced by the bootrom= key in the .rvvm config.\n", "path": "rvvm/fw_payload.bin", "required": true, "source_ref": "src/bindings/libretro/libretro.c:309-314, src/rvvm.c:621-628"}, {"name": "Image", "note": "S-mode kernel payload loaded at offset 0x200000 (rv64) or 0x400000 (rv32) from RAM base. Only needed with fw_jump.bin as bootrom. Referenced by the kernel= key in the .rvvm config.\n", "path": "rvvm/Image", "required": false, "source_ref": "src/bindings/libretro/libretro.c:316-318, src/rvvm.c:630-638"}, {"mode": "standalone", "name": "machine.dtb", "note": "Custom Flattened Device Tree. The core auto-generates a DTB based on machine configuration. The libretro binding does not parse a dtb= key in the .rvvm config, so this is only usable via the standalone CLI (-dtb flag).\n", "path": "rvvm/machine.dtb", "required": false, "source_ref": "src/main.c:222, src/rvvm.c:641-648"}], "notes": {"firmware_sources": "OpenSBI: https://github.com/riscv-software-src/opensbi/releases. Pre-built images for RVVM: https://github.com/LekKit/RVVM/wiki/Running\n", "info_firmware_count": ".info declares 0 firmware. Correct: the core loads firmware via user-specified paths in the .rvvm config, not from system_dir.\n"}, "profiled_date": "2026-03-25", "source": "https://github.com/LekKit/RVVM", "source_commit": "7195d47431b1f9643a61a306bed6650571e6ecca", "systems": ["riscv"], "type": "libretro", "upstream": "https://github.com/LekKit/RVVM"}


id: ryujinx
name: Ryujinx
type: standalone
source: https://git.ngram.ca/mirrors/Ryujinx
upstream: https://github.com/Ryujinx/Ryujinx
profile_json:
{"analysis_commit": "HEAD (depth=1, ngram.ca mirror)", "analysis_date": "2026-03-26", "core_version": "1.1.1403", "cores": ["ryujinx"], "display_name": "Ryujinx (Nintendo Switch)", "emulator": "Ryujinx", "files": [{"mode": "standalone", "name": "prod.keys", "note": "Switch production keys for NCA decryption", "path": "switch/", "required": true, "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:239"}, {"mode": "standalone", "name": "title.keys", "note": "Per-title decryption keys, needed for specific game content", "path": "switch/", "required": false, "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:240"}, {"mode": "standalone", "name": "console.keys", "note": "Console-specific keys for encrypted content", "path": "switch/", "required": false, "source_ref": "src/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs:241"}], "mode": "standalone", "notes": "Ryujinx is a standalone Nintendo Switch emulator written in C#, created by gdkchan.\nOriginal repo discontinued October 2024 after Nintendo takedown.\nFirmware (system NCAs) must be installed through Ryujinx's UI from a ZIP or XCI.\nRequired for commercial games (.nsp, .xci). Homebrew (.nro, .nso) runs without firmware.\nFirmware provides shared fonts, timezone data, SSL certificates, system version info.\n", "profiled_date": "2026-03-26", "source": "https://git.ngram.ca/mirrors/Ryujinx", "systems": ["nintendo-switch"], "type": "standalone", "upstream": "https://github.com/Ryujinx/Ryujinx"}


id: same_cdi
name: SAME CDi
type: libretro
classification: community_fork
source: https://github.com/libretro/same_cdi
upstream: https://github.com/mamedev/mame
source_commit: 8a3c2acdbeb57aea4e74aeadaa703fdc5c9c5de9
profile_json:
{"core_classification": "community_fork", "core_version": "Git", "cores": ["same_cdi"], "display_name": "Philips - CDi (SAME CDi)", "emulator": "SAME CDi", "files": [{"category": "bios_zip", "contents": [{"crc32": "40c4e6b9", "description": "Magnavox CD-i 200 BIOS (default, US)", "name": "cdi200.rom", "sha1": "d961de803c89b3d1902d656ceb9ce7c02dccb40a", "size": 524288}, {"crc32": "279683ca", "description": "Philips CD-i 220 F2 BIOS (alternate, PAL)", "name": "cdi220b.rom", "sha1": "53360a1f21ddac952e95306ced64186a3fc0b93e", "size": 524288}, {"crc32": "584c0af8", "description": "Philips CD-i 220 BIOS (non-working, does not boot)", "name": "cdi220.rom", "sha1": "5d757ab46b8c8fc36361555d978d7af768342d47", "size": 524288}, {"crc32": "7a3af407", "description": "Servo MCU 2.1 MC68HC705C8A (BAD_DUMP, from cdi910)", "name": "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201", "sha1": "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f", "size": 8192}, {"crc32": "688cda63", "description": "Slave MCU 2.0 MC68HC705C8A (BAD_DUMP, from cdi910)", "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206", "sha1": "56d0acd7caad51c7de703247cd6d842b36173079", "size": 8192}], "name": "cdimono1.zip", "note": "Forced system. Main CPU BIOS (3 region variants via MAME BIOS switch) + servo/slave MCU dumps.", "path": "same_cdi/bios/cdimono1.zip", "required": true, "source_ref": "src/mame/drivers/cdi.cpp:491", "system": "cdi"}, {"category": "bios_zip", "contents": [{"crc32": "17d723e7", "description": "Mono-II main CPU BIOS, Philips CDI-220 PH3 R1.2", "name": "philips__cdi-220_ph3_r1.2__mb834200b-15__02f_aa__9402_z04.tc574200-le._1.7211", "sha1": "6c317a82e35d60ca5e7a74fc99f665055693169d", "size": 524288}, {"crc32": "2bc8e4e9", "description": "Mono-II servo MCU 4.1", "name": "zc405351p__servo_cdi_4.1__0d67p__lluk9404.mc68hc705c8a.7490", "sha1": "8cd052b532fc052d6b0077261c12f800e8655bb1", "size": 8192}, {"crc32": "5b19da07", "description": "Mono-II slave MCU 4.1", "name": "zc405352p__slave_cdi_4.1__0d67p__lltr9403.mc68hc705c8a.7206", "sha1": "cf02d84977050c71e87a38f1249e83c43a93949b", "size": 8192}], "name": "cdimono2.zip", "note": "CD-i Mono-II (NTSC). MACHINE_NOT_WORKING. Listed in .info as optional.", "path": "same_cdi/bios/cdimono2.zip", "required": false, "source_ref": "src/mame/drivers/cdi.cpp:492", "system": "cdi"}, {"category": "bios_zip", "contents": [{"crc32": "4ae3bee3", "description": "CD-i 910-17P Mini-MMC BIOS (default)", "name": "philips__cd-i_2.1__mb834200b-15__26b_aa__9224_z01.tc574200.7211", "sha1": "9729b4ee3ce0c17172d062339c47b1ab822b222b", "size": 524288}, {"crc32": "2f3048d2", "description": "CD-i 910 alternate BIOS", "name": "cdi910.rom", "sha1": "11c4c3e602060518b52e77156345fa01f619e793", "size": 524288}, {"crc32": "7a3af407", "description": "Servo MCU 2.1 (same ROM as cdimono1, not BAD_DUMP here)", "name": "zx405037p__cdi_servo_2.1__b43t__llek9215.mc68hc705c8a_withtestrom.7201", "sha1": "fdf8d78d6a0df4a56b5b963d72eabd39fcec163f", "size": 8192}, {"crc32": "688cda63", "description": "Slave MCU 2.0 (same ROM as cdimono1, not BAD_DUMP here)", "name": "zx405042p__cdi_slave_2.0__b43t__zzmk9213.mc68hc705c8a_withtestrom.7206", "sha1": "56d0acd7caad51c7de703247cd6d842b36173079", "size": 8192}, {"crc32": "dd167e0d", "description": "PAL chip dump", "name": "ti_portugal_206xf__tibpal20l8-15cnt__m7205n.7205.bin", "sha1": "2ba82a4619d7a0f19e62e02a2841afd4d45d56ba", "size": 324}, {"crc32": "04e6bd37", "description": "PAL chip dump", "name": "ti_portugal_774_206xf__tibpal16l8-10cn_m7204n.7204.bin", "sha1": "153d1a977291bedb7420484a9f889325dbd3628e", "size": 260}], "name": "cdi910.zip", "note": "CD-i 910-17P Mini-MMC (PAL). MACHINE_NOT_WORKING. Not in .info firmware list.", "path": "same_cdi/bios/cdi910.zip", "required": false, "source_ref": "src/mame/drivers/cdi.cpp:493", "system": "cdi"}, {"category": "bios_zip", "contents": [{"crc32": "e2f200f6", "description": "CD-i 490 main CPU BIOS", "name": "cdi490a.rom", "sha1": "c9bf3c4c7e4fe5cbec3fe3fc993c77a4522ca547", "size": 524288}, {"crc32": "84d6f6aa", "description": "MPEG audio decoder ROM", "name": "impega.rom", "sha1": "02526482a0851ea2a7b582d8afaa8ef14a8bd914", "size": 262144}, {"crc32": "db264e8b", "description": "MPEG video decoder ROM", "name": "vmpega.rom", "sha1": "be407fbc102f1731a0862554855e963e5a47c17b", "size": 262144}], "name": "cdi490a.zip", "note": "CD-i 490. MACHINE_NOT_WORKING. Not in .info firmware list.", "path": "same_cdi/bios/cdi490a.zip", "required": false, "source_ref": "src/mame/drivers/cdi.cpp:494", "system": "cdi"}], "notes": "SAME CDi is a Single Arcade Machine Emulator fork of MAME libretro, stripped\ndown to just the Philips CD-i driver. The core hardcodes \"cdimono1\" as the\nforced system (src/osd/libretro/libretro-internal/retro_init.cpp:86,454) and searches for MAME ROM ZIPs in:\n  <system_dir>/same_cdi/bios/\n\nThe ROM path (-rp) is built at src/osd/libretro/libretro-internal/retro_init.cpp:534 as:\n  <game_path>;<system_dir>/same_cdi/bios/\n\nMAME expects each romset as a ZIP containing the individual ROM files.\nThe ZIP filenames match the MAME driver names. Only cdimono1.zip is required\nfor consumer CD-i games; other ZIPs are for alternate hardware models or\nQuizard arcade (unreachable without boot_from_cli core option).\n\nThe driver includes 5 system ROM sets (cdimono1, cdi910, cdimono2, cdi490a,\ncdibios) plus Quizard arcade game ROM sets (clones of cdibios with i8751\nprotection MCU dumps). Upstream MAME has additional ROM sets not present\nin this fork (gpi1200, Italian Quizard variants, cdimono2 alternate BIOS).\n\nROM definitions: src/mame/drivers/cdi.cpp:574-640.\nQuizard game ROMs: src/mame/drivers/cdi.cpp:662-820.\nSystem forced: src/osd/libretro/libretro-internal/retro_init.cpp:86,454,525.\nBIOS path: src/osd/libretro/libretro-internal/retro_init.cpp:534.\n", "platform_details": {"cdi": {"bios_path": "same_cdi/bios/", "forced_system": "cdimono1", "mame_romsets": ["cdimono1", "cdimono2", "cdibios", "cdi910", "cdi490a"], "optional_zips": ["cdimono2.zip", "cdibios.zip"], "primary_zip": "cdimono1.zip", "rom_path_flag": "-rp", "rom_search_path": "<game_path>;<system_dir>/same_cdi/bios/", "source_ref": "src/osd/libretro/libretro-internal/retro_init.cpp:86,454,525,534", "supported_extensions": ["chd", "iso", "cue"]}}, "profiled_date": "2026-03-25", "source": "https://github.com/libretro/same_cdi", "source_commit": "8a3c2acdbeb57aea4e74aeadaa703fdc5c9c5de9", "systems": ["cdi"], "type": "libretro", "upstream": "https://github.com/mamedev/mame"}


id: sameboy
name: SameBoy
type: libretro
classification: official_port
source: https://github.com/libretro/SameBoy
upstream: https://github.com/LIJI32/SameBoy
source_commit: aa158a889a48b538a0302873704a34577c8eb67d
profile_json:
{"builtin_boot_roms": {"description": "Open-source boot ROM replacements compiled from BootROMs/ assembly.\nNot Nintendo originals.\n", "prebuilt_hashes": {"agb_boot.bin": {"md5": "7e095aa30941da3086fa0e9221335370", "sha1": "3b6231bdf840fb889f402d0ae89f21adb077323a"}, "cgb_boot.bin": {"md5": "6b68be48dab6a7298a8c07e00c136b4e", "sha1": "9884b972110a63c9e86fb3bd241bd2e39ca82bb9"}, "dmg_boot.bin": {"md5": "60f1d849a435e9053b8ac0fd5776804a", "sha1": "da853c8102acfff6b8e5a973ce0cd181f3dbb709"}, "sgb2_boot.bin": {"md5": "b4331a9e612b4738867a30af9c96df52", "sha1": "576678d0fc3892b80471d7067ce6014e6af77ed5"}, "sgb_boot.bin": {"md5": "be77bbd03f8675478f6e3d2176f3cb56", "sha1": "27267e45c8408857267231ba6c18bfbd052536e2"}}, "sources": ["BootROMs/dmg_boot.asm -> dmg_boot (256 bytes)", "BootROMs/sgb_boot.asm -> sgb_boot (256 bytes)", "BootROMs/sgb2_boot.asm -> sgb2_boot (256 bytes)", "BootROMs/cgb_boot.asm -> cgb_boot (2304 bytes)", "BootROMs/agb_boot.asm -> agb_boot (2304 bytes)"]}, "core_classification": "official_port", "core_version": "0.15.4", "cores": ["sameboy"], "display_name": "Nintendo - Game Boy / Color (SameBoy)", "emulator": "SameBoy", "files": [{"description": "Game Boy (DMG) boot ROM", "hle_fallback": true, "name": "dmg_boot.bin", "required": false, "size": 256, "source_ref": "libretro/libretro.c:519, libretro/libretro.c:530, libretro/libretro.c:556 (boot_rom_load), Core/gb.c:1594 (request_boot_rom)", "system": "nintendo-gb"}, {"description": "Super Game Boy (SGB) boot ROM", "hle_fallback": true, "name": "sgb_boot.bin", "note": "Used for SGB_NTSC, SGB_PAL models. Also loaded when borrowing SGB border (Core/gb.c:264).", "required": false, "size": 256, "source_ref": "libretro/libretro.c:521, libretro/libretro.c:532, libretro/libretro.c:556, Core/gb.c:1600-1604", "system": "nintendo-sgb"}, {"description": "Super Game Boy 2 (SGB2) boot ROM", "hle_fallback": true, "name": "sgb2_boot.bin", "required": false, "size": 256, "source_ref": "libretro/libretro.c:522, libretro/libretro.c:533, libretro/libretro.c:556, Core/gb.c:1607", "system": "nintendo-sgb"}, {"description": "Game Boy Color (CGB) boot ROM", "hle_fallback": true, "name": "cgb_boot.bin", "note": "Used for CGB revisions A through E in the libretro port.", "required": false, "size": 2304, "source_ref": "libretro/libretro.c:524, libretro/libretro.c:535, libretro/libretro.c:556, Core/gb.c:1613-1618", "system": "nintendo-gbc"}, {"description": "Game Boy Advance in GBC mode (AGB) boot ROM", "hle_fallback": true, "name": "agb_boot.bin", "note": "Enables GBA-enhanced palettes in compatible GBC games.", "required": false, "size": 2304, "source_ref": "libretro/libretro.c:525, libretro/libretro.c:536, libretro/libretro.c:556, Core/gb.c:1621", "system": "nintendo-gbc"}], "notes": "SameBoy is a high-accuracy Game Boy, Game Boy Color and Super Game Boy\nemulator by LIJI32 (official_port: same author maintains upstream and\nlibretro fork).\n\nAll boot ROMs are optional. SameBoy compiles open-source boot ROM\nreplacements from BootROMs/*.asm and embeds them into the libretro\nbinary (extern arrays dmg_boot, cgb_boot, agb_boot, sgb_boot,\nsgb2_boot in libretro.c:129-130). These are SameBoy-authored\nreplacements, not Nintendo originals.\n\nThe libretro port (boot_rom_load, libretro.c:512-588) tries to load\nan external boot ROM from the system directory first. Filename is\nconstructed as \"{model}_boot.bin\". If missing, the embedded boot ROM\nis used as fallback.\n\nBoot ROM selection depends on the sameboy_model core option\n(request_boot_rom in Core/gb.c:1587-1625):\n  DMG_B           -> GB_BOOT_ROM_DMG   -> dmg_boot.bin\n  SGB_NTSC/PAL    -> GB_BOOT_ROM_SGB   -> sgb_boot.bin\n  SGB2            -> GB_BOOT_ROM_SGB2  -> sgb2_boot.bin\n  CGB_A..E        -> GB_BOOT_ROM_CGB   -> cgb_boot.bin\n  AGB_A/GBP_A     -> GB_BOOT_ROM_AGB   -> agb_boot.bin\n\n.info declares firmware_count=2 (dmg, cgb only). Actual reachable\nfiles in the libretro port are 5 (adds sgb, sgb2, agb).\n\nUnreachable boot ROMs in the libretro port (array entries exist in\nboot_rom_load but no model option triggers them):\n  - dmg0_boot.bin: GB_MODEL_DMG_0 commented out (Core/gb.h:100)\n  - mgb_boot.bin: GB_MODEL_MGB active but not exposed by core options\n  - cgb0_boot.bin: GB_MODEL_CGB_0 active but not exposed by core options\nUpstream standalone (v1.0.3) supports these plus cgbE_boot.bin and\nagb0_boot.bin (10 boot ROM types total).\n\nNo validation performed on loaded boot ROMs. GB_load_boot_rom_from_buffer\n(Core/gb.c:266-273) does a plain memcpy capped at 0x900 bytes.\n", "profiled_date": "2026-03-25", "source": "https://github.com/libretro/SameBoy", "source_commit": "aa158a889a48b538a0302873704a34577c8eb67d", "systems": ["nintendo-gb", "nintendo-gbc", "nintendo-sgb"], "type": "libretro", "upstream": "https://github.com/LIJI32/SameBoy"}


id: sameduck
name: sameduck
type: libretro
classification: official_port
source: https://github.com/LIJI32/SameBoy
upstream: https://github.com/LIJI32/SameBoy
source_commit: 208ba4afabffab9edde416f2dbb8ae459e34adb8
profile_json:
{"core_classification": "official_port", "core_version": "0.13.6", "cores": ["sameduck"], "display_name": "Mega Duck / Cougar Boy (SameDuck)", "emulator": "sameduck", "files": [], "notes": "SameDuck is the Mega Duck / Cougar Boy branch of SameBoy by LIJI32.\nBuilt from the SameDuck branch of the upstream repo (no separate\nlibretro fork). The Mega Duck hardware has no boot ROM. All boot ROM\nloading functions are stubs in this branch (GB_load_boot_rom returns 0,\nrequest_boot_rom is empty, no BootROMs/ directory exists).\n\nThe libretro port loads only game ROMs via GB_load_rom(). No\nboot_rom_load_callback is set. retro_system_directory is stored but\nnever used for file loading.\n", "profiled_date": "2026-03-25", "source": "https://github.com/LIJI32/SameBoy", "source_commit": "208ba4afabffab9edde416f2dbb8ae459e34adb8", "systems": ["mega-duck"], "type": "libretro", "upstream": "https://github.com/LIJI32/SameBoy"}


id: saturn-emu
name: Saturn.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": ["saturn-emu", "Saturn.emu", "SATURN-EMU", "saturnemu"], "display_name": "Sega - Saturn (Saturn.emu)", "emulator": "Saturn.emu", "files": [{"category": "bios", "config_key": "CFGKEY_JP_BIOS_PATH", "description": "Saturn BIOS v1.01, read for Japan and Asia NTSC", "name": "sega_101.bin", "note": "The image the module's own setting table names for the JP path (Saturn.emu/src/ss/ss.cpp:2398), and one of three the sanity table accepts for Japan and Asia NTSC. Any 524288-byte image the user picks loads unless the sanity table contradicts it, but a file carrying this name must carry this hash.\n", "region": ["japan", "asia-ntsc"], "required": true, "sha256": "dcfef4b99605f872b6c3b6d05c045385cdea3d1b702906a0ed930df7bcb7deac", "size": 524288, "source_ref": "Saturn.emu/src/ss/ss.cpp:1388-1394 (area picks the JP path), Saturn.emu/src/ss/ss.cpp:1396-1404 (open, size, hash), Saturn.emu/src/ss/ss.cpp:1418 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:2398 (setting default), Saturn.emu/src/main/options.cc:218-219,276-281 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:67-88 (picker)", "system": "sega-saturn", "validation": ["existence", "size", "sha256"]}, {"category": "bios", "config_key": "CFGKEY_NA_BIOS_PATH", "description": "Saturn BIOS read for every area outside Japan and Asia NTSC", "name": "mpr-17933.bin", "note": "The image the module's own setting table names for the NA/EU path (Saturn.emu/src/ss/ss.cpp:2399). The sanity table grants it every area except Japan and Asia NTSC, which covers North America, Europe, South Korea, Asia PAL, Brazil and Latin America as the Region menu names them.\n", "region": ["north-america", "europe", "south-korea", "asia-pal", "brazil", "latin-america"], "required": true, "sha256": "96e106f740ab448cf89f0dd49dfbac7fe5391cb6bd6e14ad5e3061c13330266f", "size": 524288, "source_ref": "Saturn.emu/src/ss/ss.cpp:1388-1394 (area picks the NA/EU path), Saturn.emu/src/ss/ss.cpp:1396-1404 (open, size, hash), Saturn.emu/src/ss/ss.cpp:1420 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:2399 (setting default), Saturn.emu/src/main/options.cc:220-221,270-275 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:44-65 (picker), Saturn.emu/src/main/EmuMenuViews.cc:162-176 (area names)", "system": "sega-saturn", "validation": ["existence", "size", "sha256"]}, {"category": "bios", "config_key": "CFGKEY_JP_BIOS_PATH", "description": "Saturn BIOS v1.00, accepted for Japan and Asia NTSC", "name": "sega_100.bin", "note": "Interchangeable with the other two Japan images: the sanity table gives all three the same areas, and nothing in the module ranks them.\n", "region": ["japan", "asia-ntsc"], "required": false, "sha256": "ae4058627bb5db9be6d8d83c6be95a4aa981acc8a89042e517e73317886c8bc2", "size": 524288, "source_ref": "Saturn.emu/src/ss/ss.cpp:1417 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)", "system": "sega-saturn", "validation": ["existence", "size", "sha256"]}, {"category": "bios", "config_key": "CFGKEY_JP_BIOS_PATH", "description": "Saturn BIOS v1.003, accepted for Japan and Asia NTSC", "name": "sega1003.bin", "region": ["japan", "asia-ntsc"], "required": false, "sha256": "cc1e1b7f88f1c6e6fc35994bae2c2292e06fdae258c79eb26a1f1391e72914a8", "size": 524288, "source_ref": "Saturn.emu/src/ss/ss.cpp:1416 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)", "system": "sega-saturn", "validation": ["existence", "size", "sha256"]}, {"category": "bios", "config_key": "CFGKEY_NA_BIOS_PATH", "description": "Saturn BIOS v1.00a, accepted for every area outside Japan and Asia NTSC", "name": "sega_100a.bin", "region": ["north-america", "europe", "south-korea", "asia-pal", "brazil", "latin-america"], "required": false, "sha256": "87293093fad802fcff31fcab427a16caff1acbc5184899b8383b360fd58efb73", "size": 524288, "source_ref": "Saturn.emu/src/ss/ss.cpp:1419 (name, hash, areas), Saturn.emu/src/ss/ss.cpp:1396-1439 (open, size, hash, sanity tests)", "system": "sega-saturn", "validation": ["existence", "size", "sha256"]}, {"agnostic": true, "category": "bios", "config_key": "CFGKEY_KOF_ROM_PATH", "description": "King of Fighters '95 ROM cart", "min_size": 2097152, "name": "mpr-18811-mx.ic1", "note": "Read when the cart type is KoF '95, which the internal database forces for MK-81088 and T-3101G and which the Cart Type menu also offers. Those two discs end the load when the path is unset; every other disc ignores it. CART_ROM_Init takes a fixed 2097152 bytes and Stream::read throws on a shorter file, so anything smaller aborts and anything larger has its tail ignored. The name comes from the module's setting table, which this build never reads: settings.cpp is out of the shared source list, and the picker lists names ending in .bin.\n", "required": false, "source_ref": "Saturn.emu/src/ss/ss.cpp:1291 (cart to setting), Saturn.emu/src/ss/ss.cpp:1348-1357 (firmware path, open, hand to CART_Init), Saturn.emu/src/ss/cart.cpp:162-164 (dispatch), Saturn.emu/src/ss/cart/rom.cpp:37-47 (fixed read), Saturn.emu/src/ss/db.cpp:94-95,403 (database forces the cart), Saturn.emu/src/ss/ss.cpp:2434 (setting default), Saturn.emu/src/main/options.cc:222-223,258-263 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:90-111 (picker)", "system": "sega-saturn", "validation": ["existence", "size"]}, {"agnostic": true, "category": "bios", "config_key": "CFGKEY_ULTRAMAN_ROM_PATH", "description": "Ultraman - Hikari no Kyojin Densetsu ROM cart", "min_size": 2097152, "name": "mpr-19367-mx.ic1", "note": "Read when the cart type is Ultraman, which the internal database forces for T-13308G and which the Cart Type menu also offers. Same fixed 2097152-byte read as the other ROM cart, and the same picker filtered to .bin.\n", "required": false, "source_ref": "Saturn.emu/src/ss/ss.cpp:1292 (cart to setting), Saturn.emu/src/ss/ss.cpp:1348-1357 (firmware path, open, hand to CART_Init), Saturn.emu/src/ss/cart.cpp:163-164 (dispatch), Saturn.emu/src/ss/cart/rom.cpp:37-47 (fixed read), Saturn.emu/src/ss/db.cpp:96,403 (database forces the cart), Saturn.emu/src/ss/ss.cpp:2435 (setting default), Saturn.emu/src/main/options.cc:224-225,264-269 (token and path), Saturn.emu/src/main/EmuMenuViews.cc:113-134 (picker)", "system": "sega-saturn", "validation": ["existence", "size"]}], "mode": "standalone", "notes": "Member of the EX Emulator series by Robert Broglia, published as\ncom.explusalpha.SaturnEmu and built for arm64 and x86_64 only\n(Saturn.emu/metadata/conf.mk:2-7, Saturn.emu/config.mk:7-9). ES-DE reaches it\nthrough the SATURN-EMU find rule, which only the Android rule set carries, and\noffers it under both the saturn and saturnjp systems. Mednafen's Saturn module\nis vendored under Saturn.emu/src/ss on the 1.32 line\n(EmuFramework/include/shared/mednafen/mednafen-config.h:167) and driven by the\napp's own video, audio, input and save layers\n(Saturn.emu/src/CMakeLists.txt:6-40). Seventeen files differ from the Mednafen\n1.32.1 release, none of it touching file loading: statics become externals the\napp reads (Saturn.emu/src/ss/ss.cpp:146, Saturn.emu/src/ss/smpc.cpp:96,146,\nSaturn.emu/src/ss/vdp2.cpp:46,63, Saturn.emu/src/ss/cdb.cpp:535), backup memory\nmoves to the app's file objects and the periodic save timers are dropped\n(Saturn.emu/src/ss/ss.cpp:1836-1849, mednafen 1.32.1 src/ss/ss.cpp:927-970,\n1592-1600,1867-1874), the VDP2 work queue becomes a framework ring buffer\n(Saturn.emu/src/ss/vdp2_render.cpp:3211-3231), and the rest is enum and virtual\nqualifier tidying. The BIOS and cart ROM block is byte-identical to the release,\nas are cart.cpp, cart/rom.cpp and db.cpp.\n\nContent is read from .cue, .ccd, .chd, .toc and .m3u files\n(Saturn.emu/metadata/conf.mk:5, Saturn.emu/src/main/system.ccm:106-109). An\narchive is opened by the app, which prefers an .m3u member and otherwise keeps\nthe first entry passing that filter, and an .m3u names up to 16 images\n(Saturn.emu/src/main/Main.cc:186-246). Every load goes through the module's\nLoadCD entry point (Saturn.emu/src/main/Main.cc:275,\nSaturn.emu/src/ss/ss.cpp:1757-1806). The ROM entry point Load is never called:\nits only call site in the tree is a shared helper this app does not use\n(EmuFramework/src/shared/mednafen-emuex/MDFNUtils.hh:133-146).\n\nFour files the user supplies carry no name of their own. Pickers store\narbitrary URIs under NA/EU BIOS, JP BIOS, KoF '95 ROM and Ultraman ROM, each\nfiltered to names ending in .bin and each refusing to descend into archives\n(Saturn.emu/src/main/EmuMenuViews.cc:34-37,44-145,\nEmuFramework/include/emuframework/DataPathSelectView.hh:77-102,\nSaturn.emu/src/main/system.ccm:85-95,128-131,\nSaturn.emu/src/main/options.cc:65-68,98-101). MDFN_GetSettingS answers the four\npath settings with the fixed tokens jp, na, kof95 and ultraman, and\nMDFN_MakeFName turns each token back into the matching URI, ending the load\nwith a message pointing at the File Paths menu when it is unset\n(Saturn.emu/src/main/options.cc:215-228,245-285). Every other setting name\nreaches unreachable(), so no other firmware request can be made.\n\nWhich BIOS is read follows the emulated area: Japan and Asia NTSC take the JP\npath, every other area the NA/EU path (Saturn.emu/src/ss/ss.cpp:1388-1394). The\narea comes from the Region menu, or when that is Auto from the first 16 sectors\nof the disc, checked against the security code hash and the \"SEGA SEGASATURN \"\nmagic (Saturn.emu/src/main/EmuMenuViews.cc:216-251,\nSaturn.emu/src/main/options.cc:203-204, Saturn.emu/src/ss/ss.cpp:959-968,\n1126-1144,1778-1787). The image is rejected at any length other than 524288 and\nthen hashed (Saturn.emu/src/ss/ss.cpp:1400-1404). With ss.bios_sanity forced on\n(Saturn.emu/src/main/options.cc:193-194) a table of five known images drives two\nfurther tests: a file whose name is one of the five must hash to that entry, and\na file whose hash is one of the five must belong to the area being emulated\n(Saturn.emu/src/ss/ss.cpp:1406-1439). An image outside the table passes both,\nsince each test only rejects on a match. A third test compares Saturn against\nST-V images and can never fire here.\n\nCart type comes from the Cart Type menu when it is not Auto, otherwise from the\ninternal game database, otherwise none\n(Saturn.emu/src/main/EmuMenuViews.cc:180-214,\nSaturn.emu/src/main/options.cc:161-164, Saturn.emu/src/ss/ss.cpp:1761-1790).\nThe database forces the KoF '95 cart for MK-81088 and T-3101G and the Ultraman\ncart for T-13308G, marking all three a game requirement\n(Saturn.emu/src/ss/db.cpp:93-96,403), so those three discs read a ROM image and\nevery other disc reads none.\n\nST-V, the bootable ROM cart and Action Replay 4M Plus are compiled and\nunreachable. All three exist only behind cart types the Cart Type menu does not\nlist and the database never assigns, and the first two are entered from Load\nalone (Saturn.emu/src/ss/ss.cpp:1630,1669, Saturn.emu/src/ss/cart.cpp:166-181).\nTheir paths would ask for ss.bios_stv_jp, ss.bios_stv_na, ss.bios_stv_eu and\nss.cart.satar4mp_path, none of which MDFN_GetSettingS answers\n(Saturn.emu/src/ss/ss.cpp:1379-1387,1293,\nSaturn.emu/src/main/options.cc:215-228). The ST-V EEPROM save file and the\nST-V branches in the app's own backup memory code are dead for the same reason\n(Saturn.emu/src/main/Main.cc:119-123,141-142).\n\nPer content the app writes and reads back a .bkr backup RAM image, a .smpc real\ntime clock block, .mca save states and, when a memory cart is selected, a\ngzipped .bcr cart image; settings live in SaturnEmu.config\n(Saturn.emu/src/main/Main.cc:50-129,152-155,\nSaturn.emu/src/main/system.ccm:180, Saturn.emu/src/ss/cart/backup.cpp:69-73,\nSaturn.emu/src/main/AppMeta.cc:28). Mednafen's image reader picks up an .sbi\nbeside a cue sheet when one is present\n(EmuFramework/src/shared/mednafen/cdrom/CDAccess_Image.cpp:924-941). Cheats are\noff (Saturn.emu/src/main/options.cc:187-188), and ui.png, gpOverlay.png and the\nshader sources are drawn from the application bundle\n(EmuFramework/include/emuframework/AssetManager.hh:61-66,\nEmuFramework/src/AssetManager.cc:63-69,\nEmuFramework/src/VideoImageEffect.cc:163-173).\n", "profiled_date": "2026-08-12", "source": "https://github.com/Rakashazi/emu-ex-plus-alpha", "source_commit": "1c12fac5ce49badaadff2e2f210dcc30b89f4943", "systems": ["sega-saturn"], "type": "standalone", "upstream": "https://mednafen.github.io/"}


id: scummvm
name: ScummVM
type: libretro
classification: game_engine
source: https://github.com/libretro/scummvm
upstream: https://github.com/scummvm/scummvm
source_commit: c3f4936d1ba2af178816cc9bb06087025e4a2bea
profile_json:
{"core_classification": "game_engine", "core_version": "2.8.0git", "cores": ["scummvm"], "display_name": "ScummVM", "emulator": "ScummVM", "files": [{"name": "MT32_CONTROL.ROM", "note": "Roland MT-32 control ROM. Required for MT-32 music emulation in games that use MT-32 MIDI (e.g. Monkey Island, Indiana Jones). Not bundled with ScummVM. Must be paired with MT32_PCM.ROM.\n", "path": "scummvm/extra/MT32_CONTROL.ROM", "required": false, "size": 65536, "source_ref": "audio/softsynth/mt32.cpp:298,581"}, {"name": "MT32_PCM.ROM", "note": "Roland MT-32 PCM ROM. Contains the sample data for MT-32 emulation. Must be paired with MT32_CONTROL.ROM.\n", "path": "scummvm/extra/MT32_PCM.ROM", "required": false, "size": 524288, "source_ref": "audio/softsynth/mt32.cpp:298,581"}, {"name": "CM32L_CONTROL.ROM", "note": "Roland CM-32L control ROM. Preferred over MT-32 ROMs when both are present. The CM-32L is a rack-mount version of the MT-32 with extra sound effects used by some LucasArts and Sierra games.\n", "path": "scummvm/extra/CM32L_CONTROL.ROM", "required": false, "size": 65536, "source_ref": "audio/softsynth/mt32.cpp:293,582"}, {"name": "CM32L_PCM.ROM", "note": "Roland CM-32L PCM ROM. Contains sample data for CM-32L emulation. Must be paired with CM32L_CONTROL.ROM.\n", "path": "scummvm/extra/CM32L_PCM.ROM", "required": false, "size": 1048576, "source_ref": "audio/softsynth/mt32.cpp:293,582"}, {"name": "Roland_SC-55.sf2", "note": "Roland SC-55 SoundFont for General MIDI playback. This is the default soundfont (DEFAULT_SOUNDFONT_FILENAME). Bundled in official ScummVM releases. Used as fallback when no MT-32 ROMs are available.\n", "path": "scummvm/extra/Roland_SC-55.sf2", "required": false, "source_ref": "backends/platform/libretro/include/libretro-defs.h:32, backends/platform/libretro/src/libretro-os-utils.cpp:196"}, {"name": "scummmodern.zip", "note": "Modern GUI theme for ScummVM launcher.", "path": "scummvm/theme/scummmodern.zip", "required": false, "source_ref": "dists/scummvm.rc:24"}, {"name": "scummclassic.zip", "note": "Classic GUI theme for ScummVM launcher.", "path": "scummvm/theme/scummclassic.zip", "required": false, "source_ref": "dists/scummvm.rc:23"}, {"name": "scummremastered.zip", "note": "Remastered GUI theme for ScummVM launcher.", "path": "scummvm/theme/scummremastered.zip", "required": false, "source_ref": "dists/scummvm.rc:25"}, {"name": "residualvm.zip", "note": "ResidualVM theme for 3D adventure games (Grim Fandango, Myst III).", "path": "scummvm/theme/residualvm.zip", "required": false, "source_ref": "dists/scummvm.rc:26"}, {"name": "gui-icons.dat", "note": "GUI icon pack used by the ScummVM launcher interface.", "path": "scummvm/theme/gui-icons.dat", "required": false, "source_ref": "dists/scummvm.rc:27"}, {"name": "shaders.dat", "note": "Compiled shader pack for the GUI rendering pipeline.", "path": "scummvm/theme/shaders.dat", "required": false, "source_ref": "dists/scummvm.rc:28"}, {"name": "translations.dat", "note": "GUI translation strings for ScummVM launcher localization.", "path": "scummvm/theme/translations.dat", "required": false, "source_ref": "dists/scummvm.rc:43"}, {"name": "achievements.dat", "note": "Achievement definitions for supported games.", "path": "scummvm/extra/achievements.dat", "required": false, "source_ref": "dists/engine-data/engine_data_core.mk"}, {"name": "classicmacfonts.dat", "note": "Classic Macintosh bitmap fonts for Mac game rendering.", "path": "scummvm/extra/classicmacfonts.dat", "required": false, "source_ref": "dists/engine-data/engine_data_core.mk"}, {"name": "encoding.dat", "note": "Character encoding tables for text rendering across languages.", "path": "scummvm/extra/encoding.dat", "required": false, "source_ref": "dists/engine-data/engine_data_core.mk"}, {"name": "helpdialog.zip", "note": "Help dialog assets for the in-game help system.", "path": "scummvm/extra/helpdialog.zip", "required": false, "source_ref": "dists/engine-data/engine_data_core.mk"}, {"name": "macgui.dat", "note": "Macintosh GUI widget data for Mac-style game interfaces.", "path": "scummvm/extra/macgui.dat", "required": false, "source_ref": "dists/engine-data/engine_data_core.mk"}, {"name": "access.dat", "note": "Engine data for Access Software games (e.g. Amazon, Martian Memorandum).", "path": "scummvm/extra/access.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ACCESS)"}, {"name": "bagel.dat", "note": "Engine data for Bagel engine games.", "path": "scummvm/extra/bagel.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_BAGEL)"}, {"name": "cryo.dat", "note": "Engine data for Cryo Interactive games (e.g. Dune, Lost Eden).", "path": "scummvm/extra/cryo.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_CRYO)"}, {"name": "cryomni3d.dat", "note": "Engine data for CryOmni3D games (Versailles 1685).", "path": "scummvm/extra/cryomni3d.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_CRYOMNI3D)"}, {"name": "darkseed.dat", "note": "Engine data for Dark Seed (H.R. Giger adventure game).", "path": "scummvm/extra/darkseed.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_DARKSEED)"}, {"name": "drascula.dat", "note": "Engine data for Drascula: The Vampire Strikes Back.", "path": "scummvm/extra/drascula.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_DRASCULA)"}, {"name": "freescape.dat", "note": "Engine data for Freescape games (Driller, Dark Side, Total Eclipse).", "path": "scummvm/extra/freescape.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_FREESCAPE)"}, {"name": "got.aud", "note": "Audio data for Game of Thrones engine.", "path": "scummvm/extra/got.aud", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GOT)"}, {"name": "got.gfx", "note": "Graphics data for Game of Thrones engine.", "path": "scummvm/extra/got.gfx", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GOT)"}, {"name": "hadesch_translations.dat", "note": "Translation data for Hades Challenge.", "path": "scummvm/extra/hadesch_translations.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_HADESCH)"}, {"name": "hugo.dat", "note": "Engine data for Hugo's House of Horrors trilogy.", "path": "scummvm/extra/hugo.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_HUGO)"}, {"name": "kyra.dat", "note": "Engine data for Kyrandia series (Legend of Kyrandia, Hand of Fate, Malcolm's Revenge).", "path": "scummvm/extra/kyra.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_KYRA)"}, {"name": "lure.dat", "note": "Engine data for Lure of the Temptress.", "path": "scummvm/extra/lure.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_LURE)"}, {"name": "macventure.dat", "note": "Engine data for MacVenture games (Shadowgate, Deja Vu, Uninvited).", "path": "scummvm/extra/macventure.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MACVENTURE)"}, {"name": "mm.dat", "note": "Engine data for Might and Magic engine.", "path": "scummvm/extra/mm.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MM)"}, {"name": "mort.dat", "note": "Engine data for Mortville Manor.", "path": "scummvm/extra/mort.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MORTEVIELLE)"}, {"name": "myst3.dat", "note": "Engine data for Myst III: Exile.", "path": "scummvm/extra/myst3.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MYST3)"}, {"name": "nancy.dat", "note": "Engine data for Nancy Drew adventure games.", "path": "scummvm/extra/nancy.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_NANCY)"}, {"name": "neverhood.dat", "note": "Engine data for The Neverhood.", "path": "scummvm/extra/neverhood.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_NEVERHOOD)"}, {"name": "prince_translation.dat", "note": "Translation data for The Prince and the Coward.", "path": "scummvm/extra/prince_translation.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_PRINCE)"}, {"name": "queen.tbl", "note": "Resource table for Flight of the Amazon Queen.", "path": "scummvm/extra/queen.tbl", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_QUEEN)"}, {"name": "sky.cpt", "note": "Compact table for Beneath a Steel Sky.", "path": "scummvm/extra/sky.cpt", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_SKY)"}, {"name": "supernova.dat", "note": "Engine data for Mission Supernova.", "path": "scummvm/extra/supernova.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_SUPERNOVA)"}, {"name": "teenagent.dat", "note": "Engine data for Teenagent.", "path": "scummvm/extra/teenagent.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TEENAGENT)"}, {"name": "titanic.dat", "note": "Engine data for Starship Titanic.", "path": "scummvm/extra/titanic.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TITANIC)"}, {"name": "tony.dat", "note": "Engine data for Tony Tough and the Night of Roasted Moths.", "path": "scummvm/extra/tony.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TONY)"}, {"name": "toon.dat", "note": "Engine data for Toonstruck.", "path": "scummvm/extra/toon.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_TOON)"}, {"name": "ultima.dat", "note": "Engine data for Ultima series (Ultima IV-VIII, Savage Empire, Martian Dreams).", "path": "scummvm/extra/ultima.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ULTIMA)"}, {"name": "ultima8.dat", "note": "Engine data specific to Ultima VIII: Pagan.", "path": "scummvm/extra/ultima8.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_ULTIMA)"}, {"name": "wintermute.zip", "note": "Engine data for Wintermute engine games.", "path": "scummvm/extra/wintermute.zip", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_WINTERMUTE)"}, {"name": "fonts.dat", "note": "FreeType2 font data for text rendering.", "path": "scummvm/extra/fonts.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (USE_FREETYPE2)"}, {"name": "fonts-cjk.dat", "note": "CJK (Chinese/Japanese/Korean) font data. Large file, only for systems with enough memory.", "path": "scummvm/extra/fonts-cjk.dat", "required": false, "source_ref": "dists/engine-data/engine_data_big.mk (USE_FREETYPE2)"}, {"name": "fonts-imgui.dat", "note": "ImGui font data for debug overlay rendering.", "path": "scummvm/extra/fonts-imgui.dat", "required": false, "source_ref": "dists/engine-data/engine_data.mk (USE_IMGUI)"}, {"name": "grim-patch.lab", "note": "Patch data for Grim Fandango.", "path": "scummvm/extra/grim-patch.lab", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_GRIM)"}, {"name": "monkey4-patch.m4b", "note": "Patch data for Escape from Monkey Island.", "path": "scummvm/extra/monkey4-patch.m4b", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_MONKEY4)"}, {"name": "pred.dic", "note": "Predictive text dictionary for AGI engine text input (King's Quest, Space Quest, etc).", "path": "scummvm/extra/pred.dic", "required": false, "source_ref": "dists/engine-data/engine_data.mk (ENABLE_AGI)"}, {"name": "vkeybd_default.zip", "note": "Default virtual keyboard layout. Added to the extra path by the build script.", "path": "scummvm/extra/vkeybd_default.zip", "required": false, "source_ref": "backends/platform/libretro/scripts/bundle_datafiles.sh (hardcoded addition)"}], "logo": "https://raw.githubusercontent.com/scummvm/scummvm/master/icons/scummvm.svg", "notes": {"config_file": "ScummVM stores its configuration in <system>/scummvm.ini. This file is auto-created on first launch and stores game entries, paths, and user preferences. Not a distributable data file.\n", "directory_layout": "The libretro core expects: <system>/scummvm/extra/ for engine data and soundfonts, <system>/scummvm/theme/ for GUI themes. The bundled scummvm.zip release contains the full tree and can be extracted directly into the system directory. Individual shader files go in <system>/scummvm/extra/shaders/.\n", "mt32_emulation": "MT-32 emulation requires either MT32_CONTROL.ROM + MT32_PCM.ROM or CM32L_CONTROL.ROM + CM32L_PCM.ROM in the extra directory. These are proprietary Roland ROM dumps, not shipped with ScummVM. CM-32L ROMs are preferred when both sets are present. Without these, games that use MT-32 MIDI fall back to General MIDI with the Roland SC-55 soundfont.\n", "scummvm_zip": "Official ScummVM libretro releases include scummvm.zip which bundles all themes, engine data, shaders, and the SC-55 soundfont. This single file extracted to <system>/ provides a complete setup minus the proprietary MT-32/CM-32L ROMs.\n", "shaders": "OpenGL shaders for 3D engines (Grim Fandango, Myst III, The Longest Journey, Penumbra, Wintermute 3D, Freescape) are placed as individual .vertex/.fragment files in <system>/scummvm/extra/shaders/. There are roughly 130 shader files across all engines.\n"}, "profiled_date": "2026-03-25", "source": "https://github.com/libretro/scummvm", "source_commit": "c3f4936d1ba2af178816cc9bb06087025e4a2bea", "systems": ["scummvm"], "type": "libretro", "upstream": "https://github.com/scummvm/scummvm"}


