Current state of emulation on the RS-97/Bittboy/LDK

Hello guys, thought i would talk to you what i’m doing.

I’m just done working on doing remapping support for SMS Plus GX on the Bittboy. I decided for now not to do it for the RS-97 given that the code in question will need some changes.

Of course, there could be more improvements to it but it’s mostly related to the emulation core itself. I must be careful not to bloat the emulator though, hence why i am wondering if adding support for the Sord M5 is worth it…

Wonderswan

I’m close to getting an initial version of Oswan working too.

Actually it’s not Oswan but more like a fork of libretro’s Mednafen core, itself based upon the older Cygne code.

The libretro fork still had some glue to it as to make it work without too much modifications to it but was mostly identical to upstream, with some exceptions.

They did a pretty good job with trimming it down but it was still C++ based and still had some bloat to it, so the first step was to remove the Mednafen related code that was not useful (most notably cheats) and then switch it to C.

I had decided to remove support for cheats given that :

  • There are no cheats out there available for Wonderswan games.
  • There are no games like Pokemon on it available so people don’t need cheats anyway.
  • The cheat code was very C++ intensive and i saw no point of switching that to C.

I had worked on improving Oswan for the GCW0 before but unfortunately, that version had too many issues : the sound was widely inaccurate, the SDL sound code was utter crap and it just was a disaster.

Using Mednafen’s codebase at least guarantees me that i can easily merge back some fixes upstream. Ryphecha still works on Mednafen so this reassures me a bit on the front.

I did notice an issue with the v30mz emulation core though : it doesn’t support prefetch. There’s one game out there that relies on it and it’s Detective Conan. What Mednafen currently does is patching the game as to avoid the use on it. This may works fine for official games but if there’s a homebrew game out there that takes advantage of it then we are out of luck…

Oh well, prefetch emulation would considerably slow it down if implemented so i can see why this was not attempted. Maybe MAME’s v30mz core addresses this though but from what i’ve seen, not so far. From what i gather apparently it is poorly documented hence why nothing addressed it. (If higan’s wswan core addresses this then i’ll be curious to see it)

ReGBA

Now for the ugly part…

You see, ReGBA as it is does not work on the Ingenic JZ4760B, but it does on the Ingenic JZ4760.

The reason why is still unknown to me but the culprit is the MIPS recompiler. At the time, i was forced to rely on GPSP again as it would work on the JZ4760B.

TonyJih had fixed this but he never released the source code for it and never told me how to fix it.

I tried getting the source code from him but he wouldn’t budge and he’s rarely online.

In the meantime, people were pestering me about the lack of TV-Out on RetroFW.

When i had asked Tony about TV Out last time, he had told me he thought it was useless and it would increase memory usage so i merely stated this fact to other people.

I also told them that he did not give me the source to ReGBA so i can’t fix the issues that are inside.

Apparently, that rubbed him the wrong way.

Over on Discord, he gave me the middle finger and told me he will no longer work with me, saying i lack respect for him. He also stated that he deleted ReGBA’s source code from his computer.

Before you go on theories, i would like to state that i only reminded him personally once per 2 months about it and he would not go on to state as to why he refused to share the source code with me.

I reminded him about the GPLv2 and told him that i expected him to respect the code of honor. Maybe he took that as a threat but he’s not very communicative.

I wanted to address some of the issues with ReGBA and potentially merge fixes from TempGBA but i thought it would be pointless to do so if the emulator would not work on newer revisions, hence why i asked him for his fixed source code.

And there’s no way i can contribute code to it without, you know, the code.

If you wonder about ReGBA’s issues then i invite you to check out this list : ReGBA’s compatibility list

To be fair, some of these games don’t work on other emulators either. But there are bugs like Lufia’s intro that i wanted to address. (which is caused by the fact only one DMA can run at a time)

I was even more overjoyed when i learned that TempGBA PSP actually fixed some of these issues such as Hamtaro & KH.

TempGBA shares a lot of codebase with ReGBA so i thought we could merge fixes there. Unfortunately, whoever worked on TempGBA did not use versioning control nor did he document the fixes in question but still.

Tony removing the source code will mean that GBA emulation on the RS-97/LDK is far as it is going to go.

You may wonder why i did not look at VBA-M or mGBA instead.

Unfortunately, a MIPS32 processor clocked at 600 Mhz is not enough for these and that was after doing some cutting to both emulators.

I could actually get VBA-M to run somewhat okay but that still required a frameskip of 3 on dumb games like Sonic advance.

