diff --git a/zsnes/src/cpu/memtable.c b/zsnes/src/cpu/memtable.c index 62bc3f38..8e819ecb 100644 --- a/zsnes/src/cpu/memtable.c +++ b/zsnes/src/cpu/memtable.c @@ -252,14 +252,14 @@ void repackfunct() } void regaccessbankr8(), regaccessbankw8(), regaccessbankr16(), regaccessbankw16(); -void memaccessbankr8(), memaccessbankw8(), memaccessbankr16(), memaccessbankw16(); -void wramaccessbankr8(), wramaccessbankw8(), wramaccessbankr16(), wramaccessbankw16(); -void sramaccessbankr8(), sramaccessbankw8(), sramaccessbankr16(), sramaccessbankw16(); -void eramaccessbankr8(), eramaccessbankw8(), eramaccessbankr16(), eramaccessbankw16(); +void memaccessbankr8(), memaccessbankw8(), memaccessbankr16(), memaccessbankw16(); +void wramaccessbankr8(), wramaccessbankw8(), wramaccessbankr16(), wramaccessbankw16(); +void sramaccessbankr8(), sramaccessbankw8(), sramaccessbankr16(), sramaccessbankw16(); +void eramaccessbankr8(), eramaccessbankw8(), eramaccessbankr16(), eramaccessbankw16(); void regaccessbankr8SA1(), regaccessbankw8SA1(), regaccessbankr16SA1(), regaccessbankw16SA1(); -void SA1RAMaccessbankr8(), SA1RAMaccessbankw8(), SA1RAMaccessbankr16(), SA1RAMaccessbankw16(); -void SA1RAMaccessbankr8b(), SA1RAMaccessbankw8b(), SA1RAMaccessbankr16b(), SA1RAMaccessbankw16b(); +void SA1RAMaccessbankr8(), SA1RAMaccessbankw8(), SA1RAMaccessbankr16(), SA1RAMaccessbankw16(); +void SA1RAMaccessbankr8b(), SA1RAMaccessbankw8b(), SA1RAMaccessbankr16b(), SA1RAMaccessbankw16b(); void sramaccessbankr8s(), sramaccessbankw8s(), sramaccessbankr16s(), sramaccessbankw16s(); void DSP1Read8b3F(), DSP1Write8b3F(), DSP1Read16b3F(), DSP1Write16b3F(); @@ -272,13 +272,13 @@ void sfxaccessbankr8b(), sfxaccessbankw8b(), sfxaccessbankr16b(), sfxaccessbankw void sfxaccessbankr8c(), sfxaccessbankw8c(), sfxaccessbankr16c(), sfxaccessbankw16c(); void sfxaccessbankr8d(), sfxaccessbankw8d(), sfxaccessbankr16d(), sfxaccessbankw16d(); -mrwp regbank = { regaccessbankr8, regaccessbankw8, regaccessbankr16, regaccessbankw16 }; +mrwp regbank = { regaccessbankr8, regaccessbankw8, regaccessbankr16, regaccessbankw16 }; mrwp membank = { memaccessbankr8, memaccessbankw8, memaccessbankr16, memaccessbankw16 }; mrwp wrambank = { wramaccessbankr8, wramaccessbankw8, wramaccessbankr16, wramaccessbankw16 }; mrwp srambank = { sramaccessbankr8, sramaccessbankw8, sramaccessbankr16, sramaccessbankw16 }; mrwp erambank = { eramaccessbankr8, eramaccessbankw8, eramaccessbankr16, eramaccessbankw16 }; -mrwp sa1regbank = { regaccessbankr8SA1, regaccessbankw8SA1, regaccessbankr16SA1, regaccessbankw16SA1 }; +mrwp sa1regbank = { regaccessbankr8SA1, regaccessbankw8SA1, regaccessbankr16SA1, regaccessbankw16SA1 }; mrwp sa1rambank = { SA1RAMaccessbankr8, SA1RAMaccessbankw8, SA1RAMaccessbankr16, SA1RAMaccessbankw16 }; mrwp sa1rambankb = { SA1RAMaccessbankr8b, SA1RAMaccessbankw8b, SA1RAMaccessbankr16b, SA1RAMaccessbankw16b }; @@ -295,8 +295,7 @@ mrwp sfxbankd = { sfxaccessbankr8d, sfxaccessbankw8d, sfxaccessbankr16d, sfxacce void SetAddressingModes() -{ - // Banks +{ // Banks map_mem(0x00, ®bank, 0x40); // 00 - 3F map_mem(0x40, &membank, 0x30); // 49 - 6F map_mem(0x70, &srambank, 0x08); // 70 - 77 @@ -309,7 +308,6 @@ void SetAddressingModes() void SetAddressingModesSA1() { - // Banks map_mem(0x00, &sa1regbank, 0x40); // 00 - 3F map_mem(0x40, &sa1rambank, 0x30); // 49 - 6F map_mem(0x70, &sa1rambankb, 0x08); // 70 - 77 diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index 6efbbc28..3a618bda 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -18,7 +18,7 @@ ;along with this program; if not, write to the Free Software ;Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - + ; Sorry. The GUI code is a total mess. One problem I encountered is that ; there seems to be a bug in nasm with using math calculations combined ; with macros within macros, so in some macro definitions, I had to @@ -63,23 +63,23 @@ ; ButtonProcess - routines that processes boxed buttons ; CheatCodeSearchInit ; guiwincontrol - + %include "macros.mac" -EXTSYM curblank, vidpastecopyscr, frameskip, newengen, vsyncon -EXTSYM cvidmode, antienab, smallscreenon, smallscreence,NetQuit -EXTSYM soundon, StereoSound, SoundQuality, MusicRelVol -EXTSYM endprog, continueprog, spcBuffera, spcRamcmp, cbitmode, makepal -EXTSYM t1cc, LoadDir, LoadDrive, SRAMDir, SRAMChdir, SRAMDirCurDir, initsnes, romloadskip -EXTSYM fname, makeextension, sram, loadfileGUI, GUIloadfailed -EXTSYM SetupROM, romdata, ForcePal, ramsize, ramsizeand, curromsize -EXTSYM romispal, totlines, cfgloadsdir, init65816, procexecloop -EXTSYM spcRam, spcPCRam, spcS, spcRamDP, spcA, spcX, spcY, spcP, spcNZ -EXTSYM Voice0Status, Voice1Status, Voice2Status, Voice3Status, Voice4Status -EXTSYM Voice5Status, Voice6Status, Voice7Status, romtype, SetIRQVectors -EXTSYM ClearScreen, statesaver, loadstate2, vidbuffer, ASCII2Font, hirestiledat -EXTSYM showallext, ROMTypeNOTFound, scanlines,statefileloc,pl1selk,pl2selk +EXTSYM curblank,vidpastecopyscr,frameskip,newengen,vsyncon +EXTSYM cvidmode,antienab, smallscreenon, smallscreence,NetQuit +EXTSYM soundon,StereoSound,SoundQuality,MusicRelVol +EXTSYM endprog,continueprog,spcBuffera,spcRamcmp,cbitmode,makepal +EXTSYM t1cc,LoadDir,LoadDrive,SRAMDir,SRAMChdir,SRAMDirCurDir,initsnes +EXTSYM fname,makeextension,sram,loadfileGUI,GUIloadfailed,romloadskip +EXTSYM SetupROM,romdata,ForcePal,ramsize,ramsizeand,curromsize +EXTSYM romispal,totlines,cfgloadsdir,init65816,procexecloop +EXTSYM spcRam,spcPCRam,spcS,spcRamDP,spcA,spcX,spcY,spcP,spcNZ +EXTSYM Voice0Status,Voice1Status,Voice2Status,Voice3Status,Voice4Status +EXTSYM Voice5Status,Voice6Status,Voice7Status,romtype +EXTSYM ClearScreen,statesaver,loadstate2,vidbuffer,ASCII2Font,hirestiledat +EXTSYM showallext,ROMTypeNOTFound,scanlines,statefileloc,pl1selk,pl2selk EXTSYM fnamest,sprlefttot,spritetablea,fnames,CHIPBATT,sfxramdata,setaramdata,SETAEnable,cgram,srama EXTSYM tempco0,prevbright,maxbr,prevpal,coladdr,coladdg,coladdb EXTSYM scaddtype,ScreenScale,vesa2red10,initvideo2,initvideo,pressed,UpdateDevices @@ -148,7 +148,7 @@ EXTSYM outofmemfix,yesoutofmemory EXTSYM JoyX,JoyY,JoyMinX,JoyMinY,JoyMaxX,JoyMaxY,JoyMinX209,JoyMaxX209 EXTSYM JoyMinY209,JoyMaxY209,GetCoords,GetCoords3 EXTSYM MultiTap,SFXEnable -EXTSYM RestoreSystemVars +EXTSYM RestoreSystemVars EXTSYM TCPIPStartServer EXTSYM TCPIPInitConnectToServer EXTSYM TCPIPWaitForConnection @@ -234,7 +234,7 @@ NEWSYM WaterOn, db 1 ; Video ; Sound ; Paths -; Saves +; Saves ; MultiPlay only has "Internet" for Windows/Linux @@ -386,10 +386,10 @@ GUIloadfntype db 0 NEWSYM pl3selk, dd 0 ; 3SELECT = SHIFT NEWSYM pl3startk, dd 0 ; 3START = ENTER -NEWSYM pl3upk, dd 0 ; 3UP = up -NEWSYM pl3downk, dd 0 ; 3DOWN = down -NEWSYM pl3leftk, dd 0 ; 3LEFT = left -NEWSYM pl3rightk, dd 0 ; 3RIGHT = right +NEWSYM pl3upk, dd 0 ; 3UP = up +NEWSYM pl3downk, dd 0 ; 3DOWN = down +NEWSYM pl3leftk, dd 0 ; 3LEFT = left +NEWSYM pl3rightk, dd 0 ; 3RIGHT = right NEWSYM pl3Xk, dd 0 ; 3X = INS NEWSYM pl3Ak, dd 0 ; 3A = HOME NEWSYM pl3Lk, dd 0 ; 3L = PAGE UP @@ -398,10 +398,10 @@ NEWSYM pl3Bk, dd 0 ; 3B = END NEWSYM pl3Rk, dd 0 ; 3R = PAGE DOWN NEWSYM pl4selk, dd 0 ; 4SELECT = SHIFT NEWSYM pl4startk, dd 0 ; 4START = ENTER -NEWSYM pl4upk, dd 0 ; 4UP = up -NEWSYM pl4downk, dd 0 ; 4DOWN = down -NEWSYM pl4leftk, dd 0 ; 4LEFT = left -NEWSYM pl4rightk, dd 0 ; 4RIGHT = right +NEWSYM pl4upk, dd 0 ; 4UP = up +NEWSYM pl4downk, dd 0 ; 4DOWN = down +NEWSYM pl4leftk, dd 0 ; 4LEFT = left +NEWSYM pl4rightk, dd 0 ; 4RIGHT = right NEWSYM pl4Xk, dd 0 ; 4X = INS NEWSYM pl4Ak, dd 0 ; 4A = HOME NEWSYM pl4Lk, dd 0 ; 4L = PAGE UP @@ -544,10 +544,10 @@ NEWSYM GUIEffect, db 0 NEWSYM pl5selk, dd 0 ; 4SELECT = SHIFT NEWSYM pl5startk, dd 0 ; 4START = ENTER -NEWSYM pl5upk, dd 0 ; 4UP = up -NEWSYM pl5downk, dd 0 ; 4DOWN = down -NEWSYM pl5leftk, dd 0 ; 4LEFT = left -NEWSYM pl5rightk, dd 0 ; 4RIGHT = right +NEWSYM pl5upk, dd 0 ; 4UP = up +NEWSYM pl5downk, dd 0 ; 4DOWN = down +NEWSYM pl5leftk, dd 0 ; 4LEFT = left +NEWSYM pl5rightk, dd 0 ; 4RIGHT = right NEWSYM pl5Xk, dd 0 ; 4X = INS NEWSYM pl5Ak, dd 0 ; 4A = HOME NEWSYM pl5Lk, dd 0 ; 4L = PAGE UP @@ -851,7 +851,7 @@ clearsram: dec ecx jnz .loop2 .nosfxbatt - + cmp byte[SETAEnable],0 je .nosetasram mov eax,[setaramdata] @@ -866,7 +866,7 @@ clearsram: cmp byte[SA1Enable],1 jne .nosa1 cmp byte[CHIPBATT],1 - jne .nosa1 + jne .nosa1 mov eax,[SA1RAMArea] mov ecx,65536*2 .loop3 @@ -1496,26 +1496,26 @@ NEWSYM SaveSramData je .savesramdone mov edx,[sram] - cmp byte[SFXEnable],1 + cmp byte[SFXEnable],1 jne .notsfx mov edx,[sfxramdata] -.notsfx +.notsfx cmp byte[SA1Enable],1 jne .notsa1 mov edx,[SA1RAMArea] -.notsa1 +.notsa1 cmp byte[SETAEnable],1 jne .notseta mov edx,[setaramdata] .notseta - cmp edx,[sram] + cmp edx,[sram] je .notspecial cmp byte[CHIPBATT],0 je .savesramdone .notspecial - + clim - + push edx ;Backup data to save mov edx,fnames+1 call Create_File @@ -1527,11 +1527,11 @@ NEWSYM SaveSramData call Write_File call Close_File push edx ;Dirty hack for the next line -.failed +.failed pop edx ;This is needed here because if the jump to failed is carried out, edx is never popped stim .savesramdone - + call SaveCombFile ; change dir to InitDrive/InitDir @@ -1852,7 +1852,7 @@ NEWSYM StartGUI call GUIQuickLoadUpdate call LoadDetermine - + ; change dir to LoadDrive/LoadDir mov dl,[LoadDrive] mov ebx,LoadDir @@ -2357,8 +2357,8 @@ NEWSYM StartGUI mov dword[PBackupPos],0 call RestoreCVFrame popad - mov esi,[tempesi] - mov edi,[tempedi] + mov esi,[tempesi] + mov edi,[tempedi] mov ebp,[tempebp] .norestoreval @@ -2861,8 +2861,8 @@ guipostvideo: cmp dword[GUIkeydelay],0 je .pressedokay - - mov byte[pressed+39h],0 + + mov byte[pressed+39h],0 call JoyRead cmp byte[pressed+39h],0 jne .pressedokay @@ -3415,10 +3415,10 @@ DisplayBoxes: jmp .finstuff .noguichosesave cmp al,3 - jne .noguiinput - call DisplayGUIInput + jne .noguiinput + call DisplayGUIInput jmp .finstuff -.noguiinput +.noguiinput cmp al,4 jne .noguioption call DisplayGUIOption @@ -3598,9 +3598,9 @@ GUIProcReset: jne .nomovierecording call ResetDuringMovie jmp .movieendif -.nomovierecording +.nomovierecording call GUIDoReset -.movieendif +.movieendif popad cmp byte[CNetType],20 jne .noreset @@ -3940,7 +3940,9 @@ InitGUI: call GetScreen .nong16b call ClearScreen + pushad call Clear2xSaIBuffer + popad call GUISetPal call GUIBufferData ret @@ -5408,7 +5410,7 @@ GUIIconDataCheckBoxUC: GUIIconDataCheckBoxC: db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0 - db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0 + db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0 db 0 ,0 ,0 ,0 ,0 ,0 ,165,0 ,0 ,0 db 0 ,220,219,218,217,165,215,0 ,0 ,0 db 0 ,165,165,217,165,165,214,202,0 ,0 diff --git a/zsnes/src/gui/guikeys.inc b/zsnes/src/gui/guikeys.inc index 69e0bf70..4e4d5877 100644 --- a/zsnes/src/gui/guikeys.inc +++ b/zsnes/src/gui/guikeys.inc @@ -915,11 +915,11 @@ GUIOptionKeys: cmp dh,'P' jne .noautopatch xor byte[AutoPatch],1 -.noautopatch +.noautopatch cmp dh,'T' jne .norominfo xor byte[RomInfo],1 -.norominfo +.norominfo %ifdef __WIN32__ cmp dh,'I' jne .noscreensaver @@ -927,7 +927,7 @@ GUIOptionKeys: .noscreensaver %endif ret - + GUISaveKeys: cmp dh,'a' jb .nocap @@ -1071,12 +1071,16 @@ GUIGUIOptnsKeys: cmp byte[En2xSaI],1 jnae .guioptn15 call ClearScreen + pushad call Clear2xSaIBuffer + popad .guioptn15 cmp byte[hqFilter],0 je .guioptn16 call ClearScreen + pushad call Clear2xSaIBuffer + popad .guioptn16 ret @@ -1105,7 +1109,7 @@ GUIVideoKeys: jmp .refresh .nomodeq cmp byte[cvidmode],5 - jne .nofullscanlines + jne .nofullscanlines .refresh mov byte[cbitmode],1 call initvideo2 @@ -1177,7 +1181,9 @@ GUIVideoKeys: mov bl,[cvidmode] cmp byte[GUI2xVID+ebx],0 je near .no2xsai + pushad call Clear2xSaIBuffer + popad GUIkeystoggleoptn byte[En2xSaI],1 .no2xsai cmp dh,'E' @@ -1186,7 +1192,9 @@ GUIVideoKeys: mov bl,[cvidmode] cmp byte[GUI2xVID+ebx],0 je near .nosupereagle + pushad call Clear2xSaIBuffer + popad GUIkeystoggleoptn byte[En2xSaI],2 .nosupereagle cmp dh,'S' @@ -1195,7 +1203,9 @@ GUIVideoKeys: mov bl,[cvidmode] cmp byte[GUI2xVID+ebx],0 je near .nosuper2xsai + pushad call Clear2xSaIBuffer + popad GUIkeystoggleoptn byte[En2xSaI],3 .nosuper2xsai cmp dh,'I' @@ -1371,7 +1381,7 @@ GUIVideoKeys: cmp dl,72 jne .noup %endif -.up +.up cmp dword[GUIcurrentvideocursloc],0 je .noup mov ebx,[GUIcurrentvideocursloc] @@ -1754,7 +1764,7 @@ GUIPathKeys: jmp .findend .foundend - cmp dh,8 ;Backspace + cmp dh,8 ;Backspace jne .notbackspace cmp eax,ecx je .cantback @@ -1762,7 +1772,7 @@ GUIPathKeys: .cantback ret .notbackspace - + cmp dh,13 ;Enter jne .notenter mov dword[GUIInputBox],0 diff --git a/zsnes/src/gui/guiload.inc b/zsnes/src/gui/guiload.inc index 58806547..97e7980f 100644 --- a/zsnes/src/gui/guiload.inc +++ b/zsnes/src/gui/guiload.inc @@ -273,7 +273,7 @@ GUIloadfilename: mov dword[nmiprevline],224 mov dword[nmistatus],0 mov dword[spcnumread],0 - mov dword[spchalted],-1 + mov dword[spchalted],-1 mov byte[NextLineCache],0 mov byte[curexecstate],1 @@ -293,8 +293,8 @@ GUIloadfilename: mov byte[CheatWinMode],0 mov byte[CheatSearchStatus],0 - call SetupROM pushad + call SetupROM call showinfogui popad call initsnes diff --git a/zsnes/src/gui/guimisc.inc b/zsnes/src/gui/guimisc.inc index c4ce706b..f666a00b 100644 --- a/zsnes/src/gui/guimisc.inc +++ b/zsnes/src/gui/guimisc.inc @@ -128,7 +128,7 @@ SetAllKeys: mov edi,pl5selk mov dword[keycontrolval],pl5contrl .nopl5 - + ;Check if controller is set push eax mov eax,dword[keycontrolval] @@ -136,7 +136,7 @@ SetAllKeys: pop eax jne .noLockInputChange ret -.noLockInputChange +.noLockInputChange mov dword[guicpressptr],edi xor ebx,ebx mov ecx,12 @@ -361,7 +361,9 @@ SetDevice: NEWSYM GUIDoReset call ClearScreen + pushad call Clear2xSaIBuffer + popad ; mov byte[NetPlayNoMore],1 mov byte[RestoreValues],0 diff --git a/zsnes/src/gui/guimouse.inc b/zsnes/src/gui/guimouse.inc index 014f889c..1cf4a559 100644 --- a/zsnes/src/gui/guimouse.inc +++ b/zsnes/src/gui/guimouse.inc @@ -1411,7 +1411,9 @@ GUIWinClicked: cmp edx,%2+8 jg %%noclick xor %3,1 + pushad call Clear2xSaIBuffer + popad %%noclick %endmacro @@ -2119,7 +2121,7 @@ DisplayGUIMovieClick: GUIPButtonHole 100,40,byte[CMovieExt],'7' GUIPButtonHole 120,40,byte[CMovieExt],'8' GUIPButtonHole 140,40,byte[CMovieExt],'9' - + DGOptnsProcBox 116,68,[KeyInsrtChap] DGOptnsProcBox 116,84,[KeyNextChap] DGOptnsProcBox 116,100,[KeyPrevChap] @@ -2244,7 +2246,7 @@ DisplayGUIInputClick: mov edi,pl5selk mov dword[keycontrolval],pl5contrl .nopl5 - + ;Check if controller is set push eax mov eax,dword[keycontrolval] @@ -3333,9 +3335,9 @@ DisplayGUISaveClick: GUIPHoldbutton2 173,32,181,40,72,byte[RewindFrames],1,40 GUIPHoldbutton2 184,32,192,40,73,byte[RewindFrames],-1,0 DGOptnsProcBox 27,121,[KeyStateSlc0] - DGOptnsProcBox 27+45,121,[KeyStateSlc1] + DGOptnsProcBox 27+45,121,[KeyStateSlc1] DGOptnsProcBox 27+45*2,121,[KeyStateSlc2] - DGOptnsProcBox 27+45*3,121,[KeyStateSlc3] + DGOptnsProcBox 27+45*3,121,[KeyStateSlc3] DGOptnsProcBox 27,130,[KeyStateSlc4] DGOptnsProcBox 27+45,130,[KeyStateSlc5] DGOptnsProcBox 27+45*2,130,[KeyStateSlc6] diff --git a/zsnes/src/gui/menu.asm b/zsnes/src/gui/menu.asm index f5946aee..d0d669ed 100644 --- a/zsnes/src/gui/menu.asm +++ b/zsnes/src/gui/menu.asm @@ -30,7 +30,7 @@ EXTSYM spcon,vesa2_bpos,vesa2_clbit,vesa2_gpos,vesa2_rpos,vesa2selec EXTSYM vidbuffer,spritetablea,sprlefttot,newengen,spcextraram,resolutn EXTSYM Open_File,Close_File,Read_File,Write_File,Create_File,Get_Key,Get_Date EXTSYM continueprognokeys,ForceNonTransp,GUIOn,Check_Key,JoyRead -EXTSYM GetScreen,SSKeyPressed,SPCKeyPressed,StopSound,StartSound +EXTSYM GetScreen,SSKeyPressed,SPCKeyPressed,StopSound,StartSound EXTSYM ExecExitOkay,t1cc EXTSYM Clear2xSaIBuffer EXTSYM romdata,romtype,ScreenShotFormat @@ -213,7 +213,7 @@ NEWSYM showmenu .nomenuinc3 mov dword[menudrawbox8b.stringi+13],' BMP' -%ifndef NO_PNG +%ifndef NO_PNG cmp byte[ScreenShotFormat],0 je .normalscrn mov dword[menudrawbox8b.stringi+13],' PNG' @@ -484,7 +484,9 @@ NEWSYM showmenu call StartSound mov byte[ForceNonTransp],0 mov byte[GUIOn],0 + pushad call Clear2xSaIBuffer + popad cmp byte[MenuNoExit],1 je .noexitmenu jmp continueprognokeys @@ -1172,7 +1174,7 @@ NEWSYM savepcx ret .notpng %endif - + mov byte[pressed+1],0 mov byte[pressed+59],0 cmp byte[cbitmode],1 diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index b1576780..b265fcf0 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -96,25 +96,12 @@ EXTSYM sfxaccessbankw8d,sfxramdata EXTSYM sramaccessbankr16,sramaccessbankr16s,sramaccessbankr8,sramaccessbankr8s EXTSYM sramaccessbankw16,sramaccessbankw16s,sramaccessbankw8,sramaccessbankw8s EXTSYM ScrDispl,wramreadptr,wramwriteptr -EXTSYM loadstate2,headerhack +EXTSYM loadstate2,CMovieExt,MoviePlay ;initc.c -EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,loadZipFile,ZOpenFileName -EXTSYM loadROM,CalcChecksum,BankCheck,MirrorROM,SplittedROM,addOnStart,addOnSize -EXTSYM SPC7PackIndexLoad,SPC7110IndexSize,DumpROMLoadInfo,SetupSramSize,IntlEHi -EXTSYM CHIPBATT,SETAEnable,C4Enable,SPC7110Enable,RTCEnable,SA1Enable,SDD1Enable -EXTSYM OBCEnable,SFXEnable,ST18Enable,SGBEnable,DSP1Enable,DSP2Enable,DSP3Enable -EXTSYM DSP4Enable,BSEnable,clearvidsound - -EXTSYM calculate_state_sizes,InitRewindVars - -EXTSYM SetaCmdEnable,setaramdata -EXTSYM setaaccessbankr8,setaaccessbankw8,setaaccessbankr8a,setaaccessbankw8a -EXTSYM setaaccessbankr16,setaaccessbankw16,setaaccessbankr16a,setaaccessbankw16a -EXTSYM DSP2Read8b,DSP2Read16b,DSP2Write8b,DSP2Write16b,InitDSP2 -EXTSYM DSP4Read8b,DSP4Read16b,DSP4Write8b,DSP4Write16b,InitDSP4 - -EXTSYM SetupROMc,CMovieExt,MoviePlay +EXTSYM clearmem,clearSPCRAM,PatchUsingIPS,ZOpenFileName,loadROM,SPC7110IndexSize +EXTSYM SPC7PackIndexLoad,IntlEHi,C4Enable,SPC7110Enable,RTCEnable,SA1Enable +EXTSYM SDD1Enable,OBCEnable,SFXEnable,BSEnable,clearvidsound,headerhack,SetupROM %ifdef __LINUX__ EXTSYM LoadDir,popdir,pushdir @@ -137,7 +124,7 @@ blah times 450 db 0 NEWSYM autoloadstate, db 0 ; auto load state slot number NEWSYM autoloadmovie, db 0 -NEWSYM EndMessage +NEWSYM EndMessage db ' ',13,10,0 SECTION .text @@ -170,7 +157,7 @@ NEWSYM init pushad call BackupSystemVars popad - + xor eax,eax mov al,[cfgreinittime] mov ebx,50 @@ -218,8 +205,8 @@ NEWSYM init .found mov byte[romloadskip],0 call loadfile - call SetupROM pushad + call SetupROM call showinfogui popad .noloadfile @@ -254,7 +241,7 @@ NEWSYM init jge .2digits mov al,byte[autoloadstate] add al,48 - mov byte[fnamest+ebx],al + mov byte[fnamest+ebx],al jmp .enddigits .2digits xor eax,eax @@ -300,13 +287,13 @@ NEWSYM init mov al,'v' .notzero1 mov byte[CMovieExt],al - + pushad call MoviePlay popad - + .noautloadmovie - + xor eax,eax mov al,[cvidmode] cmp byte[GUI16VID+eax],1 @@ -379,7 +366,7 @@ NEWSYM pl1selk, dd 54 NEWSYM pl1startk, dd 28 NEWSYM pl1upk, dd 200 NEWSYM pl1downk, dd 208 -NEWSYM pl1leftk, dd 203 +NEWSYM pl1leftk, dd 203 NEWSYM pl1rightk, dd 205 %endif NEWSYM pl1Xk, dd 31 @@ -1307,7 +1294,7 @@ NEWSYM init65816 jne .notbsx2 mov eax,0FFFFFFFFh helpclearmem wramdataa, 65536 - helpclearmem ram7fa, 65536 + helpclearmem ram7fa, 65536 cmp byte[romtype],1 ;Hack for BS HiROMs jne .notbsx2 mov dword[ram7fa+65528],01010101h @@ -1710,7 +1697,7 @@ NEWSYM initsnes stosd add eax,10000h dec ecx - jnz .loopbb + jnz .loopbb ; set banks 80-BF (40h x 32KB ROM banks @ 8000h) mov eax,[romdata] mov ecx,40h @@ -2173,7 +2160,7 @@ NEWSYM printhex8 ; Search for header size first which is filesize MOD 32768 NEWSYM PatchIPS -%ifdef __LINUX__ +%ifdef __LINUX__ pushad call pushdir popad @@ -2601,7 +2588,7 @@ NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0 ;******************************************************* ; Show Information ;******************************************************* -; +; ; Maker Code = FFB0-FFB1 ; Game Code = FFB2-FFB5 ; Expansion RAM Size = FFBD (0=none, 1=16kbit, 3=64kbit, 5=256kbit,etc. @@ -2616,63 +2603,6 @@ NEWSYM CSStatus3, db 'VIDEO: CRC32: ',0 SECTION .bss NEWSYM DSP1Type, resb 1 NEWSYM intldone, resb 1 -SECTION .text - -EXTSYM ClearScreen, cbitmode, makepal - -NEWSYM SetupROM - pushad - call SetupROMc - popad -; call CheckROMType - call SetIRQVectors - call ClearScreen - cmp byte[cbitmode],0 - jne .nomakepal - call makepal -.nomakepal - ; get ROM and SRAM size - mov esi,[romdata] - add esi,[infoloc] - add esi,18h - mov cl,[esi-1] - mov [curromsize],cl - pushad - call SetupSramSize - call calculate_state_sizes - call InitRewindVars - popad - - ; get pal/ntsc - inc esi - mov al,[ForceROMTiming] - mov byte[ForcePal],al - xor al,al - mov al,[esi] - cmp byte[ForcePal],1 - jne .nontsc - mov al,0 -.nontsc - cmp byte[ForcePal],2 - jne .nopal2 - mov al,2 -.nopal2 - mov byte[romispal],0 - mov word[totlines],263 - mov dword[MsgCount],120 - cmp byte[BSEnable],1 - je .nopal - cmp al,1 - jbe .nopal - cmp al,0Dh - jae .nopal - mov byte[romispal],1 - mov word[totlines],314 - mov dword[MsgCount],100 -.nopal - ret - -SECTION .bss NEWSYM C4RamR, resd 1 NEWSYM C4RamW, resd 1 NEWSYM C4Ram, resd 1 @@ -2680,64 +2610,6 @@ NEWSYM ROMTypeNOTFound, resb 1 NEWSYM Interleaved, resb 1 SECTION .text -NEWSYM SetIRQVectors - ; Get Vectors (NMI & Reset) - mov esi,[romdata] - add esi,[infoloc] - add esi,21 - mov al,[esi] - test al,0F0h - jnz .yesfastrom - mov al,[opexec268] - mov [opexec358],al - mov al,[opexec268cph] - mov [opexec358cph],al - mov al,[cycpb268] - mov [cycpb358],al -.yesfastrom - add esi,0Fh - cmp word[esi+24],0FFFFh - jne .notreseterror - mov word[esi+6],0FF9Ch - mov word[esi+24],0FF80h -.notreseterror - lodsw - mov [copv],ax - lodsw - mov [brkv],ax - lodsw - mov [abortv],ax - lodsw - mov [nmiv],ax - mov [nmiv2],ax - add esi,2 - lodsw - mov [irqv],ax - mov [irqv2],ax - add esi,4 - ; 8-bit and reset - lodsw - mov [copv8],ax - inc esi - inc esi - lodsw - mov [abortv8],ax - lodsw - mov [nmiv8],ax - lodsw - mov [resetv],ax - lodsw - mov [brkv8],ax - mov [irqv8],ax - cmp byte[yesoutofmemory],0 - je .notfailed - mov word[resetv],8000h - mov esi,[romdata] - mov word[esi],0FE80h - mov word[esi+8000h],0FE80h -.notfailed - ret - NEWSYM outofmemfix mov esi,[romdata] cmp byte[romtype],2 diff --git a/zsnes/src/initc.c b/zsnes/src/initc.c index ad7c1eb4..969974b9 100755 --- a/zsnes/src/initc.c +++ b/zsnes/src/initc.c @@ -216,7 +216,7 @@ void CheckIntlEHi(unsigned char *ROM) //Swap 4MB ROM with the other one SwapData(romdata, romdata+((NumofBytes-0x400000)/4), 0x100000); - + //Deinterleave the 4MB ROM first NumofBanks = 128; deintlv1(); @@ -252,7 +252,7 @@ void IntlEHi() { SwapData(romdata, romdata + 0x100000, 0x80000); SwapData(romdata + 0x80000, romdata + 0x100000, 0x80000); - + NumofBanks = 64; intlv1(); NumofBanks = 192; @@ -415,12 +415,12 @@ void chip_detect() BSEnable = false; SFXEnable = false; SETAEnable = false; - + //DSP Family if (ROM[infoloc+TypeOffset] == 3) { if (ROM[infoloc+BankOffset] == 48) - { + { DSP4Enable = true; } else @@ -428,16 +428,16 @@ void chip_detect() DSP1Enable = true; } return; - } + } if (ROM[infoloc+TypeOffset] == 5) { CHIPBATT = true; if (ROM[infoloc+BankOffset] == 32) - { + { DSP2Enable = true; } else if (ROM[infoloc+BankOffset] == 48 && ROM[infoloc+CompanyOffset] == 0xB2) //Bandai - { + { DSP3Enable = true; } else @@ -454,26 +454,26 @@ void chip_detect() SFXEnable = true; return; break; - - + + case 0x1520: //GSU-x + Battery case 0x1A20: //GSU-1 + Battery + Start in 21MHz SFXEnable = true; - CHIPBATT = true; + CHIPBATT = true; return; break; - + case 0x2530: OBCEnable = true; CHIPBATT = true; return; break; - + case 0x3423: SA1Enable = true; return; break; - + case 0x3523: SA1Enable = true; CHIPBATT = true; @@ -487,38 +487,38 @@ void chip_detect() case 0x4532: SDD1Enable = true; - CHIPBATT = true; + CHIPBATT = true; return; break; - + case 0x5535: RTCEnable = true; CHIPBATT = true; return; break; - + case 0xE320: SGBEnable = true; return; break; - - case 0xF320: + + case 0xF320: C4Enable = true; return; break; - - case 0xF530: + + case 0xF530: ST18Enable = true; - CHIPBATT = true; //Check later if this should be removed + CHIPBATT = true; //Check later if this should be removed return; break; - + case 0xF53A: SPC7110Enable = true; CHIPBATT = true; return; break; - + case 0xF630: SETAEnable = true; CHIPBATT = true; @@ -527,7 +527,7 @@ void chip_detect() case 0xF93A: SPC7110Enable = true; - RTCEnable = true; + RTCEnable = true; CHIPBATT = true; return; break; @@ -679,7 +679,7 @@ char *lastROMFileName; void DumpROMLoadInfo() { FILE *fp = 0; - + if (RomInfo) //rominfo.txt info dumping enabled? { fp = fopen("rominfo.txt", "w"); @@ -740,7 +740,7 @@ void loadFile(char *filename) curromspace += stat_results.st_size; if (!multifile) { return; } - + (*incrementer)++; } else @@ -768,16 +768,16 @@ void loadGZipFile(char *filename) if ((unsigned int)size > maxromspace+512) { return; } //Open GZip file for decompression - GZipFile = gzopen(filename, "rb"); - + GZipFile = gzopen(filename, "rb"); + //Decompress file into memory - err = gzread(GZipFile, romdata, size); - + err = gzread(GZipFile, romdata, size); + //Close compressed file gzclose(GZipFile); if (err != size) { return; } - + curromspace = size; } @@ -791,7 +791,7 @@ void loadZipFile(char *filename) { int err, fileSize; unsigned char *ROM = (unsigned char *)romdata; - bool multifile = false, NSS = false; + bool multifile = false, NSS = false; char *incrementer = 0; unzFile zipfile = unzOpen(filename); //Open zip file @@ -799,11 +799,11 @@ void loadZipFile(char *filename) unz_file_info cFileInfo; //Create variable to hold info for a compressed file int LargestGoodFile = 0; //To keep track of largest file - + //Variables for the file we pick char ourFile[256]; ourFile[0] = '\n'; - + while(cFile == UNZ_OK) //While not at end of compressed file list { //Temporary char array for file name @@ -825,13 +825,13 @@ void loadZipFile(char *filename) incrementer = ourFile+strlen(ourFile)-1; multifile = true; break; - } + } } //Find Nintendo Super System ROMs if (strlen(cFileName) >= 5) //Char + ".IC2" { - char *ext = cFileName+strlen(cFileName)-4; + char *ext = cFileName+strlen(cFileName)-4; if (!strncasecmp(ext, ".IC", 3)) { strcpy(ourFile, cFileName); @@ -848,12 +848,12 @@ void loadZipFile(char *filename) { strcpy(ourFile, cFileName); LargestGoodFile = fileSize; - } + } - //Go to next file in zip file - cFile = unzGoToNextFile(zipfile); + //Go to next file in zip file + cFile = unzGoToNextFile(zipfile); } - + //No files found if (ourFile[0] == '\n') { @@ -883,14 +883,14 @@ void loadZipFile(char *filename) //Too big? if (curromspace + fileSize > maxromspace+512) - { + { unzClose(zipfile); return; } //Open file unzOpenCurrentFile(zipfile); - + //Read file into memory err = unzReadCurrentFile(zipfile, ROM+curromspace, fileSize); @@ -899,7 +899,7 @@ void loadZipFile(char *filename) //Encountered error? if (err != fileSize) - { + { unzClose(zipfile); return; } @@ -920,7 +920,7 @@ void loadZipFile(char *filename) } if (!multifile) - { + { unzClose(zipfile); return; } @@ -934,7 +934,7 @@ void SplitSetup(char *basepath, char *basefile, unsigned int MirrorSystem) curromspace = 0; if (maxromspace < addOnStart+addOnSize) { return; } - memcpy(ROM+addOnStart, ROM, addOnSize); + memcpy(ROM+addOnStart, ROM, addOnSize); if (*basepath == 0) { @@ -974,19 +974,19 @@ void SplitSetup(char *basepath, char *basefile, unsigned int MirrorSystem) case 1: memcpy(ROM+0x100000, ROM, 0x100000); //Mirror 8 to 16 break; - - case 2: + + case 2: memcpy(ROM+0x180000, ROM+0x100000, 0x80000); //Mirrors 12 to 16 memcpy(ROM+0x200000, ROM+0x400000, 0x80000); //Copy base over memset(ROM+0x280000, 0, 0x180000); //Blank out rest break; - + case 3: memcpy(ROM+0x40000, ROM, 0x40000); memcpy(ROM+0x80000, ROM, 0x80000); break; } - + curromspace = addOnStart+addOnSize; SplittedROM = true; } @@ -998,7 +998,7 @@ void SplitSupport() { unsigned char *ROM = (unsigned char *)romdata; SplittedROM = false; - + //Same Game add on if (ROM[Hi+CompanyOffset] == 0x33 && curromspace == 0x80000 && !ROM[Hi+BankOffset] && !ROM[Hi+BSMonthOffset] && !ROM[Hi+BSDayOffset]) @@ -1006,9 +1006,9 @@ void SplitSupport() addOnStart = 0x200000; addOnSize = 0x80000; SplitSetup(SGPath, "SAMEGAME.ZIP", 1); - } + } - //SD Gundam G-Next add on + //SD Gundam G-Next add on if (ROM[Lo+CompanyOffset] == 0x33 && curromspace == 0x80000 && !ROM[Lo+BankOffset] && !ROM[Lo+BSMonthOffset] && !ROM[Lo+BSDayOffset] && !strncmp(ROM+Lo, "GNEXT", 5)) { @@ -1016,7 +1016,7 @@ void SplitSupport() addOnSize = 0x80000; SplitSetup(GNextPath, "G-NEXT.ZIP", 2); addOnStart = 0x200000; - } + } //Sufami Turbo if (!strncmp(ROM, "BANDAI SFC-ADX", 14)) @@ -1024,7 +1024,7 @@ void SplitSupport() addOnStart = 0x100000; addOnSize = curromspace; SplitSetup(STPath, "STBIOS.ZIP", 3); - } + } } bool NSRTHead(unsigned char *ROM) @@ -1038,9 +1038,9 @@ bool NSRTHead(unsigned char *ROM) (NSRTHead[0] & 0x0F) > 13 || ((NSRTHead[0] & 0xF0) >> 4) > 3 || ((NSRTHead[0] & 0xF0) >> 4) == 0) - { + { return(false); //Corrupt - } + } return(true); //NSRT header } return(false); //None @@ -1122,7 +1122,7 @@ void loadROM() case 512: Header512 = true; break; - + default: { unsigned char *ROM = (unsigned char *)romdata; @@ -1149,7 +1149,7 @@ void loadROM() } } - snesmouse = 0; + snesmouse = 0; input1gp = true; input1mouse = true; input2gp = true; @@ -1158,11 +1158,11 @@ void loadROM() input2just = true; if (Header512) - { + { unsigned char *ROM = (unsigned char *)romdata; if (NSRTHead(ROM)) { - switch (ROM[0x1ED]) + switch (ROM[0x1ED]) { default: break; @@ -1179,7 +1179,7 @@ void loadROM() input2scope = false; input2just = false; input1mouse = false; - break; + break; case 0x03: //Super Scope port 2 snesmouse = 3; @@ -1248,7 +1248,7 @@ void loadROM() } } curromspace -= 512; - memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace); + memmove((unsigned char *)romdata, ((unsigned char *)romdata)+512, curromspace); } snesinputdefault = snesmouse; @@ -1854,7 +1854,6 @@ extern unsigned int spcnumread, spchalted; extern unsigned char NextLineCache, sramsavedis, sndrot, regsbackup[3019]; extern unsigned char yesoutofmemory, fnames[512]; -void SetupROM(); void initsnes(); void outofmemfix(); void GUIDoReset(); @@ -1876,34 +1875,6 @@ bool loadSRAM(char *sramname) else { return(false); } } -void powercycle(bool sramload) -{ - memset(sram, 0xFF, 32768); - clearSPCRAM(); - - nmiprevaddrl = 0; - nmiprevaddrh = 0; - nmirept = 0; - nmiprevline = 224; - nmistatus = 0; - spcnumread = 0; - spchalted = ~0; - NextLineCache = 0; - curexecstate = 1; - - if (sramload) { loadSRAM(fnames+1); } - asm_call(SetupROM); - asm_call(initsnes); - - sramsavedis = 0; - - memcpy(&sndrot, regsbackup, 3019); - - if (yesoutofmemory == 1) { asm_call(outofmemfix); } - - asm_call(GUIDoReset); -} - extern unsigned int Voice0Freq, Voice1Freq, Voice2Freq, Voice3Freq; extern unsigned int Voice4Freq, Voice5Freq, Voice6Freq, Voice7Freq; extern unsigned int dspPAdj; @@ -1932,13 +1903,16 @@ void initpitch() extern unsigned int SfxR1, SfxR2, SetaCmdEnable, SfxSFR, SfxSCMR; extern unsigned char lorommapmode2, disablespcclr, *sfxramdata, SramExists; -extern unsigned char *setaramdata, *wramdata, *SA1RAMArea; +extern unsigned char *setaramdata, *wramdata, *SA1RAMArea, cbitmode, curromsize; +extern unsigned char ForcePal, ForceROMTiming, romispal; +extern unsigned short totlines; void SetAddressingModes(), GenerateBank0Table(); void SetAddressingModesSA1(), GenerateBank0TableSA1(); +void calculate_state_sizes(), InitRewindVars(); void InitDSP(), InitDSP2(), InitDSP4(), InitFxTables(), initregr(), initregw(); -void SPC7110Load(); +void SPC7110Load(), DOSClearScreen(), dosmakepal(); -void CheckROMTypeC() +void CheckROMType() { unsigned char *ROM = (unsigned char *)romdata; @@ -1947,7 +1921,7 @@ void CheckROMTypeC() lorommapmode2 = 0; if (!strncmp(ROM+0x207FC0, "DERBY STALLION 96", 17) || !strncmp(ROM+Lo, "SOUND NOVEL-TCOOL", 17)) - { + { lorommapmode2 = 1; } @@ -1968,7 +1942,11 @@ void CheckROMTypeC() if (DSP1Enable || DSP2Enable || DSP3Enable) { - if (DSP2Enable) { asm_call(InitDSP2); } + if (DSP2Enable) + { + asm_call(InitDSP2); + } + InitDSP(); DSP1Type = (romtype == 2) ? 2 : 1; @@ -1983,7 +1961,7 @@ void CheckROMTypeC() } if (SFXEnable) - { + { // Setup SuperFX stuff if (Sup48mbit) { @@ -1992,10 +1970,10 @@ void CheckROMTypeC() map_mem(0x71, &sfxbankb, 1); map_mem(0x72, &sfxbankc, 1); map_mem(0x73, &sfxbankd, 1); - + //SRAM mapping, banks 78 - 79 map_mem(0x78, &sramsbank, 2); - + SfxR1 = 0; SfxR2 = 0; memset(sfxramdata, 0, 262144); // clear 256kB SFX ram @@ -2016,11 +1994,11 @@ void CheckROMTypeC() if (SETAEnable) { // Setup SETA 010/011 stuff - + // Really banks 68h-6Fh:0000-7FFF are all mapped the same by the chip but // F1 ROC II only uses bank 68h map_mem(0x68, &setabank, 1); - + // Control register (and some status?) is in banks 60h-67h:0000-3FFF map_mem(0x60, &setabanka, 1); @@ -2029,7 +2007,7 @@ void CheckROMTypeC() // proper SETA sram area if (SramExists) - { + { memcpy(setaramdata, sram, 4096); } } @@ -2059,7 +2037,7 @@ void CheckROMTypeC() map_mem(0x30, &dsp1bank, 0x10); map_mem(0xB0, &dsp1bank, 0x10); map_mem(0xE0, &dsp1bank, 0x10); - + if (DSP2Enable) { map_mem(0x3F, &dsp2bank, 1); @@ -2071,7 +2049,124 @@ void CheckROMTypeC() asm_call(SPC7110Load); } -void SetupROMc() -{ - CheckROMTypeC(); +extern unsigned short copv, brkv, abortv, nmiv, nmiv2, irqv, irqv2, resetv; +extern unsigned short copv8, brkv8, abortv8, nmiv8, irqv8; + +void SetIRQVectors() +{ // get vectors (NMI & reset) + unsigned char *ROM = (unsigned char *)romdata; + + if (!(ROM[infoloc+21] & 0xF0)) // if not fastrom + { + opexec358 = opexec268; + opexec358cph = opexec268cph; + cycpb358 = cycpb268; + } + + if (!memcmp(ROM+infoloc+36+24, "\0xFF\0xFF", 2)) // if reset error + { + memcpy(ROM+infoloc+36+6, "\0x9C\0xFF", 2); + memcpy(ROM+infoloc+36+24, "\0x80\0xFF", 2); + } + + memcpy(&copv, ROM+infoloc+0x24, 2); + memcpy(&brkv, ROM+infoloc+0x26, 2); + memcpy(&abortv, ROM+infoloc+0x28, 2); + memcpy(&nmiv, ROM+infoloc+0x2A, 2); + memcpy(&nmiv2, ROM+infoloc+0x2A, 2); + memcpy(&irqv, ROM+infoloc+0x2E, 2); + memcpy(&irqv2, ROM+infoloc+0x2E, 2); + + // 8-bit and reset + memcpy(&copv8, ROM+infoloc+0x34, 2); + memcpy(&abortv8, ROM+infoloc+0x38, 2); + memcpy(&nmiv8, ROM+infoloc+0x3A, 2); + memcpy(&resetv, ROM+infoloc+0x3C, 2); + memcpy(&brkv8, ROM+infoloc+0x3E, 2); + memcpy(&irqv8, ROM+infoloc+0x3E, 2); + + if (yesoutofmemory) // failed ? + { + resetv = 0x8000; + memcpy(ROM+0x0000, "\0x80\0xFE", 2); + memcpy(ROM+0x8000, "\0x80\0xFE", 2); + } +} + +void SetupROM() +{ + unsigned char *ROM = (unsigned char *)romdata; + + CheckROMType(); + SetIRQVectors(); + + #ifdef __MSDOS__ + asm_call(DOSClearScreen); + + if (!cbitmode) // 8-bit mode uses a palette + { + asm_call(dosmakepal); + } + #endif + + // get ROM and SRAM sizes + curromsize = ROM[infoloc+0x17]; + + SetupSramSize(); + calculate_state_sizes(); + InitRewindVars(); + + // get timing (pal/ntsc) + ForcePal = ForceROMTiming; + + switch (ForcePal) + { + case 1: + romispal = 0; + break; + case 2: + romispal = (!BSEnable); + break; + default: + romispal = ((!BSEnable) && (ROM[infoloc+0x19] > 1) && (ROM[infoloc+0x19] < 0xD)); + } + + if (romispal) + { + totlines = 314; + MsgCount = 100; + } + else + { + totlines = 263; + MsgCount = 120; + } +} + +void powercycle(bool sramload) +{ + memset(sram, 0xFF, 32768); + clearSPCRAM(); + + nmiprevaddrl = 0; + nmiprevaddrh = 0; + nmirept = 0; + nmiprevline = 224; + nmistatus = 0; + spcnumread = 0; + spchalted = ~0; + NextLineCache = 0; + curexecstate = 1; + + if (sramload) { loadSRAM(fnames+1); } + SetupROM(); + asm_call(initsnes); + + sramsavedis = 0; + + memcpy(&sndrot, regsbackup, 3019); + + if (yesoutofmemory == 1) { asm_call(outofmemfix); } + + asm_call(GUIDoReset); } diff --git a/zsnes/src/video/procvid.asm b/zsnes/src/video/procvid.asm index 8a0de2cb..470516c4 100644 --- a/zsnes/src/video/procvid.asm +++ b/zsnes/src/video/procvid.asm @@ -63,7 +63,7 @@ EXTSYM GUICPC, newgfx16b EXTSYM vesa2_clbitng,vesa2_clbitng2,vesa2_clbitng3 EXTSYM granadd,CSStatus,CSStatus2,CSStatus3 EXTSYM SpecialLine -EXTSYM vidbufferofsb +EXTSYM Clear2xSaIBuffer ;EXTSYM Super2xSaI EXTSYM HalfTransB,HalfTransC @@ -134,7 +134,7 @@ NEWSYM FPUZero dec ecx jnz .TopOfLoop fstp st0 -%endif +%endif ret %if 0 @@ -553,11 +553,11 @@ NEWSYM FontData db 01111100b,11000110b,11000000b,11000000b ; G, 11 db 11001110b,11000110b,01111100b,00000000b db 11000110b,11000110b,11000110b,11111110b ; H, 12 - db 11000110b,11000110b,11000110b,00000000b + db 11000110b,11000110b,11000110b,00000000b db 00111100b,00011000b,00011000b,00011000b ; I, 13 - db 00011000b,00011000b,00111100b,00000000b + db 00011000b,00011000b,00111100b,00000000b db 00011110b,00001100b,00001100b,00001100b ; J, 14 - db 00001100b,11001100b,00111100b,00000000b + db 00001100b,11001100b,00111100b,00000000b db 11001100b,11011000b,11110000b,11100000b ; K, 15 db 11110000b,11011000b,11001100b,00000000b db 11000000b,11000000b,11000000b,11000000b ; L, 16 @@ -622,7 +622,7 @@ NEWSYM FontData ; #, 31 (, 3A {, 43 ; =, 32 ), 3B }, 44 ; ", 33 @, 3C Up,45 - ; \, 34 ', 3D Dn,46 + ; \, 34 ', 3D Dn,46 ; *, 35 !, 3E Lt,47 ; ?, 36 $, 3F Rt,48 ; %, 37 ;, 40 Bk,49 @@ -1540,7 +1540,7 @@ NEWSYM saveselect pushad call mzt_chdir popad -.nomovie +.nomovie mov byte[f3menuen],1 mov byte[ForceNonTransp],1 cmp byte[ForceNewGfxOff],0 @@ -1774,7 +1774,7 @@ NEWSYM saveselect pushad call UpChdir popad -.nomovie2 +.nomovie2 ret SECTION .bss @@ -2081,13 +2081,15 @@ SECTION .text mov byte[f3menuen],0 mov byte[ForceNonTransp],0 mov byte[GUIOn],0 + pushad call Clear2xSaIBuffer + popad cmp byte[MovieProcessing],0 jz .nomovie3 pushad call UpChdir popad -.nomovie3 +.nomovie3 ret SECTION .data @@ -3227,12 +3229,12 @@ NEWSYM chatTL, resd 1 SECTION .data NEWSYM chatreqtable - db 0 ,2 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,0 + db 0 ,2 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,0 db 'Q','W','E','R','T','Y','U','I','O','P','[',']',13 ,0 ,'A','S' db 'D','F','G','H','J','K','L',';',27h,'`',1 ,'\','Z','X','C','V' db 'B','N','M',',','.','/',1 ,0 ,0 ,' ',0 ,0 ,0 ,0 ,0 ,0 ; Shift Key Presses - db 0 ,2 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,0 + db 0 ,2 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,0 db 'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0 ,'A','S' db 'D','F','G','H','J','K','L',':','"','~',1 ,'|','Z','X','C','V' db 'B','N','M','<','>','?',1 ,0 ,0 ,' ',0 ,0 ,0 ,0 ,0 ,0 @@ -3581,13 +3583,13 @@ NEWSYM copyvid jne .not16bframe mov esi,216*288*2+32*2 add esi,[vidbuffer] - call OutputGraphicString16b5x5 + call OutputGraphicString16b5x5 jmp .nomovie4 .not16bframe mov esi,216*288+32 add esi,[vidbuffer] call OutputGraphicString5x5 -.nomovie4 +.nomovie4 jmp vidpaste SECTION .bss .sdrawptr resd 1 @@ -3711,19 +3713,6 @@ NEWSYM vidpaste SECTION .bss .SSRedCo resw 1 -SECTION .text - - -NEWSYM Clear2xSaIBuffer - mov ebx,[vidbufferofsb] - add ebx,288*2 - mov ecx,144*239 -.nextb - mov dword[ebx],0FFFFFFFFh - add ebx,4 - dec ecx - jnz .nextb - ret SECTION .data NEWSYM MsgCount, dd 120 ; How long message will stay (PAL = 100) diff --git a/zsnes/src/video/procvidc.c b/zsnes/src/video/procvidc.c index 8f5d47a1..e5685dbf 100644 --- a/zsnes/src/video/procvidc.c +++ b/zsnes/src/video/procvidc.c @@ -22,8 +22,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#ifdef __LINUX__ +#include "gblhdr.h" +#define DIR_SLASH "/" +#else +#include +#include +#include +#include +#include +#define DIR_SLASH "\\" +#endif + extern unsigned int newengen, nggposng[2]; -extern unsigned short PrevPicture[64*56], *vidbuffer; +extern unsigned short PrevPicture[64*56], *vidbuffer, *vidbufferofsb; void CapturePicture() { @@ -61,3 +73,8 @@ void CapturePicture() } // 0111 1111 1110 0000 and 0000 0000 0001 1111 } } + +void Clear2xSaIBuffer() +{ + memset(vidbufferofsb+576, 0xFF, 576*239); +} diff --git a/zsnes/src/win/winlink.cpp b/zsnes/src/win/winlink.cpp index 44cff039..057675cd 100644 --- a/zsnes/src/win/winlink.cpp +++ b/zsnes/src/win/winlink.cpp @@ -26,7 +26,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. extern "C" { #include #include - #include + #include //#include #include #include @@ -390,7 +390,7 @@ void DrawScreen() DD_Primary->Blt(&rcWindow, AltSurface == 0 ? DD_CFB : DD_CFB16, &BlitArea, DDBLT_WAIT, NULL); } } - + DWORD InputEn=0; BOOL InputAcquire(void) @@ -652,11 +652,11 @@ LRESULT CALLBACK Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_PAINT: ValidateRect(hWnd,NULL); break; - case WM_ACTIVATE: + case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE) { IsActivated = 1; - if (FirstActivate == 0) initwinvideo(); + if (FirstActivate == 0) initwinvideo(); InputAcquire(); if (FirstActivate == 1) FirstActivate = 0; CheckPriority(); @@ -769,7 +769,7 @@ BOOL InitSound() else UsePrimaryBuffer=0; } } - else + else { return FALSE; } @@ -826,7 +826,7 @@ BOOL InitSound() wfx.wBitsPerSample = 16; wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; wfx.cbSize=0; - + memset(&dsbd, 0, sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STICKYFOCUS; @@ -863,8 +863,8 @@ BOOL InitSound() SoundEnabled=1; FirstSound=0; return TRUE; - } - else + } + else { return FALSE; } @@ -955,7 +955,7 @@ BOOL ReInitSound() wfx.wBitsPerSample = 16; wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; wfx.cbSize=0; - + memset(&dsbd, 0, sizeof(DSBUFFERDESC)); dsbd.dwSize = sizeof(DSBUFFERDESC); dsbd.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STICKYFOCUS; @@ -992,8 +992,8 @@ BOOL ReInitSound() SoundEnabled=1; FirstSound=0; return TRUE; - } - else + } + else { return FALSE; } @@ -1100,7 +1100,7 @@ BOOL FAR PASCAL InitJoystickInput(LPCDIDEVICEINSTANCE pdinst, LPVOID pvRef) return DIENUM_CONTINUE; } - if (didc.dwButtons <= 16) + if (didc.dwButtons <= 16) NumBTN[CurrentJoy] = didc.dwButtons; else NumBTN[CurrentJoy] = 16; @@ -1396,7 +1396,7 @@ void TestJoy() } } - } + } } @@ -1462,7 +1462,7 @@ int InitDirectDraw() } ReleaseDirectDraw(); - + GetClientRect(hMainWindow, &rcWindow); ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow); ClientToScreen(hMainWindow, ( LPPOINT )&rcWindow + 1); @@ -1550,7 +1550,7 @@ int InitDirectDraw() ddsd2.dwSize = sizeof(DDSURFACEDESC2); ddsd2.dwFlags = DDSD_CAPS; ddsd2.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - + if (FullScreen == 1) { ddsd2.dwFlags |= DDSD_BACKBUFFERCOUNT; @@ -1592,20 +1592,20 @@ int InitDirectDraw() lpDD=NULL; return FALSE; } - + if (lpDDClipper->SetHWnd(0,hMainWindow) != DD_OK) { lpDD->Release(); lpDD=NULL; return FALSE; } - + if (DD_Primary->SetClipper(lpDDClipper) != DD_OK) { return FALSE; } } - + format.dwSize = sizeof(DDPIXELFORMAT); if (DD_Primary->GetPixelFormat(&format) != DD_OK) @@ -1720,7 +1720,7 @@ DWORD LockSurface() } else return(0); - } + } } void UnlockSurface() @@ -1948,8 +1948,8 @@ void initwinvideo(void) if (DMode == 1) { if ((DSMode == 1) || (FullScreen == 0)) - SurfaceX = 512; - else + SurfaceX = 512; + else SurfaceX = 640; SurfaceY=480; } @@ -2078,7 +2078,7 @@ void initwinvideo(void) CheckAlwaysOnTop(); if (!hMainWindow) - { + { return; } @@ -2098,7 +2098,7 @@ void initwinvideo(void) if (Force60hz) Refresh = 60; InitDirectDraw(); clearwin(); - asm_call(Clear2xSaIBuffer); + Clear2xSaIBuffer(); clear_display(); return; } @@ -2110,11 +2110,10 @@ void initwinvideo(void) ReleaseDirectDraw(); InitDirectDraw(); clearwin(); - asm_call(Clear2xSaIBuffer); + Clear2xSaIBuffer(); clear_display(); return; } - } extern unsigned int vidbuffer; @@ -2149,7 +2148,7 @@ void CheckTimers(void) } } start2 += update_ticks_pc2; - } + } if (T60HZEnabled == 1) { @@ -2159,7 +2158,7 @@ void CheckTimers(void) { Game60hzcall(); start += update_ticks_pc; - } + } } if (T36HZEnabled == 1) @@ -2170,7 +2169,7 @@ void CheckTimers(void) { GUI36hzcall(); start += update_ticks_pc; - } + } } } @@ -2533,7 +2532,7 @@ void drawscreenwin(void) SURFDW=(DWORD *) &SurfBuf[(resolutn-1)*pitch]; color32=0x7F000000; - + for(i=0;i<256;i++) { SURFDW[i]=color32; @@ -2541,11 +2540,11 @@ void drawscreenwin(void) SURFDW=(DWORD *) &SurfBuf[resolutn*pitch]; color32=0x7F000000; - + for(i=0;i<256;i++) { SURFDW[i]=color32; - } + } break; case 24: MessageBox (NULL, "Sorry. ZSNESw does not work in windowed 24 bit color modes. \nClick 'OK' to switch to a full screen mode.", "DDRAW Error" , MB_ICONERROR ); @@ -2579,7 +2578,7 @@ void drawscreenwin(void) { SURFDW=(DWORD *) &SurfBuf[j*pitch]; color32=0x7F000000; - + for(i=0;i<320;i++) { SURFDW[i]=color32; @@ -2612,7 +2611,7 @@ void drawscreenwin(void) ScreenPtr=ScreenPtr+576-512; SURFDW=(DWORD *) &SurfBuf[(j)*pitch]; } - + for(j=((resolutn-1)+8);j<240;j++) { SURFDW=(DWORD *) &SurfBuf[j*pitch]; @@ -2856,7 +2855,7 @@ void WinUpdateDevices() case 4500: keys[0x100 + i * 32 + 0] = 1; keys[0x100 + i * 32 + 3] = 1; - break; + break; case 9000: keys[0x100 + i * 32 + 0] = 1; break; @@ -2893,7 +2892,7 @@ void WinUpdateDevices() keys[0x100 + i * 32 + j] = 0; } } - } + } } @@ -3068,7 +3067,7 @@ void FrameSemaphore() QueryPerformanceCounter((LARGE_INTEGER*)&end); delay = ((update_ticks_pc - (end - start)) * 1000.0 / freq) - 3.0; - + if (delay>0.0) WaitForSingleObject(hLock, (unsigned int)delay); }