BizHawk Emulator Development


rv
Experienced Forum User
Joined: 9/10/2017
Posts: 6
Why does BizHawk2.2 generate more lags than BizHawk1.19.1? With BSNES Core, BizHawk2.2 has longer loading times and more random lag frames. Does BizHawk2.2 generate less lags if i change settings?
Experienced Forum User, Published Author (442)
Joined: 12/13/2016
Posts: 348
More accurate emulation due to the removal of the deterministic save state hack.
Amaraticando
It/Its
Editor, Experienced Forum User, Published Author (182)
Joined: 1/10/2012
Posts: 672
Location: Brazil
TAS of 2015SNES TAS of 2015
rv wrote:
Does BizHawk2.2 generate less lags if i change settings?
You shouldn't choose the emulator that "generates less lag". Lag management is done only during gameplay by avoiding enemies and the like. You're supposed to get the same amount of lag as the actual console (or very close).
rv
Experienced Forum User
Joined: 9/10/2017
Posts: 6
If we make TAS that is faster than old TAS, we should use the emulator that generates lags as the emulator of old TAS. (Of course, if we make the 1st TAS, we should use the accurate emulator.) BizHawk2.2 generates more lags than BizHawk1.X. BizHawk1.X generates more lags than Snes9x 1.43. So, BizHawk should be able to generate lags as Snes9x 1.43. Um, Can BizHawk with Snes9x Core generate lags as Snes9x 1.43? Does tasvideos accept TAS of BizHawk with Snes9x Core?
Editor, Experienced Forum User
Joined: 3/31/2010
Posts: 1466
Location: Not playing Puyo Tetris
rv wrote:
If we make TAS that is faster than old TAS, we should use the emulator that generates lags as the emulator of old TAS. (Of course, if we make the 1st TAS, we should use the accurate emulator.) BizHawk2.2 generates more lags than BizHawk1.X. BizHawk1.X generates more lags than Snes9x 1.43. So, BizHawk should be able to generate lags as Snes9x 1.43. Um, Can BizHawk with Snes9x Core generate lags as Snes9x 1.43? Does tasvideos accept TAS of BizHawk with Snes9x Core?
Rules wrote:
[4] Movies using Snes9x v1.43 are not accepted unless a continuance is granted. Movies using Snes9x v1.51 or newer are accepted but the emulator is deprecated.
http://tasvideos.org/EmulatorResources.html#4
When TAS does Quake 1, SDA will declare war. The Prince doth arrive he doth please.
Editor, Emulator Coder, Experienced Forum User, Site Developer
Joined: 5/11/2011
Posts: 1105
Location: Murka
rv wrote:
If we make TAS that is faster than old TAS, we should use the emulator that generates lags as the emulator of old TAS.
Ehh. Not my problem, and TASVideos has accepted many movies that didn't do this.
fsvgm777
She/Her
Experienced Forum User, Published Author, Senior Publisher (261)
Joined: 5/28/2009
Posts: 1074
Location: Luxembourg
rv wrote:
So, BizHawk should be able to generate lags as Snes9x 1.43.
BizHawk should absolutely not emulate lag as in Snes9X 1.43, because the latter emulates it very incorrectly. bsnes/higan and Snes9X 1.54 (both integrated in recent versions of BizHawk) emulate lag much closer to the original console (if not on par). In other words, the BizHawk devs should not sacrifice accuracy to suit your needs.
Twitter account - Steam Community page Oh, I'm just a concerned observer. Memory, GoddessMaria and Samsara are my sisters~♥
Amaraticando
It/Its
Editor, Experienced Forum User, Published Author (182)
Joined: 1/10/2012
Posts: 672
Location: Brazil
TAS of 2015SNES TAS of 2015
Why don't you ask BizHawk to skip lag frames already? By the way, while judging the movie, the actual loss of frames due to emulation improvement is not a disapproval factor. It has happenned: [2827] SNES Super Mario World "warps" by bahamete, Masterjun, PangaeaPanga in 09:59.85 which beats [1944] SNES Super Mario World "warps" by bahamete, kaizoman666, Mister, PangaeaPanga in 09:57.82
rv
Experienced Forum User
Joined: 9/10/2017
Posts: 6
OK. I understand. But I want to make TAS with not-laggy emulator. btw, can I watch the value as CPU utilization for lag management? >Amaraticando >Why don't you ask BizHawk to skip lag frames already? Does BizHawk have the function to skip? >By the way, while judging the movie, the actual loss of frames due to emulation improvement is not a disapproval factor. Oh. Lags of Snes9x 1.43 is too few.
Editor, Emulator Coder, Experienced Forum User, Site Developer
Joined: 5/11/2011
Posts: 1105
Location: Murka
rv wrote:
btw, can I watch the value as CPU utilization for lag management?
Bizhawk has no such feature. That would be an easy thing to do for a system like the GBA, where developers usually slept the CPU when they were done calculating things for the next frame, and that sleeping time can be counted separately. NO$GBA has such a feature. It would be harder to do on something like the SNES because waiting was done with dumb spinning loops, which look more or less the same as all other executed code. Still, some emulators have "idle loop detection", so there probably are heuristics that would work in some cases, and if you were interested in a particular game, identifying that game's idle loops and then using LUA exec hooks might be enough?
Amaraticando
It/Its
Editor, Experienced Forum User, Published Author (182)
Joined: 1/10/2012
Posts: 672
Location: Brazil
TAS of 2015SNES TAS of 2015
natt wrote:
It would be harder to do on something like the SNES because waiting was done with dumb spinning loops, which look more or less the same as all other executed code. Still, some emulators have "idle loop detection", so there probably are heuristics that would work in some cases, and if you were interested in a particular game, identifying that game's idle loops and then using LUA exec hooks might be enough?
It can be done, but in a game by game basis. https://www.youtube.com/watch?v=tD6fCPPmBMA
creaothceann
He/Him
Editor, Experienced Forum User
Joined: 4/7/2005
Posts: 1874
Location: Germany
rv wrote:
I want to make TAS with not-laggy emulator
A lag frame is a frame in which the game doesn't read the input status. This happens on the real SNES and is a consequence of how the game was programmed. Some emulators have incorrect emulation which may result in less (or more) lag frames. bsnes is quite close to the real hardware, so it should be used even if it shows more lag frames.
Editor, Experienced Forum User, Published Author (2799)
Joined: 5/15/2007
Posts: 3821
Location: Germany
Gameboy TASer of 2015NES TAS of 2013Gameboy TASer of 2011Gameboy TASer of 2010
Just as an observation: I'm still working on my lua game on Bizhawk 2.2 and I noticed FPS (without drawing map tiles) drop from 55~60 down to 45~50. It stayed that way even when I checked obsolete versions of the lua game and after rebooting PC. It improved to 60 FPS again after I removed the .cfg file, or after I switched to a different Bizhawk install. I'm not sure how the .cfg file is slowing things down but I'm just pointing that out here...
Experienced Forum User
Joined: 5/4/2016
Posts: 67
Something I noticed. Starting in 2.0 Dynarec was removed as an option for the CPU mode in Mupen64Plus. Is this intentional due to some incompatibility when compiled in x64, or was this an oversight made when compiling the core? The changelog doesn't make note of this change.
Editor, Emulator Coder, Experienced Forum User
Joined: 8/7/2008
Posts: 1156
It was certainly removed because it was impeding the 64bit transition. I see some junko in the source code about an x64 dynarec. What is that? Could the dynarec use that? Why did I think I had to take it out in the first place? I don't know, you tell me. Are there mupen64pluses that are 64bit and have a dynarec? I can't get that code to compile right now, it seems out of date.
Editor, Emulator Coder, Experienced Forum User
Joined: 8/7/2008
Posts: 1156
I tried getting the mupen64plus-core/src/r4300/x86_64 to build and that entire module (even the 32bit parts) looked trashed and out of date. I dont know what we used before. I need someone who knows what's going on in the mupen core to tell me how in the world our recompiler used to work.
Experienced Forum User
Joined: 5/4/2016
Posts: 67
The message I'm quoting is from the bug reporting thread as you said discuss cheats in another thread.
Editor, Experienced Forum User, Published Author (2799)
Joined: 5/15/2007
Posts: 3821
Location: Germany
Gameboy TASer of 2015NES TAS of 2013Gameboy TASer of 2011Gameboy TASer of 2010
Yoshi Topsy Turvy requires tilting and apparently you can't bind tilt controls to the keyboard or use lua to tilt. I think last time I brought this up, zeromus told me to use a joystick. But why should I have to use a joystick to TAS? I request that tilting be assigned to keyboard keys and/or support for tilting cntrols be added to lua.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author (3927)
Joined: 11/30/2014
Posts: 2388
Location: US
NES TASer of 2015
MUGG wrote:
Yoshi Topsy Turvy requires tilting and apparently you can't bind tilt controls to the keyboard or use lua to tilt. I think last time I brought this up, zeromus told me to use a joystick. But why should I have to use a joystick to TAS? I request that tilting be assigned to keyboard keys and/or support for tilting cntrols be added to lua.
There is no mechanism to assign analog (float) controls to keyboard keys, so that's certainly not happening. There is a lua function joypad.setanalog, does this not work?
Editor, Emulator Coder, Experienced Forum User, Site Developer
Joined: 5/11/2011
Posts: 1105
Location: Murka
MUGG wrote:
Yoshi Topsy Turvy requires tilting and apparently you can't bind tilt controls to the keyboard or use lua to tilt. I think last time I brought this up, zeromus told me to use a joystick. But why should I have to use a joystick to TAS? I request that tilting be assigned to keyboard keys and/or support for tilting cntrols be added to lua.
That's stupid. I can see the potential value to binding digital controls to analog axes for casual play, but for TASing it's 100% guaranteed to be suboptimal; you have an input with many possible values but using a keyboard you're limiting yourself to only two possible values. Use the virtual pad.
Editor, Experienced Forum User, Published Author (2799)
Joined: 5/15/2007
Posts: 3821
Location: Germany
Gameboy TASer of 2015NES TAS of 2013Gameboy TASer of 2011Gameboy TASer of 2010
Ah, I didn't know about joypad.setanalog(nluatable controls, [object controller = null]). Can you give an example for a table "controls" to help me understand how to use this function? Edit: I also didn't know about the virtual pad. Thanks for the help. As for the game of my choice, Yoshi Topsy Turvy, I need to investigate but I think the game only has 3 possible states: Either it's tilted left, tilted right or not tilted. It cannot be tilted halfway left or right, for example. This is just my observation, and if anyone has any insights or more info about this, please let me know. It is also because of this observation (about the 3 states), that I asked how to bind tilting to keys. Because I don't need precise values. Or so it seems, at least.
Alyosha
He/Him
Editor, Experienced Forum User, Published Author (3927)
Joined: 11/30/2014
Posts: 2388
Location: US
NES TASer of 2015
MUGG wrote:
Ah, I didn't know about joypad.setanalog(nluatable controls, [object controller = null]). Can you give an example for a table "controls" to help me understand how to use this function?
buttons = { };
analog_sets = { };

