Parallel N64 with Parallel RSP dynarec release – fast and accurate N64 emulation is now here!

Hot on the heels of our Beetle PSX dynarec public beta release, here comes another bombshell, this time targeting that other big 5th generation console, the Nintendo 64.

ParaLLel N64 is back with a vengeance, and this time Parallel RSP coupled with Angrylion Plus RDP is the enabling technology for a big performance jump in low-level accurate N64 emulation.

Parallel RSP

We have released today a new version of Parallel N64 for Windows and Linux that adds back the Parallel RSP dynarec. This together with multithreaded Angrylion makes Parallel N64 the fastest LLE N64 emulator by far.

We have also added missing bits and pieces to Parallel RSP that allows for several games to work, such as World Driver Championship, Stunt Racer 64, and Gauntlet Legends. On top of that, we also optimized some parts in Angrylion RDP Plus which resulted in greatly enhanced core/thread utilization on a 16-core Ryzen CPU. It should also similarly scale well downwards.

Just to illustrate how dramatic of a difference all these performance-focused enhancements make: on an underpowered 2012 Core i5 laptop, the following games are capable of being played at fullspeed: Resident Evil 2, Mario Kart 64, 1080 Snowboarding, Doom 64, Quake 64, Mischief Makers, Bakuretsu Muteki Bangaioh, Bust-A Move 2 Arcade Edition, Kirby 64 – The Crystal Shards, Mortal Kombat Trilogy, Forsaken 64, Harvest Moon 64.

A 2012 Core i5 desktop CPU like the Core i5 3570k should be more than capable enough of playing the vast majority of N64 games at fullspeed with Angrylion+Parallel RSP, with only rare exceptions like Star Wars Episode 1 Racer being too much for it.

Dramatically lowering the performance ceiling like this has vast implications for the viability of low-level accurate N64 emulation, and opens the door for more people to enjoy bug-free N64 emulation, previously the preserve of only the most overpowered PCs.

Right now, only Linux and Windows are able to enjoy the benefits of Parallel RSP due to the LLVM dependency. This might solve itself later on, though.

How to get it

On Windows: Just downloaded the latest Parallel N64 core from RetroArch’s Online Updater menu. You can either download it from Core Updater, or you can select ‘Update Installed Cores’ if you already had a prior version of Parallel N64 installed.

On Linux: Download the latest Parallel N64 core from RetroArch’s Online Updater menu. You can either download it from Core Updater, or you can select ‘Update Installed Cores’ if you already had a prior version of Parallel N64 installed.

IMPORTANT: On Linux, the situation is a bit more complicated. If you find that the core won’t load on your Linux distribution, it is because LLVM on Linux normally links against libtinfo. For the version of Parallel N64, you will need to make sure you have libtinfo5 installed.

On Ubuntu Linux, you can do this by going into the terminal and typing in the following:

sudo apt-get install libtinfo5

Consult the documentation of your Linux distribution’s package manager for more details on how you can download this package. Once installed, the core should work. If you have a more recent version of libtinfo already installed, creating a symlink for libinfo5.so might be enough.

How to use it

Go into Quick Menu -> Options.

Make sure that ‘GFX Plugin’ is set to ‘angrylion’, and ‘RSP Plugin’ is set to ‘parallel’.

Restart the core.

Explanation of the options

Angrylion (VI Mode) – The N64’s video output interface ‘VI’ would postprocess the image in a very elaborate way. We will explain all of the modes down below:

VI Filter: – All VI filtering is being applied with no omissions.

VI Filter – AA+Blur – Only anti-aliasing + blur filtering by the VI is being applied.

VI Filter – AA+DeDither – Only anti-aliasing + dedithering filtering by the VI is being applied.

VI Filter – AA Only – Only anti-aliasing by the VI is being applied.

Unfiltered: – This is the fastest mode. There is no VI filtering being applied of any sort, the color buffer is being directly output.

Depth: – The VI’s depth buffer as a grayscale image

Coverage: – Coverage as a grayscale image

Angrylion (Thread sync level) – With most games it is fine to leave this at ‘Low’. Low will be the fastest, with High being significantly slower. Games which need Thread sync level set to High to prevent rendering glitches include but are not limited to Starcraft 64, Conker’s Bad Fur Day and Paper Mario.

