Some code cleanup, port of StateLoader to C, some statesaver + rewind fixes.

This commit is contained in:
grinvader
2005-01-28 22:47:14 +00:00
parent 6d0c52c102
commit 34ba464d8b
16 changed files with 522 additions and 623 deletions

View File

@@ -1605,22 +1605,6 @@ NEWSYM SA1Reset
mov word[SA1Overflow],0 mov word[SA1Overflow],0
ret ret
NEWSYM UpdateBanksSDD1
pushad
cmp dword[SDD1BankA],0
je .nobank
mov al,[SDD1BankA]
call sdd14804w
mov al,[SDD1BankA+1]
call sdd14805w
mov al,[SDD1BankA+2]
call sdd14806w
mov al,[SDD1BankA+3]
call sdd14807w
.nobank
popad
ret
%macro BankSwitch 4 %macro BankSwitch 4
push ecx push ecx
push edx push edx

View File

@@ -1318,7 +1318,6 @@ COPemulmode
test byte[curexecstate],01h test byte[curexecstate],01h
jz .nodis65816 jz .nodis65816
and byte[curexecstate],0FEh and byte[curexecstate],0FEh
call changeexecloop
.nodis65816 .nodis65816
cmp byte[curexecstate],0 cmp byte[curexecstate],0
jne .nn jne .nn

View File

@@ -1317,7 +1317,6 @@ COPemulmode
test byte[curexecstate],01h test byte[curexecstate],01h
jz .nodis65816 jz .nodis65816
and byte[curexecstate],0FEh and byte[curexecstate],0FEh
call changeexecloop
.nodis65816 .nodis65816
cmp byte[curexecstate],0 cmp byte[curexecstate],0
jne .nn jne .nn

View File

@@ -1331,7 +1331,6 @@ COPemulmode
test byte[curexecstate],01h test byte[curexecstate],01h
jz near .nodis65816 jz near .nodis65816
and byte[curexecstate],0FEh and byte[curexecstate],0FEh
call changeexecloop
.nodis65816 .nodis65816
cmp byte[curexecstate],0 cmp byte[curexecstate],0
jne near .nn jne near .nn

View File

@@ -2225,7 +2225,7 @@ NEWSYM WDSPReg6B ; Voice 6
ret ret
SECTION .bss SECTION .bss
spcres resb 1 NEWSYM spcres, resb 1
SECTION .text SECTION .text
NEWSYM WDSPReg6C ; Voice 6 NEWSYM WDSPReg6C ; Voice 6

View File

@@ -442,27 +442,6 @@ NEWSYM conv2speedb
ret ret
%endif %endif
%macro initpitchm 1
mov ax,[DSPMem+02h+%1*10h]
mov word[Voice0Pitch+%1*2],ax
And EAX, 03FFFh
Mul dword [dspPAdj]
ShRD EAX,EDX,8
mov [Voice0Freq+%1*4],eax
; modpitch
%endmacro
NEWSYM initpitch
initpitchm 0
initpitchm 1
initpitchm 2
initpitchm 3
initpitchm 4
initpitchm 5
initpitchm 6
initpitchm 7
ret
%if 0 %if 0
%macro fixdspm 1 %macro fixdspm 1
mov esi,%1 mov esi,%1
@@ -2210,13 +2189,13 @@ NEWSYM Voice6Freq, resd 1 ; Frequency of Voice 6 (Delta Freq)
NEWSYM Voice7Freq, resd 1 ; Frequency of Voice 7 (Delta Freq) NEWSYM Voice7Freq, resd 1 ; Frequency of Voice 7 (Delta Freq)
NEWSYM Voice0Pitch, resw 1 ; Previous Pitch for Voice 0 NEWSYM Voice0Pitch, resw 1 ; Previous Pitch for Voice 0
Voice1Pitch resw 1 ; Previous Pitch for Voice 1 NEWSYM Voice1Pitch, resw 1 ; Previous Pitch for Voice 1
Voice2Pitch resw 1 ; Previous Pitch for Voice 2 NEWSYM Voice2Pitch, resw 1 ; Previous Pitch for Voice 2
Voice3Pitch resw 1 ; Previous Pitch for Voice 3 NEWSYM Voice3Pitch, resw 1 ; Previous Pitch for Voice 3
Voice4Pitch resw 1 ; Previous Pitch for Voice 4 NEWSYM Voice4Pitch, resw 1 ; Previous Pitch for Voice 4
Voice5Pitch resw 1 ; Previous Pitch for Voice 5 NEWSYM Voice5Pitch, resw 1 ; Previous Pitch for Voice 5
Voice6Pitch resw 1 ; Previous Pitch for Voice 6 NEWSYM Voice6Pitch, resw 1 ; Previous Pitch for Voice 6
Voice7Pitch resw 1 ; Previous Pitch for Voice 7 NEWSYM Voice7Pitch, resw 1 ; Previous Pitch for Voice 7
NEWSYM Voice0Status, resb 1 ; 0=Not Playing 1=Playing NEWSYM Voice0Status, resb 1 ; 0=Not Playing 1=Playing
NEWSYM Voice1Status, resb 1 NEWSYM Voice1Status, resb 1

View File

