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:
@@ -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\
|
||||
${CPUDIR}/execute.o ${CPUDIR}/irq.o ${CPUDIR}/memory.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
|
||||
|
||||
@@ -72,7 +72,8 @@ ZIPOBJ=${ZIPDIR}/unzip.o ${ZIPDIR}/zpng.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}
|
||||
|
||||
@@ -120,6 +121,8 @@ init.o:init.asm macros.mac
|
||||
initc.o:initc.c ${JMADIR}/zsnesjma.h
|
||||
uic.o:uic.c
|
||||
patch.o:patch.c
|
||||
zmovie.o:zmovie.c
|
||||
zstate.o:zstate.c
|
||||
|
||||
ALL:
|
||||
rm -f version.o
|
||||
@@ -127,7 +130,6 @@ version.o:version.c
|
||||
|
||||
${DOSDIR}/debug.o: ${DOSDIR}/debug.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}/address.inc ${CPUDIR}/addrni.inc ${CPUDIR}/e65816.inc\
|
||||
${CPUDIR}/regs.mac ${CPUDIR}/regs.inc ${CPUDIR}/regsw.mac\
|
||||
|
||||
@@ -31,7 +31,6 @@ source_files = Split("""
|
||||
cpu/table.asm
|
||||
cpu/tableb.asm
|
||||
cpu/tablec.asm
|
||||
cpu/zstate.c
|
||||
dos/debug.asm
|
||||
dos/joy.asm
|
||||
dos/modemrtn.asm
|
||||
@@ -91,6 +90,8 @@ source_files = Split("""
|
||||
ui.asm
|
||||
vcache.asm
|
||||
version.c
|
||||
zmovie.c
|
||||
zstate.c
|
||||
""")
|
||||
|
||||
linux_source_files = Split("""
|
||||
|
||||
@@ -20,17 +20,13 @@
|
||||
|
||||
%include "macros.mac"
|
||||
|
||||
EXTSYM StringLength
|
||||
EXTSYM Get_Time
|
||||
EXTSYM objhipr
|
||||
EXTSYM KeyRewind, statesaver
|
||||
EXTSYM StringLength,Get_Time,objhipr,KeyRewind,statesaver
|
||||
EXTSYM xa,timer2upd,prevoamptr,ReadHead
|
||||
EXTSYM prevedi,SA1xpc,SA1RAMArea,sa1dmaptr
|
||||
EXTSYM DSP1COp,C4WFXVal,C41FXVal,Op00Multiplicand,Op10Coefficient,Op04Angle
|
||||
EXTSYM Op08X,Op18X,Op28X,Op0CA,Op02FX,Op0AVS,Op06X,Op0DX,Op03F,Op14Zr
|
||||
EXTSYM Op0EH,DSP1Type,Op01m
|
||||
EXTSYM Voice0Status
|
||||
EXTSYM UpdateDPage
|
||||
EXTSYM Voice0Status,UpdateDPage
|
||||
EXTSYM MessageOn,MsgCount,Msgptr,StartGUI,cbitmode,debuggeron,romdata
|
||||
EXTSYM frameskip,initvideo,newgfx16b,soundon,cvidmode
|
||||
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 Write_File,Output_Text,Create_File,Check_Key,Get_Key,Change_Dir,InitPreGame
|
||||
; EXTSYM tempblah,romdata
|
||||
EXTSYM Curtableaddr
|
||||
EXTSYM curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
|
||||
EXTSYM Curtableaddr,curcyc,debugdisble,dmadata,guioff,memtabler8,SetupPreGame
|
||||
EXTSYM memtablew8,regaccessbankr8,showmenu,snesmap2,snesmmap,DeInitPostGame
|
||||
EXTSYM spcPCRam,startdebugger,xp,xpb,xpc,tablead,tableadb,tableadc
|
||||
; EXTSYM oamram
|
||||
EXTSYM SA1UpdateDPage,Makemode7Table
|
||||
EXTSYM memtabler16,memaccessbankr848mb,memaccessbankr1648mb
|
||||
EXTSYM nextmenupopup
|
||||
EXTSYM MovieProcessing
|
||||
EXTSYM MovieFileHand, PrintStr
|
||||
EXTSYM nextmenupopup,MovieProcessing,PrintStr
|
||||
EXTSYM OSExit,DosExit,InitDir,InitDrive,createnewcfg,fnames,gotoroot,previdmode
|
||||
EXTSYM ramsize,sfxramdata,setaramdata,SETAEnable,sram,SRAMChdir
|
||||
; EXTSYM tempstore
|
||||
@@ -63,10 +56,8 @@ EXTSYM deinitvideo
|
||||
EXTSYM BRRBuffer,DSPMem,PrepareSaveState,ResetState,SFXEnable,PHdspsave
|
||||
EXTSYM fnamest,sndrot,spcRam,spcRamDP,tableA,vram,wramdata
|
||||
EXTSYM PHnum2writesfxreg,SfxR0,PHspcsave
|
||||
EXTSYM C4Ram
|
||||
EXTSYM SPC7110Enable
|
||||
EXTSYM C4Ram,SPC7110Enable,SDD1Enable
|
||||
EXTSYM SA1Mode,PHnum2writesa1reg,SaveSA1,RestoreSA1,UpdateBanksSDD1
|
||||
EXTSYM SDD1Enable
|
||||
EXTSYM CapturePicture,PrevPicture,NoPictureSave
|
||||
EXTSYM BRRPlace0,SfxCPB,SfxCROM,SfxLastRamAdr,SfxMemTable
|
||||
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 RemoteGetEAX,cnetplaybuf,netdelayed,cnetptrtail,cnetptrhead
|
||||
EXTSYM ChatProgress,RecvProgress,chatTL,WritetochatBuffer,NetAddChar
|
||||
EXTSYM PreparePacket, SendPacket, NoInputRead, RemoteDisconnect
|
||||
EXTSYM SendPacketUDP
|
||||
EXTSYM ChatNick
|
||||
EXTSYM PreparePacket,SendPacket,NoInputRead,RemoteDisconnect
|
||||
EXTSYM SendPacketUDP,ChatNick
|
||||
EXTSYM JoyRead,ChatType2,chatstrR2,chatstrR3,chatstrR4,chatstrR5
|
||||
EXTSYM chatRTL2,chatRTL3,chatRTL4,chatRTL5
|
||||
EXTSYM NetLoadState
|
||||
EXTSYM ProcessMovies
|
||||
EXTSYM NetLoadState,ProcessMovies,MovieStop
|
||||
EXTSYM ioportval,ppustatus
|
||||
EXTSYM C4VBlank
|
||||
EXTSYM dsp1teststuff
|
||||
EXTSYM C4VBlank,dsp1teststuff
|
||||
EXTSYM ReturnFromSPCStall,SPCStallSetting,cycpb268,cycpb358,HIRQSkip,scanlines
|
||||
EXTSYM smallscreenon,ScreenScale
|
||||
EXTSYM MainLoop,NumberOfOpcodes,SfxCLSR,SfxSCMR,SfxPOR
|
||||
@@ -119,8 +107,7 @@ EXTSYM fxbit01,fxbit01pcal,fxbit23,fxbit23pcal,fxbit45,fxbit45pcal,fxbit67,fxbit
|
||||
EXTSYM SfxSFR,nosprincr
|
||||
EXTSYM cpucycle,debstop,switchtovirqdeb,debstop3,switchtonmideb
|
||||
EXTSYM NetPlayNoMore
|
||||
EXTSYM statefileloc
|
||||
EXTSYM CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
|
||||
EXTSYM statefileloc,CHIPBATT,SaveSramData,BackupCVFrame,RestoreCVFrame,loadstate
|
||||
|
||||
%ifdef __MSDOS__
|
||||
EXTSYM dssel
|
||||
@@ -976,8 +963,6 @@ reexecuteb2:
|
||||
NEWSYM endprog
|
||||
call deinitvideo
|
||||
|
||||
cmp byte[previdmode],3
|
||||
|
||||
; mov eax,[opcd]
|
||||
; mov eax,[numinst] ;Temporary
|
||||
; mov eax,[NumBRRconv]
|
||||
@@ -987,12 +972,9 @@ NEWSYM endprog
|
||||
call createnewcfg
|
||||
call GUISaveVars
|
||||
|
||||
cmp byte[MovieProcessing],0
|
||||
je .nomovieclose
|
||||
mov bx,[MovieFileHand]
|
||||
mov byte[MovieProcessing],0
|
||||
call Close_File
|
||||
.nomovieclose
|
||||
pushad
|
||||
call MovieStop
|
||||
popad
|
||||
|
||||
; change dir to InitDrive/InitDir
|
||||
mov dl,[InitDrive]
|
||||
@@ -2730,7 +2712,9 @@ NEWSYM cpuover
|
||||
|
||||
cmp byte[MovieProcessing],0
|
||||
je .noprocmovie
|
||||
pushad
|
||||
call ProcessMovies
|
||||
popad
|
||||
.noprocmovie
|
||||
|
||||
test byte[INTEnab],1
|
||||
|
||||
@@ -167,6 +167,7 @@ EXTSYM GUIHQ3X
|
||||
EXTSYM GUIHQ4X
|
||||
EXTSYM firstsaveinc
|
||||
EXTSYM nssdip1,nssdip2,nssdip3,nssdip4,nssdip5,nssdip6
|
||||
EXTSYM SkipMovie,MovieStop,MoviePlay,MovieRecord
|
||||
|
||||
%ifdef __LINUX__
|
||||
EXTSYM numlockptr
|
||||
@@ -719,7 +720,7 @@ vbuflimbot resd 1
|
||||
GUIScrolTim1 resd 1
|
||||
GUIScrolTim2 resd 1
|
||||
GUICHold resd 1
|
||||
GUICBHold resd 1
|
||||
NEWSYM GUICBHold, resd 1
|
||||
GUICBHold2 resd 1
|
||||
GUIDClickTL resd 1
|
||||
GUIDClCWin resd 1
|
||||
@@ -2346,6 +2347,9 @@ NEWSYM StartGUI
|
||||
mov dword[PBackupPos],0
|
||||
call RestoreCVFrame
|
||||
popad
|
||||
mov esi,[tempesi]
|
||||
mov edi,[tempedi]
|
||||
mov ebp,[tempebp]
|
||||
.norestoreval
|
||||
|
||||
mov dword[nmiprevaddrl],0
|
||||
@@ -3061,103 +3065,103 @@ ManualStatus resb 1
|
||||
NEWSYM MovieCounter, resd 1
|
||||
|
||||
SECTION .data
|
||||
UnableMovie2 db 'MUST PLAY WITH SOUND OFF',0
|
||||
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
|
||||
NEWSYM UnableMovie2, db 'MUST PLAY WITH SOUND OFF',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 .bss
|
||||
NEWSYM Totalbyteloaded, resd 1
|
||||
NEWSYM sramsavedis, resb 1
|
||||
@@ -3605,7 +3609,7 @@ DisplayBoxes:
|
||||
.nomore
|
||||
ret
|
||||
|
||||
ChangetoLOADdir:
|
||||
NEWSYM ChangetoLOADdir
|
||||
mov dl,[LoadDrive]
|
||||
mov ebx,LoadDir
|
||||
call Change_Dir
|
||||
|
||||
@@ -22,145 +22,15 @@
|
||||
|
||||
; 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
|
||||
MovieRecordWinVal resb 1
|
||||
NEWSYM MovieRecordWinVal, resb 1
|
||||
NEWSYM MovieProcessing, resb 1
|
||||
NEWSYM MovieFileHand, resw 1
|
||||
NEWSYM RepeatFrame, resb 1
|
||||
NEWSYM RecData, resb 16
|
||||
NEWSYM NoPictureSave, resb 1
|
||||
|
||||
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:
|
||||
xor ebx,ebx
|
||||
mov ecx,256
|
||||
@@ -495,13 +365,8 @@ NEWSYM GUIDoReset
|
||||
; mov byte[NetPlayNoMore],1
|
||||
mov byte[RestoreValues],0
|
||||
|
||||
cmp byte[MovieProcessing],0
|
||||
je .skipfileend
|
||||
mov bx,[MovieFileHand]
|
||||
mov byte[MovieProcessing],0
|
||||
call Close_File
|
||||
.skipfileend
|
||||
pushad
|
||||
call MovieStop
|
||||
call RestoreSystemVars
|
||||
popad
|
||||
|
||||
|
||||
@@ -567,15 +567,41 @@ ProcessMouseButtons:
|
||||
cmp byte[GUICBHold],15
|
||||
je near CalibrateDev1
|
||||
cmp byte[GUICBHold],16
|
||||
je near MoviePlay
|
||||
jne .notMoviePlay
|
||||
pushad
|
||||
call MoviePlay
|
||||
popad
|
||||
ret
|
||||
.notMoviePlay
|
||||
cmp byte[GUICBHold],17
|
||||
je near MovieRecord
|
||||
jne .notMovieRecord0
|
||||
pushad
|
||||
call MovieRecord
|
||||
popad
|
||||
ret
|
||||
.notMovieRecord0
|
||||
cmp byte[GUICBHold],18
|
||||
je near MovieStop
|
||||
jne .notMovieStop
|
||||
mov byte[GUICBHold],0
|
||||
pushad
|
||||
call MovieStop
|
||||
popad
|
||||
ret
|
||||
.notMovieStop
|
||||
cmp byte[GUICBHold],19
|
||||
je near MovieRecord
|
||||
jne .notMovieRecord1
|
||||
pushad
|
||||
call MovieRecord
|
||||
popad
|
||||
ret
|
||||
.notMovieRecord1
|
||||
cmp byte[GUICBHold],20
|
||||
je near SkipMovie
|
||||
jne .notSkipMovie
|
||||
pushad
|
||||
call SkipMovie
|
||||
popad
|
||||
ret
|
||||
.notSkipMovie
|
||||
cmp byte[GUICBHold],40
|
||||
je near SetAllKeys
|
||||
cmp byte[GUICBHold],50
|
||||
|
||||
@@ -530,15 +530,14 @@ SECTION .text
|
||||
call RemoteSendChar
|
||||
mov al,222
|
||||
call RemoteSendChar
|
||||
; Dan - Change this from looking into the welcome message forthe version.
|
||||
mov al,[versionNumber + 0]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber + 1]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber + 2]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber + 3]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber+1]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber+2]
|
||||
call RemoteSendChar
|
||||
mov al,[versionNumber+3]
|
||||
call RemoteSendChar
|
||||
mov al,[soundon]
|
||||
call RemoteSendChar
|
||||
cmp al,byte[CNetType]
|
||||
@@ -581,28 +580,28 @@ SECTION .text
|
||||
.nocheck3
|
||||
cmp byte[IDCheckPos],3
|
||||
jne .nocheck4
|
||||
cmp dl,[versionNumber + 0]
|
||||
cmp dl,[versionNumber]
|
||||
jne near .invversion
|
||||
mov byte[IDCheckPos],4
|
||||
ret
|
||||
.nocheck4
|
||||
cmp byte[IDCheckPos],4
|
||||
jne .nocheck5
|
||||
cmp dl,[versionNumber + 1]
|
||||
cmp dl,[versionNumber+1]
|
||||
jne near .invversion
|
||||
mov byte[IDCheckPos],5
|
||||
ret
|
||||
.nocheck5
|
||||
cmp byte[IDCheckPos],5
|
||||
jne .nocheck6
|
||||
cmp dl,[versionNumber + 2]
|
||||
cmp dl,[versionNumber+2]
|
||||
jne .invversion
|
||||
mov byte[IDCheckPos],6
|
||||
ret
|
||||
.nocheck6
|
||||
cmp byte[IDCheckPos],6
|
||||
jne .nocheck7
|
||||
cmp dl,[versionNumber + 3]
|
||||
cmp dl,[versionNumber+3]
|
||||
jne .invversion
|
||||
mov byte[IDCheckPos],9
|
||||
ret
|
||||
|
||||
@@ -1921,13 +1921,13 @@ DisplayGUIVideo:
|
||||
sub byte[GUItextcolor],15
|
||||
|
||||
%ifndef __MSDOS__
|
||||
GUIOuttextwin2 5,12,76,GUIVideoTextw0
|
||||
GUIOuttextwin2 5,12,83,GUIVideoTextw1
|
||||
GUIOuttextwin2 5,12,90,GUIVideoTextw2
|
||||
GUIOuttextwin2 5,12,97,GUIVideoTextw3
|
||||
GUIOuttextwin2 5,8,76,GUIVideoTextw0
|
||||
GUIOuttextwin2 5,10,85,GUIVideoTextw1
|
||||
GUIOuttextwin2 5,10,92,GUIVideoTextw2
|
||||
GUIOuttextwin2 5,10,99,GUIVideoTextw3
|
||||
%endif
|
||||
%ifdef __LINUX__
|
||||
GUIOuttextwin2 5,12,104,GUIVideoTextw4
|
||||
GUIOuttextwin2 5,10,106,GUIVideoTextw4
|
||||
%endif
|
||||
xor eax,eax
|
||||
mov al,[cvidmode]
|
||||
@@ -2057,13 +2057,13 @@ DisplayGUIVideo:
|
||||
add byte[GUItextcolor],15
|
||||
|
||||
%ifndef __MSDOS__
|
||||
GUIOuttextwin2 5,11,75,GUIVideoTextw0
|
||||
GUIOuttextwin2 5,11,82,GUIVideoTextw1
|
||||
GUIOuttextwin2 5,11,89,GUIVideoTextw2
|
||||
GUIOuttextwin2 5,11,96,GUIVideoTextw3
|
||||
GUIOuttextwin2 5,7,75,GUIVideoTextw0
|
||||
GUIOuttextwin2 5,9,84,GUIVideoTextw1
|
||||
GUIOuttextwin2 5,9,91,GUIVideoTextw2
|
||||
GUIOuttextwin2 5,9,98,GUIVideoTextw3
|
||||
%endif
|
||||
%ifdef __LINUX__
|
||||
GUIOuttextwin2 5,11,103,GUIVideoTextw4
|
||||
GUIOuttextwin2 5,9,105,GUIVideoTextw4
|
||||
%endif
|
||||
xor eax,eax
|
||||
mov al,[cvidmode]
|
||||
@@ -2531,10 +2531,11 @@ GUIVideoText8 db 'SET',0 ; set button
|
||||
GUIVideoText9 db 'VSYNC',0 ; -c
|
||||
GUIVideoTextH db 'MODE : ',0
|
||||
GUIVideoTextw0 db 'LEGEND:',0
|
||||
GUIVideoTextw1 db ' S = SCALED TO FIT SCREEN',0
|
||||
GUIVideoTextw2 db ' R = MATCHED SCREEN RATIO',0
|
||||
GUIVideoTextw3 db ' D = ALLOW 2XSAI,HIRES,ETC',0
|
||||
GUIVideoTextw4 db ' O = OPENGL MODE',0
|
||||
GUIVideoTextw1 db 'S = STRETCH R = KEEP RATIO',0
|
||||
GUIVideoTextw2 db ' D = ALLOW SPECIAL FILTERS',0
|
||||
GUIVideoTextw3 db ' W = WIN F = FULL',0
|
||||
GUIVideoTextw4 db ' O = USES OPENGL',0
|
||||
|
||||
|
||||
SECTION .bss
|
||||
GUIVStA resd 3
|
||||
@@ -4825,7 +4826,7 @@ NEWSYM LatencyLeft, db 2
|
||||
SECTION .bss
|
||||
NEWSYM NetSwap, resb 1
|
||||
RemCNetType resb 1
|
||||
UseRemoteSRAMData resb 1
|
||||
NEWSYM UseRemoteSRAMData, resb 1
|
||||
ChatString resb 276
|
||||
FileNameMod resb 512
|
||||
CurCStringPos resd 1
|
||||
@@ -5648,7 +5649,7 @@ DisplayGUIAbout:
|
||||
ret
|
||||
|
||||
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
|
||||
GUIGUIAboutText3 db ' ZSKNIGHT _DEMO_',0
|
||||
GUIGUIAboutText4 db ' PAGEFAULT NACH',0
|
||||
@@ -5793,7 +5794,7 @@ GUIMovieText7 db 'OKAY TO OVERWRITE?',0
|
||||
GUIMovieText8 db 'YES',0
|
||||
GUIMovieText9 db 'NO',0
|
||||
GUIMovieTextA db 'STATUS : ',0
|
||||
CMovieExt db 'v'
|
||||
NEWSYM CMovieExt, db 'v'
|
||||
|
||||
SECTION .text
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
EXTSYM DosExit,UpdateDevices,InitSPC,Makemode7Table,MusicRelVol,MusicVol
|
||||
EXTSYM makesprprtable,romloadskip,start65816,startdebugger,SfxR0
|
||||
EXTSYM MovieProcessing
|
||||
EXTSYM MovieFileHand,filefound,inittable,SA1inittable
|
||||
EXTSYM filefound,inittable,SA1inittable
|
||||
EXTSYM MessageOn,Msgptr,MsgCount,sndrot,GenerateBank0Table,SnowTimer
|
||||
EXTSYM inittableb,inittablec,newgfx16b,cfgreinittime
|
||||
EXTSYM Open_File,Read_File,Write_File,Close_File,Output_Text,Get_Key,CNetType
|
||||
@@ -36,7 +36,6 @@ EXTSYM NewEngEnForce
|
||||
EXTSYM PrintChar
|
||||
EXTSYM TextFile
|
||||
EXTSYM Setper2exec,per2exec
|
||||
EXTSYM MovieCounter
|
||||
EXTSYM chaton
|
||||
EXTSYM JoyRead,JoyReadControl,joy4218,joy4219
|
||||
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 pl3ULk,pl3URk,pl3DLk,pl3DRk,pl4ULk,pl4URk,pl4DLk,pl4DRk
|
||||
EXTSYM pl5ULk,pl5URk,pl5DLk,pl5DRk,pl5Xtk,pl5Ytk,pl5Atk,pl5Btk
|
||||
EXTSYM Turbo30hz,RepeatFrame,nojoystickpoll
|
||||
EXTSYM Turbo30hz,nojoystickpoll
|
||||
EXTSYM NumComboLocl,ComboBlHeader,ComboHeader,CombinDataLocl
|
||||
EXTSYM CombinDataGlob,NumCombo,GUIComboGameSpec
|
||||
EXTSYM mousexloc,mouseyloc
|
||||
@@ -161,6 +160,8 @@ blah times 450 db 0
|
||||
; FIX STATMAT
|
||||
NEWSYM autoloadstate, db 0 ; auto load state slot number
|
||||
; FIX STATMAT
|
||||
NEWSYM EndMessage
|
||||
db ' ',13,10,0
|
||||
|
||||
SECTION .text
|
||||
|
||||
@@ -322,9 +323,6 @@ NEWSYM init
|
||||
mov byte[newengen],1
|
||||
mov byte[cfgnewgfx],1
|
||||
.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 eax,EndMessage
|
||||
mov dh,17h
|
||||
@@ -346,7 +344,6 @@ NEWSYM init
|
||||
inc ebx
|
||||
dec ch
|
||||
jnz .loopen
|
||||
%endif
|
||||
|
||||
cmp byte[yesoutofmemory],1
|
||||
jne .noout
|
||||
@@ -1045,254 +1042,13 @@ NEWSYM ReadInputDevice
|
||||
.nopl24
|
||||
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
|
||||
|
||||
.movieended db 'MOVIE FINISHED.',0
|
||||
NEWSYM txtmovieended, db 'MOVIE FINISHED.',0
|
||||
NEWSYM CFWriteStart, dd 64+30
|
||||
|
||||
SECTION .bss
|
||||
NEWSYM MovieBuffSize, resd 1
|
||||
NEWSYM MovieBuffFrame, resd 1
|
||||
MovieBuffer resd 21*60
|
||||
NEWSYM CReadHead, resd 1
|
||||
NEWSYM ReadHead, resd 1
|
||||
NEWSYM CFWriteHead, resd 1
|
||||
|
||||
@@ -901,26 +901,26 @@ NEWSYM NumVideoModes, dd 4
|
||||
; GUI Video Mode Names - Make sure that all names are of the same length
|
||||
; and end with a NULL terminator
|
||||
NEWSYM GUIVideoModeNames
|
||||
db '256X224 R WIN ',0 ;0
|
||||
db '256x224 R FULL',0 ;1
|
||||
db '512X448 DR WIN ',0 ;2
|
||||
db '640x480 DS FULL',0 ;3
|
||||
db '256X224 R W',0 ;0
|
||||
db '256x224 R F',0 ;1
|
||||
db '512X448 DR W',0 ;2
|
||||
db '640x480 DR F',0 ;3
|
||||
%ifdef __OPENGL__
|
||||
db '256x224 OR WIN ',0 ;4
|
||||
db '512x448 ODR WIN ',0 ;5
|
||||
db '640x480 ODS FULL',0 ;6
|
||||
db '640x480 ODS WIN ',0 ;7
|
||||
db '640x576 ODR WIN ',0 ;8
|
||||
db '768x672 ODR WIN ',0 ;9
|
||||
db '800x600 ODS FULL',0 ;10
|
||||
db '800x600 ODS WIN ',0 ;11
|
||||
db '896x784 ODR WIN ',0 ;12
|
||||
db '1024x768 ODS FULL',0 ;13
|
||||
db '1024x768 ODS WIN ',0 ;14
|
||||
db '1024x896 ODR WIN ',0 ;15
|
||||
db '1280x1024ODS FULL',0 ;16
|
||||
db '1600x1200ODS FULL',0 ;17
|
||||
db 'VARIABLE ODR WIN ',0 ;18
|
||||
db '256x224 OR W',0 ;4
|
||||
db '512x448 ODR W',0 ;5
|
||||
db '640x480 ODS F',0 ;6
|
||||
db '640x480 ODS W',0 ;7
|
||||
db '640x576 ODR W',0 ;8
|
||||
db '768x672 ODR W',0 ;9
|
||||
db '800x600 ODS F',0 ;10
|
||||
db '800x600 ODS W',0 ;11
|
||||
db '896x784 ODR W',0 ;12
|
||||
db '1024x768 ODS F',0 ;13
|
||||
db '1024x768 ODS W',0 ;14
|
||||
db '1024x896 ODR W',0 ;15
|
||||
db '1280x1024 ODS F',0 ;16
|
||||
db '1600x1200 ODS F',0 ;17
|
||||
db 'VARIABLE ODR W',0 ;18
|
||||
|
||||
%endif
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ bits 32
|
||||
section .text
|
||||
; Zsnes required macros
|
||||
|
||||
%define ZVERSION 'Pre 1.43' ; Don't forget to put the 'v' here now
|
||||
%define ZVERSION 'Pre 1.43'
|
||||
|
||||
%ifdef ELF
|
||||
%imacro newsym 1
|
||||
|
||||
@@ -152,7 +152,7 @@ CHIPSOBJ=${CHIPDIR}/dsp1emu${OE} ${CHIPDIR}/fxemu2${OE} ${CHIPDIR}/sfxproc${OE}\
|
||||
CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\
|
||||
${CPUDIR}/execute${OE} ${CPUDIR}/irq${OE} ${CPUDIR}/memory${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}
|
||||
|
||||
@@ -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}/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}\
|
||||
${DOSDIR}/initvid${OE} ${DOSDIR}/sw${OE} ${DOSDIR}/gppro${OE} ${DOSDIR}/vesa12${OE}\
|
||||
@@ -252,9 +253,10 @@ initc${OE}: $< ${JMADIR}/zsnesjma.h
|
||||
uic${OE}: $<
|
||||
patch${OE}: $<
|
||||
endmem${OE}: $< macros.mac
|
||||
zmovie${OE}: $< gblvars.h
|
||||
zstate${OE}: $< gblvars.h
|
||||
|
||||
${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}/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\
|
||||
|
||||
117
zsnes/src/uic.c
117
zsnes/src/uic.c
@@ -35,14 +35,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
#define true 1
|
||||
#define false 0
|
||||
|
||||
extern void outofmemory();
|
||||
|
||||
extern unsigned char *vbufaptr;
|
||||
extern unsigned char *vbufeptr;
|
||||
extern unsigned char *ngwinptrb;
|
||||
extern unsigned char *vbufdptr;
|
||||
extern unsigned char *romaptr;
|
||||
extern unsigned char welcome[452+16]; // 452=message string, 16=version string
|
||||
extern unsigned char mydebug[2];
|
||||
extern unsigned char outofmem[51];
|
||||
extern unsigned char YesMMX[34];
|
||||
@@ -147,7 +144,7 @@ void *doMemAlloc(size_t size)
|
||||
{
|
||||
void *ptr = NULL;
|
||||
ptr = malloc(size);
|
||||
if (!ptr) { outofmemory(); }
|
||||
if (!ptr) { asm_call(outofmemory); }
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
@@ -175,22 +172,22 @@ void cycleinputdevice()
|
||||
if (snesmouse == 0)
|
||||
{
|
||||
if (input1gp && input2gp) { return; }
|
||||
snesmouse++;
|
||||
snesmouse++;
|
||||
}
|
||||
if (snesmouse == 1)
|
||||
{
|
||||
if (input1mouse) { return; }
|
||||
snesmouse++;
|
||||
snesmouse++;
|
||||
}
|
||||
if (snesmouse == 2)
|
||||
{
|
||||
if (input2mouse) { return; }
|
||||
snesmouse++;
|
||||
snesmouse++;
|
||||
}
|
||||
if (snesmouse == 3)
|
||||
{
|
||||
if (input2scope) { return; }
|
||||
snesmouse++;
|
||||
snesmouse++;
|
||||
}
|
||||
if (snesmouse == 4)
|
||||
{
|
||||
@@ -199,60 +196,84 @@ void cycleinputdevice()
|
||||
}
|
||||
}
|
||||
|
||||
extern unsigned char soundon;
|
||||
extern unsigned char SPCDisable;
|
||||
extern unsigned char spcon;
|
||||
extern unsigned char FPSOn;
|
||||
extern unsigned char FPSAtStart;
|
||||
extern unsigned int xa;
|
||||
extern unsigned char soundon, SPCDisable, spcon, FPSOn, FPSAtStart;
|
||||
|
||||
const unsigned int versionNumber = 0x00000143;
|
||||
const char* ZVERSION = "Pre 1.43";
|
||||
const unsigned int versionNumber = 0x0000008F; // 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 ()
|
||||
{
|
||||
asm_call(StartUp);
|
||||
unsigned int ptr;
|
||||
|
||||
// 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(StartUp);
|
||||
|
||||
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
|
||||
OSPC_Init ();
|
||||
OSPC_Init();
|
||||
#else
|
||||
asm_call(setnoise);
|
||||
asm_call(InitSPC);
|
||||
asm_call(setnoise);
|
||||
asm_call(InitSPC);
|
||||
#endif
|
||||
|
||||
asm_call(allocmem);
|
||||
asm_call(allocmem);
|
||||
|
||||
if (!soundon && !SPCDisable)
|
||||
{
|
||||
soundon = 1;
|
||||
spcon = 1;
|
||||
DSPDisable = 1;
|
||||
}
|
||||
if (!soundon && (SPCDisable != 1))
|
||||
{
|
||||
soundon = 1;
|
||||
spcon = 1;
|
||||
DSPDisable = 1;
|
||||
}
|
||||
|
||||
if (SPCDisable)
|
||||
{
|
||||
soundon = 0;
|
||||
spcon = 0;
|
||||
}
|
||||
if (SPCDisable)
|
||||
{
|
||||
soundon = 0;
|
||||
spcon = 0;
|
||||
}
|
||||
|
||||
if (!frameskip)
|
||||
{
|
||||
FPSOn = FPSAtStart;
|
||||
}
|
||||
if (!frameskip)
|
||||
{
|
||||
FPSOn = FPSAtStart;
|
||||
}
|
||||
|
||||
gammalevel16b = gammalevel * 2;
|
||||
gammalevel16b = gammalevel >> 1;
|
||||
|
||||
asm_call(MMXCheck);
|
||||
asm_call(init);
|
||||
asm_call(MMXCheck);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1213,39 +1213,39 @@ NEWSYM NumVideoModes, dd 33
|
||||
; GUI Video Mode Names - Make sure that all names are of the same length
|
||||
; and end with a NULL terminator
|
||||
NEWSYM GUIVideoModeNames
|
||||
db '256x224 R WIN ',0 ;0
|
||||
db '256x224 R FULL',0 ;1
|
||||
db '512x448 R WIN ',0 ;2
|
||||
db '512x448 DR WIN ',0 ;3
|
||||
db '640x480 S WIN ',0 ;4
|
||||
db '640x480 DS WIN ',0 ;5
|
||||
db '640x480 DR FULL',0 ;6
|
||||
db '640x480 DS FULL',0 ;7
|
||||
db '640x480 S FULL',0 ;8
|
||||
db '768x672 R WIN ',0 ;9
|
||||
db '768x672 DR WIN ',0 ;10
|
||||
db '800x600 S WIN ',0 ;11
|
||||
db '800x600 DS WIN ',0 ;12
|
||||
db '800x600 S FULL',0 ;13
|
||||
db '800x600 DR FULL',0 ;14
|
||||
db '800x600 DS FULL',0 ;15
|
||||
db '1024x768 S WIN ',0 ;16
|
||||
db '1024x768 DS WIN ',0 ;17
|
||||
db '1024x768 S FULL',0 ;18
|
||||
db '1024x768 DR FULL',0 ;19
|
||||
db '1024x768 DS FULL',0 ;20
|
||||
db '1024x896 R WIN ',0 ;21
|
||||
db '1024x896 DR WIN ',0 ;22
|
||||
db '1280x960 S WIN ',0 ;23
|
||||
db '1280x960 DS WIN ',0 ;24
|
||||
db '1280x960 S FULL',0 ;25
|
||||
db '1280x960 DR FULL',0 ;26
|
||||
db '1280x960 DS FULL',0 ;27
|
||||
db '1280x1024 S WIN ',0 ;28
|
||||
db '1280x1024 DS WIN ',0 ;29
|
||||
db '1280x1024 S FULL',0 ;30
|
||||
db '1280x1024 DR FULL',0 ;31
|
||||
db '1280x1024 DS FULL',0 ;32
|
||||
db '256x224 R W',0 ;0
|
||||
db '256x224 R F',0 ;1
|
||||
db '512x448 R W',0 ;2
|
||||
db '512x448 DR W',0 ;3
|
||||
db '640x480 S W',0 ;4
|
||||
db '640x480 DS W',0 ;5
|
||||
db '640x480 DR F',0 ;6
|
||||
db '640x480 DS F',0 ;7
|
||||
db '640x480 S F',0 ;8
|
||||
db '768x672 R W',0 ;9
|
||||
db '768x672 DR W',0 ;10
|
||||
db '800x600 S W',0 ;11
|
||||
db '800x600 DS W',0 ;12
|
||||
db '800x600 S F',0 ;13
|
||||
db '800x600 DR F',0 ;14
|
||||
db '800x600 DS F',0 ;15
|
||||
db '1024x768 S W',0 ;16
|
||||
db '1024x768 DS W',0 ;17
|
||||
db '1024x768 S F',0 ;18
|
||||
db '1024x768 DR F',0 ;19
|
||||
db '1024x768 DS F',0 ;20
|
||||
db '1024x896 R W',0 ;21
|
||||
db '1024x896 DR W',0 ;22
|
||||
db '1280x960 S W',0 ;23
|
||||
db '1280x960 DS W',0 ;24
|
||||
db '1280x960 S F',0 ;25
|
||||
db '1280x960 DR F',0 ;26
|
||||
db '1280x960 DS F',0 ;27
|
||||
db '1280x1024 S W',0 ;28
|
||||
db '1280x1024 DS W',0 ;29
|
||||
db '1280x1024 S F',0 ;30
|
||||
db '1280x1024 DR F',0 ;31
|
||||
db '1280x1024 DS F',0 ;32
|
||||
|
||||
; Video Mode Feature Availability (1 = Available, 0 = Not Available)
|
||||
; Left side starts with Video Mode 0
|
||||
|
||||
448
zsnes/src/zmovie.c
Normal file
448
zsnes/src/zmovie.c
Normal 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
1020
zsnes/src/zstate.c
Executable file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user