libretro / blastem

Upstream tracking repo of BlastEm, the fast and accurate Genesis emulator, with libretro specific changes
https://www.retrodev.com/blastem/
GNU General Public License v3.0
54 stars 25 forks source link

Any progress toward making this core more feature complete? #4

Closed boomercore closed 4 years ago

boomercore commented 4 years ago

Just an observation that this core lacks any options or run-ahead (despite having save state support, puzzlingly enough). Was wondering if those are or will be in the works. Thank you!

hizzlekizzle commented 4 years ago

Re: core options, I was just looking through the source and didn't really see anything that would/should be exposed as a core option. Apparently at some point there will be an option for separate PSG and FM volume control, but I don't think that's exposed yet.

Re: runahead, it actually takes more than just savestate support for runahead to work with a core. The states need to be fully deterministic and the emu itself needs to be deterministic (i.e., same inputs always produce same outputs). That's why there are a lot of cores where runahead only sort of works, like bsnes-mercury and genesis plus gx.

boomercore commented 4 years ago

Thanks for explaining that. I noticed that GenPlusGX can be a little flaky with it depending on the game. I'll be the first in line to try run-ahead once improvements/support are announced for both.

What other cores are non-deterministic, just so I know what to look out for?

hizzlekizzle commented 4 years ago

it's honestly easier to name the ones that are deterministic. Namely, snes9x, fceumm, picodrive, gambatte, FBNeo... I'm not sure what else, actually. Maybe VBA-M, maybe beetle-pce-fast?

As you've found, there are a lot of cores that will "work" with runahead without being fully deterministic, but they'll have weird glitches sometimes, caused by internal desyncs. A good example is holding a charge shot in Mega Man X with the bsnes-based cores: you'll randomly fire the charged shot without releasing the button.

Note: new bsnes (the one without any modifiers) can produce deterministic states, but they aren't usable across gameplay sessions (that is, for actually saving progress), so they're not hooked up in libretro, making RetroArch's runahead option not work properly. However, there's a core option to use the core's own runahead with the deterministic states that is functionally identical.

negativeExponent commented 4 years ago

second-instance should work in most cases.

keithbowes commented 4 years ago

Re: core options, I was just looking through the source and didn't really see anything that would/should be exposed as a core option.

The only option I'd like to see is one to get rid of the border around games. Maybe it's intentional to emulate a television frame, but my computer already has a frame and I really dislike having an extra emulated one. I tried to look in the source code for what exactly draws it and I couldn't find anything; I suppose someone who knows something about Genesis emulation would have to.

Silanda commented 4 years ago

Re: core options, I was just looking through the source and didn't really see anything that would/should be exposed as a core option.

The only option I'd like to see is one to get rid of the border around games.

Same. The stand alone version has options to set the overscan area and therefore not render outside of what was intended to be seen. Personally I think this is very important for PAL games that weren't optimised to use a larger display area (i,e, virtually all of them). I like accuracy, but not to the point that I want emulation of PAL borders and the incorrect aspect ratio that goes with them. I don't even stand for that when playing on actual hardware these days.

Awakened0 commented 4 years ago

I thought I remembered @mikepavone adding an overscan option that would crop the top and bottom borders. And doing that would shave off one lag frame. But this repo hasn't been synced with the upstream mercurial repo in quite some time.

Other than that, the core doesn't have battery save support. Not sure if that's supported in stand alone. And if you play Sonic 1 you might notice certain sound effects are a little scratchier than in GPGX. I asked about that on the blastem Discord awhile back and @mikepavone said he needed to fix up the libretro port's sound quality sometime.

Awakened0 commented 4 years ago

@hizzlekizzle got this repo synced up :D . Overscan cropping works now, but it doesn't use a core option. It activates if you have the frontend overscan crop option enabled under Settings, Video, Scaling. It does have one less lag frame with that enabled too.

negativeExponent commented 4 years ago

there should be nothing that hinders it from syncing to upstream. the overscan option should be easy to changed in core options and apply in real-time as well.

https://github.com/negativeExponent/blastem/commits/sync_upstream

@Awakened0 : are you sending PR for your changes?

negativeExponent commented 4 years ago

core should be in sync now. not all options in upstream is available in libretro though other than overscan. otherwise-this should be flagged complete.

Awakened0 commented 4 years ago

Excellent, thanks! Yeah, I hope down the line more of the options from stand alone are added, like the audio stuff for people who want to adjust how the low pass sounds. I'm pretty happy with the defaults for that stuff though.