Ymir, Saturn emulator

I found some time to test this core and the input lag is the same as in any other Saturn core i ever tried. That’s at least 3 frames of lag in all games, which is higher than any other system/emulator.

@Broski86

Could you provide your settings for Beetle Saturn please? Are you using Vulkan/GL/DX? What else? I tried Steamgear Mash myself and it gives me 3 frames of lag. You said it only gives you 1 frame of lag, i have never seen this on any Saturn core.

If you’re using the frame advance method for testing, the RA settings, core options, monitor, GLcore or Vulkan, video drivers etc you’re using will have no impact on the results.Testing this way only measure the internal game’s lag. So it’s not surprising you got the same exact results with the ymir core.



Testing with frame advance, it’s important to understand what results you are actually getting To quote my example with Steamgear earlier in the thread.

So during frame advance:

1st press is current frame -the frame which register the key/button press. That frame is already been displayed so it’s not possible to ever see any change as a result of it.

2nd press would be next frame -not 1 frame of lag. Very, very few games will have next frame’s reaction/output (even more rare with PS1/Saturn era games compared to NES era games) You can test this in the stage selection of Mega Man (1) on NES. I believe when you’re pressing left/right during the stage selection it is next frame. So you should see the change after the 2nd press. During the actual gameplay (like if you’re jumping) the game has a 1 frame of internal lag I think. So it’s also important to keep in mind that the internal lag can vary even within the same game. And that many Saturn games did had a lot of lag on hardware, including when they were PSX/Saturn multi-platform releases (one possible reason for that or part of a reason anyway is that often they were ports of games first developed on PSX and those ports could often be un-optimized)

3rd press -if you see a change after the 3rd press that means the game -or at least this specific part of the game, has 1 frame of delay.

For the bomb animation change, 3 frames of lag would mean you pressed a key during frame advance 5 times.



As for setting: My setup is pretty common really. I have an old 10+ years ASUS monitor that’s supposed to be relatively low lag (around 8-10ms).

Running in exclusive fullscreen. Usually using glcore with beetle saturn (with hard sync on of course). In a handful of games that are more demanding on my PC and can’t reach 60fps with glcore I use Vulkan then. I think using maxswapchain = 2 should give the same lag as glcore with hard sync but I have never tested it properly (with a high speed recording -frame advance wouldn’t tell you anything in this case).

As for core options, the only relevant option would be to turn on midframe synchronization. Honestly I don’t how much impact it has. Best case scenario it saves maybe 6-7ms so it will be a frame faster around 50% of the time (again, this will not show up with frame advance at all).


tl;dr During frame advance, you should see the little bomb icon animation after the 3rd press from this steamgear bomb icon1

to this: steamgear bomb icon2.png

Ok same settings on a fast, VRR monitor.

The game reacts on the 4th press (jump), so 3 frames of lag. Is that correct? Because you wrote about only 1 frame of lag and that seemed way too fast to me.

BarbuDreadMon has written in an earlier thread that minimum lag on hardware is supposed to be 2 frames for 2D and 3 frames for 3D according to the Kronos discord.

I don’t feel my Saturn as laggy as any emulator though. My N64 and PS1 feel the same but the Saturn feels more responsive than emulation. I don’t know why this is the case and i always assumed Saturn emulators can’t get this right.

Okay I just re-tested

Shooting and turning around started their animation on the 4th press so 2 frames of lag. Jumping and bomb switch animation on the 5th press so 3 frames of lag. So indeed, not 1.

However:

Here’s a much simpler test still with SteamGear Mash since we’re just interested in measuring internal lag here. In the menu, where you can select one of 4 saved games or start a new game:

Pause emulation, press and hold up or down on your gamepad. While holding up, press frame advance on the keyboard 3 times. You should see the highlighted selection change after the 3rd frame advance press which means 1 frame of delay.



edit: So, let’s try a real world scenario -forget frame advance:

From the moment you power on the system. We begin counting in milliseconds. 1 frame roughly equals 16ms on a 60fps display.

Say you press ‘up’ at 40ms or, in the middle of the 3rd frame (1st frame 0-16ms, 2nd 16-32ms 3rd: 32-48)…

Afaik it’s not possible to have the visual output of your input show up on the same frame (in this case in less than 8ms). Console or arcade doesn’t matter: you can’t have the output within that 16ms slice in which you pressed the input.

The 4th/next frame begins: meaning we are at time 48ms. So far from the moment of your input ~8ms have elapsed. If you saw a result then, it would be considered ‘next frame’ response (Like in the Mega Man 1 stage selection).

The 5th/next frame after that we are at time 64ms. 24ms have elapsed since the user key press So one whole frame plus half a frame since you pressed in the middle of the 3rd frame. So, that counts as 1 frame of lag. Note that because the user can press at the very beginning or toward the end of a frame/16ms slice, 1 frame of lag could be anywhere from around 17ms to worse case scenario around 31ms in real time. So input lag can be inconsistent even on hardware depending on when you press the key within a frame,.

I count every press as 1 potential frame of lag because there are cores and games that react on the very first press. Bubble Bobble for instance, on MAME and FBNeo, reacts on the first frame advance press, thus if a game doesn’t react on the first press it should count as 1 frame of lag.

So if something reacts on the 3rd press/frame that should equal to 2 frames of lag.

BTW, i pause using the “P” button and then “K” for the frames. The paused frame shouldn’t count.