Ymir 2.0 12/10/2025
This update introduces low-level CD Block emulation, an optional major feature that significantly improves accuracy. Additionally, this release features a simple automatic update check that you can opt-in, SH-2, M68000 and SCU DMA timing accuracy improvements and a handful of the usual bug fixes.
The build system has been upgraded to support more complex libraries such as curl and OpenSSL. These libraries enable implementation of HTTP web requests, which allows Ymir to check for updates directly from GitHub releases (like the one you're reading right now). Because of these changes, the macOS build has been split into x86_64 and ARM64 builds instead of an universal package.
This version also fixes a known issue in version 0.1.8 related to the rewind buffer.
The CD Block LLE changes have not introduced any breaking changes to the save state file structure -- 0.2.0 is still compatible with 0.1.x save states.
Important: CD Block LLE mode fundamentally changes how CD Block emulation works. For that reason, enabling and disabling the option forces a hard reset as it is near impossible to reconciliate the HLE and LLE states. Save states created in LLE mode require the user to have the CD Block ROM used to originally create the state in order to load it. Save states created in HLE mode require no extra ROM. Loading a save state will automatically adjust the CD Block LLE mode accordingly and attempt to load the matching ROM if available. If the ROM cannot be found, the save state will not be loaded. Starting from this version, expect the next updates to come a bit slower and/or with less bullet points in the changes list, as I'm going to divide my attention with other projects.
New features and improvements
- App:Added option to check for updates on startup. Also added manual update check action. (#110)
- Build:Create macOS app bundle. (#591; @tegaidogun)
- Cart:Add 6 MiB development DRAM cartridge, required by the Heart of Darkness prototype. (#584)
- CD Block:Implemented optional low-level emulation mode. Requires valid CD Block ROMs and has considerable performance cost, but fixes numerous issues when enabled:
- Gunbird music no longer stops when pausing and resuming the game (#625)
- Mr. Bones is now 100% stable (#494)
- Pocket Fighter's audio and video are now in sync (#222)
- X-Men:Children of the Atom no longer hangs on the loading screen (#488)
- X-Men vs. Street Fighter and Marvel vs. Street Fighter no longer hang at the end of the Capcom logo (#507)
- Several games now boot properly:
- Primal Rage (USA) (#225)
- Hop Step Idol (#512)
- Hissatsu Pachinko Collection (#536)
- DonPachi (#475)
- Shichuu Suimei Pitagraph (#549)
- Deroon Dero Dero (#501)
- Sol Divide (#470)
- ... and probably more
- GameDB:Apply game-specific settings directly in the emulator core rather that from the frontend.
- GameDB:Include Heart of Darkness prototype to automatically insert the 6 MiB development DRAM cartridge, allowing it to go in-game. (#584)
- GameDB:Introduce flag to force fast bus timings to work around issues with X-Men/Marvel Super Heroes vs. Street Fighter. (#507)
- GameDB:Support for using disc hashes to the database in addition to product codes.
- M68K, SH2:Implement approximate bus access timings. Fixes softlocks in Resident Evil, Shichisei Toushin Guyferd - Crown Kaimetsu Sakusen, and Densha de Go. (#41, #42, #333, #523)
- Media:Support WAVE audio tracks.
- SH2:Cycle count DMAC transfers. Necessary for CD Block LLE.
- SH2:Optimize watchpoint checks to reduce performance penalty when debug tracing is enabled.
- SMPC:Preinitialize OREG31 to 0xF0 to avoid lockup when attempting to boot the dev kit BIOS. (#612)
- VDP2:Added CRAM palette viewer/editor.
- VDP2:Added debug overlays:single layer view, layer stack, window states, RBG0 rotation parameters, color calculations, and shadows.
Fixes
- App:Avoid crash if the <profile>/roms/cart folder is deleted while the emulator is running and the user loads a game that needs to load a cartridge from that folder.
- CD Block:Properly initialize internal filesystem state and remove unnecessarily strict save state check. Fixes crashes related to the rewind buffer.
- GUI:Limit maximum size of various windows.
- Media:Allow loading CHDs that don't contain raw sector data, such as those created from ISOs.
- Media:Restrict ISO loader to files with the .iso extension to prevent users from loading .bin files instead of the .cue files.
- Media:Tracks now include the unit sizes along with sector sizes, only needed for CHDs.
- Rewind:Allow varying the size of the state struct. Fixes occasional crashes when rewinding.
- SCU:Delay immediate transfer interrupt signals based on the transfer length. Fixes multiple hang/freeze/crash issues:
- Advanced V.G. (#227)
- Angel Graffiti S - Anata e no Profile (#461)
- Arcade Gears Vol. 1 - Pu-Li-Ru-La (#468)
- DeJig games (#399, #541)
- Dream Square - Hinagata Akiko (#361)
- Ferox prototype (#609)
- GeGeGe no Kitarou - Gentou Kaikitan (#396)
- Gekka no Kishi - Ouryuu-sen (#353)
- Goiken Muyou - Anarchy in the Nippon (#556)
- Horror Tour (#319)
- Kuro no Danshou - The Literary Fragment (#610)
- Mahou Shoujo Pretty Samy - Heart no Kimochi (#431)
- Marie no Atelier Ver. 1.3 - Salburg no Renkinjutsushi (#619)
- Mario Mushano no Chou Shougi Juku - Mario Mushano's Hyper Shogi School (#430)
- Nonomura Byouin no Hitobito (#436)
- Pastel Muses (#380)
- Tenchi Muyou Rensa Hitsuyou (#339)
- Several homebrew apps (#620, #626)
- SCU:Make DMA transfers interruptible to support LLE CD Block interactions.
- VDP1:Adjust Y coordinate framebuffer offsets for erase process based on TVMR.TVM. Fixes erase glitches in Grandia when using transparent meshes.
- VDP2:Bitmap delays only occur if the timings are mapped to different VRAM chips, not banks. Fixes right team name plate being shifted left during game intro in 3D Baseball. (#593
- VDP2:Clear framebuffer when switching resolutions. Fixes single-frame artifacts in multiple games that switch modes without clearing the screen.
- VDP2:Shift one cell of 2x2 character patterns which have illegal access cycles. Fixes garbled text in Shichuu Suimei Pitagraph. (#549)
- VDP2:Use line color calculation ratio when LNCL is inserted on top of a layer that uses color calculations. Fixes text dialog background in Find Love 2 - The Prologue. (#618)
- VDP2:Use TVMD.DISP from threaded state if rendering with dedicated VDP2 thread. Fixes black stripes on the bottom of the screen in Bug! (#623)