diff --git a/Core/Debugger/Debugger.cpp b/Core/Debugger/Debugger.cpp index d7584f8a..0b8bb397 100644 --- a/Core/Debugger/Debugger.cpp +++ b/Core/Debugger/Debugger.cpp @@ -588,7 +588,9 @@ void Debugger::ProcessEvent(EventType type, std::optional cpuTypeOpt) break; case EventType::StartFrame: { - _emu->GetNotificationManager()->SendNotification(ConsoleNotificationType::EventViewerRefresh, (void*)evtCpuType); + if(!_emu->IsDebuggerBlocked()) { + _emu->GetNotificationManager()->SendNotification(ConsoleNotificationType::EventViewerRefresh, (void*)evtCpuType); + } BaseEventManager* evtMgr = GetEventManager(evtCpuType); if(evtMgr) { evtMgr->ClearFrameEvents(); diff --git a/Core/Debugger/PpuTools.cpp b/Core/Debugger/PpuTools.cpp index e8305b69..1c233368 100644 --- a/Core/Debugger/PpuTools.cpp +++ b/Core/Debugger/PpuTools.cpp @@ -403,7 +403,9 @@ void PpuTools::UpdateViewers(uint16_t scanline, uint16_t cycle) for(auto updateTiming : _updateTimings) { ViewerRefreshConfig cfg = updateTiming.second; if(cfg.Cycle == cycle && cfg.Scanline == scanline) { - _emu->GetNotificationManager()->SendNotification(ConsoleNotificationType::ViewerRefresh, (void*)(uint64_t)updateTiming.first); + if(!_emu->IsDebuggerBlocked()) { + _emu->GetNotificationManager()->SendNotification(ConsoleNotificationType::ViewerRefresh, (void*)(uint64_t)updateTiming.first); + } } } } diff --git a/Core/Shared/Emulator.h b/Core/Shared/Emulator.h index d53412a0..d962bb02 100644 --- a/Core/Shared/Emulator.h +++ b/Core/Shared/Emulator.h @@ -180,6 +180,7 @@ public: void Unlock(); bool IsThreadPaused(); + bool IsDebuggerBlocked() { return _blockDebuggerRequestCount > 0; } void SuspendDebugger(bool release); void Serialize(ostream& out, bool includeSettings, int compressionLevel = 1); diff --git a/UI/Debugger/ViewModels/SpriteViewerViewModel.cs b/UI/Debugger/ViewModels/SpriteViewerViewModel.cs index eb9a8087..7b06e31c 100644 --- a/UI/Debugger/ViewModels/SpriteViewerViewModel.cs +++ b/UI/Debugger/ViewModels/SpriteViewerViewModel.cs @@ -528,7 +528,8 @@ namespace Mesen.Debugger.ViewModels }); } - _coreData.Palette = DebugApi.GetPaletteInfo(CpuType); + DebugPaletteInfo palette = DebugApi.GetPaletteInfo(CpuType); + _coreData.Palette = palette.ColorCount > 0 ? palette : null; } RefreshTab(); } diff --git a/UI/Debugger/ViewModels/TileViewerViewModel.cs b/UI/Debugger/ViewModels/TileViewerViewModel.cs index 472599e5..767f1ed4 100644 --- a/UI/Debugger/ViewModels/TileViewerViewModel.cs +++ b/UI/Debugger/ViewModels/TileViewerViewModel.cs @@ -72,6 +72,7 @@ namespace Mesen.Debugger.ViewModels private byte[] _coreSourceData = Array.Empty(); private byte[] _sourceData = Array.Empty(); private bool _refreshPending; + private bool _inGameLoaded; [Obsolete("For designer only")] public TileViewerViewModel() : this(CpuType.Snes, new PictureViewer(), null) { } @@ -409,7 +410,9 @@ namespace Mesen.Debugger.ViewModels private void Config_PropertyChanged(object? sender, PropertyChangedEventArgs e) { - RefreshTab(); + if(!_inGameLoaded) { + RefreshTab(); + } } public void RefreshData() @@ -460,7 +463,7 @@ namespace Mesen.Debugger.ViewModels private void InternalRefreshTab() { - if(Disposed) { + if(Disposed || PaletteColors.Length == 0) { return; } @@ -650,8 +653,10 @@ namespace Mesen.Debugger.ViewModels public void OnGameLoaded() { Dispatcher.UIThread.Post(() => { + _inGameLoaded = true; InitForCpuType(); RefreshData(); + _inGameLoaded = false; }); } diff --git a/UI/Debugger/ViewModels/TilemapViewerViewModel.cs b/UI/Debugger/ViewModels/TilemapViewerViewModel.cs index 81a1445d..06e4a549 100644 --- a/UI/Debugger/ViewModels/TilemapViewerViewModel.cs +++ b/UI/Debugger/ViewModels/TilemapViewerViewModel.cs @@ -415,7 +415,9 @@ namespace Mesen.Debugger.ViewModels private void Config_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { - RefreshTab(); + if(!_inGameLoaded) { + RefreshTab(); + } } [MemberNotNull(nameof(ViewerBitmap))] @@ -487,7 +489,7 @@ namespace Mesen.Debugger.ViewModels _coreData.CopyTo(_data); } - if(_data.PpuState == null || _data.PpuToolsState == null) { + if(_data.PpuState == null || _data.PpuToolsState == null || _data.RgbPalette.Length == 0) { _refreshPending = false; return; }