Angrylion (Multi-threading) – You will want to always enable this. When it is disabled, Angrylion will be entirely single-threaded. It will be much slower in single-threaded mode.

Increased compatibility for Parallel RSP

The following games will now work with Parallel RSP:

* World Driver Championship
* Gauntlet Legends
* Stunt Racer 64
* Mario no Photopie (graphics fixed)

Performance tests

NOTE: All these tests were performed with the game Super Mario 64 (USA). Exact scene being tested can be seen in the screenshot down below.


* Cxd4 means the Interpreter RSP core. This was previously the only option you could use in combination with Angrylion – it needs an LLE RSP core, it cannot work with a HLE RSP core.
* All the VI Filter tests are done with Thread Sync Low.

Test hardware: Desktop PC – AMD Ryzen 9 3950x, Windows 10 (16 cores, 32 HW threads)

RSP Mode VI Filter VI Filter – AA+Blur VI Filter – AA+DeDither VI Filter – AA Only Unfiltered – Thread Sync Low Unfiltered – Thread Sync Mid Unfiltered – Thread Sync High
Cxd4 174 VI/s 176 VI/s 175 VI/s 178 VI/s 180 VI/s 175 VI/s 92 VI/s
Parallel RSP 235 VI/s 238 VI/s 238 VI/s 240 VI/s 245 VI/s 235 VI/s 106 VI/s

Test hardware: Desktop PC – Intel Core i7 7700k @ 4.2GHz, Windows 10 (4 cores, 8 HW threads)

RSP Mode VI Filter VI Filter – AA+Blur VI Filter – AA+DeDither VI Filter – AA Only Unfiltered – Thread Sync Low Unfiltered – Thread Sync Mid Unfiltered – Thread Sync High
Cxd4 95 VI/s 96 VI/s 96 VI/s 99 VI/s 104 VI/s 96 VI/s 86 VI/s
Parallel RSP 139 VI/s 145 VI/s 144 VI/s 151 VI/s 170 VI/s 146 VI/s 121 VI/s

Test hardware: Desktop PC – Intel Core i5 3570k @ 4GHz, Windows 7 x64 (4 cores, 4 HW threads)

RSP Mode VI Filter VI Filter – AA+Blur VI Filter – AA+DeDither VI Filter – AA Only Unfiltered – Thread Sync Low Unfiltered – Thread Sync Mid Unfiltered – Thread Sync High
Cxd4 89 VI/s 92 VI/s 91 VI/s 95 VI/s 103 VI/s 103 VI/s 97 VI/s
Parallel RSP 118 VI/s 124 VI/s 121 VI/s 128 VI/s 145 VI/s 145 VI/s 133 VI/s

Test hardware: Laptop PC – Intel Core i5 3210M @ 2.50GHz, Ubuntu Linux 19.04 (2 cores, 4 HW threads)

This is a 2012 Lenovo G580 laptop.

RSP Mode VI Filter VI Filter – AA+Blur VI Filter – AA+DeDither VI Filter – AA Only Unfiltered – Thread Sync Low Unfiltered – Thread Sync Mid Unfiltered – Thread Sync High
Cxd4 39 VI/s 39 VI/s 42 VI/s 41 VI/s 43 VI/s 39 VI/s 39 VI/s
Parallel RSP 52 VI/s 55 VI/s 54 VI/s 58 VI/s 67 VI/s 66 VI/s 61 VI/s

We recommend for a configuration as low-end as this that you just keep VI Overlay to ‘Unfiltered’.

The majority of games on a configuration this low-end experience dips below full-speed, however, there are a fair few games right now which already run at fullspeed. This is by no means a definitive or exhaustive list but here’s the ones for which I can confirm run at fullspeed with very rare dips if at all:

Resident Evil 2, Mario Kart 64, 1080 Snowboarding, Doom 64, Quake 64, Mischief Makers, Bakuretsu Muteki Bangaioh, Bust-A Move 2 Arcade Edition, Kirby 64 – The Crystal Shards, Mortal Kombat Trilogy, Forsaken 64, Harvest Moon 64

