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 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

View File

@@ -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

View File

@@ -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)
;*******************************************************

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.
*/
#include <string.h>
//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 <string.h>
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()
{