EmuNews

Ymir

StrikerX3/Ymir

15 tracked updates · latest 17 days ago

GitHub

Latest nightly release

latest-nightly nightly / pre-release
Release notes · 8 files

This is a nightly release built from the latest commit. Before you use these builds, make sure to backup your data, especially the save states!

Save states are constantly evolving and are only guaranteed to be compatible on stable (numbered) releases. The file format may be changed without notice, so be careful when using save states from nightly releases.

You can find the changelog for this build here.

[!NOTE] Nightly builds include experimental and in-development features that may not work properly. When reporting issues, make sure to include the version number (Help > About > Copy version).

[!IMPORTANT] It is recommended to install the latest GPU drivers in order to use Direct3D or Vulkan:

Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version, make sure to grant Ymir permission to access the filesystem or your disc images won't load properly.

Ymir v0.4.1

v0.4.1 release
Release notes · 8 files

Ymir v0.4.1

Discord | Patreon | Compatibility list | Screenshots

This is a small maintenance release that fixes a Windows ARM crash on startup caused by a DXC build issue.

Check v0.4.0 release notes for details on what's included in this release.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

It is recommended to install the latest GPU drivers in order to use Direct3D or Vulkan:

Do not use Windows Device Manager or Windows Update to update your GPU drivers, as they tend to have poor performance and lack support for advanced GPU features.

Always update your integrated GPU driver first, even if you're not using it. This also applies to desktop PCs with dedicated graphics cards.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 12 (Monterey) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

Ymir v0.4.0

v0.4.0 release
Release notes · 8 files

Ymir v0.4.0

Discord | Patreon | Compatibility list | Screenshots

SDL Renderer has been the backbone of graphics on Ymir... until now. Ymir now supports Direct3D 12 and Metal (with Vulkan to come in the future), which will enable implementation of shaders and resolution scaling down the line. Direct3D 12 also supports hardware-accelerated VDP rendering, offloading heavy graphics computations to your GPU for a significant performance boost with no accuracy compromises -- it's as accurate as the software renderer, save for undiscovered bugs. Other graphics backends will eventually support acceleration as well, hang tight!

The Virtua Gun has been promoted to a stable feature after numerous bug fixes and accuracy improvements that made it work flawlessly with most supported games. Known issues are listed in #787: only one game doesn't register shots, and three don't recognize reloads consistently.

Good news for old Mac owners: Ymir should now run on macOS 12 (Monterey)! The macOS build configuration was targeting the default version, which happened to be 15 for a while until GitHub decided to upgrade their build runners and push the default to 26. This prompted us to look into those builds and lower the minimum version to 12, which is the lowest supported version by the current runner.

Finally, as you've come to expect, every big release comes with dozens of polish passes, crash and bug fixes, accuracy improvements, performance boosts, and better compatibility. Ymir 0.4.0 is now compatible with 94.4% of the entire Saturn library, and can run up to 10% faster with SCSP threading compared to 0.3.3, or even more if you enable GPU-accelerated VDP1/VDP2 rendering.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

It is recommended to install the latest GPU drivers in order to use Direct3D or Vulkan:

Do not use Windows Device Manager or Windows Update to update your GPU drivers, as they tend to have poor performance and lack support for advanced GPU features.

Always update your integrated GPU driver first, even if you're not using it. This also applies to desktop PCs with dedicated graphics cards.

Compatibility improvements

Here's a small showcase of games that now work on v0.4.0 or had major bugs fixed:

image

Sporting the shiny new Direct3D 12 GPU-accelerated renderer!

Ymir's compatibility list now lists 94.4% compatibility with all tested games.

image

The main compatibility boosts from this version came from CD Block and SMPC fixes. If you've been reading the release notes for past versions of Ymir, you know that these two tend to be troublemakers.

CD Block HLE had some nasty bugs stopping games from booting or causing crashes mid-game. With the help of @celeriyacon's test ROMs and some of @StrikerX3's sleuthing, many of these bugs have been squashed, allowing Virtual On - Cyber Troopers to no longer crash on match replays, Gunbird's music to resume properly after pausing the game, and several games that only booted with CD Block LLE to also work with HLE.

@warmenhoven's fixes to the CHD loader along with @StrikerX3's fixes for the CUE/BIN loader also improved compatibility with homebrew games/apps, non-Redump disc dumps, and some games running with CD Block LLE. @surajrbhardwaj (a new contributor) has added support for OGG and MP3 audio tracks to the CUE loader, commonly used by homebrew games.

Some tweaks to SMPC command responses and behavior have brought a few more non-booting games to life, including Fist, Idol Mahjong - Final Romance R, Madden NFL 97, Ten Pin Alley and UEFA Euro 96 - England, and fixed crashes in Guardian Heroes, Gekitotsu Koushien and No-appointment Gals Olympos.

A small fix to SCU DMA transfers now allows GunBlaze-S to boot. It's the same issue encountered by Mednafen where the game attempts to do a large DMA transfer that would overwrite VDP1 registers.

A few more VDP1 and VDP2 changes fixed a regression in Alone in the Dark - One-Eyed Jack's Revenge where the game would freeze during the intro animation and a crash after beating DoDonPachi's second boss.

The 3D Control Pad also saw some fixes and improvements this version:

  • When in Digital mode, the analog sticks will now automatically map to the D-Pad.
  • A couple of peripheral report fixes resolved some input bugs in Deep Fear, Bug Too and Black/Matrix.

Virtua Gun

Properly emulating the Virtua Gun involves coordination between the SMPC, VDP2 and the frontend application. One small issue alone in SMPC emulation was causing shot detection issues in most games -- with that squashed, more than half of the list of problems was solved. A couple more tweaks to the VDP2 side fixed shot offsets and reload detection in more finicky games. To complete the trifecta, the input system introduces a small amount of jitter mimicking inaccurate reads from a real Virtua Gun to improve shot registration in one particularly picky (and, quite frankly, horrible) game: Death Crimson.

With all these fixes in place, the Virtua Gun is now solid and promoted to a stable feature, making it available for use in all builds.

One additional feature added to the frontend completes the polish pass for the peripheral: you can now constrain the mouse cursor to the display area, stopping you from accidentally shooting yourself in the foot the launch nuke button the ad that keeps popping up in your browser the X button and closing the emulator altogether.

Internal game database

