Final Burn Neo Progress Report – September 2020

Final Burn Neo (FBN/FBNeo) is the follow-up of Final Burn Alpha (FBA/FBAlpha), an alternative to MAME for arcade emulation. It’s more focused on playability and less on accuracy/preservation. The team is composed of dink, iq_132, JacKc, kev and me. It supports most libretro features (netplay, runahead, retroachievements, …) and is part of the libretro steam launch lineup.

New supported games and other improvements

Konami

We added support for “WEC Le mans” and “Hot Chase”, 2 racing games from 1986 & 1988, you could see those games as Konami’s response to Sega’s “Out Run” and “Hang On”.
We also added support for the 6-player version of “X-Men”, which is playable from start to end without any glitch for the first time in an arcade emulator (our fixes were also ported to current MAME and MAME2003+).

We also improved emulation for the K054539 sound chip which is used in lots of konami games (including X-Men), this board had an echo effect that wasn’t emulated in any arcade emulator previously.

PGM

“Photo Y2K 2”, a game dumped nearly 20 years ago, finally got his protection passed thanks to the efforts of iq_132 and dink, i wouldn’t call it a must-play but it’s always nice to make breakthrough after so long. Various pgm hacks and bootlegs were also added along the way.

Sega

“Opa Opa”, a Sega System E game from 1987, is now playable, the game is some kind of mix between pacman and a shoot’em’up, with upgrades and playable in co-op.
Our Sega System 18 driver also had a nice overhaul after being on the todo list for a long time, games like “Michael Jackson’s Moonwalker” now plays without any gfx issues.
2 megadrive arcade bootlegs were also added : “Super Bubble Bobble” and “Top Shooter”.

Midway

For years there was a nasty issue with our Midway W/T Unit emulation (Mortal Kombat 1/2/3 and Rampage World Tour), more precisely only half of the frames were properly displayed, it has now been fixed thanks to the efforts of Marcos Medeiros (Romhack/zxmarcos) !

Taito

We added support for “Galactic Storm”, a third person shoot’em’up from 1992, this one was quite the unusual addition since it involves some polygon rendering, it’s quite rare for FBNeo to do 3D-ish things.

DataEast

“Gondomania”, a shoot’em’up from 1987, is now playable. “Super Shanghai Dragon’s Eye”, a puzzle/mahjong game from 1992, was also added.

Capcom

There was another batch of gfx fixes for CPS3 (Street Fighter 3, JoJo, Warzard), our emulation should now be on par with MAME’s apart from DMA status emulation, and there is a good reason for that : it would critically increase the hardware requirements for something that doesn’t seem to affect any phase of gameplay, that’s just not worth it on an emulator which is more focused on playability than accuracy/preservation. SF3-1 and SF3-2 from that driver also have a new dipswitch to enable wide screen mode (previously, only SF3-2 had that wide screen mode available, and only through its service menu), don’t ask about SF3-3.
CPS1’s (olders Street Fighter 2 and dozens of other games) MSM6295 sound chip also got nice improvements that make the bgm sound clearer, i’m mentioning it for CPS1 but it’s also used in quite a lot of other arcade systems. About that, i’ve seen some messed up comparisons on internet so i’ll say it : it’ll never reach the quality of cd/vinyl soundtracks of those CPS1 games, because it operates at a 7.5khz samplerate and the bgms were recorded for that samplerate.

SNK

Support for Neo-Geo Pocket and Pocket Color was added.

Nintendo

More NES mappers, more NES games, and reduced input lag ! If your favorite NES game isn’t emulated yet, feel free to ask here !

Miscellaneous

Pre 90s

Added support for missing games running on the same hardware as “Q-Bert”, it includes “Insector”, “Argus”, “Krull”, “Curve Ball”, “Tylz”, “Knightmare”, “Reactor”, “Screw Loose”, “Wiz Warz”, “Video Vince and the Game Factory”, and “The Three Stooges In Brides Is Brides”.
We finally completed our support for Nichibutsu games : “Tube Panic” and “Mag Max”, 2 shoot’em’up from 1984 and 1985, are now supported.

