32x, fix disabling via ADEN (memory leak, mcd)

This commit is contained in:
kub 2023-07-03 23:29:51 +02:00
parent 9f7abd68df
commit 9961d9fdb8
3 changed files with 11 additions and 6 deletions

View file

@ -129,11 +129,15 @@ void Pico32xShutdown(void)
sh2_finish(&msh2); sh2_finish(&msh2);
sh2_finish(&ssh2); sh2_finish(&ssh2);
Pico32x.vdp_regs[6] = P32XS_RV; Pico32x.vdp_regs[0] |= P32XS_nRES;
Pico32x.vdp_regs[6] |= P32XS_RV;
rendstatus_old = -1; rendstatus_old = -1;
PicoIn.AHW &= ~PAHW_32X; PicoIn.AHW &= ~PAHW_32X;
if (PicoIn.AHW & PAHW_MCD)
PicoMemSetupCD();
else
PicoMemSetup(); PicoMemSetup();
emu_32x_startup(); emu_32x_startup();
} }
@ -209,6 +213,7 @@ void PicoPower32x(void)
void PicoUnload32x(void) void PicoUnload32x(void)
{ {
if (PicoIn.AHW & PAHW_32X)
Pico32xShutdown(); Pico32xShutdown();
if (Pico32xMem != NULL) if (Pico32xMem != NULL)
@ -464,7 +469,7 @@ void sync_sh2s_normal(unsigned int m68k_target)
elprintf(EL_32X, "sh2 sync to %u", m68k_target); elprintf(EL_32X, "sh2 sync to %u", m68k_target);
if (!(Pico32x.regs[0] & P32XS_nRES) || !(Pico32x.regs[0] & P32XS_ADEN)) { if ((Pico32x.regs[0] & (P32XS_nRES|P32XS_ADEN)) != (P32XS_nRES|P32XS_ADEN)) {
msh2.m68krcycles_done = ssh2.m68krcycles_done = m68k_target; msh2.m68krcycles_done = ssh2.m68krcycles_done = m68k_target;
return; // rare return; // rare
} }

View file

@ -908,7 +908,6 @@ void PicoCartUnload(void)
PicoCartUnloadHook = NULL; PicoCartUnloadHook = NULL;
} }
if (PicoIn.AHW & PAHW_32X)
PicoUnload32x(); PicoUnload32x();
if (Pico.rom != NULL) { if (Pico.rom != NULL) {

View file

@ -995,6 +995,7 @@ void Pico32xInit(void);
void PicoPower32x(void); void PicoPower32x(void);
void PicoReset32x(void); void PicoReset32x(void);
void Pico32xStartup(void); void Pico32xStartup(void);
void Pico32xShutdown(void);
void PicoUnload32x(void); void PicoUnload32x(void);
void PicoFrame32x(void); void PicoFrame32x(void);
void Pico32xStateLoaded(int is_early); void Pico32xStateLoaded(int is_early);