diff --git a/zsnes/src/cpu/dspproc.asm b/zsnes/src/cpu/dspproc.asm index 4c8f5549..d039ba2e 100644 --- a/zsnes/src/cpu/dspproc.asm +++ b/zsnes/src/cpu/dspproc.asm @@ -2038,23 +2038,23 @@ NoisePtr resd 1 ; used only in dspproc.asm SECTION .data +ALIGN32 + Filter dd 0,0,240,0,488,-240,460,-208 -SECTION .bss -prev0 resd 1 ; previous value 1 -prev1 resd 1 ; previous value 2 -nextsamp resd 1 ; next sample -filter0 resd 1 ; filter 0 -filter1 resd 1 ; filter 1 -bshift resd 1 -sampleleft resd 1 ; 8 bytes/sample +prev0 dd 0 ; previous value 1 +prev1 dd 0 ; previous value 2 +nextsamp dd 0 ; next sample +filter0 dd 0 ; filter 0 +filter1 dd 0 ; filter 1 +bshift dd 0 +sampleleft dd 0 ; 8 bytes/sample -lastbl resd 1 ; Last block if = 1 -loopbl resd 1 ; Loop if = 1 -usenoisedata resd 1 +lastbl dd 0 ; Last block if = 1 +loopbl dd 0 ; Loop if = 1 +usenoisedata dd 0 + -SECTION .data -ALIGN32 VolumeTableD db 0,3,6,9,12,15,17,18,19,21,22,23,24,24,26,28,30,31,33,35,36,38,40,41,43,45,46,48,49 @@ -2568,11 +2568,6 @@ NEWSYM FIRTAPVal5, resd 1 NEWSYM FIRTAPVal6, resd 1 NEWSYM FIRTAPVal7, resd 1 -SECTION .data -ALIGN32 -NEWSYM MaxEcho, dd 172 - -SECTION .bss NEWSYM CEchoPtr, resd 1 NEWSYM EchoFB, resd 1 @@ -2626,9 +2621,13 @@ NEWSYM Voice5FirstBlock, resb 1 NEWSYM Voice6FirstBlock, resb 1 NEWSYM Voice7FirstBlock, resb 1 +marksave2: + SECTION .data ALIGN32 +NEWSYM MaxEcho, dd 172 + ; |AR Time 0 to 1|DR|Time 1 to SL|SL|Ratio| SR Time 1to 1/10| ;--------------------------------------------------------------------- ; |0 | 4.1 sec | 0| 1.2 sec | 0| 1/8 | 0| INF |10|1.2 sec @@ -2710,8 +2709,10 @@ NEWSYM AdsrSustLevLoc, db 58,39,27,19,13,8,3,1 dspsave equ marksave-BRRBuffer dspconvb equ marksave-Voice0Freq +dspsave2 equ marksave2-echoon0 NEWSYM PHdspsave, dd dspsave NEWSYM PHdspconvb, dd dspconvb +NEWSYM PHdspsave2, dd dspsave2 SECTION .bss spc700temp resd 2 diff --git a/zsnes/src/cpu/zstate.c b/zsnes/src/cpu/zstate.c index 41cd4c60..ee5629a1 100755 --- a/zsnes/src/cpu/zstate.c +++ b/zsnes/src/cpu/zstate.c @@ -60,8 +60,8 @@ static void copy_spc_data(unsigned char **buffer, void (*copy_func)(unsigned cha { //SPC stuff, DSP stuff copy_func(buffer, spcRam, PHspcsave); - copy_func(buffer, BRRBuffer, PHdspsave); - copy_func(buffer, DSPMem, sizeof(DSPMem)); + copy_func(buffer, &BRRBuffer, PHdspsave); + copy_func(buffer, &DSPMem, sizeof(DSPMem)); } static void copy_extra_data(unsigned char **buffer, void (*copy_func)(unsigned char **, void *, size_t)) @@ -97,6 +97,10 @@ static void copy_state_data(unsigned char *buffer, void (*copy_func)(unsigned ch if (spcon) { copy_spc_data(&buffer, copy_func); + if (buffer) //Rewind stuff + { + copy_func(&buffer, &echoon0, PHdspsave2); + } } if (C4Enable) diff --git a/zsnes/src/gblvars.h b/zsnes/src/gblvars.h index f1025c43..6b93c47a 100644 --- a/zsnes/src/gblvars.h +++ b/zsnes/src/gblvars.h @@ -32,10 +32,10 @@ extern unsigned int soundcycleft, spc700read, timer2upd, xa, PHnum2writesfxreg; extern unsigned int spcnumread, spchalted, opcd, HIRQCycNext, oamaddr; extern unsigned int SfxR0, ReadHead, *setaramdata, ramsize, *sram; extern unsigned int tempesi, tempedi, tempedx, tempebp; -extern unsigned int SPCMultA, PHnum2writespc7110reg; +extern unsigned int SPCMultA, PHnum2writespc7110reg, PHdspsave2; extern unsigned char sndrot, spcRam[65472]; extern unsigned char DSPMem[256], SA1Status, *SA1RAMArea, DSP1Type, DSP1COp; -extern unsigned char prevoamptr, BRRBuffer[32], *romdata, curcyc; +extern unsigned char prevoamptr, BRRBuffer[32], *romdata, curcyc, echoon0; extern unsigned char vidmemch4[4096], vidmemch8[4096], vidmemch2[4096]; extern bool C4Enable, SFXEnable, SA1Enable, SPC7110Enable, SETAEnable, spcon, SRAMState; diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index 26cfc8fd..17ee905a 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -131,6 +131,7 @@ EXTSYM SetupSramSize EXTSYM IntlEHi EXTSYM CHIPBATT,SFXEnable,C4Enable,SPC7110Enable,RTCEnable,SA1Enable,SDD1Enable,OBCEnable EXTSYM SETAEnable,ST18Enable,SGBEnable,DSP1Enable,DSP2Enable,DSP3Enable,DSP4Enable,BSEnable +EXTSYM clearvidsound EXTSYM calculate_state_sizes,InitRewindVars @@ -1582,12 +1583,9 @@ NEWSYM init65816 mov dword[ram7fa+65528],01010101h mov dword[ram7fa+65532],01010101h .notbsx2 - xor eax,eax - helpclearmem [vram], 65536 - helpclearmem vidmemch2, 4096 - helpclearmem vidmemch4, 4096 - helpclearmem vidmemch8, 4096 - + pushad + call clearvidsound + popad mov dword[wramreadptr],getwram1fff mov dword[wramwriteptr],setwram1fff ret diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index 04222c25..3f3c210b 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -1334,6 +1334,20 @@ void clearmem2() clearSPCRAM(); } +extern unsigned char BRRBuffer[32]; +extern unsigned char echoon0; +extern unsigned int PHdspsave; +extern unsigned int PHdspsave2; + +void clearvidsound() +{ + memset(vram, 0, 65536); + memset(vidmemch2, 0, 4096); + memset(vidmemch4, 0, 4096); + memset(vidmemch8, 0, 4096); + memset(&BRRBuffer, 0, PHdspsave); + memset(&echoon0, 0, PHdspsave2); +} /*