
1.0.0 / 14-09-2026
Performance
Features
BlastEm
Accuracy
BlastEm aims for cycle accuracy while also hitting lower system requirements than similar emulators. It has substantially higher compatibility than Exodus but falls short of Genesis Plus GX. Commercial game compatibility is close to, but not quite at, 100%. It is the only emulator other than Exodus that can properly display direct color DMA demos and to pass all of the tests in Nemesis' VDP FIFO Testing ROM.
Development-builds available: Nightly builds available
--
Windows: Doesn't mention minimum (32 or 64-bit x86 processor)
Linux: Likewise (32 or 64-bit x86 processor)
Mac: (OSX+ 32 or 64-bit x86 processor)
Requires: SDL2, GLEW and OpenGL
Most Recent Changes
--1.0--
It's been 13 years to the day since the very first stable release: 0.1.0. That first version only supported Linux, had pretty broken FM emulation, awful compatibility and no UI, but it was a start. 2019 brought the 0.6.X series which worked with the vast majority of published Genesis/Mega Drive games, had high quality FM emulation and had a serviceable UI. After the release of 0.6.2 in March of that year, progress didn't stop, but stable releases did. A combination of some unfortunate regressions and other events in my life delayed a new stable release. The longer the release was delayed, the more effort was required to do a new one. While the nightly build system ensured some users could access the latest improvements, many people still stuck to the increasingly crufty stable build. Thankfully that ends today with a brand new stable release.
The Tower of Power has arrived
The changes I'm most proud of are the inclusion of Sega CD and 32X support including CD 32X titles. The race to build the first functional Sega CD emulator is what got me interested in emulation development in the first place so adding Sega CD support sort of brings things full circle for me. The 32X has had some recent interesting homebrew developments and the lack of support for this add-on, along with the Sega CD, was one of the main reasons people cite for sticking to Kega Fusion. Compatibility isn't perfect for these add-ons, but most games are playable and work will continue on the remaining bugs.
Another addition I'm proud of is Sega Pico and Yamaha Copera support. While Pico has been emulated in emulators like Picodrive for a long time, the rare Yamaha Copera variant was unemulated. I reverse engineered the additional hardware and added some initial support to BlastEm. OPL3 emulation is far from complete so these games generally lack music in BlastEm, but they're all playable and the Copera-specific ADPCM samples play just fine.
1.0.0 also sees major improvements to support for Sega 8-bit consoles. While 0.6.2 had some support for Master System games, it was generally limited to things supported by the backwards compatibility mode in the Genesis. 1.0.0 adds in support for TMS9918a modes along with support for the Game Gear, SG-1000 and SC-3000, including keyboard and cassette tape emulation. Since the hardware is very similar to the SG-1000, there's also some basic support for Colecovision.
ARMed and Ready
ARM was already dominant in the mobile space when I first released BlastEm. Being restricted to x86 family processors was never the long-term plan, but my initial approach to writing dynarecs made porting to new architectures difficult and time consuming. While those x86 dynarecs are still the default on platforms with those CPUs, 1.0.0 is the first release to be CPU independent. There are new 68K and Z80 cores built with a DSL (Domain Specific Language). For now these just emit an interpreter in C, but I hope to produce dynarecs and companion assembly language interpreters from the same source code. This new DSL was also used for the SH2 core used for 32X emulation on all platforms.
Why 1.0.0
Some have asked why there's been such a big jump in the version number since the last release. There are a few reasons for this. Partly this just reflects how much has been added since 0.6.2. Partly it's because my original goal for a 1.0 release was to support all the systems that Kega Fusion did, and that goal has largely been achieved. That said, embarassment is also a factor. Before today, BlastEm would have fit right in on the satirical zer0ver website and is only not listed because it's less well known than other 1.0-lacking software, but the threat was ever-present. Well, no more! BlastEm has an official 1-based version now. Take that, satirical website authors!
The future and the spectre of AI
BlastEm today is made up of 100% artisanal AI-free code and I intend to keep it that way. That said, I've found the proliferation of vibe-coded projects in the retro space to be fairly discouraging. When it comes to commercial development for modern platforms, I get that ROI concerns make AI hard to ignore. I may have some concerns about over-reliance on these tools in the commercial space, but I can't deny they can be helpful for accelerating software development. For most software, people primarily care whether it works and does what they want, not whether it was artisanally crafted by a real human being.
Retro software developmpent is a different though. Much of this software is not particularly useful for any real work. People develop it for the challenge and the sense of personal achievement. If a computer does all the hard work, what's the point? Will developing this stuff by hand still be valued in a world in which anyone with money to burn on tokens can quickly turn out an AI-slop version? I don't think I know the answer to those questions, but they are weighing on me.
For now, I still have a few "white whales" to conquer in BlastEm. In particular, I'd like to emulate the Teradrive and at least the Sega-PAC in the LaserActive. I expect these goals will keep me motivated for now. Hopefully with this huge stable release out of the way, I will also be a bit more on top of stable releases for a while. That said, don't sleep on the nightly builds. They'll always be the first to get new features and bugfixes.
--0.6.2 WIP 08-03-2024--
Implemented read and pe instructions in the new 68K core.
Fixed a bug in the Gen/MD serialization routine that could cause crash after release in some cases.
Fixed issues in Ax Battler: A Legend of Golden Ax.
Implemented the swap instruction in the new 68K core.
Switch to YMZ280B ADPCM algorithm.
Implemented the ext instruction in the new 68K core.
Fixed some YMZ263B timing issues
First attempt at PCM/ADPCM support in YMZ263B emulation
Prevent secondary windows from appearing right above the main one.
Implement bit instructions in the new CPU core
Fixed cycle counts for several instructions on the new 68K core.
Add region override for the German version of The Lion King for Pico.
Fix some behaviors of Pico ADPCM
Fixed crashes in Sanchoume no Tama and Sailor Moon Sailor Stars – Tokimeki Party
Fixed crashes when loading new ROM via drag/drop when existing ROM has locking enabled.
Removed additional DSR erasure.
Fix issue in Penn & Teller’s Smoke and Mirrors.
--0.6.2--
New Features
Zipped and gzipped SMD ROMs are now supported
Gain control for overall volume and FM/PSG invidually
Accuracy/Completeness Improvements
Fixed timing of a few instructions in Z80 core
Added optional emulation of YM2612 imperfections (aka "ladder effect")
Fixed some unintentional extra precision in some FM LFO calculations
Added a 1 sample delay in some FM operator results when used as modulators to match hardware
Bugfixes
Fixed regression in NBA JAM TE and possibly other 32MBit Acclaim mapper titles
Added code to handle controllers that have their d-pads mapped as buttons or axes
Removed some problematic SDL2 game controller mappings
Fixed crash that occurred when releasing mouse too clickly when loading a ROM
Fixed SMD ROM support
Fixed handling of audio contexts with more or less than 2 channels
Fixed off-by-one error in IO device selection UI
Fixed regression in GDB remote debugging support on Linux and OS X
Other Changes
MegaWiFi hardware can now be enabled by a header string (still gated by config)
Tweaked the style of checkboxes in the Nuklear UI to hopefully make the on/off state more clear
--0.6.1--
Bugfixes
Fixed build script so controller images are actually included so UI doesn't crash
Disabled most bindings when UI active (fixes crashes/wonkiness when pressing certain keys)
Fixed Windows implementation of get_config_dir() so config file ends up in %localappdata%\blastem like it should
Fixed the location of sticky_path on all platforms
Added virtual root directory used by ROM UI to new Nuklear UI
--0.6.0--
New Features
New Nuklear UI with almost complete access to configuration options
Added support for creating SDL2 mappings from inside the emulator
Loading ROMs from ZIP archives is now supported
Loading gzip compressed ROMs is now supported
Internal screenshots can now be in PNG format
New VDP plane debug view
VDP debug views are now in separate windows
Experimental support for sync to video (not enabled by default)
Preliminary support for MegaWifi cart emulation
Bugfixes
Fixed a number of 68K decoder bugs (mostly illegal instruction decoding)
Fixed implementation of the UNLK instruction when register is a7
Fixed a number of memory leaks
Accuracy/Completeness Improvements
Added support for J-Cart emulation
Implemented Z80 interrupt mode 2
Fixed the timing of a number of 68K instructions
Fixed the timing of the Z80 JP cc, nn instruction
Fixed the order bytes of a word are written to VRAM from the FIFO (fixes minor corruption in Road Rash 3 bike menu)
Other Changes
Added support for Open GL ES in addition to the existing desktop GL support
Some small optimizations
Added ROM DB entry for Squirrel King to support it's copy protection
Added support for float32 audio output (fixes an issue with defautl SDL2 driver in Windows when using more recent SDL2 versions)
--0.5.1--
New Features
Drag and Drop is now supported for loading ROMs
Save states are now supported for SMS games
Texture scaling method (linear or nearest neighbor) can now be selected in both renderers
Menu now filters files based on a configurable extension list
Lock on carts (Sonic & Knuckles and XBAND) can now be loaded via the menu
ROMs can be reloaded via a hotkey (defaults to F5)
Last path visited in the menu is now saved between runs (can be turned off via config)
Window height can now be specified in the config file
Bugfixes
Default shader doesn't look like garbage in interlaced mode anymore
Framebuffer pointers are properly released and reacquired on context switch (no more LOCKRECT errors)
ROMs specifying SRAM at the normal RAM address no longer cause a crash
Fixed an edge case in the s(tep) debugger command
Entering the option menu in Dragon's Fury no longer results in a fatal error in 32-bit builds
Screen is properly cleared so garbage will not appear when the window does not match the emulated display size
Fixed a regression in XBAND keyboard support
Accuracy/Completeness Improvements
Locking on Sonic 3 to S&K will now use Sonic 3's save RAM
Locking on a 4MB cart to S&K will now behave like on hardware
Support for several X-in-1 bootleg carts has been added
DMA from byte-wide SRAM now yields correct results
VScroll is now latched earlier in the line (fixes minor glithces in Top Gear 2 and Skitchin)
Sega/SSF2 mapper support now handles homebrew that uses SRAM
ODD flag timing now matches hardware
V counter as read from HV port is now correct in single-resolution interlace mode
Other Changes
Added a "subtle" CRT shader contributed by Anaël Seghezzi
Mouse is now only captured if an emulated mouse is plugged in to the emulated system
Missing mapping warnings will only be displayed for the first mapping of a controller
Save states now default to a format native to BlastEm
Remaining I2C EEPROM games have been added to the ROM DB
When not specified, height now respects the aspect setting rather than assuming 4:3
Pre-combined S&K ROMs and large (>2MB) S&K hacks should now work
Using ui.exit (default Escape) can now be used to cleanly cancel a load ROM or savestate action
Save states are now allowed in a more extensive range of Z80 states, fixing save state saving in some games
--0.5.0--
New Features
SMS emulation in the form of the Gensis/MD's backwards compatibility mode
Added support for SMS controllers
Support for the mapper used by Realtec games
Support for carts with fixed value registers
Support for enough of the XBAND cartridge hardware to allow the menu to boot
Basic XBAND keyboard emulation
Configurable display overscan
Fullscreen mode can now be toggled at runtime
Window can now be resized at runtime
Support for "semantic" controller button names in the gamepad mapping using SDL2's game controller API
Analog axes can now be mapped to emulated gamepad buttons or UI actions
System soft reset
Keyboard can now be captured when a Saturn or XBAND keyboard is connected to the emulated system
Internal screenshots that bypass all output filtering/overscan
Homebrew using the "SSF2 Mapper" is now supported via header detection like on the Mega Everdrive
Directory used for SRAM, EEPROM and savestates is now configurable
Path configuration values can now contain both BlastEm-specific and environment variable references
Open GL based rendering can be disabled in favor of the SDL2 render API fallback
Bugfixes
Fixed a bug that would cause a crash in certain games that have SRAM and ROM at the same address
Fixed some issues with Z80 interrupts that caused issues with sound/music in Sonic 2 and Puyo Puyo 2
Z80 debugger no longer crashes when resuming execution
Undocumented Z80 instruction "out (c), 0" now decodes properly
GDB remote debugging should now work with more recent versions of GDB
GDB remote debugging should now work on more recent versions of Windows
Overlapping instructions in self-modifying code no longer causes incorrect behavior
Z80 instructions "in c" and "out c" now work correclty on 32-bit builds
Specifying an output audio frequency higher than the FM frequency no longer deadlocks the emulator
Fixed memory map generation for games with 3MB ROM and SRAM at the 3MB mark
Accuracy/Completeness Improvements
YM2612 SSG-EG and CSM modes are now implemented
VDP Mode 4 is now implemented in both Genesis and SMS mode
Basic emulation of refresh delays has been added
68K interrupt latency has been made more accurate
CRAM contention artifacts (aka CRAM dots) are now emulated
DIVU/DIVS and MULU/MULS are now cycle accurate
MOVEM now performs the extra ignored read and has correct timing
The timing of serveral other 68K instructions has been fixed
Implemented 68K trace mode
SBCD flag calculation now matches hardware in 100% of cases
68K -> VDP DMA now properly has a delay at DMA start rather than at the end of the transfer
A number of illegal effective address mode/operation combinations now properly decode as illegal instructions
Added emulation of the slow rise time of an IO pin that was changed to an input when it was previously outputting 0
Partial support for the VDP test register
Partial support for the 128KB VRAM mode bit
Improved accuracy of low level sprite rendering details
Fixed handling of active/passive display transitions so that border extension tricks work
Fixed handling of horizontal interrupts in extended display areas
More accurate correspondance between horizontal counter and raster beam
Partial emulation of serial IO registers
Other Changes
Added Japanese version of Street Fighter 2: The New Challengers to ROM DB
Added the following EEPROM games to the ROM DB:Ninja Burai Densetsu
Rockman Mega WorldAdded ROM DB entries for the following games with incorrect region headers:Another World (E)
Alien Soldier (J)
Light Crusader (J)
Castle of Illusion - Fushigi no Oshiro Daibouken (J)
Atomic Robo-Kid (J)Added ROM DB entries for the following games which are incompatible with 6-button controllers:King of Monsters
Combat Cars
Second Samurai
Dungeons & Dragons - Warriors of the Eternal SunAdded ROM DB entries for the following games with fixed value registers:Ya Se Chuan Sho
16 Zhang Ma Jiang
Elf Wor
Huan Le Tao Qi Shu: Smart Mouse
Mighty Morphin' Power Ranges: The Fighting Edition
Super Bubble Bobble MD
Thunderbolt IIAdded ROM DBentries for teh following games that have bad/missing SRAM headers:Hardball III
Might and Magic - Gates to Another World
Might and Magic III - Isles of Terra
--0.4.1--
New Features
Basic support for the Saturn Keyboard adapter peripheral
You can now navigate up to a drive selection on Windows
Added support for binding more "special" keys
Bugfixes
It's now possible to navigate to the root directory on Unix-like systems
Fixed a bug in movep.l
Fixed a crash bug in the memory management code
Fixed a bug in the header parsing code, that caused a crash when the "International Name" field was empty
Fixed some minor graphical corruption in Sonic 2 split-screen caused by a bug in vflip combined with interlace mode
Corrected the PC value pushed onto the stack for line A emulator and line F emulator traps
Fixed a bug in ensure_dir_exists that would cause it to fail to create directories in some cases when mixed path separators were used
Fixed a bug that would result in a buffer overflow when starting a game with a long title from the menu
Accuracy
All Z80 instructions now implemented
Z80 half-carry flag is now fully implemented
Implemented undocumented Z80 flag bits
R register is now incremented appropriately
Redundant opcode prefixes are now handled properly
Z80 core now passes ZEXALL!
Other Changes
Added Buck Rogers to the ROM DB
Added Wonder Boy in Monster World to the ROM DB (for real this time)
Added Evander 'Real Deal' Holyfield's Boxing to the ROM DB
Slightly better handling of directory read errors
Added "Special Thanks" to About menu
Use local app data folder for saves and config files on Windows rather than Unix-style locations
--0.4.0--
New Features
Genesis ROM based Graphical User Interface - command line is no longer required for basic functionality
Added support for the Mega/Sega Mouse
Configurable low pass filter
68000 overclock and underclock
Scanlines can now be controlled via the config file and defaults to off (previously was always on)
VSync can now be specified via the config file and defaults to off (previously just used the OS/driver default)
Fullscreen mode can now be specified via the config file in addition to the command line flag
New 68K debugger command 'co' allows a list of commands to be run each time a breakpoint is hit
68K debugger now supports the 'di' command like the Z80 debugger
New debugger command 'yt' displays YM-2612 timer info
Added support for controller hotplug (game controllers don't need to be plugged in before starting BlastEm)
IO devices can now be automatically configured by ROM DB entries
Bugfixes
Fixed calculation of window start column - removes graphical glitches in Afterburner 2, Fireshark, Dungeons and Dragons: Warriors of the Eternal Sun and probably others
Fixed the implementation of LDD and LDDR
Fixed ABCD/SBCD - eliminates the score counter problem in Bubsy
Fixed btst when used with immediate destination - Fixes a crash in NHL 95
Fixed YM-2612 attack phase and sustain level
Fixed mapping of YM-2612 key on/off bits to operators
Fixed YM-2612 LFO AMS shift values
Fixed YM-2612 LFO phase modulation
Fixed mapping of registers to operators in Channel 3 special mode (for real this time)
Fixed a small bug in YM-2612 timer reloads
Fixed peripheral ID for 3-button pad
Accesses by the 68K to the low 4MB of the address space, but outside of the defined ROM will no longer cause a crash
Config files and shaders saved with Windows-style line endings will no longer fail to load
Fixed a crash bug on Windows by properly detecting invalid destination modes for immediate variant opcodes
Accuracy/Completeness Improvements
All 68000 instructions are now implemented
Implemented 68000 privilege, address error and illegal instruction exceptions
Z80 half carry flag is now implemented for the trivial cases
Fixed timing of the Z80 IM and certain LD variants
Implemented interrupt latency - Fixes Sesame Street: Counting Cafe
Interrupts are know acknowleged based on what the VDP thinks its asserting rather than what the 68K actually is acking - Fixes Fatal Rewind
Improved timing of 68000 interrupt processing
Improved timing of Z80 busack response - Fixes a crash in Barkley: Shut Up and Jam
Adjusted the amount of time the 68000 is blocked during DMA - gets rid of remaining part of "YOUR EMULATOR SUX" text in overdrive
Corrected order individual words of a longword are written when the predecrement addressing mode is used as the destination of a move instruction
Adjusted relationship between Horizontal counter and render events to better match tests/measurements
Adjusted vertical interrupt timing to better match measurements
Improved timing of 68K/Z80 interactions based on tests
Other Changes
Z80 disassembler now supports a start offset parameter: -s
Windows build now uses link time optimization like the others
Optimized the VDP code
Improved audio resampling
Added Mega Man - The Wily Wars to ROM database
Added Wonder Boy in Monster World to ROM database
--0.3.1--
New Features
BlastEm will now open a new terminal window when starting the debugger if it's not attached to one
Errors are displayed in a message box if no terminal is attached
Pure SDL render path for when OpenGL 2 is unavailable (thanks Higor EurÃpedes)
Bugfixes
GDB remote debugging works again
Fixed a name conflict that prevented vgmplay from being built on OS X
Other Changes
Windows build now includes the disassemblers, VGM player and save state viewer
--0.3.0--
New Features
32-bit x86 CPUs are now supported
BlastEm is now available for OS X and Windows
Finished support for the Sega mapper used by Super Street Fighter 2
Added support for EEPROM saves
Added support for large flat-mapped ROMs (used by some homebrew ROMS)
New 68K debugger command bt (backtrace)
I/O devices (gamepads and other peripherals) can now be configured in blastem.cfg
VDP Debugger views from before 0.1.0 have been restored
Bugfixes
Partial emulation of floating bus bits for certain I/O regs (fixes Super Offroad 2)
Fixed shadow/highlight mode
Implemented AM and fixed LFO update speed
Fixed negative detune values
Corrected register to operator mapping for channel 3 special mode
Initial stab at emulating cycles being stolen from the 68K when the Z80 accesses its bus
Better handling of creating a savestate in "uncooperative" games/demos
Implemented VSCROLL latching
Fixed a bug that would corrupt the Z80's SP register in some situations
Fixed PAL flag in VDP status register
Fixed HV counter
Fixed flag calculation for RRA, RRCA, RLA and RLCA
Fixed instruction timing for RR, RRC, RL and RLC when using the IX or IY registers
Fixed access to the I and R registers
Other Changes
Upgraded to SDL2
Dropped suport for the non-OpenGL render path
Linux builds should now work on something other than the specific version of Ubuntu I happen to be using at build time
BlastEm now syncs at least once per line by default. You can change this behavior with the max_clocks config value
--0.2.0--
New Features
Added Turbo and Slow modes that overclock and underclock the system respectively
Added FPS counter
New OpenGL render backend that allows filters to be writte in GLSL
Support 'UI' bindings on gamepad buttons and dpads
GDB remote debugging support
New debugger 68K debugger commands o, s and zp (see README for details)
Bugfixes
Fixed argument handling so that the ROM filename does not need to be specified first
Don't allow register writes to Mode 5 only regs when in Mode 4
Fixed a bunch of VDP edge case behavior checked by Nemesis's test ROM
Fixed operator 1 self-feedback
Fixed handling of envelope overflow in attack phase
Fixed handling of channel output overflow
Adjusted FM and PSG volume to better match real hardware
Improved YM-2612 busy flag emulation
Properly sync hardware at end of frame when the 68K is blocked by DMA
Approximate wait state behavior when the Z80 accesses the 68K's bus
Implemented HV counter latch
Implemented sprite overflow and collision flags
Fixed the timing of several Z80 instructions
--0.1.0--
Initial Release