TASEmulators / BizHawk

BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as full screen, and joypad support in addition to full rerecording and debugging tools for all system cores.
http://tasvideos.org/BizHawk.html
Other
2.08k stars 375 forks source link

SGB Gambatte crash at samplesEmitted = TICKSINFRAME (at line 25) #3502

Open getCursorsExe opened 1 year ago

getCursorsExe commented 1 year ago

Pokemon - Red Version (USA, Europe).Gambatte.QuickSave9.zip Make sure you also have these cheats enabled: image BizHawk should crash at line 25 in Gambatte.IEmulator.cs. It bypasses the BizHawk's crash handler, so no crash log.

Morilli commented 2 weeks ago

This crashes at the following line: https://github.com/TASEmulators/BizHawk/blob/d788e603fd6e534bbf2e7dac23d4d1d81be33ed3/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IMemoryDomains.cs#L48

Stacktrace from gambatte:

gambatte::PPU::update (this=0x1bf1c2838b8, cc=218103920) at D:/GitHub/gambatte-core/libgambatte/src/video/ppu.cpp:1899
1899                            p_.nextCallPtr->f(p_);
(gdb) bt
#0  gambatte::PPU::update (this=0x1bf1c2838b8, cc=218103920)
    at D:/GitHub/gambatte-core/libgambatte/src/video/ppu.cpp:1899
#1  0x00007ff857dcbe79 in gambatte::LCD::update (this=0x1bf1c2838b8, cycleCounter=218103920)
    at D:/GitHub/gambatte-core/libgambatte/src/video.cpp:924
#2  0x00007ff857dcafe0 in gambatte::LCD::oamChange (this=0x1bf1c2838b8, oamram=0x1bf1c283610 "", cc=218103920)
    at D:/GitHub/gambatte-core/libgambatte/src/video.cpp:533
#3  0x00007ff857db9381 in gambatte::Memory::endOamDma (this=0x1bf1c2027f0, cc=218103920)
    at D:/GitHub/gambatte-core/libgambatte/src/memory.cpp:625
#4  0x00007ff857db90a0 in gambatte::Memory::updateOamDma (this=0x1bf1c2027f0, cc=1385662972)
    at D:/GitHub/gambatte-core/libgambatte/src/memory.cpp:578
#5  0x00007ff857dbbe4d in gambatte::Memory::nontrivial_write (this=0x1bf1c2027f0, p=56, data=201, cc=1385662972)
    at D:/GitHub/gambatte-core/libgambatte/src/memory.cpp:1366
#6  0x00007ff857e1e687 in gambatte::Memory::write<true, false> (this=0x1bf1c2027f0, p=56, data=201, cc=1385662972)
    at D:/GitHub/gambatte-core/libgambatte/src/memory.h:222
#7  0x00007ff857df751f in gambatte::CPU::externalWrite (this=0x1bf1c2027f0, addr=56, val=201 '\311')
    at D:/GitHub/gambatte-core/libgambatte/src/cpu.h:148
#8  0x00007ff857db38f1 in gambatte::GB::externalWrite (this=0x1bf7a99f080, addr=56, val=201 '\311')
    at D:/GitHub/gambatte-core/libgambatte/src/gambatte.cpp:462
#9  0x00007ff857df141c in (anonymous namespace)::gambatte_cpuwrite (g=0x1bf7a99f080, addr=56, val=201 '\311')
    at D:/GitHub/gambatte-core/libgambatte/src/cinterface.cpp:254
CasualPokePlayer commented 1 week ago

I would guess this is just an issue of side effects occurring outside of the main cpu loop, which gambatte's code never really fully accounted for, so usually it works, sometimes it doesn't.