The internal game database includes additional information about games that are not present in the disc media, such as which cartridges are required for them to boot (DRAM cartridges for fighting games, ROM cartridges for King of Fighters '95 and Ultraman: Hikari no Kyojin Densetsu), and a number of game-specific flags and hacks to help boost compatibility where Ymir's accuracy isn't quite up to snuff yet.

Thanks to recent accuracy improvements, some game-specific hacks are no longer needed and have been disabled in the internal game database:

  • Chisato Moritaka - Watarase Bashi & Lala Sunshine: no longer crashes at startup. (#604)
  • Deep Fear: no longer freezes after the "April Fools!" voice line. (#740)
  • Marvel Super Heroes vs. Street Fighter: no longer crashes at the end of the Capcom logo. (#507)
  • Mega Man X3 / Rockman X3: sprites are not glitched anymore. (#244)
  • Metal Fighter Miku: goes in-game, no longer stuck after start menu. (#466)
  • Soviet Strike: VDP1 graphics no longer flicker.

But with changes to emulation accuracy and further testing, other games end up needing these flags:

  • 3D Baseball: slow down VDP1 execution speed in to fix team name plates and announcer voice line glitches.
  • Dino Island: force-enable SH-2 cache emulation to fix palette glitches. (#764)
  • Dragon Force II: force-enable SH-2 cache emulation to fix black screen when entering 100 vs 100 battles. (#945)
  • Hissatsu!: force-enable SH-2 cache emulation to fix crash at startup. (#943)
  • No-appointment Gals Olympos: force-enable SH-2 cache emulation to fix crash during animations.
  • Resident Evil: force fast bus timings to fix start menu crashes

This list is constantly updated as testers find ways to work around bugs and Ymir's accuracy changes over time.

Accuracy improvements

@celeriyacon's test ROMs have been an indispensable tool to push Ymir's emulation accuracy to the next level. A couple more SCSP fixes (which is already very solid and ahead of Mednafen's) introduces a rare one-shot PCM bug that happens on real hardware and might interest homebrew developers. These tests also helped fix a couple of small details caused by the clock change reset signal -- no games are affected by this, but if homebrew apps end up relying on these states, they will now work correctly.

Nearly every version of Ymir includes graphics fixes and accuracy improvements. Here's a few of the accuracy fixes done to VDP1 and VDP2 this version:

  • Derby Analyst now renders the selected main menu option in a stripe pattern instead of completely black.
  • After the introduction of color gradation in v0.3.3, the fog in The River of Dreams level in Astal would render incorrectly. This is now fixed.
  • In Dark Savior, the Sound Test screen text no longer blends in with the background.
  • Certain homebrew apps abuse the VDP2 TVMD DISP flag. Disabling it mid-frame stops updating LNCL/BACK screens for the remainder of the frame.

In addition to this, threaded VDP1 (#898) and VDP2 in the software renderer had several race condition issues fixed. Rendering is now consistent regardless of setting the threading option on and off. Games affected by this include:

  • The black screen immediately after selecting the characters in Virtua Fighter 2 now consistently happens partway through the frame at the same location as unthreaded VDP2 rendering.
  • Reading VDP2 EXTEN register from the debugger should no longer cause the camera in Digital Dance Mix Vol. 1 - Namie Amuro to pan weirdly.
  • Opening the memory viewer in the VDP1 framebuffer region should no longer cause deadlocks or degraded performance.
  • The threaded VDP1 renderer will now write back FBRAM writes to the main emulator core state, fixing graphics glitches in Waialae no Kiseki - Extra 36 Holes and other golf games using the same engine.

The weakest parts of emulation right now are SMPC, bus contention and memory access timings. These are going to be the focus of the next release.

Performance improvements

SCSP threading already brought a nice performance boost in the majority of games when enabled. A few more microoptimizations have boosted its performance even further, by up to 10% depending on the workload. The SH2 interpreter also had a small performance tweak, boosting overall emulation speed by another 1-3%. The software renderer was not left behind: another 1-3% boost comes from a handful of VDP1 optimizations aiming to eliminate redundant work.

Every little bit counts for weaker CPUs.

But of course, the spotlight of this release is...

Graphics and GPU acceleration

Ymir has been using the SDL Renderer API exclusively for its graphics user interface rendering, which limited access to native graphics APIs. An experimental branch added Direct3D 11 rendering support on top of it, but it was a hack at best -- SDL3 developers are planning to phase out support for modern graphics APIs from it in favor of SDL GPU, which is not as flexible and powerful as the native APIs and would've killed the Direct3D 11 renderer outright.

Ymir v0.4.0 introduces an overhauled graphics backend, adding support for Direct3D 12 on Windows (by @StrikerX3) and Metal on macOS (by @SternXD), with SDL Renderer as a fallback in other systems without support for either graphics API. Vulkan (which is being worked on by @Wunkolo) and Direct3D 11 (planned by an overworked @StrikerX3) didn't make it in time for this release.

Hardware-accelerated VDP1/VDP2 rendering is now possible with Direct3D 12 only. Other backends still need to implement the necessary plumbing to support it, which will come in a future release of Ymir (hopefully the next one). Enabling this option offloads almost all VDP1/VDP2 rendering work to your GPU, resulting in a boost to emulation performance as the bottleneck tends to be either VDP2 or SH2 emulation.

image

High-resolution games see the biggest boosts.

image

Deinterlacing isn't free with the software renderer, but it doesn't even put a dent in the hardware renderer's performance.

image

Even low resolution games benefit from the GPU. This one has both enhancements active. And in case you're wondering: yes, transparent meshes are basically free on the GPU.

With all this extra performance, we have plenty of headroom to explore enhanced rendering options like resolution scaling. @StrikerX3 has tried implementing this, but there are several architectural decisions made in the past making the work more difficult than it had to be, so for the sake of not delaying the version any further, it has been decided to release 0.4.0 without this feature.

UI features

Those of you with sharp eyes might have noticed a small (?) next to some options. Hovering your mouse over it reveals an explanation of the option:

image

Remember: read everything! This has been a feature since before v0.1.0.

Starting from v0.4.0, these icons are much more visible:

image

They were always there.

The UI now displays a volume slider when adjusting the volume:

image

Ymir now supports Discord Rich Presence, thanks to @SternXD.

image

Now you can show your friends you have good taste in retro gaming.

GUI scaling now causes all styling to be recomputed from scratch and should no longer cause the Settings window (and other ImGui windows) to blow out of proportion and out of the window area. Also, the Persist window geometry option will no longer store full screen coordinates, preventing an issue where Ymir would launch in full screen and never come out of it. If you had problems with this before, Ymir will fix itself next time you launch it and reset the window position to the default.

Other small but useful changes:

  • There is a new option in the File menu to open the screenshots directory.
  • In Settings > General you will find a new option to unpause the emulator when loading discs (enabled by default).
  • The term "IPL" refers to the Saturn's BIOS. This is now clarified wherever it shows up

Debugger

The debugger was not a big focus of this release, but it still got some improvements:

  • The VDP2 debug overlay can now display RBG0 and RBG1 line color in single layer view mode.
  • There is a new basic VDP2 registers view, showing the current resolution and interlacing mode, even/odd field, horizontal and vertical blanking signals, latched coordinates, color RAM mode and VDP2 sprite readout size.
  • When debug tracing is enabled, the SH-2 debugger will break whenever an SH-2 CPU hits an unaligned or illegal address -- a strong indication that something went horribly wrong. Combined with the call stack view, this can be extremely useful to find serious emulation or homebrew software bugs.

Other odds and ends

Some users (@StrikerX3 included) noticed that Ymir sometimes takes a while to launch. This boiled down to the MIDI library taking a long time to initialize. In 0.4.0, MIDI components are initialized asynchronously -- it may take a while for MIDI options to be available, but now Ymir launches immediately.

Some Kronos-created backup RAM files could not be imported in Ymir due to a very strict language code check. This was removed, and Ymir will now happily load such backup RAM images.

The embedded M PLUS U font files were shrunk by @4re, reducing binary size, but the new graphics backend implementation took its place so the resulting binary is still larger than before. Well worth it!

Finally, SMPC settings are now persisted per region rather than being a global setting shared by all IPLs. This is because some regions store settings differently than others, causing the language to change when switching from e.g. USA to Japan. Existing settings will be migrated to the new files automatically, so you won't have to reconfigure the system whenever the region changes.

Known workarounds

You can unblock and play a relatively large set of no-boot games with a debugger trick:

  • Run the game until you hit a black screen (usually after the Sega licensing logo).
  • Open Debug > Open memory viewer.
  • Jump to 60FFC13 (copy-paste this number in the field next to Range at the bottom of the window and press ENTER).
  • Modify the value to FF (you can immediately type FF right after pressing ENTER).

Some games may require multiple applications of the trick at different points to work.

This applies to:

  • Another Memories (Japan)
  • Device Reign (Japan)
  • Eternal Melody (Japan) (Rev A)
  • Game de Seishun (Japan) (Rev A)
  • Ginga Eiyuu Densetsu Plus (Japan)
  • Highschool Terra Story (Japan)
  • Ishin no Arashi (Japan)
  • Kamen Rider - Sakusen File 1 (Japan)
  • Machi (Japan) (Demo)
  • Magical Drop III - Toretate Zoukan-gou! (Japan) (Demo) (1M)
  • Murakoshi Seikai no Bakuchou Nihon Rettou (Japan)
  • Ninja Jajamaru-kun - Onigiri Ninpouchou Gold (Japan) (Demo)
  • Photo Genic (Japan)
  • Real Sound - Kaze no Regret (Japan)
  • Roommate - Ryouko in Summer Vacation (Japan) (2M)
  • SD Gundam G Century S (Japan)
  • Shutsudou! Miniskirt Police (Japan)
  • Super Tempo (Japan)
  • Tennis Arena (Japan)
  • Tilk - Aoi Umi kara Kita Shoujo (Japan)
  • Yuukyuu Gensoukyoku (Japan)
  • Yuukyuu Gensoukyoku 2nd Album (Japan)
  • Yuukyuu Gensoukyoku Demo (Japan)
  • Yuukyuu Gensoukyoku ensemble (Japan)
  • Yuukyuu Gensoukyoku ensemble 2 (Japan)
  • Yuukyuu no Kobako Official Collection (Japan)
  • Zero4 Champ DooZy-J Type-R (Japan)

(Yes, the list has grown since the last version. All of these games suffer from the same symptom.)

New features and improvements

  • App: Added Discord Rich Presence support. (#260, #917; @SternXD)
  • App: Added option to File menu to open the screenshots directory.
  • App: Added option to unpause emulator when loading discs. Enabled by default, which changes established behavior.
  • App: Clarified IPL ROM meaning in the Welcome window and IPL settings tab -- it refers to the BIOS.
  • App: Display volume indicator on the top-right corner of the window for a few seconds after adjustments.
  • App: Persist SMPC data per region based on the loaded IPL ROM region:
    • smpc-us_eu.bin: USA, Europe -- SMPC area codes 4, 5, A, C, D
    • smpc-jp.bin: Japan -- SMPC area code 1
    • smpc-asia.bin: Korea, Taiwan -- SMPC area codes 2, 6
    • smpc-other.bin: Other (invalid) SMPC area codes
    • The old smpc.bin will be automatically migrated to these files as you use IPL ROMs for each region.
  • App: Shrink embedded M PLUS U font files by removing unused glyphs, reducing binary size. (#915; @4re)
  • Build: Lower macOS version requirement to 12.0 Monterey. (#954)
  • Debugger (SH2): Break when PC is unaligned or in an illegal area while debug tracing is enabled.
  • Debugger (VDP2): Added RBG0 and RBG1 line color single stack views to the VDP2 debug overlay.
  • Debugger (VDP2): Added basic VDP2 registers view.
  • Graphics: New graphics backend, adding support for native graphics APIs:
    • Direct3D 12 on Windows (@StrikerX3)
    • Metal on macOS (#929; @SternXD)
    • SDL Renderer wherever it's supported (@StrikerX3)
    • Vulkan and Direct3D 11 didn't make it in time for this release
  • Input: Added option to constrain mouse cursor to window in system cursor mode.
  • Input: Convert 3D Control Pad analog stick to D-Pad inputs when in digital mode.
  • Input: Graduate Virtua Gun to stable feature.
  • Input: Introduce a small amount of jitter to the Virtua Gun aim in Death Crimson. Greatly improves shot detection in the game. (#787)
  • Media: Added support for MP3 and OGG audio tracks to CUE loader. (#920; @surajrbhardwaj)
  • SCSP: Threading microoptimizations -- up to 10% faster.
  • SH2: Interrupt recalculation microoptimizations -- 1-3% faster.
  • SMPC: Remove direct dependency to filesystem API for data persistence.
  • VDP1: Software renderer performance microoptimizations:
    • Do these once per command instead of per pixel:
      • Determine double density mode
      • Get references to VDP1 registers
      • Shift/mask color bank values
  • VDP1/VDP2: Hardware-accelerated rendering with Direct3D 12 is now available.

Fixes

  • App: Don't persist window geometry in full screen mode.
  • App: Initialize MIDI subsystem asynchronously. Fixes some cases where the application takes a long time to start up.
  • App: Reset window geometry if it matches the bounds of a display to prevent "remember window geometry" from loading full screen coordinates.
  • Backup RAM: Fix crash when attempting to load a backup RAM cartridge with the default path.
  • Backup RAM: Remove strict language check when importing files. Fixes importing save files from Kronos's backup RAM cartridges. (#942)
  • CD Block (HLE): Adjust calculated sector sizes to requested get length.
  • CD Block (HLE): Create a dedicated scratch buffer for disc playback. Fixes crashes on replays in Virtual On - Cyber Troopers. (#246)
  • CD Block (HLE): Emulate read FIFO for all read transfers. (thanks to @celeriyacon)
  • CD Block (HLE): Get/Calculate Actual Size nuances.
  • CD Block (HLE): Handle default end of disc parameter in Play Disc. Fixes Gunbird song not resuming after pausing. (#625)
  • CD Block (HLE): Introduce Busy status when pausing playback and ending data transfers. Fixes multiple games:
    • Amagi Shien now goes in-game. (#309)
    • Brain Battle Q (Japan) now goes in-game. (#586)
    • Flash SegaSaturn Vol. 29 - Langrisser V demo now plays in full. (#571)
    • Hebereke's Popoitto now goes in-game.
    • Hissatsu Pachinko Collection now goes past the SEGA licensing screen and reaches in-game. (#536)
    • Legend of K-1 - The Best Collection FMVs no longer corrupt. (#758)
    • Magical Drop III - Toretate Zoukan-gou! now plays intro animation after Data East logo. (#464)
    • WanChai Connection now goes in-game. (#600)
  • CD Block (HLE): Report current CD status and raise CMOK HIRQ signal when processing unimplemented commands.
  • CD Block (HLE): Report wait status when attempting to calculate actual size of more sectors than available in a partition.
  • CD Block (HLE): Read reset position flag correctly from parameters.
  • CD Block (LLE): Fix audio track playback failing for tracks 16 and higher. Fixes Virtual On - Cyber Troopers credits and the songs in certain arenas.
  • GameDB: Disable a number of game-specific hacks that are no longer required:
    • Chisato Moritaka - Watarase Bashi & Lala Sunshine: no longer crashes at startup. (#604)
    • Deep Fear: no longer freezes after the "April Fools!" voice line. (#740)
    • Marvel Super Heroes vs. Street Fighter: no longer crashes at the end of the Capcom logo. (#507)
    • Mega Man X3 / Rockman X3: sprites are not glitched anymore. (#244)
    • Metal Fighter Miku: goes in-game, no longer stuck after start menu. (#466)
    • Soviet Strike: VDP1 graphics no longer flicker.
  • GameDB: Force-enable SH-2 cache emulation for multiple games:
    • Dino Island: fix palette glitches. (#764)
    • Dragon Force II: fix black screen when entering 100 vs 100 battles. (#945)
    • Hissatsu!: fix crash at startup. (#943)
    • No-appointment Gals Olympos: fix crash during animations.
  • GameDB: Force fast bus timings on Resident Evil to fix start menu crashes. (#907)
  • GameDB: Slow down VDP1 execution speed in 3D Baseball to fix team name plates and announcer voice line glitches. (#593)
  • GUI: Reinitialize style from scratch when rescaling GUI elements. Fixes Settings windows (and probably others) from growing extremely large when constantly switching display scales.
  • Input: Set least significant bits of 3D Control Pad analog reports to all ones. Fixes double inputs in Deep Fear. (#744)
  • Input: Make 3D Control Pad peripheral report in digital mode match the Standard Pad. Fixes broken inputs in digital mode in the following games:
    • Bug Too! (#622)
    • Black/Matrix (#861)
  • Media: Don't read the Path Table past the size specified in the Volume Descriptor. Fixes CD Block HLE not able to read disc images made with some lazy patches that don't properly clean up the Path Table. (#912)
  • Media (CHD): Fix several CHD read errors. (#806, #957; @warmenhoven)
    • Arcade Gears Vol. 2 - Gun Frontier: now boots with CD Block LLE and plays sounds in the logo screen.
    • Elevator Action^2 - Returns: now plays music in-game with CD Block LLE.
    • Time Bokan Series - Bokan to Ippatsu! Doronbow Kanpekiban: now plays music in-game with CD Block LLE.
    • Sega Ages - OutRun: now properly resumes music after pausing in-game with CD Block LLE.
  • Media (CUE): Concatenate reads from composite readers. Fixes Cold Case (Homebrew) crashing when starting the game. (#626)
  • Media (CUE): Don't accumulate pre/postgaps multiple times per track. Fixes some audio track offset issues for single-BIN dumps. (#146)
  • Media (CUE): Properly compute track count on discs with sparse track numbers. Fixes audio playback on some homebrew discs that omit tracks (e.g. The Rockin'-B All Stars version 06/03/23 skips track 2).
  • Media (CUE): Use CUE sheet timestamps to compute track lengths. Fixes some audio track offset issues for single-BIN dumps. (#146)
  • SCSP: Clear slot PLFOS on reset. (thanks to @celeriyacon)
  • SCSP: Handle rare one-shot PCM bug. (thanks to @celeriyacon)
  • SCU: Allow 8-bit writes to DSP registers.
  • SCU: Ignore DMA writes to VDP1 registers. Fixes GunBlaze-S not booting. (#410)
  • Settings: Apply CD Block LLE configuration at startup. Fixes Ymir always launching with CD Block HLE mode when LLE was enabled in the settings file.
  • SMPC: Ignore SSHON command when the Slave SH2 is already enabled. Fixes multiple issues:
    • Guardian Heroes no longer gets stuck on level transitions. (#951)
    • Gekitotsu Koushien no longer crashes when going in-game. (#576)
    • Madden NFL 97 (Europe) now goes in-game. (#522)
    • No-appointment Gals Olympos now goes in-game.
    • Ten Pin Alley now goes in-game.
    • UEFA Euro 96 - England now goes in-game. (#486)
  • SMPC: Reserved SR bits in INTBACK status reports are all set. (thanks to @celeriyacon)
  • SMPC: Tweak processing time for INTBACK. Fixes Assault Rigs no-boot regression.
  • SMPC: Tweak response delay for most commands to allow more games to boot:
    • Destruction Derby (Europe)
    • Fighting Vipers (Japan) (Rev A)
    • Fist (Japan)
    • Idol Mahjong - Final Romance R (Japan) and its Kisekae Discs
  • SMPC: Update peripheral PDR1/2 registers when reading and when updating EXLE. Fixes many cases of games not recognizing Virtua Gun inputs or missing shots. (#787)
  • VDP1: Don't clear COPR when beginning a new VDP1 frame. Fixes lockups in Alone in the Dark - One-Eyed Jack's Revenge. (#938)
  • VDP1: Don't sync VDP1 FBRAM on debug reads. Fixes deadlock when viewing the framebuffer area in a memory viewer window.
  • VDP1: Force-align MSB write to 16-bit addresses when writing pixels with MSB enabled. Fixes deselected menu options being fully painted in black in Derby Analyst. (#587)
  • VDP1: Textured sprites with CMDSIZE.H=0 never fetch additional texels. Fixes glitched graphics in the scorecard of the shooting range in Policenauts.
  • VDP1: Various VDP1 reset fixes. (thanks to @celeriyacon)
  • VDP1-SW: Write back FBRAM writes from VDP1 renderer thread. Fixes glitched title screen in Waialae no Kiseki - Extra 36 Holes and other golf games sharing the same engine when using threaded VDP1 rendering. (#898)
  • VDP2: Allow 8-bit register reads and writes. Fixes crash after defeating second boss of DoDonPachi. (#640)
  • VDP2: Avoid unintentional side effects on VDP2 EXTEN register when saving states. Fixes camera angles in Digital Dance Mix Vol. 1 - Namie Amuro.
  • VDP2: Disable color gradation if color RAM mode is not 0. Fixes the fog effect in The River of Dreams level in Astal. (#927)
  • VDP2: Fix coordinate latching on external latches. Fixes various Virtua Gun shot offset errors. (#787)
  • VDP2: Fix off-screen coordinate latching. Fixes some Virtua Gun reload detection issues. (#787)
  • VDP2: Restrict color calculations in certain video modes. Fixes Sound Test screen text blending in with the background in Dark Savior.
    • In high resolution modes with color RAM modes other than 0, color calculations can only be applied on top of RGB layers, but not palette layers.
  • VDP2-SW: Fix out of bounds access when the display resolution is changed mid-frame while drawing an RBG.
  • VDP2-SW: Fix race condition reading VDP1 TVMR on VDP2 thread. Fixes single frame glitch in Virtua Fighter 2 after selecting characters.
  • VDP2-SW: Stop updating LNCL/BACK screen once DISP is disabled for the remainder of the frame.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 12 (Monterey) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

Ymir v0.3.3

v0.3.3 release
Release notes · 8 files

Ymir v0.3.3

Discord | Patreon | Compatibility list | Screenshots

This is a small maintenance release that fixes a regression with Akumajou Dracula X (#904), improves autodetection of the Asia NTSC region (Korea and Taiwan), adds some missing theme colors introduced in recent ImGui updates, and corrects some documentation oversights. It also implements the VDP2 color gradation effect, fixing the background in Saturn Bomberman's Egg Birdon boss fight.

Check the meatier v0.3.2 release notes for details on what's included in this version.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

VDP2 color gradation

The only notable improvement in this version is the implementation of the VDP2 color gradation effect, which can be seen in the Egg Birdon boss arena of Saturn Bomberman:

image

Here's a video captured from hardware with a RetroTink 4K of the same scene. Ymir's output perfectly matches what the Saturn produces.

Changes

New features and improvements

  • GUI: Specify missing ImGui style colors.
  • System: Add Europe PAL and Asia NTSC (in that order) to default preferred regions after North America and Japan.
  • VDP2: Implemented color gradation effect. Fixes background in the Egg Birdon boss arena of Saturn Bomberman.

Fixes

  • System: Properly autoselect IPL ROMs for Asia NTSC region (South Korea, Taiwan).
  • VDP1: Don't automatically mark jumps to 0 as infinite loops. Fixes Akumajou Dracula X no longer booting. (#904)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

Ymir v0.3.2

v0.3.2 release
Release notes · 8 files

Ymir v0.3.2

Discord | Patreon | Compatibility list | Screenshots

This release brings a large set of bug fixes and accuracy improvements once again guided by @celeriyacon's test ROMs, pushing compatibility to just over 94%! A workaround for 16 games described below would bring this number to 94.6%.

The highlight of this version is the huge set of fixes to CD Block HLE, bringing more parity with the LLE counterpart and improving compatibility and stability with dozens of games. VDP1 fixes also resolved a few longstanding issues and brought some games to life.

Performance got another huge boost in multiple avenues with this version. First, thanks to @SternXD, you can now offload audio processing tasks to another CPU core, freeing up the emulator thread to focus more heavily on the SH-2s and general system logic. This alone can boost performance by up to 25% and possibly more, depending on how much work is put on the SCSP DSP.

SH-2 emulation got faster and more accurate by properly emulating the CPU's fetch stage which pulls two instructions in a single fetch, approximately halving the number of expensive memory accesses done by the interpreter. Alongside that, there have been a number of performance microoptimizations to various aspects of SH-2 emulation that combine into another 10-15% boost to emulation of CPU-heavy games. Grandia's FMVs are notoriously intensive, and this set of improvements marks the first time I've seen it run at over 200 fps on my system.

Of course, with every release there's also room for more features. The SH-2 CPUs can now be overclocked up to 500% to reduce lag in poorly-optimized games, or underclocked down to 25% to lower host CPU usage on lighter games. As everything in the Saturn tends to be timing-sensitive, this comes with a disclaimer that it might break games, but it works well in most cases.

There's now support for Japanese characters (visible in the Backup Memory Manager and other places), a number of debugger improvements and new features, new options to hide the game title and performance indicators from the window title bar, an option to pause emulation upon startup, and a few more odds and ends.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

Compatibility improvements

Here's a small showcase of games that now work on v0.3.2 or had major bugs fixed:

image

(click any image to zoom)

With v0.3.2, Ymir's compatibility has pushed ahead of Kronos and is just over 94%.

image

Ymir is becoming a solid competitor. Watch out, Mednafen!

The primary culprit for most of those games are CD Block high-level emulation (the default in Ymir) and VDP1 timing and behavior inaccuracies. To tackle the CD Block problems, Ymir has a new debugger window that lists all CD Block partitions and what buffers are loaded into them:

image

Within a few minutes of using it, I already caught two bugs! This one in Shellshock, where the same sector was being loaded into the partition multiple times:

image

And another one in Sonic Jam, which had a sudden jump backwards in the sector read sequence:

image

Those two bugs alone accounted for the majority of issues encountered with CD Block HLE mode. For example, IRREEL would fail to load level 2 assets. That is now fixed:

Before After
image image
image image

Not pictured: Completely busted sound | Perfectly pristine sound.

This tool has also helped detect a buffer exhaustion bug that occurred when pausing and unpausing in Panzer Dragoon II Zwei, a Mode 2 Form 2 sector read bug that broke Chisato Moritaka - Watarase Bashi & Lala Sunshine's FMVs, and many more. Here's a list of games that now work correctly with CD Block HLE thanks to those fixes:

  • Chisato Moritaka - Watarase Bashi & Lala Sunshine (#604): FMVs now play correctly.
  • Chou Jikuu Yousai Macross - Ai Oboete Imasu ka (#605): intro sequence now plays correctly.
  • Cyber Speedway (#785): music now resumes properly after pausing and unpausing.
  • Digital Dance Mix Vol. 1 - Namie Amuro (#476): animations and songs now play correctly.
  • Dragon Force (#866): Working Designs logo FMV now plays correctly.
  • Gunbird (#625): boss animations now play correctly.
  • Legend of K-1 - The Best Collection (#758): FMV of third fight now plays correctly.
  • LifeScape - Seimei 40 Okunen Haruka na Tabi (#598): no longer freezes on opening FMV.
  • Mahjong Yon Shimai - Wakakusa Monogatari (#527): no longer freezes on character select screen.
  • Marvel vs. Street Fighter (#667): no longer crashes on Capcom logo.
  • Mass Destruction (#664): intro FMVs now play at full speed and in-game music now plays.
  • NiGHTS Into Dreams... (#437): Trick Ribbon music plays correctly at all times.
  • Panzer Dragoon II Zwei: no longer softlocks after pausing and unpausing multiple times.
  • Senken Kigyouden / Xianjian Qixiazhuan (#409): graphics now load correctly.
  • Shellshock (#344): no longer crashes on CORE logo.
  • Shining Force III (#712, #771): no longer gets stuck on Yes/No dialog choices or crash with CD read errors.
  • Sonic Jam (#83): in-game music now plays correctly.
  • Tilt! (#872): intro FMVs now play at full speed.
  • X-men vs. Street Fighter (#667): no longer crashes on Capcom logo.
  • and probably more!

SH-2, VDP1 and VDP2 fixes also improved compatibility with:

  • Dark Savior (#134): sprites are no longer spliced across frames.
  • Deep Fear (#779): color palette no longer messes up when opening the inventory.
  • Magical Night Dreams - Cotton 2 (#728): character highlight effect is now fixed.
  • Neon Genesis Evangelion - Koutetsu no Girlfriend (#581): now plays FMVs.
  • Nobunaga no Yabou Returns (#596): now plays FMVs and goes in-game.
  • Revolution X - Music Is the Weapon (Europe): title screen now displays the band.
  • Ryuuteki Gosennen - Dragons of China (#856): text frames are no longer shifted to the right.
  • Scorcher (#281): game no longer crashes immediately in Training mode or randomly in other modes.
  • Shellshock (#344): in-game terrain is now drawn at full width (half resolution).
  • Shining the Holy Ark (#287): game speed is correct, no longer double-taps movements.
  • Stellar Assault (#844): stopped booting on 0.3.1 due to a VDP1 infinite loop detection optimization. This is now fixed.

Dark Savior, notably, has had the sprite splicing bug for a long time (#134) that affected the intro sequence and nearly all gameplay scenes. In v0.3.2, this bug was fixed by an SH2 accuracy improvement guided by @celeriyacon's tests.

Before After
image image
image image

The deinterlace effect received some adjustments to fill in gaps between sprites on high resolution modes, affecting games such as Sonic Jam (#853) and Astra Superstars (#784).

Threaded VDP1 rendering caused some problems with several games (#898). This release fixes most of the issues, though there are still a few remaining glitches to fix:

  • BlackFire (#790): GUI elements no longer flicker.
  • Burning Rangers (#791): transparent elements (such as fire and explosions) are no longer drawn behind walls, doors, etc.
  • Scorcher (#473): HUD is now drawn on top of level geometry.
  • Virtual Golf (Europe) (#830): ground is now fully rendered and random sprites no longer appear.
  • Waialae no Kiseki - Extra 36 Holes (#871): ground is now fully rendered. However, the top portion of the FMV now overlaps with the title screen.

Disc image loader improvements

Some ImgBurn dumps are now compatible with Ymir, in addition to Redump dumps, thanks to improvements made to the CUE sheet parser. Ymir will also no longer crash when trying to load a PlayStation disc image or any other weird formats. You can use it as a glorified CD player as well.

Known workarounds

You can unblock and play a relatively large set of no-boot games with a debugger trick:

  • Run the game until you hit a black screen after the Sega licensing logo.
  • Open Debug > Open memory viewer.
  • Jump to 60FFC13 (copy-paste this number in the field next to Range at the bottom of the window and press ENTER).
  • Modify the value to FF (you can immediately type FF right after pressing ENTER).

This applies to:

  • Another Memories (Japan)
  • Device Reign (Japan)
  • Real Sound - Kaze no Regret (Japan)
  • SD Gundam G Century S (Japan)
  • Shutsudou! Miniskirt Police (Japan) -- requires multiple applications of the trick at different points to work
  • Super Tempo (Japan)
  • Tennis Arena (Japan)
  • Tilk - Aoi Umi kara Kita Shoujo (Japan)
  • Yuukyuu Gensoukyoku (Japan)
  • Yuukyuu Gensoukyoku 2nd Album (Japan)
  • Yuukyuu Gensoukyoku Demo (Japan)
  • Yuukyuu Gensoukyoku ensemble (Japan)
  • Yuukyuu Gensoukyoku ensemble 2 (Japan)
  • Yuukyuu no Kobako Official Collection (Japan)
  • Zero4 Champ DooZy-J Type-R (Japan)

These games are all listed as "Nothing" in the compatibility list as they don't work out of the box, but applying this trick would result in all of them becoming "Playable", bringing overall compatibility to 94.6%.

image

This is what typically happens with these games.

image

Changing this one byte to FF gets them unstuck!

image

This is just a small selection of those games.

Performance improvements

Numerous SH-2 and SCU DSP microoptimizations contributed to about 10-15% overall performance gains, but the biggest performance winner of this version is SCSP threading, courtesy of @SternXD.

SCSP threading

The SCSP (plus its DSP) and the accompanying MC68EC000 CPU account for about 25-30% of CPU time on the emulator thread, right below the two SH-2 CPUs which sit around 50-60% of the total time, assuming VDP1 and VDP2 are threaded. In v0.3.2, you can now move the entirety of audio processing to a dedicated thread much like the existing software VDP1 and VDP2 renderers, greatly boosting performance in nearly every scenario. You can expect up to 25-30% more frames per second when running the emulator in fast-forward mode (the usual method for testing Ymir's performance). This translates to less CPU demand, allowing Ymir to run at full speed on even weaker CPUs than before. This works best with quad-core CPUs or better and is disabled by default to preserve existing behavior, although plenty of testing has proven that it is safe to enable the option if you have CPU horsepower to spare.

This option does not lower accuracy or compatibility with any games, nor introduce any glitches as far as the testing team has checked -- it still passes the same tests from @celeriyacon's SCSP test ROM, for one. It's probably safe to turn it on and enjoy the free performance boost!

SH-2 and SCU DSP microoptimizations

The SH-2 interpreter went through many microoptimization passes, netting another 10-15% extra performance in all scenarios while also improving SH-2 emulation accuracy beyond the naïve level.

In the pursuit of performance, sometimes the accurate solution results in better performance. Ymir's SH7095 emulation now accounts for WB/EX stalls, which incurs a single-cycle penalty for sequences of instructions where the second instruction depends on the result of the first instruction, and it now performs double instruction fetches just like the real CPU, pulling two 16-bit instructions with one 32-bit read, roughly halving the number of expensive instruction fetches from memory.

Grandia's FMVs were my go-to test for the microoptimizations made in v0.3.2. One of the biggest offenders in them was the predecoded instruction arguments table (Rm, Rn, displacements and immediates) that not only took a decent amount of space in L1 cache, but also required slow memory fetches when it wasn't cached. Replacing it with the comparatively cheaper direct decoding of the arguments (just a bunch of shifts and masks that CPUs excel at) added another 5% or so more performance.

The div1 instruction was also quite high in the profile charts. It was revised to do less work for the same outcome, squeezing another percent or two of speed.

Finally, the SCU DSP was competing for third place in the profiler with most of the time being spent executing ALU operations. A very small but effective microoptimization to 48-bit register handling simplified most of the machine code dealing with them, providing another 2% extra performance in the FMVs.

All of this combined with SCSP threading boosted the frame rate range of Grandia's FMVs from 160-180 to 180-210 fps on my system -- a 12-16% increase!

SH-2 overclocking and underclocking

New to v0.3.2 is the ability to overclock and underclock the SH-2 CPUs, courtesy of @SternXD. You'll find the clock rate slider in Settings > System under the new SH-2 section:

image

With this, you can boost the emulated CPU speed by up to 500% to reduce or eliminate slowdowns in poorly-optimized games or lower the clock rate down to as low as 25% if your system isn't quite capable of handling the emulator.

image

Two SH-2s at 143 MHz can beat the Dreamcast's SH-4 at 200 MHz, right?

Note that the SCU and the VDP clocks are also adjusted in tandem, making VDP1 rendering and the SCU DSP faster (or slower) by the same factor. The displayed pixel clock is incorrect - it's not affected by SH-2 clock ratio adjustments in practice.

100% clock ratio 500% clock ratio
image image

The notoriously bad port of Doom runs at a butter-smooth 30 fps with 500% overclock.

[!WARNING] A few Sega Saturn games are highly sensitive to timing inaccuracies. Adjusting the SH-2 clock rates affects timings on a system-wide level and might break them, causing freezes, crashes, failure to boot or erratic behavior. Use with caution, and don't report any issues if your CPU clock ratio is not at 100%.

The core supports up to 10000% overclocking, but good luck finding a CPU that can handle that much speed!

image

Surely two SH-2s at 2684 MHz can beat the Dreamcast's SH-4 at 200 MHz.

UI features

Ymir's GUI can now display Japanese text. This shows up on the window title bar and in the Backup Memory Manager with some games:

image Image

It even merges together the dakuten and handakuten suffixes.

Speaking of the title bar, you can now choose to omit the game title and/or performance indicators with two new settings in Settings > GUI:

image image

Ymir shows a number of notification messages on the top-left corner of the window, but they don't last for very long. If you missed them, you can find them in the newly added Message History window, accessible under Help > Show message history (bound to F1 by default):

image

This will be expanded later with a log system to include more useful messages for users and developers alike.

The graphics backend option was removed from this version as it served no purpose. Ymir uses SDL3's Renderer API to draw its GUI, which somewhat limits its ability to manage GPU resources, making GPU rendering more difficult than necessary. In an upcoming version, the entire graphics backend of the application will be reworked to give us developers more direct access to GPU resources, facilitating development of GPU renderers based on Direct3D 12, Vulkan and Metal, with Direct3D 11 offered for compatibility with older systems and SDL Renderer (without GPU acceleration) as fallback for everything else.

To finish the round-up of UI changes:

  • There's a new action in the File menu to reload save states from disk. This is useful if you replaced the files but don't want to restart Ymir to load them.
  • A new option was added in Settings > General > Behavior to pause emulation upon launching Ymir, for those of you sick of going through the BIOS boot sequence twice when loading games.
  • For TATE enjoyers: screenshots taken will now be rotated according to the display rotation selected under View.
  • The disc product number (also known as serial number) is now displayed in the System State window above the disc hash.
  • Opening a file dialog while in exclusive fullscreen mode will now temporarily switch to borderless fullscreen mode to avoid minimizing the window.
  • Inputs bound to controllers are now properly reloaded on startup. Previously, the underlying input system was not receiving the binds from the settings file, leaving them at their defaults.
  • Virtual RTC settings are now properly loaded from Ymir.toml.
  • A couple of rare crashes involving the rewind buffer and low level CD Block emulation were fixed.

Debugger

The spotlight of this version goes to the new HLE CD Block Partitions view, which displays CD Block buffer usage and the buffers allocated to each partition. If the buffer points to a sector in the CD, it displays the sector's frame address (in hexadecimal), otherwise it shows a number of <data> blocks for data written directly by game code into the buffers.

image

Panzer Dragoon Saga streams its cutscenes from the disc.

image

Virtual On - Cyber Troopers uses CD Block buffers as a replay buffer. If I remember correctly, partitions 5 and 6 store player and enemy actions respectively.

This tool alone helped detect and fix numerous fixes to high level CD Block emulation as described in the Compatibility improvements section earlier.

SH2 watchpoints were simplified down to per-byte read/write flags. Previously set watchpoints will be migrated to the new format automatically: 16-bit watchpoints are converted to two consecutive watchpoints, and 32-bit watchpoints are converted to four consecutive watchpoints. 16-bit and 32-bit accesses will now trigger watchpoints on any byte accessed by them. For example, a read watchpoint set on 6010003 will be triggered by 8-bit reads from 6010003, 16-bit reads from 6010002 or 32-bit reads from 6010000. When a watchpoint is triggered, Ymir will now display the address and size of the access and which watchpoints were triggered.

Before After
image image

News elsewhere

@yaz0r (famous for his decompilation of Panzer Dragoon Saga/Azel - Panzer Dragoon RPG) has recently demonstrated a nifty test harness that integrates with Ymir's debugger to lockstep their decompiled version with the original game to help find and fix decompilation bugs:

image

Changes

New features and improvements

  • App: Added action to reload save states from disk to the File menu.
  • App: Added disc serial number to System State window.
  • App: Added M PLUS U font for Japanese text support and convert Japanese backup RAM text to the appropriate characters. (#18)
  • App: Added option to show/hide game name from window title bar.
  • App: Added option to show/hide performance indicators from window title bar.
  • App: Added option to start emulation paused upon launching the emulator. (#899)
  • App: Added Message History window, listing up to 10000 messages.
  • App: Display Japanese text in the Backup Memory Manager and on window title bar (game title).
  • App: Removed graphics backend option as it served no purpose at this time. Ymir will rely on the default backend used by the SDL3 Renderer API, which should be compatible with most systems.
    • Note: GPU rendering will include a rewrite of the app's graphics subsystem, moving away from SDL Renderer to our own implementation.
  • App: Rotate screenshots based on selected display rotation.
  • Debug: Added CD Block Partitions view, listing all buffers currently loaded in each partition.
  • Debug: Avoid infinite loop when SH2 debugger window is collapsed. Fixes UI hang when (re)opening the window once it was collapsed. (#690)
  • Debug: Simplify SH2 watchpoints down to simple read/write toggles per byte.
    • Previously set watchpoints will be migrated to the new format automatically. 16-bit watchpoints are converted to two consecutive watchpoints, and 32-bit watchpoints are converted to four consecutive watchpoints.
    • 16-bit and 32-bit accesses will now trigger watchpoints on any byte accessed by them. For example, a read watchpoint set on 6010003 will be triggered by 8-bit reads from 6010003, 16-bit reads from 6010002 or 32-bit reads from 6010000.
    • When a watchpoint is triggered, Ymir will now display the address and size of the access and which watchpoints were triggered.
  • SCSP: Added Threaded SCSP option, bringing a decent performance boost in nearly all situations. (#3, #896; @SternXD)
  • SCU: Optimize DSP operations involving 48-bit registers.
  • SH2: Clock factor option ranging from 25% up to 500%. (#876, #895; @SternXD)
  • SH2: Decode opcode arguments directly in instruction handlers for better performance.
  • SH2: Fetch pairs of instructions using 32-bit accesses, more closely matching the behavior of the real SH7095. Improves overall emulation accuracy and slightly boosts performance on SH2-bound games.
  • SH2: Handle WB/EX stalls. (thanks to @celeriyacon)
  • SH2: Microoptimize DIV1 instruction.

Fixes

  • App: Temporarily switch from exclusive to borderless fullscreen when opening a file dialog then back to exclusive mode once the dialog is closed to avoid minimizing or resizing the window.
  • CD Block (HLE): Don't change status code when executing Get TOC. Fixes Mass Destruction not playing any music in-game. (#664)
  • CD Block (HLE): Extend seek times to 5 ticks. Fixes animations in Digital Dance Mix Vol. 1 - Namie Amuro when seeking or pausing and resuming tracks. (#476)
  • CD Block (HLE): Extend sizes of Mode 2 Form 2 sectors read from disc when the get sector length is less than 2324 bytes. Fixes:
    • Chisato Moritaka - Watarase Bashi & Lala Sunshine (#604): FMVs now play correctly.
    • Digital Dance Mix Vol. 1 - Namie Amuro (#476): animations and song now play correctly.
  • CD Block (HLE): Fix handling of "Get Session Info" command.
  • CD Block (HLE): Fix handling of "Play Disc" command with resume from pause parameters on data tracks. Fixes buffer exhaustion leading to softlocks in Panzer Dragoon II Zwei.
  • CD Block (HLE): Fix handling of "Seek Disc" command parameter exceptions.
  • CD Block (HLE): Handle more "Play Disc" command parameter nuances. Fixes animations in Digital Dance Mix Vol. 1 - Namie Amuro when seeking or pausing and resuming tracks. (#476)
  • CD Block (HLE): Ignore read speed setting and always use 2x for data tracks. Fixes some cases of FMVs stuttering or playing too slowly:
    • Mass Destruction (#664)
    • Tilt! (#872)
  • CD Block (HLE): Introduce separate array for command responses.
  • CD Block (HLE): Open tray when ejecting a disc. Fixes various cases of games that hang, freeze, crash or exhibit erratic behavior when ejecting a disc while playing. These should now properly boot back to the system's interactive shell. (#298)
  • CD Block (HLE): Properly resume disc playback after being paused due to running out of buffers. Fixes multiple games:
    • Chou Jikuu Yousai Macross - Ai Oboete Imasu ka (#605): intro sequence now plays correctly.
    • Dragon Force (#866): Working Designs logo FMV now plays correctly.
    • Legend of K-1 - The Best Collection (#758): FMV of third fight now plays correctly.
    • LifeScape - Seimei 40 Okunen Haruka na Tabi (#598): no longer freezes on opening FMV.
    • Mahjong Yon Shimai - Wakakusa Monogatari (#527): no longer freezes on character select screen.
    • Shellshock (#344): no longer crashes on CORE logo.
    • Senken Kigyouden / Xianjian Qixiazhuan (#409): graphics now load correctly.
    • Sonic Jam (#83): in-game music now plays correctly.
    • IRREEL (homebrew) (#580): level 2 assets now load correctly.
  • CD Block (HLE): Use saved start/end play parameters when checking for FAD/track. Fixes music not looping in Mass Destruction. (#664)
  • Input: Properly bind inputs loaded from settings file upon startup. (#900)
  • Media: Bail out early on CUE parser if the file starts with a null byte.
  • Media: Ensure a valid Saturn disc is loaded before trying to parse the filesystem. Fixes crashes when trying to load non-Saturn discs.
  • Media: Fix crash when attempting to load CHDs with non-ASCII characters in the file name.
  • Rewind: Fix crash when attempting to rewind to the very first frame. (#857)
  • Rewind: Fix occasional crash when attempting to rewind with CD Block LLE enabled.
  • Settings: Correctly load virtual RTC settings from configuration file.
  • SH2: Cache line fills only cost one access to the SH2.
  • SH2: DMAC 16-byte burst should read 4 longwords then write 4 longwords.
  • SH2: Fix 8-bit and 16-bit reads from and writes to cache address array and associative purge areas. Fixes graphics glitches in Dark Savior. (#134) (thanks to @celeriyacon)
  • VDP1: Add one-pixel offset to vertical coordinates of axis-aligned sprites when rendering high-resolution modes with deinterlacing enabled. Fixes gaps in Sonic Jam and Astra Superstars. (#784, #853)
  • VDP1: Add one-pixel offset to vertical coordinates of clipping coordinates. Fixes one-pixel gap at the bottom of the screen in Sonic Jam. (#853)
  • VDP1: Branch, link and COPR fixes. (thanks to @celeriyacon)
  • VDP1: Don't end frame drawing when an infinite loop is detected. Fixes Stellar Assault no longer booting.
  • VDP1: Gouraud shading was not incremented in transparent pixels. Fixes character shading in Magical Night Dreams - Cotton 2. (#728)
  • VDP1: Illegal commands cause VDP1 to stay stuck in place rather than abort execution.
  • VDP1: Synchronize reads and writes to FBRAM. Fixes graphics issues when threaded VDP1 rendering is enabled in multiple games: (#898)
    • BlackFire (#790): GUI elements no longer flicker.
    • Burning Rangers (#791): transparent elements (such as fire and explosions) are no longer drawn behind walls, doors, etc.
    • Scorcher (#281, #473): HUD is now drawn on top of level geometry and game no longer crashes in Training mode.
    • Virtual Golf (Europe) (#830): ground is now fully rendered and random sprites no longer appear.
    • Waialae no Kiseki - Extra 36 Holes (#871): ground is now fully rendered.
  • VDP1: Use all 16 bits for system and user clipping coordinates. Fixes black title screen on the European version of Revolution X - Music Is the Weapon.
  • VDP2: Handle another case of illegal CP/PN access combinations involving multiple PN accesses in different banks. Fixes shifted text frames in Ryuuteki Gosennen - Dragons of China. (#856)
  • VDP2: Latch current VCNT when reading from EXTEN. Fixes camera angles in Digital Dance Mix Vol. 1 - Namie Amuro. (#476)
  • VDP2: Update horizontal scroll increment every scanline. Fixes in-game terrain graphics drawn half as wide in Shellshock. (#344)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

Ymir v0.3.1

v0.3.1 release
Release notes · 8 files

Ymir v0.3.1

Discord | Patreon | Compatibility list

This release adds many performance optimizations to the VDP2 renderer, bringing up to 40% more performance on graphics-heavy games. Users have reported running Virtua Fighter 2 and Last Bronx at full speed on an i7-2600K and many cases of lower-powered CPUs are now capable of running Ymir with less stuttering. In my tests, it consistently runs faster than Mednafen, Kronos and Yaba Sanshiro in high-profile games and a few obscure ones too.

This version also includes a few more graphics rendering fixes, more SH-2 emulation accuracy improvements (thanks to @celeriyacon once again), and some adjustments to the CUE sheet parser to fix some CD audio track misalignments (including some ImgBurn dumps).

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

Changes

New features and improvements

  • Debugger: Add Priority Stack to VDP2 debug overlay.
  • VDP2: Various performance optimizations to the software renderer, improving performance in graphics-bound games (especially in high resolution modes). Technical details:
    • RBG1 was being unnecessarily rendered when NBG0 was enabled and RBG1 was disabled
    • Remove redundant transparency bit since priority zero acts as transparency
    • Remove various unused function arguments, reducing CPU register and stack pressure
    • Pass down VDP2 register references as arguments rather than fetching them from scratch everywhere
    • Reuse line data (i.e. skip recomputing lines) when rendering vertical mosaic
    • Bit-pack character pattern data in a single 32-bit value
    • Microoptimize scroll coordinates calculations
    • Rotation parameter table calculations:
      • Specialize calculations for (1) no coefficient table, (2) per-line coefficient table and (3) per-dot coefficient table
      • Hoist coefficient table enable and per-dot coefficients checks out of the loop
      • Make the inner loops SIMD-friendly
      • Avoid unnecessary computation of transparency and line color screen data if they are disabled
    • Microoptimizations to the compositor function:
      • Layer sorting now uses a combined key
      • Gather layer data in one single loop
      • Pixel fetching is now templatized and some bail out checks are done earlier
      • Color offset calculation enable flag is cleared in the fetch loop if no offset is actually applied

Fixes

  • Debugger: Various SH2 stack analysis fixes.
  • Game DB: Add slow VDP1 flag to Funky Fantasy to fix slow FMVs.
  • Media: Detect postgaps in data tracks when the CUE sheet doesn't explicitly announce them. Fixes audio track shifts in bad Virtua Fighter 2 dumps.
  • Media: Fix PREGAP/POSTGAP handling in CUE/BIN dumps. Fixes shifted audio tracks in games dumped with ImgBurn.
  • SH2: Fix illegal slot instruction exception handling. (thanks to @celeriyacon)
  • VDP1: Add game-specific flag for skipping command processing if the top of the table is empty. Enable it exclusively for Sekai no Shasou kara - I Swiss-hen - Alps Tozantetsudou no Tabi. Fixes missing graphics in Gungriffon. (#810)
  • VDP1: Disable early polygon drawing termination when rendering polygons when user clipping mode is inverted. Fixes clipped polygons around the minimap in Machine Head (#767).
  • VDP1: Implement simple infinite loop detection. Fixes slowdown in the Mojave Desert stage (1-2) in Gale Racer.
  • VDP2: Apply color calculations to transparent sprite mesh on layer 0. Fixes stripes on ground plane in Gungriffon.
  • VDP2: Apply color offset to transparent sprite mesh on layer 0 in a separate step. Fixes missing spotlight in the Colonel battle in Mega Man X4. (#818)
  • VDP2: Fix VRAM access calculations when RBG1 is enabled. Fix missing car graphics regression in Gale Racer. (#359)
  • VDP2: Fix and use line color screen calculation ratio when LNCL is inserted. Fixes text background issues in Doukoku Soshite. (#502)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

Ymir v0.3.0

v0.3.0 release
Release notes · 8 files

Ymir v0.3.0

Discord | Patreon | Compatibility list

The first big release since my first "vacation" of sorts includes a sizable amount of bug fixes, compatibility improvements, more accurate emulation (thanks again to @celeriyacon) and some new features to play with.

First, two new peripherals have been added: the Shuttle Mouse and the Virtua Gun. However, you will note that 0.3.0 only includes the mouse peripheral. This is because the Virtua Gun has lots of issues and is only usable with a single game: House of the Dead. Download a nightly build if you want to try it out.

Save states also got some love. Have you accidentally saved a bad state on top of a good one? Push the Undo Save State button to get the old state back. Do you regret loading a state? Use the Undo Load State to go right back where you were just before loading it. Ymir now stores one additional save state per slot and one load state globally for this feature.

The SH2 debugger received many usability improvements this version with the addition of the Data Stack and Call Stack views, a navigable viewport, and enable/disable toggles for breakpoints and watchpoints.

And, of course, this version comes with plenty of bug fixes mostly focusing graphics as you've come to expect.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version or installed Ymir from the SteamOS's Discover Store, make sure to grant Ymir permission to access the filesystem or your multi-file disc images won't load properly.

Compatibility improvements

As usual, plenty of graphics rendering issues have been fixed, many of which have been detected by diligent work from the testers. Thanks!

A notable improvement made in this version is the VDP1 cycle counting method rework. It is still a rough approximation and still results in a much faster VDP1 than the real Saturn's, but is much less prone to stability problems. This change has fixed crashes, freezes, performance issues and graphics glitches in many games, including:

  • Beach de Riichi
  • Burning Rangers
  • DonPachi
  • Dungeons & Dragons Collection
  • Isto E Zico - Zico no Kangaeru Soccer
  • Real Bout Garou Densetsu Special
  • Road Rash
  • Virtua Cop

A number of game-specific flags have been added to the emulator core to work around extremely finicky bugs without affecting already working games. Here's a list of games that are now playable thanks to these flags:

  • Vampire Savior - The Lord of Vampire
  • Baku Baku Animal - World Zookeeper Contest (European version)
  • Chisato Moritaka - Watarase Bashi & Lala Sunshine
  • Deep Fear
  • Dragon Ball Z - Idainaru Dragon Ball Densetsu
  • Jikkyou Oshaberi Parodius
  • Metal Fighter Miku

These flags also help fix graphics issues in a few more games:

  • Emit Vol. 3 - Watashi ni Sayonara o
  • Fishing Koushien II
  • Spot Goes to Hollywood (European version only)
  • Steamgear Mash
  • Waku Waku 7

With that, compatibility stands at just over 92%, on par with Kronos.

New peripherals: Shuttle Mouse and Virtua Gun

[!IMPORTANT] The Virtua Gun is EXPERIMENTAL and is only available in development and nightly builds. It only works more or less properly with House of the Dead and has issues with pretty much every other game that supports it. See #787 for a list of issues. For this reason, the peripheral is disabled in 0.3.0, but you can try it out on the nightly builds.

In 0.3.0 you can use a Shuttle Mouse with games that support it.

image image

Virtua Cop 2 plays great with the mouse!... if you can deal with a two-frame input delay.

Also, in nightly builds only, you can select the Virtua Gun. However, as noted above, it currently only works reasonably well with House of the Dead. It has worse latency than the Shuttle Mouse though, so temper your expectations.

The new Mouse Capture Mode setting allows you to control how the mouse capture works for the gun:

  • System cursor: in this mode, the light gun reticle follows your system mouse cursor. This works well in cases where you only want to use a single Virtua Gun.
  • Physical mouse: in this mode, each physical mouse attached to the computer can be bound to a different Virtua Gun. Yes, you can have two or more mice connected to the same PC and, yes, they are independent of one another.
image

The warning is also displayed in the Input settings window.

image

You can customize the reticle to your heart's content.

https://github.com/user-attachments/assets/34c62a07-cf4b-42e0-b929-36e20c917f58

There's an infinite number of combinations!

Build fixes

The Windows SSE2 build now correctly targets the SSE2 instruction set, which should make 0.3.0 compatible with old CPUs once again.

The macOS ARM executable is now signed with an ad-hoc signature to work around the "damaged app" error. You still have to allow execution of an "untrusted" application, but at least this no longer blocks you from running the emulator altogether. Also, macOS builds no longer include two copies of the executable, roughly halving their size.

UI improvements

Every save state slot now holds an additional undo entry, which you can recover in case you accidentally saved a state. You can restore it with the new "Undo save state" action. Similarly, if you accidentally loaded a save state, you can go back to the previous state with the "Undo load state" action.

image

Each save state slot tells you if you have an undo for it.

New options have been added to manage full screen mode. You can now select a display and a resolution, including borderless windowed and exclusive full screen modes.

image

There's also a new option to select the graphics backend from Direct3D 11, Direct3D 12, Vulkan, Metal or OpenGL. This is in preparation for GPU rendering, which is still a work-in-progress. GPU rendering was slated to land on this version, but I decided to postpone it to fix some serious stability and performance issues that occur with higher internal resolution scaling ratios. For sneak peeks, check #60.

Debugger

The SH2 debugger received many usability and utility upgrades this version. The first thing you'll notice are the new Data Stack and Code Stack sections below the registers listing the contents of the stack and the call site return addresses respectively. These require debug tracing to be enabled (F11) to trace code execution and can be hidden from the new Stack menu in the debugger window.

image

The disassembly view can now be freely scrolled and navigated with both keyboard and mouse:

  • Up/down arrow keys: move cursor up/down one instruction.
  • Page up/down: move cursor up/down one page.
  • Home/end: move cursor to the top/bottom of the viewport.
  • The cursor is kept below 15% of the top and above 35% of the bottom of the viewport.
  • Scroll with the mouse wheel to move the viewport.

The cursor is represented by a green line and you can use the keyboard shortcut F9 to toggle a breakpoint on that address and Shift+F9 to enable/disable an existing breakpoint. Yes, now you can disable breakpoints and watchpoints without removing them from the list. Also, their performance cost has been drastically reduced.

image

Note the hollow circles. Those breakpoints are disabled - they won't be hit, but they are kept in the list in case you need them again.

The VRAM access patterns are now color-coded in the VDP2 VRAM access delay view. Red CPs indicate illegal access timings based on the corresponding NBG parameters (and PN accesses for scroll NBGs).

image image

It doesn't explain why, but these two CP0 accesses are not good.

The window also has a Generate test case button which creates code for a test case that developers can use to validate that exact configuration and fix VRAM access pattern bugs.

Changes

New features and improvements

  • App: Add command line option -F/--fast-forward to launch the emulator in fast-forward mode.
  • App: Always use installed mode under Flatpak.
  • App: Check for profile at the executable location. (#706)
  • App: Warn users about Flatpak filesystem permissions if the app is running in its sandbox and a disc image fails to load.
  • Backup RAM: Support in-memory and copy-on-write memory-mapped files in addition to regular memory-mapped files.
  • Build: Add simple feature flags system. All feature flags are enabled by default on development builds (including nightly builds).
  • Build: Support Profile-Guided Optimization (PGO) builds. (#742; @mmkzer0)
  • Debugger: Allow scrolling the SH2 disassembly view. (#743; @mmkzer0)
  • Debugger: Colorize VRAM access timing slots in the delay viewer.
  • Debugger: Implement keyboard navigation and interactions in the SH2 disassembly view:
    • Up/down arrow keys: move cursor up/down one instruction.
    • Page up/down: move cursor up/down one page.
    • Home/end: move cursor to the top/bottom of the viewport.
    • The cursor is kept below 15% of the top and above 35% of the bottom of the viewport.
  • Debugger: Manage SH2 breakpoints and watchpoints on the frontend and allow enabling/disabling them without removing from the list.
  • Debugger: Optimize SH2 breakpoints and watchpoints when debug tracing is enabled. They no longer become more expensive with the amount of entries added and the baseline cost is lower than before.
  • Debugger: Trace and display SH2 call stack.
  • Debugger: Trace and display SH2 data stack contents.
  • GameDB: Add new game-specific flags to improve compatibility:
    • Double the clock rate of the MC68EC000
    • Stall VDP1 drawing on VRAM writes
    • Slow down VDP1 rendering
    • Relax VDP2 bitmap CP VRAM access checks
  • Input: Added support for mouse events.
  • Input: Capture mouse for light gun and mouse peripherals, supporting these modes:
    • System mouse: binds the system mouse cursor to a single peripheral. Mouse cursor is still available to interact with the GUI.
    • Physical mouse: binds one or more mice to different peripherals. Disables the system cursor while any mice is bound. NOTE: This option is only available on nightly builds due to issues with Virtua Gun. (#787) The System mouse capture option only works with Virtua Gun.
  • Input: Experimental Virtua Gun peripheral implementation. (#33) NOTE: This feature is only available on nightly builds at the moment due to issues in nearly all games. (#787) Only House of the Dead is known to work with minor reticle inaccuracy errors.
  • Input: Implemented Shuttle Mouse peripheral. (#32)
  • MIDI: Force RtMidi to use dummy API if it fails to initialize, allowing Ymir to run without MIDI drivers.
  • Save states: Added actions to undo a save state and restore an undone save state. (#700, #727; @Fueziwa)
  • Save states: Store one extra save state per slot for undo. (#700, #727; @Fueziwa)
  • Settings: Show currently loaded profile path in Settings > General.
  • System: You can now select a preferred system variant (Saturn, HiSaturn, V-Saturn or Dev Kit) and Ymir will automatically pick a matching IPL ROM. (#637, #725; @Fueziwa)
  • Video: Add option to enable/disable video synchronization in full screen mode.
  • Video: Allow selecting full screen resolution and target display. (#705)
  • Video: Allow switching graphics backends for GUI rendering.

Fixes

  • Build: Introduced separate x64-win-llvm toolchains for SSE2 and AVX2 support. Fixes Windows SSE2 builds requiring SSE4.2 instructions. (#713; thanks to @Wunkolo)
  • Build: Perform ad-hoc signature on macOS binaries to work around the "damaged" app warning. (#698; thanks to @Wunkolo)
  • Build: Remove duplicate binary from macOS packages.
  • GameDB: Double the MC68EC000 clock rate and force fast bus timings to fix crashes in Vampire Savior - The Lord of Vampire. (#699)
  • GameDB: Force-enable SH2 cache emulation to fix issues with multiple games:
    • Baku Baku Animal - World Zookeeper Contest (Europe only) -- freeze when trying to play FMVs from the Options menu (#642)
    • Chisato Moritaka - Watarase Bashi & Lala Sunshine -- crash at startup (#604)
    • Dragon Ball Z - Idainaru Dragon Ball Densetsu -- black screen after starting a new game (#538)
    • Emit Vol. 3 - Watashi ni Sayonara o -- FMV tearing (#797)
    • Metal Fighter Miku -- black screen after start menu (#466)
    • Spot Goes to Hollywood -- glitched graphics in European version only (#520)
    • Steamgear Mash -- flickering graphics (#440)
    • Waku Waku 7 -- flickering sprites (#424)
  • GameDB: Force fast bus timings to fix crashes in Deep Fear. (#740)
  • GameDB: Slow down VDP1 to fix no-boot regression in Jikkyou Oshaberi Parodius. (#283)
  • GameDB: Slow down VDP1 to fix performance issues in Fishing Koushien II. (#812)
  • Input: Fixed analog to D-Pad axis conversion to not overwrite whenever an input was released in opposite direction. (#754; @PringleElUno)
  • MIDI: Defend against crashes when the library fails to initialize.
  • SCU: Timer fixes. (thanks to @celeriyacon)
  • SH2: Block interrupts on instructions following LDC/LDS/STC/STS. (thanks to @celeriyacon)
  • SH2: Cache emulation fixes. (thanks to @celeriyacon)
  • SH2: Fix @(disp.PC) loads being decoded as stores for watchpoints.
  • SH2: Fix ldc/lds @Rm decoding from the wrong opcode bits for watchpoints.
  • SH2: Interrupt prioritization and triggering fixes. (thanks to @celeriyacon)
  • VDP1: Fix handling of zero horizontal character size in CMDSIZE.
  • VDP1: Fix swap framebuffers race condition with threaded VDP1 rendering. Fixes flickering graphics in multiple games:
    • Actua Golf (#794)
    • FIFA - Road to World Cup 98 (#800)
    • Gran Chaser (#763)
  • VDP1: Increase PTM=1 drawing delay and apply it only during VBlank. Fixes flickering graphics on Earthworm Jim 2. (#745)
  • VDP1: Properly load save state data when threaded VDP1 rendering is enabled.
  • VDP1: Rework cycle counting method and increase cycle budget per frame. Fixes slowdowns in Road Rash and graphics glitches in multiple games, including Virtua Cop and Burning Rangers. (#704, #721, #722)
  • VDP1: Stall VDP1 drawing on VRAM writes exclusively on Mega Man X3 and Rockman X3 to fix garbled sprites. (#244)
  • VDP1: Stop processing commands if encountering an all-zeros entry. Fixes invalid clipping coordinates in Sekai no Shasou kara - I Swiss-hen - Alps Tozantetsudou no Tabi. (#761)
  • VDP2: Apply VRAM access shift per bank to scroll NBGs with invalid timing patterns. Fixes World Heroes Perfect title screen shift and Cyberbots - Fullmetal Madness HUD shift and broken background in stage 2. (#756)
  • VDP2: Clear normal shadow flag on transparent sprite pixels. Fixes shadows extending vertically across the screen in Tokyo Shadow. (#752)
  • VDP2: Compute vertical cell scroll delays/offsets when enabling/disabling the effect in addition to access cycle changes.
  • VDP2: Consolidate sprite data handling and fix 16-bit readout of 8-bit sprite data. Fixes garbled graphics in NBA Live 98 in-game.
  • VDP2: Convert the "allow bitmap data access during SH-2 cycles" hack into a game-specific flag and enable it only for games that display issues with the strict timing checks:
    • Lunar - Silver Star Story
    • Mechanical Violator Hakaider
    • Shin Kaitei Gunkan
  • VDP2: Fix and optimize per-dot coefficient access checks. Fixes graphics glitches in Radiant Silvergun when starting a new game after interrupting the AKA-O boss fight in attract mode.
  • VDP2: Fix NBG per dot special priority calculations. Fixes priority issues in Mr. Bones. (#703)
  • VDP2: Illegal scroll CP accesses cause a shift if there aren't enough valid accesses in other banks and the illegal accesses occurs in the same bank as the PN access. Fixes fog background shift in Sonic 3D Blast. (#798)
  • VDP2: Illegal scroll CP accesses in low-res modes are handled differently between T0-T3 and T4-T7. Fixes gaps in backgrounds in X-Men vs. Street Fighter. (#775)
  • VDP2: Multiple VC accesses in the same timing slot do not cause extra delays. Fixes FMV glitches in Girls in Motion Puzzle Vol. 1 - Hiyake no Omoide + Himekuri. (#466)
  • VDP2: Sprite special pattern detection was short by one bit.
  • VDP2: Use only the first PN access to check for valid CP accesses. Fixes graphics shift in Daisuki and BattleSport. (#769, #770)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

v0.2.1

release
Release notes · 8 files

Ymir v0.2.1

Discord | Patreon | Compatibility list

This patch fixes a couple of issues with the update checker, a rare crash involving the rewind buffer, and comes with the usual set of graphics bug squashing. It also includes improvements from a new contributor, @mmkzer0, and a significant change to VDP1 rendering that fixes a long-standing issue with threaded rendering.

As noted in the previous version, future updates (such as this one) will not be as substantial as previous ones as I'm splitting my time with other activities.

[!CAUTION] The Windows SSE2 build is currently targeting the SSE4.2 instruction set due to a mistake in the build system configuration, resulting in crashes on old CPUs. Also, the macOS ARM build is incorrectly flagged as "damaged". A fix will be available in version 0.3.0. The latest nightly also includes a fix. See #713 and #698.

[!CAUTION] Due to a programming oversight, the application will crash if automatic update checks are enabled and the nightly build is broken. To avoid this, either update to the latest nightly (if available) or disable automatic update checks. If Ymir is crashing, edit Ymir.toml with a text editor and change CheckForUpdates from true to false. This will be fixed in the next release.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version, make sure to grant Ymir permission to access the filesystem or your disc images won't load properly.

Improved threaded VDP1 rendering

The old threaded VDP1 rendering interfered with VDP1 timings and caused issues in a few games (#233). With the new design, this is no longer the case - the VDP1 logic and timings are still driven by the emulator thread, but the drawing itself can be moved to a dedicated thread (or a GPU renderer, eventually). This option is now enabled by default as it brings up to 30% performance boost depending on how VDP1-heavy the game is. The old "Include VDP1 rendering in VDP2 renderer thread" option was removed to make way for this implementation.

image

UI improvements

Save states menus have been split into Load and Save sections to avoid confusion and simplify interactions. Selecting a save state from either menu will also switch the currently selected slot for quick load/save.

image

The Backup Memory Manager was moved from the File to the System menu, to bring it closer to other system-related actions such as managing cartridges.

image

Debugger

The memory viewers now have a button to dump the contents of an entire memory region to a file. This can be useful to compare against other emulators or for offline research, disassembly, and more. These dumps are saved to <profile>/dumps/<game code>-<region name>-<base address>-<size in bytes>.bin.

image

The VDP2 VRAM access delay window now shows the access shift introduced by misaligned timings for a given background layer's character or bitmap data which affects World Heroes Perfect's intro sequence. It's the same issue that causes the full screen pictures in Capcom Generation - Dai-5-shuu Kakutouka-tachi's art gallery to be split.

image

Changes

New features and improvements

  • App: Added "Take Screenshot" action to File menu.
  • App: Moved "Backup Memory Manager" action from File to System menu.
  • Debugger: Added Dump memory region button to the Memory Viewer to dump the currently selected region to a raw .bin file in the profile’s dump path. (#678; @mmkzer0)
  • Debugger: Display VRAM data access shifts separately from CP delays in the VDP2 VRAM access delay window and display them for scroll BGs as well.
  • Rewind: Reset rewind buffer on hard resets and whenever the CD Block LLE settings is changed.
  • Save states: Separated save states menu into Load and Save to avoid confusion and simplify interactions.
  • Updater: Added compile-time flag Ymir_ENABLE_UPDATE_CHECKS to enable or disable the automatic update checker, including the onboarding process.
  • VDP1: Reworked renderer code structure. Allows threading without affecting timings and paves way for other rendering backends. (#233)

Fixes

  • Settings: Properly reload binds for "increase/decrease speed by 25%".
  • Updater: Create state/updates folder before writing .onboarded file in case the user opts out of automatic update checks. Fixes update check onboarding popup always appearing on startup. (#708)
  • Updater: Detect nightly -> stable update when the current version matches the stable version.
  • VDP1: Reduce VBlank erase timing penalty to fix graphics artifacts in Battle Garegga's options menu. (#649)
  • VDP2: Allow bitmap data access during SH-2 cycles. Fixes FMV flickering in Lunar - Silver Star Story, Shin Kaitei Gunkan, and Mechanical Violator Hakaider (#438, #446, #658)
  • VDP2: Apply VRAM bank data access shift to scroll BGs. Fixes shifted borders in World Heroes Perfect's demo sequence. (#643)
  • VDP2: Disable VRAM access restrictions based on ZMCTL parameters. Fixes missing background graphics in Baku Baku Animal - World Zookeeper. (#646)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

You can also install Ymir on Linux via Flatpak.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

v0.2.0

release
Release notes · 8 files

Ymir v0.2.0

Discord | Patreon | Compatibility list

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.

[!CAUTION] The Windows SSE2 build is currently targeting the SSE4.2 instruction set due to a mistake in the build system configuration, resulting in crashes on old CPUs. Also, the macOS ARM build is incorrectly flagged as "damaged". A fix will be available in version 0.3.0. The latest nightly also includes a fix. See #713 and #698.

[!IMPORTANT] Windows users: install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer) before running the emulator. This is mandatory to avoid crashes on startup.

macOS users: follow these instructions to allow Ymir to run on your system. Ymir is signed with an ad-hoc certificate, flagging it as unverified.

Linux users: if you choose to install the Flatpak version, make sure to grant Ymir permission to access the filesystem or your disc images won't load properly.

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.

Compatibility improvements

Here's a small showcase of games that now work on 0.2.0 or had major bugs fixed:

showcase

(click any image to zoom)

Thanks to the community, the compatibility list is now completely filled. Ymir now boasts over 90% compatibility over the whole collection of Saturn games with the majority of games working flawlessly or with minor issues. Some configuration tweaks are required in order to maximize compatibility -- you can find instructions in the Additional notes column of the spreadsheet.

There are three major factors that significantly improved compatibility from 0.1.x:

  • The newly introduced low-level CD Block emulation option
  • Improved SH-2 and M68EC000 bus timings
  • SCU DMA, SCU DSP DMA and SH-2 DMAC timing and bus stalls

The low-level CD Block emulation mode requires a valid CD Block ROM to work. When enabled, it greatly improves emulation accuracy of the CD drive and the commands sent by games. From my own notes and community testing, at least 23 games are now capable of going in-game or have major issues fixed when this option is enabled. A few games present issues when the option is enabled, including Grandia, Mahjong Hyper Reaction R and LifeScape - Seimei 40 Okunen Haruka na Tabi.

image

You will need to procure these ROMs on your own.

The timing improvements made to SH-2 and M68EC000 bus exchanges fixed a problem where Resident Evil would get stuck in scripted sequences, leaving characters bobbing their heads in silence forever. This change also slightly boosts overall performance as the CPUs are now running a few less instructions per frame.

Finally, the DMA timings and bus stalls were a requirement for CD Block LLE to work. The CD block subsystem requires very tight timings for each data transfer done between the CD drive, the SH-1 CPU embedded in the block and the rest of the system, and the method used previously by Ymir (run full DMA transfers instantly) was incompatible with this model. Now, Ymir will perform transfers one by one, as many as can fit within a cycle budget, and stall components (effectively skip processing them) if the bus signals that the transfer must wait. The good thing is that this method also improves compatibility with more than 20 games even with CD Block LLE is not used.

Low-level CD Block emulation reduces performance by about 15-20% due to emulating an additional CPU -- the SH-1 runs at 20 MHz, not too far from the 28 MHz of the two main SH-2 CPUs. The old high-level emulation mode will not be replaced by this option because it provides better performance and flexibility. For example, you cannot change the read speed on the LLE version because the CD Block program expects disc sector transfers to happen at very precise intervals. Any slight deviation in these timings is seen as an "error" by the program, and the block starts reporting disc read failures to the Saturn, resulting in non-working games.

The CUE parser has received an overhaul which should hopefully fix almost all audio track shifting issues. Additionally, Ymir will now correctly load cue sheets that reference .wav files as long as the files are in 44100 Hz, stereo, 16-bit raw PCM format (which exactly matches CD audio data). The CHD and ISO loaders received small fixes to improve compatibility with non-Redump dumps.

Rounding up the list is a small number of VDP1 and VDP2 fixes which deal with minor graphics issues found in a number of games as you've come to expect. Also, there's a new 6 MiB development DRAM cart option required by the Heart of Darkness prototype. Finally, a small SMPC change allows the dev kit BIOS to play its animation, but it still doesn't go past the Saturn logo.

Automatic update checks

A new automatic update check system has been introduced to help you know when Ymir has a new version. When you first launch Ymir, you will be greeted with an onboarding dialog:

image

When a new version is made available, be it a stable or a nightly version, Ymir will display a popup window with links to the release notes and a direct download link to the new version. On a future version, this process will be fully automated.

image

New options have been added to Settings > General to configure the update checker. Here you can also open the release notes and grab the binary package for the stable and nightly releases.

image

You can also check for updates from the Help menu:

image

Debugger

The old CD Block command trace has received a small upgrade: the commands and responses are now color-coded by the command type and status, respectively.

image

New debug windows have been added to trace the LLE CD drive communications as well as commands and responses.

image

A couple of new VDP2 debugger windows have been added: a CRAM palette viewer and a display overlay with various customizable views. The overlay display allows you to see which layers are being rendered, window states for every layer, RBG0 rotation parameters being displayed, and whether color calculations or shadows are in use. More overlays will come in the future.

image image image image image image image

Changes

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)

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

The macOS releases work on Apple Silicon (ARM) systems (arm64) and Intel systems (x64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

v0.1.8

release
Release notes · 7 files

Ymir v0.1.8

Discord | Patreon | Compatibility list

This releases focuses heavily on bug fixes, with a touch of quality-of-life features, debugging tools, and small but welcome improvements across the board. There are no major improvements or new features this time.

Official ARM Windows and FreeBSD builds have arrived, thanks to @tordona and @bsdcode respectively. You can find the Windows version attached in this release and the FreeBSD version in the ports collection.

This is probably the last 0.1.x release as I'm planning to rewrite CD Block and SMPC emulation for next version, which will be labeled 0.2.0. These components have been the Achilles's heel of Ymir's emulation accuracy, causing a large number of hard issues to investigate and solve. For this reason, expect the next release to take a bit longer or be less substantial that these last releases. Also, there's a small but non-negligible chance that the components will have big enough changes that save state compatibility with 0.1.x might be broken. I'll try my best to avoid this, but compatibility and accuracy will take precedence over convenience if necessary.

Compatibility improvements

Here's a small showcase of games that now work on 0.1.8 or had major bugs fixed:

image

(click any image to zoom)

Thanks to the enormous efforts of @GoodWall533, @thelastangryman1907 and jabeck1 (and, of course, everyone else that has contributed), the compatibility list has reached over 50% of total games reported with about 85% compatibility. Filing compatibility reports is a great way to help the community too, so don't hesitate to test games and write your reports here!

Let's start with the elephants in the room: the CD Block and the SMPC, both of which now have test ROMs built by @celeriyacon. These two components have shown the worst cracks of Ymir's emulation -- every single SMPC test fails, and out of the two CD Block tests available, it only barely manages to pass one. My attempts to fix the components to pass the tests have resulted in worsened compatibility, so they will remain failing for the time being for the sake of compatibility. Both are responsible for a large number of freezes, crashes, no-boots and similar issues, and will require significant rework to be fixed. For that reason, I have decided to shift the focus onto low-hanging fruits this version and leave these components in their just barely working states until next version.

image

Not looking great here, but sometimes we have to take a step backward before we can take two steps forward.

That's not to say they haven't received any fixes, though. The test ROM has helped iron out some kinks with CD Block emulation, enough to get Virtual On - Cyber Troopers to not immediately crash after winning a fight (although it's still not fully stable either), and the SMPC tests have helped fix input problems with both the JP and EU releases of Discworld. Also, the CHD loader has received enough fixes to allow every Last Bronx dump I tested to boot properly, and the CUE parser has been rewritten, fixing dozens of issues with misaligned audio tracks and problems loading files with Unicode characters. The application now supports UTF-8 characters everywhere, although the fonts won't display all characters properly yet (Japanese text, most notably).

The internal game database has been upgraded to allow detecting games that benefit (but not require) the Backup RAM cartridge. Ymir will automatically insert the cartridge for these games:

  • Dezaemon 2 -- required for saving games
  • Sega Ages - Galaxy Force II -- required for saving replays

These cartridges will have unique names based on the game name and are saved to <profile>/backup/games/bup-ext-<title> [<code>].bin.

The SH-2 also got a few small fixes to edge cases thanks to new tests in @celeriyacon's SH-2 test ROM.

The SCU only had two fixes, one of which was affecting Phantasy Star IV in the Sega Ages collection from properly loading its graphics. Speaking of the games, there have been more SCSP fixes than usual this time which also helped improve compatibility with all games on the Phantasy Star collection. All of the games can now be played properly, although no one has played them to completion on Ymir yet. The SCSP fixes have also solved many problems such as soundtracks playing on only one channel, sound effects missing in multiple games, ear-bursting static noises, among others. Notably, CroNSF (also from @celeriyacon) is now playing songs properly!

image

Pairs of opposite sawtooth waves are used to simulate pulse waves of any width. Clever.

Finally, let's talk about graphics. Just like previous releases, there have been a multitude of VDP1 and VDP2 fixes, but this time, Ymir's VDP1 renderer has been upgraded to be pixel-perfect thanks Lordus (of DraStic fame). The new renderer received multiple optimizations and upgrades, including cycle-counting the VBlank erase process which fixes the flickering subtitles in Panzer Dragoon's FMVs (and fixes hangs in Parodius for some unexplainable reason), reworked erase and swap timings which fixes many cases of flickering or missing graphics, and a rough estimate-based cycle counting method for commands that solves significant slowdowns seen in Baroque's FMVs.

A VDP1 hack introduced on 0.1.7 to fix Mega Man X3's sprites has been reverted as it was causing problems on multiple games. This means the game's sprites are once again broken, but the upside is that at least 9 other games no longer have flashing or missing sprites.

As for the VDP2, yet another of @celeriyacon's test ROMs has helped tighten and improve video signal timings. Ymir was using an approximation that didn't quite yield the exact NTSC and PAL frame rates. Now, both modes target exactly 59.97 and 50 Hz respectively with very accurate VBlank and HBlank timings as well as VCNT sequences. Exclusive monitor modes (which no games seem to use) are partially working.

RBG rendering accuracy fixes have solved a longstanding problem in Radiant Silvergun's Stage 2C:

image

This used to be janky. Not anymore.

You can find the rest of the fixes in the Changes section below.

UI improvements

Ymir will now report slightly more useful error messages when it is unable to load a disc image which should help pinpoint the problem, be it a missing .bin file, a syntax error in a .cue file, a corrupted .chd, or anything of the sort. Also on the topic of errors, if the application fails to launch for some reason (such as failing to initialize the audio or video subsystems), it will display a message box with a short message describing the problem -- much better than the application not launching at all and leaving everyone (including me) confused. Also, thanks to @Wunkolo, macOS now has a global exception handler for serious issues like the one made available for Windows and Linux on 0.1.7.

The application is now capable of loading SDL game controller databases and includes a community-sourced database with the package, which should help improve compatibility with a variety of controllers.

On Windows 11, the window corners are now square rather than rounded.

image

An error box will be displayed if you attempt to load a game that requires a ROM cartridge (Ultraman - Hikari no Kyojin Densetsu and The King of Fighters '95) for which you don't have the image file in <profile>/roms/cart:

image

The CD Block section in the System State window will now display the file being currently read, if available -- a feature requested by game translators.

image

Debugger

In order to help troubleshoot some of these bugs, new debugging tools have been developed which may also be useful to homebrew developers.

You can now add watchpoints to both SH-2 debuggers. Watchpoints suspend execution when a particular memory address is read or written -- extremely useful to find out what is changing or accessing a particular value (especially hardware registers), as long as it's done by an SH-2 instruction.

image

The SCSP has gained its first set of debugging tools:

  • A slots viewer, showing the state of all registers as well as an oscilloscope of the output of each slot
  • An oscilloscope with the final output sent to the speakers
  • A simple KYONEX event trace (which will be improved in the future)
image

There's a new window that displays some of the most important VDP2 layer parameters, which has been helpful to detect some rendering issues.

image

The text in the Debug output window can now be selected and copied, and the entire contents of the window can be saved to a text file. This window displays data written to the Mednafen debug port and has been used by @celeriyacon's test ROMs to report test progress and provide additional context to errors. Additionally, the feature no longer requires debug tracing to be enabled.

Changes

New features and improvements

  • App: Disable rounded window corners on Windows 11.
  • App: Implement exception handler for macOS. (#460; @Wunkolo)
  • App: Provide feedback to the user if any part of the app initialization fails.
  • App: Show warning dialog if the user is missing the required ROM cartridge images for games that require them.
  • Backup RAM: Per-game internal backup RAM file names changed from bup-int-[<game code>] <title>.bin to bup-int-<title> [<game code>].bin to allow sorting files alphabetically in file browsers. Existing files will be automatically renamed as they are loaded.
  • Build: ARM64 Windows support. (#483; @tordona)
  • Build: FreeBSD support for ARM64 systems. (#421; @bsdcode)
  • Cart: Automatically insert Backup RAM cartridges for games that recommend their use, such as Dezaemon 2 and Sega Ages - Galaxy Force II. (#356)
  • Cart: Add Vampire Savior - The Lord of Vampire demo to internal database of games that need a DRAM cartridge.
  • CD Block: Allow querying files at specific frame addresses and display file being read in System State window.
  • Debug: Allow exporting debug output to a file.
  • Debug: Move debug port writes to a callback and remove them from the SCU tracer. Eliminates the need for debug tracing to use Mednafen's debug output method.
  • Debugger: Implemented SH-2 watchpoints. (#22)
  • Input: Add support for loading an external game controller database and include a community-sourced database in builds.
  • Input: Added hotkey for exiting the application, requiring a key combo to trigger: at least one key modifier (Ctrl, Alt, Shift, Option, etc.) and one other key (e.g. Ctrl+Shift+Q). (#160)
  • Media: Cache CHD hunks for improved performance at the cost of extra RAM usage.
  • Media: Provide basic error feedback when attempting to load bad, corrupt or truncated disc images.
  • SCSP: Basic debugger view for all slot registers and some state.
  • SCSP: Final output oscilloscope view.
  • VDP1: Optimize line plotting by skipping lines that are entirely out of the system clipping area.
  • VDP1: Optimize mesh polygons by limiting updates to system clip area.
  • VDP1: Simplify mesh rendering code for slightly improved performance.
  • VDP1: Various performance micro optimizations.
  • VDP2: Basic debugger view for NBG0-3 and RBG0-1 parameters.

Fixes

  • App: Set en-US UTF-8 locale globally. Fixes CHD loader unable to load files with Unicode characters in their names.
  • CD Block: Prevent a crash when attempting to set up subcode transfers without an active track.
  • CD Block: Soft reset fixes. (thanks to @celeriyacon)
  • CD Block: Use CD Block clock ratios instead of SCSP's for drive state update events.
  • CD Block: Various state transition and playback nuances. (thanks to @celeriyacon)
  • CD Block: Various Put/Get/Delete Sector Data nuances. (thanks to @celeriyacon)
  • Input: Reset inputs when unbinding inputs or disconnecting gamepads.
  • Media: Adjust sectors offsets when reading CHD images with multiple data tracks. Fixes some Last Bronx (USA) CHD images not booting. (#238)
  • Media: Fix handling of Unicode characters when loading or saving the recent game disc list.
  • Media: Ignore absolute paths when loading images from CUE sheets; load from the same directory as the CUE sheet instead.
  • Media: Properly handle UTF-8-encoded CUE files referencing other files with Unicode characters.
  • Media: Rewrite CUE parser to hopefully fix some audio skipping issues.
  • SCSP: Allow M68K to fetch instructions from SCSP registers. Fixes CroNSF audio playback.
  • SCSP: Fix check for attack stuck bug when KRS=0xF. Fixes issues in multiple games:
    • Announcer voice in DonPachi's title screen is now playing consistently (#475)
    • Both games in Sega Ages - I Love Mickey Mouse - Fushigi no Oshiro Daibouken & I Love Donald Duck - Georgia Ou no Hihou now play their songs correctly (#498)
    • All games in Sega Ages: Phantasy Star Collection now play their songs correctly (#499)
    • "Xing" voice line in Arcade Gears Vol. 2 - Gun Frontier's boot up (#467)
    • Character voice lines in Langrisser III (#426)
    • Character voice lines in AnEarth Fantasy Stories - The First Volume (#358)
    • Voice lines during intro and throughout the game in Rapyulus Panic (#338)
  • SCSP: Don't use SBCTL on slots that are playing samples from Sound RAM when the EG reaches the silence threshold. Fixes busted audio in Guardian Heroes and Elevator Action^2. (#155)
  • SCSP: Silence audio when MVOL=0. Fixes lingering sound/music when pausing in Sega Ages - Galaxy Force II. (#427)
  • SCU: Properly handle 8-bit and 16-bit writes to registers. Fixes Phantasy Star IV graphics in Phantasy Star Collection. (#499)
  • SCU: Timer 1 was never triggering when configured to trigger on Timer 0 match of 0x000.
  • SH2: Fix byte order of direct cache data accesses. (thanks to @celeriyacon)
  • SH2: Fix MOVA offset when in delay slot. (thanks to @celeriyacon)
  • SH2: Swap memory read order for MAC.W and MAC.L operands. (thanks to @celeriyacon)
  • SMPC: Clear SF (with a delay) when receiving an INTBACK break request. Fixes Phantasy Star Collection hanging on a black screen after SEGA licensing screen.
  • SMPC: Fix register reads/writes. (thanks to @celeriyacon)
  • SMPC: Optimized INTBACK flag is inverted. Fixes some input issues during the intro sequence in Magic Knight Rayearth. (#477; thanks to @celeriyacon)
  • SMPC: Time out pending INTBACK at VBlank IN if no Continue or Break requests are received until then. Fixes inputs in both Discworld versions. (#245; thanks to @celeriyacon)
  • SMPC, VDP: Trigger optimized INTBACK more consistently closer to 1ms before VBlank IN depending on vertical resolution.
  • System: Reset clock speed when soft resetting the system.
  • VDP1: Clear transparent mesh layer to 0 instead of the erase write value when erasing framebuffer. Fixes Rayman's level loading screens rendering at half brightness when using the transparent meshes enhancement.
  • VDP1: Cycle-count VBlank erase process. Fixes flashing subtitles in Panzer Dragoon FMVs and hangs in Parodius and Sexy Parodius. (#201)
  • VDP1: Don't swap gouraud values when horizontal and/or vertical flip is enabled for an untextured polygon. Fixes bad shading in Croc - Legend of the Gobbos. (#543)
  • VDP1: Force-align sprite character data address to 16 bytes when using RGB 5:5:5 color mode. Fixes misaligned team logos in All-Star Baseball '97 Featuring Frank Thomas. (#546)
  • VDP1: Improve performance by avoiding double-writing the same pixels in the erase process low resolution modes. Also fixes erase process cycle counting in high resolutions.
  • VDP1: Increase padding for system clip rendering optimization. Fixes stray white pixels on the right and bottom edges of the intro of Mahjong Yon Shimai - Wakakusa Monogatari and Croc - Legend of the Gobbos. (#527, #543)
  • VDP1: Pixel-perfect rendering. (thanks to Lordus)
  • VDP1: Delay PTM=1 drawing start to dodge some timing issues with games that trigger drawing too early. Fixes flickering glass shard in Fighter's History Dynamite's intro sequence. (#503)
  • VDP1: Primitive cycle counting to work around some games that horribly abuse the VDP1, such as Baroque, Dark Seed II, and Funky Fantasy. (#311, #316, #364)
  • VDP1: Remove write penalty hack introduced earlier for Mega Man X3's sprites. Fixes multiple issues:
    • Missing sprites in Seikai Risshiden - Yoi Kuni, Yoi Seiji, and Jissen Pachinko Hisshou-hou! Twin (#425, #537)
    • Flashing sprites in Alone in the Dark - One-Eyed Jacks Revenge, Cleaning Kit for Sega Saturn, and Contra - Legacy of War (#337, #412, #458)
    • Flashing FMVs in Funky Fantasy, World Cup Golf - Professional Edition, and Magic Carpet (#311, #516, #561)
    • Flickering letters in the mission briefing screens in Alien Trilogy (#394)
  • VDP1: Rework scaled sprite rendering to correctly handle undocumented zoom point settings.
  • VDP1: Rework erase/swap timings. Fixes numerous issues:
    • Screen flashing in Ayakashi Ninden Kunoichiban Plus (#478)
    • Flashing map in the demo version of Drift King Shutokou Battle '97 - Tsuchiya Keiichi & Bandou Masaaki (#493)
    • Every other interlace field missing in Virtual Mahjong 2 - My Fair Lady (#509)
  • VDP2: Adjust line width for RBG line color insertion. Fixes half of the field not being colored in World League Soccer '98. (#517)
  • VDP2: Always read line screen scroll data even for disabled NBGs. Fixes one-frame offset on system settings screen and Deep Fear's GUI elements.
  • VDP2: Don't draw out of bounds areas of the sprite layer when rotated. Fixes ground-on-sky glitch in Sega Ages - Power Drift. (#492)
  • VDP2: Don't use supplementary data for characters in inaccessible VRAM banks. Fixes columns of "A"s in Darklight Conflict. (#545)
  • VDP2: Double vertical window coordinates when the display is in single-density interlaced mode. Fixes the bottom half of the screen missing in Pro-Pinball: The Web. (#371)
  • VDP2: Fix CRAM address bits shuffling. Fixes unexpected graphics showing up before the intro FMV in Saturn Bomberman. (#434)
  • VDP2: Fix CRAM address calculation for RBG line colors. Fixes wrong colors for field shading in World League Soccer '98. (#517)
  • VDP2: Fix exclusive monitor timings and resolution sizes, and out-of-bounds reads from lookup tables. (thanks to @celeriyacon)
  • VDP2: Fix interlaced mode timings. (thanks to @celeriyacon)
  • VDP2: Fix off-by-one error when clamping window X coordinates. Fixes one-pixel glitches in Albert Odyssey when displaying dialogue boxes.
  • VDP2: Fix palette-based transparent meshes not blending with VDP2 layer (such as in Bulk Slash).
  • VDP2: Fix rotation parameter line color data address calculation.
  • VDP2: Fix window calculations involving illegal vertical coordinates. Fixes background glitch in Radiant Silvergun's Stage 2C.
  • VDP2: Force-fetch first character of every scanline. Fixes some garbage tiles on the left edge of the screen in Athlete Kings' splash screen. (#515)
  • VDP2: Handle games that only enable RBG1. Fixes missing background graphics in Houkago Ren'ai Club - Koi no Etude. (#551)
  • VDP2: Handle sprite window on sprite layer manually. Fixes graphics effects when defeating the first boss in Metal Black. (#404)
  • VDP2: Honor rotation parameter mode register when selecting line color data. Fixes bad sky on Episode 2 of Panzer Dragoon II Zwei and glitched sky/ceiling in Savaki. (#570)
  • VDP2: Invert TVSTAT.ODD bit on single-density interlaced modes too. Fixes swapped interlaced fields in Pro-Pinball: The Web and Shienryuu. (#447)
  • VDP2: Implement VCNT skip as a dedicated vertical phase. (thanks to @celeriyacon)
  • VDP2: Latch TVMD.DISP and TVMD.BDCLMD at start of the frame. Fixes:
    • Garbage graphics after loading screen in Samurai Spirits - Zankurou Musouken (#472)
    • One-frame glitches in Ayakashi Ninden Kunoichiban Plus and Ninpen Manmaru (#478, #569)
  • VDP2: Move VCNT update to the left border horizontal phase where HBLANK switches to zero. (thanks to @celeriyacon)
  • VDP2: Precompute per-dot rotation coefficient flag instead of deriving it twice per scanline.
  • VDP2: Read per-screen line/back color only at the start of the frame. Fixes red screen after SEGA licensing logo in Ayakashi Ninden Kunoichiban Plus. (#478)
  • VDP2: Recalculate RBG0/1 page base addresses when changed mid-frame. Fixes broken ground on NiGHTS into Dreams's boss fights. (#423)
  • VDP2: Reduce rotation parameter calculation precision to more closely match the real system.
  • VDP2: Render transparent meshes onto a separate layer instead of immediately blending them onto the sprite layer. Fixes priority issues on Akumajou Dracula X when using the enhancement. (#484)
  • VDP2: Rework bitmap delays due to bad VRAM access cycles configuration. Fixes shifted graphics in Baroque Report - CD Data File. (#524)
  • VDP2: Store line color data for RBGs separately. Fixes sky box issues when jumping on the spring pad in Sonic Jam's Sonic World mode. (#83)
  • VDP2: Use more accurate NTSC/PAL clock timings for video sync. Eliminates stutters with refresh rates that are very slightly lower than a perfect multiple of the NTSC/PAL frame rates.
  • VDP2: Use the correct character fetcher for scroll RBGs. Fixes background glitches in Battle Monsters. (#340)

Known issues

  • Using the rewind buffer feature may cause erratic behavior or crash the emulator when no game is loaded. To avoid this, only enable and use the rewind buffer after loading a game.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64/ARM64 is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

The macOS releases are universal, working on both Apple Silicon (ARM) systems (AArch64) and Intel systems (x86_64). Ymir requires macOS 15 (Sequoia) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

v0.1.7

release
Release notes · 6 files

Ymir v0.1.7

Discord | Patreon | Compatibility list

This version brings the customary set of bug fixes along with a bunch of new features, including support for the Arcade Racer and Mission Stick peripherals (in both three- and six-axis modes), the ability to take raw screenshots, new video options to improve frame pacing in windowed mode and make better use of high refresh rates when synchronizing video, a global exception handler to catch unexpected emulator crashes, and even the debugger got some attention this time - the SH-2 debugger is finally actually useful and has been an invaluable asset to help investigate and troubleshoot many bugs!

This version also brings overall performance improvements by using OS-specific features for manual reset events (used to synchronize the GUI, emulator and VDP renderer threads) as well as improving SH-2 SLEEP instruction handling. The performance uplift varies a lot between games and systems, with some seeing as much as 10% more performance.

Thanks to @Wunkolo, macOS builds are now universal, supporting both Apple Silicon and Intel-based systems in one binary. @bsdcode has been adding support for FreeBSD builds as well (#385, #389, #421), which is now available in the FreeBSD Ports Collection here.

Nightly builds are now available here. Keep in mind these are not as thoroughly tested and may contain bugs, but they're very useful for testers who wish to contribute to the evolution of Ymir or users who want to stay on the bleeding edge.

[!IMPORTANT] Save state files created by any stable release are guaranteed to be forwards-compatible with any future version of Ymir, both stable and nightly. Save state files created by nightlies have no such guarantee. Save state files are not backwards-compatible.

Compatibility improvements

Here's a small showcase of games that now work on 0.1.7 or had major bugs fixed:

showcase

(click any image to zoom)

Thanks to the issue reports from many testers and users, Ymir has received numerous improvements and bug fixes. New testers have joined the community, with special mention to @thelastangryman1907 who has reported dozens of bugs for many obscure Japanese games. Of course, I should also mention long-time testers who have been helping ensure Ymir doesn't have any regressions: @Zet-sensei, @celeriyacon, @AydanWatkins, @GoodWall533, @Silanda, @waspennator, @Immersion95, @markkrauth, and many others. Sorry if I forgot someone, the list just keeps growing!

The compatibility list now has more than 10% of total games reported with nearly 80% compatibility. Filing compatibility reports is a great way to help the community too, so don't hesitate to test games and write your reports here!

Moving on to specific fixes, let's start with the brains of the Saturn: the SH-2s. The improvements in cache emulation accuracy in 0.1.6 have been deemed stable enough to be considered safe to use when needed. As such, Ymir's internal game database has been updated to force-enable this feature for Astal, Dark Savior, and Soviet Strike, as these games are known to have compatibility issues without cache emulation.

astal-forced-sh2-cache

Some fixes to SH-2 interrupt handling (particularly DMAC and FRT) have finally solved a long-standing stability issue in Daytona USA (#209) and allowed Shellshock to boot up (#344) (although Shellshock requires boosted CD Block read speeds to avoid a crash on the intro FMV). The SLEEP instruction has also been fixed and sleep/standby modes are now implemented, allowing the emulator to efficiently skip processing the CPU if it's in one of those modes as well as wake them up when an interrupt is signaled. This allows Culdcept to boot (#346) and improves performance of games that make use of the instruction.

Speaking of non-booting games, a good number of these problems were caused by CD Block or image loading issues. Last Bronx is a good example -- it uses two data tracks: a Mode 1 track containing the game's code and data, and a Mode 2 track with compressed data in a proprietary format. The way these tracks are laid out is unusual - the second data track has a pregap that wasn't being handled correctly by Ymir. Now, most Last Bronx dumps work correctly (#238), but some CHD dumps are still causing problems.

The newly-implemented support for CD-ROM Mode 2 tracks has also fixed the missing intro FMV in NiGHTS into Dreams, a really old bug reported by yours truly before releasing 0.1.0 (#46). Additional improvements to BIN+CUE and CHD loading have allowed other games to boot or fix their audio desync issues, such as the voice lines in Minnesota Fats - Pool Legend (#363).

Many other small tweaks and fixes to CD Block functionality have also helped improve compatibility with many games, including Ultraman Zukan (#329), Digital Dance Mix Vol. 1 - Namie Amuro, Sega Rally Championship Plus, Astal, Mizuki Shigeru no Youkai Zukan Soushuuhen (#391), and WipEout 2097/XL (#202).

nights-fmv astal-in-game wipeout-xl-in-game

The SCU has also received attention in this version. This time the focus was on various nuances of DMA transfers and timers, which led to stability improvements in Fighting Vipers, Sonic Jam, Tennis Arena, and probably many others.

As usual, there have been numerous graphics fixes to count here, most of them focused on small accuracy errors reported by testers. One fix that deserves to be highlighted is delaying the handling of VDP1 framebuffer swaps to slightly later in the same scanline which was meant to fix Marvel Super Heroes sprite glitches but has also fixed dozens of issues along with it:

  • Flickering graphics in DragonHeart - Fire & Steel (#334), King of Fighters '96 / '97 (#272), Jantei Battle Cos-Player (#368), PhantasM (#336), Soviet Strike (#303), Virtua Cop 2, and Yellow Brick Road (#335)
  • Corrupted sprites in Center Ring Boxing (#377), and Marvel Super Heroes (Shuma Gorath's Chaos Dimension move) (#72)
  • Partially missing sprites in Fuusui Sensei - Feng-Shui Master (#405)
  • Freezes/crashes in Mahou no Janshi - Poe Poe Poemy (#378), and Shockwave Assault (#406)

Another fix to highlight which wasn't as impactful, but is something that no other software-based Saturn emulator does right, is the VDP2 VRAM access cycle handling fix done to improve Doukyuusei - if's title screen while maintaining proper behavior for Capcom Generation - Dai-5-shuu Kakutouka-tachi's art gallery. The new behavior has been documented here to the best of my knowledge.

Finally, the last component to receive some fixes was the SMPC. Specifically, a couple of fixes to the way inputs are reported in SH-2 direct mode have fixed lack of input response in World Heroes Perfect (#297), Touge King the Spirits (#322), Chaos Control Remix (#348), and Father Christmas (#374). This leads us nicely into the next section.

Input system enhancements

Ymir now supports the Arcade Racer and Mission Stick peripherals in addition to the Control Pad and 3D Control Pad. The steering wheel sensitivity curve can be adjusted in the peripheral configuration window. The Mission Stick can be switched between three-axis and six-axis modes, the latter of which works great in Panzer Dragoon II Zwei as long as you have an extra pair of hands.

arcade-racer-config mission-stick-config

Almost the entire alphabet is mapped to this controller. Good luck using it with only two hands.

At a lower level, the input system is now capable of distinguishing various characteristics of input axes:

  • Monopolar/bipolar: whether the axis value ranges from 0 to 1 or -1 to +1 respectively
  • Absolute/relative: whether the axis reads a fixed value when held at a particular position or responds to continuous movement
  • 1D/2D: the number of components of the axis

Here are some examples of each combination of characteristics:

1D Monopolar Bipolar
Absolute Gamepad trigger Steering wheel
Relative - Mouse wheel
2D Monopolar Bipolar
Absolute Drawing pen, touchscreen Gamepad stick
Relative - Mouse movement

With this, the emulator will now stop you from binding mismatching axes to input binds, such as trying to map a gamepad trigger to the Arcade Racer's steering wheel.

UI features

Several new options have been added to manage frame pacing. You are now able to toggle improved frame pacing ("video synchronization", not to be confused with VSync) on and off in windowed mode, which greatly improves frame pacing in the same way it does for full screen mode. If you're running a high refresh rate display, Ymir will now make better use of the display frames to further reduce input lag by repeating emulator frames and processing input while maintaining the GUI speed under your display's refresh rate. If the target speed is higher than your display's refresh rate, VSync is automatically disabled and you can choose to present the earliest or the latest frame for slightly improved performance or lower perceived input lag.

video-sync-settings

The application will now catch fatal errors and display a message box to the user. These are extremely helpful to diagnose serious crashes, so whenever you encounter them, make sure to take a screenshot and include them in issues. You can also enable the message box for unhandled exceptions with the newly added -E command line option, though this isn't recommended for general usage since it may also trigger false positives depending on your system.

fatal-error exception

Fatal errors are fatal, exceptions are not.

A new hotkey has been added to take raw screenshots of the emulator, bound to F12 by default. The screenshots can be scaled from 1x to 4x and will not be distorted by the aspect ratio setting, and are saved to PNG files capturing the raw framebuffer without data loss.

The "Speed" indicator in the title bar and frame rate OSD will now display the actual and the target emulation speeds separately. If the actual speed is lower than the target speed, the emulator is demanding too much CPU power from your system and isn't capable of reaching the desired speed. Also, the VDP1 frame rate counter will now accurately track how many VDP1 frames have actually been rendered instead of the number of draw calls issued during that frame - the latter is now tracked in a separate counter.

speed-osd speed-titlebar

Doom really abuses the VDP1 to run at abysmal frame rates. And this is using the improvement patch by fafling!

A few quality-of-life features have been added:

  • You can now have Ymir automatically load most recently loaded game disc image on startup
  • The program will automatically detect the profile path and allow using the user profile path from the OS's user home directory (a contribution from @bsdcode)
  • There are new hotkeys to rotate the screen clockwise and counterclockwise (for TATE mode)

Debugger

At long last, the SH-2 debugger is actually somewhat useful! Breakpoints and single-stepping have been implemented, and there is a branch in the works to add support for memory watchpoints which didn't make it in time for this release.

The breakpoints are saved per game and per CPU, and require debug tracing to be enabled (F11 by default) to avoid a big performance impact when not using debugging features. To support them, a new "debug break signal" feature has been added to the emulator core that can be observed and signaled by any component, allowing the emulator to suspend execution at any point -- with some supporting code, of course. This will pave the way for more advanced breakpoints in the future that can be triggered by any component, not just the SH-2 CPUs.

The SH-2 debugger has also received a new window to list all registered exception vectors pointing at the CPU's VBR or any custom address.

image

Image

The [WIP] marker is gone for good. But there's always more work to do...

The CD Block has a new debug feature: the Filters view. This window lists the settings for all 24 filters, which helped fix some lockup and no-boot issues in Last Bronx, Sega Rally Championship Plus, and Digital Dance Mix Vol. 1 - Namie Amuro, as well as fix graphics in Ultraman Zukan and the intro FMV in NiGHTS into Dreams...

The non-trivial usage of filters in NiGHTS has been documented here.

cdblock-filters

Special thanks

I have added a nice little mention in the About window to all the people who have helped me improve Ymir. Thank you all!

image

If you want to be a part of this list, consider joining the official Discord server or becoming a Patreon supporter.

Changes

New features and improvements

  • App: Added a button to copy the version string from the About window.
  • App: Added hotkey to take screenshots (bound to F12 by default) with adjustable scaling from 1x to 4x. (#350)
  • App: Added option to automatically load most recently loaded game disc image on startup.
  • App: Auto-center About window whenever it is opened.
  • App: Automatically detect profile path and allow using the user profile path from the OS's user home directory. (#411, #17; @bsdcode)
  • App: Display error dialog on unhandled exceptions.
  • App: Show actual emulation speed in title bar and frame rate OSD.
  • App: Show actual VDP1 frame rate separated from VDP1 draw calls.
  • Build: FreeBSD support for x86-64 systems. (#389; @bsdcode)
  • Build: macOS builds are now universal -- one binary supports both Intel and Apple Silicon Macs. (#351; @Wunkolo)
  • Build: Nightly builds are now available here.
  • Core: Improve manual reset event performance by using OS-specific implementations based on cppcoro.
  • Debugger: Added CD Block filters view.
  • Debugger: Added rudimentary SH-2 breakpoint management and per-game debugger state persistence. (#22)
  • Debugger: Added SH-2 exception vector list view.
  • Debugger: Allow suspending SH-2 CPUs in debug mode. (#22)
  • Debugger: Implemented SH-2 breakpoints. (#22)
  • Debugger: Introduced debug break signal that can be raised from just about anywhere. (#21)
  • GameDB: Force SH-2 cache emulation for Astal, Dark Savior and Soviet Strike.
  • GameDB: Implemented flag to force SH-2 cache emulation to specific games.
  • Input: Categorized gamepad triggers and sticks as absolute axes. Absolute axes output fixed values at specific positions.
  • Input: Categorized gamepad triggers as monopolar axes (having values ranging from 0.0 to 1.0) and gamepad sticks as bipolar axes (-1.0 to +1.0).
  • Input: Implemented Arcade Racer peripheral. (#29)
  • Input: Implemented Mission Stick peripheral with toggleable three-axis and six-axis modes. (#30)
  • Video: Added hotkeys to rotate screen clockwise and counterclockwise. (#318)
  • Video: Added option to reduce input lag by adjusting GUI frame rate to the largest multiple of the emulator's target frame rate that's not greater than the display's refresh rate.
  • Video: Added option to reduce video latency by displaying the latest frame instead of the oldest when the emulator is running faster than the display's refresh rate.
  • Video: Added option to synchronize video frames in windowed mode.
  • Video: Avoid frame skipping on slow refresh rate monitors by disabling VSync if the target frame rate exceeds the display's refresh rate.
  • Video: Simplify frame rate control in full screen mode.

Fixes

  • CD Block: Disconnect filter inputs for the fail target, not the filter itself. Fixes broken graphics in Ultraman Zukan's title screen. (#329)
  • CD Block: Don't disconnect CD device from when setting the fail output of filter. Fixes Digital Dance Mix Vol. 1 - Namie Amuro playback.
  • CD Block: Fix directory indexing for ReadDirectory and ChangeDirectory commands. Fixes Sega Rally Championship Plus (Japan) not booting.
  • CD Block: Fix handling of "no change" playback end parameter. Fixes Astal taking a long time to load the first stage.
  • CD Block: Properly read path table and directory records that cross the boundary between two CD sectors. Fixes Mizuki Shigeru no Youkai Zukan Soushuuhen booting back to BIOS. (#391)
  • CD Block: Read subheader data from CD-ROM Mode 2 tracks only and fix their addressing. Fixes missing intro FMV in NiGHTS into Dreams... (#46)
  • CD Block: Start new playbacks from starting FAD when paused. Fixes WipEout 2097 and XL boot issues. (#202)
  • Media: Add support for CD-ROM Mode 2 tracks. Fixes Last Bronx not booting. (#238)
  • Media: Compensate for INDEX 00 pregap in multi-indexed tracks in CUE sheets. Fixes partially skipped Minnesota Fats - Pool Legend voice lines. (#363)
  • Media: Fix handling of pregap in data tracks in single BIN+CUE dumps. Fixes some Last Bronx dumps not booting.
  • Media: Realign data offset to hunks between tracks in CHDs. Fixes some Last Bronx CHD dumps not booting.
  • Save states: Added CD Block file system state to save state data.
  • Scheduler: Ensure events are executed in chronological order.
  • SCU: Fix A-Bus external interrupt handling.
  • SCU: Fix DMA source address updates when source address increment is zero. Fixes background priority issue regression in Street Fighter - Real Battle on Film. (#168)
  • SCU: Fix Timer 1 not triggering when the reload counter is larger than 0x1AA or 0x1C6 depending on horizontal resolution.
  • SCU: Ignore/skip illegal DMA transfers in indirect transfer lists. Partially fixes corrupted or missing sprites in Fighting Vipers.
  • SCU: Illegal DMA interrupts should not trigger VDP1 Sprite Draw End DMA transfers.
  • SCU: Notify bus of DMA transfers.
  • SCU: Prevent indirect DMA transfers from starting if the first entry is illegal. Stops Tennis Arena from destroying all memory.
  • SCU: Use the source address increment for indirect DMA transfer data.
  • Settings: Disable "Include VDP1 rendering in VDP2 renderer thread" by default and don't enable it in presets.
  • Settings: Persist custom Screenshots profile path. (#398)
  • Settings: Properly restore controller binds for controllers other than the Saturn Control Pad. (#397)
  • SH2: Fix CPU getting stuck handling DMAC interrupts forever. Fixes Shellshock not booting. (#344)
  • SH2: Handle sleep/standby mode and wake up on interrupts. Fixes Culdcept getting stuck on intro FMV and boosts overall performance on games that make use of the SLEEP instruction. (#346)
  • SH2: Only clear zeroed out bits from write clear bitmask on FRT FTCSR writes. Fixes random lockups in Daytona USA. (#209) (thanks to @celeriyacon)
  • SMPC: Fixed TH control mode reports on SH-2 direct mode. Fixes input response in World Heroes Perfect, Touge King the Spirits, Chaos Control Remix, and Father Christmas. (#297, #322, #348, #374)
  • SMPC: Fixed TL reporting on SH-2 direct mode.
  • VDP1: Disable "antialiasing" for lines and polylines.
  • VDP1: Fix bad transparency caused by "illegal" RGB 5:5:5 color data (0x0001..0x7FFE). Fixes transparency in Sonic X-treme.
  • VDP1: Process framebuffer swap slightly later in the VBlank OUT line. Fixes numerous issues:
    • Flickering graphics in DragonHeart - Fire & Steel, King of Fighters '96 / '97, Jantei Battle Cos-Player, PhantasM, Soviet Strike, Virtua Cop 2, and Yellow Brick Road (#272, #303, #334, #335, #336, #368)
    • Corrupted sprites in Center Ring Boxing, and Marvel Super Heroes (Shuma Gorath's Chaos Dimension move) (#72, #377)
    • Partially missing sprites in Fuusui Sensei - Feng-Shui Master (#405)
    • Freezes/crashes in Mahou no Janshi - Poe Poe Poemy, and Shockwave Assault (#378, #406)
  • VDP1: Reorder LOPR, COPR, CEF and BEF updates. Fixes missing graphics in Virtual On - Cyber Troopers and Sega Touring CARS. (#112, #246)
  • VDP1: Use SCU DMA bus notification to adjust VDP1 VRAM write timing penalty. Fixes hanging intro FMV in Sonic Jam without breaking Mega Man X3's sprites. (#83)
  • VDP2: Always initialize and update background counters even for disabled layers. Fixes rolling screen in F-1 Challenge. (#300)
  • VDP2: Block bitmap reads from VRAM banks without appropriate CP access. Fixes dirty graphics in NFL Quarterback Club 97's title screen. (#332)
  • VDP2: Compute bitmap data access offsets when multiple chunks are read for an NBG. Fixes background offset in Doukyuusei - if while maintaining the slicing fix for Capcom Generation - Dai-5-shuu Kakutouka-tachi. (#384)
  • VDP2: Don't apply sprite shadow if sprite priority is lower than the top layer. Fixes shadows drawing on top of objects in Blue Seed - Kushinada Hirokuden. (#349)
  • VDP2: Don't blend line screen with layer 1 if line screen color calculations are disabled. Fixes fog in battle backgrounds in Zanma Chou Ougi - Valhollian. (#352)
  • VDP2: Don't increment vertical scroll BG coordinate on complementary field lines when rendering deinterlaced RBG lines. Fixes jittery/interlaced Grandia FMVs when deinterlace is enabled.
  • VDP2: Fix layer enable flags calculation when only RBG1 is enabled. Fixes missing background in MechWarrior 2's menus. (#413)
  • VDP2: Fix line color insertion logic. Fixes erroneously blended ground in Athlete Kings. (#299)
  • VDP2: Fix priority calculations for bitmap BGs. Fixes character sprites being drawn behind the background layer in Mr. Bones. (#247)
  • VDP2: Fix race conditions with threaded deinterlacing causing some artifacts on RBGs in single-density interlaced mode.
  • VDP2: Fix window indexing for RBGs in high resolution modes. Fixes stretched shadows in Last Bronx. (#395)
  • VDP2: Handle RBG window pixels in high resolution modes. Fixes extra column of garbage in Athlete Kings. (#299)
  • VDP2: Invert TVSTAT.ODD reads. Fixes garbled graphics on the top half of the screen in True Pinball. (#320)
  • VDP2: RBG1 uses Rotation Parameter B, not A.
  • VDP2: Reset NBG2/3 base vertical scroll counters when writing to SCYN2/3. Fixes garbled graphics in Marvel Super Heroes vs. Street Fighter during Shuma Gorath's Chaos Dimension move. (#72)
  • VDP2: Rework rotation table calculations. Fixes warped ground on player two's screen in Sonic R multiplayer mode. (#401)
  • VDP2: Skip calculation of VRAM PN/CP accesses for NBGs when RBG1 is enabled. Fixes missing car graphics in Gale Racer. (#359)
  • VDP2: Swap even/odd field when entering VBlank.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64 (also known as ARM64) is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

The macOS releases are universal, working on both Apple Silicon (ARM) systems (AArch64) and Intel systems (x86_64). Ymir requires macOS 13 (Ventura) or later.

FreeBSD users can install Ymir from the Ports Collection:

pkg install Ymir         (uses zenity with GTK3 widgets for SDL3's file dialogs)
pkg install Ymir-gtk4    (uses zenity with GTK4 widgets)

v0.1.6

release
Release notes · 7 files

Ymir v0.1.6

Discord | Patreon

This update, just like previous 0.1.x releases, brings a ton of compatibility fixes, more performance improvements, and a handful of new features to play with, including vertical display (TATE) mode, a basic notification/messages system, improved frame pacing stability in full screen mode, and emulation speed control. This is the biggest release yet, with over 80 changelog entries and the most bug fixes of every release so far.

Before we get to the meat of the release notes, I'd like to announce that Ymir now has an official compatibility list which still needs some love. Help fill it out by testing games and filling out reports in the Requests sheets. As of this writing, over 60% of reported titles are fully playable and another 20% at least goes in-game. Not bad for an emulator that's less than a year old! But this is only a small picture of the overall compatibility, as only 6% of the entire library has been tested so far.

ymir-compat

Compatibility improvements

Here's a small showcase of games that now work on 0.1.6 or had major bugs fixed:

ymir-games-showcase (click any image to zoom)

As usual, @celeriyacon has provided me with an ever-growing set of test ROMs to help improve emulation accuracy, while @Zet-sensei has pointed me in the right direction with various tricky games to test and fix, and the folks in the Discord community have been diligently testing dev builds and reporting issues left and right. This time, the SCU and the VDP2 have received special attention -- tons of fixes eliminated various bugs in previously working games and made a few more games boot past the SEGA logo or the typical black screens. WipEout is now playable and Rayman's graphics glitches have been eradicated for the most part. Even the famed Rayman final boss glitch is no match for Ymir.

https://github.com/user-attachments/assets/d8526f69-6eaa-4ca4-95e4-d2fea9fb83a8

https://github.com/user-attachments/assets/8fe59009-f479-4f7e-a59a-cf3ba7015d37

The SCU DSP in particular now has an even nastier set of tests, some of which Ymir is deliberately failing in order to maintain compatibility with some games. The SCU DMA has received an overhaul and is much more accurate, matching Mednafen's behavior 1:1. There are a few cases where both Ymir and Mednafen don't match the real hardware, although these are probably never seen on commercial titles. SCU interrupts have been revised along with master/slave SH-2 external interrupt handling behavior and should be much less problematic. The synchronization between SCU and the two SH-2 CPUs has been tightened, which helped fix WipEout's black screen on boot.

SH-2 cache emulation had a small bug in the LRU lookup table that caused weird glitches in many FMVs; this is now fixed and SH-2 cache emulation is now enabled by default for the added compatibility it provides for some games (e.g. Dark Savior).

There are too many VDP1 and VDP2 fixes to discuss here -- see the Changes section below for details. In short, many graphics glitches reported by users have been fixed, including some that no other emulator (except the MiSTer Saturn core, to my knowledge) has accurately emulated so far. A notable example is an issue with Capcom Generation - Dai-5-shuu Kakutouka-tachi (#254) in which the bottom portion of the pictures in the art gallery were sliced and shifted to the right, a behavior seen on Ymir 0.1.5, Mednafen 1.32.1, Yaba Sanshiro 1.16.6 and Nova 0.7.0:

ymir-capcom-gallery-image-bad

This was caused by lack of emulation of an improper VRAM access cycles configuration made by the game for the bitmap graphics displayed on these screens. With recent improvements to VRAM access cycles handling, Ymir 0.1.6 is now capable of displaying the images correctly:

ymir-capcom-gallery-image-good

The newly improved VDP2 VRAM access delay debug window can display information on delayed background data accesses and has been upgraded to display information on bitmap backgrounds too:

ymir-vram-access-delay

If you're technically-minded and interested in how this works, check out my brief writeup on games that use illegal VRAM access cycles.

To conclude this round-up, there have been a few fixes to the CUE parser that should fix some CD audio track misalignments and allow Ymir to load games dumped with ImgBurn or other non-Redump-approved tools, as long as the audio tracks are still in raw/binary format. The CD Block, SCSP and SMPC received one small bugfix each:

  • CD audio tracks in X-Men: Children of the Atom will now resume properly after pausing in-game.
  • A SCSP bug that caused sound effects in many games to be truncated has been squashed. Enjoy Sonic R's pause jingle in its entirety, Alucard's hoohs and haahs while speedrunning Akumajou Dracula X, and Daytona USA CCE's over-the-top announcer lines uninterrupted!
  • SMPC command processing was slowed down ever so slightly to allow finicky games such as F1 Challenge and the European release of Quake to boot.

TATE mode and new view options

A number of games (especially shoot-em-ups) support TATE mode, which requires the screen to be rotated 90°. Ymir now supports rotating the display in any direction to support those games, or just for added challenge. You can even rotate the display 180°, because why not?

display-rotation-options tate-mode-games

Along with this, new aspect ratio options have been added along with options to quickly resize the window to specific scales. Note that the scales are relative to high resolution modes, so the 2x option will result in 4x4 pixels in low resolution modes and 2x2 pixels in high resolution modes, both of which fit nicely on a 1080p display. Also, there's a new option to remember window geometry (position and size) so you don't have to adjust the window every time the emulator is relaunched.

view-menu

Smoother frame pacing

This version significantly improves frame pacing stability in full screen modes. The algorithm will now smooth out frame rate adjustments based on audio buffer state over the course of multiple frames and will spin-wait for up to 1 ms to ensure the frame is presented as close to the target time as possible. See the graphs below for a comparison.

Before: ymir-frame-pacing-0 1 5

After: ymir-frame-pacing-0 1 6

0.1.5 had slight fluctuations on every frame. 0.1.6 is far more consistent, as depicted by the nearly straight line and the more accurate 16.6ms frame time.

Performance improvements

Some components went through a round of performance optimizations:

  • SH-2 cache emulation now avoids byte-swapping, making it slightly less impactful when enabled.
  • SH-2 interrupt checks have been optimized down to a single flag check, noticeably improving performance as this is done millions of times per second.
  • SCSP went through various micro optimization rounds that also contributed to a small overall performance gain.
  • The memory bus can now map simple arrays directly, greatly speeding up accesses to ROM and RAM which comprises the majority of memory accesses.

Combined, these optimizations contributed to an overall emulation performance improvement of 5% to 10% on average and in some cases as high as 25%.

The biggest performance boost of this version comes from a new option in Settings > Video that introduces a separate thread for deinterlacing which significantly lessens the performance impact of that enhancement. In some games, the deinterlace option used to cut performance almost in half, but with the new thread the impact is usually less than 10%. This option requires a quad-core CPU or better for best results.

See the pictures below for a performance comparison in Virtua Fighter 2:

image

In this example, the performance cost of the deinterlace option was about 37%. With the dedicated thread, it drops to less than 8%. Some games benefit much more from this option than others. In Fighters Megamix, performance is lowered by 43% with the deinterlace enhancement, but when adding the dedicated thread, it reduces performance by less than 8% again.

Speed control

Before 0.1.6, the only speed options you had were 100% or uncapped (and paused, if you count that as a "speed option"). Now you have two adjustable speeds at your disposal which you can swap with the push of a button and adjust on the fly from 10% to 500% with new shortcuts. The uncapped turbo mode is still present and disables the speed limit just like before. In full screen mode, the GUI will always be updated at 48 fps or higher when running at lower speeds. If the target speed is higher than your display's refresh rate, the emulator will skip frames to maintain the GUI frame rate within range. Note that this frame-skipping does not boost performance -- the emulator is still fully rendering all frames but choosing not to display some of them.

ymir-speed-settings

ymir-alt-speed-slomo ymir-high-speed ymir-normal-speed

Several new hotkeys were introduced to let you control the speed in real time without going through menus and settings windows. These are the default key bindings:

ymir-speed-control-keybinds

Input system enhancements

The input system now lets you bind Ctrl, Alt or Shift as controller buttons, and will now react to standalone keypresses regardless of modifier combos. On 0.1.6, assuming the default input bindings, pressing Ctrl+J will now correctly trigger the A button on the Port 1 Control Pad (which is bound to J by default), whereas before these changes the key combo would mask the standalone J keypress, blocking it from actuating the A button on the emulated controller.

[!IMPORTANT] Keys mapped to controller buttons will always be triggered regardless of modifier keys (Ctrl, Alt, Shift). This means shortcuts that use keys mapped to controller buttons will also cause these buttons to be actuated. Some default keybindings where changed or removed to accomodate for the new behavior. Make sure to reset the hotkeys or reconfigure them to avoid conflicts. The following default binds were changed:

  • Pause/resume emulation: Ctrl+P replaced with Spacebar.
  • Start button on Port 1 Control Pad and 3D Control Pad: Return removed due to conflict with Alt+Enter used for toggling full screen.

A new "Clear all" button was added to controller input settings to let you quickly clear and remap all buttons.

UI features

A simple notification/messaging system has been added to provide feedback for some actions. You can turn it on or off in the newly added Settings > GUI tab.

ymir-messages ymir-gui-settings

Let's talk about the new GUI settings while at it. The "Remember window geometry" option was explained above. "Show messages" toggles the notification messages shown above on and off. "Show frame rate" displays a nifty little frame rate counter with the same information displayed on the window title bar, useful for full screen modes, and you can place it in any of the four window corners. Finally, "Show speed indicators for modified speeds" will display the slow-motion or fast-forward indicator if the current emulation speed is not set to 100%.

ymir-fps-osd

ymir-ffwd-indicator ymir-ffwd-turbo-indicator ymir-slomo-indicator ymir-fast-rewind-indicator ymir-slow-rewind-indicator

You can bind keys to toggle the frame rate OSD on and off and to cycle between the four positions.

The Backup Memory Manager also received some attention. You can now sort files, the entries will be sorted by filename by default, and it now displays the number of logical blocks (matching the numbers displayed in the Saturn's backup manager screens) and header blocks separately. Also, the manager will now export BUP files in the standard format used by various save management tools, allowing you to export saves from Ymir and use them with any other emulator or even a real Saturn.

Image

In the pictures below, you can see that the exported BUP file now has the Vmem magic and contains a valid BUP header which can be successfully read by external backup management tools.

ymir-bup-data ymir-bup-data-imported

Also on the topic of backup memory, when inserting a Backup RAM cartridge, the Image path field will now provide a default value, letting you insert the cartridge without having to specify a path first.

ymir-default-bup-cart-path

The File menu now contains a submenu for save states. You can directly load or save states from there or select an empty slot.

ymir-save-states-menu

Changes

New features and improvements

  • App: Added display rotation options for TATE mode games. (#256)
  • App: Added frame rate OSD and hotkeys to toggle it and change positions.
  • App: Added menu actions to resize window to specific scales.
  • App: Added new 3:2 and 16:10 forced aspect ratio options.
  • App: Added option to remember window position and size. (#4)
  • App: Added save states to File menu.
  • App: Added simple message overlay system to display some basic notifications. (#288)
  • App: Display emulation speed in title bar and under speed indicator, and add a new indicator for slow motion. (#16)
  • App: Improve full screen frame pacing even further by spin-waiting for up to 1 ms before the frame presentation target.
  • App: Include timestamp on save states.
  • App: Notify about loading/saving save states or switching save state slots.
  • App: Smooth out frame interval adjustments in full screen mode.
  • Backup Manager: Export "Vmem"-type BUP files by default.
  • Backup Manager: Make all columns sortable.
  • Backup Manager: Show logical block usage (matching BIOS numbers) + header blocks. (#294)
  • Debugger: Added basic VDP1 registers inspector window.
  • Input: Added new keybinds for frame rate limit control: increase/decrease speed, switch between primary/alternate speed, reset speed. (#16)
  • Input: Changed default keybinds for Pause/Resume action from "Pause, Ctrl+P" to "Pause, Spacebar".
  • Input: Removed Return from default binds to Port 1 Start button to avoid conflict with full screen hotkey (Alt+Enter).
  • SCSP: Various micro optimizations.
  • Settings: Added "Clear all" button to controller configuration window to clear all binds. (#288)
  • Settings: Automatically create/suggest a backup RAM file if no path is specified when inserting the cartridge.
  • SH2: Improve cache emulation performance by avoiding byte-swapping cache lines.
  • SH2: Improve overall emulation performance by simplifying interrupt checks.
  • System: Map 030'0000-03F'FFFF memory area.
  • System: Map simple arrays directly as pointers into the Bus struct to improve overall performance.
  • VDP2: Add dedicated thread for deinterlaced rendering if VDP2 threading is enabled. Significantly lessens performance impact of the deinterlace enhancement on quad-core CPUs or better.
  • Video: Implemented frame rate limiter. (#16)

Fixes

  • App: Disable emulator-GUI thread syncing when not in full screen mode. Fixes emulator slowing down when running at 100% speed on displays with refresh rate lower than 60 Hz.
  • App: Fix frame pacing and speed limiter on 50 and 60 Hz displays.
  • CD Block: Fix handling of "no change" PlayDisc parameters. Fixes X-Men: Children of the Atom CDDA tracks not resuming after pausing. (#274)
  • Debugger: Indirect SCU DMA transfers were being traced with the updated indirect table address.
  • Input: Fix inability to bind keyboard combos.
  • Input: Modifier keys can now be used correctly as controller input binds and will no longer interfere with other controller inputs. (#282)
  • Media: Allow loading CUE files with PREGAP and INDEX 00 on the same TRACK.
  • Media: Don't bother detecting silence in pregap area; trust the CUE files.
  • Media: Skip blank lines in CUE files.
  • Save states: Read/write missing SCSP field to save state object. Fixes occasional application crashes when using the rewind buffer in conjunction with save states.
  • SCSP: Use EG level instead of total level in MSLC reads. Fixes missing/truncated SFX on various games, including Sonic R, Akumajou Dracula X and Daytona USA CCE.
  • SCU: Allow SCU DSP program and data RAM reads or writes while the program is paused (thanks to @celeriyacon).
  • SCU: DSP data RAM reads should return 0xFFFFFFFF while program is running (thanks to @celeriyacon).
  • SCU: HBlank IN DMA transfers should not be gated by timers. Fixes non-scrolling Shinobi-X cityscape background. (#193)
  • SCU: Improve HBlank IN, VBlank IN and VBlank OUT interrupt signal handling.
  • SCU: Increment DMA source address by 4 after performing DMA transfers with no increment. Fixes background priority issues in Street Fighter - Real Battle on Film. (#168)
  • SCU: Interleave SCU DSP DMA transfers with program execution when not writing to Program RAM or accessing the CT used by DMA (thanks to @celeriyacon).
  • SCU: Rework SCU DMA transfers. Fixes displaced tile data in Steam-Heart's. (#278)
  • SCU: Run all pending DMA transfers instead of just the highest priority.
  • SCU: Split up MSH2/SSH2 interrupt handling.
  • SCU: Various fixes to SCU DSP DMA transfers to DSP Program RAM (thanks to @celeriyacon).
  • Settings: Reverse IPL column sorting order.
  • SH2: Fix cache LRU AND update mask. Fixes FMV glitches on Capcom games, WipEout and Mr. Bones when SH-2 cache emulation is enabled. (#202, #247, #270)
  • SH2: TAS.B read should bypass cache.
  • SH2: The nIVECF pin of the SSH2 is disconnected, disallowing it from doing external interrupt vector fetches.
  • SMPC: Delay all commands for slightly longer to allow Quake (EU) to boot with normal CD read speed (2x).
  • SMPC: Fix automatic switch to PAL or NTSC to match area code more consistently.
  • System: Only hard reset if SMPC area code actually changed.
  • System: Tighten synchronization between SCU and SH-2 CPUs. Improves stability on WipEout (USA). (#202)
  • VDP1: Double horizontal erase area when drawing low-resolution sprites with 8-bit data. Fixes right half of sprite graphics not cleaning up in Resident Evil's options menu. (#180)
  • VDP1: Extend line clipping to the left and top edges by one pixel to compensate for some inaccuracies.
  • VDP1: Fix end codes for 64 and 128 color sprites. Fixes white sprite outlines in Scud - The Disposable Assassin and broken sprites in Primal Rage. (#268, #280)
  • VDP1: Hack in VDP1 command processing delay on VRAM writes. Fixes glitched sprites on Mega Man X3. (#244)
  • VDP1: Include source color MSB when rendering polygons in half-luminance mode. Fixes intro FMV background on Crows - The Battle Action. (#107)
  • VDP1: Mask CMDCOLR bits 0..3 in 4bpp banked sprite mode. Fixes palette issues in Steam-Heart's and Dragon Ball Z - Shinbutouden. (#69, #278)
  • VDP1: Properly handle DIE/DIL in single-density interlaced mode. Fixes text drawn twice as tall in Resident Evil options menu. (#180)
  • VDP2: Adjust character data offset for 2x2 characters in RGB 8:8:8 color format. Fixes garbled FMV in Crusader - No Remorse. (#108)
  • VDP2: Apply character pattern delay based on first pattern name access, not all of them. Fixes shifted UI elements in Battle Arena Toshinden Remix. (#306)
  • VDP2: Apply per-dot special color calculations to bitmap BGs. Fixes translucent UI in The Story of Thor. (#152)
  • VDP2: Don't update line/back screen color, line screen scroll or rotation parameters when the display is disabled. Fixes blank screen during Sega Rally Championship boot up.
  • VDP2: Fix per-dot special priority function. Fixes BG priority issues in Waku Waku Puyo Puyo Dungeon.
  • VDP2: Fix single-density interlaced mode not actually interlacing the image.
  • VDP2: Fix sprite layer display when rotation mode is enabled. Fixes sliding 3D graphics on Hang-On GP and Highway 2000. (#167, #208, #277)
  • VDP2: Fix transparent VDP1 color data handling. Fixes missing graphics in Rayman's level select screens and Bubble Bobble's sky in the title screen. (#262)
  • VDP2: Fix window short-circuiting logic. Fixes missing ground in Final Fight Revenge and incorrect UI elements in Sakura Taisen. (#104, #253)
  • VDP2: Halve sprite layer width when drawing 8-bit sprite layer in low-resolution VDP2 modes. Fixes text drawn twice as wide in Resident Evil options menu. (#180)
  • VDP2: Handle bad window parameters set by Snatcher on the "Act 1" title screen (and probably many other places). (#259)
  • VDP2: Honor TVMD.BDCLMD when the display is disabled. Fixes screen transitions in Sega Rally Championship.
  • VDP2: Ignore vertical cell scroll read cycles for NBGs that have the effect disabled. Fixes wavy background effect on stage 2 of Magical Night Dreams - Cotton 2. (#255)
  • VDP2: Implemented rules for bitmap VRAM access delay. Fixes sliced images in Capcom Generation - Dai-5-shuu Kakutouka-tachi art gallery. (#254)
  • VDP2: Latch BG scroll registers earlier (at VBlank OUT) and latch vertical scroll registers (SCY[ID]Nn). Fixes bad vertical offset in Shinobi-X's NBG2 layer. (#193)
  • VDP2: Read first vertical cell scroll entry on bitmap backgrounds. Fixes misplaced lines in Street Fighter - Real Battle on Film FMVs. (#291)
  • VDP2: The first vertical cell scroll entry read does not update the address. Fixes background offset on the first Rayman boss stage.
  • VDP2: Update line screen scroll address at Y=0. Fixes line glitches in Rayman's backgrounds and Sonic Jam's Sonic 2 special stage graphics.
  • VDP2: Update line screen scroll offsets only at the specified boundaries. Very slightly improves performance and fixes text slicing issues in Sega Rally Championship's Records and Options screens.
  • VDP2: Update vertical cell scroll every 8 cell dots correctly when the background is zoomed in.
  • VDP2: Update vertical scroll registers (SCY[ID]Nn) when written. Fixes background distortion effect of Shuma Gorath's Chaos Dimension super move in Marvel Super Heroes vs. Street Fighter. (#72)
  • VDP: Fix handling of VDP1 threading flag when VDP2 threading is disabled.
  • ymdasm: Fix reversed SCU DSP DMA immediate/data RAM operand decoding.
  • ymdasm: Mask and translate several SCU DSP immediates.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64 (also known as ARM64) is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

The macOS releases are available for Apple Silicon (ARM) systems (AArch64) and Intel systems (x86_64). Ymir requires macOS 13 (Ventura) or later.

v0.1.5

release
Release notes · 7 files

Ymir v0.1.5

This update focuses on compatibility improvements, includes a number of quality of life upgrades, and introduces the first couple of graphics enhancements: deinterlacing and transparent mesh polygons.

image

As with every 0.1.x release, I've been putting a lot of effort into improving emulation accuracy and compatibility with games. With the help of your bug reports and @celeriyacon's test ROMs several games sprang to life, including some known for being tricky to emulate. Here's a small selection of them:

newly-booting-games (click any image to zoom)

Features and improvements

Many users have reported that migrating emulator data is cumbersome, requiring manual adjustments to several paths in the Settings window. Until 0.1.4+1, Ymir.toml stored several absolute paths to directories managed by the emulator. Starting from 0.1.5, the configuration file will store relative paths, making it a breeze to transfer files between versions or if want to move the emulator folder elsewhere in your system.

[!TIP] The paths will automatically adjust if you update Ymir in-place (that is, replace the program files in the existing folder and run it once). After that, you can move it anywhere and it should Just Work™.

The Backup Memory Manager is now capable of importing standard .BUP files created by various Saturn save converter tools. Additionally, Ymir is now able to transparently use backup RAM files from other emulators like Yaba Sanshiro, Mednafen or the Saturn MiSTer core -- simply pick the existing file when inserting a Backup RAM cartridge or configuring Internal Backup RAM and Ymir will automatically detect the file format.

A new option has been added to Settings > System to automatically create a new Internal Backup RAM image file for each game automatically. This helps ensure there is enough space for all but the most space-hungry game saves.

image

These files are stored under <profile-path>/backup/games:

image

@GlaireDaggers has added support for MIDI input and output. There are very few retail games that make use of this feature -- Saturn Music School and its sequel being notable examples. Some homebrew developers (and perhaps musicians) will find it useful.

https://github.com/user-attachments/assets/ced2aa30-76ab-4451-91b4-0b20ec51ed56

A new Tweaks tab was added to the Settings window encompassing all accuracy, compatibility, quality and performance settings, along with presets to quickly reconfigure parameters for maximum compatibility or performance. If a game doesn't work, try tweaking these settings or using the accurate presets here, and if it still doesn't work, copy the settings that comes in a convenient text box with nicely formatted text ready to be pasted into a GitHub issue.

image

For homebrew developers that need an excessive amount of accuracy, there is a new option in Settings > Audio that allows you to adjust SCSP emulation granularity. To contextualize: the SCSP (Saturn Custom Sound Processor) processes 32 sound slots sequentially, producing one audio sample once all slots have been processed. By default, Ymir emulates a full sample (or 32 slots) at a time. This option allows you to subdivide emulation to 16, 8, 4, 2 or 1 slot per step, tightening synchronization between the SCSP and the rest of the system at the cost of performance.

image

[!IMPORTANT]
It is HIGHLY recommended to leave this option at the minimum value of 0 (32 slots/one sample per step) as it has an enormous impact on performance and seems to benefit no games. It's only provided to pass some strict timing tests and may be helpful for homebrew developers that want to push the hardware to its limits.

The option comes with a warning:

image

On the topic of SCSP, this component has received many accuracy fixes thanks to @celeriyacon's test ROMs. This resulted in many sound improvements across the board:

  • Some games that sounded too quiet are now level with other games.
  • Games that didn't boot because of incorrect emulation of certain SCSP registers are now working.
  • A few games had missing or bad sound effects. These are now playing correctly.

Of particular note, as far as I'm aware, Ymir 0.1.5 is the first software-based Saturn emulator that properly interleaves DSP instructions with slot processing, meaning it has much higher DSP sound effect emulation accuracy than other emulators. This seems to have no practical effect on the majority of retail games, but is an important accuracy milestone to be noted and may be exploited by homebrew developers and demosceners to produce software that rely on precise timings. Besides Ymir, only the Saturn MiSTer core is capable of this (to my knowledge).

I've talked about these test ROMs for a bit, but never explained what they do or shown what they look like. In short, they test some quirks, edge cases and timing behavior of the Saturn's processors and compare the results against those taken from the real hardware. Any divergences are displayed to the user (in this case, emulator developer) for diagnosis. Combined with the source code, documentation, and help from experts, these ROMs help greatly improve the accuracy of any emulator. Here are Ymir's results on the latest SCSP, SCU and SH-2 tests made available to me, using the "Best quality/accuracy" presets from the new Tweaks tab:

image

image

image

Graphics enhancements

This version now includes graphics deinterlacing, a highly-requested enhancement that significantly improves visual quality of interlaced high-resolution games. See it in action below:

https://github.com/user-attachments/assets/f669d16c-9215-48d5-92a8-b3b337dce00f

There is a new option to replace mesh polygons (drawn in checkerboard patterns) with 50% translucent polygons.

image

The enhancement is enabled on the bottom row. Observe these details from left to right:

  • Panzer Dragoon Saga: a portion of the dragon's wings and the tornado ahead
  • Fighters Megamix: smoke on Jacky's foot and impact effects
  • Daytona USA CCE: walls and car shadows

You can find the new enhancements in Settings > Video > Enhancements.

image

UI improvements

Some Mac users were reporting that the picture was displayed on the top-left quadrant of the window:

Screenshot 2025-06-24 at 7 08 13 AM

Thanks to @Wunkolo, this is now fixed:

Screenshot 2025-06-24 at 7 09 59 AM

(Note that in the screenshot above, the menu bar is hiding a small portion of the top of the screen. That is also fixed.)

As a bonus, the application now support multi-DPI setups too. In the video below (recorded on Windows), the window is dragged between two screens with different DPI settings:

https://github.com/user-attachments/assets/4fc0bb13-3373-430e-95c5-0fc268cef6ae

Additionally, you're now able to override the GUI scaling instead of relying on your operating system's settings. You can find the option in Settings > Video:

image

The File menu now includes a list of recently opened game disc images. Hovering over elided items reveals the full path.

image

You can now use a gamepad to navigate through UI elements. Pressing B on a window while having nothing select closes it. For other controls, see https://github.com/ocornut/imgui/issues/787.

Changes

New features and improvements

  • App: Added command-line option -P to force emulator to start paused.
  • App: Added new Tweaks tab to Settings window consolidating all accuracy, compatibility and enhancement settings.
  • App: Added option to create internal backup RAM files per game. (#99)
  • App: Added option to override UI scale. (#251)
  • App: Added option to toggle fullscreen by double-clicking the display. (#197)
  • App: Added recent games list to File menu. (#196)
  • App: Automatically center Settings window when opening it. (#251)
  • App: Close windows when pressing B or Circle on gamepads while nothing is focused. (#251)
  • App: Enable gamepad navigation on GUI elements. (#251)
  • App: Store relative paths in Ymir.toml. (#207)
  • App: Use window-based DPI to adjust UI scale, allowing the UI to adapt to displays with different DPI settings. (#221; @Wunkolo)
  • Backup RAM: Support interleaved backup image formats such as the ones produced by Yaba Sanshiro or the MiSTer core. (#87)
  • Backup RAM: Support standard BUP backup files. (#87)
  • SCSP: Added option to increase emulation granularity for improved timing accuracy (thanks to @celeriyacon).
  • SCSP: Double-buffer DSP MIXS memory (thanks to @celeriyacon).
  • SCSP: Implemented MIDI In and Out. (#258; @GlaireDaggers)
  • SCSP: Interleave DSP execution and slot processing (thanks to @celeriyacon).
  • VDP1: Added option to replace meshes with 50% transparency.
  • VDP1: Clip sprites to visible area to speed up rendering, especially of very large sprites.
  • VDP: Added option to deinterlace video. (#66)
  • VDP: Moved VDP1 rendering to the emulator thread to improve compatibility with some games (e.g. Grandia) and added an option to move it back to the VDP rendering thread. (#233)

Fixes

  • App: Fix rare crash when loading a backup memory image in the Backup Memory Manager.
  • App: Fix window scaling on macOS Retina displays when using HiDPI mode. (#221, #266; @Wunkolo)
  • App: Prevent loading internal backup memory image as backup RAM cartridge image.
  • CD Block: Start new playbacks from starting FAD when previous playback has ended. Fixes WipEout freeze after SEGA logo and many other freezes, no-boots and softlocks.
  • Media: Fix pregap handling in single BIN images.
  • SCSP: Apply DAC18B to output (thanks to @celeriyacon). Fixes quiet audio in many games. (#237)
  • SCSP: Fix loss of accuracy on MIXS send level calculation (thanks to @celeriyacon).
  • SCSP: Fix send level, panning and master volume calculations.
  • SCSP: Fix slot output processing order (thanks to @celeriyacon).
  • SCSP: Fix swapped DAC18B and MEM4MB bits (thanks to @celeriyacon).
  • SCSP: Run one additional DSP step to fix FRC issues (thanks to @celeriyacon).
  • SCU, SH-2, SMPC, SCSP, VDP: Numerous fixes to interrupt handling (thanks to @celeriyacon). Fixes intermittent Rayman inputs and some audio glitches.
  • SCU: Various DSP accuracy fixes (thanks to @celeriyacon).
  • SH2: More fixes to FRT, WDT and DIVU (thanks to @celeriyacon).
  • SMPC: Cancel scheduled command processing event when resetting SMPC. Fixes a long hang after hard resetting in some cases.
  • SMPC: Change fixed bits from 111 to 100 in TH/TR control mode responses for the first data byte of the Control Pad and 3D Control Pad peripherals. Fixes Golden Axe booting back to BIOS. (#231)
  • SMPC: Eliminate spurious INTBACK interrupts.
  • SMPC: Prevent COMREG writes when a command is in progress. Fixes some boot issues leading to the "Disc unsuitable for this system" message. (#219)
  • SMPC: Prevent optimized INTBACK report from occurring unless a continue request was sent. Fixes input issues with Yaul-based homebrew.
  • SMPC: Prioritize INTBACK continue requests over break requests.
  • System: Tighten synchronization between the two SH-2 CPUs and remove artificial timeslice limit. Improves performance and fixes Fighters Megamix and Sonic Jam intermittent boot issues. (#236, #242)
  • VDP1: Lower command limit to work around problematic games that don't set up a terminator in the command table. (#213, #216)
  • VDP1: Significantly slow down command execution when running the VDP1 renderer on the emulator thread. Fixes Dragon Ball Z - Shinbutouden freeze after SEGA logo. (#233)
  • VDP2: Apply horizontal mosaic effect to rotation background layer. Fixes missing effect on Race Drivin' Time Warner logo. (#267)
  • VDP2: Apply window effect to sprite layer. Fixes graphics going out of bounds in many games. (#173)
  • VDP2: Check for invalid access patterns to determine if NBG characters should be delayed. Fixes background offsets in many games. (#169, #190, #226)
  • VDP2: Disable NBG1-3 only if both RBG0 and RBG1 are enabled simultaneously.
  • VDP2: Honor access cycles and VRAM bank allocations to restrict pattern name and character pattern accesses. Fixes garbage graphics in Panzer Dragoon Saga, Sonic 3D Blast and Street Fighter Alpha/Zero 2. (#203, #213)
  • VDP2: Invert back screen color calculation ratio. Fixes black background on Sakura Taisen FMVs. (#241)
  • VDP2: Move existing VCounter into VDP2 VCNT register. Fixes Assault Suit Leynos 2 freeze when going in-game and King of Fighters '95 not booting. (#75)
  • VDP2: Synchronize background enable events with the renderer thread. Fixes FMV slicing issues on slow machines on Sakura Taisen.
  • ymdasm: Fix SCU DSP unconditional JMP disassembly.

Which version should I download?

Grab the file matching your operating system and processor architecture:

  • windows, linux and macos indicate the operating system
  • x86_64 is for Intel or AMD CPUs and AArch64 (also known as ARM64) is for ARM CPUs
  • All builds are for 64-bit systems

For x86_64 builds, the AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it doesn't start up or randomly crashes for no reason, try the SSE2 version.

Every ARM build also includes support for the NEON instruction set.

For Windows releases, you might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer, AArch64/ARM64 installer). Ymir requires Windows 10 or later.

The macOS releases are available for Apple Silicon (ARM) systems (AArch64) and Intel systems (x86_64). Ymir requires macOS 13 (Ventura) or later.

v0.1.4+1

release
Release notes · 14 files

Ymir 0.1.4+1

This is a maintenance release that fixes a showstopper bug with SSE2 builds.

Check release 0.1.4 for the full release notes.

New features and improvements

  • App: You can now drag and drop CCD, CHD, CUE, ISO or MDS files into the emulator window to load games.

    drag-and-drop-load

Fixes

  • VDP2: Fix black screen on SSE2 builds.

v0.1.4

release
Release notes · 14 files

NOTICE

The SSE2 builds in this version produce no graphics output. Please grab 0.1.4+1 instead which fixes this problem.

Ymir v0.1.4

This version focuses heavily on compatibility improvements and comes with lots of bug fixes, performance boosts and new features, including one long-awaited, heavily requested feature: MAME CHD support!

Image

Although the changelog below says "preliminary support", the feature has been tested for weeks by many users and seems to be rock-solid, as long as the games are properly supported by the format. Note that because it is a compressed format, it won't load as fast as raw, uncompressed images. You can enable the Preload disc images to RAM if you experience hiccups during gameplay.

The CUE sheet parser has been adapted to load games that use multi-indexed tracks like Taito Chase H.Q. + S.C.I. Games that use this feature now work as long as you use BIN/CUE files.

Compatibility with games has been greatly improved since version 0.1.3. Many no-boot games are now showing some signs of life, and some even go in-game and can be completed in full. Tons of bugs have been fixed since then - graphics, sound, CD, peripherals, CPUs, ROMs, everything got a bit of the magic touch on 0.1.4. While on the subject, @celeriyacon has provided me with another test ROM, this time focused on the SH-2. This means CPU emulation is much more accurate than before and it has already bore fruit: a long-standing bug in Daytona USA (the original release) present since before version 0.1.0 (#7) has been fixed thanks to this ROM.

This version also comes with several performance improvements, courtesy of @Wunkolo and @StrikerX3 (wait, that's me!). Wunkolo has made significant changes to the software VDP renderer to make use of SIMD instructions on both x86 and ARM bringing a boost of up to 11% performance on graphics-heavy games (especially those that use high-resolution modes), while I made SH-2 emulation more efficient and accurate, adding another 5% to 20% overall performance to the emulator. (It's not often that you see accuracy and performance working together like this.) On top of that, a bug fix to the VDP2 RBG0 renderer added another 10% performance to the table in nearly every scenario. This means Ymir will have more headroom to run on lower-end hardware and Turbo speed will be faster than ever.

Ymir 0.1.4 now supports the 3D Control Pad. If you have a controller with an analog stick and analog triggers, those are automatically mapped to the new controller. To switch between digital and analog modes, click the Left Stick. These are the default input binds for port 1:

image

UI improvements

There is a new option under Settings > General > Behavior to pause emulation when the window loses focus.

Image

The blue background surrounding the display in windowed mode has been replaced with pure black matching full screen mode.

image

The playback indicators now have a shadow to make them visible on white backgrounds.

image

The UI will automatically rescale if you change your system's DPI scaling setting (thanks to @Wunkolo).

https://github.com/user-attachments/assets/e0b6c85c-36bc-4d75-9acf-389a06e459d9

Changes

New features and improvements

  • App: Added option to pause emulator when the window loses focus. (#181)
  • App: Added shadow under playback indicators to make them visible on white backgrounds.
  • App: Changed background color around screen to black on windowed mode.
  • CD Block: Implement Put Sector command, used by After Burner II. (#78)
  • Core: Performance improvements, especially for ARM builds. (@Wunkolo)
  • Debug: Simple CD Block commmand tracer window.
  • Input: Implemented 3D Control Pad. (#28)
  • Media: Preliminary support for CHD files. (#48)
  • Media: Support multi-indexed audio tracks (BIN/CUE only). (#58)
  • SMPC: Set SF=0 on unimplemented commands so that games can move forward.
  • SH-2: Build infrastructure needed to honor memory access cycles for improved performance and accuracy.
  • SH-2: Slow down accesses to on-chip registers to 4 cycles.
  • VDP: Rewrite VDP2 frame composition code to use SIMD on x86 and ARM for improved performance. (@Wunkolo)

Fixes

  • App: Automatically adjust scaling when system-wide DPI is changed. (@Wunkolo)
  • App: Customized profile paths are now created at the specified location instead of the default. (#119, #126; @lvsweat)
  • CD Block: Clear partitions and filters on soft resets triggered by Initialize CD System command. Fixes some game boot issues.
  • CD Block: Clear the "paused due to buffer exhausted" flag when SeekDisc command pauses playback. Fixes Sakura Taisen 2 read errors after FMVs.
  • CD Block: Don't clear the file system when opening the tray.
  • CD Block: Fix audio track sector sizes. Fixes some CD audio track playback glitches with certain images (particularly MDF/MDS).
  • CD Block: Fix Delete Sector end position when sector count is FFFF. Fixes some game boot issues.
  • CD Block: Fix directory indexing. Fixes one of Assault Suit Leynos 2 crashes on startup. (#127)
  • CD Block: Free last buffer from partition when ending a Get Then Delete Sector transfer when the last sector isn't fully read. Fixes some game boot issues.
  • IPL: Automatically load IPL ROM when switching disc images. (#128)
  • M68K: Soft reset CPU when executing the RESET instruction. Fixes OutRun getting stuck on its own SEGA logo.
  • Media: Fix crash when parsing CUE sheets with non-contiguous tracks.
  • SCSP: Don't mirror sound RAM on 5A8'0000-5AF'FFFF. Fixes After Burner II audio and M68K crashes.
  • SCU: Rework interrupt handling. Fixes Rayman inputs. (#59)
  • SCU: Set ALU = AC before running DSP operations. Fixes Quake crash on boot. (#156)
  • SCU: Timer enable flag applies to both timers. Fixes background priority issues in Need for Speed.
  • SH-2: Fix PC offsets for exceptions, interrupts, TRAPA and RTE. Fixes some game boot issues.
  • SH-2: Fix PC offsets for mova, mov.w and mov.l with @(disp,PC) operand (thanks to @celeriyacon).
  • SH-2: Fixes and accuracy improvements to DIVU (thanks to @celeriyacon).
  • SH-2: Fixes and accuracy improvements to FRT (thanks to @celeriyacon). Fixes freezes in Daytona USA. (#7)
  • SH-2: Fixes and accuracy improvements to WDT (thanks to @celeriyacon).
  • SH-2: Lazily update WDT and FRT timers. Provides a 5-10% performance boost and improves accuracy!
  • SMPC: Various INTBACK handling adjustments. Partially fixes Assault Suit Leynos 2 no-boot issues.
  • System: Fix cycle counting on the main loop not taking into account the number of cycles taken by the CPUs, resulting in undercounting timers.
  • VDP1/2: Fix handling of 16-bit sprite data from VDP1 when VDP2 uses 8-bit sprite types. Fixes sprites in I Love Mickey Mouse/Donald Duck.
  • VDP2: Allow 8-bit reads and writes to VDP2 registers.
  • VDP2: Apply transparency to mixed-format sprite data when rendering the special value 0x8000. Fixes Assault Suit Leynos 2 black screen after loading.
  • VDP2: Don't increment vertical mosaic counter if mosaic is disabled. Fixes text boxes and character portraits in Grandia. (#91)
  • VDP2: Fix bitmap base address for RBGs. Fixes several graphics glitches on menus and in-game in Need for Speed.
  • VDP2: Fix line screen scroll in double-density interlace mode. Fixes stretched videos in Grandia. (#91)
  • VDP2: Fix special color calculation bits. Fixes Sonic R water effects. (#150)
  • VDP2: Fix vertical cell scroll effect on games that set up access patterns that don't match the NBG parameters. Fixes Sakura Taisen 2 FMVs.
  • VDP2: RBG0 was always being processed/rendered even when disabled.
  • ymdasm: Fix file length when using a non-zero initial offset with the default length.

Known issues

Several games exhibit graphics or sound glitches. See Issues for details. Specific cases:

  • After Burner II: some sprites that should be transparent are rendered in a black box
  • Akumajou Dracula X: sound effects sometimes play too quietly or are silent
  • Die Hard Arcade/Dynamite Deka: missing sound effects
  • Doom: minor graphics artifacts. Sound effects only play on the left channel when using Stereo audio (#192)
  • Fighters Megamix: some graphics are slightly offset to the left (#190)
  • I Love Donald Duck: sprites persist through some screens
  • I Love Mickey Mouse: status bar and other HUD elements are missing
  • Final Fight Revenge: the ground is just a plain color (#104)
  • Groove on Fight: character sprites are glitched (#70)
  • Marvel Super Heroes vs. Street Fighter: flashing graphics
  • NiGHTS into Dreams: doesn't play the intro video (#46). You can skip it by pressing start on the black screen
  • Phantasy Star Collection:
    • Phantasy Star I: audio is quiet and only plays during the intro
    • Phantasy Star II and III: audio is played on the right channel only
    • Phantasy Star IV: goes to a black screen and only plays music
  • Sonic Jam:
    • Main menu text sometimes isn't rendered (#131)
    • The status bar at the top of the screen in Sonic World is partially drawn (#131)
    • Music stops playing after a while (#83)
  • Sonic R: some sound effects (like the pause jingle) play back incorrectly
  • Virtua Fighter: glitchy in-game graphics (#40)
  • Thunder Force Gold Pack 2: no audio in either game (#145)
  • X-Men vs. Street Fighter: flashing graphics

Netlink-capable games are not supported yet; these either boot back to system menu or hang on the SEGA logo:

  • Daytona USA CCE Netlink Edition
  • Daytona USA Circuit Edition (Japan)
  • Duke Nukem 3D (USA) (#136)
  • Saturn Bomberman (#63)

The following games softlock or freeze during gameplay:

  • Advanced V.G.: freezes when selecting a character
  • Assault Suit Leynos 2: freezes on a black screen in-game
  • Clockwork Knight 2: freezes on a black screen when starting the game
  • Grandia: freezes if VDP threading is enabled. The 3D graphics glitch out if VDP threading is disabled. (#91)
  • Sakura Taisen: freezes during certain dialogue lines (#90). Can be worked around by mashing B to skip sound clips before the softlock happens
  • Sakura Taisen 2: freezes during certain dialogue lines
  • Vampire Hunter: freezes if you let the intro sequence play past the "Vampire" logo

The following games stay stuck on the SEGA copyright screen, on a black screen or boot back to the system menu:

  • Astal (#132)
  • Capcom Generation - Dai-5-shuu Kakutouka-tachi (#68)
  • Crusader - No Remorse (#108)
  • Discworld
  • Jung Rhythm (#85)
  • The King of Fighters '95 (#75)
  • Mega Man X3

Miscellaneous issues:

  • Switching discs or returning to the system menu with A+B+C+Start while using a Japanese IPL (BIOS) ROM may cause the system to display the "Game disc unsuitable for this system" or "Cartridge unsuitable for this system" messages. As a workaround, force a hard reset (Ctrl+R by default) to fix this.
  • Rayman: inputs are inconsistent (feels like pushing a turbo/repeat button) (#59) and has some graphics issues

This game currently only works with SH-2 cache emulation enabled:

  • Dark Savior (#134)

Which version should I download?

If you just want the emulator, grab the ymir- release for your operating system.

The AVX2 version offers slightly better performance but requires a CPU that supports the instruction set -- pretty much any Intel Core or AMD CPU since 2011 and Intel Pentium/Celeron CPUs from 2020 onwards has support for it. If you don't know if AVX2 is supported or you have no idea what any of this means, it's probably safe to grab the AVX2 version if you don't have an ancient or cheap computer. If it randomly crashes for no reason, try the SSE2 version.

For Windows releases, the Console version opens a terminal window alongside the main emulator window and the Win32 version is a proper GUI application with no terminal. If in doubt, prefer the Win32 version. Despite the name, Ymir is a 64-bit application. You might also need to install the latest Microsoft Visual C++ Redistributable package (x86_64 installer). Ymir requires Windows 10 or later.

The macOS releases are available for Apple Silicon (ARM) systems (a64) and Intel systems (x64). Ymir requires macOS 13 (Ventura) or later.

The ymdasm tool is more useful for emulator or homebrew developers. Check its README for instructions.