emulator: BlastEm type: standalone + libretro core_classification: official_port source: "https://github.com/libretro/blastem" upstream: "https://www.retrodev.com/blastem/" profiled_date: "2026-10-20" source_commit: "1e0de94dc7e669c0925a22c0fccf6cdc837af0a0" core_version: "1.0.1-pre" display_name: "Sega - Mega Drive - Genesis (BlastEm)" cores: - blastem systems: - sega-megadrive - sega-megacd - sega-32x - sega-mastersystem - sega-gamegear - sega-sg1000 - sega-sc3000 - sega-pico - colecovision - pioneer-laseractive notes: | BlastEm emulates the Mega Drive/Genesis, Sega CD, 32X, Master System, Game Gear, SG-1000, SC-3000, Pico, Copera, ColecoVision and the Pioneer LaserActive player. The libretro port lives in libblastem.c and offers every machine the standalone can force except the Jaguar (libblastem.c:20-44). Each firmware path is a config key. The libretro core writes / into those keys before any machine is built (libblastem.c:497-530). The names are opened exactly as written, with no hash or size check. The standalone build leaves the keys unset by default (default.cfg), so each loader falls back to its own default name. The Sega CD BIOS, the ColecoVision BIOS, the LaserActive firmware and the TMSS ROM are then read beside the executable through read_bundled_file() (paths.c:596-631). The 32X BIOS ROMs are opened by bare name, relative to the working directory (32x.c:1072, 1417, 1449). A fatal error while a game loads unwinds to retro_load_game(), which reports the failure to the frontend (libblastem.c:975-989, 1053-1058). Missing Sega CD BIOS and missing TMSS ROM end there. The default Mega Drive model is md1va3, which has no TMSS (libblastem.c:355-359, systems.cfg:12-20). md1va6, md2va1, md2va2, md3va1 and md3va2 enable it (systems.cfg:23-75) and can be picked with the blastem_model option (libblastem.c:185-187). files: # rom.db is embedded in the libretro binary (libblastem.c:1436-1455, # extern const char rom_db_data[]) and no external copy is read there. # The standalone build reads it beside the executable. The .info lists it # as firmware0_opt=true. # .info sha1 E5414FB1C4CC7D7F5101C07E4547316779BA3D97 does not match # the version in our repo (sha1 02c287d1...): rom.db changes between # BlastEm releases. - name: rom.db system: sega-megadrive required: false mode: standalone bundled: true sha1: "9109da664801e8ba02e790c085cbdca58068e50a" md5: "48b457c7e2df6ec7c16ae34d8f24c4b6" hle_fallback: true note: "ROM feature database (game-specific mapper/save config). Shipped beside the executable in the 1.0.0 Windows and Linux archives, whose copy the hashes describe. The libretro core compiles it in and reads no external copy." source_ref: "source romdb.c:44-53, source libblastem.c:1436-1455" # ------------------------------------------------------- # Sega CD / Mega CD BIOS # ------------------------------------------------------- - name: bios_CD_U.bin system: sega-megacd region: [north-america] required: true mode: libretro note: "Sega CD BIOS for discs whose header allows the default region U, or that carry neither E nor J (segacd.c:1573-1593). An empty file counts as missing (segacd.c:1599-1602). Without it a CD image fails to load (segacd.c:1644-1647). A Mode 1 cartridge runs without it as a plain cartridge (genesis.c:3156-3162)." source_ref: "source libblastem.c:501, source segacd.c:1573-1615" - name: bios_CD_E.bin system: sega-megacd region: [europe] required: true mode: libretro note: "Mega CD BIOS for discs whose region resolves to E (segacd.c:1587-1588). Same load rules as bios_CD_U.bin." source_ref: "source libblastem.c:502, source segacd.c:1573-1615" - name: bios_CD_J.bin system: sega-megacd region: [japan] required: true mode: libretro note: "Mega CD BIOS for discs whose region resolves to J (segacd.c:1589-1590). Same load rules as bios_CD_U.bin." source_ref: "source libblastem.c:503, source segacd.c:1573-1615" - name: cdbios.bin system: sega-megacd required: true mode: standalone unread_on: [retrobat] note: "Default name of all three regional Sega CD BIOS keys when the config sets none. Read beside the executable, whatever the disc region. Without it a CD image stops with a fatal error (segacd.c:1644-1647). RetroBat writes absolute paths to bios_CD_U/E/J.bin into the config (emulatorlauncher Blastem.Generator.cs:256-269), so this name is never opened there." source_ref: "source segacd.c:1594, source segacd.c:1607-1609" # ------------------------------------------------------- # 32X BIOS # ------------------------------------------------------- - name: 32X_G_BIOS.bin system: sega-32x required: false hle_fallback: true note: "68K side BIOS. Only the first 0x100 bytes are read. Without it the core writes its own vector table and warns that some games need the real one (32x.c:1072-1086)." source_ref: "source libblastem.c:508, source 32x.c:1072-1086" - name: 32X_M_BIOS.bin system: sega-32x required: true note: "Master SH2 BIOS, read into the 16 KiB boot ROM area (32x.c:1399-1400, 1417-1425). The libretro core refuses a 32X load when the file is missing or its reset vector is zero (libblastem.c:998-1017, 1098-1104). The standalone runs the SH2 on zeroed ROM and stops at an unimplemented instruction." source_ref: "source libblastem.c:509, source libblastem.c:1098-1104, source 32x.c:1417-1425" - name: 32X_S_BIOS.bin system: sega-32x required: true note: "Slave SH2 BIOS, read into the 16 KiB boot ROM area (32x.c:1449-1457). Same refusal rule as 32X_M_BIOS.bin in the libretro core (libblastem.c:1098-1104)." source_ref: "source libblastem.c:510, source libblastem.c:1098-1104, source 32x.c:1449-1457" # ------------------------------------------------------- # ColecoVision BIOS # ------------------------------------------------------- - name: colecovision.rom system: colecovision required: true mode: libretro size: 8192 note: "Read into the 8 KiB BIOS area mapped at 0x0000 (coleco.h:13, coleco.c:513). Without it the core only warns and runs a zeroed BIOS, so no game starts (coleco.c:485-492)." source_ref: "source libblastem.c:504, source coleco.c:485-492" - name: colecovision_bios.col system: colecovision required: true mode: standalone unread_on: [retrobat] size: 8192 note: "Default name of the ColecoVision BIOS key when the config sets none. Read beside the executable, truncated to 8 KiB (coleco.c:496-505). RetroBat points the key at colecovision.rom (emulatorlauncher Blastem.Generator.cs:256-269)." source_ref: "source coleco.c:485, source coleco.c:496-505" # ------------------------------------------------------- # Pioneer LaserActive player firmware # ------------------------------------------------------- - name: laseractive_dyw_1322a.bin system: pioneer-laseractive required: true size: 65536 crc32: "3d6f6ed3" md5: "d6ccd1da5c4a1b22c64e6eec899e0daf" sha1: "b1e48d1f5e494a6cbece61cfca4469dea33fba4b" sha256: "02a4a82c4f5abfe2c7e15d3682be9590be96607cb9213ce88e335f34db95d76f" note: "uPD78237 mode controller ROM of the CLD-A100 player. Only the first 0xE000 bytes are mapped (laseractive.h:16, laseractive.c:533-534). Without it the core warns and the controller runs a zeroed ROM. The hashes describe the 64 KiB dump the BlastEm author published, whose last 8 KiB are 0xFF." source_ref: "source libblastem.c:513, source laseractive.c:504-531" # ------------------------------------------------------- # TMSS ROM # ------------------------------------------------------- - name: tmss.md system: sega-megadrive required: false mode: libretro aliases: [bios_MD.bin] note: "Read only for a model with TMSS. tmss.md is tried first, then bios_MD.bin (libblastem.c:514-529). With a TMSS model selected and neither file present, the load fails (genesis.c:3036-3051). Any size is accepted and mirrored to fill the TMSS space (genesis.c:3054-3065)." source_ref: "source libblastem.c:514-529, source genesis.c:3036-3065" - name: tmss.md system: sega-megadrive required: false mode: standalone bundled: true size: 4014 sha1: "d0fd0c163b693d819fc907538fbdec76d7ec669d" md5: "1929426a8888785411d30f24bd0f8139" note: "TMSS startup ROM for models md1va6, md2va1 and later. The 1.0.0 Windows and Linux archives ship BlastEm's own replacement, built from tmss.s68, under this name. Any size is accepted: the image is padded and mirrored to fill the TMSS space." source_ref: "source genesis.c:3036-3065" analysis: tmss: default_model: md1va3 tmss_models: [md1va6, md2va1, md2va2, md3va1, md3va2] rom_filename: tmss.md libretro_fallback_name: bios_MD.bin config_path: "system\0tmss_path\0" source_ref: "source libblastem.c:355-359, source libblastem.c:514-529, source genesis.c:3036-3051" note: | The libretro core exposes the model as blastem_model and points system/tmss_path at the system directory. The standalone falls back to tmss.md beside the executable. sega_cd: region_keys: [scd_bios_us, scd_bios_eu, scd_bios_jp] standalone_default: cdbios.bin source_ref: "source segacd.c:1573-1615, source segacd.c:1644-1647" note: | The region comes from the disc header, or from the default region when the header allows it. A Mode 1 cartridge that finds no BIOS runs without the Sega CD (genesis.c:3156-3162). s32x: source_ref: "source libblastem.c:998-1017, source libblastem.c:1098-1104" note: | The libretro core checks that both SH2 BIOS files exist and carry a non-zero reset vector before it builds a 32X machine. jaguar_bios: libretro_relevant: false source_ref: "source jaguar.c:571-575" note: | blastjag is a separate standalone binary, not compiled into the libretro core. It reads the BIOS from its first command line argument.