diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index ac1a2396..50d17304 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -69,7 +69,7 @@ EXTSYM cvidmode, antienab, smallscreenon, smallscreence,NetQuit EXTSYM soundon, StereoSound, SoundQuality, MusicRelVol EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal EXTSYM t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip -EXTSYM fname, makeextension, sram, clearmem2, loadfileGUI, GUIloadfailed +EXTSYM fname, makeextension, sram, loadfileGUI, GUIloadfailed EXTSYM SetupROM,CheckROMType, romdata, ForcePal, ramsize, ramsizeand, curromsize EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index 4a50bf06..6f7875e6 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -261,8 +261,10 @@ GUIloadfilename: add edi,4 dec ecx jnz .n + EXTSYM clearmem2 + pushad call clearmem2 - + popad mov dword[nmiprevaddrl],0 mov dword[nmiprevaddrh],0 mov dword[nmirept],0 diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index fd7172a6..0989c85f 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -192,7 +192,10 @@ NEWSYM init dec ecx jnz .rbackupl mov byte[virqnodisable],0 + EXTSYM clearmem + pushad call clearmem + popad call inittable call inittableb call inittablec @@ -2887,75 +2890,6 @@ NEWSYM procexecloop NEWSYM changeexecloop ret -;******************************************************* -; Clear Memory -;******************************************************* -;vidbuffera resb 131072 -;romdataa resb 4194304+32768+2097152 -;wramdataa resb 65536 -;ram7fa resb 65536 -;vrama resb 65536 -;srama resb 32768 -;debugbufa resb 80000 -;regptra resb 49152 -;regptwa resb 49152 -;vcache2ba resb 262144 -;vcache4ba resb 131072 -;vcache8ba resb 65536 - -%macro helpclearmem2 2 - mov edi,%1 - mov ecx,%2 - rep stosd -%endmacro - - -NEWSYM clearmem - xor eax,eax - helpclearmem [vidbuffer], 131072 - helpclearmem wramdataa, 65536 - helpclearmem ram7fa, 65536 - helpclearmem [vram], 65536 - helpclearmem srama, 65536 - helpclearmem debugbufa, 80000 - helpclearmem regptra, 49152 - helpclearmem regptwa, 49152 - helpclearmem [vcache2b], 262144 - helpclearmem [vcache4b], 131072 - helpclearmem [vcache8b], 65536 - helpclearmem vidmemch2, 4096 - helpclearmem vidmemch4, 4096 - helpclearmem vidmemch8, 4096 - helpclearmem pal16b, 1024 - helpclearmem pal16bcl, 1024 - helpclearmem pal16bclha, 1024 - mov eax,0FFFFh - helpclearmem2 pal16bxcl, 256 - xor al,al - mov al,0FFh - mov edi,[romdata] - mov ecx,4194304+32768 - cmp byte[Sup48mbit],0 - je .no48mb - add ecx,2097152 -.no48mb - cmp byte[Sup16mbit],0 - je .no16mb - sub ecx,2097152 -.no16mb - rep stosb -; ret -NEWSYM clearmem2 - mov edi,[sram] - mov eax,0FFFFFFFFh - mov ecx,8192*2 - rep stosd - mov al,0FFh - mov edi,spcRam - mov ecx,65472 - rep stosb - ret - ;******************************************************* ; Print Hexadecimal (16-bit/8-bit) ;******************************************************* diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index dc3a0921..eb28e6d9 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ - +#include //C++ style code in C #define bool unsigned char @@ -352,6 +352,76 @@ void MirrorROM() } +//Memory Setup functions +extern unsigned char wramdataa[65536]; +extern unsigned char ram7fa[65536]; +extern unsigned char srama[65536]; +extern unsigned char debugbufa[80000]; +extern unsigned char regptra[49152]; +extern unsigned char regptwa[49152]; +extern unsigned char vidmemch2[4096]; +extern unsigned char vidmemch4[4096]; +extern unsigned char vidmemch8[4096]; +extern unsigned char pal16b[1024]; +extern unsigned char pal16bcl[1024]; +extern unsigned char pal16bclha[1024]; +extern unsigned char pal16bxcl[256]; +extern unsigned char spcRam[65472]; + +extern unsigned char *sram; +extern unsigned char *vidbuffer; +extern unsigned char *vram; +extern unsigned char *vcache2b; +extern unsigned char *vcache4b; +extern unsigned char *vcache8b; + +void clearmem() +{ + memset(vidbuffer, 0, 131072); + memset(wramdataa, 0, 65536); + memset(ram7fa, 0, 65536); + memset(vram, 0, 65536); + memset(srama, 0, 65536); + memset(debugbufa, 0, 80000); + memset(regptra, 0, 49152); + memset(regptwa, 0, 49152); + memset(vcache2b, 0, 262144); + memset(vcache4b, 0, 131072); + memset(vcache8b, 0, 65536); + memset(vidmemch2, 0, 4096); + memset(vidmemch4, 0, 4096); + memset(vidmemch8, 0, 4096); + memset(pal16b, 0, 1024); + memset(pal16bcl, 0, 1024); + memset(pal16bclha, 0, 1024); + memset(pal16bxcl, 0xFF, 256); + memset(romdata, 0xFF, maxromspace+32768); +} + +void clearmem2() +{ + /* + SPC RAM is filled with alternating 0x00 and 0xFF for 0x20 bytes. + + Basically the SPCRAM is initialized as follows: + xx00 - xx1f: $00 + xx20 - xx3f: $ff + xx40 - xx5f: $00 + xx60 - xx7f: $ff + xx80 - xx9f: $00 + xxa0 - xxbf: $ff + xxc0 - xxdf: $00 + xxe0 - xxff: $ff + */ + unsigned int i; + for (i = 0; i < 65472; i += 0x40) + { + memset(spcRam+i, 0, 0x20); + memset(spcRam+i+0x20, 0xFF, 0x20); + } + + memset(sram, 0xFF, 16384); +} /* @@ -362,8 +432,6 @@ Would be nice to trash this section in the future */ -#include - extern unsigned char disablehdma; extern unsigned char Offby1line; extern unsigned char CacheCheckSkip; @@ -373,7 +441,6 @@ extern unsigned char hdmaearlstart; extern unsigned int WindowDisables; extern unsigned char ClearScreenSkip; extern unsigned char ENVDisable; -extern unsigned char *spcRam; extern unsigned char latchyr; extern unsigned char cycpb268; extern unsigned char cycpb358; @@ -388,8 +455,6 @@ extern unsigned char opexec358cph; extern unsigned char DSP1Type; extern unsigned int ewj2hack; extern unsigned char cycpl; -extern unsigned short ramsize; -extern unsigned short ramsizeand; void headerhack() {