Currently known issues

* Do not use ‘Sync to Exact Content Framerate’ for Angrylion + Parallel RSP. You won’t get good results.
* Recompiling blocks the first time can lead to a very slight stutter. Thankfully this only happens the first time, and never happens afterwards for the runtime duration.
* On Linux there might be dependency issues related to libtinfo5. Read the section ‘How to Get It’ where we try to explain how to solve this problem at least for Ubuntu Linux. NOTE: This situation might resolve itself in the future in case we move away from LLVM for the RSP part.

Beetle PSX Dynarec – Public Beta Out Now! Fast and accurate wins the race!

We are delighted to announce that the Beetle PSX dynarec bounty is finally entering its public beta stage and is available to the public right now!

The dynarec project for Beetle PSX would not be where it is today without the combined efforts of simias, pcercuei and Zach Cook!

If you are on Android, Windows, Linux and/or macOS, all you have to do to get the latest core is to open RetroArch, go to Online Updater, and either select ‘Update Installed Cores’ (if you already installed the Beetle PSX core before), or install the Beetle PSX and/or Beetle PSX HW cores separately.

What’s this all about?

In 2017, we started a bounty for Beetle PSX, our own heavily modified fork of Mednafen PSX that has pretty much become its own thing at this point. Mednafen PSX is a highly accurate PlayStation1 emulator. However, unlike emulators like ePSXe, it only has a CPU interpreter, which means that the emulator is fairly slow and is therefore not really usable on anything but desktop PCs and high end mobile phones. The bounty was created on BountySource in hopes of attracting someone who could add a dynamic recompiler to Beetle PSX so that it could run much faster and therefore be a viable emulator on lower end hardware, such as mid range mobile phones, game consoles, older PCs, etc.

What pcercuei and Zach Cook have come up with is a Lightrec-based dynamic recompiler implementation. Zach Cook has done most of the integration of Lightrec in Beetle PSX, while pcercuei did Lightrec itself. Lightrec is pcercuei’s dynamic recompiler for MIPS that uses GNU Lightning as the backend. There should be working implementations for nearly all system architectures, from x86 (64bit/32bit) to MIPS and ARM (64bit/32bit). It bears mentioning that pcercuei also already has Lightrec hooked up to PCSX Reloaded, and used this as a testbed.

Platforms

The dynarec is available for the following platforms:

  • Linux
  • Windows
  • Android *
  • MacOS *

We are able to confirm that the performance gains for x86 and x86_64 are significant, as you can see down below (see Performance tests). We don’t know what the results are for ARM Linux, let us know how it performs!

* Performance right now is pretty bad for the Android and macOS platforms. We hope that after the public beta test, performance will improve a lot for these platforms. So while there is a framerate gain, it isn’t anywhere near what it should be.

How to use it – what the options do

First, update your Beetle PSX cores. We already explained before but we’ll repeat it here for the sake of it –

If you are on Android, Windows, Linux and/or macOS, all you have to do to get the latest core is to open RetroArch, go to Online Updater, and either select ‘Update Installed Cores’ (if you already installed the Beetle PSX core before), or install the Beetle PSX and/or Beetle PSX HW cores separately.

Once you’re on the latest core, you’ll notice that a lot more options show up now when you go to Quick Menu -> Options. We’ll go over these options and we’ll explain what they do.

NOTE: The dynarec is disabled by default – the default setting is still ‘Beetle Interpreter’. So if you’re wondering why things aren’t automatically faster, set it from Disabled to ‘Max Performance’ in Quick Menu -> Options.

CPU Dynarec – [Max Performance|Cycle Timing Check|Lightrec Interpreter|Disabled (Beetle Interpreter)]

Dynamically recompile CPU instructions to native instructions. Much faster than interpreter, but CPU timing is less accurate, and may have bugs.

Disabled (Beetle Interpreter) – This is the default setting, dynarec is disabled. This uses the default Beetle interpreter that has been used in Beetle PSX all up to this point. It’s faster than Lightrec Interpreter (for now) but much slower than any of the dynarec modes. We don’t recommend you use this unless ‘Max Performance’ or ‘Cycle Timing Check’ won’t work well for you on the game you’re trying to play.

