From 1b8973649ffd51d2957e9c5281d4473d8a11da56 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 9 Apr 2010 20:34:03 +0000 Subject: [PATCH] fix spu loadstate crashes --- desmume/src/SPU.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/desmume/src/SPU.cpp b/desmume/src/SPU.cpp index dc71e68d2..4a8209866 100644 --- a/desmume/src/SPU.cpp +++ b/desmume/src/SPU.cpp @@ -250,15 +250,19 @@ void SPU_Reset(void) int i; SPU_core->reset(); - if(SPU_user) SPU_user->reset(); - if(SNDCore && SPU_user) { - SNDCore->DeInit(); - SNDCore->Init(SPU_user->bufsize*2); - SNDCore->SetVolume(volume); - //todo - check success? + if(SPU_user) { + if(SNDCore) + { + SNDCore->DeInit(); + SNDCore->Init(SPU_user->bufsize*2); + SNDCore->SetVolume(volume); + } + SPU_user->reset(); } + //zero - 09-apr-2010: this concerns me, regarding savestate synch. + //After 0.9.6, lets experiment with removing it and just properly zapping the spu instead // Reset Registers for (i = 0x400; i < 0x51D; i++) T1WriteByte(MMU.ARM7_REG, i, 0); @@ -275,6 +279,8 @@ void SPU_struct::reset() memset((void *)channels, 0, sizeof(channel_struct) * 16); + reconstruct(®s); + for(int i = 0; i < 16; i++) { channels[i].num = i;