Input Lag Compensation to compensate for game's internal lag?



870fps without runahead in smw snes9x mainline, gl driver, cpu @4Ghz.
You could be limited by a shader.


What does the “use second instance” option mean?


Some cores don’t have clean audio after loading state, so Use Second Instance literally makes a second copy of the core so the secondary core can do all the load states. Then the primary core can run all the audio without ever loading state.


So glad to see this in RetroArch nightlies! I’m shocked and thrilled it made its way to mainline so quickly :slight_smile:

I did a slow-mo test comparison of Super Mario Bros with a real NES vs. Run-Ahead on a CRT. With Run-Ahead set to 1 frame, Mario now jumps on the very next frame! :smiley:

See the comparison video here:

We’re living in the future! Thank you @Dwedit!


What are you using to get it on a TV? Just a composite output connection from the computer?


I take VGA output and connect it directly to the RGB (and Sync) inputs on the mixer chip of my CRT TV.

Coupled with custom modelines in the OS, a 15kHz signal can be generated to approximate an arcade display.

You can see the details for my specific mod here:


thanks a lot for this new option, you guys are great, I finally have the same feelings as on my old console snes, if it could work with the hack speed snes9x it would be even better . I’m thrilled, thanks


Interesting comment from the Reddit thread:

”I just tried this and its really neat, however in megaman and mario, when I hold the run button it becomes more like a turbo button. You will see mario shoot fireballs randomly, or megaman shoot his blaster in one frame but still charged in the other. Using 1 frame run ahead with bsnes core. 8700k intel processor. No frame delay.”

I haven’t had the chance to try to replicate this. Anyone else care to take a shot at it?


Can not replicate that issue at all.


I haven’t noticed anything of this kind either, however the option to reduce the lag has a strange behavior with the hackspeed of snes9x, there are screen jumps .


Which Snes9x, which game, and which setting triggers it?


That’s about the “reduce slowdown” option I made that changes the internal cycles length of snes9x, it’s in every snes9x cores.
That’s causing the “dual instance” cores to lose sync if you change that setting during runtime.

Making a core option override with the cycle overclock works if you don’t touch it then.

You can reproduce that by running Super R-Type, changing “reduce slowdown” to “max” and charging the mega beam (2nd red power gauge).
Shooting it usually causes a slowdown that will desync the cores.


I used the latest version of snes9x, the one recommended on the main page of the site. Windows 7 no aero, driver directX11, speedhack snes9x (compatible or full are same result) and reduce lag 1 and instance for audio is on

the game is parodius da

speedhack + frame delay 15, but NO reduce lag option = ok game run smooth

speedhack + frame delay 15 and reduce lag option on = screen jump

speedhack + frame delay 0 and reduce lag option on = screen jump

I also had some problems in mario smw; it seems that this new option doesn’t like the speed hack option, it’s annoying because the speed hack allows to remove slowdowns like in gradius 3 for example

In any case, I admire your work very much. And thank you Tatsuya79 for your invention, the flame thrower in contra 3 works much better.


Yep, looks like I just gotta forward core options changes to the secondary core as well. Only the primary core sees them right now.

Edit: more specifically, it’s RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, which loses its value once polled. But now two cores need to read this value, so I need to handle that.

edit: Sent in pull request.


Applied the speedups for Genesis Plus GX.


I made a video showing the issue I have been having in all bsnes cores except for bsnes performance (reddit post mentioned previously). Using a 8700k , with 1080ti GPU, Keyboard controller. The problem starts at 1 min, and in the video I show it disappearing when I disable the feature. I have tried disabling shaders and changing different video settings.


Yeah that’s a desync all right. I just reviewed the code for input, and found an issue there, I’ll see if that fixes anything.

edit: Tried the changed verison, and it did not fix the problem… back to the drawing board…

But I was able to reproduce the problem in “Bsnes Balanced”, and could NOT reproduce the issue in “Beetle Bsnes”/“Mednafen Bsnes”. (don’t say “all of them” until you’ve reproduced the problem in all 9 bsnes cores)


Ok, I applied speed up with genesis gx (I put 125%) and actually I have the same concerns as with snes9x . I used the same settings as before.


With the new Genesis+GX core, the display is frozen if you don’t touch any input for a while playing the first Megadrive Sonic.
Happens with 2nd instance activated.

(0aa222ecd8d2d0f0c5b60b9f571ff7292cc68f6b worked fine)


Ran Sonic 1 with fast forward until time ran out, didn’t see anything like that happen. Now running it without fast forward, and it’s not freezing or anything either.

edit: Ran out of time and the screen never froze. Using Sonic 1 Japanese rom.