Max Performance – Dynarec enabled with all features enabled. Should be the fastest option, but some games might require the ‘Cycle Timing Check’ mode instead.

Cycle Timing Check – Dynarec enabled, but with cycle timing check which makes it a fair bit slower. Some games might need this setting in order to work properly, so if you find that Max Performance has bugs with a game, try this mode instead.

Lightrec Interpreter – This is the slowest mode right now. It’s basically in the same ballpark as Beetle Interpreter but the Beetle one is actually faster. It’s basically Lightrec running in CPU interpreter mode instead of dynarec mode. We don’t recommend you use this.

Dynarec Code Invalidation – [Full/DMA Only [Slightly faster]]

Some games require a Full invalidation, some require DMA Only.

Dynarec DMA/GPU Event Cycles – 128 (Default) – can go up to 512

How many cycles can pass in the CPU before a GPU or DMA update is checked. A higher number will be faster, but also more likely to cause bugs or crashes. This option has much less impact on performance with Beetle Interpreter than any of the dynarec modes.

Performance tests

Test hardware: Desktop PC – Core i7 7700k, Windows 10

Game Beetle Interpreter Dynarec – Max Performance Dynarec – Max Performance (w/ DMA/GPU Event Cycles High) Dynarec – Cycle Timing Check Dynarec – Lightrec Interpreter
Tekken 3 151fps 223fps 252fps 209fps 117fps
Ridge Racer Type 4 132fps 323fps 325fps 289fps 132fps
Final Doom 216fps 401fps 456fps 359fps 142fps
Final Fantasy VIII 185fps 384fps 426fps 269fps 149fps
Rockman X3 211fps 414fps 450fps 319fps 152fps

Test hardware: Laptop PC – Core i5 3210M, Ubuntu Linux 19.04

Game Beetle Interpreter Dynarec – Max Performance Dynarec – Max Performance (w/ DMA/GPU Event Cycles High) Dynarec – Cycle Timing Check Dynarec – Lightrec Interpreter
Tekken 3 83fps 117fps 126fps 110fps 78fps
Ridge Racer Type 4 105fps 159fps 173fps 143fps 87fps
Final Doom 128fps 204fps 235fps 181fps 99fps
Final Fantasy VIII 128fps 232fps 277fps 152fps 97fps
Rockman X3 141fps 235fps 266fps 182fps 107fps

Currently known issues

* PGXP right now is disabled if you use any of the Dynarec modes. So don’t bother enabling PGXP modes for now when you use the Dynarec modes, you’ll just lose performance while gaining absolutely nothing. We hope that we are able to come up with a solution for this later.

* Make sure ‘Renderer’ is set to ‘Software’ if you want to use runahead. We recommend for runahead purposes you stick to 1x Internal GPU Resolution as even with the dynarec enabled, it can still be stressful on the CPU to go any higher than 1x with software rendering.

* If you are using the Android version and want to report bugs right now, please DO NOT use the Vulkan renderer right now. It currently has a couple of bugs on Android that the software renderer doesn’t have. So we advice you to use the software renderer for now on Android. On top of that, the software renderer right now is faster than Vulkan on Android, so you’re advised for now to use this during the public beta period.

Currently known compatibility issues

These are the current compatibility issues I have been able to notice on Windows.

Parasite Eve 2 (USA) (Disc 1)
Won’t continue from start with dynarec. It will freeze at the ‘Published by Square Electronic Arts’ screen.

There is a workaround for this – set CPU Overclock to 300%. The game will run too fast but it will at least be playable.

Brave Fencer Musashi (USA)
Hangs at ‘New Game’ – first world screen

There is a workaround for this – set CPU Overclock to 300%. The game will run too fast but it will at least be playable.

Gex – Enter The Gecko (USA)
Crashes after PSX copyright screen

Time Commando (USA)
Corrupted background graphics. Background graphics in this game are streaming FMV with polygon models on top.

Street Fighter Ex Plus Alpha (USA)
If you lose a fight and then select Continue, it will hang

Vanishing Point (USA)
It crashes once inside a race – with both full max or dma only

