Joined: 4/22/2014
Posts: 59
Location: United Kingdom
I'm not sure if this is reported yet, but the mGBA core doesn't play nicely with certain games, like Minish Cap for example:
The VBA-Next core, meanwhile, does not save SRAM data properly for this game, and did not with a few other games either (for example, Mario & Luigi Superstar Saga).
EDIT: Forgot to mention that I tried updating to 2.3.1, and the problems persist
I'm not sure if this is just a bug on my end or a bug with BizHawk as a whole, but for some reason, the game Haunted House for the Atari 2600 crashes when you try to load its ROM.
Joined: 1/24/2018
Posts: 309
Location: Stafford, NY
@LobsterZelda Might be related to this issue in GitHub: github.com/TASVideos/BizHawk/issues/1524
Haunted House isn't on the list, but does it act the same way as the games described there?
^ Why I don't have any submissions despite being on the forums for years now...
It seems to be related. It crashes with the same error (unable to resolve frame). By using frame advance, I can see that it actually crashes on the second frame after loading the ROM, not immediately after loading the ROM. Here's the full stack trace of the exception:
System.Exception: ERROR: Unable to resolve Frame. Please Report.
at BizHawk.Emulation.Cores.Atari.Atari2600.Atari2600.FrameAdvance(IController controller, Boolean render, Boolean rendersound)
at BizHawk.Client.EmuHawk.MainForm.StepRunLoop_Core(Boolean force)
at BizHawk.Client.EmuHawk.MainForm.ProgramRunLoop()
at BizHawk.Client.EmuHawk.Program.Win32MainLoopCrashHandler.TryCatchFinally(String[] args)
I have an update to the error that I saw earlier. I used a debugger when I tried to load Haunted House for the Atari 2600 and traced through the stack, which yielded the following chain of events:
1. BizHawk.client.EmuHawk.Program.Main(String[] args) calls the function SubMain(String[]) at line 83
2. BizHawk.client.EmuHawk.Program.SubMain(String[] args) calls ProgramRunLoop() at line 229
3. BizHawk.client.EmuHawk.MainForm.ProgramRunLoop() calls StepRunLoop_Core() at line 498
4. BizHawk.client.EmuHawk.MainForm.StepRunLoop_Core() calls FrameAdvance(IController, bool, bool) at line 3021
5. BizHawk.Emulation.Cores.Atari.Atari2600.Atari2600.FrameAdvance(IController, bool, bool) calls Cycle() at line 50
6. BizHawk.Emulation.Cores.Atari.Atari2600.Atari2600.Cycle() calls ExecuteOne() at line 390.
7. BizHawk.Emulation.Cores.Components.M6502.MOS6502X.ExecuteOne() calls ExecuteOneRetry() at line 2980
8. BizHawk.Emulation.Cores.Components.M6502.MOS6502X.ExecuteOneRetry() calls ZP_WRITE_STA() at line 2,758. The only line in function ZP_WRITE_STA() is a function call to WriteMemory(ushort, byte) at line 880. More specifically, this function call is WriteMemory(opcode2, A)
9. BizHawk.Emulation.Cores.Atari.Atari2600.Atari2600.WriteMemory(ushort, byte) calls BaseWriteMemory(ushort, byte) at line 182 using the same parameters that were passed to WriteMemory(ushort, byte) one step earlier.
10. BizHawk.Emulation.Cores.Atari.Atari2600.Atari2600.BaseWriteMemory(ushort, byte) calls WriteMemory(ushort, byte, bool) at line 123. The first two parameters passed into the function are the same two parameters that were passed to WriteMemory(ushort, byte) one step earlier
11. At this point, the second parameter passed to WriteMemory (which contains the value of the Accumulator register from earlier) is always 0. However, since this number can’t be Anded with 0 to produce a non-zero number, _vsyncEnabled never gets set to true. Since _vsyncEnabled always starts off being false at the beginning of this function call, the variable will always be false here. _vsyncEnabled being true here is the trigger to start a new frame, so this appears to be blocking the next frame from starting/the first frame from ending. Additionally, because this generates an endless loop, if the line of code that terminates execution when an exception occurs is removed, this will result in the value of the current scan line increasing indefinitely, well past the intended limit of 312.
I have stepped through the code and seen that A is indeed non-zero at several points. In fact, at one point it was 3, which if Anded with 2 would yield a non-zero number. However, whenever it got to the WriteMemory(ushort, byte, bool) function using the value of the accumulator, the accumulator always had a value of 0, which prevented _vsyncEnabled from being set to true (thus preventing the next frame from loading). Also of note is that the instruction ZP_WRITE_STA was always the instruction that was being executed when the WriteMemory(ushort, byte, bool) function was reached.
I don't know if any of this information is helpful, or if this is all already known. However, I am hopeful that somebody who better understands how BizHawk's code works (such as Alyosha) can use this information to help find out what's causing certain Atari 2600 games to crash when their ROMS are loaded in BizHawk.
I don't know if this is meaningful or not, but according to Stella, the first frame of Haunted House goes from 0 to the 42nd scanline before going to the second frame. I looked at a few other atari 2600 games and didn't see this number come up on any of their first frames. The only reason why I wonder if this is relevant is that on BizHawk the emulator renders the first frame, and then gets stuck on an endless loop in the second frame due to Vsync never being triggered, which allows the scanline number to increase without bound (if the exception this normally triggers is disabled).
I made this report here: https://github.com/TASVideos/BizHawk/issues/1580
but I am going to post here too in hopes that I can get a good response.
I was comparing my TAS for Splatterhouse on PCE to an actual console and I noticed somthing about the first level in particular.
On console it seems like there are more Percussion sound effects playing. On Bizhawk, however, it just sounds like it's playing Hi-Hats.
here's what it sounds like on Console: https://www.youtube.com/watch?v=tO29L4841A4
and here's what it sounds like on bizhawk(my TAS) https://www.youtube.com/watch?v=wsNv-qpXKf4
if you compare the music from the first level, you can definitely tell that BizHawk is either missing sound effects or it's not playing the correct sounds. I also believe the audio is accurate on PCEjin.
[14:15] <feos> WinDOES what DOSn't
12:33:44 PM <Mothrayas> "I got an oof with my game!"
Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet
MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish
[Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person
MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol
Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
In your BizHawk folder you will find a folder called gamedb.
In that folder you will find various lists of games for different consoles.
In the A2600 file the entry for haunted house is this:
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 m=4K;NTSC=true
A database flag would modify this entry to tell the emulator to do different things with the game while loading.
The two flags are
SP_RESET=true;
and
SP_FRAME=true;
So, just to be extra clear, the above entry for Haunted House would become either:
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 SP_RESET=true;m=4K;NTSC=true
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true
If you want to test and see which one works give it a try.
If neither of those things work the mapper (m=4k) is probably wrong but that's much less likely.
I'll add it to the list for A2600. Most likely it just needs a database flag.
What is a database flag?
In your BizHawk folder you will find a folder called gamedb.
In that folder you will find various lists of games for different consoles.
In the A2600 file the entry for haunted house is this:
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 m=4K;NTSC=true
A database flag would modify this entry to tell the emulator to do different things with the game while loading.
The two flags are
SP_RESET=true;
and
SP_FRAME=true;
So, just to be extra clear, the above entry for Haunted House would become either:
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 SP_RESET=true;m=4K;NTSC=true
sha1:1476c869619075b551b20f2c7f95b11e0d16aec1 Haunted House (1981) (Atari) A26 SP_FRAME=true;m=4K;NTSC=true
If you want to test and see which one works give it a try.
If neither of those things work the mapper (m=4k) is probably wrong but that's much less likely.
I tested both of them, but neither of them worked.
Seiken Densetsu 3 (SNES) - video mode changes the window size making it double wide when some text dialogs are shown.
You can see this in the very beginning of the game.
Im using version 2.3.1 on Windows 10.
Seiken Densetsu 3 (SNES) - video mode changes the window size making it double wide when some text dialogs are shown.
You can see this in the very beginning of the game.
Im using version 2.3.1 on Windows 10.
- load a SNES game
- go to "menu - SNES - Options"
- check "Always Double-Size Framebuffer"
Seiken Densetsu 3 (SNES) - video mode changes the window size making it double wide when some text dialogs are shown.
You can see this in the very beginning of the game.
Im using version 2.3.1 on Windows 10.
Config -> Display -> Enable "Maintain aspect ratio"
Use custom size 299x224 (if you want 4:3 aspect ratio)
Including the overscan, the height is 240, as is with NES and Genesis.
If you want 4:3 aspect ratio including the overscan, then
Use custom size 320x224
"Use custom size" has the advantage over "Always Double-Size Framebuffer" that it doesn't mess with the shaders' image quality. But it's a global setting and you'll have to change it to "Use system's recommendation" for most systems.
Joined: 4/17/2010
Posts: 11499
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
Cyorter wrote:
Video encoding (VFW & FFmpeg) doesn't work with GBHawkLink core, curious, because GGHawkLink and Dual Gambatte works.
How do I even select this core?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Have GBHawk selected as you GB core, then just load a daul GB xml.
FFMPEG seems to be working fine for me for avi though. I don't know how to get to VFW.
EDIT: regular avi reorder works fine for me (uncompressed frames)
Joined: 4/17/2010
Posts: 11499
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
It's the regular AVI recorder.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
Have GBHawk selected as you GB core, then just load a daul GB xml.
FFMPEG seems to be working fine for me for avi though. I don't know how to get to VFW.
EDIT: regular avi reorder works fine for me (uncompressed frames)
Heh! Maybe I have to update to a newer interim or move to 2.3.1.
VFW is the regular AVI Writer in BizHawk, where you can select only VFW compressors as Lagarith, CamStudio, Intel IYUV, Microsoft Video 1, etc.
Feos, The "GB" core selection applies to normal GB as well as GBLink :p
Joined: 4/17/2010
Posts: 11499
Location: Lake Chargoggagoggmanchauggagoggchaubunagungamaugg
VfW dumper worked for me with GBHawkLink.
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
WELP. the rerecord count is broken in 2.3.2
any time bizhawk freezes because of an added frame or somthing, it will count it as if you did it one thousand times. was working on a movie today with it and I jumped from 35k rerecords to 91k.
Edit: so an easy way to recreate this is to press ctrl+z when redoing somthing in tastudio when running a Saturn game. expect movies made in this bizhawk to have incredibly large rerecord counts.
[14:15] <feos> WinDOES what DOSn't
12:33:44 PM <Mothrayas> "I got an oof with my game!"
Mothrayas Today at 12:22: <Colin> thank you for supporting noble causes such as my feet
MemoryTAS Today at 11:55 AM: you wouldn't know beauty if it slapped you in the face with a giant fish
[Today at 4:51 PM] Mothrayas: although if you like your own tweets that's the online equivalent of sniffing your own farts and probably tells a lot about you as a person
MemoryTAS Today at 7:01 PM: But I exert big staff energy honestly lol
Samsara Today at 1:20 PM: wouldn't ACE in a real life TAS just stand for Actually Cease Existing
I get an exception with 2.3.2 when I try to open a TASproject for Sega Saturn, recorded with 2.3.1.
Newtonsoft.Json.JsonReaderException: Unexpected character encountered while parsing value: . Path '', line 0, position 0.
bei Newtonsoft.Json.JsonTextReader.ParseValue()
bei Newtonsoft.Json.JsonTextReader.Read()
bei Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter)
bei Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
bei Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
bei Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
bei Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
bei BizHawk.Client.Common.TasLagLog.Load(TextReader tr)
bei BizHawk.Client.Common.BinaryStateLoader.GetLump(BinaryStateLump lump, Boolean abort, Action`2 callback)
bei BizHawk.Client.Common.TasMovie.Load(Boolean preload)
bei BizHawk.Client.Common.MovieSession.QueueNewMovie(IMovie movie, Boolean record, IEmulator emulator)
bei BizHawk.Client.EmuHawk.MainForm.StartNewMovie(IMovie movie, Boolean record)
bei BizHawk.Client.EmuHawk.TAStudio.StartNewMovieWrapper(Boolean record, IMovie movie)
bei BizHawk.Client.EmuHawk.TAStudio.HandleMovieLoadStuff(TasMovie movie)
bei BizHawk.Client.EmuHawk.TAStudio.LoadFile(FileInfo file, Boolean startsFromSavestate, Int32 gotoFrame)
bei BizHawk.Client.EmuHawk.TAStudio.OpenTasMenuItem_Click(Object sender, EventArgs e)
bei System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
bei System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
bei System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
bei System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ToolStrip.WndProc(Message& m)
bei System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)