github StrikerX3/Ymir v0.1.5

latest releases: latest-nightly, v0.1.7, latest-rolling...
2 months ago

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.

2025-06-18_00-54-46.mp4

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:

deinterlace.mp4

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:

Thanks to @Wunkolo, this is now fixed:

(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:

QQGtafKfBi.mp4

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 ocornut/imgui#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.

Don't miss a new Ymir release

NewReleases is sending notifications on new releases.