Silly mouse behaviour removed, ported the binary config file handling code to C.

This commit is contained in:
grinvader
2005-05-31 17:37:50 +00:00
parent 8dcef02eea
commit ad2f191c9a
10 changed files with 159 additions and 157 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

126
zsnes/src/gui/guifuncs.c Normal file
View File

@@ -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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <zlib.h>
#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);
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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}

View File

@@ -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

View File

@@ -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