@@ -120,7 +120,7 @@ EXTSYM SfxSFR,nosprincr
EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb
EXTSYM NetPlayNoMore EXTSYM NetPlayNoMore
EXTSYM statefileloc EXTSYM statefileloc
EXTSYM CHIPBATT,SaveSramData, BackupCVFrame, RestoreCVFrame EXTSYM CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
%ifdef OPENSPC %ifdef OPENSPC
EXTSYM OSPC_Run, ospc_cycle_frac EXTSYM OSPC_Run, ospc_cycle_frac
@@ -1073,7 +1073,12 @@ reexecuteb2:
jnz near savestate jnz near savestate
mov eax,[KeyLoadState] mov eax,[KeyLoadState]
test byte[pressed+eax],1 test byte[pressed+eax],1
jnz near loadstate jz .noloadstt0
pushad
call loadstate
popad
jmp reexecuteb
.noloadstt0
cmp byte[SSKeyPressed],1 cmp byte[SSKeyPressed],1
je near showmenu je near showmenu
cmp byte[SPCKeyPressed],1 cmp byte[SPCKeyPressed],1
@@ -1241,312 +1246,13 @@ SECTION .data
SECTION .bss SECTION .bss
cycpblblah resd 2 cycpblblah resd 2
SECTION .text
; Load State
NEWSYM stateloader
mov byte[MovieProcessing],0
mov byte[prevoamptr],0FFh
; Load 65816 status, etc.
mov bx,ax
mov ecx,[PHnum2writecpureg]
add dword[Totalbyteloaded],ecx
mov edx,zsmesg
call Read_File
cmp byte[versn],60
jb near .convert
; Load SPC timers
mov ecx,8
add dword[Totalbyteloaded],ecx
mov edx,cycpbl
call Read_File
; Load SNES PPU Register status
mov ecx,3019 ; 3019
add dword[Totalbyteloaded],ecx
mov edx,sndrot
call Read_File
cmp byte[versn],60
jne .not60
mov byte[ioportval],0FFh
.not60
; Load RAM (WRAM(128k),VRAM(64k),SRAM)
mov ecx,65536+65536
add dword[Totalbyteloaded],ecx
mov edx,[wramdata]
call Read_File
mov ecx,65536
add dword[Totalbyteloaded],ecx
mov edx,[vram]
call Read_File
cmp byte[spcon],0
je .nospcon
; Load SPC stuff
mov ecx,[PHspcsave]
add dword[Totalbyteloaded],ecx
mov edx,spcRam
call Read_File
; Load DSP stuff
mov ecx,[PHdspsave]
add dword[Totalbyteloaded],ecx
mov edx,BRRBuffer
call Read_File
; Load DSP Mem
mov ecx,256
add dword[Totalbyteloaded],ecx
mov edx,DSPMem
call Read_File
.nospcon
cmp byte[SFXEnable],1
jne near .nosfx
mov ecx,65536*2
add dword[Totalbyteloaded],ecx
mov edx,[sfxramdata]
call Read_File
mov ecx,[PHnum2writesfxreg]
add dword[Totalbyteloaded],ecx
mov edx,SfxR0
call Read_File
xor ecx,ecx
mov cl,[SfxPBR]
mov ecx,[SfxMemTable+ecx*4]
mov [SfxCPB],ecx
xor ecx,ecx
mov cl,[SfxROMBR]
mov ecx,[SfxMemTable+ecx*4]
mov [SfxCROM],ecx
xor ecx,ecx
mov cl,[SfxRAMBR]
shl ecx,16
add ecx,[sfxramdata]
mov dword [SfxRAMMem],ecx
mov ecx,[SfxCROM]
add [SfxRomBuffer],ecx
mov ecx,[SfxRAMMem]
add [SfxLastRamAdr],ecx
.nosfx
cmp byte[SETAEnable],1
jne near .noseta
mov ecx,4096
add dword[Totalbyteloaded],ecx
mov edx,[setaramdata]
call Read_File
; TODO: load the SetaCmdEnable? For completeness we should do it but currently we ignore it anyway.
.noseta
cmp byte[C4Enable],1
jne .noc4
mov ecx,2000h
add dword[Totalbyteloaded],ecx
mov edx,[C4Ram]
call Read_File
.noc4
cmp byte[SPC7110Enable],1
jne .nospc7110
mov edx,[romdata]
add edx,510000h
mov ecx,65536
call Read_File
mov edx,SPCMultA
mov ecx,[PHnum2writespc7110reg]
call Read_File
.nospc7110
cmp byte[SA1Enable],1
jne .nossa1
mov ecx,[PHnum2writesa1reg]
add dword[Totalbyteloaded],ecx
mov edx,SA1Mode
call Read_File
mov ecx,65536*2
add dword[Totalbyteloaded],ecx
mov edx,[SA1RAMArea]
call Read_File
; Convert back SA-1 stuff
pushad
call RestoreSA1
popad
call SA1UpdateDPage
.nossa1
cmp byte[SDD1Enable],1
jne .nosdd1
call UpdateBanksSDD1
.nosdd1
call Close_File
call repackfunct
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[nexthdma],0
; call headerhack
call initpitch
ret
.convert
; Load SNES PPU Register status
mov ecx,3019
mov edx,sndrot
call Read_File
; Load RAM (WRAM(128k),VRAM(64k),SRAM)
mov dword[cycpbl],0
mov dword[cycpblt],0
mov ah,[cycpbl2]
mov [cycpbl],ah
mov ah,[cycpblt2]
mov [cycpblt],ah
mov ecx,[ramsize]
add ecx,65536+65536+65536
mov edx,[wramdata]
call Read_File
cmp byte[spcon],0
je .nospconb
; Load SPC stuff
mov ecx,[PHspcsave]
mov edx,spcRam
call Read_File
; Load DSP stuff
mov ecx,32
mov edx,BRRBuffer
call Read_File
; Convert old to new data
; read/write 6, jump 2 for 8 times
mov edx,BRRPlace0
mov ecx,8
.loopconv
push edx
push ecx
mov ecx,4
call Read_File
pop ecx
pop edx
add edx,8
dec ecx
jnz .loopconv
;dspsave equ $-BRRBuffer
;dspconvb equ $-Voice0Freq
; Load DSP stuff
mov ecx,[PHdspsave]
sub ecx,64+32
sub ecx,8
mov edx,Voice0Freq
call Read_File
; Load DSP Mem
mov ecx,256
mov edx,DSPMem
call Read_File
.nospconb
call Close_File
call repackfunct
mov dword[cycpbl],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[nexthdma],0
call headerhack
call initpitch
ret
NEWSYM loadstate
mov byte[pressed+1],0
mov eax,[KeyLoadState]
mov byte[pressed+eax],2
mov byte[multchange],1
clim
%ifdef __LINUX__
pushad
call SRAMChdir
popad
%endif
; Get the state number
mov ebx,[statefileloc]
mov cl,[fnamest+ebx]
cmp cl,'t'
jne .writewhichstate
mov cl,'0'
.writewhichstate
mov [.loadmsg+6],cl
mov [.convmsg+6],cl
mov [.nfndmsg+21],cl
mov edx,fnamest+1
call Open_File
jc near .nofile
call stateloader
; Clear Cache Check
mov esi,vidmemch2
mov ecx,4096+4096+4096
.next
mov byte[esi],1
inc esi
dec ecx
jnz .next
cmp byte[versn],60
jb near .convert
mov dword[Msgptr],.loadmsg
jmp .noconvert
.convert
mov dword[Msgptr],.convmsg
mov byte[versn],60
mov byte[versn-2],'6'
.noconvert
mov eax,[MsgCount]
mov [MessageOn],eax
add dword[Curtableaddr],tableA
add dword[spcPCRam],spcRam
add dword[spcRamDP],spcRam
pushad
call ResetState
popad
call procexecloop
stim
jmp reexecuteb
.nofile
mov dword[Msgptr],.nfndmsg
mov eax,[MsgCount]
mov [MessageOn],eax
stim
jmp reexecuteb
SECTION .data SECTION .data
.loadmsg db 'STATE - LOADED.',0 NEWSYM txtloadmsg, db 'STATE - LOADED.',0
.convmsg db 'STATE - LOADED/CONVERTED',0 NEWSYM txtconvmsg, db 'STATE - TOO OLD.',0
.nfndmsg db 'UNABLE TO LOAD STATE -.',0 NEWSYM txtnfndmsg, db 'UNABLE TO LOAD STATE -.',0
SECTION .text SECTION .text
NEWSYM loadstate2
mov edx,fnamest+1
NEWSYM loadstate3
call Open_File
jc near .nofile
mov dword[Totalbyteloaded],0
call stateloader
; Clear Cache Check
mov esi,vidmemch2
mov ecx,4096+4096+4096
.next
mov byte[esi],1
inc esi
dec ecx
jnz .next
add dword[Curtableaddr],tableA
add dword[spcPCRam],spcRam
add dword[spcRamDP],spcRam
pushad
call ResetState
popad
call procexecloop
ret
.nofile
ret
;******************************************************* ;*******************************************************
; Int 08h vector ; Int 08h vector
;******************************************************* ;*******************************************************
@@ -3205,7 +2911,6 @@ NEWSYM cpuover
test byte[curexecstate],01h test byte[curexecstate],01h
jnz .dis65816 jnz .dis65816
or byte[curexecstate],01h or byte[curexecstate],01h
; call changeexecloop
.dis65816 .dis65816
cmp byte[CheatOn],1 cmp byte[CheatOn],1
je near .cheater je near .cheater
@@ -3407,7 +3112,6 @@ NEWSYM cpuover
test byte[curexecstate],01h test byte[curexecstate],01h
jnz .dis658162 jnz .dis658162
or byte[curexecstate],01h or byte[curexecstate],01h
; call changeexecloop
.dis658162 .dis658162
mov byte[doirqnext],0 mov byte[doirqnext],0
xor ebx,ebx xor ebx,ebx