Post 90s

Support for “Hyper Duel”, a really nice Technosoft shoot’em’up from 1993, was added.

A “Cisco Heat” driver was added, it includes the eponym racing game from Jaleco, and other games like “Big Run”, “Grand Prix Star”, “Wild Pilot”, and “Scud Hammer”.
Support for the Hyperstone cpu family, high-spec cpus from the late 90s, was added, and along with it support for most arcade systems using them, it includes games like “Vamf x1/2”, “X2222”, “Crazy War”, and dozens of other games. I’ll be honest though, technically those games don’t live up to the specs of their cpus.

Better savestates support

Over the last months, savestate issues that could cause glitches, mostly with runahead (single instance) and netplay, were fixed, it includes neogeo, cps1, pgm, irem m92, sega system 1, and last but not least, pretty much any game using yamaha sound boards, and i can tell you those boards were quite popular in the 90s.

Better support for other archs/platforms (arm, PS3 and Wii U)

Final Burn Neo is written for x86 cpus, and while we try to keep the code compatible with other archs, we don’t always have the time nor means to properly test them. Lots of work was done on that front lately, it includes a few fixes for arm cpus (i.e smartphones, tablets and small computers like the raspberry pi), and tons of fixes for big-endian ppc cpus (i.e PS3 and Wii U). I’m not saying the ~15000 romsets we support are all ok, with an emulator which is basically a conglomerate of hundreds of smaller emulators it probably wouldn’t be even after working for years on it, but hundreds of games were fixed, including popular systems like pgm or neogeo CD. A special thanks to CrystalCT, author of FBNeoRLPlus (an alternative libretro frontend specialized in FBNeo for PS3), for his dedication on this.

And much more ! This article is far from being exhaustive.
If you want to help FBNeo, keep sending us bug reports when you see something wrong.
Our forum : https://neo-source.com/
Our github : https://github.com/finalburnneo/FBNeo
Our discord : https://discord.gg/8EGVd9v

Kronos 2.1.2 progress report (Sega Saturn emulator)

It has been some time since the last report, let’s try to go a bit more in-depth this time.

The OpenGL CS video renderer

The Saturn is a beast. It features 8 processors, among them are 2 custom graphics processors called VDP1 and VDP2. The VDP2 handled backgrounds, while the VDP1 handled sprites, textures and polygons.

The VDP1 was rendering “quads” line per line, the general idea was to interpolate endpoints along the horizontal edges, then to draw textured lines between those endpoints. It had to draw the lines with an extra pixel where the slope changed, so all of the pixels had a neighbor to the left, right, top, or bottom. They did this to prevent gaps between the lines.

A modern graphics APIs like OpenGL doesn’t know how to do that, because its rendering pipeline is based on triangle geometry, so basically it can’t reproduce VDP1 behavior. There are tricks like tesselation, but ultimately they are just workarounds for specific issues and not all-in-one solutions for this. Here is some good news though : with OpenGL 4.3, a new feature called compute shaders was introduced, you might have heard about it through Flycast’s order independent transparency, or N64’s parallel, this new component gives lots of flexibility to OpenGL, and allows the implementation of routines to render quads line per line. It is what this renderer is about : reproducing VDP1 behavior accurately.

Let’s do some comparison, from first to last, those images were shot from console, Mednafen/beetle, Kronos (OpenGL CS renderer), Kronos (the old OpenGL renderer, based on YabaSanshiro’s). There are 2 things noticeable related to this VDP1 behavior in those :

  • border of the road : on console, Mednafen and Kronos’s new renderer, if you zoom in, you’ll notice it’s not a smooth line, there are dots, this is the accurate behavior; the last screen, while the smooth line might look better, is actually inaccurate.
  • holes everywhere : if you zoom in on the last screenshot, you’ll notice some holes here and there, on the top of the hills, on the road in the back, those holes don’t exist on the other screenshots.

