Fixed some uninitialized variables

+ Fixed rare crash when calling Stop()
This commit is contained in:
Sour 2019-07-13 13:43:56 -04:00
parent 4aea512397
commit 95d0c5a910
9 changed files with 17 additions and 16 deletions

View file

@ -12,6 +12,7 @@ namespace CartFlags
{ {
enum CartFlags enum CartFlags
{ {
None = 0,
LoRom = 1, LoRom = 1,
HiRom = 2, HiRom = 2,
FastRom = 4, FastRom = 4,
@ -28,9 +29,9 @@ private:
vector<unique_ptr<IMemoryHandler>> _prgRomHandlers; vector<unique_ptr<IMemoryHandler>> _prgRomHandlers;
vector<unique_ptr<IMemoryHandler>> _saveRamHandlers; vector<unique_ptr<IMemoryHandler>> _saveRamHandlers;
SnesCartInformation _cartInfo; SnesCartInformation _cartInfo = {};
CartFlags::CartFlags _flags; CartFlags::CartFlags _flags = CartFlags::CartFlags::None;
string _romPath; string _romPath;
string _patchPath; string _patchPath;

View file

@ -73,6 +73,8 @@ void Console::Run()
if(!_cpu) { if(!_cpu) {
return; return;
} }
auto emulationLock = _emulationLock.AcquireSafe();
DebugStats stats(this); DebugStats stats(this);
Timer lastFrameTimer; Timer lastFrameTimer;
@ -160,7 +162,7 @@ void Console::Stop(bool sendNotification)
debugger->Run(); debugger->Run();
} }
_runLock.WaitForRelease(); _emulationLock.WaitForRelease();
if(_cart) { if(_cart) {
RomInfo romInfo = _cart->GetRomInfo(); RomInfo romInfo = _cart->GetRomInfo();

View file

@ -54,6 +54,7 @@ private:
atomic<uint32_t> _lockCounter; atomic<uint32_t> _lockCounter;
SimpleLock _runLock; SimpleLock _runLock;
SimpleLock _emulationLock;
SimpleLock _debuggerLock; SimpleLock _debuggerLock;
atomic<bool> _stopFlag; atomic<bool> _stopFlag;

View file

@ -14,6 +14,7 @@ public:
{ {
_delay = delay; _delay = delay;
_targetTime = _delay; _targetTime = _delay;
_resetRunTimers = false;
} }
void SetDelay(double delay) void SetDelay(double delay)

View file

@ -31,7 +31,7 @@ private:
uint8_t _ioPortOutput = 0; uint8_t _ioPortOutput = 0;
uint16_t _controllerData[4]; uint16_t _controllerData[4] = {};
public: public:
InternalRegisters(Console* console); InternalRegisters(Console* console);

View file

@ -32,12 +32,12 @@ private:
vector<unique_ptr<RamHandler>> _workRamHandlers; vector<unique_ptr<RamHandler>> _workRamHandlers;
uint8_t *_workRam; uint8_t *_workRam;
uint64_t _masterClock; uint64_t _masterClock = 0;
uint16_t _hClock = 0; uint16_t _hClock = 0;
uint16_t _dramRefreshPosition = 0; uint16_t _dramRefreshPosition = 0;
uint16_t _hdmaInitPosition = 0; uint16_t _hdmaInitPosition = 0;
uint8_t _openBus; uint8_t _openBus = 0;
uint8_t _cpuSpeed; uint8_t _cpuSpeed = 8;
bool _hasEvent[1369]; bool _hasEvent[1369];
uint8_t _masterClockTable[2][0x10000]; uint8_t _masterClockTable[2][0x10000];

View file

@ -33,9 +33,6 @@ Ppu::Ppu(Console* console)
_console = console; _console = console;
_vram = new uint16_t[Ppu::VideoRamSize >> 1]; _vram = new uint16_t[Ppu::VideoRamSize >> 1];
_console->GetSettings()->InitializeRam(_vram, Ppu::VideoRamSize);
_console->GetSettings()->InitializeRam(_cgram, Ppu::CgRamSize);
_console->GetSettings()->InitializeRam(_oamRam, Ppu::SpriteRamSize);
_outputBuffers[0] = new uint16_t[512 * 478]; _outputBuffers[0] = new uint16_t[512 * 478];
_outputBuffers[1] = new uint16_t[512 * 478]; _outputBuffers[1] = new uint16_t[512 * 478];
@ -67,9 +64,9 @@ void Ppu::PowerOn()
_cgramAddress = 0; _cgramAddress = 0;
memset(_vram, 0, Ppu::VideoRamSize); _console->GetSettings()->InitializeRam(_vram, Ppu::VideoRamSize);
memset(_oamRam, 0, Ppu::SpriteRamSize); _console->GetSettings()->InitializeRam(_cgram, Ppu::CgRamSize);
memset(_cgram, 0, Ppu::CgRamSize); _console->GetSettings()->InitializeRam(_oamRam, Ppu::SpriteRamSize);
memset(_spriteIndexes, 0xFF, sizeof(_spriteIndexes)); memset(_spriteIndexes, 0xFF, sizeof(_spriteIndexes));
@ -462,7 +459,6 @@ bool Ppu::ProcessEndOfScanline(uint16_t hClock)
(_console->GetSettings()->GetEmulationSpeed() == 0 || _console->GetSettings()->GetEmulationSpeed() > 150) && (_console->GetSettings()->GetEmulationSpeed() == 0 || _console->GetSettings()->GetEmulationSpeed() > 150) &&
_frameSkipTimer.GetElapsedMS() < 10 _frameSkipTimer.GetElapsedMS() < 10
); );
if(!_skipRender) { if(!_skipRender) {
//If we're not skipping this frame, reset the high resolution flag //If we're not skipping this frame, reset the high resolution flag
_useHighResOutput = false; _useHighResOutput = false;

View file

@ -24,7 +24,7 @@ private:
MemoryManager* _memoryManager; MemoryManager* _memoryManager;
//Temporary data used for the tilemap/tile fetching //Temporary data used for the tilemap/tile fetching
LayerData _layerData[4]; LayerData _layerData[4] = {};
uint16_t _hOffset = 0; uint16_t _hOffset = 0;
uint16_t _vOffset = 0; uint16_t _vOffset = 0;
uint16_t _fetchBgStart = 0; uint16_t _fetchBgStart = 0;

View file

@ -110,7 +110,7 @@ testhelper: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
$(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o testhelper TestHelper/*.cpp InteropDLL/ConsoleWrapper.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB) $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o testhelper TestHelper/*.cpp InteropDLL/ConsoleWrapper.cpp $(SEVENZIPOBJ) $(LUAOBJ) $(LINUXOBJ) $(LIBEVDEVOBJ) $(UTILOBJ) $(COREOBJ) -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB)
mv testhelper TestHelper/$(OBJFOLDER) mv testhelper TestHelper/$(OBJFOLDER)
pgohelper: pgohelper: InteropDLL/$(OBJFOLDER)/$(SHAREDLIB)
mkdir -p PGOHelper/$(OBJFOLDER) && cd PGOHelper/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o pgohelper ../PGOHelper.cpp ../../bin/pgohelperlib.so -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB) mkdir -p PGOHelper/$(OBJFOLDER) && cd PGOHelper/$(OBJFOLDER) && $(CPPC) $(GCCOPTIONS) -Wl,-z,defs -o pgohelper ../PGOHelper.cpp ../../bin/pgohelperlib.so -pthread $(FSLIB) $(SDL2LIB) $(LIBEVDEVLIB)
SevenZip/$(OBJFOLDER)/%.o: SevenZip/%.c SevenZip/$(OBJFOLDER)/%.o: SevenZip/%.c