Battle Arena Toshinden 1 (USA)
It runs too fast.

WORKAROUND: By setting CPU to 90%, you can workaround this issue.

Alone In The Dark – One Eyed Jack’s Revenge (USA)
Crashes after the PSX copyright screen

Viewpoint (USA)
Crashes after the PSX copyright screen

Another big announcement at the end of the weekend

We have even bigger things for you in store by the end of this week. So stay tuned, because we have lots more to talk about very soon! It’s time to get the 5th gen out of the way and have it preserved for posterity!

RetroArch 1.8.4 released! (Plus – new Lakka updated to 1.8.4 imminent!)


RetroArch 1.8.4 has just been released.

Grab it here.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

New Lakka release soon with version 1.8.4


Shortly following the release of RetroArch 1.8.4, you should expect a new version of Lakka for Tier 1 systems with this brand new version of RetroArch! We will update this post when the release happens.

Important bugfixes/crashes

Several important bugfixes/crashes have been fixed. See the Changelog below for more details.

Disk Control Improvements

Written by jdgleaver
While the current disk control interface is somewhat adequate for changing PlayStation1 CDs halfway through a 60 hour RPG, it provides a very miserable experience when running content with high numbers of disks that require frequent swapping (e.g. Amiga floppy games). This version addresses the issue with the following QoL (Quality of Life) improvements:

  • The Disk Control menu is now context aware, and only shows appropriate entries. i.e.
    • Cycle Disk Tray now becomes Eject Disk or Insert Disk depending upon current drive state
    • Current Disk Index is only shown when the current disk has been ejected
    • The old Insert Disk entry has been changed to Load New Disk, and is only shown when a disk is currently inserted (this is because loading a new disk from the filesystem – i.e. bypassing the m3u playlist disk index interface – automatically ejects and inserts disks, and so cannot be done while the virtual drive is empty)
  • The Current Disk Index may now be set more easily via a drop-down list.
  • Selecting Eject Disk automatically moves the menu selection to the Current Disk Index entry
  • Selecting an index via the Current Disk Index drop-down list automatically moves the menu selection back to Insert Disk
  • The Disk Control entry sublabels have been changed for greater clarity
  • All of the horrendous notification spam has been removed. Notifications are now only shown in the event of an error, or when the menu itself does not provide sufficient visual feedback (note that using hotkeys to swap disks still produces the old style notifications, since this is typically only done while content is running – i.e. no menu). The duration of disk-related info notifications has also been reduced to a more sane level.
  • A new Resume content after changing disks option has been added under Settings > User Interface. When enabled (default setting), content is resumed automatically after selecting either Insert Disk or Load New Disk (when disabled, the menu remains open, obviously…)
  • Bug fix: The Disk Control menu now has the correct title (!)
  • Bug fix: Selecting a disk via the Load New Disk file browser no longer flushes the user back to the top level menu (it now correctly returns to the Disk Control menu)

The Disk Control menu now looks something like this:

‘Clean Playlist’ option

Written by jdgleaver
Problem: If you add a bunch of games to your playlists, and then remove some individual games from the file system, you’ll end up with outdated playlists. There will be games that are listed in the playlist, but the file is no longer there.

Solution: We have added new Clean Playlist option to the Playlist Management menu. When selected, this does the following:

  • Removes any entries corresponding to content that no longer exists on the filesystem
  • Validates core associations:
    • If a core is no longer installed, the core association is reset
    • If the core_name/core_path are incomplete or incorrectly formatted, the core association is reset
    • If the core association is valid, the core_name is updated to the latest core info file display name, if required
  • Removes any duplicate entries

Note that this process can be slow for very large playlists (the duplicate checking is quite intensive…)

Changelog

