diff --git a/zsnes/src/Makefile.in b/zsnes/src/Makefile.in index 0b826225..865fcc30 100644 --- a/zsnes/src/Makefile.in +++ b/zsnes/src/Makefile.in @@ -41,7 +41,7 @@ CPUOBJ=${CPUDIR}/addrni.o ${CPUDIR}/dma.o ${CPUDIR}/dsp.o ${CPUDIR}/dspproc.o\ ${CPUDIR}/memtable.o ${CPUDIR}/spc700.o ${CPUDIR}/stable.o\ ${CPUDIR}/table.o ${CPUDIR}/tableb.o ${CPUDIR}/tablec.o -GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/menu.o +GUIOBJ=${GUIDIR}/gui.o ${GUIDIR}/guifuncs.o ${GUIDIR}/menu.o VIDEOBJ=${VIDEODIR}/makev16b.o ${VIDEODIR}/makev16t.o ${VIDEODIR}/makevid.o\ ${VIDEODIR}/mode716.o ${VIDEODIR}/mode716b.o ${VIDEODIR}/mode716d.o\ @@ -77,7 +77,7 @@ MAINOBJ=cfgload.o endmem.o init.o initc.o uic.o patch.o ui.o vcache.o version.o\ OBJS=${CHIPSOBJ} ${CPUOBJ} ${WINOBJ} ${WINDOSOBJ} ${GUIOBJ} ${VIDEOBJ} ${MAINOBJ} ${NETOBJ} ${ZIPOBJ} ${EFFECTSOBJ} ${JMAOBJ} -.SUFFIXES: .cpp .c .asm +.SUFFIXES: .cpp .c .asm %.o: %.cpp @CXX@ @CFLAGS@ -o $@ -c $< @@ -188,6 +188,7 @@ ${GUIDIR}/gui.o: ${GUIDIR}/gui.asm ${GUIDIR}/guitools.inc\ ${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\ ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\ ${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac +${GUIDIR}/guifuncs.o: ${GUIDIR}/guifuncs.c ${GUIDIR}/menu.o: ${GUIDIR}/menu.asm macros.mac ${VIDEODIR}/newgfx.o:${VIDEODIR}/newgfx.asm ${VIDEODIR}/vidmacro.mac\ ${VIDEODIR}/newgfx2.mac ${VIDEODIR}/newgfx.mac macros.mac diff --git a/zsnes/src/SConstruct b/zsnes/src/SConstruct index 7c352ac2..cfed25c1 100644 --- a/zsnes/src/SConstruct +++ b/zsnes/src/SConstruct @@ -44,6 +44,7 @@ source_files = Split(""" effects/water.c effects/smoke.c gui/gui.asm + gui/guifuncs.c gui/menu.asm video/makev16b.asm video/makev16t.asm diff --git a/zsnes/src/dos/dosintrf.asm b/zsnes/src/dos/dosintrf.asm index 07c56dc3..f0499d74 100644 --- a/zsnes/src/dos/dosintrf.asm +++ b/zsnes/src/dos/dosintrf.asm @@ -102,7 +102,9 @@ NEWSYM SystemInit mov ebx,InitDir call Change_Dir + pushad call GUIRestoreVars ; Load GUI stuff + popad call getcfg ; Load cfg stuff call obtaindir ; Get Save/Init Directories call ConvertJoyMap ; Mini joystick init @@ -124,7 +126,9 @@ NEWSYM createnewcfg call DOScreatenewcfg ret NEWSYM GUISaveVars + pushad call ExecGUISaveVars + popad ret ; Allocate memory - see allocptr in ui.asm for details on what to allocate diff --git a/zsnes/src/gui/gui.asm b/zsnes/src/gui/gui.asm index 638cf238..91c0c7ef 100644 --- a/zsnes/src/gui/gui.asm +++ b/zsnes/src/gui/gui.asm @@ -252,7 +252,7 @@ GUIMiscMenuData ; If menu should go to Load or last position when ESC ; is pressed from game -GUIRAdd db 15 +NEWSYM GUIRAdd, db 15 GUIGAdd db 10 GUIBAdd db 31 mousewrap db 0 ; 0 = mouse boundries, 1 = mouse wrap @@ -335,8 +335,8 @@ prevloadnames times 16*10 db 32 prevloaddname times 128*10 db 0 prevloadfname times 16*10 db 32 prevlfreeze db 0 -GUIsmallscreenon db 0 -GUIScreenScale db 0 +NEWSYM GUIsmallscreenon, db 0 +NEWSYM GUIScreenScale, db 0 NEWSYM pl3contrl, db 0 NEWSYM pl4contrl, db 0 @@ -613,12 +613,12 @@ NEWSYM SDRatio, db 0 ; 0 = /2, 28 = /30 NEWSYM KeyEmuSpeedUp, dd 0 NEWSYM KeyEmuSpeedDown, dd 0 NEWSYM AllowUDLR, db 0 -NEWSYM EEgg, db 0 ;end NEWSYM end GUIsave equ $-GUIRAdd +NEWSYM PHnumGUIsave, dd GUIsave -section .bss +SECTION .bss NEWSYM ForceROMTiming, resb 1 NEWSYM ForceHiLoROM, resb 1 @@ -639,7 +639,7 @@ GUIwinsizex dd 0,244 ,126 ,189 ,167 ,180 ,188 ,244 ,8*16,240 ,240 ,190 ,9*16,8 GUIwinsizey dd 0,190 ,3*16,166 ,190 ,192 ,188 ,191 ,40 ,170 ,150 ,190 ,42 ,40 ,42 ,160 ,190 ,100 ,100 ,190 ,160 ,180 GUIwinptr db 0 -section .bss +SECTION .bss GUItextcolor resb 5 GUIcmenupos resb 1 GUIescpress resb 1 @@ -707,6 +707,7 @@ NEWSYM GUIcurrentdir, resb 131 curgsval resb 1 SECTION .data +NEWSYM EEgg, db 0 RestoreValues db 0 NEWSYM numdrives, dd 26 SubPalTable times 256 db 1 ; Corresponding Gray Scale Color @@ -863,142 +864,11 @@ GUIQuickLoadUpdate: jnz near .mainloop ret - - -CalcChecksum: - mov eax,GUIRAdd - mov ecx,100 - xor edx,edx - xor ebx,ebx -.loop - mov bl,[eax] - add edx,ebx - inc eax - dec ecx - jnz .loop - mov ebx,edx - xor bx,1011001011101101b - xor eax,eax - test bh,08h - jz .nb - mov al,1 -.nb - and bh,0F7h - test bl,10h - jz .nb2 - or bh,08h -.nb2 - and bl,0EFh - test al,1 - jz .nb3 - or bl,10h -.nb3 - xor bl,bh - or bl,80h - ret - -NEWSYM GUIRestoreVars - mov edx,GUIFName - call Open_File - jc .fail - mov bx,ax - mov edx,GUIRAdd - mov ecx,GUIsave - call Read_File - call Close_File -.fail - mov al,[GUIsmallscreenon] - mov [smallscreenon],al - mov al,[GUIScreenScale] - mov [ScreenScale],al - call CalcChecksum - cmp byte[TimeChecker],bl - jne .nottimer - mov byte[ShowTimer],1 - mov dword[NumSnow],200 - mov dword[SnowTimer],0 -.nottimer - cmp byte[ReCalib],0 - je .nocal - mov byte[ReCalib],0 - mov dword[CalibXmin],0 - mov dword[CalibXmax],0 - mov dword[CalibYmin],0 - mov dword[CalibYmax],0 - mov dword[CalibXmin209],0 - mov dword[CalibXmax209],0 - mov dword[CalibYmin209],0 - mov dword[CalibYmax209],0 -.nocal - - mov dword[NumComboGlob],0 - mov edx,GUICName - call Open_File - jc .failb - mov bx,ax - mov edx,ComboBlHeader - mov ecx,23 - call Read_File - mov al,byte[ComboBlHeader+22] - or al,al - jz .done - mov [NumComboGlob],al - mov ecx,[NumComboGlob] - mov edx,ecx - shl ecx,6 - add ecx,edx - add ecx,edx - mov edx,CombinDataGlob - call Read_File -.done - call Close_File -.failb - ret - SECTION .data NEWSYM ComboHeader, db 'Key Combination File',26,1,0 NEWSYM ComboBlHeader, times 23 db 0 SECTION .text -NEWSYM ExecGUISaveVars - cmp byte[ShowTimer],1 - jne .nottimer - call CalcChecksum - mov byte[TimeChecker],bl -.nottimer - cmp byte[cfgdontsave],1 - je .failed - mov edx,GUIFName - call Create_File - jc .failed - mov bx,ax - mov edx,GUIRAdd - mov ecx,GUIsave - call Write_File - call Close_File -.failed - mov al,[NumComboGlob] - or al,al - jz .failb - mov [ComboHeader+22],al - mov edx,GUICName - call Create_File - jc .failb - mov bx,ax - mov edx,ComboHeader - mov ecx,23 - call Write_File - mov ecx,[NumComboGlob] - mov edx,ecx - shl ecx,6 - add ecx,edx - add ecx,edx - mov edx,CombinDataGlob - call Write_File - call Close_File -.failb - ret - %macro GUIInitIRQs 0 call GUIInit mov esi,pressed @@ -1235,7 +1105,7 @@ db 1,1,0,1,1,0,1,1,0,0,1,1,1,1,1,1 SantaPos dd 272 SantaNextT dd 36*15 -NumSnow dd 0 +NEWSYM NumSnow, dd 0 NEWSYM SnowTimer, dd 36*30 MsgGiftLeft dd 0 SECTION .text @@ -1471,9 +1341,9 @@ NEWSYM ProcRewind mov dword[eax+8],0 .noteq ret -section .bss +SECTION .bss .temp resd 2 -section .text +SECTION .text %macro ProcessOneDigit 1 cmp dl,9 @@ -2204,7 +2074,7 @@ guipostvideo: je .pressedokay ;This is to make all ports not register space bar from being pressed earlier - mov byte[pressed+2Ch],0 + mov byte[pressed+2Ch],0 call JoyRead diff --git a/zsnes/src/gui/guifuncs.c b/zsnes/src/gui/guifuncs.c new file mode 100644 index 00000000..c391b06e --- /dev/null +++ b/zsnes/src/gui/guifuncs.c @@ -0,0 +1,126 @@ +/* +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 +#include +#include +#include +#define DIR_SLASH "\\" +#endif + +extern unsigned char ComboHeader[23], ComboBlHeader[23], GUIRAdd, GUIFName[256]; +extern unsigned char GUICName[256], GUIsmallscreenon, ScreenScale, TimeChecker; +extern unsigned char GUIScreenScale, ShowTimer, ReCalib, cfgdontsave; +extern unsigned char CombinDataGlob[3300]; +extern unsigned int PHnumGUIsave, smallscreenon, SnowTimer, NumSnow; +extern unsigned int CalibXmin, CalibXmax, CalibYmin, CalibYmax, NumComboGlob; +extern unsigned int CalibXmin209, CalibXmax209, CalibYmin209, CalibYmax209; + +unsigned char CalcCfgChecksum() +{ + unsigned char *ptr = &GUIRAdd, i = 0; + unsigned short chksum = 0; + + for (; i < 100 ; i++, ptr++) { chksum += *ptr; } + + chksum ^= 0xB2ED; // xor bx,1011001011101101b + i = (chksum & 0x800) >> 8; + chksum &= 0xF7FF; // and bh,0F7h + + if (chksum & 0x10) { chksum |= 0x800; } + chksum &= 0xFFEF; // and bl,0EFh + if (i) { chksum |= 0x10; } + + i = (chksum >> 8); + + return (((chksum & 0xFF) ^ i) | 0x80); +} + +void GUIRestoreVars() +{ + FILE *cfg_fp; + + if ((cfg_fp = fopen(GUIFName, "rb"))) + { + fread(&GUIRAdd, 1, PHnumGUIsave, cfg_fp); + fclose(cfg_fp); + } + + smallscreenon = (unsigned int)GUIsmallscreenon; + ScreenScale = GUIScreenScale; + + if (TimeChecker == CalcCfgChecksum()); + { + ShowTimer = 1; + NumSnow = 200; + SnowTimer = 0; + } + + if (ReCalib) + { + ReCalib = 0; + CalibXmin = CalibXmax = CalibYmin = CalibYmax = 0; + CalibXmin209 = CalibXmax209 = CalibYmin209 = CalibYmax209 = 0; + } + + NumComboGlob = 0; + + if ((cfg_fp = fopen(GUICName, "rb"))) + { + fread(ComboBlHeader, 1, 23, cfg_fp); + + if (ComboBlHeader[22]) + { + NumComboGlob = ComboBlHeader[22]; + fread(CombinDataGlob, 1, (NumComboGlob << 6)+2*NumComboGlob, cfg_fp); + } + + fclose(cfg_fp); + } +} + +void ExecGUISaveVars() +{ + FILE *cfg_fp; + + if (ShowTimer == 1) { TimeChecker = CalcCfgChecksum(); } + + if (!cfgdontsave && (cfg_fp = fopen(GUIFName, "wb"))) + { + fwrite(&GUIRAdd, 1, PHnumGUIsave, cfg_fp); + fclose(cfg_fp); + } + + if (NumComboGlob && (cfg_fp = fopen(GUICName, "wb"))) + { + ComboHeader[22] = NumComboGlob; + fwrite(ComboHeader, 1, 23, cfg_fp); + fwrite(CombinDataGlob, 1, (NumComboGlob << 6)+2*NumComboGlob, cfg_fp); + fclose(cfg_fp); + } +} diff --git a/zsnes/src/gui/guiwindp.inc b/zsnes/src/gui/guiwindp.inc index 8d44d505..ee3c9a7e 100644 --- a/zsnes/src/gui/guiwindp.inc +++ b/zsnes/src/gui/guiwindp.inc @@ -4000,7 +4000,7 @@ GUIccombviewloc resd 1 GUIccombcursloc resd 1 GUIccomblcursloc resd 1 NEWSYM NumCombo, resd 1 -NumComboGlob resd 1 +NEWSYM NumComboGlob, resd 1 NEWSYM NumComboLocl, resd 1 GUICSStC resd 3 GUIComboKey resd 1 diff --git a/zsnes/src/linux/sdlintrf.asm b/zsnes/src/linux/sdlintrf.asm index 31c7216a..6f904eba 100644 --- a/zsnes/src/linux/sdlintrf.asm +++ b/zsnes/src/linux/sdlintrf.asm @@ -114,13 +114,11 @@ NEWSYM SystemInit call Change_Dir %endif - + pushad call GUIRestoreVars ; Load GUI stuff - + popad call getcfg ; Load cfg stuff - call obtaindir ; Get Save/Init Directories - call ConvertJoyMap ; Mini joystick init call tparms pushad @@ -137,7 +135,9 @@ NEWSYM createnewcfg call DOScreatenewcfg ret NEWSYM GUISaveVars + pushad call ExecGUISaveVars + popad ret ; Allocate memory - see allocptr in ui.asm for details on what to allocate diff --git a/zsnes/src/makefile.ms b/zsnes/src/makefile.ms index 9f785c0f..9cbfc78d 100644 --- a/zsnes/src/makefile.ms +++ b/zsnes/src/makefile.ms @@ -74,7 +74,7 @@ endif ifeq (${ENV},win32-unix-shell) ENV=win32 CROSS=yes -endif +endif ifeq (${ENV},win32) CC = gcc @@ -154,7 +154,7 @@ CPUOBJ=${CPUDIR}/dma${OE} ${CPUDIR}/dsp${OE} ${CPUDIR}/dspproc${OE}\ ${CPUDIR}/memtable${OE} ${CPUDIR}/spc700${OE} ${CPUDIR}/stable${OE}\ ${CPUDIR}/table${OE} ${CPUDIR}/tableb${OE} ${CPUDIR}/tablec${OE} -GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/menu${OE} +GUIOBJ=${GUIDIR}/gui${OE} ${GUIDIR}/guifuncs${OE} ${GUIDIR}/menu${OE} VIDEOBJ=${VIDEODIR}/makev16b${OE} ${VIDEODIR}/makev16t${OE} ${VIDEODIR}/makevid${OE}\ ${VIDEODIR}/mode716${OE} ${VIDEODIR}/mode716b${OE} ${VIDEODIR}/mode716d${OE}\ @@ -181,7 +181,7 @@ EFFECTSOBJ=${EFFECTSDIR}/burn${OE} ${EFFECTSDIR}/water${OE} ${EFFECTSDIR}/smoke$ 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} zmovie${OE} zstate${OE} zloader${OE} @@ -315,6 +315,7 @@ ${GUIDIR}/gui${OE}: $< ${GUIDIR}/guitools.inc\ ${GUIDIR}/guimisc.inc ${GUIDIR}/guimouse.inc ${GUIDIR}/guiwindp.inc\ ${GUIDIR}/guikeys.inc ${GUIDIR}/guicheat.inc\ ${GUIDIR}/guicombo.inc ${GUIDIR}/guiload.inc macros.mac +${GUIDIR}/guifuncs${OE}: $< ${GUIDIR}/menu${OE}: $< macros.mac ${EFFECTSDIR}/water${OE}: $< ${EFFECTSDIR}/fixsin.h @@ -362,7 +363,7 @@ ${OBJFIX}: $< gcc -O3 -o $@ objfix.c endif -clean: +clean: ${DELETECOMMAND} ${EXE} ${TRUTH} ${DELETECOMMAND} *${OE} ${TRUTH} diff --git a/zsnes/src/vcache.asm b/zsnes/src/vcache.asm index 865aab7a..0c6fdf32 100644 --- a/zsnes/src/vcache.asm +++ b/zsnes/src/vcache.asm @@ -71,7 +71,6 @@ NEWSYM mode7hiresen, dd 1 NEWSYM hiresstuff, dd 0 NEWSYM cmovietimeint, dd 0 NEWSYM overalltimer, dd 0 -mousecheck db 0 SECTION .text @@ -408,10 +407,6 @@ NEWSYM cachevideo push esi push edi push edx - inc byte[mousecheck] - and byte[mousecheck],07h - cmp byte[mousecheck],0 - jne .noclick cmp byte[GUIClick],0 je .noclick cmp byte[snesmouse],0 diff --git a/zsnes/src/win/winintrf.asm b/zsnes/src/win/winintrf.asm index d33c6ece..a28c3693 100644 --- a/zsnes/src/win/winintrf.asm +++ b/zsnes/src/win/winintrf.asm @@ -107,7 +107,9 @@ NEWSYM SystemInit mov ebx,InitDir call Change_Dir + pushad call GUIRestoreVars ; Load GUI stuff + popad call getcfg ; Load cfg stuff call obtaindir ; Get Save/Init Directories call ConvertJoyMap ; Mini joystick init @@ -129,7 +131,9 @@ NEWSYM createnewcfg call DOScreatenewcfg ret NEWSYM GUISaveVars + pushad call ExecGUISaveVars + popad ret ; Allocate memory - see allocptr in ui.asm for details on what to allocate