After a hefty load of hours without eating, movie replay/record is now ported to C, movies/states compatibility is finally restored, uic.c now has a real port of zstart, and video modes have now more room. Now gimme a kitten.

This commit is contained in:
grinvader
2005-02-19 22:11:38 +00:00
parent 7dfd9a321d
commit c4fee427ee
16 changed files with 1787 additions and 658 deletions

View File

@@ -39,7 +39,7 @@ CHIPSOBJ=${CHIPDIR}/sfxproc.o ${CHIPDIR}/fxemu2.o ${CHIPDIR}/dsp1proc.o\
CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\
${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\ ${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.o\
${CPUDIR}/spc700.o ${CPUDIR}/stable.o ${CPUDIR}/table.o\ ${CPUDIR}/spc700.o ${CPUDIR}/stable.o ${CPUDIR}/table.o\
${CPUDIR}/tableb.o ${CPUDIR}/tablec.o ${CPUDIR}/zstate.o ${CPUDIR}/tableb.o ${CPUDIR}/tablec.o
GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o
@@ -72,7 +72,8 @@ ZIPOBJ=${ZIPDIR}/unzip.o ${ZIPDIR}/zpng.o
EFFECTSOBJ=${EFFECTSDIR}/burn.o ${EFFECTSDIR}/water.o ${EFFECTSDIR}/smoke.o EFFECTSOBJ=${EFFECTSDIR}/burn.o ${EFFECTSDIR}/water.o ${EFFECTSDIR}/smoke.o
MAINOBJ=cfgload.o endmem.o init.o initc.o uic.o patch.o ui.o vcache.o version.o MAINOBJ=cfgload.o endmem.o init.o initc.o uic.o patch.o ui.o vcache.o version.o\
zmovie.o zstate.o
OBJS=${CHIPSOBJ} ${CPUOBJ} ${WINOBJ} ${WINDOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${MAINOBJ} ${NETOBJ} ${ZIPOBJ} ${EFFECTSOBJ} ${JMAOBJ} OBJS=${CHIPSOBJ} ${CPUOBJ} ${WINOBJ} ${WINDOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${MAINOBJ} ${NETOBJ} ${ZIPOBJ} ${EFFECTSOBJ} ${JMAOBJ}
@@ -120,6 +121,8 @@ init.o:init.asm macros.mac
initc.o:initc.c ${JMADIR}/zsnesjma.h initc.o:initc.c ${JMADIR}/zsnesjma.h
uic.o:uic.c uic.o:uic.c
patch.o:patch.c patch.o:patch.c
zmovie.o:zmovie.c
zstate.o:zstate.c
ALL: ALL:
rm -f version.o rm -f version.o
@@ -127,7 +130,6 @@ version.o:version.c
${DOSDIR}/debug.o: ${DOSDIR}/debug.asm macros.mac ${DOSDIR}/debug.o: ${DOSDIR}/debug.asm macros.mac
${CPUDIR}/execute.o: ${CPUDIR}/execute.asm macros.mac ${CPUDIR}/execute.o: ${CPUDIR}/execute.asm macros.mac
${CPUDIR}/zstate.o: ${CPUDIR}/zstate.c
${CPUDIR}/table.o: ${CPUDIR}/table.asm ${CPUDIR}/65816d.inc\ ${CPUDIR}/table.o: ${CPUDIR}/table.asm ${CPUDIR}/65816d.inc\
${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\ ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\
${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac\ ${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac\

View File

@@ -31,7 +31,6 @@ source_files = Split("""
cpu/table.asm cpu/table.asm
cpu/tableb.asm cpu/tableb.asm
cpu/tablec.asm cpu/tablec.asm
cpu/zstate.c
dos/debug.asm dos/debug.asm
dos/joy.asm dos/joy.asm
dos/modemrtn.asm dos/modemrtn.asm
@@ -91,6 +90,8 @@ source_files = Split("""
ui.asm ui.asm
vcache.asm vcache.asm
version.c version.c
zmovie.c
zstate.c
""") """)
linux_source_files = Split(""" linux_source_files = Split("""

View File

@@ -20,17 +20,13 @@
%include "macros.mac" %include "macros.mac"
EXTSYM StringLength EXTSYM StringLength,Get_Time,objhipr,KeyRewind,statesaver
EXTSYM Get_Time
EXTSYM objhipr
EXTSYM KeyRewind, statesaver
EXTSYM xa,timer2upd,prevoamptr,ReadHead EXTSYM xa,timer2upd,prevoamptr,ReadHead
EXTSYM prevedi,SA1xpc,SA1RAMArea,sa1dmaptr EXTSYM prevedi,SA1xpc,SA1RAMArea,sa1dmaptr
EXTSYM DSP1COp,C4WFXVal,C41FXVal,Op00Multiplicand,Op10Coefficient,Op04Angle EXTSYM DSP1COp,C4WFXVal,C41FXVal,Op00Multiplicand,Op10Coefficient,Op04Angle
EXTSYM Op08X,Op18X,Op28X,Op0CA,Op02FX,Op0AVS,Op06X,Op0DX,Op03F,Op14Zr EXTSYM Op08X,Op18X,Op28X,Op0CA,Op02FX,Op0AVS,Op06X,Op0DX,Op03F,Op14Zr
EXTSYM Op0EH,DSP1Type,Op01m EXTSYM Op0EH,DSP1Type,Op01m
EXTSYM Voice0Status EXTSYM Voice0Status,UpdateDPage
EXTSYM UpdateDPage
EXTSYM MessageOn,MsgCount,Msgptr,StartGUI,cbitmode,debuggeron,romdata EXTSYM MessageOn,MsgCount,Msgptr,StartGUI,cbitmode,debuggeron,romdata
EXTSYM frameskip,initvideo,newgfx16b,soundon,cvidmode EXTSYM frameskip,initvideo,newgfx16b,soundon,cvidmode
EXTSYM vidbuffer,vidbufferofsa,vidbufferofsb,disable65816sh,GUISaveVars,virqnodisable EXTSYM vidbuffer,vidbufferofsa,vidbufferofsb,disable65816sh,GUISaveVars,virqnodisable
@@ -41,16 +37,13 @@ EXTSYM IRQHack,HIRQLoc,Offby1line,splitflags,joinflags,KeyQuickSnapShot
EXTSYM csounddisable,videotroub,Open_File,Close_File,Read_File,ResetTripleBuf EXTSYM csounddisable,videotroub,Open_File,Close_File,Read_File,ResetTripleBuf
EXTSYM Write_File,Output_Text,Create_File,Check_Key,Get_Key,Change_Dir,InitPreGame EXTSYM Write_File,Output_Text,Create_File,Check_Key,Get_Key,Change_Dir,InitPreGame
; EXTSYM tempblah,romdata ; EXTSYM tempblah,romdata
EXTSYM Curtableaddr EXTSYM Curtableaddr,curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
EXTSYM curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
EXTSYM memtablew8,regaccessbankr8,showmenu,snesmap2,snesmmap,DeInitPostGame EXTSYM memtablew8,regaccessbankr8,showmenu,snesmap2,snesmmap,DeInitPostGame
EXTSYM spcPCRam,startdebugger,xp,xpb,xpc,tablead,tableadb,tableadc EXTSYM spcPCRam,startdebugger,xp,xpb,xpc,tablead,tableadb,tableadc
; EXTSYM oamram ; EXTSYM oamram
EXTSYM SA1UpdateDPage,Makemode7Table EXTSYM SA1UpdateDPage,Makemode7Table
EXTSYM memtabler16,memaccessbankr848mb,memaccessbankr1648mb EXTSYM memtabler16,memaccessbankr848mb,memaccessbankr1648mb
EXTSYM nextmenupopup EXTSYM nextmenupopup,MovieProcessing,PrintStr
EXTSYM MovieProcessing
EXTSYM MovieFileHand, PrintStr
EXTSYM OSExit,DosExit,InitDir,InitDrive,createnewcfg,fnames,gotoroot,previdmode EXTSYM OSExit,DosExit,InitDir,InitDrive,createnewcfg,fnames,gotoroot,previdmode
EXTSYM ramsize,sfxramdata,setaramdata,SETAEnable,sram,SRAMChdir EXTSYM ramsize,sfxramdata,setaramdata,SETAEnable,sram,SRAMChdir
; EXTSYM tempstore ; EXTSYM tempstore
@@ -63,10 +56,8 @@ EXTSYM deinitvideo
EXTSYM BRRBuffer,DSPMem,PrepareSaveState,ResetState,SFXEnable,PHdspsave EXTSYM BRRBuffer,DSPMem,PrepareSaveState,ResetState,SFXEnable,PHdspsave
EXTSYM fnamest,sndrot,spcRam,spcRamDP,tableA,vram,wramdata EXTSYM fnamest,sndrot,spcRam,spcRamDP,tableA,vram,wramdata
EXTSYM PHnum2writesfxreg,SfxR0,PHspcsave EXTSYM PHnum2writesfxreg,SfxR0,PHspcsave
EXTSYM C4Ram EXTSYM C4Ram,SPC7110Enable,SDD1Enable
EXTSYM SPC7110Enable
EXTSYM SA1Mode,PHnum2writesa1reg,SaveSA1,RestoreSA1,UpdateBanksSDD1 EXTSYM SA1Mode,PHnum2writesa1reg,SaveSA1,RestoreSA1,UpdateBanksSDD1
EXTSYM SDD1Enable
EXTSYM CapturePicture,PrevPicture,NoPictureSave EXTSYM CapturePicture,PrevPicture,NoPictureSave
EXTSYM BRRPlace0,SfxCPB,SfxCROM,SfxLastRamAdr,SfxMemTable EXTSYM BRRPlace0,SfxCPB,SfxCROM,SfxLastRamAdr,SfxMemTable
EXTSYM SfxRAMBR,SfxRAMMem,SfxROMBR,SfxRomBuffer,Voice0Freq EXTSYM SfxRAMBR,SfxRAMMem,SfxROMBR,SfxRomBuffer,Voice0Freq
@@ -99,16 +90,13 @@ EXTSYM RemoteSendChar,RemoteGetChar,pl1neten,pl2neten,pl3neten,pl4neten
EXTSYM pl5neten,RemoteSendEAX,prevp1net,prevp2net,prevp3net,prevp4net EXTSYM pl5neten,RemoteSendEAX,prevp1net,prevp2net,prevp3net,prevp4net
EXTSYM RemoteGetEAX,cnetplaybuf,netdelayed,cnetptrtail,cnetptrhead EXTSYM RemoteGetEAX,cnetplaybuf,netdelayed,cnetptrtail,cnetptrhead
EXTSYM ChatProgress,RecvProgress,chatTL,WritetochatBuffer,NetAddChar EXTSYM ChatProgress,RecvProgress,chatTL,WritetochatBuffer,NetAddChar
EXTSYM PreparePacket, SendPacket, NoInputRead, RemoteDisconnect EXTSYM PreparePacket,SendPacket,NoInputRead,RemoteDisconnect
EXTSYM SendPacketUDP EXTSYM SendPacketUDP,ChatNick
EXTSYM ChatNick
EXTSYM JoyRead,ChatType2,chatstrR2,chatstrR3,chatstrR4,chatstrR5 EXTSYM JoyRead,ChatType2,chatstrR2,chatstrR3,chatstrR4,chatstrR5
EXTSYM chatRTL2,chatRTL3,chatRTL4,chatRTL5 EXTSYM chatRTL2,chatRTL3,chatRTL4,chatRTL5
EXTSYM NetLoadState EXTSYM NetLoadState,ProcessMovies,MovieStop
EXTSYM ProcessMovies
EXTSYM ioportval,ppustatus EXTSYM ioportval,ppustatus
EXTSYM C4VBlank EXTSYM C4VBlank,dsp1teststuff
EXTSYM dsp1teststuff
EXTSYM ReturnFromSPCStall,SPCStallSetting,cycpb268,cycpb358,HIRQSkip,scanlines EXTSYM ReturnFromSPCStall,SPCStallSetting,cycpb268,cycpb358,HIRQSkip,scanlines
EXTSYM smallscreenon,ScreenScale EXTSYM smallscreenon,ScreenScale
EXTSYM MainLoop,NumberOfOpcodes,SfxCLSR,SfxSCMR,SfxPOR EXTSYM MainLoop,NumberOfOpcodes,SfxCLSR,SfxSCMR,SfxPOR
@@ -119,8 +107,7 @@ EXTSYM fxbit01,fxbit01pcal,fxbit23,fxbit23pcal,fxbit45,fxbit45pcal,fxbit67,fxbit
EXTSYM SfxSFR,nosprincr EXTSYM SfxSFR,nosprincr
EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb
EXTSYM NetPlayNoMore EXTSYM NetPlayNoMore
EXTSYM statefileloc EXTSYM statefileloc,CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
EXTSYM CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
%ifdef __MSDOS__ %ifdef __MSDOS__
EXTSYM dssel EXTSYM dssel
@@ -976,8 +963,6 @@ reexecuteb2:
NEWSYM endprog NEWSYM endprog
call deinitvideo call deinitvideo
cmp byte[previdmode],3
; mov eax,[opcd] ; mov eax,[opcd]
; mov eax,[numinst] ;Temporary ; mov eax,[numinst] ;Temporary
; mov eax,[NumBRRconv] ; mov eax,[NumBRRconv]
@@ -987,12 +972,9 @@ NEWSYM endprog
call createnewcfg call createnewcfg
call GUISaveVars call GUISaveVars
cmp byte[MovieProcessing],0 pushad
je .nomovieclose call MovieStop
mov bx,[MovieFileHand] popad
mov byte[MovieProcessing],0
call Close_File
.nomovieclose
; change dir to InitDrive/InitDir ; change dir to InitDrive/InitDir
mov dl,[InitDrive] mov dl,[InitDrive]
@@ -2730,7 +2712,9 @@ NEWSYM cpuover
cmp byte[MovieProcessing],0 cmp byte[MovieProcessing],0
je .noprocmovie je .noprocmovie
pushad
call ProcessMovies call ProcessMovies
popad
.noprocmovie .noprocmovie
test byte[INTEnab],1 test byte[INTEnab],1

View File

@@ -167,6 +167,7 @@ EXTSYM GUIHQ3X
EXTSYM GUIHQ4X EXTSYM GUIHQ4X
EXTSYM firstsaveinc EXTSYM firstsaveinc
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6 EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord
%ifdef __LINUX__ %ifdef __LINUX__
EXTSYM numlockptr EXTSYM numlockptr
@@ -719,7 +720,7 @@ vbuflimbot resd 1
GUIScrolTim1 resd 1 GUIScrolTim1 resd 1
GUIScrolTim2 resd 1 GUIScrolTim2 resd 1
GUICHold resd 1 GUICHold resd 1
GUICBHold resd 1 NEWSYM GUICBHold, resd 1
GUICBHold2 resd 1 GUICBHold2 resd 1
GUIDClickTL resd 1 GUIDClickTL resd 1
GUIDClCWin resd 1 GUIDClCWin resd 1
@@ -2346,6 +2347,9 @@ NEWSYM StartGUI
mov dword[PBackupPos],0 mov dword[PBackupPos],0
call RestoreCVFrame call RestoreCVFrame
popad popad
mov esi,[tempesi]
mov edi,[tempedi]
mov ebp,[tempebp]
.norestoreval .norestoreval
mov dword[nmiprevaddrl],0 mov dword[nmiprevaddrl],0
@@ -3061,103 +3065,103 @@ ManualStatus resb 1
NEWSYM MovieCounter, resd 1 NEWSYM MovieCounter, resd 1
SECTION .data SECTION .data
UnableMovie2 db 'MUST PLAY WITH SOUND OFF',0 NEWSYM UnableMovie2, db 'MUST PLAY WITH SOUND OFF',0
UnableMovie3 db 'MUST PLAY WITH SOUND ON',0 NEWSYM UnableMovie3, db 'MUST PLAY WITH SOUND ON',0
SECTION .text
MoviePlay:
cmp byte[CNetType],20
je near .dontplay
mov byte[GUICBHold],0
mov dword[MovieCounter],0
cmp byte[MovieProcessing],0
jne near .dontplay
mov byte[GUIQuit],2
mov ebx,[statefileloc]
mov eax,[fnamest+ebx-3]
push eax
mov dword[fnamest+ebx-3],'.zmv'
mov al,[CMovieExt]
mov byte[fnamest+ebx],al
pushad
call SRAMChdir
popad
mov dword[Totalbyteloaded],0
pushad
call loadstate2
popad
mov edx,fnamest+1
call Open_File
jc near .notexist
mov bx,ax
mov [MovieFileHand],bx
mov cx,[Totalbyteloaded+2]
mov dx,[Totalbyteloaded]
call File_Seek
mov edx,RecData
mov ecx,16
call Read_File
cmp byte[RecData+2],1
jne .noextra
mov eax,[RecData+3]
mov [timer2upd],eax
mov eax,[RecData+7]
mov [curexecstate],eax
mov dword[nmiprevaddrl],0
mov dword[nmiprevaddrh],0
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
.noextra
mov al,[RecData]
cmp al,[soundon]
jne near .soundisoff
cmp dword[ramsize],0
je .noram
mov edx,[sram]
mov ecx,[ramsize]
call Read_File
.noram
mov byte[MovieProcessing],1
.skip
mov dword[PJoyAOrig],0
mov dword[PJoyBOrig],0
mov dword[PJoyCOrig],0
mov dword[PJoyDOrig],0
mov dword[PJoyEOrig],0
mov byte[sramsavedis],1
mov byte[UseRemoteSRAMData],0
mov byte[DSPMem+08h],0
mov byte[DSPMem+18h],0
mov byte[DSPMem+28h],0
mov byte[DSPMem+38h],0
mov byte[DSPMem+48h],0
mov byte[DSPMem+58h],0
mov byte[DSPMem+68h],0
mov byte[DSPMem+78h],0
.notexist
call ChangetoLOADdir
pop eax
mov ebx,[statefileloc]
mov [fnamest+ebx-3],eax
.dontplay
ret
.soundisoff
mov dword[Msgptr],UnableMovie2
cmp byte[soundon],0
jne .soundon
mov dword[Msgptr],UnableMovie3
.soundon
mov eax,[MsgCount]
mov [MessageOn],eax
call Close_File
pop eax
ret
;SECTION .text
;
;MoviePlay:
; cmp byte[CNetType],20
; je near .dontplay
; mov byte[GUICBHold],0
; mov dword[MovieCounter],0
; cmp byte[MovieProcessing],0
; jne near .dontplay
; mov byte[GUIQuit],2
; mov ebx,[statefileloc]
; mov eax,[fnamest+ebx-3]
; push eax
; mov dword[fnamest+ebx-3],'.zmv'
; mov al,[CMovieExt]
; mov byte[fnamest+ebx],al
; pushad
; call SRAMChdir
; popad
; mov dword[Totalbyteloaded],0
; pushad
; call loadstate2
; popad
; mov edx,fnamest+1
; call Open_File
; jc near .notexist
; mov bx,ax
; mov [MovieFileHand],bx
; mov cx,[Totalbyteloaded+2]
; mov dx,[Totalbyteloaded]
; call File_Seek
; mov edx,RecData
; mov ecx,16
; call Read_File
; cmp byte[RecData+2],1
; jne .noextra
; mov eax,[RecData+3]
; mov [timer2upd],eax
; mov eax,[RecData+7]
; mov [curexecstate],eax
; mov dword[nmiprevaddrl],0
; mov dword[nmiprevaddrh],0
; mov dword[nmirept],0
; mov dword[nmiprevline],224
; mov dword[nmistatus],0
; mov dword[spcnumread],0
; mov dword[spchalted],-1
; mov byte[NextLineCache],0
;.noextra
; mov al,[RecData]
; cmp al,[soundon]
; jne near .soundisoff
; cmp dword[ramsize],0
; je .noram
; mov edx,[sram]
; mov ecx,[ramsize]
; call Read_File
;.noram
; mov byte[MovieProcessing],1
;.skip
; mov dword[PJoyAOrig],0
; mov dword[PJoyBOrig],0
; mov dword[PJoyCOrig],0
; mov dword[PJoyDOrig],0
; mov dword[PJoyEOrig],0
; mov byte[sramsavedis],1
; mov byte[UseRemoteSRAMData],0
; mov byte[DSPMem+08h],0
; mov byte[DSPMem+18h],0
; mov byte[DSPMem+28h],0
; mov byte[DSPMem+38h],0
; mov byte[DSPMem+48h],0
; mov byte[DSPMem+58h],0
; mov byte[DSPMem+68h],0
; mov byte[DSPMem+78h],0
;.notexist
; call ChangetoLOADdir
; pop eax
; mov ebx,[statefileloc]
; mov [fnamest+ebx-3],eax
;.dontplay
; ret
;.soundisoff
; mov dword[Msgptr],UnableMovie2
; cmp byte[soundon],0
; jne .soundon
; mov dword[Msgptr],UnableMovie3
;.soundon
; mov eax,[MsgCount]
; mov [MessageOn],eax
; call Close_File
; pop eax
; ret
;
SECTION .bss SECTION .bss
NEWSYM Totalbyteloaded, resd 1 NEWSYM Totalbyteloaded, resd 1
NEWSYM sramsavedis, resb 1 NEWSYM sramsavedis, resb 1
@@ -3605,7 +3609,7 @@ DisplayBoxes:
.nomore .nomore
ret ret
ChangetoLOADdir: NEWSYM ChangetoLOADdir
mov dl,[LoadDrive] mov dl,[LoadDrive]
mov ebx,LoadDir mov ebx,LoadDir
call Change_Dir call Change_Dir

View File

@@ -22,145 +22,15 @@
; Movie, Joystick setting (display) routines, SNES Reset Function ; Movie, Joystick setting (display) routines, SNES Reset Function
MovieRecord:
mov byte[GUICBHold],0
cmp byte[MovieProcessing],0
jne near .dontrecord
;jne .noreset
mov dword[MovieCounter],0
.noreset
; check if movie exists already
mov ebx,[statefileloc]
mov eax,[fnamest+ebx-3]
push eax
mov dword[fnamest+ebx-3],'.zmv'
mov al,[CMovieExt]
mov byte[fnamest+ebx],al
; check if file exists
cmp byte[MovieRecordWinVal],1
je .nocheck
mov edx,fnamest+1
call Open_File
jc .nocheck
mov bx,ax
call Close_File
mov byte[MovieRecordWinVal],1
jmp .skipstate
.nocheck
cmp byte[MovieProcessing],0
jne near .nocheckit
mov dword[CFWriteHead],0
mov dword[CReadHead],0
mov dword[ReadHead],0
mov dword[CFWriteStart],64
.nocheckit
mov byte[MovieRecordWinVal],0
pushad
call SRAMChdir
popad
mov byte[NoPictureSave],1
cmp byte[MovieProcessing],0
jne .nostatesaver
pushad
call statesaver
popad
.nostatesaver
mov byte[NoPictureSave],0
mov edx,fnamest+1
call Open_File_Write
mov bx,ax
mov [MovieFileHand],bx
mov cx,0
mov dx,0
call File_Seek_End
cmp byte[MovieProcessing],0
je .noappend
mov byte[MovieProcessing],2
jmp .netstuff
.noappend
mov al,[soundon]
mov [RecData],al
mov eax,[versionNumber]
mov [RecData+1],eax
mov byte[RecData+2],1
mov eax,[timer2upd]
mov [RecData+3],eax
mov eax,[curexecstate]
mov [RecData+7],eax
mov edx,RecData
mov ecx,16
call Write_File
cmp dword[ramsize],0
je .noram
mov edx,[sram]
mov ecx,[ramsize]
call Write_File
.noram
mov byte[MovieProcessing],2
mov dword[MovieBuffSize],0
mov dword[MovieBuffFrame],0
mov byte[RepeatFrame],0
cmp byte[CNetType],20
je near .netstuff
cmp byte[CNetType],21
je near .netstuff
mov dword[nmiprevaddrl],0
mov dword[nmiprevaddrh],0
mov dword[nmirept],0
mov dword[nmiprevline],224
mov dword[nmistatus],0
mov dword[spcnumread],0
mov dword[spchalted],-1
mov byte[NextLineCache],0
mov dword[PJoyAOrig],0
mov dword[PJoyBOrig],0
mov dword[PJoyCOrig],0
mov dword[PJoyDOrig],0
mov dword[PJoyEOrig],0
mov byte[DSPMem+08h],0
mov byte[DSPMem+18h],0
mov byte[DSPMem+28h],0
mov byte[DSPMem+38h],0
mov byte[DSPMem+48h],0
mov byte[DSPMem+58h],0
mov byte[DSPMem+68h],0
mov byte[DSPMem+78h],0
.netstuff
mov byte[MovieProcessing],2
call ChangetoLOADdir
.skipstate
pop eax
mov ebx,[statefileloc]
mov [fnamest+ebx-3],eax
.dontrecord
ret
SECTION .bss SECTION .bss
MovieRecordWinVal resb 1 NEWSYM MovieRecordWinVal, resb 1
NEWSYM MovieProcessing, resb 1 NEWSYM MovieProcessing, resb 1
NEWSYM MovieFileHand, resw 1 NEWSYM MovieFileHand, resw 1
NEWSYM RepeatFrame, resb 1
NEWSYM RecData, resb 16 NEWSYM RecData, resb 16
NEWSYM NoPictureSave, resb 1 NEWSYM NoPictureSave, resb 1
SECTION .text SECTION .text
SkipMovie:
mov byte[MovieRecordWinVal],0
mov byte[GUICBHold],0
ret
MovieStop:
mov byte[GUICBHold],0
cmp byte[MovieProcessing],0
je .skipfileend
mov bx,[MovieFileHand]
mov byte[MovieProcessing],0
call Close_File
.skipfileend
ret
CalibrateDispA: CalibrateDispA:
xor ebx,ebx xor ebx,ebx
mov ecx,256 mov ecx,256
@@ -495,13 +365,8 @@ NEWSYM GUIDoReset
; mov byte[NetPlayNoMore],1 ; mov byte[NetPlayNoMore],1
mov byte[RestoreValues],0 mov byte[RestoreValues],0
cmp byte[MovieProcessing],0
je .skipfileend
mov bx,[MovieFileHand]
mov byte[MovieProcessing],0
call Close_File
.skipfileend
pushad pushad
call MovieStop
call RestoreSystemVars call RestoreSystemVars
popad popad

View File

@@ -567,15 +567,41 @@ ProcessMouseButtons:
cmp byte[GUICBHold],15 cmp byte[GUICBHold],15
je near CalibrateDev1 je near CalibrateDev1
cmp byte[GUICBHold],16 cmp byte[GUICBHold],16
je near MoviePlay jne .notMoviePlay
pushad
call MoviePlay
popad
ret
.notMoviePlay
cmp byte[GUICBHold],17 cmp byte[GUICBHold],17
je near MovieRecord jne .notMovieRecord0
pushad
call MovieRecord
popad
ret
.notMovieRecord0
cmp byte[GUICBHold],18 cmp byte[GUICBHold],18
je near MovieStop jne .notMovieStop
mov byte[GUICBHold],0
pushad
call MovieStop
popad
ret
.notMovieStop
cmp byte[GUICBHold],19 cmp byte[GUICBHold],19
je near MovieRecord jne .notMovieRecord1
pushad
call MovieRecord
popad
ret
.notMovieRecord1
cmp byte[GUICBHold],20 cmp byte[GUICBHold],20
je near SkipMovie jne .notSkipMovie
pushad
call SkipMovie
popad
ret
.notSkipMovie
cmp byte[GUICBHold],40 cmp byte[GUICBHold],40
je near SetAllKeys je near SetAllKeys
cmp byte[GUICBHold],50 cmp byte[GUICBHold],50

View File

@@ -530,15 +530,14 @@ SECTION .text
call RemoteSendChar call RemoteSendChar
mov al,222 mov al,222
call RemoteSendChar call RemoteSendChar
; Dan - Change this from looking into the welcome message forthe version. mov al,[versionNumber]
mov al,[versionNumber + 0] call RemoteSendChar
call RemoteSendChar mov al,[versionNumber+1]
mov al,[versionNumber + 1] call RemoteSendChar
call RemoteSendChar mov al,[versionNumber+2]
mov al,[versionNumber + 2] call RemoteSendChar
call RemoteSendChar mov al,[versionNumber+3]
mov al,[versionNumber + 3] call RemoteSendChar
call RemoteSendChar
mov al,[soundon] mov al,[soundon]
call RemoteSendChar call RemoteSendChar
cmp al,byte[CNetType] cmp al,byte[CNetType]
@@ -581,28 +580,28 @@ SECTION .text
.nocheck3 .nocheck3
cmp byte[IDCheckPos],3 cmp byte[IDCheckPos],3
jne .nocheck4 jne .nocheck4
cmp dl,[versionNumber + 0] cmp dl,[versionNumber]
jne near .invversion jne near .invversion
mov byte[IDCheckPos],4 mov byte[IDCheckPos],4
ret ret
.nocheck4 .nocheck4
cmp byte[IDCheckPos],4 cmp byte[IDCheckPos],4
jne .nocheck5 jne .nocheck5
cmp dl,[versionNumber + 1] cmp dl,[versionNumber+1]
jne near .invversion jne near .invversion
mov byte[IDCheckPos],5 mov byte[IDCheckPos],5
ret ret
.nocheck5 .nocheck5
cmp byte[IDCheckPos],5 cmp byte[IDCheckPos],5
jne .nocheck6 jne .nocheck6
cmp dl,[versionNumber + 2] cmp dl,[versionNumber+2]
jne .invversion jne .invversion
mov byte[IDCheckPos],6 mov byte[IDCheckPos],6
ret ret
.nocheck6 .nocheck6
cmp byte[IDCheckPos],6 cmp byte[IDCheckPos],6
jne .nocheck7 jne .nocheck7
cmp dl,[versionNumber + 3] cmp dl,[versionNumber+3]
jne .invversion jne .invversion
mov byte[IDCheckPos],9 mov byte[IDCheckPos],9
ret ret

View File

@@ -1921,13 +1921,13 @@ DisplayGUIVideo:
sub byte[GUItextcolor],15 sub byte[GUItextcolor],15
%ifndef __MSDOS__ %ifndef __MSDOS__
GUIOuttextwin2 5,12,76,GUIVideoTextw0 GUIOuttextwin2 5,8,76,GUIVideoTextw0
GUIOuttextwin2 5,12,83,GUIVideoTextw1 GUIOuttextwin2 5,10,85,GUIVideoTextw1
GUIOuttextwin2 5,12,90,GUIVideoTextw2 GUIOuttextwin2 5,10,92,GUIVideoTextw2
GUIOuttextwin2 5,12,97,GUIVideoTextw3 GUIOuttextwin2 5,10,99,GUIVideoTextw3
%endif %endif
%ifdef __LINUX__ %ifdef __LINUX__
GUIOuttextwin2 5,12,104,GUIVideoTextw4 GUIOuttextwin2 5,10,106,GUIVideoTextw4
%endif %endif
xor eax,eax xor eax,eax
mov al,[cvidmode] mov al,[cvidmode]
@@ -2057,13 +2057,13 @@ DisplayGUIVideo:
add byte[GUItextcolor],15 add byte[GUItextcolor],15
%ifndef __MSDOS__ %ifndef __MSDOS__
GUIOuttextwin2 5,11,75,GUIVideoTextw0 GUIOuttextwin2 5,7,75,GUIVideoTextw0
GUIOuttextwin2 5,11,82,GUIVideoTextw1 GUIOuttextwin2 5,9,84,GUIVideoTextw1
GUIOuttextwin2 5,11,89,GUIVideoTextw2 GUIOuttextwin2 5,9,91,GUIVideoTextw2
GUIOuttextwin2 5,11,96,GUIVideoTextw3 GUIOuttextwin2 5,9,98,GUIVideoTextw3
%endif %endif
%ifdef __LINUX__ %ifdef __LINUX__
GUIOuttextwin2 5,11,103,GUIVideoTextw4 GUIOuttextwin2 5,9,105,GUIVideoTextw4
%endif %endif
xor eax,eax xor eax,eax
mov al,[cvidmode] mov al,[cvidmode]
@@ -2531,10 +2531,11 @@ GUIVideoText8 db 'SET',0 ; set button
GUIVideoText9 db 'VSYNC',0 ; -c GUIVideoText9 db 'VSYNC',0 ; -c
GUIVideoTextH db 'MODE : ',0 GUIVideoTextH db 'MODE : ',0
GUIVideoTextw0 db 'LEGEND:',0 GUIVideoTextw0 db 'LEGEND:',0
GUIVideoTextw1 db ' S = SCALED TO FIT SCREEN',0 GUIVideoTextw1 db 'S = STRETCH R = KEEP RATIO',0
GUIVideoTextw2 db ' R = MATCHED SCREEN RATIO',0 GUIVideoTextw2 db ' D = ALLOW SPECIAL FILTERS',0
GUIVideoTextw3 db ' D = ALLOW 2XSAI,HIRES,ETC',0 GUIVideoTextw3 db ' W = WIN F = FULL',0
GUIVideoTextw4 db ' O = OPENGL MODE',0 GUIVideoTextw4 db ' O = USES OPENGL',0
SECTION .bss SECTION .bss
GUIVStA resd 3 GUIVStA resd 3
@@ -4825,7 +4826,7 @@ NEWSYM LatencyLeft, db 2
SECTION .bss SECTION .bss
NEWSYM NetSwap, resb 1 NEWSYM NetSwap, resb 1
RemCNetType resb 1 RemCNetType resb 1
UseRemoteSRAMData resb 1 NEWSYM UseRemoteSRAMData, resb 1
ChatString resb 276 ChatString resb 276
FileNameMod resb 512 FileNameMod resb 512
CurCStringPos resd 1 CurCStringPos resd 1
@@ -5648,7 +5649,7 @@ DisplayGUIAbout:
ret ret
SECTION .data SECTION .data
GUIGUIAboutText1 db 'ZSNES ',ZVERSION,' ',0 ;Need room for date GUIGUIAboutText1 db 'ZSNES V',ZVERSION,' ',0 ;Need room for date
GUIGUIAboutText2 db 'CODED BY : ',0 GUIGUIAboutText2 db 'CODED BY : ',0
GUIGUIAboutText3 db ' ZSKNIGHT _DEMO_',0 GUIGUIAboutText3 db ' ZSKNIGHT _DEMO_',0
GUIGUIAboutText4 db ' PAGEFAULT NACH',0 GUIGUIAboutText4 db ' PAGEFAULT NACH',0
@@ -5793,7 +5794,7 @@ GUIMovieText7 db 'OKAY TO OVERWRITE?',0
GUIMovieText8 db 'YES',0 GUIMovieText8 db 'YES',0
GUIMovieText9 db 'NO',0 GUIMovieText9 db 'NO',0
GUIMovieTextA db 'STATUS : ',0 GUIMovieTextA db 'STATUS : ',0
CMovieExt db 'v' NEWSYM CMovieExt, db 'v'
SECTION .text SECTION .text

View File

@@ -23,7 +23,7 @@
EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol
EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0 EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0
EXTSYM MovieProcessing EXTSYM MovieProcessing
EXTSYM MovieFileHand,filefound,inittable,SA1inittable EXTSYM filefound,inittable,SA1inittable
EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer
EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime
EXTSYM Open_File,Read_File,Write_File,Close_File,Output_Text,Get_Key,CNetType EXTSYM Open_File,Read_File,Write_File,Close_File,Output_Text,Get_Key,CNetType
@@ -36,7 +36,6 @@ EXTSYM NewEngEnForce
EXTSYM PrintChar EXTSYM PrintChar
EXTSYM TextFile EXTSYM TextFile
EXTSYM Setper2exec,per2exec EXTSYM Setper2exec,per2exec
EXTSYM MovieCounter
EXTSYM chaton EXTSYM chaton
EXTSYM JoyRead,JoyReadControl,joy4218,joy4219 EXTSYM JoyRead,JoyReadControl,joy4218,joy4219
EXTSYM joy421A,joy421B,pressed EXTSYM joy421A,joy421B,pressed
@@ -53,7 +52,7 @@ EXTSYM pl3Xtk,pl3Ytk,pl3Atk,pl3Btk,pl4Xtk,pl4Ytk,pl4Atk,pl4Btk
EXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2ULk,pl2URk,pl2DLk,pl2DRk EXTSYM pl1ULk,pl1URk,pl1DLk,pl1DRk,pl2ULk,pl2URk,pl2DLk,pl2DRk
EXTSYM pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk EXTSYM pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk
EXTSYM pl5ULk,pl5URk,pl5DLk,pl5DRk,pl5Xtk,pl5Ytk,pl5Atk,pl5Btk EXTSYM pl5ULk,pl5URk,pl5DLk,pl5DRk,pl5Xtk,pl5Ytk,pl5Atk,pl5Btk
EXTSYM Turbo30hz,RepeatFrame,nojoystickpoll EXTSYM Turbo30hz,nojoystickpoll
EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
EXTSYM mousexloc,mouseyloc EXTSYM mousexloc,mouseyloc
@@ -161,6 +160,8 @@ blah times 450 db 0
; FIX STATMAT ; FIX STATMAT
NEWSYM autoloadstate, db 0 ; auto load state slot number NEWSYM autoloadstate, db 0 ; auto load state slot number
; FIX STATMAT ; FIX STATMAT
NEWSYM EndMessage
db ' ',13,10,0
SECTION .text SECTION .text
@@ -322,9 +323,6 @@ NEWSYM init
mov byte[newengen],1 mov byte[newengen],1
mov byte[cfgnewgfx],1 mov byte[cfgnewgfx],1
.noforce .noforce
; Dan - I don't know what this is, but all it seems to do is update
; EndMessage which I've nuked.
%if 0
mov ebx,ebm mov ebx,ebm
mov eax,EndMessage mov eax,EndMessage
mov dh,17h mov dh,17h
@@ -346,7 +344,6 @@ NEWSYM init
inc ebx inc ebx
dec ch dec ch
jnz .loopen jnz .loopen
%endif
cmp byte[yesoutofmemory],1 cmp byte[yesoutofmemory],1
jne .noout jne .noout
@@ -1045,254 +1042,13 @@ NEWSYM ReadInputDevice
.nopl24 .nopl24
ret ret
NEWSYM ProcessMovies
cmp byte[MovieProcessing],2
je near .record
.repeater
pushad
mov bx,[MovieFileHand]
mov ecx,1
mov edx,MovieTemp
call Read_File
cmp eax,0
je near .endplay2
cmp byte[MovieTemp],1
ja near .endplay
cmp byte[MovieTemp],1
je .nomovement
mov ecx,20
mov edx,PJoyAOrig
call Read_File
.nomovement
popad
mov eax,[PJoyAOrig]
mov [JoyAOrig],eax
mov eax,[PJoyBOrig]
mov [JoyBOrig],eax
mov eax,[PJoyCOrig]
mov [JoyCOrig],eax
mov eax,[PJoyDOrig]
mov [JoyDOrig],eax
mov eax,[PJoyEOrig]
mov [JoyEOrig],eax
ret
.endplay2
mov dword[Msgptr],.movieended
mov eax,[MsgCount]
mov [MessageOn],eax
.endplay
mov byte[MovieProcessing],0
call Close_File
popad
ret
.record
cmp byte[BackState],1
jne .nobackstate
cmp byte[CNetType],20
jae near .storefullcrecv
.nobackstate
mov eax,[JoyAOrig]
cmp eax,[PJoyAOrig]
jne .storefull
mov eax,[JoyBOrig]
cmp eax,[PJoyBOrig]
jne .storefull
mov eax,[JoyCOrig]
cmp eax,[PJoyCOrig]
jne .storefull
mov eax,[JoyDOrig]
cmp eax,[PJoyDOrig]
jne .storefull
mov eax,[JoyEOrig]
cmp eax,[PJoyEOrig]
jne .storefull
mov byte[MovieTemp],1
push ebx
mov ebx,[MovieBuffSize]
mov byte[MovieBuffer+ebx],1
inc dword[MovieBuffSize]
pop ebx
inc dword[MovieBuffFrame]
cmp dword[MovieBuffFrame],60
je near .writebuffertodisk
ret
.storefull
mov eax,[JoyAOrig]
mov [PJoyAOrig],eax
mov eax,[JoyBOrig]
mov [PJoyBOrig],eax
mov eax,[JoyCOrig]
mov [PJoyCOrig],eax
mov eax,[JoyDOrig]
mov [PJoyDOrig],eax
mov eax,[JoyEOrig]
mov [PJoyEOrig],eax
mov byte[MovieTemp],0
push ebx
mov ebx,[MovieBuffSize]
mov byte[MovieBuffer+ebx],0
mov eax,[JoyAOrig]
mov [MovieBuffer+ebx+1],eax
mov eax,[JoyBOrig]
mov [MovieBuffer+ebx+5],eax
mov eax,[JoyCOrig]
mov [MovieBuffer+ebx+9],eax
mov eax,[JoyDOrig]
mov [MovieBuffer+ebx+13],eax
mov eax,[JoyEOrig]
mov [MovieBuffer+ebx+17],eax
add dword[MovieBuffSize],21
pop ebx
inc dword[MovieBuffFrame]
cmp dword[MovieBuffFrame],60
je near .writebuffertodisk
ret
.writebuffertodisk
pushad
mov bx,[MovieFileHand]
mov ecx,[MovieBuffSize]
mov edx,MovieBuffer
call Write_File
popad
mov dword[MovieBuffSize],0
mov dword[MovieBuffFrame],0
ret
.notstorefullcrecv
push ebx
mov eax,[ReadHead]
cmp [CReadHead],eax
jne .juststoredata
inc dword[CFWriteStart]
and dword[CFWriteStart],7Fh
mov eax,[CFWriteHead]
cmp eax,[CFWriteStart]
jne .nowrite
call .writetobuffer
inc dword[CFWriteHead]
and dword[CFWriteHead],7Fh
.nowrite
inc dword[CReadHead]
and dword[CReadHead],7Fh
.juststoredata
mov ebx,[ReadHead]
shl ebx,5
mov byte[StoreBuffer+ebx],1
inc dword[ReadHead]
and dword[ReadHead],7Fh
pop ebx
ret
.storefullcrecv
push ebx
mov eax,[ReadHead]
cmp [CReadHead],eax
jne .juststoredata2
inc dword[CFWriteStart]
and dword[CFWriteStart],7Fh
mov eax,[CFWriteHead]
cmp eax,[CFWriteStart]
jne .nowrite2
call .writetobuffer
inc dword[CFWriteHead]
and dword[CFWriteHead],7Fh
.nowrite2
inc dword[CReadHead]
and dword[CReadHead],7Fh
.juststoredata2
mov ebx,[ReadHead]
shl ebx,5
add ebx,StoreBuffer
mov byte[ebx],0
mov eax,[JoyAOrig]
mov [ebx+1],eax
mov eax,[JoyBOrig]
mov [ebx+5],eax
mov eax,[JoyCOrig]
mov [ebx+9],eax
mov eax,[JoyDOrig]
mov [ebx+13],eax
mov eax,[JoyEOrig]
mov [ebx+17],eax
inc dword[ReadHead]
and dword[ReadHead],7Fh
pop ebx
ret
.writetobuffer
push ecx
mov ecx,[CFWriteHead]
shl ecx,5
add ecx,StoreBuffer
; cmp byte[ecx],1
; je .nochange
mov eax,[ecx+1]
cmp [PJoyAOrig],eax
jne .change
mov eax,[ecx+5]
cmp [PJoyBOrig],eax
jne .change
mov eax,[ecx+9]
cmp [PJoyCOrig],eax
jne .change
mov eax,[ecx+13]
cmp [PJoyDOrig],eax
jne .change
mov eax,[ecx+17]
cmp [PJoyEOrig],eax
jne .change
.nochange
pop ecx
mov ebx,[MovieBuffSize]
mov byte[MovieBuffer+ebx],1
inc dword[MovieBuffSize]
inc dword[MovieBuffFrame]
cmp dword[MovieBuffFrame],60
je near .writebuffer
ret
.change
mov eax,[ecx+1]
mov [PJoyAOrig],eax
mov eax,[ecx+5]
mov [PJoyBOrig],eax
mov eax,[ecx+9]
mov [PJoyCOrig],eax
mov eax,[ecx+13]
mov [PJoyDOrig],eax
mov eax,[ecx+17]
mov [PJoyEOrig],eax
mov ebx,[MovieBuffSize]
mov byte[MovieBuffer+ebx],0
mov eax,[ecx+1]
mov [MovieBuffer+ebx+1],eax
mov eax,[ecx+5]
mov [MovieBuffer+ebx+5],eax
mov eax,[ecx+9]
mov [MovieBuffer+ebx+9],eax
mov eax,[ecx+13]
mov [MovieBuffer+ebx+13],eax
mov eax,[ecx+17]
mov [MovieBuffer+ebx+17],eax
add dword[MovieBuffSize],21
pop ecx
inc dword[MovieBuffFrame]
cmp dword[MovieBuffFrame],60
je .writebuffer
ret
.writebuffer
call .writebuffertodisk
ret
SECTION .data SECTION .data
NEWSYM txtmovieended, db 'MOVIE FINISHED.',0
.movieended db 'MOVIE FINISHED.',0
NEWSYM CFWriteStart, dd 64+30 NEWSYM CFWriteStart, dd 64+30
SECTION .bss SECTION .bss
NEWSYM MovieBuffSize, resd 1 NEWSYM MovieBuffSize, resd 1
NEWSYM MovieBuffFrame, resd 1 NEWSYM MovieBuffFrame, resd 1
MovieBuffer resd 21*60
NEWSYM CReadHead, resd 1 NEWSYM CReadHead, resd 1
NEWSYM ReadHead, resd 1 NEWSYM ReadHead, resd 1
NEWSYM CFWriteHead, resd 1 NEWSYM CFWriteHead, resd 1

View File

@@ -901,26 +901,26 @@ NEWSYM NumVideoModes, dd 4
; GUI Video Mode Names - Make sure that all names are of the same length ; GUI Video Mode Names - Make sure that all names are of the same length
; and end with a NULL terminator ; and end with a NULL terminator
NEWSYM GUIVideoModeNames NEWSYM GUIVideoModeNames
db '256X224 R WIN ',0 ;0 db '256X224 R W',0 ;0
db '256x224 R FULL',0 ;1 db '256x224 R F',0 ;1
db '512X448 DR WIN ',0 ;2 db '512X448 DR W',0 ;2
db '640x480 DS FULL',0 ;3 db '640x480 DR F',0 ;3
%ifdef __OPENGL__ %ifdef __OPENGL__
db '256x224 OR WIN ',0 ;4 db '256x224 OR W',0 ;4
db '512x448 ODR WIN ',0 ;5 db '512x448 ODR W',0 ;5
db '640x480 ODS FULL',0 ;6 db '640x480 ODS F',0 ;6
db '640x480 ODS WIN ',0 ;7 db '640x480 ODS W',0 ;7
db '640x576 ODR WIN ',0 ;8 db '640x576 ODR W',0 ;8
db '768x672 ODR WIN ',0 ;9 db '768x672 ODR W',0 ;9
db '800x600 ODS FULL',0 ;10 db '800x600 ODS F',0 ;10
db '800x600 ODS WIN ',0 ;11 db '800x600 ODS W',0 ;11
db '896x784 ODR WIN ',0 ;12 db '896x784 ODR W',0 ;12
db '1024x768 ODS FULL',0 ;13 db '1024x768 ODS F',0 ;13
db '1024x768 ODS WIN ',0 ;14 db '1024x768 ODS W',0 ;14
db '1024x896 ODR WIN ',0 ;15 db '1024x896 ODR W',0 ;15
db '1280x1024ODS FULL',0 ;16 db '1280x1024 ODS F',0 ;16
db '1600x1200ODS FULL',0 ;17 db '1600x1200 ODS F',0 ;17
db 'VARIABLE ODR WIN ',0 ;18 db 'VARIABLE ODR W',0 ;18
%endif %endif

View File

@@ -23,7 +23,7 @@ bits 32
section .text section .text
; Zsnes required macros ; Zsnes required macros
%define ZVERSION 'Pre 1.43' ; Don't forget to put the 'v' here now %define ZVERSION 'Pre 1.43'
%ifdef ELF %ifdef ELF
%imacro newsym 1 %imacro newsym 1

View File

@@ -152,7 +152,7 @@ CHIPSOBJ=${CHIPDIR}/dsp1emu${OE} ${CHIPDIR}/fxemu2${OE} ${CHIPDIR}/sfxproc${OE}\
CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\ CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\
${CPUDIR}/execute${OE} ${CPUDIR}/irq${OE} ${CPUDIR}/memory${OE}\ ${CPUDIR}/execute${OE} ${CPUDIR}/irq${OE} ${CPUDIR}/memory${OE}\
${CPUDIR}/spc700${OE} ${CPUDIR}/stable${OE} ${CPUDIR}/table${OE}\ ${CPUDIR}/spc700${OE} ${CPUDIR}/stable${OE} ${CPUDIR}/table${OE}\
${CPUDIR}/tableb${OE} ${CPUDIR}/tablec${OE} ${CPUDIR}/zstate${OE} ${CPUDIR}/tableb${OE} ${CPUDIR}/tablec${OE}
GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/menu${OE} GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/menu${OE}
@@ -185,7 +185,8 @@ JMAOBJ=${JMADIR}/7zlzma${OE} ${JMADIR}/crc32${OE} ${JMADIR}/iiostrm${OE}\
${JMADIR}/inbyte${OE} ${JMADIR}/jma${OE} ${JMADIR}/lzma${OE} ${JMADIR}/lzmadec${OE}\ ${JMADIR}/inbyte${OE} ${JMADIR}/jma${OE} ${JMADIR}/lzma${OE} ${JMADIR}/lzmadec${OE}\
${JMADIR}/winout${OE} ${JMADIR}/zsnesjma${OE} ${JMADIR}/winout${OE} ${JMADIR}/zsnesjma${OE}
MAINOBJ=cfgload${OE} endmem${OE} init${OE} initc${OE} uic${OE} patch${OE} ui${OE} vcache${OE} version${OE} MAINOBJ=cfgload${OE} endmem${OE} init${OE} initc${OE} uic${OE} patch${OE}\
ui${OE} vcache${OE} version${OE} zmovie${OE} zstate${OE}
DOSOBJORIG=${DOSDIR}/debug${OE} ${DOSDIR}/joy${OE} ${DOSDIR}/modemrtn${OE} ${DOSDIR}/vesa2${OE}\ DOSOBJORIG=${DOSDIR}/debug${OE} ${DOSDIR}/joy${OE} ${DOSDIR}/modemrtn${OE} ${DOSDIR}/vesa2${OE}\
${DOSDIR}/initvid${OE} ${DOSDIR}/sw${OE} ${DOSDIR}/gppro${OE} ${DOSDIR}/vesa12${OE}\ ${DOSDIR}/initvid${OE} ${DOSDIR}/sw${OE} ${DOSDIR}/gppro${OE} ${DOSDIR}/vesa12${OE}\
@@ -252,9 +253,10 @@ initc${OE}: $< ${JMADIR}/zsnesjma.h
uic${OE}: $< uic${OE}: $<
patch${OE}: $< patch${OE}: $<
endmem${OE}: $< macros.mac endmem${OE}: $< macros.mac
zmovie${OE}: $< gblvars.h
zstate${OE}: $< gblvars.h
${CPUDIR}/execute${OE}: $< macros.mac ${CPUDIR}/execute${OE}: $< macros.mac
${CPUDIR}/zstate${OE}: $< gblvars.h
${CPUDIR}/table${OE}: $< ${CPUDIR}/65816d.inc ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\ ${CPUDIR}/table${OE}: $< ${CPUDIR}/65816d.inc ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\
${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac ${CPUDIR}/regsw.inc macros.mac ${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac ${CPUDIR}/regsw.inc macros.mac
${CPUDIR}/tableb${OE}: $< ${CPUDIR}/65816db.inc ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816b.inc\ ${CPUDIR}/tableb${OE}: $< ${CPUDIR}/65816db.inc ${CPUDIR}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816b.inc\

View File

@@ -35,14 +35,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#define true 1 #define true 1
#define false 0 #define false 0
extern void outofmemory();
extern unsigned char *vbufaptr; extern unsigned char *vbufaptr;
extern unsigned char *vbufeptr; extern unsigned char *vbufeptr;
extern unsigned char *ngwinptrb; extern unsigned char *ngwinptrb;
extern unsigned char *vbufdptr; extern unsigned char *vbufdptr;
extern unsigned char *romaptr; extern unsigned char *romaptr;
extern unsigned char welcome[452+16]; // 452=message string, 16=version string
extern unsigned char mydebug[2]; extern unsigned char mydebug[2];
extern unsigned char outofmem[51]; extern unsigned char outofmem[51];
extern unsigned char YesMMX[34]; extern unsigned char YesMMX[34];
@@ -147,7 +144,7 @@ void *doMemAlloc(size_t size)
{ {
void *ptr = NULL; void *ptr = NULL;
ptr = malloc(size); ptr = malloc(size);
if (!ptr) { outofmemory(); } if (!ptr) { asm_call(outofmemory); }
return(ptr); return(ptr);
} }
@@ -199,60 +196,84 @@ void cycleinputdevice()
} }
} }
extern unsigned char soundon; extern unsigned int xa;
extern unsigned char SPCDisable; extern unsigned char soundon, SPCDisable, spcon, FPSOn, FPSAtStart;
extern unsigned char spcon;
extern unsigned char FPSOn;
extern unsigned char FPSAtStart;
const unsigned int versionNumber = 0x00000143; const unsigned int versionNumber = 0x0000008F; // 1.43
const char* ZVERSION = "Pre 1.43"; unsigned char *ZVERSION = "Pre 1.43";
unsigned char txtfailedalignd[25] = "Data Alignment Failure : ";
unsigned char txtfailedalignc[25] = "Code Alignment Failure : ";
void outofmemory();
void zstart () void zstart ()
{ {
asm_call(StartUp); unsigned int ptr;
// Print welcome message. asm_call(StartUp);
printf("ZSNES v%s, (c) 1997-2005, ZSNES Team\n", ZVERSION);
puts("Be sure to check http://www.zsnes.com/ for the latest version.");
puts("Please report crashes to zsnes-devel@lists.sourceforge.net.\n");
puts("ZSNES is written by the ZSNES Team (See AUTHORS.TXT)");
puts("ZSNES comes with ABSOLUTELY NO WARRANTY. This is free software,");
puts("and you are welcome to redistribute it under certain conditions;");
puts("please read 'LICENSE.TXT' thoroughly before doing so.\n");
puts("Use ZSNES -? for command line definitions.\n");
asm_call(SystemInit); printf("%s", mydebug);
// Print welcome message.
printf("ZSNES v%s, (c) 1997-2005, ZSNES Team\n", ZVERSION);
puts("Be sure to check http://www.zsnes.com/ for the latest version.");
puts("Please report crashes to zsnes-devel@lists.sourceforge.net.\n");
puts("ZSNES is written by the ZSNES Team (See AUTHORS.TXT)");
puts("ZSNES comes with ABSOLUTELY NO WARRANTY. This is free software,");
puts("and you are welcome to redistribute it under certain conditions;");
puts("please read 'LICENSE.TXT' thoroughly before doing so.\n");
puts("Use ZSNES -? for command line definitions.\n");
asm_call(SystemInit);
#ifdef OPENSPC #ifdef OPENSPC
OSPC_Init (); OSPC_Init();
#else #else
asm_call(setnoise); asm_call(setnoise);
asm_call(InitSPC); asm_call(InitSPC);
#endif #endif
asm_call(allocmem); asm_call(allocmem);
if (!soundon && !SPCDisable) if (!soundon && (SPCDisable != 1))
{ {
soundon = 1; soundon = 1;
spcon = 1; spcon = 1;
DSPDisable = 1; DSPDisable = 1;
} }
if (SPCDisable) if (SPCDisable)
{ {
soundon = 0; soundon = 0;
spcon = 0; spcon = 0;
} }
if (!frameskip) if (!frameskip)
{ {
FPSOn = FPSAtStart; FPSOn = FPSAtStart;
} }
gammalevel16b = gammalevel * 2; gammalevel16b = gammalevel >> 1;
asm_call(MMXCheck); asm_call(MMXCheck);
asm_call(init);
ptr = (unsigned int)&outofmemory;
if ((ptr & 3))
{
printf("%s%d", txtfailedalignc, (ptr & 0x1F));
asm_call(WaitForKey);
}
ptr = (unsigned int)&xa;
if ((ptr & 3))
{
printf("%s%d", txtfailedalignd, (ptr & 0x1F));
asm_call(WaitForKey);
}
asm_call(init);
} }

View File

@@ -1213,39 +1213,39 @@ NEWSYM NumVideoModes, dd 33
; GUI Video Mode Names - Make sure that all names are of the same length ; GUI Video Mode Names - Make sure that all names are of the same length
; and end with a NULL terminator ; and end with a NULL terminator
NEWSYM GUIVideoModeNames NEWSYM GUIVideoModeNames
db '256x224 R WIN ',0 ;0 db '256x224 R W',0 ;0
db '256x224 R FULL',0 ;1 db '256x224 R F',0 ;1
db '512x448 R WIN ',0 ;2 db '512x448 R W',0 ;2
db '512x448 DR WIN ',0 ;3 db '512x448 DR W',0 ;3
db '640x480 S WIN ',0 ;4 db '640x480 S W',0 ;4
db '640x480 DS WIN ',0 ;5 db '640x480 DS W',0 ;5
db '640x480 DR FULL',0 ;6 db '640x480 DR F',0 ;6
db '640x480 DS FULL',0 ;7 db '640x480 DS F',0 ;7
db '640x480 S FULL',0 ;8 db '640x480 S F',0 ;8
db '768x672 R WIN ',0 ;9 db '768x672 R W',0 ;9
db '768x672 DR WIN ',0 ;10 db '768x672 DR W',0 ;10
db '800x600 S WIN ',0 ;11 db '800x600 S W',0 ;11
db '800x600 DS WIN ',0 ;12 db '800x600 DS W',0 ;12
db '800x600 S FULL',0 ;13 db '800x600 S F',0 ;13
db '800x600 DR FULL',0 ;14 db '800x600 DR F',0 ;14
db '800x600 DS FULL',0 ;15 db '800x600 DS F',0 ;15
db '1024x768 S WIN ',0 ;16 db '1024x768 S W',0 ;16
db '1024x768 DS WIN ',0 ;17 db '1024x768 DS W',0 ;17
db '1024x768 S FULL',0 ;18 db '1024x768 S F',0 ;18
db '1024x768 DR FULL',0 ;19 db '1024x768 DR F',0 ;19
db '1024x768 DS FULL',0 ;20 db '1024x768 DS F',0 ;20
db '1024x896 R WIN ',0 ;21 db '1024x896 R W',0 ;21
db '1024x896 DR WIN ',0 ;22 db '1024x896 DR W',0 ;22
db '1280x960 S WIN ',0 ;23 db '1280x960 S W',0 ;23
db '1280x960 DS WIN ',0 ;24 db '1280x960 DS W',0 ;24
db '1280x960 S FULL',0 ;25 db '1280x960 S F',0 ;25
db '1280x960 DR FULL',0 ;26 db '1280x960 DR F',0 ;26
db '1280x960 DS FULL',0 ;27 db '1280x960 DS F',0 ;27
db '1280x1024 S WIN ',0 ;28 db '1280x1024 S W',0 ;28
db '1280x1024 DS WIN ',0 ;29 db '1280x1024 DS W',0 ;29
db '1280x1024 S FULL',0 ;30 db '1280x1024 S F',0 ;30
db '1280x1024 DR FULL',0 ;31 db '1280x1024 DR F',0 ;31
db '1280x1024 DS FULL',0 ;32 db '1280x1024 DS F',0 ;32
; Video Mode Feature Availability (1 = Available, 0 = Not Available) ; Video Mode Feature Availability (1 = Available, 0 = Not Available)
; Left side starts with Video Mode 0 ; Left side starts with Video Mode 0

448
zsnes/src/zmovie.c Normal file
View File

@@ -0,0 +1,448 @@
/*
Copyright (C) 1997-2005 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
http://www.zsnes.com
http://sourceforge.net/projects/zsnes
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifdef __LINUX__
#include "gblhdr.h"
#define DIR_SLASH "/"
#else
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIR_SLASH "\\"
#endif
#include "gblvars.h"
#include "asm_call.h"
extern unsigned int PJoyAOrig, PJoyBOrig, PJoyCOrig, PJoyDOrig, PJoyEOrig;
extern unsigned int JoyAOrig, JoyBOrig, JoyCOrig, JoyDOrig, JoyEOrig;
extern unsigned int MsgCount, MessageOn;
extern unsigned char MovieTemp, txtmovieended[15], MovieProcessing, *Msgptr;
static FILE *movfhandle;
void Replay()
{
if (fread(&MovieTemp, 1, 1, movfhandle))
{
if (MovieTemp < 2) // 1 or 0 are correct values
{
if (MovieTemp == 0) // 0 means the input has changed
{
fread(&PJoyAOrig, 1, 4, movfhandle);
fread(&PJoyBOrig, 1, 4, movfhandle);
fread(&PJoyCOrig, 1, 4, movfhandle);
fread(&PJoyDOrig, 1, 4, movfhandle);
fread(&PJoyEOrig, 1, 4, movfhandle);
}
JoyAOrig = PJoyAOrig;
JoyBOrig = PJoyBOrig;
JoyCOrig = PJoyCOrig;
JoyDOrig = PJoyDOrig;
JoyEOrig = PJoyEOrig;
}
else // anything else is bad - the file isn't a movie.
{
MovieProcessing = 0;
fclose(movfhandle);
}
}
else
{
Msgptr = txtmovieended;
MessageOn = MsgCount;
MovieProcessing = 0;
fclose(movfhandle);
}
}
extern unsigned int MovieBuffFrame, MovieBuffSize;
unsigned char MovieBuffer[21*60];
void IncFrameWriteBuffer()
{
MovieBuffFrame++;
if (MovieBuffFrame == 60)
{
fwrite(MovieBuffer, 1, MovieBuffSize, movfhandle);
MovieBuffSize = 0;
MovieBuffFrame = 0;
}
}
void intsplitter (unsigned char *buffer, unsigned int offset, unsigned int value)
{
unsigned char i;
for (i=0 ; i<4 ; i++)
{
buffer[offset + i] = ((value >> i*8) & 0xFF);
}
}
unsigned int bytemerger (unsigned char heaviest, unsigned char heavy, unsigned char light, unsigned char lightest)
{
return ((heaviest << 24) | (heavy << 16) | (light << 8) | (lightest));
}
extern unsigned int CReadHead, ReadHead, CFWriteStart, CFWriteHead;
extern unsigned char BackState, CNetType, StoreBuffer[128*32];
void Record()
{
unsigned int offst, PJoyATemp, PJoyBTemp, PJoyCTemp, PJoyDTemp, PJoyETemp;
if ((BackState == 1) && (CNetType >= 20))
{
if (CReadHead == ReadHead)
{
CFWriteStart++;
CFWriteStart &= 0x7F;
if (CFWriteStart == CFWriteHead)
{
offst = (CFWriteHead << 5);
offst++;
PJoyATemp = bytemerger (StoreBuffer[offst+3],StoreBuffer[offst+2],StoreBuffer[offst+1],StoreBuffer[offst]);
offst+=4;
PJoyBTemp = bytemerger (StoreBuffer[offst+3],StoreBuffer[offst+2],StoreBuffer[offst+1],StoreBuffer[offst]);
offst+=4;
PJoyCTemp = bytemerger (StoreBuffer[offst+3],StoreBuffer[offst+2],StoreBuffer[offst+1],StoreBuffer[offst]);
offst+=4;
PJoyDTemp = bytemerger (StoreBuffer[offst+3],StoreBuffer[offst+2],StoreBuffer[offst+1],StoreBuffer[offst]);
offst+=4;
PJoyETemp = bytemerger (StoreBuffer[offst+3],StoreBuffer[offst+2],StoreBuffer[offst+1],StoreBuffer[offst]);
offst+=4;
// if (StoreBuffer[offst]) - commented out in the ASM.
if ((PJoyAOrig == PJoyATemp) && (PJoyBOrig == PJoyBTemp) && (PJoyCOrig == PJoyCTemp) && (PJoyDOrig == PJoyDTemp) && (PJoyEOrig == PJoyETemp))
{
MovieBuffer[MovieBuffSize] = 1;
MovieBuffSize++;
}
else
{
PJoyAOrig = PJoyATemp;
PJoyBOrig = PJoyBTemp;
PJoyCOrig = PJoyCTemp;
PJoyDOrig = PJoyDTemp;
PJoyEOrig = PJoyETemp;
MovieBuffer[MovieBuffSize] = 0;
MovieBuffSize++;
intsplitter (MovieBuffer, MovieBuffSize, PJoyAOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, PJoyBOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, PJoyCOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, PJoyDOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, PJoyEOrig);
MovieBuffSize += 4;
}
IncFrameWriteBuffer();
CFWriteHead++;
CFWriteHead &= 0x7F;
}
CReadHead++;
CReadHead &= 0x7F;
}
offst = (ReadHead << 5);
StoreBuffer[offst] = 0;
offst++;
intsplitter (StoreBuffer, offst, JoyAOrig);
offst += 4;
intsplitter (StoreBuffer, offst, JoyBOrig);
offst += 4;
intsplitter (StoreBuffer, offst, JoyCOrig);
offst += 4;
intsplitter (StoreBuffer, offst, JoyDOrig);
offst += 4;
intsplitter (StoreBuffer, offst, JoyEOrig);
offst +=4;
ReadHead++;
ReadHead &= 0x7F;
}
else
{
if ((PJoyAOrig != JoyAOrig) || (PJoyBOrig != JoyBOrig) || (PJoyCOrig != JoyCOrig) || (PJoyDOrig != JoyDOrig) || (PJoyEOrig != JoyEOrig))
{
PJoyAOrig = JoyAOrig;
PJoyBOrig = JoyBOrig;
PJoyCOrig = JoyCOrig;
PJoyDOrig = JoyDOrig;
PJoyEOrig = JoyEOrig;
MovieTemp = 0;
MovieBuffer[MovieBuffSize] = 0;
MovieBuffSize++;
intsplitter (MovieBuffer, MovieBuffSize, JoyAOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, JoyBOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, JoyCOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, JoyDOrig);
MovieBuffSize += 4;
intsplitter (MovieBuffer, MovieBuffSize, JoyEOrig);
MovieBuffSize += 4;
}
else
{
MovieTemp = 1;
MovieBuffer[MovieBuffSize] = 1;
MovieBuffSize++;
}
IncFrameWriteBuffer();
}
}
void ProcessMovies()
{
if (MovieProcessing == 2) { Record(); }
else { Replay(); }
}
// The following will maybe end up in guic.c once we get it started.
// It came from guiwindp.inc and gui.asm, after all
extern unsigned char MovieRecordWinVal;
extern unsigned int GUICBHold;
void SkipMovie()
{
MovieRecordWinVal = 0;
GUICBHold &= 0xFFFFFF00;
}
void MovieStop()
{
if (MovieProcessing)
{
fclose(movfhandle);
MovieProcessing = 0;
}
}
extern unsigned int MovieCounter, statefileloc, Totalbyteloaded, curexecstate;
extern unsigned int nmiprevaddrl, nmiprevaddrh, nmirept, nmiprevline, nmistatus;
extern unsigned char GUIQuit, fnamest[512], CMovieExt, RecData[16], soundon;
extern unsigned char NextLineCache, sramsavedis, UseRemoteSRAMData;
extern unsigned char UnableMovie2[24], UnableMovie3[23];
void SRAMChdir();
void loadstate2();
void MoviePlay()
{
unsigned char FileExt[4];
GUICBHold &= 0xFFFFFF00;
if (CNetType != 20)
{
MovieCounter= 0;
if (!MovieProcessing)
{
GUIQuit = 2;
memcpy (FileExt, &fnamest[statefileloc-3], 4);
memcpy (&fnamest[statefileloc-3], ".zmv", 4);
fnamest[statefileloc] = CMovieExt;
SRAMChdir();
loadstate2();
if ((movfhandle = fopen(fnamest+1,"rb")) != NULL)
{
fseek(movfhandle, Totalbyteloaded, SEEK_SET);
fread(RecData, 1, 16, movfhandle);
printf("Movie made with version: %d\n", RecData[1]);
if (RecData[2] == 1)
{
timer2upd = bytemerger(RecData[6], RecData[5], RecData[4], RecData[3]);
curexecstate = bytemerger(RecData[10], RecData[9], RecData[9], RecData[7]);
nmiprevaddrl = 0;
nmiprevaddrh = 0;
nmirept = 0;
nmiprevline = 224;
nmistatus = 0;
spcnumread = 0;
spchalted = 0xFFFFFFFF;
NextLineCache = 0;
}
if (soundon == RecData[0])
{
if (ramsize) { fread(sram, 1, ramsize, movfhandle); }
MovieProcessing = 1;
PJoyAOrig = 0;
PJoyBOrig = 0;
PJoyCOrig = 0;
PJoyDOrig = 0;
PJoyEOrig = 0;
sramsavedis = 1;
UseRemoteSRAMData = 0;
DSPMem[0x08] = 0;
DSPMem[0x18] = 0;
DSPMem[0x28] = 0;
DSPMem[0x38] = 0;
DSPMem[0x48] = 0;
DSPMem[0x58] = 0;
DSPMem[0x68] = 0;
DSPMem[0x78] = 0;
memcpy (&fnamest[statefileloc-3], FileExt, 4);
}
else
{
Msgptr = (!soundon) ? UnableMovie3 : UnableMovie2;
MessageOn = MsgCount;
fclose(movfhandle);
}
}
else
{
memcpy (&fnamest[statefileloc-3], FileExt, 4);
}
asm_call(ChangetoLOADdir);
}
}
}
extern unsigned char NoPictureSave;
extern unsigned int versionNumber;
void statesaver();
void MovieRecord()
{
unsigned char FileExt[4];
FILE *tempfhandle;
GUICBHold &= 0xFFFFFF00;
if (!MovieProcessing)
{
MovieCounter = 0;
memcpy (FileExt, &fnamest[statefileloc-3], 4);
memcpy (&fnamest[statefileloc-3], ".zmv", 4);
fnamest[statefileloc] = CMovieExt;
tempfhandle = fopen(fnamest+1,"rb");
// check if file exists
if ((MovieRecordWinVal == 1) || (tempfhandle == NULL))
{
if (!MovieProcessing)
{
CFWriteHead = 0;
CReadHead = 0;
ReadHead = 0;
CFWriteStart = 64;
}
MovieRecordWinVal = 0;
SRAMChdir();
NoPictureSave = 1;
// saves the statedata as first chunk of movie
if (!MovieProcessing) { statesaver(); }
NoPictureSave = 0;
// it shouldn't fail, but paranoids can add an 'if'...
movfhandle = fopen(fnamest+1,"r+b");
fseek(movfhandle, 0, SEEK_END);
if (!MovieProcessing)
{
RecData[0] = soundon;
RecData[1] = (versionNumber & 0xFF); // valid for versions under 2.56
RecData[2] = 1;
intsplitter (RecData, 3, timer2upd);
intsplitter (RecData, 7, curexecstate);
fwrite(RecData, 1, 16, movfhandle);
if (ramsize) { fwrite(sram, 1, ramsize, movfhandle); }
MovieBuffSize = 0;
MovieBuffFrame = 0;
if ((CNetType != 20) && (CNetType != 21))
{
nmiprevaddrl = 0;
nmiprevaddrh = 0;
nmirept = 0;
nmiprevline = 224;
nmistatus = 0;
spcnumread = 0;
spchalted = 0xFFFFFFFF;
NextLineCache = 0;
PJoyAOrig = 0;
PJoyBOrig = 0;
PJoyCOrig = 0;
PJoyDOrig = 0;
PJoyEOrig = 0;
DSPMem[0x08] = 0;
DSPMem[0x18] = 0;
DSPMem[0x28] = 0;
DSPMem[0x38] = 0;
DSPMem[0x48] = 0;
DSPMem[0x58] = 0;
DSPMem[0x68] = 0;
DSPMem[0x78] = 0;
}
}
MovieProcessing = 2;
asm_call(ChangetoLOADdir);
}
else
{
fclose(tempfhandle);
MovieRecordWinVal = 1;
}
memcpy (&fnamest[statefileloc-3], FileExt, 4);
}
}

1020
zsnes/src/zstate.c Executable file

File diff suppressed because it is too large Load Diff