Memory init code ported to C (thanks kode54). SPC RAM hopefully should now be initilized correctly (thanks Overload).

This commit is contained in:
n-a-c-h
2003-10-31 13:34:14 +00:00
parent 31f37b2530
commit da0a48e65a
4 changed files with 78 additions and 77 deletions

View File

@@ -69,7 +69,7 @@ EXTSYM cvidmode, antienab, smallscreenon, smallscreence,NetQuit
EXTSYM soundon, StereoSound, SoundQuality, MusicRelVol EXTSYM soundon, StereoSound, SoundQuality, MusicRelVol
EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal
EXTSYM t1cc, LoadDir, SRAMDir, LoadDrive,SRAMDrive, initsnes, romloadskip 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 SetupROM,CheckROMType, romdata, ForcePal, ramsize, ramsizeand, curromsize
EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop
EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ

View File

@@ -261,8 +261,10 @@ GUIloadfilename:
add edi,4 add edi,4
dec ecx dec ecx
jnz .n jnz .n
EXTSYM clearmem2
pushad
call clearmem2 call clearmem2
popad
mov dword[nmiprevaddrl],0 mov dword[nmiprevaddrl],0
mov dword[nmiprevaddrh],0 mov dword[nmiprevaddrh],0
mov dword[nmirept],0 mov dword[nmirept],0

View File

@@ -192,7 +192,10 @@ NEWSYM init
dec ecx dec ecx
jnz .rbackupl jnz .rbackupl
mov byte[virqnodisable],0 mov byte[virqnodisable],0
EXTSYM clearmem
pushad
call clearmem call clearmem
popad
call inittable call inittable
call inittableb call inittableb
call inittablec call inittablec
@@ -2887,75 +2890,6 @@ NEWSYM procexecloop
NEWSYM changeexecloop NEWSYM changeexecloop
ret 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) ; Print Hexadecimal (16-bit/8-bit)
;******************************************************* ;*******************************************************

View File

@@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <string.h>
//C++ style code in C //C++ style code in C
#define bool unsigned char #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 <string.h>
extern unsigned char disablehdma; extern unsigned char disablehdma;
extern unsigned char Offby1line; extern unsigned char Offby1line;
extern unsigned char CacheCheckSkip; extern unsigned char CacheCheckSkip;
@@ -373,7 +441,6 @@ extern unsigned char hdmaearlstart;
extern unsigned int WindowDisables; extern unsigned int WindowDisables;
extern unsigned char ClearScreenSkip; extern unsigned char ClearScreenSkip;
extern unsigned char ENVDisable; extern unsigned char ENVDisable;
extern unsigned char *spcRam;
extern unsigned char latchyr; extern unsigned char latchyr;
extern unsigned char cycpb268; extern unsigned char cycpb268;
extern unsigned char cycpb358; extern unsigned char cycpb358;
@@ -388,8 +455,6 @@ extern unsigned char opexec358cph;
extern unsigned char DSP1Type; extern unsigned char DSP1Type;
extern unsigned int ewj2hack; extern unsigned int ewj2hack;
extern unsigned char cycpl; extern unsigned char cycpl;
extern unsigned short ramsize;
extern unsigned short ramsizeand;
void headerhack() void headerhack()
{ {