Introducing Kronos: a new Sega Saturn/ST-V emulator

Kronos is a fork of YabaSanshiro, which is itself a fork of Yabause. The project was started by François, his main goal was to have an emulator benefitting from YabaSanshiro improvements, while being friendly with x86_64 architecture and desktop computers.

Over time, several new features were added :

  • Sega ST-V emulation (the arcade version of the Sega Saturn)
  • Modern OpenGL Core support, it should now have a fair compatibility, even with intel GPUs, the minimum requirement is OpenGL 3.3 Core, and 4.2 if you want to benefit from gpu tesselation

Additional things to know :

  • It’s using a high performance SH2 cached interpreter, albeit different from the dynarecs used in YabaSanshiro, the CPU frequency requirement is still around 30% lower than an emulator using a classic SH2 interpreter like beetle-saturn
  • It’s compatible with beetle-saturn savefiles, there is even a core option to load them from the same path
  • It’s compatible with zipped cue+bin+wav isos, you don’t need to uncompress them or convert them to CHD
  • There are several core options to improve rendering (tesselation, upscaling, …)

Shining Force 3 on Sega Saturn :

Cotton 2 on Sega ST-V :

Things to do/fix :

  • Improve compatibility with non windows/linux platforms, in the case of MacOS X we’ll first need a retroarch with OpenGL 3.3 enabled
  • Improve input lag, we are 1 frame behind beetle-saturn at the moment
  • Add CHD support
  • Hook optional YabaSanshiro SH2 interpreters as core options, while they are not cross-platform, they could be interesting to further improve performances on their respective platforms (x86_32,arm,arm64)
  • Hook alternative input devices (lightgun, mouse, keyboard, …)
  • Fix the “toggling fullscreen/windowed” issue (it will result in a black screen if you do that while playing)
  • Fix game specific issues, detailed reports are welcome at https://github.com/FCare/Kronos/issues

There is a compatibility list available here

New Vulkan graphics enhancements features in Beetle PSX HW!

MDEC YUV filtering

PlayStation used a special unit called the MDEC to decode full motion videos instead of relying on software rendering (like the Saturn). These videos were encoded in YUV macroblocks and had to be converted from YCbCr to RGB so that the PSX can output the final image to the screen. A common issue with PlayStation emulators is that the chroma channel generally should be smoothed, but the PlayStation tend to leave it unfiltered.

There’s now a feature called ‘MDEC YUV smoothing’ which does filter the chroma channel. You can see the before/after screenshot above (video in question is the Resident Evil 1 intro) to see the kind of visual enhancement this brings to the picture.

SSAA (Super Sampled Anti Aliasing)


Some people prefer to play PlayStation1 games at native resolution and just applying a CRT shader at the end instead of running them at very high resolutions. However, there are some issues with that approach. 3D polygon graphics can tend to look very aliased and jagged and lacking in definition.

Alternatively, others like to crank the resolution up as high as possible. Both approaches have their pros and cons, but a definite disadvantage is that early 3D was very primitive so you might not want to see razor sharp angular polygons rendered at obscene resolutions, especially when a game relies a lot on pre-rendered backgrounds and other 2D elements. The Final Fantasy and Resident Evil games come to mind for one.

The option ‘Adaptive smoothing’ already exists and it attempts to distinguish 2D elements from 3D elements. It will smooth out the 2D elements but leave the 3D elements alone, resulting in a high resolution picture with the 2D elements not looking pixelated and ugly.

This new Vulkan-only option, SSAA, is a completely new approach. The image is rendered at the internal resolution you set it at (2x/4x/8x/16x, you name it). It then downsamples it at the final output stage back to a resolution somewhere in the ballpark of 240p. What you get is a low-resolution image with very clean anti-aliased 3D, kinda similar to the N64 actually which had native 8x multi sampled anti aliasing of some sort.

Certain CRT shaders expect a 240p-ish image to look their absolute best, so this option lends itself very well to that. It also can tend to look bit more coherent with mixed 2D and 3D in cases where adaptive smoothing fails.

Tip: We recommend you turn dithering off when using SSAA (Super Sampled Anti-Aliasing).

Example – Final Fantasy IX

Below you see SSAA in action with Final Fantasy IX on RetroArch. The first image is SSAA at 1x internal resolution. The second image is SSAA at 8x internal resolution. You can see how the downscaling does its magic in the second picture – it results in an image that almost looks like as if the polygon characters are part of the background itself.

Finally, a CRT shader is used – crt-royale-ntsc-320px.

Final Fantasy IX – SSAA at 1x internal resolution with CRT Royale
Final Fantasy IX – SSAA at 8x internal resolution with CRT Royale

Dithering for Vulkan

PlayStation and N64 output the final image at 16 bits per pixel. Since that isn’t a particularly wide colorspace, both systems used dithering in order to fake the illusion of a larger palette of colors. This combats color banding and wouldn’t be very noticeable at native resolutions on a CRT TV. On more powerful hardware and when emulated, the limitations of this approach become clear, and some would prefer either internally rendering the dithering at the internal resolution, or disabling it altogether.

Dithering was previously ignored by the Vulkan renderer and was always turned off, no matter what you configured. Now it will actually let you enable it. If dithering is enabled, the scanout image will be 16 bits per pixel. If it is disabled, the scanout image will be 32bits. We recommend that you turn dithering off if you are going to be using ‘SSAA’ (Super Sampled Anti Aliasing)