mGBA is running even slower unfortunately. That being said, they may have adressed some of the performance issues but it’s going to take a while if ever.

Hopefully this will change as more progress is done on either VBA-M or mGBA.

I know some people talked flak about VBA-M but so far with speedhacks, it was running faster for me than mGBA.

I’m also pretty confident that i can get either emulator (VBA-M or mGBA) up and running smoothly on the Retrostone 1 with some PGO among others.

For now though, i’m focused on getting my new Wonderswan fork up and running on the RS-97/Bittboy.

After that, you can be sure that i’ll try to focus on GBA emulation as a lot of people had issues with emulation there and some games are utterly broken.

But for now though, i’ll have to ask you to please be patient.

I know that you want to play Kingdom Hearts on your console without using workarounds but everyone is in the same shit, you just have to ask Raspberry Pi Zero owners about it…

Conclusion


He deserves credits where he’s due : his implementation of IPU in the kernel based on the GCW0 kernel.

But given that he had reused ReGBA’s source code, i had expected from him to at least share what he did to it.

Tony got what he wanted : i decided to leave the server.

He won’t have me to bother about it anymore.

If they don’t want the fix the issues in the emulators, it’s their problem.

As for anyone who insists on using TV out on the RS-97 :

Don’t bother me with that anymore !

Stick with the latest Useless firmware release and suck it up.

I’m sorry to say this but ultimately no one cares.

As for everyone else who cares about the state of emulation on those devices though, well, you are left out in the dust.

The whole saga left me a sour taste in my mouth…

..and that day, not a single fuck was given.

More work on SMS Plus GX

Hello guys, Another quick update on SMS Plus GX !

Unfortunately, i realised that i broke save states along the way some time ago, and it took me some time to fix it. It took me a while to fix it but i managed to do it.

I also found a bug in Fantastic Dizzy that was not in Ekeeke’s fork i believe but i introduced it when i did not properly remove the overscan code.

This resulted in horrible glitches in Dizzy when running in PAL mode… This is now fixed of course but most people would not even notice it because most games are forced to run in NTSC mode.

But i also decided to take a look at trying to improve the graphics on the RS-97. Of course, i could wait for TonyJiH to add support for Bilinear filtering via the IPU but i wanted to something better or at least more suitable for our testcase.

Upscalers

At first, i looked at Hq2x.

While it does improve the visuals, the memory consumption is greatly increased and the only implementations that does improve on that support only ARGB888.

There are other alternatives like xBRZ but again, same issue and it’s just as CPU intensive, the RS-97 will certainly struggle with it.

I was a bit saddened a bit at first and i was about to give up on that idea…

Scale2x

When the Macintosh II was released, it only supported high resolutions. This forced game companies at the time to either to revamp their games or simply double the pixels. But Eric Johnston while working at LucasArt in 1992, came up with EPX to address the rough edges when doubling the pixels.

While not jawdropping, the results are decent and there’s no degradation or visual loss to the picture.

Years later, unaware of EPX, Andrea Mazzoleni implemented Scale2x for the AdvanceMame project. It produces a very similar graphical effect, though it is implemented differently.

After i found a simple implementation of it in pygame and giving it a try, i knew i found the right candidate.

Click on the pictures to see the details.

Native (256x192) vs Scale2x (512x384)

Scale2x (512x384 -> 320x240) vs Bilinear (320x240)

Unfortunately, it does not look as good when downscaled to 320x240, though i still think that it looks better than bilinear filtering.

But at least it doesn’t eat 60MB of RAM unlike Hq2x and the speed of it is still decent.

Improvements

We are wasting a lot of performance when we try to downscale it. By design, Scale2x cannot target other resolutions, it simply doubles the output. Given that the RS-97’s screen resolution is 320x240, this forces us to downscale it.

It used to be a heck of a lot slower when we were using SDL_SoftStretch so i used MAME4ALL’s simple scaler code. Too bad that it does not use 32-bits pointers, we could have cut bandwith by half.

On the RS-97, this could be improved but only if TonyJiH implements downscaling via the IPU. And he does not plan to work on that until next month… Assuming it is implemented, we wouldn’t need to downscale back to 320x240, saving a lot of performance. This would also mean that the bilinear code can go.

Oh, and i also managed to make SMS Plus GX work on the Ritmix RZX-50 and it works ok, if somewhat sluggish on games like Sonic 1 FM. That’s to be expected though, given the SoC.

← Newer Page 1 of 12