diff --git a/source/NTSC.cpp b/source/NTSC.cpp index 80e8ef91..05b99186 100644 --- a/source/NTSC.cpp +++ b/source/NTSC.cpp @@ -2191,6 +2191,13 @@ _mono: static void GenerateVideoTables( void ); static 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(); } //===========================================================================