Memory init code ported to C (thanks kode54). SPC RAM hopefully should now be initilized correctly (thanks Overload).
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
;*******************************************************
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user