BSNES-HD Core runahead? Core not updated?

Hey! I just can’t seem to settle on a Snes Core. I’d love to use Bsnes-HD because HD mode 7 looks awesome! On the other hand I can’t get runahead working on Bsnes-HD, it lags like crazy. And does anyone have any idea why the core lags behind mainstream BSnes, core is v110 and Bsnes is 112. And I believe save states were added in v111 if I’m not mistaken?

Has anyone gotten runahead working on the current Bsnes-HD core, if so, what are your computer specs?

I Have a Intel I5 4670K running at 4Ghz and a Nvidia 1060 3GB. Is that not enough? Runahead works great with Snes9x core. But I miss HD mode 7. I want both! :slight_smile:

The plain ol’ “bsnes” core is the upstream, up-to-date core that includes HD Mode 7 and also supports runahead, only it’s in the form of a core option**. This one is on v114, which is synced with upstream.

There is a bsnes-hd core that’s in-process right now that also includes HD Mode 7, along with some other goodies that haven’t been pulled into mainline bsnes (yet).

**bsnes can make 2 kinds of savestates: one that’s deterministic (i.e., usable for runahead) but doesn’t function across sessions (i.e., for actual saving/loading purposes), and one that’s non-deterministic and non-volatile. We don’t have a way of differentiating between those 2 types of states, so we have to pick one or the other to hook up to libretro’s savestate mechanism. We chose the one that actually works for saving/loading across sessions and used a core option to access the deterministic, volatile states for runahead purposes.

Ah ok, so bsnes-hd was renamed just bsnes, good to know :slight_smile:

I think I follow on most of what you’re saying, but how do I enable runahead in the bsnes core then, should I use the latency option in quick menu and specify the number of frames there, or on the bsnes core option, or both? :thinking:

And regarding the other options on the latency menu, what is recommended to use. Poll Type Behavior, Second Instance and so on?

Thanks for the fast reply!

Disable runahead in the retroarch settings, enable it in the bsnes core options (“Amount of frames for run-ahead” option.)

You can leave the other RA “Latency” settings at default (“Late” poll type, for example.)

1 Like

Seems to work when enabling it in Retroarch settings as well? Tried with frame advance. When setting the number of frames on the bsnes core option, you can’t save override per game, or does the core options apply here as well? Since many games have different latency.

RA’s runahead does not work correctly with bsnes. You need to disable it.

There’s two kinds of overrides. RA settings overrides (that’s what the “Overrides” menu does), and core option overrides (that’s what the “Create core options file” entry in the core options menu does ) For bsnes, you’d probably want to save a core-specific RA settings override file that disables runahead for bsnes, and a per-game core options override file that sets bsnes override frames for each game.

I would then also edit the RA setting override file (bsnes.cfg) on disk manually to make sure it only contains run_ahead_enabled = "false"

RA settings override files use the .cfg file extension, core options override files use .opt.

1 Like

Ah ok. I missed that you could save core specific settings per game in that menu! Thanks! One last question, is the bsnes core compatible with Retroachievements?

Edit: In the achievements menu it says unsupported, so I guess not. Will is be possible in the future perhaps, any idea why it’s not compatible?

no, not currently. Possibly not ever. The hook for that would be very intrusive, digging deep into the core, and it probably isn’t worth doing that, as it would very likely cause issues updating the core in the future.

That’s to bad, guess you can’t have everything :frowning: Is there a updated list which cores are compatible?

I think this is the most exhaustive list, though I think there might be a few that aren’t on it: https://docs.libretro.com/guides/retroachievements/

1 Like

Just curious, how come the other bsnes cores are compatible, but not the new one?

byuu has completely rewritten bsnes dozens of times. Each time, most things are the same or at least similar, but some things get restructured and/or moved around. In new bsnes, the memory we need to access is not as easy to get to as in the older v094 version. Plus, we don’t care about hacking into those old versions, since we don’t need to keep them updated.

byuu has offered to accept patches that enable achievements in new bsnes, but I don’t think he would be very happy with one that unrolls the necessary bits, so unless we figure out a cleaner way to do it, it’s probably not coming.

1 Like

Right now, there are two different runahead features within RetroArch + bsnes.

One is found within the Core Options menu after you’ve loaded a game, it’s the bottom setting called “frames to run ahead”. This feature works.

The other is RetroArch’s main RunAhead feature, which does not work due to issues with bsnes’s own savestate feature.

As mentioned elsewhere, bsnes has two forms of savestates. Ones that can be saved to disk, and ones which contain internal code pointers and are only used for the built-in runahead system.

I made a modification to bsnes to use the special internal type of savestates for RetroArch’s RunAhead feature, and while it works fine, it crashes if you attempt to use the Secondary Instance feature.

RetroArch might need a new flag to indicate that a savestate may use internal pointers, and is okay for a particular instance only, and can not be transferred to any other instance. Then both RetroArch and bsnes would need to be changed for that.

Github issue link: https://github.com/libretro/bsnes/issues/29

1 Like