It’s possible to workaround those holes with the OpenGL renderer, but at the end of the day you end up creating other issues in the process. Until recently we used such workaround but, in the case of Sega Rally, it was magnifying the dots on the border of the road.

The only known downside of this new renderer is that it will require a fairly good GPU!

ST-V support was improved

While still a bit preliminary, some major rework was done recently on ST-V support :

  • You can now set your favorite bios region (NB : it will be ignored if the game doesn’t support that region though)
  • The EEPROM is now properly saved and loaded
  • ROM loading mechanism was fixed, there should be no more messages of the ST-V bios telling you there is something wrong with the game you are trying to launch
  • Lots of input issues, going from the lack of kick harness (used for 5th & 6th buttons on some games) to the inputs not responding at all, were fixed

Improvements on the Libretro port

There were some long-term issues with the Libretro implementation, but a lot of improvements were done about them :

  • Resolution switching, which is something that happens every few seconds on saturn, was somehow wrong, one of the worst side effect was artifacts especially visible in “mesh” (if you don’t use the “improved mesh” core option), it was fixed
  • Toggling between fullscreen and windowed was causing issues from glitches to crashes, it has been mostly fixed
  • While the saturn framerate should be 50 or 60 fps depending on the region, sometimes it’s not rendering anything because the Saturn is actually shutting down its video output, kronos is trying to have an accurate behavior for this too, which is a bit of a headache for the libretro ecosystem which is expecting a more linear framerate. A better way of handling this was implemented.

Also, here is a summary of this core’s options :

  • Force HLE BIOS : it will ignore your bios file and use the old HLE bios from yabause instead, this function is unmaintained and is mainly there for debugging purpose (there is at least one known case where it’s unlocking the game though : Astal, for some reason the real bios is shutting down the video output), don’t report issues if you enabled this option.
  • Video format : will force format to PAL or NTSC, default is auto
  • Frameskip : will skip rendering at a fixed rate, it can improve playability dramatically on lower end devices
  • SH-2 cpu core : default is “kronos”, our cross-platform cached interpreter, the other one is the unmaintained yabause SH-2 interpreter, we got the same policy than the HLE bios about it.
  • OpenGL version : this option was introduced as a workaround for setups giving false positive when asking if a specific OpenGL version was supported (it happened…), set this to the highest version your gpu support.
  • Video renderer : to enable the new renderer, default is the old one for compatibility reasons
  • Share saves with beetle : will share save paths with beetle-saturn, allowing you to use the same savefiles.
  • Addon cartridge : to change cartridge, default is auto, it is recommended to let the default except if you intend to play heart of darkness, a prototype requiring the 16M extended RAM.
  • 6Player Adaptor on Port 1 : self explanatory
  • 6Player Adaptor on Port 2 : same, one word of warning though, enabling the second multitap is known for causing a weird autofire behavior.
  • Internal Resolution : self explanatory
  • Polygon Mode : works with the default OpenGL renderer, used to fix wobbling textures issues, OpenGL CS doesn’t need this, default is cpu tesselation but gpu tesselation is recommended if your gpu supports it (OpenGL 4.2), perspective correction is more cpu friendly but heavily glitched.
  • Improved mesh : will replace fake transparency (mesh) by real transparency, default is disabled
  • RBG Compute shaders : will use compute shaders to rotate background, it is recommended if your gpu supports it, default is disabled
  • Wireframe mode : self-explanatory ? It works only with OpenGL CS, mostly for debugging but can be a fun feature, give it a try for curiosity !
  • ST-V Service/Test Buttons : enable buttons to access service menu in ST-V game, default is disabled to avoid misspress
  • ST-V Favorite Region : select your region for ST-V, default is EU for censorship and language reasons.

On a sidenote, lots of other things were fixed/improved since my last report, but nothing seemed major so we decided to skip them. If you want to know more about this emulator, you can check the youtube channel, or join us on discord.