1.8.4

  • ANDROID/BUGFIX: Prevent crash when Android device is minimized and you go back to the app
  • CAMERA/BUGFIX: Fix crash when a core requires the camera driver and the platform only has a null driver. This would crash mgba on Wii for example
  • DISK CONTROL: Cycle Disk Tray now becomes Eject Disk or Insert Disk depending upon current drive state
  • DISK CONTROL: Current Disk Index is only shown when the current disk has been ejected
  • DISK CONTROL: The old Insert Disk entry has been changed to Load New Disk, and is only shown when a disk is currently inserted (this is because loading a new disk from the filesystem – i.e. bypassing the m3u playlist disk index interface – automatically ejects and inserts disks, and so cannot be done while the virtual drive is empty)
  • DISK CONTROL: The Current Disk Index may now be set more easily via a drop-down list
  • DISK CONTROL: Selecting Eject Disk automatically moves the menu selection to the Current Disk Index entry
  • DISK CONTROL: Selecting an index via the Current Disk Index drop-down list automatically moves the menu selection back to Insert Disk
  • DISK CONTROL: The Disk Control entry sublabels have been changed for greater clarity
  • DISK CONTROL: All of the horrendous notification spam has been removed. Notifications are now only shown in the event of an error, or when the menu itself does not provide sufficient visual feedback (note that using hotkeys to swap disks still produces the old style notifications, since this is typically only done while content is running – i.e. no menu). The duration of disk-related info notifications has also been reduced to a more sane level
  • DISK CONTROL: A new Resume content after changing disks option has been added under Settings > User Interface. When enabled (default setting), content is resumed automatically after selecting either Insert Disk or Load New Disk (when disabled, the menu remains open, obviously…)
  • DISK CONTROL/BUGFIX: The Disk Control menu now has the correct title
  • DISK CONTROL/BUGFIX: Selecting a disk via the Load New Disk file browser no longer flushes the user back to the top level menu (it now correctly returns to the Disk Control menu)
  • LIBNX/SWITCH: Updated libnx integration to v3.0.0. This also cherry-picks libnx commit 583d6bb92dcbb33b6bb4a0fa1a9df6e3725d6ef6, which should fix the requirement having to turn rumble off and on in the system settings once per reboot
  • PLAYLISTS: Add ‘Clean Playlist’ option

bsnes HD beta core – Pushing the limits of the SNES! Widescreen and Ultrawide support!

DerKoun shares with us a special new core called bsnes HD beta. This is a cutting edge version of bsnes that is jam packed with enhancement features! Note that many of these enhancement features, such as the widescreen features, might require specific tweaking and finetuning in order for specific games to display right, and some games might just not display right at all with these enabled, so experiment at your own risk.

With this emulator core, emulator developers are moving far beyond the limitations of original hardware and FPGA clones, putting the extra horsepower of modern PCs and cellphones to judicious use.

This core is already available on our buildbot for Windows, Linux and Android, and should be coming to Switch (libnx) soon as well! Note that all these enhancement features operate on the CPU, so the faster your CPU is, the better the results will be.

Changelog (beta 10)

  • Based on latest bsnes (114, 2020-01-09)
  • Experimental libretro core
  • Changed Show Overscan setting, replacing Soft Crop. Changed widescreen values accordingly
  • Corrected widescreen object wrap-around point to 352
  • Changed storage paths from “bsnes” to “bsnes-hd beta”
  • Automated Linux build is now CPU neutral
  • Various minor bsnes-hd specific modifications to GUI
  • Fixed setting Ignore Window Fallback X-Coordinate via settings dialog

Core Options

Let’s explain some of the core options this core provides:

HD Mode 7 Scale

Perform Mode 7 transformations (incl. HDMA) at up to x times the horizontal and vertical resolution.

TIP: HD Mode 7 can be set to 1x scaling aka original resolution, with any combination of perspective correction, widescreen and supersampling.

HD Mode 7 Perspective Correction

Optionally, for games with pseudo 3D perspectives, some limitations of the integer math used by the SNES can be avoided by more aggressive averaging.

This setting also allows you to set the width for the perspective correction.

Auto – Auto detection for perspective correction. Quite primitive implementation, but worked out surprisingly well. Covers “Super Castlevania IV” (tube), “Terranigma” (underworld) and “Final Fantasy III” (credits), but not the “Mohawk & Headphone Jack” title screen (levels are fine).

[On / Auto] Narrow – Fixes black flicker in “Tales of Phantasia” Mode 7

[On / Auto] Wide – Use “wide” when there is no issue.

HD Mode 7 Supersampling