while true do
	buttons = joypad.get();

	analog_sets["P2 Zapper X"] = "30.5";
	
	joypad.setanalog(analog_sets);
	
	console.writeline(buttons);
		
	emu.frameadvance();
end
Here's the simplest example I can come up with. In this example the zapper is plugged into player 2 on the NES. In this case the joypad.setanalog simply locks the X coordinate at 30.5, as you can easily verify on the game window by turning on input display. You can just use the console.writeline(buttons) by itself to see what analog controls are available.
Experienced Forum User, Published Author (503)
Joined: 3/21/2011
Posts: 127
Location: Virginia (United States)
Okay, I'm having trouble figuring this out. How do you set up a RAM watch on SA-1 addresses (and/or is it even possible)? I don't seem to be able to access it, probably because of the difference in how IRAM is mapped. I've tried both the standard mappings and adjusted mappings and neither seem to work in any memory domain; performing a search on the full system bus couldn't find anything either.
YouTube Channel - Twitter Current projects: Sutte Hakkun, Hyper VI, RTDL, own hacking projects
Experienced Forum User
Joined: 5/4/2016
Posts: 67
So I was wondering what was up with this branch https://github.com/TASVideos/BizHawk/tree/domainedmemoryhooks The impression I'm getting is that the goal was to refactor the functionality of memory domains into "scopes" which can contain more than just memory? Just wondering what the long term plan behind this is.
adelikat
He/Him
Emulator Coder, Published Author, Site Admin (4250)
Joined: 11/3/2004
Posts: 4655
Location: Tennessee
TASer of 2010NES TASer of 2010DS TASer of 2010Arcade TAS of 2010NES TASer of 2008NES TAS of 2008Funny TAS of 2008TASer of 2007NES TASer of 2007Funny TAS of 2007
smellyfeetyouhave wrote:
So I was wondering what was up with this branch https://github.com/TASVideos/BizHawk/tree/domainedmemoryhooks The impression I'm getting is that the goal was to refactor the functionality of memory domains into "scopes" which can contain more than just memory? Just wondering what the long term plan behind this is.
The work is done and yes, it means you could potentially hook to more things than just the "system bus" of the core. It could be other memory domains, or even things like scanline. The work is done in that branch, but no core has implemented anything with it, so that's why it is still unmerged (I suppose I could go ahead and merge it though)
Pimpin' ain't easy My Homepage My TAS projects