View File

@@ -291,125 +291,6 @@ NEWSYM initregw
; video memory change buffer for caching (65536/16=4096) ; video memory change buffer for caching (65536/16=4096)
;vidmemch2, vidmemch4, vidmemch8. 4096 bytes each ;vidmemch2, vidmemch4, vidmemch8. 4096 bytes each
NEWSYM repackfunct
; Global/Echo Volumes
mov al,[DSPMem+0Ch]
call WDSPReg0C
mov al,[DSPMem+1Ch]
call WDSPReg1C
mov al,[DSPMem+2Ch]
call WDSPReg2C
mov al,[DSPMem+3Ch]
call WDSPReg3C
; Echo Values
mov al,[DSPMem+7Dh]
call WDSPReg7D
mov al,[DSPMem+0Dh]
call WDSPReg0D
; FIR Filter Values
mov al,[DSPMem+00Fh]
call WDSPReg0F
mov al,[DSPMem+01Fh]
call WDSPReg1F
mov al,[DSPMem+02Fh]
call WDSPReg2F
mov al,[DSPMem+03Fh]
call WDSPReg3F
mov al,[DSPMem+04Fh]
call WDSPReg4F
mov al,[DSPMem+05Fh]
call WDSPReg5F
mov al,[DSPMem+06Fh]
call WDSPReg6F
mov al,[DSPMem+07Fh]
call WDSPReg7F
; Noise
mov al,[DSPMem+6Ch]
call WDSPReg6C
mov al,[DSPMem+3Dh]
call WDSPReg3D
mov bx,[bg1ptrb]
sub bx,[bg1ptr]
mov [bg1ptrx],bx
mov bx,[bg1ptrc]
sub bx,[bg1ptr]
mov [bg1ptry],bx
mov bx,[bg2ptrb]
sub bx,[bg2ptr]
mov [bg2ptrx],bx
mov bx,[bg2ptrc]
sub bx,[bg2ptr]
mov [bg2ptry],bx
mov bx,[bg3ptrb]
sub bx,[bg3ptr]
mov [bg3ptrx],bx
mov bx,[bg3ptrc]
sub bx,[bg3ptr]
mov [bg3ptry],bx
mov bx,[bg4ptrb]
sub bx,[bg4ptr]
mov [bg4ptrx],bx
mov bx,[bg4ptrc]
sub bx,[bg4ptr]
mov [bg4ptry],bx
; 16x16 tiles
mov bl,[bgtilesz]
shl bl,4
mov dword[BG116x16t],0
add bl,bl
adc byte[BG416x16t],0
add bl,bl
adc byte[BG316x16t],0
add bl,bl
adc byte[BG216x16t],0
add bl,bl
adc byte[BG116x16t],0
mov ebx,[oamaddrt]
and ebx,0FFFFh
mov [oamaddr],ebx
mov ax,[xat]
mov [xa],ax
mov al,[xdbt]
mov [xdb],al
mov al,[xpbt]
mov [xpb],al
mov ax,[xst]
mov [xs],ax
mov ax,[xdt]
mov [xd],ax
mov ax,[xxt]
mov [xx],ax
mov ax,[xyt]
mov [xy],ax
cmp byte[vramincby8on],1
je near .incby8
mov ebx,[regptw]
cmp byte[vramincr],1
je .from2118
mov dword[ebx+2118h*4],reg2118
mov dword[ebx+2119h*4],reg2119inc
ret
.from2118
mov dword[ebx+2118h*4],reg2118inc
mov dword[ebx+2119h*4],reg2119
ret
.incby8
mov ebx,[regptw]
cmp byte[vramincr],1
je .from2118b
mov dword[ebx+2118h*4],reg2118inc8
mov dword[ebx+2119h*4],reg2119inc8inc
ret
.from2118b
mov dword[ebx+2118h*4],reg2118inc8inc
mov dword[ebx+2119h*4],reg2119inc8
ret
;******************************************************* ;*******************************************************
; Registers Note : restore AH, ECX, ESI, EDI, *S & DX ; Registers Note : restore AH, ECX, ESI, EDI, *S & DX
;******************************************************* ;*******************************************************
@@ -935,7 +816,7 @@ reg2117w:
ret ret
; Video port data (Low) ; Video port data (Low)
reg2118: NEWSYM reg2118
mov ebx,[vramaddr] mov ebx,[vramaddr]
mov [vrama+ebx],al mov [vrama+ebx],al
shr ebx,4 shr ebx,4
@@ -944,7 +825,7 @@ reg2118:
mov byte[vidmemch8+ebx],1 mov byte[vidmemch8+ebx],1
ret ret
reg2118inc: NEWSYM reg2118inc
mov ebx,[vramaddr] mov ebx,[vramaddr]
mov [vrama+ebx],al mov [vrama+ebx],al
shr ebx,4 shr ebx,4
@@ -955,7 +836,7 @@ reg2118inc:
add [vramaddr],bx add [vramaddr],bx
ret ret
reg2118inc8: NEWSYM reg2118inc8
push ecx push ecx
xor ecx,ecx xor ecx,ecx
mov ebx,[vramaddr] mov ebx,[vramaddr]
@@ -985,7 +866,7 @@ reg2118inc8:
.nochange2 .nochange2
ret ret
reg2118inc8inc: NEWSYM reg2118inc8inc
push ecx push ecx
xor ecx,ecx xor ecx,ecx
mov ebx,[vramaddr] mov ebx,[vramaddr]
@@ -1017,7 +898,7 @@ reg2118inc8inc:
add [vramaddr],bx add [vramaddr],bx
ret ret
reg2119: NEWSYM reg2119
cmp dword[vramaddr],0E000h cmp dword[vramaddr],0E000h
jb .skip jb .skip
mov byte[debstop],1 mov byte[debstop],1
@@ -1033,7 +914,7 @@ reg2119:
.nochange .nochange
ret ret
reg2119inc: NEWSYM reg2119inc
mov ebx,[vramaddr] mov ebx,[vramaddr]
; cmp [vrama+ebx+1],al ; cmp [vrama+ebx+1],al
; je .nochange ; je .nochange
@@ -1047,7 +928,7 @@ reg2119inc:
add [vramaddr],bx add [vramaddr],bx
ret ret
reg2119inc8: NEWSYM reg2119inc8
push ecx push ecx
xor ecx,ecx xor ecx,ecx
mov ebx,[vramaddr] mov ebx,[vramaddr]
@@ -1075,7 +956,7 @@ reg2119inc8:
.nochange2 .nochange2
ret ret
reg2119inc8inc: NEWSYM reg2119inc8inc
push ecx push ecx
xor ecx,ecx xor ecx,ecx
mov ebx,[vramaddr] mov ebx,[vramaddr]

