Version 0.7.0 (2026-09-28)
License change
- Relicensed source code to GPL-2.0-or-later (upstream commit)
Thanks @nukeykt for all the work you've done and for releasing this project!
Performance improvements
The main new feature in this release is a new H8/532 VM that supports instruction caching. Compared to 0.6.1, measured render times are 1.51x faster for mk1 romsets and 1.40x for mk2 romsets. The exact figures will vary based on your hardware.
- Optimized interrupt handling for a 1-22% overall performance improvement (depending on romset).
- Rewrite H8/532 VM from scratch to support instruction caching and reduce number of ROM reads. 12-16% performance improvement (depending on romset).
- Optimized timer updates for a 10-13% performance improvement (depending on romset).
Romset management
Romset management has been overhauled thanks to contributions from @michaelmouton.
In this release, romsets passed on the command line can be passed using a new format, <family>-<version>. <family> is one of the names that you could previously pass such as mk1 or mk2 and <version> is a specific version of that family.
Romset names using the older format are still supported.
Enhancements
- Added the ability to load specific versions of romsets when loading roms by hash. Pass
--helpto see the list of accepted names or refer to supported romsets. - Updated hashes for several romsets thanks to @michaelmouton. (#56)
- Added rom hashes for MK1 versions 1.00, 1.10, and 1.20 as well as SC155MK2 CTF-patched roms thanks to @akse0435. (#58, #59)
- Reduced the amount of hashing done when loading roms by hash.
- Hid debug messages coming from the backend. These can be re-enabled by passing
--debugto either frontend. - Added a
--quietflag to suppress messages entirely. (#43) - The hash based rom loader now looks for roms in the rom directory recursively.
Bug fixes
- Fixed a bug where selecting a specific romset using
--romsetwould cause the emulator to not load all the roms in that romset. - Fixed a bug where the renderer output was ~20% slower than the set tempo when using a JV880 romset.
- Fixed a subtle timing bug that caused sample output for the JV880 to differ slightly from upstream.
- Fixed a bug where
--disable-oversamplingwith an mk1 romset would cause the renderer to run indefinitely. (#48) - Fixed a bug that caused
--legacy-romset-detectionto fail loading any roms. (#60) - Fixed the hash based rom loader incorrectly mixing and matching roms from different romset versions.
- Fixed bit-flips in interp table (upstream commit)
Notes for developers using this project as a library
This release contains a large breaking refactor of the hash based rom loader. AllRomsetInfo has been removed because there is not a 1:1 mapping between Romsets and specific versions of that romset. Many functions in rom_io have been changed to operate on RomsetInfo instead. To deal with this new requirement, DetectRomsetsByHash has been replaced with two types: HashedFileRegistry for storing file hashes and RomsetHashRegistry for storing romset hashes. These provide more control over how roms are located and
are easier to use.
If you don't care about any of these features, you can simply populate RomsetInfo::rom_data with rom contents (as they exist on disk) and call Emulator::LoadRoms.
Release metadata
SHA256: 631e773eb200c38c58fd008c7a3e660530a59ea16fdf43e2f4354e13e8e666f1 *Nuked-SC55-x86_64-w64-mingw32-0.7.0.zip
Full Changelog: 0.6.1...0.7.0