From cfe482cd525473641d6025effc1e8fe32905b7ab Mon Sep 17 00:00:00 2001 From: tomcw Date: Sun, 11 Oct 2020 21:29:26 +0100 Subject: [PATCH] NTSC: fix rare crash in NTSC_SetVideoMode() after a VM restart --- source/NTSC.cpp | 7 +++++++ source/NTSC.h | 1 + source/Video.cpp | 2 ++ 3 files changed, 10 insertions(+) diff --git a/source/NTSC.cpp b/source/NTSC.cpp index d066bcb6..e9fc3171 100644 --- a/source/NTSC.cpp +++ b/source/NTSC.cpp @@ -2191,6 +2191,13 @@ _mono: void GenerateVideoTables( void ); void GenerateBaseColors(baseColors_t pBaseNtscColors); +void NTSC_Destroy(void) +{ + // After a VM restart, this will point to an old g_pFramebufferbits + // - if it's now unmapped then this can cause a crash in NTSC_SetVideoMode()! + g_pVideoAddress = 0; +} + void NTSC_VideoInit( uint8_t* pFramebuffer ) // wsVideoInit { make_csbits(); diff --git a/source/NTSC.h b/source/NTSC.h index a5a61440..26386e4d 100644 --- a/source/NTSC.h +++ b/source/NTSC.h @@ -11,6 +11,7 @@ extern void NTSC_VideoClockResync( const DWORD dwCyclesThisFrame ); extern uint16_t NTSC_VideoGetScannerAddress( const ULONG uExecutedCycles ); extern uint16_t NTSC_VideoGetScannerAddressForDebugger(void); + extern void NTSC_Destroy(void); extern void NTSC_VideoInit( uint8_t *pFramebuffer ); extern void NTSC_VideoReinitialize( DWORD cyclesThisFrame, bool bInitVideoScannerAddress ); extern void NTSC_VideoInitAppleType(); diff --git a/source/Video.cpp b/source/Video.cpp index 9831fa14..d3879144 100644 --- a/source/Video.cpp +++ b/source/Video.cpp @@ -385,6 +385,8 @@ void VideoDestroy () { DeleteObject(g_hLogoBitmap); g_hLogoBitmap = (HBITMAP)0; } + + NTSC_Destroy(); } //===========================================================================