Super sampling can be combined with higher scale factors as a sort of anti-aliasing. Please remember that the CPU load is the product of the two factors.

HD Widescreen

Mode 7 – Disables widescreen for non-Mode 7 scenes (default now), fixing menus and widescreen-incompatible 2D levels with no setting switching during gameplay. The widescreen areas in that case can either be black or adopt the background color.
All – Enables widescreen for both Mode 7 and non-Mode 7 scenes.
None – Disables widescreen for all modes.

HD Mode 7 HD -> SD Mosaic

1x scale : Mosaic mode for HD Mode 7, using 1x scale, providing a good compromise between SD Mode 7 and no Mosaic at all, and also allowing widescreen, e.g. for the “Terranigma” underworld.

Ignore: – This setting disables mosaic effects for mode 7 scan lines. See top part of screen in the Terranigma safe state. When not checked (i.e. mosaic enabled) lines that have mosaic enabled do not use the HD mode (as the intentional pixelation that is mosaic would negate it anyway), but others still do.

WideScreen Background 1 to 4

To avoid HUDs repeating and other unwanted effects, this setting allows you to disable widescreen for the separate background layers and even just the top or bottom of a layer.

The default for all 4 is “auto horz and vert”, which is a simple auto detection based on the sizes and positions of the backgrounds. This works e.g. for the HUD in “F-Zero” or “Super Mario Kart”. You can also force each one “on” or “off”.

Some games require more complex settings, e.g. “HyperZone”: BG2: “>80”
You can also “disable” any of the 4 background layers entirely.

WideScreen Sprites

Unsafe – This allow sprites to enter widescreen areas further if the game keeps updating them. This will however cause significant artifacts in many games. If ROM-hackers want to discuss optimizing games for this, feel free to contact DerKoun.

Disable entirely – option to sprites, e.g. for screenshots for wallpapers (also see “Ignore Window”)

WideScreen Aspect Ratio

Ability to set the widescreen aspect ratio to a variety of different ratios (16:10, 2:1, 21:9, 16:9, 4:3)

WideScreen Ignore Window

Setting to ignore outside window, allowing for widescreen in Terranigma and Final Fantasy III/VI. Please test any other games that had no widescreen for no obvious reason in the previous beta. This fixes Mode 7 widescreen specifically in the mentioned games and results may vary in other ones for Mode 7, other backgrounds and objects.

Some settings allow for more widescreen e.g. in “Final Fantasy III” (no good results) and ability to disable some shadows or similar effects (for use with layer disable feature below, e.g. for “F-Zero”).

WideScreen Marker

Line – optional markers for the widescreen areas, in the form of lines at configurable translucency. Also sprites can now be clipped at the edges of the widescreen areas.
Darkening – optional markers for the widescreen areas, in the form of darkening at configurable translucency. Also sprites can now be clipped at the edges of the widescreen areas.

HD Background Color Radius

Smooth (true color, high resolution) gradients for color math from fixed color, e.g. for pseudo perspectives. This combines the new true color support and high resolution smoothing of HDMA effects to turn approximations of gradients into real ones. This is noticeable in many games with Mode 7 perspectives, often in the top/distant part, which often fades to black or another color. Enabled by default, on medium setting “4”. (see image: left side before vs. right one with this improvement)

HD Windowing (Experimental)

Smooth (high resolution) Window effects, like shadows or spells. This is considered a preview, as the top and bottom edges of such effects still look SD and therefore stand out. It is disabled (“0”) by default. You can set “1” or higher values to give it a try.

Widescreen patches

No matter the amount of options available, some games will likely require manual patches for the best possible widescreen experience. Fortunately, already talented modders are hard at work at tackling some of the games out there that could really benefit from widescreen resolutions.

If you want to discuss widescreen ROM-hacking please join #widescreen-hacks at the bsnes-hd Discord.

What’s Next

DerKoun says:

Primarily I’m looking into optimizations.

There also some fixes and improvements I want to include, like better HD Window effects.

I’ll also work with the libretro team to improve the libretro core.

SIDENOTE: RetroArch 1.8.4 will be coming out soon. Unlike 1.8.3, it will resemble somewhat more of a maintenance release.