View File

@@ -24,7 +24,7 @@ EXTSYM DSPMem,spcWptr,debstop,disablespcclr,SPCSkipXtraROM,SPC700sh
EXTSYM cycpbl,spcRptr EXTSYM cycpbl,spcRptr
EXTSYM spc700read EXTSYM spc700read
EXTSYM dspWptr EXTSYM dspWptr
EXTSYM changeexecloop,curexecstate,SA1Enable,tableadb EXTSYM curexecstate,SA1Enable,tableadb
%include "cpu/regsw.mac" %include "cpu/regsw.mac"
%include "cpu/spcdef.inc" %include "cpu/spcdef.inc"

View File

@@ -49,9 +49,9 @@ Big thanks to Nach, TRAC and anomie for helping me out on porting !!*/
extern unsigned int CBackupPos, PHnum2writecpureg, cycpbl; extern unsigned int CBackupPos, PHnum2writecpureg, cycpbl;
extern unsigned int *wramdata, *vram, PHspcsave, PHdspsave, *C4Ram, *sfxramdata; extern unsigned int *wramdata, *vram, PHspcsave, PHdspsave, *C4Ram, *sfxramdata;
extern unsigned int PHnum2writesa1reg, SA1Mode, prevedi, SA1xpc, sa1dmaptr; extern unsigned int PHnum2writesa1reg, SA1Mode, prevedi, SA1xpc, sa1dmaptr;
extern unsigned int soundcycleft, spc700read, timer2upd, xa; extern unsigned int soundcycleft, spc700read, timer2upd, xa, PHnum2writesfxreg;
extern unsigned int spcnumread, spchalted, opcd, HIRQCycNext, oamaddr; extern unsigned int spcnumread, spchalted, opcd, HIRQCycNext, oamaddr;
extern unsigned int ReadHead, *setaramdata, ramsize, *sram; extern unsigned int SfxR0, ReadHead, *setaramdata, ramsize, *sram;
extern unsigned int tempesi, tempedi, tempedx, tempebp; extern unsigned int tempesi, tempedi, tempedx, tempebp;
extern unsigned char *StateBackup, zsmesg[26], sndrot, spcon, spcRam[65472]; extern unsigned char *StateBackup, zsmesg[26], sndrot, spcon, spcRam[65472];
@@ -84,7 +84,11 @@ void BackupCVFrame()
if (C4Enable) { memcpyinc (curpos, C4Ram, 2048*4); } if (C4Enable) { memcpyinc (curpos, C4Ram, 2048*4); }
if (SFXEnable) { memcpyinc (curpos, sfxramdata, 8192*16); } if (SFXEnable)
{
memcpyinc (curpos, sfxramdata, 8192*16);
memcpyinc (curpos, &SfxR0, PHnum2writesfxreg);
}
if (SA1Enable) if (SA1Enable)
{ {
@@ -184,7 +188,11 @@ void RestoreCVFrame()
if (C4Enable) { memcpyrinc (curpos, C4Ram, 2048*4); } if (C4Enable) { memcpyrinc (curpos, C4Ram, 2048*4); }
if (SFXEnable) { memcpyrinc (curpos, sfxramdata, 8192*16); } if (SFXEnable)
{
memcpyrinc (curpos, sfxramdata, 8192*16);
memcpyrinc (curpos, &SfxR0, PHnum2writesfxreg);
}
if (SA1Enable) if (SA1Enable)
{ {
@@ -275,16 +283,153 @@ void unpackfunct()
xyt = (xy & 0xFFFF); xyt = (xy & 0xFFFF);
} }
#define byteset(byte, checkbit) (byte & (1 << checkbit)) ? 1 : 0
extern unsigned int GlobalVL, GlobalVR, EchoVL, EchoVR, EchoRate[16], MaxEcho;
extern unsigned int EchoFB, NoiseSpeeds[32], dspPAdj, NoiseInc, bg1ptrx;
extern unsigned int bg1ptry, bg2ptrx, bg2ptry, bg3ptrx, bg3ptry, bg4ptrx;
extern unsigned int bg4ptry;
extern signed int FIRTAPVal0, FIRTAPVal1, FIRTAPVal2, FIRTAPVal3, FIRTAPVal4;
extern signed int FIRTAPVal5, FIRTAPVal6, FIRTAPVal7;
extern unsigned short VolumeConvTable[32768], bg1ptr, bg1ptrb, bg1ptrc;
extern unsigned short bg2ptr, bg2ptrb, bg2ptrc, bg3ptr, bg3ptrb, bg3ptrc;
extern unsigned short bg4ptr, bg4ptrb, bg4ptrc;
extern unsigned char VolumeTableb[256], MusicVol, spcres, Voice0Status;
extern unsigned char Voice1Status, Voice2Status, Voice3Status, Voice4Status;
extern unsigned char Voice5Status, Voice6Status, Voice7Status, Voice0Noise;
extern unsigned char Voice1Noise, Voice2Noise, Voice3Noise, Voice4Noise;
extern unsigned char Voice5Noise, Voice6Noise, Voice7Noise, bgtilesz;
extern unsigned char BG116x16t, BG216x16t, BG316x16t, BG416x16t, vramincby8on;
extern unsigned char vramincr;
extern void (**regptw)();
extern void reg2118();
extern void reg2118inc();
extern void reg2118inc8();
extern void reg2118inc8inc();
extern void reg2119();
extern void reg2119inc();
extern void reg2119inc8();
extern void reg2119inc8inc();
void repackfunct()
{
signed char val;
unsigned char block;
// Global/Echo Volumes
GlobalVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x0C]]] & 0xFF);
GlobalVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x1C]]] & 0xFF);
EchoVL = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x2C]]] & 0xFF);
EchoVR = (VolumeConvTable[(MusicVol << 8) + VolumeTableb[DSPMem[0x3C]]] & 0xFF);
// Echo Values
MaxEcho = EchoRate[(DSPMem[0x7D] & 0xF)];
EchoFB = VolumeTableb[DSPMem[0x0D]];
// FIR Filter Values
val = DSPMem[0x0F];
FIRTAPVal0 = (signed int)val;
val = DSPMem[0x1F];
FIRTAPVal1 = (signed int)val;
val = DSPMem[0x2F];
FIRTAPVal2 = (signed int)val;
val = DSPMem[0x3F];
FIRTAPVal3 = (signed int)val;
val = DSPMem[0x4F];
FIRTAPVal4 = (signed int)val;
val = DSPMem[0x5F];
FIRTAPVal5 = (signed int)val;
val = DSPMem[0x6F];
FIRTAPVal6 = (signed int)val;
val = DSPMem[0x7F];
FIRTAPVal7 = (signed int)val;
// Noise
block = DSPMem[0x6C];
DSPMem[0x6C] &= 0x7F;
if (block && 0x80) { spcres++; }
if (block && 0xC0)
{
Voice0Status = Voice1Status = Voice2Status = Voice3Status = 0;
Voice4Status = Voice5Status = Voice6Status = Voice7Status = 0;
}
NoiseInc = (((NoiseSpeeds[(block & 0x1F)] * dspPAdj) >> 17) & 0xFFFFFFFF);
Voice0Noise = byteset (DSPMem[0x3D], 0);
Voice1Noise = byteset (DSPMem[0x3D], 1);
Voice2Noise = byteset (DSPMem[0x3D], 2);
Voice3Noise = byteset (DSPMem[0x3D], 3);
Voice4Noise = byteset (DSPMem[0x3D], 4);
Voice5Noise = byteset (DSPMem[0x3D], 5);
Voice6Noise = byteset (DSPMem[0x3D], 6);
Voice7Noise = byteset (DSPMem[0x3D], 7);
bg1ptrx = bg1ptrb - bg1ptr;
bg1ptry = bg1ptrc - bg1ptr;
bg2ptrx = bg2ptrb - bg2ptr;
bg2ptry = bg2ptrc - bg2ptr;
bg3ptrx = bg3ptrb - bg3ptr;
bg3ptry = bg3ptrc - bg3ptr;
bg4ptrx = bg4ptrb - bg4ptr;
bg4ptry = bg4ptrc - bg4ptr;
// 16x16 tiles
BG116x16t = byteset (bgtilesz, 0);
BG216x16t = byteset (bgtilesz, 1);
BG316x16t = byteset (bgtilesz, 2);
BG416x16t = byteset (bgtilesz, 3);
oamaddr = oamaddrt;
xa = xat;
xdb = xdbt;
xpb = xpbt;
xs = xst;
xd = xdt;
xx = xxt;
xy = xyt;
if (vramincby8on == 1)
{
if (vramincr == 1)
{
regptw[0x2118] = reg2118inc8inc;
regptw[0x2119] = reg2119inc8;
}
else
{
regptw[0x2118] = reg2118inc8;
regptw[0x2119] = reg2119inc8inc;
}
}
else
{
if (vramincr == 1)
{
regptw[0x2118] = reg2118inc;
regptw[0x2119] = reg2119;
}
else
{
regptw[0x2118] = reg2118;
regptw[0x2119] = reg2119inc;
}
}
}
extern unsigned int SA1Stat; extern unsigned int SA1Stat;
extern unsigned char IRAM[2049], *SA1Ptr, *SA1RegPCS, *CurBWPtr, *SA1BWPtr; extern unsigned char IRAM[2049], *SA1Ptr, *SA1RegPCS, *CurBWPtr, *SA1BWPtr;
extern unsigned char *SNSBWPtr, *romdata; extern unsigned char *SNSBWPtr, *romdata;
void SaveSA1() void SaveSA1()
{ {
unsigned int off1=(unsigned int)SA1RegPCS, off2=(unsigned int)romdata; unsigned int offst=(unsigned int)SA1RegPCS;
SA1Stat &= 0xFFFFFF00; SA1Stat &= 0xFFFFFF00;
SA1Ptr -= off1; SA1Ptr -= offst;
if (SA1RegPCS == IRAM) if (SA1RegPCS == IRAM)
{ {
@@ -296,70 +441,21 @@ void SaveSA1()
SA1Stat = (SA1Stat & 0xFFFFFF00) + 2; SA1Stat = (SA1Stat & 0xFFFFFF00) + 2;
} }
SA1RegPCS -= off2; offst = (unsigned int)romdata;
CurBWPtr -= off2; SA1RegPCS -= offst;
SA1BWPtr -= off2; CurBWPtr -= offst;
SNSBWPtr -= off2; SA1BWPtr -= offst;
} SNSBWPtr -= offst;
extern unsigned int NumofBanks, snesmmap[256], snesmap2[256];
extern unsigned char SA1BankVal[4];
void BankSwitchC (unsigned char bank, unsigned short offset1, unsigned int offset2, unsigned int pointer)
{
unsigned int curbankval=SA1BankVal[bank], membankval, i;
if ((NumofBanks & 0xFF) == 64) { curbankval &= 1 ; }
curbankval &= 7;
curbankval <<= 20;
if (SA1BankVal[bank] & 0x80)
{
membankval = (pointer + (unsigned int)romdata - 0x8000);
}
else
{
membankval = (curbankval + (unsigned int)romdata - 0x8000);
}
for (i=0 ; i<32 ; i++)
{
snesmmap[offset1+i] = membankval;
membankval += 0x8000;
}
membankval = curbankval + (unsigned int)romdata;
for (i=0 ; i<16 ; i++)
{
snesmap2[offset2+i] = membankval;
snesmmap[offset2+i] = membankval;
membankval += 0x10000;
}
}
extern unsigned int SA1BankSw;
void UpdateBanks()
{
if ((SA1BankSw & 0xFF) == 1)
{
BankSwitchC (0, 0x000, 0x0C0, 0x000000) ;
BankSwitchC (1, 0x020, 0x0D0, 0x100000) ;
BankSwitchC (2, 0x080, 0x0E0, 0x200000) ;
BankSwitchC (3, 0x0A0, 0x0F0, 0x300000) ;
}
} }
void RestoreSA1() void RestoreSA1()
{ {
unsigned int off1, off2=(unsigned int)romdata; unsigned int offst=(unsigned int)romdata;
SA1RegPCS += off2; SA1RegPCS += offst;
CurBWPtr += off2; CurBWPtr += offst;
SA1BWPtr += off2; SA1BWPtr += offst;
SNSBWPtr += off2; SNSBWPtr += offst;
if ((SA1Stat & 0xFF) == 1) if ((SA1Stat & 0xFF) == 1)
{ {
@@ -371,11 +467,9 @@ void RestoreSA1()
SA1RegPCS = IRAM-0x3000; SA1RegPCS = IRAM-0x3000;
} }
off1 = (unsigned int)SA1RegPCS; offst = (unsigned int)SA1RegPCS;
SA1Ptr += off1; SA1Ptr += offst;
SA1RAMArea = romdata + 4096*1024; SA1RAMArea = romdata + 4096*1024;
UpdateBanks();
} }
#define ResState(Voice_BufPtr) \ #define ResState(Voice_BufPtr) \
@@ -399,19 +493,19 @@ void ResetState()
extern unsigned int Curtableaddr, tableA[256], spcPCRam, spcRamDP; extern unsigned int Curtableaddr, tableA[256], spcPCRam, spcRamDP;
extern unsigned int statefileloc, CurrentHandle, SfxRomBuffer; extern unsigned int statefileloc, CurrentHandle, SfxRomBuffer;
extern unsigned int SfxCROM, SfxLastRamAdr, SfxRAMMem, PHnum2writesfxreg; extern unsigned int SfxCROM, SfxLastRamAdr, SfxRAMMem;
extern unsigned int *SfxR0, SPCMultA, PHnum2writespc7110reg; extern unsigned int SPCMultA, PHnum2writespc7110reg;
extern unsigned int MsgCount, MessageOn; extern unsigned int MsgCount, MessageOn;
extern unsigned char AutoIncSaveSlot, firstsaveinc, fnamest[512]; extern unsigned char AutoIncSaveSlot, firstsaveinc, fnamest[512];
extern unsigned char SPC7110Enable, cbitmode, NoPictureSave, txtsavemsg[15]; extern unsigned char SPC7110Enable, cbitmode, NoPictureSave, txtsavemsg[14];
extern unsigned char *Msgptr, txtsavemsgfail[16]; extern unsigned char *Msgptr, txtsavemsgfail[15];
extern unsigned short PrevPicture[64*56]; extern unsigned short PrevPicture[64*56];
FILE *fhandle; FILE *fhandle;
void SRAMChdir(); extern void SRAMChdir();
void CapturePicture(); extern void CapturePicture();
void statesaver() void statesaver()
{ {
@@ -455,12 +549,12 @@ void statesaver()
// Save State code // Save State code
#ifdef __LINUX__ #ifdef __LINUX__
SRAMChdir() ; SRAMChdir();
#endif #endif
if ((fhandle = fopen(fnamest+1,"wb")) != NULL) if ((fhandle = fopen(fnamest+1,"wb")) != NULL)
{ {
// Save 65816 status, etc. // Save 65816 status, etc.
fwrite (zsmesg, 1, PHnum2writecpureg, fhandle); fwrite (zsmesg, 1, PHnum2writecpureg, fhandle);
fwrite (&cycpbl, 1, 2*4, fhandle); fwrite (&cycpbl, 1, 2*4, fhandle);
@@ -482,12 +576,14 @@ void statesaver()
SfxRomBuffer -= SfxCROM; SfxRomBuffer -= SfxCROM;
SfxLastRamAdr -= SfxRAMMem; SfxLastRamAdr -= SfxRAMMem;
fwrite (sfxramdata, 1, 8192*16, fhandle); fwrite (sfxramdata, 1, 8192*16, fhandle);
fwrite (SfxR0, 1, PHnum2writesfxreg, fhandle); fwrite (&SfxR0, 1, PHnum2writesfxreg, fhandle);
SfxRomBuffer += SfxCROM; SfxRomBuffer += SfxCROM;
SfxLastRamAdr += SfxRAMMem; SfxLastRamAdr += SfxRAMMem;
} }
if (SETAEnable) { fwrite (setaramdata, 1, 256*16, fhandle); } if (SETAEnable) { fwrite (setaramdata, 1, 256*16, fhandle); }
// TODO: save the SetaCmdEnable? For completeness we should do it
// but currently we ignore it anyway.
if (SPC7110Enable) if (SPC7110Enable)
{ {
@@ -541,3 +637,287 @@ void statesaver()
ResetState(); ResetState();
stim(); stim();
} }
extern unsigned int snesmmap[256], snesmap2[256];
/*extern unsigned int NumofBanks;
extern unsigned char SA1BankVal[4];
void BankSwitchC (unsigned char bank, unsigned int offset1, unsigned int offset2, unsigned int pointer)
{
unsigned int curbankval=SA1BankVal[bank], membankval, i;
if ((NumofBanks & 0xFF) == 64) { curbankval &= 1 ; }
curbankval &= 7;
curbankval <<= 20;
if (SA1BankVal[bank] & 0x80)
{
membankval = (pointer + (unsigned int)romdata - 0x8000);
}
else
{
membankval = (curbankval + (unsigned int)romdata - 0x8000);
}
for (i=0 ; i<32 ; i++)
{
snesmmap[offset1+i] = membankval;
membankval += 0x8000;
}
membankval = curbankval + (unsigned int)romdata;
for (i=0 ; i<16 ; i++)
{
snesmap2[offset2+i] = membankval;
snesmmap[offset2+i] = membankval;
membankval += 0x10000;
}
}
extern unsigned int SA1BankSw;
void UpdateBanks()
{
if ((SA1BankSw & 0xFF) == 1)
{
BankSwitchC (0, 0x000, 0x0C0, 0x000000) ;
BankSwitchC (1, 0x020, 0x0D0, 0x100000) ;
BankSwitchC (2, 0x080, 0x0E0, 0x200000) ;
BankSwitchC (3, 0x0A0, 0x0F0, 0x300000) ;
}
}*/
void BankSwitchSDD1C (unsigned char bankval, unsigned int offset)
{
unsigned int curbankval = bankval, i;
curbankval &= 7;
curbankval <<= 20;
curbankval += (unsigned int)romdata;
for (i=0 ; i<16 ; i++)
{
snesmap2[offset+i] = curbankval;
snesmmap[offset+i] = curbankval;
curbankval += 0x10000;
}
}
extern unsigned char SDD1BankA, SDD1BankB, SDD1BankC, SDD1BankD;
void UpdateBanksSDD1()
{
if (SDD1BankA)
{
BankSwitchSDD1C (SDD1BankA, 0x0C0);
BankSwitchSDD1C (SDD1BankB, 0x0D0);
BankSwitchSDD1C (SDD1BankC, 0x0E0);
BankSwitchSDD1C (SDD1BankD, 0x0F0);
}
}
extern unsigned int Voice0Freq, Voice1Freq, Voice2Freq, Voice3Freq;
extern unsigned int Voice4Freq, Voice5Freq, Voice6Freq, Voice7Freq;
extern unsigned short Voice0Pitch, Voice1Pitch, Voice2Pitch, Voice3Pitch;
extern unsigned short Voice4Pitch, Voice5Pitch, Voice6Pitch, Voice7Pitch;
void initpitch()
{
Voice0Pitch = DSPMem[2+0*0x10];
Voice0Freq = ((((Voice0Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice1Pitch = DSPMem[2+1*0x10];
Voice1Freq = ((((Voice1Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice2Pitch = DSPMem[2+2*0x10];
Voice2Freq = ((((Voice2Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice3Pitch = DSPMem[2+3*0x10];
Voice3Freq = ((((Voice3Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice4Pitch = DSPMem[2+4*0x10];
Voice4Freq = ((((Voice4Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice5Pitch = DSPMem[2+5*0x10];
Voice5Freq = ((((Voice5Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice6Pitch = DSPMem[2+6*0x10];
Voice6Freq = ((((Voice6Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
Voice7Pitch = DSPMem[2+7*0x10];
Voice7Freq = ((((Voice7Pitch & 0x3FFF) * dspPAdj) >> 8) & 0xFFFFFFFF);
}
extern unsigned int KeyLoadState, Totalbyteloaded, SfxMemTable[256], SfxCPB;
extern unsigned int SfxPBR, SfxROMBR, SfxRAMBR;
extern unsigned char pressed[256+128+64], multchange, txtloadmsg[15];
extern unsigned char txtconvmsg[16], txtnfndmsg[23], vidmemch2[4096];
extern unsigned char vidmemch4[4096], vidmemch8[4096], versn, MovieProcessing;
extern unsigned char ioportval, SDD1Enable, nexthdma;
extern void procexecloop();
void stateloader (unsigned char *statename, unsigned char keycheck, unsigned char xfercheck)
{
unsigned int offst;
unsigned char statevalue;
if (keycheck)
{
pressed[1] = 0;
pressed[KeyLoadState] = 2;
multchange = 1;
clim();
#ifdef __LINUX__
SRAMChdir();
#endif
// Get the state number
if (fnamest[statefileloc] == 't')
{
statevalue = '0';
}
else
{
statevalue = fnamest[statefileloc];
}
txtloadmsg[6] = statevalue;
txtconvmsg[6] = statevalue;
txtnfndmsg[21] = statevalue;
}
// Actual state loading code
if ((fhandle = fopen(statename,"rb")) != NULL)
{
if (xfercheck) { Totalbyteloaded = 0; }
MovieProcessing = 0;
prevoamptr = 0xFF;
// Load 65816 status, etc.
Totalbyteloaded += fread (zsmesg, 1, PHnum2writecpureg, fhandle);
if (zsmesg[25] >= '6') // just drop older states
{
// Load SPC timers
Totalbyteloaded += fread (&cycpbl, 1, 2*4, fhandle);
// Load SNES PPU Register status
Totalbyteloaded += fread (&sndrot, 1, 3019, fhandle);
ioportval = 0xFF;
// Load WRAM (128k), VRAM (64k)
Totalbyteloaded += fread (wramdata, 1, 8192*16, fhandle);
Totalbyteloaded += fread (vram, 1, 4096*16, fhandle);
if (spcon) // SPC stuff, DSP stuff
{
Totalbyteloaded += fread (spcRam, 1, PHspcsave, fhandle);
Totalbyteloaded += fread (BRRBuffer, 1, PHdspsave, fhandle);
Totalbyteloaded += fread (DSPMem, 1, 16*16, fhandle);
}
if (C4Enable) { Totalbyteloaded += fread (C4Ram, 1, 2048*4, fhandle); }
if (SFXEnable)
{
Totalbyteloaded += fread (sfxramdata, 1, 8192*16, fhandle);
Totalbyteloaded += fread (&SfxR0, 1, PHnum2writesfxreg, fhandle);
SfxCPB = SfxMemTable[(SfxPBR & 0xFF)];
SfxCROM = SfxMemTable[(SfxROMBR & 0xFF)];
SfxRAMMem = (unsigned int)sfxramdata + ((SfxRAMBR & 0xFF) << 16);
SfxRomBuffer += SfxCROM;
SfxLastRamAdr += SfxRAMMem;
}
if (SETAEnable) { Totalbyteloaded += fread (setaramdata, 1, 256*16, fhandle); }
// TODO: load the SetaCmdEnable? For completeness we should do it
// but currently we ignore it anyway.
if (SPC7110Enable)
{
Totalbyteloaded += fread (romdata+0x510000, 1, 65536, fhandle);
Totalbyteloaded += fread (&SPCMultA, 1, PHnum2writespc7110reg, fhandle);
}
if (SA1Enable)
{
Totalbyteloaded += fread (&SA1Mode, 1, PHnum2writesa1reg, fhandle);
Totalbyteloaded += fread (SA1RAMArea, 1, 8192*16, fhandle);
RestoreSA1(); // Convert back SA-1 stuff
// UpdateBanks();
// It was in the asm, but the only thing it does is break Oshaberi Parodius...
// The C port is still present, just commented out.
SA1UpdateDPageC();
}
if (SDD1Enable)
{
UpdateBanksSDD1();
}
fclose (fhandle);
repackfunct();
spcnumread = 0;
spchalted = 0xFFFFFFFF;
nexthdma = 0;
// ;call headerhack ; ASM ONLY ! I'm not porting hacks ever.
initpitch();
// Clear cache check if state loaded
memset (vidmemch2, 1, 4096);
memset (vidmemch4, 1, 4096);
memset (vidmemch8, 1, 4096);
offst = (unsigned int)tableA;
Curtableaddr += offst;
offst = (unsigned int)spcRam;
spcPCRam += offst;
spcRamDP += offst;
ResetState();
procexecloop();
if (keycheck) { stim(); }
}
if (keycheck)
{
if (!xfercheck)
{
if (zsmesg[25] < '6') { Msgptr = txtconvmsg; }
else { Msgptr = txtloadmsg; }
}
MessageOn = MsgCount;
}
}
else
{
if (keycheck)
{
Msgptr = txtnfndmsg;
MessageOn = MsgCount;
stim();
}
}
}
void debugloadstate()
{
stateloader (fnamest+1, 0, 0);
}
void loadstate()
{
stateloader (fnamest+1, 1, 0);
}
void loadstate2()
{
stateloader (fnamest+1, 0, 1);
}
extern unsigned char Netfname[11];
void loadstate3()
{
stateloader (Netfname, 0, 1);
}

View File

@@ -51,6 +51,7 @@ EXTSYM SA1xpb,SA1xpc,SA1xa,SA1xx,SA1xy,SA1xd,SA1xdb,SA1xs
EXTSYM cycpbl,debugbuf,soundon,spcA,spcNZ,spcP,spcPCRam EXTSYM cycpbl,debugbuf,soundon,spcA,spcNZ,spcP,spcPCRam
EXTSYM spcRam,spcRamDP,spcS,spcX,spcY EXTSYM spcRam,spcRamDP,spcS,spcX,spcY
EXTSYM CurPtrVal,SPC7110Enable EXTSYM CurPtrVal,SPC7110Enable
EXTSYM debugloadstate
; debstop at regsw.asm 2118/2119 ; debstop at regsw.asm 2118/2119
@@ -258,7 +259,12 @@ NEWSYM debugloopb
cmp al,59 cmp al,59
je near .execute65816 je near .execute65816
cmp al,62 cmp al,62
je near debugloadstate jne .noloadstate
pushad
call debugloadstate
popad
jmp debugloopa
.noloadstate
cmp al,60 cmp al,60
je near debugsavestate je near debugsavestate
jmp .loopd jmp .loopd
@@ -411,39 +417,8 @@ SECTION .data
SECTION .text SECTION .text
;******************************************************* ;*******************************************************
; Debug save/load states ; Debug save states (debug load state ported to c)
;******************************************************* ;*******************************************************
NEWSYM debugloadstate
; Load State
mov edx,fnamest+1
call Open_File
jc near .nofile
call stateloader
; Clear Cache Check
mov esi,vidmemch2
mov ecx,4096+4096+4096
.next
mov byte[esi],1
inc esi
dec ecx
jnz .next
cmp byte[versn],60
jne near .convert
jmp .noconvert
.convert
mov byte[versn],60
mov byte[versn-2],'6'
.noconvert
add dword[Curtableaddr],tableA
add dword[spcPCRam],spcRam
add dword[spcRamDP],spcRam
pushad
call ResetState
popad
call procexecloop
.nofile
jmp debugloopa
NEWSYM debugsavestate NEWSYM debugsavestate
pushad pushad
call statesaver call statesaver

View File

@@ -3134,7 +3134,9 @@ MoviePlay:
call SRAMChdir call SRAMChdir
popad popad
mov dword[Totalbyteloaded],0 mov dword[Totalbyteloaded],0
pushad
call loadstate2 call loadstate2
popad
mov edx,fnamest+1 mov edx,fnamest+1
call Open_File call Open_File
jc near .notexist jc near .notexist
@@ -3687,7 +3689,9 @@ GUIProcStates:
call NetLoadStuff call NetLoadStuff
jmp .changedir jmp .changedir
.notnet .notnet
pushad
call loadstate2 call loadstate2
popad
.changedir .changedir
; change dir to LoadDrive/LoadDir ; change dir to LoadDrive/LoadDir
call ChangetoLOADdir call ChangetoLOADdir
@@ -3715,9 +3719,9 @@ LoadSecondState:
mov ebx,[statefileloc] mov ebx,[statefileloc]
mov al,[fnamest+ebx] mov al,[fnamest+ebx]
mov byte[fnamest+ebx],'s' mov byte[fnamest+ebx],'s'
push eax pushad
call loadstate2 call loadstate2
pop eax popad
mov ebx,[statefileloc] mov ebx,[statefileloc]
mov [fnamest+ebx],al mov [fnamest+ebx],al
call ChangetoLOADdir call ChangetoLOADdir

View File

@@ -515,7 +515,9 @@ NEWSYM GUIDoReset
; reset the snes ; reset the snes
call init65816 call init65816
pushad
call procexecloop call procexecloop
popad
mov eax,spcRam mov eax,spcRam
mov edx,0EFh mov edx,0EFh

View File

@@ -1630,7 +1630,7 @@ NetStateTotal resd 1
NetStateQuit resb 1 NetStateQuit resb 1
NetStateBuffer resb 2048 NetStateBuffer resb 2048
SECTION .data SECTION .data
Netfname db 'nettemp.zst',0 NEWSYM Netfname, db 'nettemp.zst',0
SECTION .text SECTION .text
NetLoadStuff: NetLoadStuff:
@@ -1756,7 +1756,9 @@ loadstatesend:
cmp dword[NetStateSize],0 cmp dword[NetStateSize],0
jne .notzero jne .notzero
pushad pushad
pushad
call loadstate2 call loadstate2
popad
mov byte[RestoreValues],0 mov byte[RestoreValues],0
mov bx,[NetLoadHandle] mov bx,[NetLoadHandle]
call Close_File call Close_File
@@ -1834,7 +1836,9 @@ loadstaterecv:
popad popad
mov edx,Netfname mov edx,Netfname
mov byte[RestoreValues],0 mov byte[RestoreValues],0
pushad
call loadstate3 call loadstate3
popad
call ChangetoLOADdir call ChangetoLOADdir
cmp byte[NetLoadState],0 cmp byte[NetLoadState],0
je .norun2 je .norun2

View File

@@ -75,7 +75,7 @@ EXTSYM memaccessspc7110r8,memaccessspc7110r16,memaccessspc7110w8
EXTSYM memaccessspc7110w16 EXTSYM memaccessspc7110w16
EXTSYM ram7f,snesmap2,snesmmap,sram,MultiTap EXTSYM ram7f,snesmap2,snesmmap,sram,MultiTap
EXTSYM memaccessbankr848mb,memaccessbankr1648mb EXTSYM memaccessbankr848mb,memaccessbankr1648mb
EXTSYM cpuover,execloop EXTSYM cpuover,execloop,procexecloop
;EXTSYM execloopn,execloopns,execloops ;EXTSYM execloopn,execloopns,execloops
;EXTSYM PHsizeofexecloop,PHsizeofexecloopn,PHsizeofexecloopns ;EXTSYM PHsizeofexecloop,PHsizeofexecloopn,PHsizeofexecloopns
;EXTSYM PHsizeofexecloops ;EXTSYM PHsizeofexecloops
@@ -219,8 +219,9 @@ NEWSYM init
call inittablec call inittablec
call SA1inittable call SA1inittable
; SPC Init ; SPC Init
call copyexecloop pushad
call procexecloop call procexecloop
popad
; SNES Init ; SNES Init
pushad pushad
call Setper2exec call Setper2exec
@@ -282,7 +283,9 @@ NEWSYM init
.enddigits .enddigits
; Load the specified state file ; Load the specified state file
pushad
call loadstate2 call loadstate2
popad
; Just skip the extension re-setup below if we don't need to do it ; Just skip the extension re-setup below if we don't need to do it
cmp byte[autoloadstate],9 cmp byte[autoloadstate],9
@@ -2394,31 +2397,6 @@ NEWSYM preparesfx
jnz .n jnz .n
ret ret
;*******************************************************
; Copy execloop
;*******************************************************
NEWSYM copyexecloop
ret
;*******************************************************
; Process execloop
;*******************************************************
NEWSYM procexecloop
cmp byte[spcon],0
jne .noprocloop
mov byte[curexecstate],1
ret
.noprocloop
mov byte[curexecstate],3
ret
;*******************************************************
; Change execloop
;*******************************************************
NEWSYM changeexecloop
ret
;******************************************************* ;*******************************************************
; Print Hexadecimal (16-bit/8-bit) ; Print Hexadecimal (16-bit/8-bit)
;******************************************************* ;*******************************************************

View File

@@ -73,6 +73,17 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define BSSizeOffset 25 //Contains Type as well #define BSSizeOffset 25 //Contains Type as well
//26 - 31 is the same //26 - 31 is the same
// Some archaic code from an unfinished Dynarec
extern unsigned int curexecstate;
extern unsigned char spcon;
void procexecloop()
{
curexecstate &= 0xFFFFFF00;
if (spcon) { curexecstate += 3; }
else { curexecstate += 1; }
}
void Debug_WriteString(char *str) void Debug_WriteString(char *str)
{ {