s;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. ; Window Display Routines ; Last button value used = 65 GUIStringGreater: ; compares string at esi to edi and returns 1 to al if esi is >, else 0 push esi cmp word[esi],'.' je .less cmp word[esi+32],'.' je .greater cmp word[esi],'..' je .less cmp word[esi+32],'..' je .greater .nextchar cmp byte[esi],0 je .less cmp byte[esi+32],0 je .greater mov al,[esi] mov cl,[esi+32] cmp al,'a' jb .noucase1 cmp al,'z' ja .noucase1 sub al,'z'-'Z' .noucase1 cmp cl,'a' jb .noucase2 cmp cl,'z' ja .noucase2 sub cl,'z'-'Z' .noucase2 cmp al,cl jb .less ja .greater inc esi jmp .nextchar .less mov al,0 jmp .skip .greater mov al,1 .skip pop esi ret GUIStringGreater2: ; compares string at ebx to edx and returns 1 to al if esi is >, else 0 push edx push ebx cmp word[ebx],'.' je .less cmp word[edx],'.' je .greater cmp word[ebx],'..' je .less cmp word[ebx],'..' je .greater .nextchar cmp byte[ebx],0 je .less cmp byte[edx],0 je .greater mov al,[ebx] mov cl,[edx] cmp al,'a' jb .noucase1 cmp al,'z' ja .noucase1 sub al,'z'-'Z' .noucase1 cmp cl,'a' jb .noucase2 cmp cl,'z' ja .noucase2 sub cl,'z'-'Z' .noucase2 cmp al,cl jb .less ja .greater inc ebx inc edx jmp .nextchar .less mov al,0 jmp .skip .greater mov al,1 .skip pop ebx pop edx ret %Macro DrawGUILineSc 2 mov dword[GUIcolscaleval],%2 mov edx,%1 push eax push ecx call GUIHLines pop ecx pop eax inc ebx %Endmacro %Macro DrawGUILine 0 push eax push ecx call GUIHLine pop ecx pop eax inc ebx %Endmacro %macro DrawTitleBar 0 mov edx,46+157+6 sub edx,[GUIWincoladd] DrawGUILine mov edx,42+157+4+4 sub edx,[GUIWincoladd] DrawGUILine dec edx DrawGUILine dec edx DrawGUILine dec edx DrawGUILine dec edx DrawGUILine dec edx DrawGUILine dec edx DrawGUILine dec edx DrawGUILine mov edx,38+157+4 sub edx,[GUIWincoladd] DrawGUILine sub ebx,10 mov edx,44+157+4 sub edx,[GUIWincoladd] mov esi,9 push ecx mov ecx,eax %%loop2 DrawGUILine dec esi jnz %%loop2 pop ecx sub ebx,8 mov edx,40+157+4 sub edx,[GUIWincoladd] mov esi,9 push eax mov eax,ecx %%loop3 DrawGUILine dec esi jnz %%loop3 pop eax %endmacro %macro drawshadow2 3 mov edx,[GUIwinposy+%1*4] cmp edx,223 jg near .noshadow cmp edx,0 jge .noshadclip mov edx,0 .noshadclip mov ebx,edx add ebx,%3 add ebx,9 cmp ebx,0 jl near .noshadow cmp ebx,223 jng .noshadclip2 mov ebx,223 .noshadclip2 sub ebx,edx inc ebx mov edi,edx shl edi,8 mov eax,edx shl eax,5 add edi,eax mov edx,[GUIwinposx+%1*4] mov ecx,edx cmp edx,255 jg .noshadow cmp edx,-3 jnl .noshadclip3 mov edx,-3 .noshadclip3 add ecx,%2 cmp ecx,0 jl .noshadow cmp ecx,255 jng .noshadclip4 mov ecx,255 .noshadclip4 sub ecx,edx inc ecx add edi,edx add edi,[vidbuffer] add edi,288*3+3+16 call GUIDrawShadow2 .noshadow %endmacro %macro GUIDrawWindowBox 2 mov dword[GUIWincoladd],4 mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone mov dword[GUIWincol],148+5 .noone cmp byte[cwindrawn],0 jne .nozero mov dword[GUIWincoladd],0 mov dword[GUIWincol],148 .nozero drawshadow2 %1,dword[GUIwinsizex+%1*4],dword[GUIwinsizey+%1*4] mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] mov ecx,eax add ecx,dword[GUIwinsizex+%1*4] DrawTitleBar mov esi,dword[GUIwinsizey+%1*4] dec esi mov edx,dword[GUIWincol] add edx,2 .loop DrawGUILine dec esi jnz .loop mov edx,dword[GUIWincol] DrawGUILine mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add ebx,10 mov ecx,eax mov esi,dword[GUIwinsizey+%1*4] mov edx,dword[GUIWincol] add edx,3 dec esi .loop2 DrawGUILine dec esi jnz .loop2 mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add ebx,10 add eax,dword[GUIwinsizex+%1*4] mov ecx,eax mov esi,dword[GUIwinsizey+%1*4] mov edx,dword[GUIWincol] add edx,1 .loop3 DrawGUILine dec esi jnz .loop3 mov ebx,dword[GUIwinposy+%1*4] add ebx,3 mov edx,dword[GUIwinposx+%1*4] add edx,3 mov byte[GUItextcolor],184 GUIOuttextwin %2 mov ebx,dword[GUIwinposy+%1*4] add ebx,2 mov edx,dword[GUIwinposx+%1*4] add edx,2 mov byte[GUItextcolor],220 cmp byte[GUIWincoladd],0 je .zero2 sub byte[GUItextcolor],6 .zero2 GUIOuttextwin %2 mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add eax,dword[GUIwinsizex+%1*4] sub eax,10 GUIDisplayIcon GUIIconDataClose %endmacro %macro DrawGUIWinBox 6 mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add eax,%2 add ebx,%3 mov ecx,eax add ecx,%4-%2+1 mov dl,%6 mov esi,%5-%3+1 %%loop DrawGUILine dec esi jnz %%loop %endmacro %macro DrawGUIWinBox2 5 mov eax,dword[GUIwinposx+%1*4] add eax,%2 mov ecx,eax add ecx,%3-%2+1 mov dl,%5 cmp byte[GUIWincoladd],0 je %%zero inc dl %%zero mov esi,%4 add ebx,dword[GUIwinposy+%1*4] %%loop DrawGUILine dec esi jnz %%loop %endmacro %macro DrawGUIWinBox3 6 mov ecx,%4 mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add eax,%2 add ebx,%3 add ecx,eax sub ecx,%2 inc ecx mov dl,%6 mov esi,%5-%3+1 %%loop DrawGUILine dec esi jnz %%loop %endmacro %macro DrawGUIButton 9 mov dl,byte[GUItextcolor] sub dl,5 cmp byte[GUICBHold],%7 jne %%noa sub dl,13 %%noa DrawGUIWinBox %1,%2,%3,%4,%3,dl sub dl,3 cmp byte[GUICBHold],%7 jne %%nob add dl,5 %%nob DrawGUIWinBox %1,%2,%3,%2,%5,dl sub dl,3 cmp byte[GUICBHold],%7 jne %%noc add dl,5 %%noc DrawGUIWinBox %1,%2+1,%3+1,%4-2,%5-2,dl sub dl,3 cmp byte[GUICBHold],%7 jne %%nod add dl,5 %%nod DrawGUIWinBox %1,%4+1,%3+1,%4-2,%5-2,dl sub dl,3 cmp byte[GUICBHold],%7 jne %%noe add dl,5 %%noe DrawGUIWinBox %1,%2,%5,%4-1,%5,dl cmp byte[GUICBHold],%7 je near %%no2 sub byte[GUItextcolor],15 GUIOuttextwin2 %1,%2+5+%8,%3+4+%9,%6 add byte[GUItextcolor],15 GUIOuttextwin2 %1,%2+4+%8,%3+3+%9,%6 jmp %%yes %%no2 sub byte[GUItextcolor],18 GUIOuttextwin2 %1,%2+6+%8,%3+5+%9,%6 add byte[GUItextcolor],15 GUIOuttextwin2 %1,%2+5+%8,%3+4+%9,%6 add byte[GUItextcolor],3 %%yes %endmacro %macro GUIOuttextwin2load 3 test dword[cloadnleft],80000000h jnz %%skip cmp byte[GUIloadfntype],0 jne %%nottype0 mov eax,[cloadnposb] mov eax,[spcRamcmp+eax*4] inc eax mov [cloadnpos],eax inc dword[cloadnposb] %%nottype0 GUIOuttextwin2l %1,%2,%3,[cloadnpos] add dword[cloadnpos],32 dec dword[cloadnleft] %%skip %endmacro %macro GUIDisplayButtonHole 5 mov dword[GUITemp],GUIIconDataButtonHole cmp %4,%5 jne %%nofill mov dword[GUITemp],GUIIconDataButtonFill %%nofill GUIDisplayIconWin %1,%2,%3,[GUITemp] %endmacro ; DGUIDisplay DisplayGUILoad: GUIDrawWindowBox 1,GUILoadDisp cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 %ifdef __MSDOS__ GUIOuttextwin2 1,21,166,GUILoadText3 GUIOuttextwin2 1,21,174,GUILoadText4 GUIOuttextwin2 1,21,182,GUILoadText5 %endif GUIOuttextwin2 1,21,192,GUILoadText6 GUIOuttextwin2 1,6,16,GUILoadText7 GUIOuttextwin2 1,161,16,GUILoadText8 GUIOuttextwin2 1,6,138,GUIcurrentdir GUIOuttextwin2 1,146,172,GUILoadTextB GUIOuttextwin2 1,155,182,GUILoadTextC GUIOuttextwin2 1,155,192,GUILoadTextD GUIOuttextwin2 1,195,182,GUILoadTextE GUIOuttextwin2 1,195,192,GUILoadTextF mov dword[cloadmaxlen],39 cmp dword[GUIcurrentfilewin],0 jne .nofiles %ifndef __MSDOS__ mov eax,[GUIcurrentcursloc] mov eax,[spcRamcmp+eax*4] inc eax mov [cloadnpos],eax GUIOuttextwin2l 1,6,158,[cloadnpos] %endif .nofiles add byte[GUItextcolor],15 %ifdef __MSDOS__ GUIOuttextwin2 1,20,165,GUILoadText3 GUIOuttextwin2 1,20,173,GUILoadText4 GUIOuttextwin2 1,20,181,GUILoadText5 %endif GUIOuttextwin2 1,20,191,GUILoadText6 GUIOuttextwin2 1,5,15,GUILoadText7 GUIOuttextwin2 1,160,15,GUILoadText8 GUIOuttextwin2 1,5,137,GUIcurrentdir GUIOuttextwin2 1,145,171,GUILoadTextB GUIOuttextwin2 1,154,181,GUILoadTextC GUIOuttextwin2 1,154,191,GUILoadTextD GUIOuttextwin2 1,194,181,GUILoadTextE GUIOuttextwin2 1,194,191,GUILoadTextF mov dword[cloadmaxlen],39 cmp dword[GUIcurrentfilewin],0 jne .nofilesb %ifndef __MSDOS__ mov eax,[GUIcurrentcursloc] mov eax,[spcRamcmp+eax*4] inc eax mov [cloadnpos],eax GUIOuttextwin2l 1,5,157,[cloadnpos] %endif .nofilesb DrawGUIButton 1,186,165,228,176,GUILoadText9,1,0,0 mov al,[GUIWincol] mov byte[GUItextcolor],al %ifdef __MSDOS__ GUIOuttextwin2 1,6,157,GUILoadText2 %endif mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 %ifdef __MSDOS__ GUIOuttextwin2 1,5,156,GUILoadText2 %endif DrawGUIWinBox 1,5,25,144,134,167 ; 126 = 6 * 21, 112 = 7 * 16 DrawGUIWinBox 1,160,25,228,134,167 ; 78 = 6 * 13 DrawGUIWinBox 1,5,145,228,152,167 ; 126 = 6 * 21, 112 = 7 * 16 xor ebx,ebx mov bl,[GUILoadPos] mov byte[GUILoadTextA+ebx],0 test byte[GUILDFlash],8 jnz .nound mov byte[GUILoadTextA+ebx],'_' mov byte[GUILoadTextA+ebx+1],0 .nound mov ebx,[GUIcurrentcursloc] sub ebx,[GUIcurrentviewloc] cmp dword[GUIcurrentfilewin],0 je .files mov ebx,[GUIcurrentdircursloc] sub ebx,[GUIcurrentdirviewloc] .files mov eax,ebx lea ebx,[ebx*4] add ebx,eax add ebx,eax add ebx,eax add ebx,27 cmp dword[GUIcurrentfilewin],0 jne .dir DrawGUIWinBox2 1,5,144,7,224 jmp .files2 .dir DrawGUIWinBox2 1,160,228,7,224 .files2 mov byte[GUItextcolor],223 GUIOuttextwin2 1,8,148, GUILoadTextA mov eax,[spcBuffera] inc eax mov dword[cloadnpos],eax mov eax,[GUIfileentries] sub eax,[GUIcurrentviewloc] dec eax mov dword[cloadnleft],eax mov eax,[GUIcurrentviewloc] mov [cloadnposb],eax shl eax,5 add [cloadnpos],eax mov dword[cloadmaxlen],23 GUIOuttextwin2load 1,8,29 GUIOuttextwin2load 1,8,29+7 GUIOuttextwin2load 1,8,29+7*2 GUIOuttextwin2load 1,8,29+7*3 GUIOuttextwin2load 1,8,29+7*4 GUIOuttextwin2load 1,8,29+7*5 GUIOuttextwin2load 1,8,29+7*6 GUIOuttextwin2load 1,8,29+7*7 GUIOuttextwin2load 1,8,29+7*8 GUIOuttextwin2load 1,8,29+7*9 GUIOuttextwin2load 1,8,29+7*10 GUIOuttextwin2load 1,8,29+7*11 GUIOuttextwin2load 1,8,29+7*12 GUIOuttextwin2load 1,8,29+7*13 GUIOuttextwin2load 1,8,29+7*14 mov eax,[spcBuffera] inc eax mov dword[cloadnpos],eax mov eax,[GUIdirentries] sub eax,[GUIcurrentdirviewloc] dec eax mov dword[cloadnleft],eax mov eax,[GUIcurrentdirviewloc] add eax,[GUIfileentries] mov [cloadnposb],eax shl eax,5 add [cloadnpos],eax mov dword[cloadmaxlen],11 GUIOuttextwin2load 1,164,29 GUIOuttextwin2load 1,164,29+7 GUIOuttextwin2load 1,164,29+7*2 GUIOuttextwin2load 1,164,29+7*3 GUIOuttextwin2load 1,164,29+7*4 GUIOuttextwin2load 1,164,29+7*5 GUIOuttextwin2load 1,164,29+7*6 GUIOuttextwin2load 1,164,29+7*7 GUIOuttextwin2load 1,164,29+7*8 GUIOuttextwin2load 1,164,29+7*9 GUIOuttextwin2load 1,164,29+7*10 GUIOuttextwin2load 1,164,29+7*11 GUIOuttextwin2load 1,164,29+7*12 GUIOuttextwin2load 1,164,29+7*13 GUIOuttextwin2load 1,164,29+7*14 mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 GUIOuttextwin2 1,7,147, GUILoadTextA mov eax,[spcBuffera] inc eax mov dword[cloadnpos],eax mov eax,[GUIfileentries] sub eax,[GUIcurrentviewloc] dec eax mov dword[cloadnleft],eax mov eax,[GUIcurrentviewloc] mov [cloadnposb],eax shl eax,5 add [cloadnpos],eax mov dword[cloadmaxlen],23 GUIOuttextwin2load 1,7,28 GUIOuttextwin2load 1,7,28+7 GUIOuttextwin2load 1,7,28+7*2 GUIOuttextwin2load 1,7,28+7*3 GUIOuttextwin2load 1,7,28+7*4 GUIOuttextwin2load 1,7,28+7*5 GUIOuttextwin2load 1,7,28+7*6 GUIOuttextwin2load 1,7,28+7*7 GUIOuttextwin2load 1,7,28+7*8 GUIOuttextwin2load 1,7,28+7*9 GUIOuttextwin2load 1,7,28+7*10 GUIOuttextwin2load 1,7,28+7*11 GUIOuttextwin2load 1,7,28+7*12 GUIOuttextwin2load 1,7,28+7*13 GUIOuttextwin2load 1,7,28+7*14 mov eax,[spcBuffera] inc eax mov dword[cloadnpos],eax mov eax,[GUIdirentries] sub eax,[GUIcurrentdirviewloc] dec eax mov dword[cloadnleft],eax mov eax,[GUIcurrentdirviewloc] add eax,[GUIfileentries] mov [cloadnposb],eax shl eax,5 add [cloadnpos],eax mov dword[cloadmaxlen],11 GUIOuttextwin2load 1,163,28 GUIOuttextwin2load 1,163,28+7 GUIOuttextwin2load 1,163,28+7*2 GUIOuttextwin2load 1,163,28+7*3 GUIOuttextwin2load 1,163,28+7*4 GUIOuttextwin2load 1,163,28+7*5 GUIOuttextwin2load 1,163,28+7*6 GUIOuttextwin2load 1,163,28+7*7 GUIOuttextwin2load 1,163,28+7*8 GUIOuttextwin2load 1,163,28+7*9 GUIOuttextwin2load 1,163,28+7*10 GUIOuttextwin2load 1,163,28+7*11 GUIOuttextwin2load 1,163,28+7*12 GUIOuttextwin2load 1,163,28+7*13 GUIOuttextwin2load 1,163,28+7*14 xor ebx,ebx mov bl,[GUILoadPos] mov byte[GUILoadTextA+ebx],0 %ifdef __MSDOS__ GUIDisplayButtonHole 1,9,163,byte[GUIloadfntype],0 GUIDisplayButtonHole 1,9,171,byte[GUIloadfntype],1 GUIDisplayButtonHole 1,9,179,byte[GUIloadfntype],2 %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[showallext],1 jne .noshowallext mov dword[GUITemp],GUIIconDataCheckBoxC .noshowallext GUIDisplayIconWin 1,10,187,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[ForceROMTiming],1 jne .noforcentsc mov dword[GUITemp],GUIIconDataCheckBoxC .noforcentsc GUIDisplayIconWin 1,144,177,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[ForceROMTiming],2 jne .noforcepal mov dword[GUITemp],GUIIconDataCheckBoxC .noforcepal GUIDisplayIconWin 1,144,187,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[ForceHiLoROM],1 jne .noforcelorom mov dword[GUITemp],GUIIconDataCheckBoxC .noforcelorom GUIDisplayIconWin 1,184,177,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[ForceHiLoROM],2 jne .noforcehirom mov dword[GUITemp],GUIIconDataCheckBoxC .noforcehirom GUIDisplayIconWin 1,184,187,[GUITemp] ; win#,X,Y start, %4-List Loc, %5-List size, %6-Screen size, %7-Bar Size DrawSlideBarWin 1,146,33,[GUIcurrentviewloc],[GUIfileentries],15,94,GUILStA cmp byte[GUICHold],1 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin 1,146,25,GUIIconDataUpArrow cmp byte[GUICHold],1 jne .noholda2 sub byte[GUIWincoladd],3 .noholda2 cmp byte[GUICHold],2 jne .noholdb add byte[GUIWincoladd],3 .noholdb GUIDisplayIconWin 1,146,127,GUIIconDataDownArrow cmp byte[GUICHold],2 jne .noholdb2 sub byte[GUIWincoladd],3 .noholdb2 DrawSlideBarWin 1,230,33,[GUIcurrentdirviewloc],[GUIdirentries],15,94,GUILStB cmp byte[GUICHold],3 jne .noholdc add byte[GUIWincoladd],3 .noholdc GUIDisplayIconWin 1,230,25,GUIIconDataUpArrow cmp byte[GUICHold],3 jne .noholdc2 sub byte[GUIWincoladd],3 .noholdc2 cmp byte[GUICHold],4 jne .noholdd add byte[GUIWincoladd],3 .noholdd GUIDisplayIconWin 1,230,127,GUIIconDataDownArrow cmp byte[GUICHold],4 jne .noholdd2 sub byte[GUIWincoladd],3 .noholdd2 ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 1,5,24,144,24,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 1,4,25,3,134,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 1,5,135,144,135,dl mov dl,[GUIWincol] DrawGUIWinBox 1,160,24,228,24,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 1,159,25,158,134,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 1,160,135,228,135,dl mov dl,[GUIWincol] DrawGUIWinBox 1,5,144,227,144,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 1,4,145,3,152,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 1,5,153,227,153,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 1,229,145,228,152,dl ret SECTION .data GUILoadText1 db 'SELECT FILE TO LOAD :',0 GUILoadText2 db 'DISPLAY TYPE :',0 GUILoadText3 db 'NORMAL 8.3 FORMAT',0 GUILoadText4 db 'SNES HEADER NAME',0 GUILoadText5 db 'WIN95 LONG FILENAME',0 GUILoadText6 db 'SHOW ALL EXTENSIONS',0 GUILoadText7 db 'FILENAME',0 GUILoadText8 db 'DIRECTORY',0 GUILoadText9 db 'LOAD',0 GUILoadTextA times 40 db 0 GUILoadTextB db 'FORCE',0 GUILoadTextC db 'NTSC',0 GUILoadTextD db 'PAL',0 GUILoadTextE db 'LOROM',0 GUILoadTextF db 'HIROM',0 SECTION .bss GUILStA resd 3 GUILStB resd 3 GUILoadPos resb 1 SECTION .text DisplayGUIReset: GUIDrawWindowBox 12,GUIResetDisp cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero mov dl,224 cmp byte[GUIWincoladd],0 je .zero4 inc dl .zero4 cmp byte[GUICResetPos],0 je near .resetboxa DrawGUIWinBox 12,79,29,117,42,dl jmp .resetboxb .resetboxa DrawGUIWinBox 12,19,29,57,42,dl .resetboxb DrawGUIButton 12,20,30,56,41,GUIResetText2,2,0,0 DrawGUIButton 12,80,30,116,41,GUIResetText3,3,0,0 mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 12,6,16,GUIResetText1 mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 12,5,15,GUIResetText1 ret SECTION .data GUIResetText1 db 'RESET : ARE YOU SURE ?',0 GUIResetText2 db 'YES',0 GUIResetText3 db 'NO',0 SECTION .text DisplayGUIStates: GUIDrawWindowBox 14,GUIStatesDisp cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero mov dl,224 cmp byte[GUIWincoladd],0 je .zero4 inc dl .zero4 cmp byte[GUICStatePos],0 je near .resetboxa DrawGUIWinBox 14,79,29,117,42,dl jmp .resetboxb .resetboxa DrawGUIWinBox 14,19,29,57,42,dl .resetboxb DrawGUIButton 14,20,30,56,41,GUIStatesText3,10,0,0 DrawGUIButton 14,80,30,116,41,GUIStatesText4,11,0,0 mov al,[GUIWincol] mov byte[GUItextcolor],al cmp byte[GUIStatesText5],1 je .load GUIOuttextwin2 14,6,16,GUIStatesText1 jmp .save .load GUIOuttextwin2 14,6,16,GUIStatesText2 .save mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 cmp byte[GUIStatesText5],1 je .load2 GUIOuttextwin2 14,5,15,GUIStatesText1 jmp .save2 .load2 GUIOuttextwin2 14,5,15,GUIStatesText2 .save2 ret SECTION .data GUIStatesText1 db 'OKAY TO SAVE STATE?',0 GUIStatesText2 db 'OKAY TO LOAD STATE?',0 GUIStatesText3 db 'YES',0 GUIStatesText4 db 'NO',0 GUIStatesText5 db 0 SECTION .text DisplayGUIChoseSave: GUIDrawWindowBox 2,GUIStateSelDisp cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 mov byte[GUIChoseSaveText2],'0' GUIOuttextwin2 2,21,31,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'1' GUIOuttextwin2 2,41,31,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'2' GUIOuttextwin2 2,61,31,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'3' GUIOuttextwin2 2,81,31,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'4' GUIOuttextwin2 2,101,31,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'5' GUIOuttextwin2 2,21,46,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'6' GUIOuttextwin2 2,41,46,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'7' GUIOuttextwin2 2,61,46,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'8' GUIOuttextwin2 2,81,46,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'9' GUIOuttextwin2 2,101,46,GUIChoseSaveText2 add byte[GUItextcolor],15 mov byte[GUIChoseSaveText2],'0' GUIOuttextwin2 2,20,30,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'1' GUIOuttextwin2 2,40,30,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'2' GUIOuttextwin2 2,60,30,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'3' GUIOuttextwin2 2,80,30,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'4' GUIOuttextwin2 2,100,30,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'5' GUIOuttextwin2 2,20,45,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'6' GUIOuttextwin2 2,40,45,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'7' GUIOuttextwin2 2,60,45,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'8' GUIOuttextwin2 2,80,45,GUIChoseSaveText2 mov byte[GUIChoseSaveText2],'9' GUIOuttextwin2 2,100,45,GUIChoseSaveText2 mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 2,6,16,GUIChoseSaveText1 mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 2,5,15,GUIChoseSaveText1 mov dword[GUITemp],GUIIconDataButtonHole mov ebx,[statefileloc] mov al,byte[fnamest+ebx] mov [GUIChoseSaveText2],al GUIDisplayButtonHole 2,10,28,byte[GUIChoseSaveText2],'t' GUIDisplayButtonHole 2,30,28,byte[GUIChoseSaveText2],'1' GUIDisplayButtonHole 2,50,28,byte[GUIChoseSaveText2],'2' GUIDisplayButtonHole 2,70,28,byte[GUIChoseSaveText2],'3' GUIDisplayButtonHole 2,90,28,byte[GUIChoseSaveText2],'4' GUIDisplayButtonHole 2,10,43,byte[GUIChoseSaveText2],'5' GUIDisplayButtonHole 2,30,43,byte[GUIChoseSaveText2],'6' GUIDisplayButtonHole 2,50,43,byte[GUIChoseSaveText2],'7' GUIDisplayButtonHole 2,70,43,byte[GUIChoseSaveText2],'8' GUIDisplayButtonHole 2,90,43,byte[GUIChoseSaveText2],'9' ret SECTION .data GUIChoseSaveText1 db 'SELECT SAVE SLOT :',0 GUIChoseSaveText2 db '-',0 SECTION .text %macro DGOptnsBorderBox 3 mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne %%noone mov dword[GUIWincol],148+5 %%noone cmp byte[cwindrawn],0 jne %%nozero mov dword[GUIWincol],148 %%nozero mov dl,[GUIWincol] DrawGUIWinBox %1,%2+1,%3,%2+18,%3,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox %1,%2,%3+1,%2-1,%3+5,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox %1,%2+1,%3+8,%2+18,%3-8,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox %1,%2+22,%3+1,%2-23,%3+5,dl %endmacro %macro DGOptnsDrawBox 3 mov eax,dword[GUIwinposx+9*4] mov ebx,dword[GUIwinposy+9*4] add eax,%1 add ebx,%2 mov ecx,eax add ecx,20 mov dl,167 mov esi,7 %%loop DrawGUILine dec esi jnz %%loop mov eax,%3 mov ebx,[ScanCodeListing+eax*3] mov [GUIGameDisplayKy],ebx mov byte[GUIGameDisplayKy+3],0 mov byte[GUItextcolor],223 GUIOuttextwin2 9,%1+3,%2+2,GUIGameDisplayKy mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero GUIOuttextwin2 9,%1+2,%2+1,GUIGameDisplayKy %endmacro %macro DDrawBox 4 mov eax,dword[GUIwinposx+%1*4] mov ebx,dword[GUIwinposy+%1*4] add eax,%2 add ebx,%3 mov ecx,eax add ecx,20 mov dl,167 mov esi,7 %%loop DrawGUILine dec esi jnz %%loop mov eax,%4 mov ebx,[ScanCodeListing+eax*3] mov [GUIGameDisplayKy],ebx mov byte[GUIGameDisplayKy+3],0 mov byte[GUItextcolor],223 GUIOuttextwin2 %1,%2+3,%3+2,GUIGameDisplayKy mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero GUIOuttextwin2 %1,%2+2,%3+1,GUIGameDisplayKy %endmacro %macro DGOptnsDrawBox2 3 mov eax,dword[GUIwinposx+3*4] mov ebx,dword[GUIwinposy+3*4] add eax,%1 add ebx,%2 mov ecx,eax add ecx,20 mov dl,167 mov esi,7 %%loop DrawGUILine dec esi jnz %%loop mov eax,%3 mov ebx,[ScanCodeListing+eax*3] mov [GUIGameDisplayKy],ebx mov byte[GUIGameDisplayKy+3],0 mov byte[GUItextcolor],223 GUIOuttextwin2 3,%1+3,%2+2,GUIGameDisplayKy mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero GUIOuttextwin2 3,%1+2,%2+1,GUIGameDisplayKy %endmacro %macro GUIInputDispKey 2 mov eax,[edi] mov [GUIInputTextQ],eax push edi DGOptnsDrawBox2 %1,%2,[GUIInputTextQ] pop edi add edi,4 %endmacro DisplayGUIInput: ; Player Select, Joystick/keyboard Type List, Button Assignments GUIDrawWindowBox 3,GUIInputDisp cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2 3,6,102,GUIInputText3 GUIOuttextwin2 3,6,112,GUIInputText4 GUIOuttextwin2 3,6,122,GUIInputText5 GUIOuttextwin2 3,6,132,GUIInputText6 GUIOuttextwin2 3,6,142,GUIInputTextD GUIOuttextwin2 3,6,152,GUIInputTextE GUIOuttextwin2 3,76,102,GUIInputText7 GUIOuttextwin2 3,76,112,GUIInputText8 GUIOuttextwin2 3,76,122,GUIInputText9 GUIOuttextwin2 3,76,132,GUIInputTextA GUIOuttextwin2 3,76,142,GUIInputTextB GUIOuttextwin2 3,76,152,GUIInputTextC %ifdef __MSDOS__ GUIOuttextwin2 3,20,167,GUIInputTextW %endif GUIOuttextwin2 3,156,102,GUIInputText7 GUIOuttextwin2 3,156,112,GUIInputText8 GUIOuttextwin2 3,156,122,GUIInputTextC GUIOuttextwin2 3,116,102,GUIInputText9 GUIOuttextwin2 3,116,112,GUIInputTextA GUIOuttextwin2 3,116,122,GUIInputTextB GUIOuttextwin2 3,153,142,GUIInputTextd GUIOuttextwin2 3,153,152,GUIInputTexte GUIOuttextwin2 3,113,142,GUIInputTextf GUIOuttextwin2 3,113,152,GUIInputTextg add byte[GUItextcolor],15 GUIOuttextwin2 3,5,101,GUIInputText3 GUIOuttextwin2 3,5,111,GUIInputText4 GUIOuttextwin2 3,5,121,GUIInputText5 GUIOuttextwin2 3,5,131,GUIInputText6 GUIOuttextwin2 3,5,141,GUIInputTextD GUIOuttextwin2 3,5,151,GUIInputTextE GUIOuttextwin2 3,75,101,GUIInputText7 GUIOuttextwin2 3,75,111,GUIInputText8 GUIOuttextwin2 3,75,121,GUIInputText9 GUIOuttextwin2 3,75,131,GUIInputTextA GUIOuttextwin2 3,75,141,GUIInputTextB GUIOuttextwin2 3,75,151,GUIInputTextC %ifdef __MSDOS__ GUIOuttextwin2 3,19,166,GUIInputTextW %endif GUIOuttextwin2 3,155,101,GUIInputText7 GUIOuttextwin2 3,155,111,GUIInputText8 GUIOuttextwin2 3,155,121,GUIInputTextC GUIOuttextwin2 3,115,101,GUIInputText9 GUIOuttextwin2 3,115,111,GUIInputTextA GUIOuttextwin2 3,115,121,GUIInputTextB GUIOuttextwin2 3,152,141,GUIInputTextd GUIOuttextwin2 3,152,151,GUIInputTexte GUIOuttextwin2 3,112,141,GUIInputTextf GUIOuttextwin2 3,112,151,GUIInputTextg %ifdef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC xor eax,eax mov al,[cplayernum] cmp byte[pl1p209+eax],0 je .nocheckbox2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox2 GUIDisplayIconWin 3,5,162,[GUITemp] %endif DrawGUIButton 3,125,34,155,45,GUIInputTextV,14,0,0 %ifdef __MSDOS__ DrawGUIButton 3,125,50,185,61,GUIInputTexta,15,0,0 %endif DrawGUIButton 3,125,66,179,77,GUIInputTexta2,15,0,0 mov al,[GUIWincol] mov byte[GUItextcolor],al mov al,[cplayernum] add al,'1' mov [GUIInputText1+8],al GUIOuttextwin2 3,6,16,GUIInputText1 GUIOuttextwin2 3,6,26,GUIInputText2 GUIOuttextwin2 3,6,92,GUIInputTextP GUIOuttextwin2 3,116,92,GUIInputTextb GUIOuttextwin2 3,116,131,GUIInputTextc xor eax,eax mov al,[cplayernum] mov ebx,[GUIInputRefP+eax*4] mov al,[ebx] mov al,[GUIInputRefB+eax] mov ebx,eax shl eax,4 add eax,ebx add eax,GUIInputNames mov dword[GUITemp],eax GUIOuttextwin2 3,7+24,83,[GUITemp] GUIOuttextwin2 3,7,83,GUIInputTextT mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 3,5,15,GUIInputText1 GUIOuttextwin2 3,5,25,GUIInputText2 GUIOuttextwin2 3,5,91,GUIInputTextP GUIOuttextwin2 3,115,91,GUIInputTextb GUIOuttextwin2 3,115,130,GUIInputTextc GUIOuttextwin2 3,6+24,82,[GUITemp] GUIOuttextwin2 3,6,82,GUIInputTextT DrawGUIWinBox 3,5,34,107,77,167 mov ebx,[GUIcurrentinputcursloc] sub ebx,[GUIcurrentinputviewloc] mov eax,ebx lea ebx,[ebx*8] add ebx,36 DrawGUIWinBox2 3,5,107,7,224 mov edi,pl1selk cmp byte[cplayernum],1 jne .nopl2 mov edi,pl2selk .nopl2 cmp byte[cplayernum],2 jne .nopl3 mov edi,pl3selk .nopl3 cmp byte[cplayernum],3 jne .nopl4 mov edi,pl4selk .nopl4 cmp byte[cplayernum],4 jne .nopl5 mov edi,pl5selk .nopl5 GUIInputDispKey 45,150 ; Select GUIInputDispKey 45,140 ; Start GUIInputDispKey 45,100 ; Up GUIInputDispKey 45,110 ; Down GUIInputDispKey 45,120 ; Left GUIInputDispKey 45,130 ; Right GUIInputDispKey 85,120 ; X GUIInputDispKey 85,100 ; A GUIInputDispKey 85,140 ; L GUIInputDispKey 85,130 ; Y GUIInputDispKey 85,110 ; B GUIInputDispKey 85,150 ; R mov edi,pl1Atk cmp byte[cplayernum],1 jne .nopl2t mov edi,pl2Atk .nopl2t cmp byte[cplayernum],2 jne .nopl3t mov edi,pl3Atk .nopl3t cmp byte[cplayernum],3 jne .nopl4t mov edi,pl4Atk .nopl4t cmp byte[cplayernum],4 jne .nopl5t mov edi,pl5Atk .nopl5t GUIInputDispKey 165,100 ; A Turbo GUIInputDispKey 165,110 ; B Turbo GUIInputDispKey 125,100 ; X Turbo GUIInputDispKey 125,110 ; Y Turbo mov edi,pl1Ltk cmp byte[cplayernum],1 jne .nopl2tl mov edi,pl2Ltk .nopl2tl cmp byte[cplayernum],2 jne .nopl3tl mov edi,pl3Ltk .nopl3tl cmp byte[cplayernum],3 jne .nopl4tl mov edi,pl4Ltk .nopl4tl cmp byte[cplayernum],4 jne .nopl5tl mov edi,pl5Ltk .nopl5tl GUIInputDispKey 125,120 ; L Turbo GUIInputDispKey 165,120 ; R Turbo mov edi,pl1ULk cmp byte[cplayernum],1 jne .nopl2tb mov edi,pl2ULk .nopl2tb cmp byte[cplayernum],2 jne .nopl3tb mov edi,pl3ULk .nopl3tb cmp byte[cplayernum],3 jne .nopl4tb mov edi,pl4ULk .nopl4tb cmp byte[cplayernum],4 jne .nopl5tb mov edi,pl5ULk .nopl5tb GUIInputDispKey 165,140 ; Up-Left GUIInputDispKey 165,150 ; Up-Right GUIInputDispKey 125,140 ; Down-Left GUIInputDispKey 125,150 ; Down-Right mov byte[GUItextcolor],223 mov eax,[GUIcurrentinputviewloc] shl eax,4 add eax,[GUIcurrentinputviewloc] add eax,GUIInputNames mov dword[GUITemp],eax GUIOuttextwin2 3,11,38,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,11,38+8,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,11,38+8*2,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,11,38+8*3,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,11,38+8*4,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 mov eax,[GUIcurrentinputviewloc] shl eax,4 add eax,[GUIcurrentinputviewloc] add eax,GUIInputNames mov dword[GUITemp],eax GUIOuttextwin2 3,10,37,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,10,37+8,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,10,37+8*2,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,10,37+8*3,[GUITemp] add dword[GUITemp],17 GUIOuttextwin2 3,10,37+8*4,[GUITemp] DrawSlideBarWin 3,109,42,[GUIcurrentinputviewloc],[NumInputDevices],5,28,GUIIStA cmp byte[GUICHold],9 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin 3,109,34,GUIIconDataUpArrow cmp byte[GUICHold],9 jne .noholda2 sub byte[GUIWincoladd],3 .noholda2 cmp byte[GUICHold],10 jne .noholdb add byte[GUIWincoladd],3 .noholdb GUIDisplayIconWin 3,109,70,GUIIconDataDownArrow cmp byte[GUICHold],10 jne .noholdb2 sub byte[GUIWincoladd],3 .noholdb2 ; Draw border mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] ;Device DrawGUIWinBox 3,5,33,107,33,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 3,4,34,3,77,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 3,5,78,107,78,dl DGOptnsBorderBox 3,44,99 DGOptnsBorderBox 3,44,109 DGOptnsBorderBox 3,44,119 DGOptnsBorderBox 3,44,129 DGOptnsBorderBox 3,44,139 DGOptnsBorderBox 3,44,149 DGOptnsBorderBox 3,84,99 DGOptnsBorderBox 3,84,109 DGOptnsBorderBox 3,84,119 DGOptnsBorderBox 3,84,129 DGOptnsBorderBox 3,84,139 DGOptnsBorderBox 3,84,149 DGOptnsBorderBox 3,124,99 DGOptnsBorderBox 3,124,109 DGOptnsBorderBox 3,124,119 DGOptnsBorderBox 3,124,139 DGOptnsBorderBox 3,124,149 DGOptnsBorderBox 3,164,99 DGOptnsBorderBox 3,164,109 DGOptnsBorderBox 3,164,119 DGOptnsBorderBox 3,164,139 DGOptnsBorderBox 3,164,149 ; End draw borders ret SECTION .data GUIInputRefF db 0,1,2,3,5,18,6,7,8,9,10,11,14,15,16,17 GUIInputRefB db 0,1,2,3,3,4,6,7,8,9,10,11,11,11,12,13,14,15,5 GUIInputRefP dd pl1contrl,pl2contrl,pl3contrl,pl4contrl,pl5contrl GUIInputText1 db 'PLAYER # CONTROL :',0 GUIInputText2 db 'DEVICE :',0 GUIInputText3 db ' UP',0 GUIInputText4 db ' DOWN',0 GUIInputText5 db ' LEFT',0 GUIInputText6 db ' RIGHT',0 GUIInputText7 db 'A',0 GUIInputText8 db 'B',0 GUIInputText9 db 'X',0 GUIInputTextA db 'Y',0 GUIInputTextB db 'L',0 GUIInputTextC db 'R',0 GUIInputTextD db ' START',0 GUIInputTextE db 'SELECT',0 GUIInputTextP db 'KEYS :',0 GUIInputTextQ dd 0 GUIInputTextT db 'CDV:',0 GUIInputTextV db 'SET',0 GUIInputTextW db 'USE JOYSTICK PORT 209H',0 GUIInputTexta db 'CALIBRATE',0 GUIInputTexta2 db 'SET KEYS',0 GUIInputTextb db 'TURBO :',0 GUIInputTextc db 'DIAGONALS :',0 GUIInputTextd db 'UL',0 GUIInputTexte db 'UR',0 GUIInputTextf db 'DL',0 GUIInputTextg db 'DR',0 SECTION .bss GUIIStA resd 3 GUIcurrentinputviewloc resd 1 GUIcurrentinputcursloc resd 1 SECTION .text DisplayGUIOption: ; Frame Rate/Auto Frame Rate/Max Frame Skip/New Gfx Engine GUIDrawWindowBox 4,GUIOptionDisp mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 mov dword[GUITemp],GUIOptionText1 cmp byte[frameskip],0 jne .noauto mov dword[GUITemp],GUIOptionText1b .noauto GUIOuttextwin2 4,6,14,[GUITemp] GUIOuttextwin2u 4,26,24,GUIOptionText2,0 GUIOuttextwin2u 4,26,34,GUIOptionText3,0 GUIOuttextwin2u 4,26,44,GUIOptionText4,0 GUIOuttextwin2u 4,26,54,GUIOptionText5,0 %ifdef __MSDOS__ GUIOuttextwin2u 4,26,64,GUIOptionText6,1 %endif %ifdef __WIN32__ GUIOuttextwin2u 4,26,64,GUIOptionText6b,0 %endif GUIOuttextwin2u 4,26,74,GUIOptionText7,0 GUIOuttextwin2u 4,26,84,GUIOptionText8,2 GUIOuttextwin2u 4,26,94,GUIOptionText9,12 GUIOuttextwin2u 4,26,104,GUIOptionTextA,2 GUIOuttextwin2u 4,26,114,GUIOptionTextB,0 GUIOuttextwin2u 4,26,124,GUIOptionTextC,0 GUIOuttextwin2u 4,26,134,GUIOptionTextD,1 GUIOuttextwin2u 4,26,144,GUIOptionTextE,12 GUIOuttextwin2u 4,26,154,GUIOptionTextF,15 %ifdef __WIN32__ GUIOuttextwin2u 4,26,164,GUIOptionTextW,1 %endif add byte[GUItextcolor],15 GUIOuttextwin2 4,5,13,[GUITemp] GUIOuttextwin2 4,25,23,GUIOptionText2 GUIOuttextwin2 4,25,33,GUIOptionText3 GUIOuttextwin2 4,25,43,GUIOptionText4 GUIOuttextwin2 4,25,53,GUIOptionText5 %ifdef __MSDOS__ GUIOuttextwin2 4,25,63,GUIOptionText6 %endif %ifdef __WIN32__ GUIOuttextwin2 4,25,63,GUIOptionText6b %endif GUIOuttextwin2 4,25,73,GUIOptionText7 GUIOuttextwin2 4,25,83,GUIOptionText8 GUIOuttextwin2 4,25,93,GUIOptionText9 GUIOuttextwin2 4,25,103,GUIOptionTextA GUIOuttextwin2 4,25,113,GUIOptionTextB GUIOuttextwin2 4,25,123,GUIOptionTextC GUIOuttextwin2 4,25,133,GUIOptionTextD GUIOuttextwin2 4,25,143,GUIOptionTextE GUIOuttextwin2 4,25,153,GUIOptionTextF %ifdef __WIN32__ GUIOuttextwin2 4,25,163,GUIOptionTextW %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[frameskip],0 jne .nocheckbox mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox GUIDisplayIconWin 4,11,20,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[newengen],0 je .nocheckbox1 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1 GUIDisplayIconWin 4,11,30,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[MMXSupport],1 jne .nocheckbox2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox2 GUIDisplayIconWin 4,11,40,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[pl12s34],0 je .nocheckbox3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox3 GUIDisplayIconWin 4,11,50,[GUITemp] %ifdef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SidewinderFix],0 je .nocheckbox4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox4 GUIDisplayIconWin 4,11,60,[GUITemp] %endif %ifdef __WIN32__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[HighPriority],0 je .nocheckbox4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox4 GUIDisplayIconWin 4,11,60,[GUITemp] %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[FPSAtStart],0 je .nocheckbox5 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox5 GUIDisplayIconWin 4,11,70,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[Turbo30hz],0 je .nocheckbox6 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox6 GUIDisplayIconWin 4,11,80,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[TimerEnable],0 je .nocheckbox7 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox7 GUIDisplayIconWin 4,11,90,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[FastFwdToggle],0 je .nocheckbox8 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox8 GUIDisplayIconWin 4,11,100,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[OldGfxMode2],0 je .nocheckbox9 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox9 GUIDisplayIconWin 4,11,110,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[DontSavePath],0 je .nocheckbox10 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox10 GUIDisplayIconWin 4,11,120,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SmallMsgText],0 je .nocheckbox11 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox11 GUIDisplayIconWin 4,11,130,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC ;Autopatch Checkbox cmp byte[AutoPatch],0 je .nocheckbox12 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox12 GUIDisplayIconWin 4,11,140,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[RomInfo],0 je .nocheckbox13 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox13 GUIDisplayIconWin 4,11,150,[GUITemp] %ifdef __WIN32__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[DisableScreenSaver],0 je .nocheckbox14 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox14 GUIDisplayIconWin 4,11,160,[GUITemp] %endif cmp byte[frameskip],0 je near .auto ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone3 mov dword[GUIWincol],148+5 .noone3 cmp byte[cwindrawn],0 jne .nozero3 mov dword[GUIWincol],148 .nozero3 mov dl,[GUIWincol] DrawGUIWinBox 4,75,11,93,11,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 4,74,12,74,19,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 4,75,20,93,20,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 4,95,12,94,19,dl ; End draw borders DrawGUIWinBox 4,75,12,93,19,167 mov al,[frameskip] add al,47 mov [GUIOptionTextX],al mov byte[GUItextcolor],223 GUIOuttextwin2 4,85,14,GUIOptionTextX mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 GUIOuttextwin2 4,84,13,GUIOptionTextX mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero6 mov byte[GUItextcolor],211 .zero6 DrawGUIButton 4,97,12,105,20,GUIOptionTextY,12,-2,-1 DrawGUIButton 4,108,12,116,20,GUIOptionTextZ,13,-2,-1 ret .auto ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 4,96,11,114,11,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 4,95,12,94,19,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 4,96,20,114,20,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 4,115,12,115,19,dl ; End draw borders DrawGUIWinBox 4,96,12,114,19,167 mov al,[maxskip] add al,48 mov [GUIOptionTextX],al mov byte[GUItextcolor],223 GUIOuttextwin2 4,107,14,GUIOptionTextX mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 GUIOuttextwin2 4,106,13,GUIOptionTextX mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero7 mov byte[GUItextcolor],211 .zero7 DrawGUIButton 4,118,12,126,20,GUIOptionTextY,12,-2,-1 DrawGUIButton 4,129,12,137,20,GUIOptionTextZ,13,-2,-1 ret SECTION .data GUIOptionText1 db 'FRAME RATE',0 GUIOptionText1b db 'MAX FRAME SKIP',0 GUIOptionText2 db 'AUTO FRAME RATE',0 GUIOptionText3 db 'NEW GFX ENGINE',0 GUIOptionText4 db 'MMX SUPPORT',0 GUIOptionText5 db 'USE PL3/4 AS PL1/2',0 GUIOptionText6 db 'SIDEWINDER FIX',0 GUIOptionText6b db 'HIGH PRIORITY MODE',0 GUIOptionText7 db 'FPS AT PROGRAM START',0 GUIOptionText8 db 'USE 30HZ FOR TURBO',0 GUIOptionText9 db 'ENABLE GAME CLOCK',0 GUIOptionTextA db 'TOGGLED FAST FWD/SLWDWN',0 GUIOptionTextB db 'OLD GFX MODE 2',0 GUIOptionTextC db 'DON',39,'T SAVE CUR PATH',0 GUIOptionTextD db 'USE SMALL MESSAGE TEXT',0 GUIOptionTextE db 'ENABLE AUTO-PATCH',0 GUIOptionTextF db 'ENABLE ROMINFO.TXT',0 GUIOptionTextW db 'DISABLE SCREENSAVER',0 ; Try to keep as last option, since its Win Only. GUIOptionTextX db '-',0 GUIOptionTextY db '+',0 GUIOptionTextZ db '-',0 SECTION .text DisplayGUIVideo: cmp byte[TripBufAvail],0 jne .notexttb mov byte[Triplebufen],0 .notexttb cmp byte[MMXSupport],1 jne .2xSaIdis cmp byte[newgfx16b],0 je .2xSaIdis jmp .no2xSaIdis .2xSaIdis mov byte[En2xSaI],0 mov byte[hqFilter],0 .no2xSaIdis cmp byte[En2xSaI],0 je .no2xsaidis mov byte[Triplebufen],0 .no2xsaidis cmp byte[En2xSaI],0 je .no2xsaien mov byte[hqFilter],0 mov byte[scanlines],0 mov byte[antienab],0 .no2xsaien cmp byte[hqFilter],0 je .nohq3xen mov byte[En2xSaI],0 mov byte[scanlines],0 mov byte[antienab],0 .nohq3xen ; Video Modes List/Scanlines/Interpolation/Full(Small) Screen GUIDrawWindowBox 5,GUIVideoDisp mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 %ifndef __MSDOS__ 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,10,106,GUIVideoTextw4 %endif xor eax,eax mov al,[cvidmode] cmp byte[GUISLVID+eax],0 je near .notext2 %ifdef __LINUX__ GUIOuttextwin2 5,13,116,GUIVideoTextb GUIOuttextwin2u 5,36,124,GUIVideoTexta,0 %else GUIOuttextwin2 5,13,111,GUIVideoTextb GUIOuttextwin2u 5,36,119,GUIVideoTexta,0 %endif .notext2 xor eax,eax mov al,[cvidmode] cmp byte[GUIHSVID+eax],0 je near .notexta %ifdef __LINUX__ GUIOuttextwin2 5,13,116,GUIVideoTextb GUIOuttextwin2u 5,76,124,GUIVideoTexta2,0 GUIOuttextwin2u 5,116,124,GUIVideoTexta3,0 %else GUIOuttextwin2 5,13,111,GUIVideoTextb GUIOuttextwin2u 5,76,119,GUIVideoTexta2,0 GUIOuttextwin2u 5,116,119,GUIVideoTexta3,0 %endif .notexta xor eax,eax mov al,[cvidmode] cmp byte[GUITBWVID+eax],0 je near .nottbw GUIOuttextwin2u 5,26,128,GUIVideoText7,0 .nottbw xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .notextb GUIOuttextwin2u 5,26,138,GUIVideoTextc,1 GUIOuttextwin2u 5,26,148,GUIVideoTextd,6 GUIOuttextwin2u 5,26,158,GUIVideoTextd2,0 .notextb xor eax,eax mov al,[cvidmode] cmp byte[GUII2VID+eax],0 je near .notextb2 GUIOuttextwin2u 5,26,168,GUIVideoText3,0 .notextb2 xor eax,eax mov al,[cvidmode] cmp byte[GUIBIFIL+eax],0 je near .notextbf2 GUIOuttextwin2u 5,26,168,GUIVideoTextbf,0 .notextbf2 xor eax,eax mov al,[cvidmode] cmp byte[GUIINVID+eax],0 je .notext3 GUIOuttextwin2u 5,26,83,GUIVideoText3,0 .notext3 xor eax,eax mov al,[cvidmode] cmp byte[GUIEAVID+eax],0 je .notext4 GUIOuttextwin2u 5,26,83,GUIVideoText4,9 .notext4 xor eax,eax mov al,[cvidmode] cmp byte[GUIFSVID+eax],0 je near .notext5 cmp byte[GUIWSVID+eax],0 je .notext4a GUIOuttextwin2u 5,26,93,GUIVideoText5b,6 jmp .notext5 .notext4a GUIOuttextwin2u 5,26,93,GUIVideoText5,6 .notext5 xor eax,eax mov al,[cvidmode] cmp byte[GUISSVID+eax],0 je .notext6 GUIOuttextwin2u 5,26,103,GUIVideoText6,1 .notext6 xor eax,eax mov al,[cvidmode] cmp byte[TripBufAvail],0 je near .notext7 cmp byte[GUITBVID+eax],0 je .notext7 GUIOuttextwin2u 5,26,168,GUIVideoText7,0 .notext7 xor eax,eax mov al,[cvidmode] cmp byte[GUIM7VID+eax],0 je .notext8 cmp byte[newengen],0 je .notext8 GUIOuttextwin2u 5,26,178,GUIVideoText8b,0 .notext8 xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .notext11a ;GUIOuttextwin2u 5,130,158,GUIVideoTextscale2x,1 .notext11a xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ2X+eax],0 je near .notexthq2xa GUIOuttextwin2u 5,130,168,GUIVideoTexthq2x,1 .notexthq2xa xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ3X+eax],0 je near .notexthq3xa GUIOuttextwin2u 5,130,168,GUIVideoTexthq3x,1 .notexthq3xa xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ4X+eax],0 je near .notexthq4xa GUIOuttextwin2u 5,130,168,GUIVideoTexthq4x,1 .notexthq4xa GUIOuttextwin2u 5,26,188,GUIVideoText8c,0 %ifndef __LINUX__ GUIOuttextwin2u 5,130,188,GUIVideoText9,0 %endif add byte[GUItextcolor],15 %ifndef __MSDOS__ 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,9,105,GUIVideoTextw4 %endif xor eax,eax mov al,[cvidmode] cmp byte[GUISLVID+eax],0 je .notext2b %ifdef __LINUX__ GUIOuttextwin2 5,12,115,GUIVideoTextb GUIOuttextwin2 5,35,123,GUIVideoTexta %else GUIOuttextwin2 5,12,110,GUIVideoTextb GUIOuttextwin2 5,35,118,GUIVideoTexta %endif .notext2b xor eax,eax mov al,[cvidmode] cmp byte[GUIHSVID+eax],0 je near .notextab %ifdef __LINUX__ GUIOuttextwin2 5,12,115,GUIVideoTextb GUIOuttextwin2 5,75,123,GUIVideoTexta2 GUIOuttextwin2 5,115,123,GUIVideoTexta3 %else GUIOuttextwin2 5,12,110,GUIVideoTextb GUIOuttextwin2 5,75,118,GUIVideoTexta2 GUIOuttextwin2 5,115,118,GUIVideoTexta3 %endif .notextab xor eax,eax mov al,[cvidmode] cmp byte[GUITBWVID+eax],0 je near .nottbwb GUIOuttextwin2 5,25,127,GUIVideoText7 .nottbwb xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .notextbb GUIOuttextwin2 5,25,137,GUIVideoTextc GUIOuttextwin2 5,25,147,GUIVideoTextd GUIOuttextwin2 5,25,157,GUIVideoTextd2 .notextbb xor eax,eax mov al,[cvidmode] cmp byte[GUII2VID+eax],0 je near .notextb2b GUIOuttextwin2 5,25,167,GUIVideoText3 .notextb2b xor eax,eax mov al,[cvidmode] cmp byte[GUIBIFIL+eax],0 je near .notextb2bf GUIOuttextwin2 5,25,167,GUIVideoTextbf .notextb2bf xor eax,eax mov al,[cvidmode] cmp byte[GUIINVID+eax],0 je .notext3b GUIOuttextwin2 5,25,82,GUIVideoText3 .notext3b xor eax,eax mov al,[cvidmode] cmp byte[GUIEAVID+eax],0 je .notext4b GUIOuttextwin2 5,25,82,GUIVideoText4 .notext4b xor eax,eax mov al,[cvidmode] cmp byte[GUIFSVID+eax],0 je near .notext5b cmp byte[GUIWSVID+eax],0 je .notext4ba GUIOuttextwin2 5,25,92,GUIVideoText5b jmp .notext5b .notext4ba GUIOuttextwin2 5,25,92,GUIVideoText5 .notext5b xor eax,eax mov al,[cvidmode] cmp byte[GUISSVID+eax],0 je .notext6b GUIOuttextwin2 5,25,102,GUIVideoText6 .notext6b xor eax,eax mov al,[cvidmode] cmp byte[TripBufAvail],0 je near .notext7b cmp byte[GUITBVID+eax],0 je .notext7b GUIOuttextwin2 5,25,167,GUIVideoText7 .notext7b xor eax,eax mov al,[cvidmode] cmp byte[GUIM7VID+eax],0 je .notext8b cmp byte[newengen],0 je .notext8b GUIOuttextwin2 5,25,177,GUIVideoText8b .notext8b xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .notext11b ;GUIOuttextwin2 5,129,157,GUIVideoTextscale2x .notext11b xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ2X+eax],0 je near .notexthq2xb GUIOuttextwin2 5,129,167,GUIVideoTexthq2x .notexthq2xb xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ3X+eax],0 je near .notexthq3xb GUIOuttextwin2 5,129,167,GUIVideoTexthq3x .notexthq3xb xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ4X+eax],0 je near .notexthq4xb GUIOuttextwin2 5,129,167,GUIVideoTexthq4x .notexthq4xb GUIOuttextwin2 5,25,187,GUIVideoText8c %ifndef __LINUX__ GUIOuttextwin2 5,129,187,GUIVideoText9 %endif DrawGUIButton 5,128,60,164,71,GUIVideoText8,4,0,0 mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 5,6,16,GUIVideoText1 mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 5,5,15,GUIVideoText1 xor eax,eax mov al,[cvidmode] cmp byte[GUISLVID+eax],0 je near .nocheckboxb mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[scanlines],1 jne .nocheckbox mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox %ifdef __LINUX__ GUIDisplayIconWin 5,21,119,[GUITemp] %else GUIDisplayIconWin 5,21,114,[GUITemp] %endif .nocheckboxb xor eax,eax mov al,[cvidmode] cmp byte[GUIHSVID+eax],0 je .nocheckboxw mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[scanlines],3 jne .nocheckboxv mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxv %ifdef __LINUX__ GUIDisplayIconWin 5,61,119,[GUITemp] %else GUIDisplayIconWin 5,61,114,[GUITemp] %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[scanlines],2 jne .nocheckboxv2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxv2 %ifdef __LINUX__ GUIDisplayIconWin 5,101,119,[GUITemp] %else GUIDisplayIconWin 5,101,114,[GUITemp] %endif .nocheckboxw xor eax,eax mov al,[cvidmode] cmp byte[GUITBWVID+eax],0 je near .nocheckboxslw2 mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[TripleBufferWin],1 jne .nocheckboxslw mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxslw GUIDisplayIconWin 5,11,123,[GUITemp] .nocheckboxslw2 xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .nocheckboxx mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[En2xSaI],1 jne .nocheckboxx2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxx2 GUIDisplayIconWin 5,11,133,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[En2xSaI],2 jne .nocheckboxx3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxx3 GUIDisplayIconWin 5,11,143,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[En2xSaI],3 jne .nocheckboxx4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxx4 GUIDisplayIconWin 5,11,153,[GUITemp] .nocheckboxx xor eax,eax mov al,[cvidmode] cmp byte[GUII2VID+eax],0 je near .nocheckboxi2 mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[antienab],0 je .nocheckbox1i2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1i2 GUIDisplayIconWin 5,11,163,[GUITemp] .nocheckboxi2 xor eax,eax mov al,[cvidmode] cmp byte[GUIBIFIL+eax],0 je near .nocheckboxbf mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[BilinearFilter],0 je .nocheckbox1bf mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1bf GUIDisplayIconWin 5,11,163,[GUITemp] .nocheckboxbf xor eax,eax mov al,[cvidmode] cmp byte[GUITBVID+eax],0 je .nocheckboxtbb cmp byte[TripBufAvail],0 je near .nocheckboxtbb mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[Triplebufen],1 jne .nocheckboxtb mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxtb GUIDisplayIconWin 5,11,163,[GUITemp] .nocheckboxtbb xor eax,eax mov al,[cvidmode] cmp byte[GUIM7VID+eax],0 je near .nocheckboxm72 cmp byte[newengen],0 je near .nocheckboxm72 mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[Mode7HiRes16b],0 je .nocheckbox1m72 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1m72 GUIDisplayIconWin 5,11,173,[GUITemp] .nocheckboxm72 mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GrayscaleMode],0 je .nocheckboxm73 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxm73 GUIDisplayIconWin 5,11,183,[GUITemp] %ifndef __LINUX__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[vsyncon],0 je .nocheckboxm74 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxm74 GUIDisplayIconWin 5,115,183,[GUITemp] %endif xor eax,eax mov al,[cvidmode] cmp byte[GUIIEVID+eax],0 je .nocheckbox1b mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[antienab],0 je .nocheckbox1 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1 GUIDisplayIconWin 5,11,78,[GUITemp] .nocheckbox1b xor eax,eax mov al,[cvidmode] cmp byte[GUIFSVID+eax],0 je .nocheckbox2b mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[ScreenScale],0 je .nocheckbox2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox2 GUIDisplayIconWin 5,11,88,[GUITemp] .nocheckbox2b xor eax,eax mov al,[cvidmode] cmp byte[GUISSVID+eax],0 je .nocheckbox3b mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[smallscreenon],0 je .nocheckbox3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox3 GUIDisplayIconWin 5,11,98,[GUITemp] .nocheckbox3b xor eax,eax mov al,[cvidmode] cmp byte[GUI2xVID+eax],0 je near .nocheckbox2scale2x mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[scale2xFilter],0 je .nocheckbox1scale2x mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1scale2x ;GUIDisplayIconWin 5,115,153,[GUITemp] .nocheckbox2scale2x xor eax,eax mov al,[cvidmode] cmp byte[GUIHQ2X+eax],0 jne near .checkboxhq cmp byte[GUIHQ3X+eax],0 jne near .checkboxhq cmp byte[GUIHQ4X+eax],0 jne near .checkboxhq jmp .nocheckboxhq .checkboxhq mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[hqFilter],0 je .uncheckedhq mov dword[GUITemp],GUIIconDataCheckBoxC .uncheckedhq GUIDisplayIconWin 5,115,163,[GUITemp] .nocheckboxhq DrawGUIWinBox 5,5,26,115,69,167 DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],5,28,GUIVStA cmp byte[GUICHold],5 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin 5,117,26,GUIIconDataUpArrow cmp byte[GUICHold],5 jne .noholdb sub byte[GUIWincoladd],3 .noholdb cmp byte[GUICHold],6 jne .noholdc add byte[GUIWincoladd],3 .noholdc GUIDisplayIconWin 5,117,62,GUIIconDataDownArrow cmp byte[GUICHold],6 jne .noholdd sub byte[GUIWincoladd],3 .noholdd mov ebx,[GUIcurrentvideocursloc] sub ebx,[GUIcurrentvideoviewloc] lea ebx,[ebx*8] add ebx,28 DrawGUIWinBox2 5,5,115,7,224 mov byte[GUItextcolor],223 mov eax,[GUIcurrentvideoviewloc] mov ebx,eax shl eax,4 add eax,ebx add eax,ebx add eax,GUIVideoModeNames mov dword[GUITemp],eax GUIOuttextwin2 5,11,30,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,11,30+8,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,11,30+8*2,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,11,30+8*3,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,11,30+8*4,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 mov eax,[GUIcurrentvideoviewloc] mov ebx,eax shl eax,4 add eax,ebx add eax,ebx add eax,GUIVideoModeNames mov dword[GUITemp],eax GUIOuttextwin2 5,10,29,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,10,29+8,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,10,29+8*2,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,10,29+8*3,[GUITemp] add dword[GUITemp],18 GUIOuttextwin2 5,10,29+8*4,[GUITemp] ; Draw border mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 5,5,25,115,25,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 5,4,26,3,69,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 5,5,70,115,70,dl xor eax,eax mov al,[cvidmode] mov ebx,eax shl eax,4 add eax,ebx add eax,ebx add eax,GUIVideoModeNames mov dword[GUITemp],eax mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 5,7,196,GUIVideoTextH GUIOuttextwin2 5,49,196,[GUITemp] mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero6 mov byte[GUItextcolor],164 .zero6 GUIOuttextwin2 5,6,195,GUIVideoTextH GUIOuttextwin2 5,48,195,[GUITemp] ret SECTION .data GUIVideoText1 db 'VIDEO MODES :',0 GUIVideoText2 db 'FULL SCANLINES',0 GUIVideoTextb db 'SCANLINES:',0 GUIVideoTexta db 'FULL',0 GUIVideoTexta2 db '50%',0 GUIVideoTexta3 db '25%',0 GUIVideoTextc db '2XSAI ENGINE',0 GUIVideoTextd db 'SUPER EAGLE',0 GUIVideoTextd2 db 'SUPER 2XSAI',0 GUIVideoTextbf db 'BILINEAR FILTER',0 GUIVideoText3 db 'INTERPOLATION',0 ; -y GUIVideoText4 db 'EAGLE ENGINE',0 ; -y GUIVideoTextscale2x db 'SCALE2X',0 GUIVideoTexthq2x db 'HQ2X',0 GUIVideoTexthq3x db 'HQ3X',0 GUIVideoTexthq4x db 'HQ4X',0 GUIVideoText5 db 'FULL SCREEN',0 ; -c GUIVideoText5b db 'WIDE SCREEN',0 ; -c GUIVideoText6 db 'SMALL SCREEN',0 ; -c GUIVideoText7 db 'TRIPLE BUFFERING',0 ; -c GUIVideoText8b db 'HI-RES MODE 7',0 ; -c GUIVideoText8c db 'GRAYSCALE MODE',0 ; -c GUIVideoText8 db 'SET',0 ; set button GUIVideoText9 db 'VSYNC',0 ; -c GUIVideoTextH db 'MODE : ',0 GUIVideoTextw0 db 'LEGEND:',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 GUIcurrentvideoviewloc resd 1 GUIcurrentvideocursloc resd 1 SECTION .text DisplayGUISound: ; Sound Related Options GUIDrawWindowBox 6,GUISoundDisp ;Text Display mov byte[GUItextcolor],217 ; Shadows cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2u 6,26,26,GUISoundTextA1,0 GUIOuttextwin2u 6,26,35,GUISoundTextA2,0 %ifdef __MSDOS__ GUIOuttextwin2u 6,26,44,GUISoundTextA3,1 GUIOuttextwin2u 6,116,26,GUISoundTextA4,0 %endif %ifdef __WIN32__ GUIOuttextwin2u 6,26,106,GUISoundTextD1,4 %endif GUIOuttextwin2u 6,26,116,GUISoundTextD2,2 GUIOuttextwin2u 6,26,126,GUISoundTextD3,1 GUIOuttextwin2u 6,26,136,GUISoundTextD4,6 GUIOuttextwin2u 6,26,146,GUISoundTextD5,0 GUIOuttextwin2u 6,26,168,GUISoundTextE1,0 GUIOuttextwin2u 6,26,178,GUISoundTextE2,0 %ifndef __MSDOS__ GUIOuttextwin2u 6,26,188,GUISoundTextE3,0 %endif GUIOuttextwin2u 6,126,168,GUISoundTextF1,1 GUIOuttextwin2u 6,126,178,GUISoundTextF2,1 %ifndef __MSDOS__ GUIOuttextwin2u 6,126,188,GUISoundTextF3,0 %endif add byte[GUItextcolor],15 ;Text GUIOuttextwin2 6,25,25,GUISoundTextA1 GUIOuttextwin2 6,25,34,GUISoundTextA2 %ifdef __MSDOS__ GUIOuttextwin2 6,25,43,GUISoundTextA3 GUIOuttextwin2 6,115,25,GUISoundTextA4 %endif %ifdef __WIN32__ GUIOuttextwin2 6,25,105,GUISoundTextD1 %endif GUIOuttextwin2 6,25,115,GUISoundTextD2 GUIOuttextwin2 6,25,125,GUISoundTextD3 GUIOuttextwin2 6,25,135,GUISoundTextD4 GUIOuttextwin2 6,25,145,GUISoundTextD5 GUIOuttextwin2 6,25,167,GUISoundTextE1 GUIOuttextwin2 6,25,177,GUISoundTextE2 %ifndef __MSDOS__ GUIOuttextwin2 6,25,187,GUISoundTextE3 %endif GUIOuttextwin2 6,125,167,GUISoundTextF1 GUIOuttextwin2 6,125,177,GUISoundTextF2 %ifndef __MSDOS__ GUIOuttextwin2 6,125,187,GUISoundTextF3 %endif mov al,[GUIWincol] ;Yellow Shadow mov byte[GUItextcolor],al GUIOuttextwin2 6,6,16,GUISoundTextA GUIOuttextwin2u 6,6,53,GUISoundTextB,9 GUIOuttextwin2 6,6,76,GUISoundTextC GUIOuttextwin2 6,6,158,GUISoundTextE GUIOuttextwin2 6,106,158,GUISoundTextF mov byte[GUItextcolor],163 ;Yellow Text cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 6,5,15,GUISoundTextA GUIOuttextwin2 6,5,52,GUISoundTextB GUIOuttextwin2 6,5,75,GUISoundTextC GUIOuttextwin2 6,5,157,GUISoundTextE GUIOuttextwin2 6,105,157,GUISoundTextF ;Checkboxes mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[cfgsoundon],0 je .nocheckbox mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox GUIDisplayIconWin 6,11,21,[GUITemp] %ifdef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[cfgforce8b],0 je .nocheckbox0 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox0 GUIDisplayIconWin 6,102,21,[GUITemp] %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[cfgStereoSound],0 je .nocheckbox1 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1 GUIDisplayIconWin 6,11,30,[GUITemp] %ifdef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[RaisePitch],0 je .nocheckbox1b mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1b GUIDisplayIconWin 6,11,39,[GUITemp] %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[RevStereo],0 je .nocheckbox3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox3 GUIDisplayIconWin 6,11,111,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[Surround],0 je .nocheckbox4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox4 GUIDisplayIconWin 6,11,121,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SoundBufEn],0 je .nocheckbox5 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox5 GUIDisplayIconWin 6,11,131,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SPCDisable],0 je .nocheckbox6 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox6 GUIDisplayIconWin 6,11,141,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SoundInterpType],1 jne .nocheckbox7 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox7 GUIDisplayIconWin 6,11,163,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SoundInterpType],2 jne .nocheckbox8 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox8 GUIDisplayIconWin 6,11,173,[GUITemp] %ifndef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SoundInterpType],3 jne .nocheckbox9 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox9 GUIDisplayIconWin 6,11,183,[GUITemp] %endif mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[LowPassFilterType],1 jne .nocheckbox10 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox10 GUIDisplayIconWin 6,111,163,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[LowPassFilterType],2 jne .nocheckbox11 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox11 GUIDisplayIconWin 6,111,173,[GUITemp] %ifndef __MSDOS__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[LowPassFilterType],3 jne .nocheckbox12 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox12 GUIDisplayIconWin 6,111,183,[GUITemp] %endif %ifdef __WIN32__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[PrimaryBuffer],0 je .nocheckbox13 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox13 GUIDisplayIconWin 6,11,101,[GUITemp] %endif ;Sampling Rate Box DrawGUIWinBox 6,15,61,69,69,167 mov dword[GUITemp],GUISoundTextB1 xor eax,eax mov al,[cfgSoundQuality] shl eax,3 add [GUITemp],eax mov byte[GUItextcolor],223 ; Text GUIOuttextwin2 6,23,64,[GUITemp] mov byte[GUItextcolor],221 ; Shadow cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 GUIOuttextwin2 6,22,63,[GUITemp] ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone3 mov dword[GUIWincol],148+5 .noone3 cmp byte[cwindrawn],0 jne .nozero3 mov dword[GUIWincol],148 .nozero3 mov dl,[GUIWincol] DrawGUIWinBox 6,15,60,69,60,dl ;top mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 6,14,61,13,69,dl ;left mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 6,15,70,69,70,dl ;bottom mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 6,71,61,70,69,dl ;right ; Volume Level Slider mov eax,dword[GUIwinposx+6*4] mov ebx,dword[GUIwinposy+6*4] mov ecx,eax add eax,15 add ecx,15+100 add ebx,91 xor edx,edx mov dl,215 sub dl,[GUIWincoladd] DrawGUILine inc ecx inc eax sub dl,13 DrawGUILine xor eax,eax mov al,[MusicRelVol] mov dword[GUITemp],11 add [GUITemp],eax GUIDisplayIconWin 6,[GUITemp],87,GUIIconDataSlideBar mov dword[GUISoundTextC1],' ' mov byte[GUISoundTextC1+3],'%' mov esi,GUISoundTextC1+2 xor eax,eax mov al,[MusicRelVol] mov ebx,10 div bl add ah,48 mov [esi],ah cmp al,0 je .nomore dec esi xor ah,ah div bl add ah,48 mov [esi],ah cmp al,0 je .nomore dec esi xor ah,ah div bl add ah,48 mov [esi],ah .nomore mov [GUITemp],esi mov byte[GUItextcolor],223 GUIOuttextwin2 6,119,89,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 GUIOuttextwin2 6,118,88,[GUITemp] ret SECTION .data GUISoundTextA db 'SOUND SWITCHES :',0 GUISoundTextA1 db 'ENABLE SOUND',0 GUISoundTextA2 db 'STEREO SOUND',0 GUISoundTextA3 db 'RAISE PITCH LEVEL',0 ; DOS Only GUISoundTextA4 db 'FORCE 8-BIT',0 ; DOS Only GUISoundTextB db 'SAMPLING RATE :',0 GUISoundTextB1 db ' 8000HZ',0 GUISoundTextB2 db '11025HZ',0 GUISoundTextB3 db '22050HZ',0 GUISoundTextB4 db '44100HZ',0 GUISoundTextB5 db '16000HZ',0 GUISoundTextB6 db '32000HZ',0 GUISoundTextB7 db '48000HZ',0 GUISoundTextC db 'VOLUME LEVEL :',0 GUISoundTextC1 db '---%',0 GUISoundTextD1 db 'USE PRIMARY BUFFER',0 ; Win Only GUISoundTextD2 db 'REVERSE STEREO',0 GUISoundTextD3 db 'SURROUND SOUND',0 GUISoundTextD4 db 'SOUND BUFFERING',0 GUISoundTextD5 db 'DISABLE SPC EMULATION',0 GUISoundTextE db 'INTERPOLATION :',0 GUISoundTextE1 db 'GAUSSIAN',0 GUISoundTextE2 db 'CUBIC SPLINE',0 GUISoundTextE3 db '8-POINT',0 ; Non-DOS Only GUISoundTextF db 'LOWPASS :',0 GUISoundTextF1 db 'SIMPLE',0 GUISoundTextF2 db 'DYNAMIC',0 GUISoundTextF3 db 'HI QUALITY',0 ; Non-DOS Only SECTION .text DisplayGUICheatConv: mov eax,[ccheatnpos] add eax,4 xor ebx,ebx mov ecx,3 mov edx,GUICheatTextZ3 .loop mov bl,[eax] and bl,0Fh mov bl,[GUICheatTextZ4+ebx] mov [edx+1],bl mov bl,[eax] and bl,0F0h shr bl,4 mov bl,[GUICheatTextZ4+ebx] mov [edx],bl add edx,2 dec eax dec ecx jnz .loop mov eax,[ccheatnpos] inc eax mov edx,GUICheatTextZ3+7 mov bl,[eax] and bl,0Fh mov bl,[GUICheatTextZ4+ebx] mov [edx+1],bl mov bl,[eax] and bl,0F0h shr bl,4 mov bl,[GUICheatTextZ4+ebx] mov [edx],bl mov eax,[ccheatnpos] add eax,5 mov edx,GUICheatTextZ3+10 mov bl,[eax] and bl,0Fh mov bl,[GUICheatTextZ4+ebx] mov [edx+1],bl mov bl,[eax] and bl,0F0h shr bl,4 mov bl,[GUICheatTextZ4+ebx] mov [edx],bl mov eax,[ccheatnpos] test byte[eax-28],80h jnz .src test byte[eax],04h jz .on mov byte[GUICheatTextZ3+13],'O' mov byte[GUICheatTextZ3+14],'F' mov byte[GUICheatTextZ3+15],'F' jmp .off .on test byte[eax],80h jnz .repl mov byte[GUICheatTextZ3+13],'O' mov byte[GUICheatTextZ3+14],'N' mov byte[GUICheatTextZ3+15],' ' jmp .off .repl mov byte[GUICheatTextZ3+13],'R' mov byte[GUICheatTextZ3+14],'P' mov byte[GUICheatTextZ3+15],'L' jmp .off .src mov byte[GUICheatTextZ3+13],'S' mov byte[GUICheatTextZ3+14],'R' mov byte[GUICheatTextZ3+15],'C' .off mov ecx,20 add eax,8 mov edx,GUICheatTextZ3+17 .loop2 mov bl,[eax] mov [edx],bl inc eax inc edx dec ecx jnz .loop2 ret %macro GUIOuttextwin2cheat 2 test dword[ccheatnleft],80000000h jnz %%skip call DisplayGUICheatConv GUIOuttextwin2 7,%1,%2,GUICheatTextZ3 add dword[ccheatnpos],28 dec dword[ccheatnleft] %%skip %endmacro DisplayGUICheat: ; Add/Browse Cheats menu GUIDrawWindowBox 7,GUICheatDisp ; Display Text mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 ;Shadow GUIOuttextwin2 7,6,13,GUICheatTextA GUIOuttextwin2 7,6,132,GUICheatTextC1 GUIOuttextwin2 7,6,143,GUICheatTextC2 GUIOuttextwin2 7,11,154,GUICheatTextD1 GUIOuttextwin2 7,11,164,GUICheatTextD2 GUIOuttextwin2 7,11,172,GUICheatTextD3 GUIOuttextwin2 7,11,180,GUICheatTextD4 GUIOuttextwin2 7,26,191,GUICheatTextE1 add byte[GUItextcolor],15 ;Text GUIOuttextwin2 7,5,12,GUICheatTextA GUIOuttextwin2 7,5,131,GUICheatTextC1 GUIOuttextwin2 7,5,142,GUICheatTextC2 GUIOuttextwin2 7,10,153,GUICheatTextD1 GUIOuttextwin2 7,10,163,GUICheatTextD2 GUIOuttextwin2 7,10,171,GUICheatTextD3 GUIOuttextwin2 7,10,179,GUICheatTextD4 GUIOuttextwin2 7,25,190,GUICheatTextE1 DrawGUIWinBox 7,5,20,229,108,167 ; Draw Buttons DrawGUIButton 7,5,113,47,124,GUICheatTextB1,5,0,0 DrawGUIButton 7,52,113,94,124,GUICheatTextB2,6,0,0 DrawGUIButton 7,99,113,141,124,GUICheatTextB3,7,0,0 DrawGUIButton 7,146,113,188,124,GUICheatTextB4,8,0,0 DrawGUIButton 7,193,113,235,124,GUICheatTextB5,33,0,0 DrawGUIButton 7,212,134,236,145,GUICheatTextB6,9,0,0 ; Easiest way i could think of to underline the hotkeys for the buttons GUIOuttextwin2u 7,10,117,GUICheatTextZ5,0 GUIOuttextwin2u 7,57,117,GUICheatTextZ5,0 GUIOuttextwin2u 7,104,117,GUICheatTextZ5,0 GUIOuttextwin2u 7,151,117,GUICheatTextZ5,0 GUIOuttextwin2u 7,198,117,GUICheatTextZ5,0 ; Red Highlight for Cheats box cmp dword[GUIcurrentcheatwin],0 jne near .nowinbox mov ebx,[GUIcurrentcheatcursloc] sub ebx,[GUIcurrentcheatviewloc] mov eax,ebx lea ebx,[ebx*8] sub ebx,eax add ebx,22 DrawGUIWinBox2 7,5,229,7,224 .nowinbox ; Draw Cheats box mov byte[GUItextcolor],223 mov dword[ccheatnpos],cheatdata mov eax,[NumCheats] sub eax,[GUIcurrentcheatviewloc] dec eax mov dword[ccheatnleft],eax mov eax,[GUIcurrentcheatviewloc] mov ebx,eax shl eax,5 sub eax,ebx sub eax,ebx sub eax,ebx sub eax,ebx add [ccheatnpos],eax GUIOuttextwin2cheat 12,24 ; Shadow GUIOuttextwin2cheat 12,24+7 GUIOuttextwin2cheat 12,24+7*2 GUIOuttextwin2cheat 12,24+7*3 GUIOuttextwin2cheat 12,24+7*4 GUIOuttextwin2cheat 12,24+7*5 GUIOuttextwin2cheat 12,24+7*6 GUIOuttextwin2cheat 12,24+7*7 GUIOuttextwin2cheat 12,24+7*8 GUIOuttextwin2cheat 12,24+7*9 GUIOuttextwin2cheat 12,24+7*10 GUIOuttextwin2cheat 12,24+7*11 mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 mov dword[ccheatnpos],cheatdata mov eax,[NumCheats] sub eax,[GUIcurrentcheatviewloc] dec eax mov dword[ccheatnleft],eax mov eax,[GUIcurrentcheatviewloc] mov ebx,eax shl eax,5 sub eax,ebx sub eax,ebx sub eax,ebx sub eax,ebx add [ccheatnpos],eax GUIOuttextwin2cheat 11,23 ;Text GUIOuttextwin2cheat 11,23+7 GUIOuttextwin2cheat 11,23+7*2 GUIOuttextwin2cheat 11,23+7*3 GUIOuttextwin2cheat 11,23+7*4 GUIOuttextwin2cheat 11,23+7*5 GUIOuttextwin2cheat 11,23+7*6 GUIOuttextwin2cheat 11,23+7*7 GUIOuttextwin2cheat 11,23+7*8 GUIOuttextwin2cheat 11,23+7*9 GUIOuttextwin2cheat 11,23+7*10 GUIOuttextwin2cheat 11,23+7*11 ;Scrollbar DrawSlideBarWin 7,231,28,[GUIcurrentcheatviewloc],[NumCheats],12,73,GUICStA cmp byte[GUICHold],7 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin 7,231,20,GUIIconDataUpArrow cmp byte[GUICHold],7 jne .noholda2 sub byte[GUIWincoladd],3 .noholda2 cmp byte[GUICHold],8 jne .noholdb add byte[GUIWincoladd],3 .noholdb GUIDisplayIconWin 7,231,101,GUIIconDataDownArrow cmp byte[GUICHold],8 jne .noholdb2 sub byte[GUIWincoladd],3 .noholdb2 ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 7,5,19,229,19,dl ; Cheat Box DrawGUIWinBox 7,82,128,172,128,dl ; Code Box DrawGUIWinBox 7,82,139,196,139,dl ; Descrip. Box mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 7,4,20,3,108,dl DrawGUIWinBox 7,81,129,80,136,dl DrawGUIWinBox 7,81,140,80,147,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 7,5,109,229,109,dl DrawGUIWinBox 7,82,137,172,137,dl DrawGUIWinBox 7,82,148,196,148,dl mov dl,[GUIWincol] add dl,3 ; Cheat Box doesn't have right border DrawGUIWinBox 7,174,129,173,136,dl DrawGUIWinBox 7,156,140,197,147,dl ; Draw input boxes mov ebx,[GUIcurrentcheatcursloc] sub ebx,[GUIcurrentcheatviewloc] mov eax,ebx lea ebx,[ebx*4] add ebx,eax add ebx,eax add ebx,eax add ebx,22 mov dl,167 ;Code Box cmp dword[GUIcurrentcheatwin],1 jne .notopibox mov dl,226 cmp byte[GUIWincoladd],0 je .nocoladd inc dl .nocoladd .notopibox DrawGUIWinBox 7,82,129,172,136,dl mov dl,167 ;Descrip. Box cmp dword[GUIcurrentcheatwin],2 jne .nobotibox mov dl,226 cmp byte[GUIWincoladd],0 je .nocoladd2 inc dl .nocoladd2 .nobotibox DrawGUIWinBox 7,82,140,196,147,dl mov byte[GUItextcolor],223 ;Shadow GUIOuttextwin2 7,84,132,GUICheatTextZ1 GUIOuttextwin2 7,84,143,GUICheatTextZ2 mov byte[GUItextcolor],221 ;Text cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],222 .zero3 GUIOuttextwin2 7,83,131,GUICheatTextZ1 GUIOuttextwin2 7,83,142,GUICheatTextZ2 xor eax,eax ; Code for movement of cursor mov al,[GUICheatPosA] mov byte[GUICheatTextZ1+eax],0 xor ebx,ebx mov bl,[GUICheatPosB] mov byte[GUICheatTextZ2+ebx],0 test byte[GUICCFlash],8 jnz .nound cmp dword[GUIcurrentcheatwin],1 je .win1 cmp dword[GUIcurrentcheatwin],2 je .win2 jmp .nound .win1 mov byte[GUICheatTextZ1+eax],'_' jmp .nound .win2 mov byte[GUICheatTextZ2+ebx],'_' .nound ; Checkbox mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[AutoLoadCht],1 jne .nocheckbox mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox GUIDisplayIconWin 7,11,186,[GUITemp] ret SECTION .data GUICheatTextA db 'ADDRESS CV PV TGL DESCRIPTION',0 ; Top GUICheatTextB1 db 'REMOVE',0 ; Buttons GUICheatTextB2 db 'TOGGLE',0 GUICheatTextB3 db 'SAVE',0 GUICheatTextB4 db 'LOAD',0 GUICheatTextB5 db 'FIX',0 GUICheatTextB6 db 'ADD',0 GUICheatTextC1 db 'ENTER CODE :',0 ; Text by input boxes GUICheatTextC2 db 'DESCRIPTION:',0 GUICheatTextD1 db 'VALID CODES : GAME GENIE, PAR, AND GF',0 ; Info for User GUICheatTextD2 db 'NOTE : YOU MAY HAVE TO RESET THE GAME',0 GUICheatTextD3 db ' AFTER ENTERING THE CODE. REMEMBER TO',0 GUICheatTextD4 db ' INSERT THE "-" FOR GAME GENIE CODES',0 GUICheatTextE1 db 'AUTO-LOAD .CHT FILE AT GAME LOAD',0 ; Checkbox Text GUICheatTextZ1 db '_',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 14 digits GUICheatTextZ2 db '_',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 11 digits (?) GUICheatTextZ3 db '000000 00 00 OFF BLAHBLAH---',0,0,0,0,0,0,0,0,0,0,0,0 GUICheatTextZ4 db '0123456789ABCDEF' GUICheatTextZ5 db ' ',0 SECTION .bss GUICheatPosA resb 1 GUICheatPosB resb 1 GUICStA resd 3 GUIcurrentcheatviewloc resd 1 GUIcurrentcheatcursloc resd 1 GUIcurrentcheatwin resd 1 ccheatnpos resd 1 ccheatnleft resd 1 SECTION .text DrawWindowSearch: GUIDrawWindowBox 13,GUISearchDisp ret %macro TextWindowMacro 4 sub byte[GUItextcolor],15 GUIOuttextwin2 %1,%2+1,%3+1,%4 add byte[GUItextcolor],15 GUIOuttextwin2 %1,%2,%3,%4 %endmacro CSRemoveFlash: .loop cmp byte[esi],'_' je .flash cmp byte[esi],0 je .notflash inc esi jmp .loop .flash mov byte[esi],0 .notflash ret CSAddFlash: .loop cmp byte[esi],'_' je .flash cmp byte[esi],0 je .notflash inc esi jmp .loop .notflash mov byte[esi],'_' mov byte[esi+1],0 .flash ret DisplayGUISearch: jmp .startcheat call DrawWindowSearch mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2 13,6,16,GUISrcText1 GUIOuttextwin2 13,6,26,GUISrcText2 GUIOuttextwin2 13,6,36,GUISrcText3 add byte[GUItextcolor],15 GUIOuttextwin2 13,5,15,GUISrcText1 GUIOuttextwin2 13,5,25,GUISrcText2 GUIOuttextwin2 13,5,35,GUISrcText3 ret ; DrawGUIButton 13,197,30,239,41,GUICSrcText8+2,40,0,0 ret .startcheat cmp byte[CheatWinMode],1 je near Incheatmode cmp byte[CheatWinMode],2 je near Cheatmodeview cmp byte[CheatWinMode],3 je near Cheatmodeadd mov dword[GUIwinsizex+13*4],170 mov dword[GUIwinsizey+13*4],150 call DrawWindowSearch mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 13,6,16,GUICSrcText1 GUIOuttextwin2 13,6,101,GUICSrcText8 mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 13,5,15,GUICSrcText1 GUIOuttextwin2 13,5,100,GUICSrcText8 mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero2 mov byte[GUItextcolor],211 .zero2 TextWindowMacro 13,25,30,GUICSrcText2 TextWindowMacro 13,25,40,GUICSrcText3 TextWindowMacro 13,25,50,GUICSrcText4 TextWindowMacro 13,25,60,GUICSrcText5 TextWindowMacro 13,25,75,GUICSrcText6 TextWindowMacro 13,25,85,GUICSrcText7 TextWindowMacro 13,25,115,GUICSrcText9 TextWindowMacro 13,25,125,GUICSrcTextA DrawGUIButton 13,95,140,140,152,GUICSrcTextB,50,0,1 GUIDisplayButtonHole 13,11,28,byte[CheatSrcByteSize],0 GUIDisplayButtonHole 13,11,38,byte[CheatSrcByteSize],1 GUIDisplayButtonHole 13,11,48,byte[CheatSrcByteSize],2 GUIDisplayButtonHole 13,11,58,byte[CheatSrcByteSize],3 GUIDisplayButtonHole 13,11,73,byte[CheatSrcByteBase],0 GUIDisplayButtonHole 13,11,83,byte[CheatSrcByteBase],1 GUIDisplayButtonHole 13,11,113,byte[CheatSrcSearchType],0 GUIDisplayButtonHole 13,11,123,byte[CheatSrcSearchType],1 ret Incheatmode: mov dword[GUIwinsizex+13*4],180 mov dword[GUIwinsizey+13*4],150 call DrawWindowSearch mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero2 mov byte[GUItextcolor],211 .zero2 cmp byte[CheatSearchStatus],1 jne near CheatSearching TextWindowMacro 13,5,20,GUICSrcTextM TextWindowMacro 13,5,30,GUICSrcTextN TextWindowMacro 13,5,40,GUICSrcTextO TextWindowMacro 13,5,50,GUICSrcTextP jmp DisplayChtSrcRes.nosearch CheatSearching: cmp byte[CheatSrcSearchType],1 je near CheatSearchingComp ; Exact Value Search TextWindowMacro 13,5,20,GUICSrcTextD DrawGUIWinBox 13,10,40,80,47,167 ; Draw border mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 13,10,39,80,39,dl ; 0,-1,0,-1 mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 13,9,40,8,47,dl ; -1,0,-2,0 mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 13,10,48,80,48,dl ; 0,1,0,1 mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 13,82,40,81,47,dl ; 2,0,1,0 test byte[GUICCFlash],8 jnz .nound mov esi,CSInputDisplay call CSRemoveFlash .nound mov byte[GUItextcolor],223 cmp byte[CSOverValue],1 jne .notdark mov byte[GUItextcolor],202 .notdark GUIOuttextwin2 13,13,42,CSInputDisplay mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 cmp byte[CSOverValue],1 jne .notdark2 mov byte[GUItextcolor],207 .notdark2 GUIOuttextwin2 13,12,41,CSInputDisplay mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero2 mov byte[GUItextcolor],211 .zero2 TextWindowMacro 13,5,65,GUICSrcTextT mov esi,CSInputDisplay call CSAddFlash xor eax,eax mov al,[CheatSrcByteSize] mov eax,[SrcMask+eax*4] mov esi,GUICSrcTextQ cmp byte[CheatSrcByteBase],1 je .hex call convertnum jmp .dec .hex xor ecx,ecx mov cl,[CheatSrcByteSize] inc ecx call converthex .dec TextWindowMacro 13,71,65,GUICSrcTextQ jmp DisplayChtSrcRes CheatSearchingComp: ; Comparative search mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 13,6,16,GUICSrcTextE mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],164 .zero3 GUIOuttextwin2 13,5,15,GUICSrcTextE mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero2 mov byte[GUItextcolor],211 .zero2 TextWindowMacro 13,25,35,GUICSrcTextF TextWindowMacro 13,25,45,GUICSrcTextG TextWindowMacro 13,25,55,GUICSrcTextH TextWindowMacro 13,25,65,GUICSrcTextHb GUIDisplayButtonHole 13,11,33,byte[CheatCompareValue],0 GUIDisplayButtonHole 13,11,43,byte[CheatCompareValue],1 GUIDisplayButtonHole 13,11,53,byte[CheatCompareValue],2 GUIDisplayButtonHole 13,11,63,byte[CheatCompareValue],3 jmp DisplayChtSrcRes FindChtSrcRes: inc edi ; Calculate search results mov eax,dword[vidbuffer] add eax,129600+65536*2 mov ecx,16384 xor esi,esi xor ebx,ebx .searchloop mov dl,[eax] mov dh,8 .sloop2 test dl,1 jz .notset inc ebx dec edi jz .found .notset inc esi shr dl,1 dec dh jnz .sloop2 inc eax dec ecx jnz .searchloop mov eax,ebx ret .found mov [CSStartEntry],esi jmp .notset DisplayChtSrcRes: DrawGUIButton 13,120,140,170,152,GUICSrcTextI,53,0,1 .nosearch DrawGUIButton 13,10,140,60,152,GUICSrcTextJ,51,0,1 DrawGUIButton 13,70,140,110,152,GUICSrcTextL,52,0,1 xor edi,edi call FindChtSrcRes mov esi,GUICSrcTextQ call convertnum TextWindowMacro 13,12,125,GUICSrcTextK TextWindowMacro 13,97,125,GUICSrcTextQ mov dword[GUIcurrentchtsrcviewloc],0 mov dword[GUIcurrentchtsrccursloc],0 ret Cheatmodeview: mov byte[GUICSrcTextS+12],32 cmp byte[CheatSrcByteSize],3 jne .yesprev cmp byte[CheatSrcByteBase],0 jne .yesprev mov byte[GUICSrcTextS+12],0 .yesprev mov dword[GUIwinsizex+13*4],185 mov dword[GUIwinsizey+13*4],150 call DrawWindowSearch mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero TextWindowMacro 13,10,12,GUICSrcTextS DrawGUIWinBox 13,5,20,171,108,167 ; Draw border mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 13,5,19,171,19,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 13,4,20,3,108,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 13,5,109,171,109,dl mov edi,[GUIcurrentchtsrcviewloc] call FindChtSrcRes mov [NumCheatSrc],eax mov dword[ccheatnpos],esi ; Display Window Contents mov byte[GUItextcolor],223 mov eax,[NumCheatSrc] sub eax,[GUIcurrentchtsrcviewloc] cmp eax,12 jbe .notof mov eax,12 .notof mov dword[ccheatnleft],eax mov dword[ccheatnleftb],eax mov dword[CheatSearchYPos],24 mov dword[CheatSearchXPos],10 mov eax,[CSStartEntry] mov [CSCurEntry],eax cmp dword[ccheatnleft],0 je near .noentry mov byte[CheatLooped],0 mov ebx,[GUIcurrentchtsrccursloc] sub ebx,[GUIcurrentchtsrcviewloc] mov [curentryleft],ebx mov eax,ebx lea ebx,[ebx*8] sub ebx,eax add ebx,22 DrawGUIWinBox2 13,5,171,7,224 .nextdisplay cmp dword[curentryleft],0 jne .notzero mov eax,[CSCurEntry] mov [curentryval],eax .notzero dec dword[curentryleft] mov esi,GUICSrcTextQ mov ecx,3 mov eax,[CSCurEntry] add eax,7E0000h call converthex GUIOuttextwin2 13,[CheatSearchXPos],[CheatSearchYPos],GUICSrcTextQ mov esi,GUICSrcTextQ mov ebx,[wramdata] add ebx,[CSCurEntry] mov eax,[ebx] cmp byte[CheatSrcByteBase],0 je .dec xor ecx,ecx mov cl,[CheatSrcByteSize] inc ecx call converthex jmp .hex .dec xor ebx,ebx mov bl,[CheatSrcByteSize] and eax,[SrcMask+ebx*4] call convertnum .hex add dword[CheatSearchXPos],42 GUIOuttextwin2 13,[CheatSearchXPos],[CheatSearchYPos],GUICSrcTextQ add dword[CheatSearchXPos],60 cmp byte[GUICSrcTextS+12],0 je near .noprevious mov esi,GUICSrcTextQ mov ebx,dword[vidbuffer] add ebx,129600 add ebx,[CSCurEntry] mov eax,[ebx] cmp byte[CheatSrcByteBase],0 je .decb xor ecx,ecx mov cl,[CheatSrcByteSize] inc ecx call converthex jmp .hexb .decb xor ebx,ebx mov bl,[CheatSrcByteSize] and eax,[SrcMask+ebx*4] call convertnum .hexb GUIOuttextwin2 13,[CheatSearchXPos],[CheatSearchYPos],GUICSrcTextQ .noprevious sub dword[CheatSearchXPos],102 add dword[CheatSearchYPos],7 ; Search for next entry .nextentry inc dword[CSCurEntry] mov eax,[CSCurEntry] mov ecx,eax and ecx,7 mov edx,1 shr eax,3 shl edx,cl add eax,dword[vidbuffer] add eax,129600+65536*2 test byte[eax],dl jz .nextentry dec dword[ccheatnleft] jnz near .nextdisplay mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 mov dword[CheatSearchYPos],23 mov dword[CheatSearchXPos],11 mov eax,[CSStartEntry] mov [CSCurEntry],eax mov eax,dword[ccheatnleftb] mov dword[ccheatnleft],eax inc byte[CheatLooped] cmp byte[CheatLooped],2 jne near .nextdisplay .noentry ; win#,X,Y start, %4-List Loc, %5-List size, %6-Screen size, %7-Bar Size DrawSlideBarWin 13,173,28,[GUIcurrentchtsrcviewloc],[NumCheatSrc],12,73,GUICSStA cmp byte[GUICHold],11 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin 13,173,20,GUIIconDataUpArrow cmp byte[GUICHold],11 jne .noholda2 sub byte[GUIWincoladd],3 .noholda2 cmp byte[GUICHold],12 jne .noholdb add byte[GUIWincoladd],3 .noholdb GUIDisplayIconWin 13,173,101,GUIIconDataDownArrow cmp byte[GUICHold],12 jne .noholdb2 sub byte[GUIWincoladd],3 .noholdb2 mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],211 .zero3 DrawGUIButton 13,70,140,130,152,GUICSrcTextR,54,0,1 DrawGUIButton 13,140,140,180,152,GUICSrcTextU,55,0,1 ret Cheatmodeadd: mov dword[GUIwinsizex+13*4],170 mov dword[GUIwinsizey+13*4],165 call DrawWindowSearch mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],211 .zero3 TextWindowMacro 13,5,20,GUICSrcTextV TextWindowMacro 13,5,45,GUICSrcTextW TextWindowMacro 13,5,70,GUICSrcTextX TextWindowMacro 13,22,143,GUICSrcTextY mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[CheatUpperByteOnly],1 jne .nocheck mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck GUIDisplayIconWin 13,8,139,[GUITemp] DrawGUIWinBox 13,10,30,80,37,167 DrawGUIWinBox 13,10,55,126,62,167 DrawGUIWinBox 13,10,80,80,120,167 ; Draw border mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone2 mov dword[GUIWincol],148+5 .noone2 cmp byte[cwindrawn],0 jne .nozero2 mov dword[GUIWincol],148 .nozero2 mov dl,[GUIWincol] DrawGUIWinBox 13,10,29,80,29,dl ; 0,-1,0,-1 DrawGUIWinBox 13,10,54,126,54,dl ; 0,-1,0,-1 DrawGUIWinBox 13,10,79,80,79,dl ; 0,-1,0,-1 mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 13,9,30,8,37,dl ; -1,0,-2,0 DrawGUIWinBox 13,9,55,8,62,dl ; -1,0,-2,0 DrawGUIWinBox 13,9,80,8,120,dl ; -1,0,-2,0 mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 13,10,38,80,38,dl ; 0,1,0,1 DrawGUIWinBox 13,10,63,126,63,dl ; 0,1,0,1 DrawGUIWinBox 13,10,121,80,121,dl ; 0,1,0,1 mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 13,82,30,81,37,dl ; 2,0,1,0 DrawGUIWinBox 13,128,55,127,62,dl ; 2,0,1,0 DrawGUIWinBox 13,82,80,81,120,dl ; 2,0,1,0 DrawGUIButton 13,60,155,120,167,GUICSrcTextR,56,0,1 DrawGUIButton 13,130,155,160,167,GUICSrcTextU,57,0,1 TextWindowMacro 13,5,130,GUICSrcTextT xor eax,eax mov al,[CheatSrcByteSize] mov eax,[SrcMask+eax*4] mov esi,GUICSrcTextQ cmp byte[CheatSrcByteBase],1 je .hex call convertnum jmp .dec .hex xor ecx,ecx mov cl,[CheatSrcByteSize] inc ecx call converthex .dec TextWindowMacro 13,71,130,GUICSrcTextQ cmp byte[CurCStextpos],0 jne near .nofirstbox test byte[GUICCFlash],8 jnz .nound .nofirstbox mov esi,CSInputDisplay call CSRemoveFlash .nound mov byte[GUItextcolor],223 cmp byte[CSOverValue],1 jne .notdark mov byte[GUItextcolor],202 .notdark GUIOuttextwin2 13,13,32,CSInputDisplay mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 cmp byte[CSOverValue],1 jne .notdark2 mov byte[GUItextcolor],207 .notdark2 GUIOuttextwin2 13,12,31,CSInputDisplay mov esi,CSInputDisplay call CSAddFlash cmp byte[CurCStextpos],1 jne .noundb test byte[GUICCFlash],8 jnz .noundb mov esi,CSDescDisplay call CSAddFlash .noundb mov byte[GUItextcolor],223 GUIOuttextwin2 13,13,57,CSDescDisplay mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4b mov byte[GUItextcolor],222 .zero4b GUIOuttextwin2 13,12,56,CSDescDisplay mov esi,CSDescDisplay call CSRemoveFlash cmp byte[CSOverValue],1 je near .nodisplay cmp byte[CSInputDisplay],'_' je near .nodisplay mov dword[CheatSearchYPos],83 mov eax,[curentryval] mov [curaddrvalcs],eax mov eax,[CSCurValue] mov [curvaluecs],eax xor ecx,ecx mov cl,[CheatSrcByteSize] inc cl cmp byte[CheatUpperByteOnly],0 je .cspardisploop mov cl,1 .cspardispagain cmp dword[curvaluecs],0FFh jbe .cspardisploop shr dword[curvaluecs],8 inc dword[curaddrvalcs] jmp .cspardispagain .cspardisploop push ecx mov esi,GUICSrcTextQ mov ecx,3 mov eax,[curaddrvalcs] add eax,7E0000h call converthex mov esi,GUICSrcTextQ+6 mov ecx,1 mov al,[curvaluecs] call converthex shr dword[curvaluecs],8 mov byte[GUItextcolor],223 inc dword[CheatSearchYPos] GUIOuttextwin2 13,13,[CheatSearchYPos],GUICSrcTextQ dec dword[CheatSearchYPos] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4c mov byte[GUItextcolor],222 .zero4c GUIOuttextwin2 13,12,[CheatSearchYPos],GUICSrcTextQ add dword[CheatSearchYPos],10 inc dword[curaddrvalcs] pop ecx dec ecx jnz near .cspardisploop .nodisplay ret SECTION .bss CheatWinMode resb 1 CheatSearchStatus resb 1 CheatCompareValue resd 1 NumCheatSrc resd 1 GUIcurrentchtsrcviewloc resd 1 GUIcurrentchtsrccursloc resd 1 CSStartEntry resd 1 CSCurEntry resd 1 CheatSearchXPos resd 1 CheatSearchYPos resd 1 CheatLooped resd 1 ccheatnleftb resd 1 CurCStextpos resd 1 SECTION .data SrcMask dd 0FFh,0FFFFh,0FFFFFFh,0FFFFFFFFh CSInputDisplay db '_',0,' ',0 CSDescDisplay db ' ',0,0 SECTION .bss curentryval resd 1 curentryleft resd 1 curaddrvalcs resd 1 curvaluecs resd 1 GUICSStA resd 3 SECTION .data GUISrcText1 db 'CHEAT SEARCH',0 GUISrcText2 db 'HAS NOT BEEN',0 GUISrcText3 db 'IMPLEMENTED YET',0 GUICSrcText1 db 'SELECT SIZE AND FORMAT:',0 GUICSrcText2 db '1 BYTE [0..255]',0 GUICSrcText3 db '2 BYTES [0..65535]',0 GUICSrcText4 db '3 BYTES [0..16777215]',0 GUICSrcText5 db '4 BYTES [0..4294967295]',0 GUICSrcText6 db 'DEC (BASE 10)',0 GUICSrcText7 db 'HEX (BASE 16)',0 GUICSrcText8 db 'SELECT SEARCH TYPE:',0 GUICSrcText9 db 'EXACT VALUE SEARCH',0 GUICSrcTextA db 'COMPARATIVE SEARCH',0 GUICSrcTextB db 'START',0 GUICSrcTextD db 'ENTER VALUE:',0 GUICSrcTextE db 'SELECT COMPARISON:',0 GUICSrcTextF db 'NEW VALUE IS > OLD VALUE',0 GUICSrcTextG db 'NEW VALUE IS < OLD VALUE',0 GUICSrcTextH db 'NEW VALUE IS = OLD VALUE',0 GUICSrcTextHb db 'NEW VALUE IS != OLD VALUE',0 GUICSrcTextI db 'SEARCH',0 GUICSrcTextJ db 'RESTART',0 GUICSrcTextK db '# OF RESULTS:',0 GUICSrcTextL db 'VIEW',0 GUICSrcTextQ db ' ',0 GUICSrcTextM db 'NOW RETURN TO YOUR GAME',0 GUICSrcTextN db 'AND COME BACK WHEN ',0 GUICSrcTextO db 'THE NEXT SEARCH',0 GUICSrcTextP db 'SHOULD BE PROCESSED',0 GUICSrcTextR db 'RETURN',0 GUICSrcTextS db 'ADDR VALUE PVALUE',0 GUICSrcTextT db 'MAX VALUE:',0 GUICSrcTextU db 'ADD',0 GUICSrcTextV db 'ENTER NEW VALUE:',0 GUICSrcTextW db 'ENTER CHEAT DESCRIPTION:',0 GUICSrcTextX db 'PAR CODE EQUIVALENT:',0 GUICSrcTextY db 'USE ONLY UPPER BYTE',0 SECTION .bss CCursLoc resd 1 CViewLoc resd 1 NViewLoc resd 1 TViewLoc resd 1 SECTION .text DisplayNetOptns: ret SECTION .bss NEWSYM GUINCStA, resd 3 FileNameMod resb 512 CurCStringPos resd 1 SECTION .text DisplayGameOptns: ; Key redefinition for : ; Sound Channels 0 .. 7, Save/Select/Load States, Fast Forward ; State Selection 0 .. 9 ; Exit, Load, Reset, BG Disables, Reset, Windowing, New Gfx, OffsetMode GUIDrawWindowBox 9,GUIGameDisp ; Draw Shadows mov al,[GUIWincol] mov [GUIGameOptnsColA],al mov byte[GUIGameOptnsColB],202 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUIGameOptnsColB],196 .zero3 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,6,16,GUIGameOptnsText1 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov byte[GUIGameOptnsText2+2],'1' GUIOuttextwin2 9,9,25,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'2' GUIOuttextwin2 9,9+45,25,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'3' GUIOuttextwin2 9,9+90,25,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'4' GUIOuttextwin2 9,9+135,25,GUIGameOptnsText2 GUIOuttextwin2 9,9+180,25,GUIGameOptnsText2a mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,6,34,GUIGameOptnsText3 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov byte[GUIGameOptnsText4+2],'1' GUIOuttextwin2 9,9,43,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'2' GUIOuttextwin2 9,9+45,43,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'3' GUIOuttextwin2 9,9+45*2,43,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'4' GUIOuttextwin2 9,9+45*3,43,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'5' GUIOuttextwin2 9,9,52,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'6' GUIOuttextwin2 9,9+45,52,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'7' GUIOuttextwin2 9,9+45*2,52,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'8' GUIOuttextwin2 9,9+45*3,52,GUIGameOptnsText4 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,6,61,GUIGameOptnsText5 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al GUIOuttextwin2 9,9,72,GUIGameOptnsText6 GUIOuttextwin2 9,9+52,72,GUIGameOptnsText7 GUIOuttextwin2 9,9+109,72,GUIGameOptnsText8 GUIOuttextwin2 9,9+160,72,GUIGameOptnsText9 GUIOuttextwin2 9,9,82,GUIGameOptnsTextA GUIOuttextwin2 9,9+52,82,GUIGameOptnsTextB GUIOuttextwin2 9,137,82,GUIGameOptnsTextC mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,6,93,GUIGameOptnsTextD mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al GUIOuttextwin2 9,9,102,GUIGameOptnsTextE GUIOuttextwin2 9,9,112,GUIGameOptnsTextF GUIOuttextwin2 9,9,122,GUIGameOptnsTextG GUIOuttextwin2 9,9,132,GUIGameOptnsTextH GUIOuttextwin2 9,9,142,GUIGameOptnsTextI GUIOuttextwin2 9,9,152,GUIGameOptnsTextJ ; GUIOuttextwin2 9,9,162,GUIGameOptnsTextK GUIOuttextwin2 9,9,172,GUIGameOptnsTextL ; GUIOuttextwin2 9,109,102,GUIGameOptnsTextEa ; GUIOuttextwin2 9,109,112,GUIGameOptnsTextFa GUIOuttextwin2 9,109,122,GUIGameOptnsTextGa GUIOuttextwin2 9,109,132,GUIGameOptnsTextHa GUIOuttextwin2 9,109,142,GUIGameOptnsTextIa GUIOuttextwin2 9,109,152,GUIGameOptnsTextJa GUIOuttextwin2 9,109,162,GUIGameOptnsTextKa GUIOuttextwin2 9,109,172,GUIGameOptnsTextLa mov byte[GUIGameOptnsColA],163 mov byte[GUIGameOptnsColB],217 cmp byte[GUIWincoladd],0 je .zero mov byte[GUIGameOptnsColA],164 mov byte[GUIGameOptnsColB],211 .zero mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,5,15,GUIGameOptnsText1 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov byte[GUIGameOptnsText2+2],'1' GUIOuttextwin2 9,8,24,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'2' GUIOuttextwin2 9,8+45,24,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'3' GUIOuttextwin2 9,8+90,24,GUIGameOptnsText2 mov byte[GUIGameOptnsText2+2],'4' GUIOuttextwin2 9,8+135,24,GUIGameOptnsText2 GUIOuttextwin2 9,8+180,24,GUIGameOptnsText2a mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,5,33,GUIGameOptnsText3 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov byte[GUIGameOptnsText4+2],'1' GUIOuttextwin2 9,8,42,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'2' GUIOuttextwin2 9,8+45,42,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'3' GUIOuttextwin2 9,8+45*2,42,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'4' GUIOuttextwin2 9,8+45*3,42,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'5' GUIOuttextwin2 9,8,51,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'6' GUIOuttextwin2 9,8+45,51,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'7' GUIOuttextwin2 9,8+45*2,51,GUIGameOptnsText4 mov byte[GUIGameOptnsText4+2],'8' GUIOuttextwin2 9,8+45*3,51,GUIGameOptnsText4 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,5,61,GUIGameOptnsText5 mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al GUIOuttextwin2 9,8,71,GUIGameOptnsText6 GUIOuttextwin2 9,8+52,71,GUIGameOptnsText7 GUIOuttextwin2 9,8+109,71,GUIGameOptnsText8 GUIOuttextwin2 9,8+160,71,GUIGameOptnsText9 GUIOuttextwin2 9,8,81,GUIGameOptnsTextA GUIOuttextwin2 9,8+52,81,GUIGameOptnsTextB GUIOuttextwin2 9,136,81,GUIGameOptnsTextC mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 9,5,92,GUIGameOptnsTextD mov al,byte[GUIGameOptnsColB] mov byte[GUItextcolor],al GUIOuttextwin2 9,8,101,GUIGameOptnsTextE GUIOuttextwin2 9,8,111,GUIGameOptnsTextF GUIOuttextwin2 9,8,121,GUIGameOptnsTextG GUIOuttextwin2 9,8,131,GUIGameOptnsTextH GUIOuttextwin2 9,8,141,GUIGameOptnsTextI GUIOuttextwin2 9,8,151,GUIGameOptnsTextJ ; GUIOuttextwin2 9,8,161,GUIGameOptnsTextK GUIOuttextwin2 9,8,171,GUIGameOptnsTextL ; GUIOuttextwin2 9,108,101,GUIGameOptnsTextEa ; GUIOuttextwin2 9,108,111,GUIGameOptnsTextFa GUIOuttextwin2 9,108,121,GUIGameOptnsTextGa GUIOuttextwin2 9,108,131,GUIGameOptnsTextHa GUIOuttextwin2 9,108,141,GUIGameOptnsTextIa GUIOuttextwin2 9,108,151,GUIGameOptnsTextJa GUIOuttextwin2 9,108,161,GUIGameOptnsTextKa GUIOuttextwin2 9,108,171,GUIGameOptnsTextLa ;Draw Borders DGOptnsBorderBox 9,26,22 DGOptnsBorderBox 9,71,22 DGOptnsBorderBox 9,116,22 DGOptnsBorderBox 9,161,22 DGOptnsBorderBox 9,206,22 DGOptnsBorderBox 9,26,40 DGOptnsBorderBox 9,71,40 DGOptnsBorderBox 9,116,40 DGOptnsBorderBox 9,161,40 DGOptnsBorderBox 9,26,49 DGOptnsBorderBox 9,71,49 DGOptnsBorderBox 9,116,49 DGOptnsBorderBox 9,161,49 DGOptnsBorderBox 9,32,69 DGOptnsBorderBox 9,90,69 DGOptnsBorderBox 9,141,69 DGOptnsBorderBox 9,199,69 DGOptnsBorderBox 9,32,79 DGOptnsBorderBox 9,109,79 DGOptnsBorderBox 9,185,79 DGOptnsBorderBox 9,77,99 DGOptnsBorderBox 9,77,109 DGOptnsBorderBox 9,77,119 DGOptnsBorderBox 9,77,129 DGOptnsBorderBox 9,77,139 DGOptnsBorderBox 9,77,149 ; DGOptnsBorderBox 9,77,159 DGOptnsBorderBox 9,77,169 ; DGOptnsBorderBox 9,177,99 ; DGOptnsBorderBox 9,177,109 DGOptnsBorderBox 9,177,119 DGOptnsBorderBox 9,177,129 DGOptnsBorderBox 9,177,139 DGOptnsBorderBox 9,177,149 DGOptnsBorderBox 9,177,159 DGOptnsBorderBox 9,177,169 ; Draw black boxes DGOptnsDrawBox 27,23,[KeyBGDisble0] DGOptnsDrawBox 27+45,23,[KeyBGDisble1] DGOptnsDrawBox 27+45*2,23,[KeyBGDisble2] DGOptnsDrawBox 27+45*3,23,[KeyBGDisble3] DGOptnsDrawBox 27+45*4,23,[KeySprDisble] DGOptnsDrawBox 27,41,[KeyDisableSC0] DGOptnsDrawBox 27+45,41,[KeyDisableSC1] DGOptnsDrawBox 27+45*2,41,[KeyDisableSC2] DGOptnsDrawBox 27+45*3,41,[KeyDisableSC3] DGOptnsDrawBox 27,50,[KeyDisableSC4] DGOptnsDrawBox 27+45,50,[KeyDisableSC5] DGOptnsDrawBox 27+45*2,50,[KeyDisableSC6] DGOptnsDrawBox 27+45*3,50,[KeyDisableSC7] DGOptnsDrawBox 8+25,70,[KeyQuickLoad] DGOptnsDrawBox 8+57+26,70,[KeyQuickRst] DGOptnsDrawBox 8+114+20,70,[KeyQuickExit] DGOptnsDrawBox 8+114+78,70,[KeyQuickClock] DGOptnsDrawBox 8+25,80,[KeyQuickChat] DGOptnsDrawBox 8+57+45,80,[KeyQuickSnapShot] DGOptnsDrawBox 8+108+70,80,[KeyQuickSaveSPC] DGOptnsDrawBox 78,100,[KeyUsePlayer1234] DGOptnsDrawBox 78,110,[KeyResetAll] DGOptnsDrawBox 78,120,[KeyExtraEnab] DGOptnsDrawBox 78,130,[KeyNewGfxSwt] DGOptnsDrawBox 78,140,[KeyWinDisble] DGOptnsDrawBox 78,150,[KeyOffsetMSw] ; DGOptnsDrawBox 78,160,[KeySlowDown] DGOptnsDrawBox 78,170,[EMUPauseKey] ; DGOptnsDrawBox 178,100,[KeyRewind] ; DGOptnsDrawBox 178,110,[KeyFastFrwrd] DGOptnsDrawBox 178,120,[KeyVolUp] DGOptnsDrawBox 178,130,[KeyVolDown] DGOptnsDrawBox 178,140,[KeyFRateUp] DGOptnsDrawBox 178,150,[KeyFRateDown] DGOptnsDrawBox 178,160,[KeyDisplayFPS] DGOptnsDrawBox 178,170,[INCRFrameKey] ret SECTION .bss GUIGameOptnsColA resb 1 GUIGameOptnsColB resb 1 GUIGameDisplayKy resd 1 SECTION .data GUIGameOptnsText1 db 'BG DISABLES :',0 GUIGameOptnsText2 db 'BG#',0 GUIGameOptnsText2a db 'OBJ ',0 GUIGameOptnsText3 db 'SOUND DISABLES :',0 GUIGameOptnsText4 db 'CH#',0 GUIGameOptnsText5 db 'QUICK KEYS :',0 GUIGameOptnsText6 db 'LOAD',0 GUIGameOptnsText7 db 'RESET',0 GUIGameOptnsText8 db 'EXIT',0 GUIGameOptnsText9 db 'CLOCK',0 GUIGameOptnsTextA db 'CHAT',0 GUIGameOptnsTextB db 'SNAPSHOT',0 GUIGameOptnsTextC db 'SAVE SPC',0 GUIGameOptnsTextD db 'MISC TOGGLES :',0 GUIGameOptnsTextE db 'USE PL12/34',0 ;GUIGameOptnsTextEa db 'FREE SPACE',0 GUIGameOptnsTextF db 'CLRSWITCHES',0 ;GUIGameOptnsTextFa db 'FASTFWD KEY',0 GUIGameOptnsTextG db 'EXTRADEVICE',0 GUIGameOptnsTextGa db '+VOL',0 GUIGameOptnsTextH db 'NEW GFX ENG',0 GUIGameOptnsTextHa db '-VOL',0 GUIGameOptnsTextI db 'BG WINDOW',0 GUIGameOptnsTextIa db '+FRAME RATE',0 GUIGameOptnsTextJ db 'OFFSET MODE',0 GUIGameOptnsTextJa db '-FRAME RATE',0 ;GUIGameOptnsTextK db 'SLOWDWN KEY',0 GUIGameOptnsTextKa db 'DISPLAY FPS',0 GUIGameOptnsTextL db 'PAUSE GAME',0 GUIGameOptnsTextLa db 'INCR FRAME',0 SECTION .text DisplayGUIOptns: %ifdef __WIN32__ mov dword[GUIwinsizey+10*4],192 %endif GUIDrawWindowBox 10,GUIGUIDisp push eax cmp byte[CurPalSelect],1 je .yespal2b cmp byte[CurPalSelect],2 je .yespal3b mov al,[GUIRAdd] mov [TRVal2],al mov al,[GUIGAdd] mov [TGVal2],al mov al,[GUIBAdd] mov [TBVal2],al jmp .nopal1b .yespal2b mov al,[GUITRAdd] mov [TRVal2],al mov al,[GUITGAdd] mov [TGVal2],al mov al,[GUITBAdd] mov [TBVal2],al jmp .nopal1b .yespal3b mov al,[GUIWRAdd] mov [TRVal2],al mov al,[GUIWGAdd] mov [TGVal2],al mov al,[GUIWBAdd] mov [TBVal2],al .nopal1b pop eax mov eax,dword[GUIwinposx+10*4] mov ebx,dword[GUIwinposy+10*4] mov ecx,eax add eax,25 add ecx,25+32*4 add ebx,124 xor edx,edx mov dl,215 sub dl,[GUIWincoladd] DrawGUILine add ebx,11 DrawGUILine add ebx,11 DrawGUILine inc ecx mov ebx,dword[GUIwinposy+10*4] inc eax add ebx,125 sub dl,13 DrawGUILine add ebx,11 DrawGUILine add ebx,11 DrawGUILine xor eax,eax mov al,[TRVal2] shl eax,2 mov dword[GUITemp],22 add [GUITemp],eax GUIDisplayIconWin 10,[GUITemp],120,GUIIconDataSlideBar xor eax,eax mov al,[TGVal2] shl eax,2 mov dword[GUITemp],22 add [GUITemp],eax GUIDisplayIconWin 10,[GUITemp],132,GUIIconDataSlideBar xor eax,eax mov al,[TBVal2] shl eax,2 mov dword[GUITemp],22 add [GUITemp],eax GUIDisplayIconWin 10,[GUITemp],144,GUIIconDataSlideBar mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIEnableTransp],1 jne .nocheckt mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckt GUIDisplayIconWin 10,124,23,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[FilteredGUI],1 jne .nocheckfg mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckfg GUIDisplayIconWin 10,124,43,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[mousewrap],1 jne .nocheck mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck GUIDisplayIconWin 10,12,23,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[mouseshad],1 jne .nocheck2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck2 GUIDisplayIconWin 10,12,33,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[lastcursres],1 jne .nocheck3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck3 GUIDisplayIconWin 10,12,43,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[resetposn],1 je .nocheck4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck4 GUIDisplayIconWin 10,12,53,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIClick],1 jne .nocheck5 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck5 GUIDisplayIconWin 10,12,63,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[JoyPad1Move],1 jne .nocheck6 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck6 GUIDisplayIconWin 10,12,73,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIEffect],1 jne .nocheck6b mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck6b GUIDisplayIconWin 10,12,83,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIEffect],4 jne .nocheck7 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck7 GUIDisplayIconWin 10,124,83,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIEffect],2 jne .nocheck7b mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck7b GUIDisplayIconWin 10,12,93,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[GUIEffect],3 jne .nocheck8 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck8 GUIDisplayIconWin 10,124,93,[GUITemp] %ifdef __WIN32__ mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[MouseWheel],1 jne .nocheck9 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck9 GUIDisplayIconWin 10,124,33,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[AlwaysOnTop],1 jne .nocheck10 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck10 GUIDisplayIconWin 10,12,168,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SaveMainWindowPos],1 jne .nocheck11 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck11 GUIDisplayIconWin 10,12,178,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[AllowMultipleInst],1 jne .nocheck12 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck12 GUIDisplayIconWin 10,12,188,[GUITemp] %endif mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 10,6,111,GUIGUIOptnsText1 GUIOuttextwin2 10,6,16,GUIGUIOptnsText5 %ifdef __WIN32__ GUIOuttextwin2 10,6,160,GUIGUIOptnsTextD mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[TrapMouseCursor],1 jne .nocheck13 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheck13 GUIDisplayIconWin 10,124,53,[GUITemp] %endif mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],164 .zero GUIOuttextwin2 10,5,110,GUIGUIOptnsText1 GUIOuttextwin2 10,5,15,GUIGUIOptnsText5 %ifdef __WIN32__ GUIOuttextwin2 10,5,160,GUIGUIOptnsTextD %endif mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],211 .zero3 sub byte[GUItextcolor],15 GUIOuttextwin2u 10,26,28,GUIGUIOptnsText2,0 GUIOuttextwin2u 10,26,38,GUIGUIOptnsText3,6 GUIOuttextwin2u 10,26,48,GUIGUIOptnsText4,0 GUIOuttextwin2u 10,26,58,GUIGUIOptnsText7,5 GUIOuttextwin2u 10,26,68,GUIGUIOptnsText8,0 GUIOuttextwin2u 10,26,78,GUIGUIOptnsTextA,0 GUIOuttextwin2 10,60,111,GUIGUIOptnsTextG GUIOuttextwin2 10,100,111,GUIGUIOptnsTextH GUIOuttextwin2 10,147,111,GUIGUIOptnsTextI GUIOuttextwin2u 10,26,88,GUIGUIOptnsTextB,1 GUIOuttextwin2u 10,138,88,GUIGUIOptnsTextBb,2 GUIOuttextwin2u 10,26,98,GUIGUIOptnsTextC,3 GUIOuttextwin2u 10,138,98,GUIGUIOptnsTextCb,13 GUIOuttextwin2u 10,138,28,GUIGUIOptnsTextJ,0 GUIOuttextwin2u 10,138,48,GUIGUIOptnsTextM,0 %ifdef __WIN32__ GUIOuttextwin2u 10,26,173,GUIGUIOptnsTextE,0 GUIOuttextwin2u 10,26,183,GUIGUIOptnsTextF,2 GUIOuttextwin2u 10,138,38,GUIGUIOptnsTextK,1 GUIOuttextwin2u 10,26,193,GUIGUIOptnsTextL,1 GUIOuttextwin2u 10,138,58,GUIGUIOptnsTextN,3 %endif mov byte[GUIGUIOptnsText6],'R' GUIOuttextwin2 10,16,123,GUIGUIOptnsText6 mov byte[GUIGUIOptnsText6],'G' GUIOuttextwin2 10,16,135,GUIGUIOptnsText6 mov byte[GUIGUIOptnsText6],'B' GUIOuttextwin2 10,16,147,GUIGUIOptnsText6 add byte[GUItextcolor],15 GUIOuttextwin2 10,25,27,GUIGUIOptnsText2 GUIOuttextwin2 10,25,37,GUIGUIOptnsText3 GUIOuttextwin2 10,25,47,GUIGUIOptnsText4 GUIOuttextwin2 10,25,57,GUIGUIOptnsText7 GUIOuttextwin2 10,25,67,GUIGUIOptnsText8 GUIOuttextwin2 10,25,77,GUIGUIOptnsTextA GUIOuttextwin2 10,59,110,GUIGUIOptnsTextG GUIOuttextwin2 10,99,110,GUIGUIOptnsTextH GUIOuttextwin2 10,146,110,GUIGUIOptnsTextI GUIOuttextwin2 10,25,87,GUIGUIOptnsTextB GUIOuttextwin2 10,137,87,GUIGUIOptnsTextBb GUIOuttextwin2 10,25,97,GUIGUIOptnsTextC GUIOuttextwin2 10,137,97,GUIGUIOptnsTextCb GUIOuttextwin2 10,137,27,GUIGUIOptnsTextJ GUIOuttextwin2 10,137,47,GUIGUIOptnsTextM %ifdef __WIN32__ GUIOuttextwin2 10,25,172,GUIGUIOptnsTextE GUIOuttextwin2 10,25,182,GUIGUIOptnsTextF GUIOuttextwin2 10,137,37,GUIGUIOptnsTextK GUIOuttextwin2 10,25,192,GUIGUIOptnsTextL GUIOuttextwin2 10,137,57,GUIGUIOptnsTextN %endif mov byte[GUIGUIOptnsText6],'R' GUIOuttextwin2 10,15,122,GUIGUIOptnsText6 mov byte[GUIGUIOptnsText6],'G' GUIOuttextwin2 10,15,134,GUIGUIOptnsText6 mov byte[GUIGUIOptnsText6],'B' GUIOuttextwin2 10,15,146,GUIGUIOptnsText6 GUIDisplayButtonHole 10,48,108,byte[CurPalSelect],0 GUIDisplayButtonHole 10,88,108,byte[CurPalSelect],1 GUIDisplayButtonHole 10,135,108,byte[CurPalSelect],2 mov dword[GUIGUIOptnsText9],0 mov esi,GUIGUIOptnsText9+2 xor eax,eax mov al,[TRVal2] call .processnum GUIOuttextwin2 10,160,123,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 GUIOuttextwin2 10,159,122,[GUITemp] mov dword[GUIGUIOptnsText9],0 mov esi,GUIGUIOptnsText9+2 xor eax,eax mov al,[TGVal2] call .processnum GUIOuttextwin2 10,160,135,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero6 mov byte[GUItextcolor],222 .zero6 GUIOuttextwin2 10,159,134,[GUITemp] mov dword[GUIGUIOptnsText9],0 mov esi,GUIGUIOptnsText9+2 xor eax,eax mov al,[TBVal2] call .processnum GUIOuttextwin2 10,160,147,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero7 mov byte[GUItextcolor],222 .zero7 GUIOuttextwin2 10,159,146,[GUITemp] ret .processnum mov ebx,10 div bl add ah,48 mov [esi],ah cmp al,0 je .nomore dec esi xor ah,ah div bl add ah,48 mov [esi],ah .nomore mov [GUITemp],esi mov byte[GUItextcolor],223 ret ;mousewrap 0 ; 0 = mouse boundries, 1 = mouse wrap ;mouseshad 1 ; 0 = no mouse shadow, 1 = mouse shadow ;lastcursres 0 ; 0 = go to load, 1 = go to previous menu, 2 = no menu ;resetposn 1 ; 0 = no window reset, 1 = window reset SECTION .data GUIGUIOptnsText1 db 'COLOR:',0 GUIGUIOptnsText2 db 'MOUSE WRAP',0 GUIGUIOptnsText3 db 'MOUSE SHADOW',0 GUIGUIOptnsText4 db 'KEEP MENU POSITN',0 GUIGUIOptnsText5 db 'GUI SWITCHES :',0 GUIGUIOptnsText6 db '@',0 GUIGUIOptnsText7 db 'SAVE WIN POSITNS',0 GUIGUIOptnsText8 db 'CLICK ENTERS GUI',0 GUIGUIOptnsText9 dd 0 GUIGUIOptnsTextA db 'USE JOYPAD1',0 GUIGUIOptnsTextB dd 'SNOW EFFECT',0 GUIGUIOptnsTextBb dd 'BURNING EFFECT',0 GUIGUIOptnsTextC dd 'WATER EFFECT A',0 GUIGUIOptnsTextCb dd 'WATER EFFECT B',0 GUIGUIOptnsTextD dd 'MAIN WINDOW OPTIONS :',0 GUIGUIOptnsTextE dd 'ALWAYS ON TOP',0 GUIGUIOptnsTextF db 'SAVE MAIN WINDOW POSITION',0 GUIGUIOptnsTextG db 'BACK',0 GUIGUIOptnsTextH db 'TITLE',0 GUIGUIOptnsTextI db 'WIN',0 GUIGUIOptnsTextJ db 'TRANSPARENT MSGS',0 GUIGUIOptnsTextK db 'WHEEL MOUSE',0 GUIGUIOptnsTextL db 'ALLOW MULTIPLE INSTANCES',0 GUIGUIOptnsTextM db 'FILTERED GUI',0 GUIGUIOptnsTextN db 'TRAP MOUSE CURSOR',0 SECTION .text DisplayGUIAbout: ;This will attach compile date onto the end of GUIGUIAboutText1 pushad EXTSYM VERSION_STR, placedate mov eax,GUIGUIAboutText1 mov [VERSION_STR],eax call placedate popad GUIDrawWindowBox 11,GUIAboutDisp mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUItextcolor],211 .zero3 DrawGUIButton 11,90,30,175,40,GUIGUIAboutText8,65,0,0 sub byte[GUItextcolor],15 GUIOuttextwin2 11,6,16,GUIGUIAboutText1 GUIOuttextwin2 11,6,26,GUIGUIAboutText7 GUIOuttextwin2 11,6,46,GUIGUIAboutText3 GUIOuttextwin2 11,6,56,GUIGUIAboutText4 GUIOuttextwin2 11,6,66,GUIGUIAboutText6c GUIOuttextwin2 11,6,86,GUIGUIAboutText6 GUIOuttextwin2 11,6,96,GUIGUIAboutText6b GUIOuttextwin2 11,6,106,GUIGUIAboutText6d GUIOuttextwin2 11,6,116,GUIGUIAboutText6e GUIOuttextwin2 11,6,131,GUIGUIAboutTextA GUIOuttextwin2 11,6,141,GUIGUIAboutTextB GUIOuttextwin2 11,6,151,GUIGUIAboutTextC GUIOuttextwin2 11,6,161,GUIGUIAboutTextD GUIOuttextwin2 11,6,171,GUIGUIAboutTextE GUIOuttextwin2 11,6,181,GUIGUIAboutTextF GUIOuttextwin2 11,6,191,GUIGUIAboutTextG add byte[GUItextcolor],15 GUIOuttextwin2 11,5,15,GUIGUIAboutText1 GUIOuttextwin2 11,5,25,GUIGUIAboutText7 GUIOuttextwin2 11,5,45,GUIGUIAboutText3 GUIOuttextwin2 11,5,55,GUIGUIAboutText4 GUIOuttextwin2 11,5,65,GUIGUIAboutText6c GUIOuttextwin2 11,5,85,GUIGUIAboutText6 GUIOuttextwin2 11,5,95,GUIGUIAboutText6b GUIOuttextwin2 11,5,105,GUIGUIAboutText6d GUIOuttextwin2 11,5,115,GUIGUIAboutText6e GUIOuttextwin2 11,5,130,GUIGUIAboutTextA GUIOuttextwin2 11,5,140,GUIGUIAboutTextB GUIOuttextwin2 11,5,150,GUIGUIAboutTextC GUIOuttextwin2 11,5,160,GUIGUIAboutTextD GUIOuttextwin2 11,5,170,GUIGUIAboutTextE GUIOuttextwin2 11,5,180,GUIGUIAboutTextF GUIOuttextwin2 11,5,190,GUIGUIAboutTextG mov al,[GUIWincol] mov byte[GUItextcolor],al GUIOuttextwin2 11,6,36,GUIGUIAboutText2 GUIOuttextwin2 11,6,76,GUIGUIAboutText5 mov byte[GUItextcolor],163 cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],164 .zero GUIOuttextwin2 11,5,35,GUIGUIAboutText2 GUIOuttextwin2 11,5,75,GUIGUIAboutText5 ret SECTION .data 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 GUIGUIAboutText6c db 0 GUIGUIAboutText5 db 'ASSISTANT CODERS :',0 GUIGUIAboutText6 db ' PHAROS STATMAT',0 GUIGUIAboutText6b db ' TEUF HPSOLO',0 GUIGUIAboutText6d db ' THEODDONE33 SILOH',0 GUIGUIAboutText6e db ' IPHER GRINVADER',0 %ifdef __MSDOS__ GUIGUIAboutText7 db 'DOS VERSION',0 %elifdef __WIN32__ GUIGUIAboutText7 db 'WIN VERSION',0 %elifdef __LINUX__ GUIGUIAboutText7 db 'SDL VERSION',0 %endif GUIGUIAboutText8 db 'WWW.ZSNES.COM',0 GUIGUIAboutTextA db 'ZSNES comes with ABSOLUTELY',0 GUIGUIAboutTextB db 'NO WARRANTY. This is free',0 GUIGUIAboutTextC db 'software, and you are welcome',0 GUIGUIAboutTextD db 'to redistribute it under',0 GUIGUIAboutTextE db 'certain conditions; please',0 %ifndef __LINUX__ GUIGUIAboutTextF db 'read ',39,'LICENSE.TXT',39,0 %else GUIGUIAboutTextF db 'read ',39,'LICENSE',39,0 %endif GUIGUIAboutTextG db 'thoroughly before doing so.',0 SECTION .text DisplayGUIMovies: ; Movie Record/Playback options GUIDrawWindowBox 15,GUIMovieDisp ; Display Window cmp byte[MovieRecordWinVal],0 je near .displayboxa cmp byte[GUIWincoladd],0 ; Overwrite Message Box je .zero4 mov byte[GUItextcolor],211 .zero4 sub byte[GUItextcolor],15 ; Shadows GUIOuttextwin2 15,9,16,GUIMovieTextX1 GUIOuttextwin2 15,9,26,GUIMovieTextX2 GUIOuttextwin2 15,9,41,GUIMovieTextX3 add byte[GUItextcolor],15 ; Text GUIOuttextwin2 15,8,15,GUIMovieTextX1 GUIOuttextwin2 15,8,25,GUIMovieTextX2 GUIOuttextwin2 15,8,40,GUIMovieTextX3 DrawGUIButton 15,17,55,59,66,GUIMovieTextX4,19,0,0 ; Yes/No Buttons DrawGUIButton 15,70,55,112,66,GUIMovieTextX5,20,0,0 ret .displayboxa ; Main Window DrawGUIButton 15,7,17,49,28,GUIMovieTextA1,16,0,0 ; Draw Buttons DrawGUIButton 15,7,33,49,44,GUIMovieTextA2,17,0,0 DrawGUIButton 15,7,49,49,60,GUIMovieTextA3,18,0,0 DrawGUIButton 15,7,65,49,76,GUIMovieTextA4,32,0,0 DrawGUIButton 15,7,81,109,92,GUIMovieTextA5,29,0,0 DrawGUIButton 15,7,97,109,108,GUIMovieTextA6,30,0,0 DrawGUIButton 15,7,113,109,124,GUIMovieTextA7,31,0,0 DrawGUIButton 15,61,65,155,76,GUIMovieTextA8,34,0,0 cmp byte[GUIWincoladd],0 ; Output Text je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2 15,61,16,GUIMovieTextB ; Save Select Shadow mov byte[GUIMovieTextB1],'0' GUIOuttextwin2 15,71,28,GUIMovieTextB1 mov byte[GUIMovieTextB1],'1' GUIOuttextwin2 15,91,28,GUIMovieTextB1 mov byte[GUIMovieTextB1],'2' GUIOuttextwin2 15,111,28,GUIMovieTextB1 mov byte[GUIMovieTextB1],'3' GUIOuttextwin2 15,131,28,GUIMovieTextB1 mov byte[GUIMovieTextB1],'4' GUIOuttextwin2 15,151,28,GUIMovieTextB1 mov byte[GUIMovieTextB1],'5' GUIOuttextwin2 15,71,43,GUIMovieTextB1 mov byte[GUIMovieTextB1],'6' GUIOuttextwin2 15,91,43,GUIMovieTextB1 mov byte[GUIMovieTextB1],'7' GUIOuttextwin2 15,111,43,GUIMovieTextB1 mov byte[GUIMovieTextB1],'8' GUIOuttextwin2 15,131,43,GUIMovieTextB1 mov byte[GUIMovieTextB1],'9' GUIOuttextwin2 15,151,43,GUIMovieTextB1 GUIOuttextwin2u 15,71,55,GUIMovieTextB2,0 GUIOuttextwin2 15,9,130,GUIMovieTextC ; "Start From" Section Shadow GUIOuttextwin2u 15,21,140,GUIMovieTextC1,0 GUIOuttextwin2u 15,56,140,GUIMovieTextC2,0 GUIOuttextwin2u 15,101,140,GUIMovieTextC3,0 GUIOuttextwin2u 15,21,150,GUIMovieTextC4,8 add byte[GUItextcolor],15 ; State Select Text GUIOuttextwin2 15,60,15,GUIMovieTextB mov byte[GUIMovieTextB1],'0' GUIOuttextwin2 15,70,27,GUIMovieTextB1 mov byte[GUIMovieTextB1],'1' GUIOuttextwin2 15,90,27,GUIMovieTextB1 mov byte[GUIMovieTextB1],'2' GUIOuttextwin2 15,110,27,GUIMovieTextB1 mov byte[GUIMovieTextB1],'3' GUIOuttextwin2 15,130,27,GUIMovieTextB1 mov byte[GUIMovieTextB1],'4' GUIOuttextwin2 15,150,27,GUIMovieTextB1 mov byte[GUIMovieTextB1],'5' GUIOuttextwin2 15,70,42,GUIMovieTextB1 mov byte[GUIMovieTextB1],'6' GUIOuttextwin2 15,90,42,GUIMovieTextB1 mov byte[GUIMovieTextB1],'7' GUIOuttextwin2 15,110,42,GUIMovieTextB1 mov byte[GUIMovieTextB1],'8' GUIOuttextwin2 15,130,42,GUIMovieTextB1 mov byte[GUIMovieTextB1],'9' GUIOuttextwin2 15,150,42,GUIMovieTextB1 GUIOuttextwin2 15,70,54,GUIMovieTextB2 GUIOuttextwin2 15,8,129,GUIMovieTextC ; "Start From" Section Text GUIOuttextwin2 15,20,139,GUIMovieTextC1 GUIOuttextwin2 15,55,139,GUIMovieTextC2 GUIOuttextwin2 15,100,139,GUIMovieTextC3 GUIOuttextwin2 15,20,149,GUIMovieTextC4 ; Status text is at end of window ; Display ratio buttons GUIDisplayButtonHole 15,60,25,byte[CMovieExt],'v' ; Select: GUIDisplayButtonHole 15,80,25,byte[CMovieExt],'1' GUIDisplayButtonHole 15,100,25,byte[CMovieExt],'2' GUIDisplayButtonHole 15,120,25,byte[CMovieExt],'3' GUIDisplayButtonHole 15,140,25,byte[CMovieExt],'4' GUIDisplayButtonHole 15,60,40,byte[CMovieExt],'5' GUIDisplayButtonHole 15,80,40,byte[CMovieExt],'6' GUIDisplayButtonHole 15,100,40,byte[CMovieExt],'7' GUIDisplayButtonHole 15,120,40,byte[CMovieExt],'8' GUIDisplayButtonHole 15,140,40,byte[CMovieExt],'9' GUIDisplayButtonHole 15,8,137,byte[MovieStartMethod],0 ; Start From: GUIDisplayButtonHole 15,43,137,byte[MovieStartMethod],1 GUIDisplayButtonHole 15,88,137,byte[MovieStartMethod],2 GUIDisplayButtonHole 15,8,147,byte[MovieStartMethod],3 DDrawBox 15,116,84,[KeyInsrtChap] ; Chapter Keyboard Shortcut Boxes DDrawBox 15,116,100,[KeyPrevChap] DDrawBox 15,116,116,[KeyNextChap] DGOptnsBorderBox 15,115,83 ; Borders to above boxes DGOptnsBorderBox 15,115,99 DGOptnsBorderBox 15,115,115 mov dword[GUITemp],GUIIconDataCheckBoxUC ; Checkbox cmp byte[MovieDisplayFrame],0 je .nocheckboxMDF mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckboxMDF GUIDisplayIconWin 15,60,50,[GUITemp] mov dword[GUIMovieTextZ+9],'INAC' ; Determine Status mov dword[GUIMovieTextZ+13],'TIVE' mov dword[GUIMovieTextZ+17],' ' cmp byte[MovieProcessing],1 jne .noplay mov dword[GUIMovieTextZ+9],'PLAY' mov dword[GUIMovieTextZ+13],'ING ' mov dword[GUIMovieTextZ+17],' ' .noplay cmp byte[MovieProcessing],2 jne .norec mov dword[GUIMovieTextZ+9],'RECO' mov dword[GUIMovieTextZ+13],'RDIN' mov dword[GUIMovieTextZ+17],'G ' .norec cmp byte[MovieProcessing],3 jne .nooldplay mov dword[GUIMovieTextZ+9],'OLD ' mov dword[GUIMovieTextZ+13],'PLAY' mov dword[GUIMovieTextZ+17],'ING ' .nooldplay mov al,[GUIWincol] ; Display Status Text mov [GUIGameOptnsColA],al mov byte[GUIGameOptnsColB],202 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUIGameOptnsColB],196 .zero3 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 15,6,162,GUIMovieTextZ ; Shadow mov byte[GUIGameOptnsColA],163 mov byte[GUIGameOptnsColB],217 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUIGameOptnsColA],164 mov byte[GUIGameOptnsColB],211 .zero5 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 15,5,161,GUIMovieTextZ ; Text ret SECTION .data GUIMovieTextA1 db 'PLAY',0 ; Buttons GUIMovieTextA2 db 'RECORD',0 GUIMovieTextA3 db 'STOP',0 GUIMovieTextA4 db 'APPEND',0 GUIMovieTextA5 db 'INSERT CHAPTER',0 GUIMovieTextA6 db 'PREVIOUS CHAPTER',0 GUIMovieTextA7 db 'NEXT CHAPTER',0 GUIMovieTextA8 db 'DUMP RAW MOVIE',0 GUIMovieTextB db 'SELECT :',0 GUIMovieTextB1 db ' ',0 GUIMovieTextB2 db 'DISPLAY FRAMES',0 GUIMovieTextC db 'START FROM:',0 GUIMovieTextC1 db 'NOW',0 GUIMovieTextC2 db 'POWER',0 GUIMovieTextC3 db 'RESET',0 GUIMovieTextC4 db 'POWER + SRAM CLEAR',0 GUIMovieTextX1 db 'WARNING : THIS MOVIE',0 ; Overwrite Window GUIMovieTextX2 db ' FILE ALREADY EXISTS',0 GUIMovieTextX3 db 'OKAY TO OVERWRITE?',0 GUIMovieTextX4 db 'YES',0 GUIMovieTextX5 db 'NO',0 GUIMovieTextZ db 'STATUS : ',0 NEWSYM CMovieExt, db 'v' SECTION .text ; Key types: Up, Down, Left, Right, A, B, X, Y, L, R (Press/Relase/P+R) ; Frame delays: 1 frame, 2, 3, 4, 5, 1 sec., 2, 3 ,4 ,5 %macro DrawBorderedBox 6 ; draw borders mov dl,[GUIWincol] DrawGUIWinBox %1,%2,%6,%4,%3,dl ; For some reason, this freezes if I ; replace %6 with %3-1 mov dl,[GUIWincol] add dl,1 DrawGUIWinBox %1,%2-1,%3,%2,%5,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox %1,%2,%5,%4,%5+1,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox %1,%4,%3,%4+1,%5,dl DrawGUIWinBox %1,%2,%3,%4,%5,167 %endmacro %macro DrawBorderedBoxB 7 ; Special function for combo displays ; draw borders mov dl,[GUIWincol] DrawGUIWinBox %1,%2,%6,%4,%3,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox %1,%2-1,%3,%2,%5,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox %1,%2,%5,%4,%5+1,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox %1,%4,%3,%4+1,%5,dl DrawGUIWinBox %1,%2,%3,%4,%5,167 mov byte[GUIComboText3],%7 mov byte[GUItextcolor],223 GUIOuttextwin2 %1,%2+5,%3+2,GUIComboText3 mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero GUIOuttextwin2 %1,%2+4,%3+1,GUIComboText3 %endmacro %macro DrawBorderedBoxB2 7 ; Special function for combo displays ; draw borders mov dl,[GUIWincol] DrawGUIWinBox %1,%2,%6,%4,%3,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox %1,%2-1,%3,%2,%5,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox %1,%2,%5,%4,%5+1,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox %1,%4,%3,%4+1,%5,dl DrawGUIWinBox %1,%2,%3,%4,%5,167 mov byte[GUIComboText3b+1],%7 mov byte[GUItextcolor],223 GUIOuttextwin2 %1,%2+2,%3+2,GUIComboText3b mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero GUIOuttextwin2 %1,%2+1,%3+1,GUIComboText3b %endmacro %macro InitTextColor 0 mov al,217 cmp byte[GUIWincoladd],0 je .zero3 mov al,211 .zero3 sub al,15 mov byte[TextColorSp+2],al mov al,[GUIWincol] mov byte[TextColorSp],al mov al,163 cmp byte[GUIWincoladd],0 je .zero mov al,164 mov byte[GUItextcolor],164 .zero mov byte[TextColorSp+1],al %endmacro %macro GUIOuttextwin2b 4 ; Special, yellow text mov al,[TextColorSp] mov byte[GUItextcolor],al GUIOuttextwin2 %1,%2,%3,%4 mov al,[TextColorSp+1] mov byte[GUItextcolor],al GUIOuttextwin2 %1,%2-1,%3-1,%4 %endmacro %macro GUIOuttextwin2c 4 ; Boxed, green text mov byte[GUItextcolor],223 push ecx ;Needed for the macro below GUIOuttextwin2 %1,%2,%3,%4 pop ecx mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je %%zero mov byte[GUItextcolor],222 %%zero push esi mov esi,%2 dec esi GUIOuttextwin2 %1,esi,%3-1,%4 pop esi %endmacro %macro GUIOuttextwin2d 5 ; Boxed, green text, limited to 5th param push ecx mov ecx,%4 ;Move pointer to text into ecx %%zero cmp byte[ecx],0 ;Check for null in string je %%one inc ecx jmp %%zero %%one push eax mov eax,ecx ;Move pointer to null into eax sub ecx,%5 ;Move ecx pointer back by length to display cmp ecx,%4 jae %%two mov ecx,%4 ;If pointer is before beginning, reset pointer to beginning %%two sub eax,ecx ;Subtract new pointer from old null pointer which gives us length of chars push eax GUIOuttextwin2c %1,%2,%3,ecx pop eax push ebx pop ecx call BlinkCursorCheck cmp ebx,%4 pop ebx jne near %%fixreg cmp byte[GUIBlinkCursor],' ' je %%three mov byte[GUIBlinkCursor],' ' jmp %%four %%three mov byte[GUIBlinkCursor],'_' %%four imul eax,6 add eax,%2 push ecx mov ecx,eax GUIOuttextwin2c %1,ecx,%3,GUIBlinkCursor pop ecx %%fixreg pop eax %endmacro %macro DrawSlideBar 10 DrawSlideBarWin %1,%2,%3+8,%4,%5,%6,%7-16,%8 mov al,[TextColorSp+2] mov byte[GUItextcolor],al cmp byte[GUICHold],%9 jne .noholda add byte[GUIWincoladd],3 .noholda GUIDisplayIconWin %1,%2,%3,GUIIconDataUpArrow cmp byte[GUICHold],%9 jne .noholda2 sub byte[GUIWincoladd],3 .noholda2 mov al,[TextColorSp+2] mov byte[GUItextcolor],al cmp byte[GUICHold],%10 jne .noholdb add byte[GUIWincoladd],3 .noholdb GUIDisplayIconWin %1,%2,%3+%7-8,GUIIconDataDownArrow cmp byte[GUICHold],%10 jne .noholdb2 sub byte[GUIWincoladd],3 .noholdb2 %endmacro %macro DrawCheckBox 4 mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[%4],0 je %%nocheck4 mov dword[GUITemp],GUIIconDataCheckBoxC %%nocheck4 GUIDisplayIconWin %1,%2,%3,[GUITemp] %endmacro %macro DetermineChar 2 cmp al,%1 jne %%control mov al,%2 %%control %endmacro DisplayGUICombo: mov eax,[GUIccombcursloc] cmp [GUIccomblcursloc],eax je .nolastcurschange mov [GUIccomblcursloc],eax ; copy contents into temporary variables mov esi,[GUIccombcursloc] shl esi,6 add esi,[GUIccombcursloc] add esi,[GUIccombcursloc] add esi,CombinDataGlob cmp byte[GUIComboGameSpec],0 je .nogamespecb sub esi,CombinDataGlob add esi,CombinDataLocl .nogamespecb ; copy 20 bytes to GUIComboTextH mov ecx,20 mov edi,GUIComboTextH rep movsb ; copy 42 bytes to GUIComboData mov ecx,42 mov edi,GUIComboData rep movsb mov ax,[esi] mov [GUIComboKey],ax mov al,[esi+2] mov [GUIComboPNum],al mov al,[esi+3] mov [GUIComboLHorz],al ; determine length of combo data mov eax,GUIComboData xor ecx,ecx .notfin cmp byte[eax],0 je .fin inc eax inc ecx jmp .notfin .fin mov [GUINumCombo],cl .nolastcurschange ; copy into data if description equal mov esi,[GUIccombcursloc] shl esi,6 add esi,[GUIccombcursloc] add esi,[GUIccombcursloc] add esi,CombinDataGlob cmp byte[GUIComboGameSpec],0 je .nogamespecc sub esi,CombinDataGlob add esi,CombinDataLocl .nogamespecc mov ecx,20 mov edi,GUIComboTextH .comploop mov al,[esi] cmp al,[edi] jne near .notequal or al,al jz .donecomp inc esi inc edi dec ecx jnz .comploop .donecomp call ComboClip mov edi,[GUIccombcursloc] shl edi,6 add edi,[GUIccombcursloc] add edi,[GUIccombcursloc] add edi,CombinDataGlob cmp byte[GUIComboGameSpec],0 je .nogamespecd sub edi,CombinDataGlob add edi,CombinDataLocl .nogamespecd mov ecx,20 mov esi,GUIComboTextH rep movsb ; copy 42 bytes to GUIComboData mov ecx,42 mov esi,GUIComboData rep movsb mov ax,[GUIComboKey] mov [edi],ax mov al,[GUIComboPNum] mov [edi+2],al mov al,[GUIComboLHorz] mov [edi+3],al .notequal InitTextColor cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],211 .zero4 GUIDrawWindowBox 16,GUIComboDisp DrawBorderedBox 16,10,20,190,80,19 DrawBorderedBox 16,37,91,157,99,90 DrawBorderedBox 16,10,91,32,99,90 DrawBorderedBox 16,10,110,220,146,109 ; Draw SlideBar ; win#,X,Y start,List Loc,List size,# Lines,Bar Size(Y),UpArrowResource#,DownArrowRes# DrawSlideBar 16,192,20,[GUIccombviewloc],[NumCombo],8,61,GUICSStC,13,14 ; Draw control boxes DrawBorderedBoxB 16,75,150,85,157,149,251 DrawBorderedBoxB 16,89,150,99,157,149,252 DrawBorderedBoxB 16,103,150,113,157,149,253 DrawBorderedBoxB 16,117,150,127,157,149,254 DrawBorderedBoxB 16,131,150,141,157,149,'A' DrawBorderedBoxB 16,145,150,155,157,149,'B' DrawBorderedBoxB 16,159,150,169,157,149,'X' DrawBorderedBoxB 16,173,150,183,157,149,'Y' DrawBorderedBoxB 16,187,150,197,157,149,'L' DrawBorderedBoxB 16,201,150,211,157,149,'R' DrawBorderedBoxB2 16,215,150,227,157,149,'T' DrawBorderedBoxB2 16,231,150,243,157,149,'L' DrawBorderedBoxB 16,75,160,85,167,159,251 DrawBorderedBoxB 16,89,160,99,167,159,252 DrawBorderedBoxB 16,103,160,113,167,159,253 DrawBorderedBoxB 16,117,160,127,167,159,254 DrawBorderedBoxB 16,131,160,141,167,159,'A' DrawBorderedBoxB 16,145,160,155,167,159,'B' DrawBorderedBoxB 16,159,160,169,167,159,'X' DrawBorderedBoxB 16,173,160,183,167,159,'Y' DrawBorderedBoxB 16,187,160,197,167,159,'L' DrawBorderedBoxB 16,201,160,211,167,159,'R' DrawBorderedBoxB2 16,215,160,227,167,159,'T' DrawBorderedBoxB2 16,231,160,243,167,159,'L' DrawBorderedBoxB 16,75,170,85,177,169,251 DrawBorderedBoxB 16,89,170,99,177,169,252 DrawBorderedBoxB 16,103,170,113,177,169,253 DrawBorderedBoxB 16,117,170,127,177,169,254 DrawBorderedBoxB 16,131,170,141,177,169,'A' DrawBorderedBoxB 16,145,170,155,177,169,'B' DrawBorderedBoxB 16,159,170,169,177,169,'X' DrawBorderedBoxB 16,173,170,183,177,169,'Y' DrawBorderedBoxB 16,187,170,197,177,169,'L' DrawBorderedBoxB 16,201,170,211,177,169,'R' DrawBorderedBoxB2 16,215,170,227,177,169,'T' DrawBorderedBoxB2 16,231,170,243,177,169,'L' DrawBorderedBoxB 16,10,189,20,196,188,'1' DrawBorderedBoxB 16,24,189,34,196,188,'2' DrawBorderedBoxB 16,38,189,48,196,188,'3' DrawBorderedBoxB 16,52,189,62,196,188,'4' DrawBorderedBoxB 16,66,189,76,196,188,'5' DrawBorderedBoxB 16,80,189,90,196,188,'9' DrawBorderedBoxB 16,107,189,117,196,188,250 DrawBorderedBoxB 16,121,189,131,196,188,'1' DrawBorderedBoxB 16,135,189,145,196,188,'2' DrawBorderedBoxB 16,149,189,159,196,188,'3' DrawBorderedBoxB 16,163,189,173,196,188,'4' DrawBorderedBoxB 16,177,189,187,196,188,'5' DrawBorderedBoxB 16,204,189,218,196,188,255 ; Normal Text mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],211 .zero5 sub byte[GUItextcolor],15 GUIOuttextwin2 16,10,13,GUIComboText1 GUIOuttextwin2 16,138,13,GUIComboText2 GUIOuttextwin2 16,38,84,GUIComboTextE GUIOuttextwin2 16,10,84,GUIComboTextF GUIOuttextwin2 16,10,103,GUIComboText4 GUIOuttextwin2 16,10,152,GUIComboText5 GUIOuttextwin2 16,10,162,GUIComboText6 GUIOuttextwin2 16,10,172,GUIComboText7 GUIOuttextwin2 16,10,182,GUIComboText8 GUIOuttextwin2 16,114,182,GUIComboText9 GUIOuttextwin2 16,204,182,GUIComboTextG GUIOuttextwin2 16,145,85,GUIComboTextI GUIOuttextwin2 16,176,93,GUIComboTextJ GUIOuttextwin2 16,176,101,GUIComboTextK add byte[GUItextcolor],15 GUIOuttextwin2 16,9,12,GUIComboText1 GUIOuttextwin2 16,137,12,GUIComboText2 GUIOuttextwin2 16,37,83,GUIComboTextE GUIOuttextwin2 16,9,83,GUIComboTextF GUIOuttextwin2 16,9,102,GUIComboText4 GUIOuttextwin2 16,9,151,GUIComboText5 GUIOuttextwin2 16,9,161,GUIComboText6 GUIOuttextwin2 16,9,171,GUIComboText7 GUIOuttextwin2 16,9,181,GUIComboText8 GUIOuttextwin2 16,113,181,GUIComboText9 GUIOuttextwin2 16,203,181,GUIComboTextG GUIOuttextwin2 16,144,84,GUIComboTextI GUIOuttextwin2 16,175,92,GUIComboTextJ GUIOuttextwin2 16,175,100,GUIComboTextK ; Buttons DrawGUIButton 16,202,20,246,31,GUIComboTextA,60,-1,0 DrawGUIButton 16,202,35,246,46,GUIComboTextB,61,-1,0 DrawGUIButton 16,202,50,246,61,GUIComboTextC,62,-1,0 DrawGUIButton 16,202,65,246,76,GUIComboTextD,63,-1,0 ; Calculate Text Cursor Position / Draw Box Text xor eax,eax .nozerocp cmp byte[GUIComboTextH+eax],0 je .zerocp inc eax jmp .nozerocp .zerocp mov [GUIComboPos],al test byte[GUICCFlash],8 jnz .nound mov byte[GUIComboTextH+eax],'_' mov byte[GUIComboTextH+eax+1],0 .nound GUIOuttextwin2c 16,39,94,GUIComboTextH xor eax,eax mov al,[GUIComboPos] mov byte[GUIComboTextH+eax],0 ; Display Current Combo Key mov eax,[GUIComboKey] mov ebx,[ScanCodeListing+eax*3] mov [GUIGameDisplayKy],ebx mov byte[GUIGameDisplayKy+3],0 GUIOuttextwin2c 16,14,94,GUIGameDisplayKy ; Buttons mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero20 mov byte[GUItextcolor],211 .zero20 DrawGUIButton 16,202,20,246,31,GUIComboTextA,60,-1,0 DrawGUIButton 16,202,35,246,46,GUIComboTextB,61,-1,0 DrawGUIButton 16,202,50,246,61,GUIComboTextC,62,-1,0 DrawGUIButton 16,202,65,246,76,GUIComboTextD,63,-1,0 ; Hole Switches GUIDisplayButtonHole 16,158,82,byte[GUIComboPNum],0 GUIDisplayButtonHole 16,176,82,byte[GUIComboPNum],1 GUIDisplayButtonHole 16,194,82,byte[GUIComboPNum],2 GUIDisplayButtonHole 16,212,82,byte[GUIComboPNum],3 GUIDisplayButtonHole 16,230,82,byte[GUIComboPNum],4 ; Check Box DrawCheckBox 16,163,88,GUIComboLHorz DrawCheckBox 16,163,96,GUIComboGameSpec ; Draw Combination Keys (Each 15x11 -> 210x36) xor eax,eax mov al,[GUINumCombo] or eax,eax jz near .comboend xor ebx,ebx mov ecx,11 mov edx,112 .comboiconloop push eax mov al,[GUIComboData+ebx] dec al mov esi,GUIIconDataComboPressRelease cmp al,12 jb .doneicon mov esi,GUIIconDataComboPress sub al,12 cmp al,12 jb .doneicon mov esi,GUIIconDataComboRelease sub al,12 cmp al,12 jb .doneicon mov esi,GUIIconDataComboFrame cmp al,17 jne .not9 mov al,20 jmp .doneicon .not9 cmp al,18 jb .doneicon sub al,7 mov esi,GUIIconDataComboSecond cmp al,11 jne .notback mov al,250-37 jmp .doneicon .notback .doneicon cmp al,11 jbe .control add al,37 .control DetermineChar 0,251 DetermineChar 1,252 DetermineChar 2,253 DetermineChar 3,254 DetermineChar 4,'A' DetermineChar 5,'B' DetermineChar 6,'X' DetermineChar 7,'Y' DetermineChar 8,'L' DetermineChar 9,'R' DetermineChar 10,'T' DetermineChar 11,'E' mov [GUIComboText3],al pushad mov eax,edx add ecx,8 add eax,5 mov byte[GUItextcolor],223 push ecx push eax GUIOuttextwin2 16,ecx,eax,GUIComboText3 pop eax pop ecx mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zerocol mov byte[GUItextcolor],222 .zerocol dec ecx dec eax GUIOuttextwin2 16,ecx,eax,GUIComboText3 popad push ecx push edx push ebx GUIDisplayIconWin 16,ecx,edx,esi pop ebx pop edx pop ecx pop eax add ecx,15 cmp ecx,11+15*14 jne .notoverflowx sub ecx,15*14 add edx,11 .notoverflowx inc ebx dec eax jnz near .comboiconloop .comboend ; Display Bordered Box cmp dword[NumCombo],0 je near .nowinbox mov ebx,[GUIccombcursloc] sub ebx,[GUIccombviewloc] mov eax,ebx lea ebx,[ebx*8] sub ebx,eax add ebx,23 DrawGUIWinBox2 16,10,190,7,224 .nowinbox ; Display Scroll Lines ; Copy Description to GUIScrolBufA, Others to GUIScrolBufB mov edi,[GUIccombviewloc] shl edi,6 add edi,[GUIccombviewloc] add edi,[GUIccombviewloc] add edi,CombinDataGlob cmp byte[GUIComboGameSpec],0 je .nogamespec sub edi,CombinDataGlob add edi,CombinDataLocl .nogamespec mov ecx,12 mov eax,25 mov ebx,[NumCombo] sub ebx,[GUIccombviewloc] cmp ebx,0 jle near .noscrolldisplay cmp ebx,8 jbe .scrolloop mov ebx,8 .scrolloop push ebx push edi push eax xor eax,eax mov ax,[edi+62] mov eax,[ScanCodeListing+eax*3] mov [GUIScrolBufB],eax mov byte[GUIScrolBufB+3],32 mov dword[GUIScrolBufB+4],20202020h mov al,[edi+64] add al,49 mov [GUIScrolBufB+4],al mov byte[GUIScrolBufB+7],'N' cmp byte[edi+65],0 je .yesnoff mov byte[GUIScrolBufB+7],'Y' .yesnoff mov bl,20 mov eax,GUIScrolBufA .scloopb mov bh,[edi] mov [eax],bh inc edi inc eax dec bl jnz .scloopb pop eax mov byte[GUItextcolor],223 push ecx push eax GUIOuttextwin2 16,ecx,eax,GUIScrolBufA pop eax pop ecx push ecx push eax add ecx,128 GUIOuttextwin2 16,ecx,eax,GUIScrolBufB pop eax pop ecx mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zerocolb mov byte[GUItextcolor],222 .zerocolb push ecx push eax dec ecx dec eax push ecx push eax GUIOuttextwin2 16,ecx,eax,GUIScrolBufA pop eax pop ecx add ecx,128 GUIOuttextwin2 16,ecx,eax,GUIScrolBufB pop eax pop ecx pop edi pop ebx add eax,7 add edi,66 dec ebx jnz near .scrolloop .noscrolldisplay ret SECTION .bss GUIccombviewloc resd 1 GUIccombcursloc resd 1 GUIccomblcursloc resd 1 NEWSYM NumCombo, resd 1 NumComboGlob resd 1 NEWSYM NumComboLocl, resd 1 GUICSStC resd 3 GUIComboKey resd 1 GUIComboPos resb 1 GUIComboPNum resb 1 GUIComboLHorz resb 1 NEWSYM GUINumCombo, resb 1 GUIComboData resb 50 GUIScrolBufA resb 21 GUIScrolBufB resb 10 SECTION .data GUIComboText1 db 'DESCRIPTION',0 GUIComboText2 db 'KEY P# LH',0 GUIComboText3 db ' ',0 GUIComboText3b db 'S ',0 GUIComboText4 db 'COMBINATION KEYS:',0 GUIComboText5 db 'PRESS+REL',0 GUIComboText6 db 'PRESS ONLY',0 GUIComboText7 db 'REL ONLY',0 GUIComboText8 db 'FRAME DELAY',0 GUIComboText9 db 'SECOND DELAY',0 GUIComboTextA db 'CLEAR',0 GUIComboTextB db 'ADD',0 GUIComboTextC db 'REPLACE',0 GUIComboTextD db 'DELETE',0 GUIComboTextE db 'DESCRIPTION:',0 GUIComboTextF db 'KEY:',0 GUIComboTextG db 'DEL',0 GUIComboTextH db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 GUIComboTextI db 'P# 1 2 3 4 5',0 GUIComboTextJ db 254,' = LAST ',253,'/',254,0 GUIComboTextK db 'GAME SPECFIC',0 GUIIconDataComboPressRelease: db 0 ,166,0 ,0 ,166,0 ,0 ,0 ,0 ,0 db 0 ,166,0 ,166,166,166,0 ,0 ,0 ,0 db 0 ,166,0 ,0 ,166,0 ,0 ,0 ,0 ,0 db 166,166,166,0 ,166,0 ,0 ,0 ,0 ,0 db 0 ,166,0 ,0 ,166,0 ,0 ,0 ,0 ,0 db 0 ,234,234,234,234,0 ,0 ,0 ,0 ,0 db 234,234,234,234,234,234,0 ,0 ,0 ,0 db 234,234,234,234,234,234,0 ,0 ,0 ,0 db 235,234,234,234,234,235,0 ,0 ,0 ,0 db 0 ,235,235,235,235,0 ,0 ,0 ,0 ,0 GUIIconDataComboPress: db 0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,166,166,166,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,236,236,236,236,0 ,0 ,0 ,0 ,0 db 236,236,236,236,236,236,0 ,0 ,0 ,0 db 236,236,236,236,236,236,0 ,0 ,0 ,0 db 237,236,236,236,236,237,0 ,0 ,0 ,0 db 0 ,237,237,237,237,0 ,0 ,0 ,0 ,0 GUIIconDataComboRelease: db 0 ,0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,166,166,166,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,166,0 ,0 ,0 ,0 ,0 ,0 db 0 ,238,238,238,238,0 ,0 ,0 ,0 ,0 db 238,238,238,238,238,238,0 ,0 ,0 ,0 db 238,238,238,238,238,238,0 ,0 ,0 ,0 db 239,238,238,238,238,239,0 ,0 ,0 ,0 db 0 ,239,239,239,239,0 ,0 ,0 ,0 ,0 GUIIconDataComboFrame: db 0 ,0 ,0 ,0 ,58 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,0 ,56 ,46 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,0 ,54 ,44 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,52 ,0 ,42 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,50 ,40 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,48 ,38 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,46 ,36 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,44 ,0 ,34 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,42 ,32 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,40 ,32 ,0 ,0 ,0 ,0 ,0 ,0 GUIIconDataComboSecond: db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,51 ,45 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,51 ,45 ,0 ,0 ,0 ,0 ,0 ,0 db 0 ,54 ,52 ,48 ,46 ,0 ,0 ,0 ,0 ,0 db 53 ,46 ,50 ,50 ,48 ,45 ,0 ,0 ,0 ,0 db 52 ,50 ,45 ,48 ,46 ,44 ,0 ,0 ,0 ,0 db 51 ,50 ,50 ,46 ,50 ,43 ,0 ,0 ,0 ,0 db 50 ,50 ,50 ,50 ,50 ,42 ,0 ,0 ,0 ,0 db 0 ,48 ,46 ,44 ,42 ,0 ,0 ,0 ,0 ,0 db 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 SECTION .text EEMode: pushad call GetTime cmp eax,360 popad ja .noEE mov eax,1 ret .noEE mov eax,0 ret DisplayGUIAddOns: ;Select Special Controllers GUIDrawWindowBox 17,GUIAddOnsDisp ;Text Display mov byte[GUItextcolor],217 ;Shadow cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 call EEMode cmp eax,0 je near .noEE ;You know it! GUIOuttextwin2 17,21,18,GUIAddOnText1Alt GUIOuttextwin2 17,21,28,GUIAddOnText2Alt GUIOuttextwin2 17,21,38,GUIAddOnText3Alt GUIOuttextwin2 17,21,48,GUIAddOnText4Alt GUIOuttextwin2 17,21,58,GUIAddOnText5Alt jmp .endEE .noEE ;Regular GUIOuttextwin2u 17,21,18,GUIAddOnText1,0 GUIOuttextwin2u 17,21,28,GUIAddOnText2,20 GUIOuttextwin2u 17,21,38,GUIAddOnText3,20 GUIOuttextwin2u 17,21,48,GUIAddOnText4,0 GUIOuttextwin2u 17,21,58,GUIAddOnText5,0 .endEE add byte[GUItextcolor],15 ;Text call EEMode cmp eax,0 je near .noEE2 ;You know it! GUIOuttextwin2 17,20,17,GUIAddOnText1Alt GUIOuttextwin2 17,20,27,GUIAddOnText2Alt GUIOuttextwin2 17,20,37,GUIAddOnText3Alt GUIOuttextwin2 17,20,47,GUIAddOnText4Alt GUIOuttextwin2 17,20,57,GUIAddOnText5Alt jmp .endEE2 .noEE2 ;Regular GUIOuttextwin2 17,20,17,GUIAddOnText1 GUIOuttextwin2 17,20,27,GUIAddOnText2 GUIOuttextwin2 17,20,37,GUIAddOnText3 GUIOuttextwin2 17,20,47,GUIAddOnText4 GUIOuttextwin2 17,20,57,GUIAddOnText5 .endEE2 ;Ratio Buttons GUIDisplayButtonHole 17,9,15,byte[snesmouse],0 GUIDisplayButtonHole 17,9,25,byte[snesmouse],1 GUIDisplayButtonHole 17,9,35,byte[snesmouse],2 GUIDisplayButtonHole 17,9,45,byte[snesmouse],3 GUIDisplayButtonHole 17,9,55,byte[snesmouse],4 ret SECTION .data GUIAddOnText1 db 'NONE',0 GUIAddOnText2 db 'SNES MOUSE AT PORT #1',0 GUIAddOnText3 db 'SNES MOUSE AT PORT #2',0 GUIAddOnText4 db 'SUPER SCOPE',0 GUIAddOnText5 db 'LETHAL ENFORCER GUN',0 ;EE GUIAddOnText1Alt db 79,70,70,0 GUIAddOnText2Alt db 84,79,65,83,84,32,77,89,32,66,82,69,65,68,0 GUIAddOnText3Alt db 71,73,77, 77,69,32,70,82,73,69,83,32,87,73,84,72,32,84,72,65,84,0 GUIAddOnText4Alt db 65,78,68,32,65,32,77,85,70,70,73,78,0 GUIAddOnText5Alt db 87,73,84,72,32,86,73,84,65,77,73,78,83,0 SECTION .text DisplayGUIChipConfig: GUIDrawWindowBox 18,GUIChipConfigDisp ;Text Display mov byte[GUItextcolor],217 ;Shadow cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 call EEMode ; You know it! cmp eax,0 je near .noEE GUIOuttextwin2 18,10,38,GUIChipText1Alt GUIOuttextwin2 18,21,48,GUIChipText2Alt GUIOuttextwin2 18,71,48,GUIChipText3Alt GUIOuttextwin2 18,121,48,GUIChipText4Alt GUIOuttextwin2 18,21,58,GUIChipText5Alt GUIOuttextwin2 18,71,58,GUIChipText6Alt GUIOuttextwin2 18,121,58,GUIChipText7Alt jmp .endEE .noEE ; Regular Window Shadow GUIOuttextwin2u 18,21,48,GUIChipTextA1,4 GUIOuttextwin2u 18,71,48,GUIChipTextA2,4 GUIOuttextwin2u 18,121,48,GUIChipTextA3,4 GUIOuttextwin2u 18,21,58,GUIChipTextA4,4 GUIOuttextwin2u 18,71,58,GUIChipTextA5,4 GUIOuttextwin2u 18,121,58,GUIChipTextA6,4 .endEE add byte[GUItextcolor],15 ; Text call EEMode cmp eax,0 je near .noEE2 ; You know it! GUIOuttextwin2 18,9,37,GUIChipText1Alt GUIOuttextwin2 18,20,47,GUIChipText2Alt GUIOuttextwin2 18,70,47,GUIChipText3Alt GUIOuttextwin2 18,120,47,GUIChipText4Alt GUIOuttextwin2 18,20,57,GUIChipText5Alt GUIOuttextwin2 18,70,57,GUIChipText6Alt GUIOuttextwin2 18,120,57,GUIChipText7Alt jmp .endEE2 .noEE2 ; Regular Window Text GUIOuttextwin2 18,20,47,GUIChipTextA1 GUIOuttextwin2 18,70,47,GUIChipTextA2 GUIOuttextwin2 18,120,47,GUIChipTextA3 GUIOuttextwin2 18,20,57,GUIChipTextA4 GUIOuttextwin2 18,70,57,GUIChipTextA5 GUIOuttextwin2 18,120,57,GUIChipTextA6 mov al,[GUIWincol] ;Yellow Shadow mov [GUIGameOptnsColA],al mov byte[GUIGameOptnsColB],202 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUIGameOptnsColB],196 .zero3 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 18,10,38,GUIChipTextA mov byte[GUIGameOptnsColA],163 ;Yellow Text mov byte[GUIGameOptnsColB],217 cmp byte[GUIWincoladd],0 je .zero8 mov byte[GUIGameOptnsColA],164 mov byte[GUIGameOptnsColB],211 .zero8 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 18,9,37,GUIChipTextA .endEE2 ;Checkboxes mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip1],0 je .nodip1 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip1 GUIDisplayIconWin 18,9,43,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip2],0 je .nodip2 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip2 GUIDisplayIconWin 18,59,43,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip3],0 je .nodip3 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip3 GUIDisplayIconWin 18,109,43,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip4],0 je .nodip4 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip4 GUIDisplayIconWin 18,9,53,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip5],0 je .nodip5 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip5 GUIDisplayIconWin 18,59,53,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[nssdip6],0 je .nodip6 mov dword[GUITemp],GUIIconDataCheckBoxC .nodip6 GUIDisplayIconWin 18,109,53,[GUITemp] ret SECTION .data GUIChipTextA db 'SUPER SYSTEM :',0 GUIChipTextA1 db 'DIP 1',0 GUIChipTextA2 db 'DIP 2',0 GUIChipTextA3 db 'DIP 3',0 GUIChipTextA4 db 'DIP 4',0 GUIChipTextA5 db 'DIP 5',0 GUIChipTextA6 db 'DIP 6',0 ;EE GUIChipText1Alt db 69,88,84,82,65,83,0 GUIChipText2Alt db 83,65,76,84,0 GUIChipText3Alt db 71,65,82,76,73,67,0 GUIChipText4Alt db 80,69,80,80,69,82,0 GUIChipText5Alt db 67,72,69,69,83,69,0 GUIChipText6Alt db 66,85,84,84,69,82,0 GUIChipText7Alt db 67,65,84,83,85,80,0 SECTION .text BlinkCursorCheck: cmp dword[GUIInputBox],0 jne .checkboxes mov ebx,0 ret .checkboxes cmp dword[GUIInputBox],1 jne .notBox1 mov ebx,SRAMDir ret .notBox1 cmp dword[GUIInputBox],2 jne .notBox2 mov ebx,SnapPath ret .notBox2 cmp dword[GUIInputBox],3 jne .notBox3 mov ebx,SPCPath ret .notBox3 cmp dword[GUIInputBox],4 jne .notBox4 mov ebx,BSXPath ret .notBox4 cmp dword[GUIInputBox],5 jne .notBox5 mov ebx,SGPath ret .notBox5 cmp dword[GUIInputBox],6 jne .notBox6 mov ebx,STPath ret .notBox6 cmp dword[GUIInputBox],7 jne .notBox7 mov ebx,GNextPath ret .notBox7 cmp dword[GUIInputBox],8 jne .notBox8 mov ebx,FEOEZPath ret .notBox8 cmp dword[GUIInputBox],9 jne .notBox9 mov ebx,SJNSPath ret .notBox9 cmp dword[GUIInputBox],10 jne .notBox10 mov ebx,MDHPath ret .notBox10 cmp dword[GUIInputBox],11 jne .notBox11 mov ebx,SPL4Path .notBox11 ret DisplayGUIPaths: GUIDrawWindowBox 19,GUIPathsDisp sub byte[GUItextcolor],15 GUIOuttextwin2 19,8,18,GUIPathsText1 GUIOuttextwin2 19,8,38,GUIPathsText2 GUIOuttextwin2 19,8,58,GUIPathsText3 GUIOuttextwin2 19,60,78,GUIPathsText4 GUIOuttextwin2 19,8,88,GUIPathsText5 GUIOuttextwin2 19,135,88,GUIPathsText6 GUIOuttextwin2 19,8,113,GUIPathsText8 GUIOuttextwin2 19,135,113,GUIPathsText7 GUIOuttextwin2 19,45,138,GUIPathsText9 GUIOuttextwin2 19,8,148,GUIPathsTextA GUIOuttextwin2 19,135,148,GUIPathsTextB GUIOuttextwin2 19,8,173,GUIPathsTextC GUIOuttextwin2 19,135,173,GUIPathsTextD add byte[GUItextcolor],15 GUIOuttextwin2 19,7,17,GUIPathsText1 GUIOuttextwin2 19,7,37,GUIPathsText2 GUIOuttextwin2 19,7,57,GUIPathsText3 GUIOuttextwin2 19,59,77,GUIPathsText4 GUIOuttextwin2 19,7,87,GUIPathsText5 GUIOuttextwin2 19,134,87,GUIPathsText6 GUIOuttextwin2 19,7,112,GUIPathsText8 GUIOuttextwin2 19,134,112,GUIPathsText7 GUIOuttextwin2 19,44,137,GUIPathsText9 GUIOuttextwin2 19,7,147,GUIPathsTextA GUIOuttextwin2 19,134,147,GUIPathsTextB GUIOuttextwin2 19,7,172,GUIPathsTextC GUIOuttextwin2 19,134,172,GUIPathsTextD ; Draw borders mov dword[GUIWincol],148+10 cmp byte[cwindrawn],1 jne .noone3 mov dword[GUIWincol],148+5 .noone3 cmp byte[cwindrawn],0 jne .nozero3 mov dword[GUIWincol],148 .nozero3 mov dl,[GUIWincol] ; Saves Border DrawGUIWinBox 19,75,14,231,14,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,74,15,74,25,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,75,26,231,26,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,232,15,232,25,dl mov dl,[GUIWincol] ; Snapshots Border DrawGUIWinBox 19,75,34,231,34,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,74,35,74,45,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,75,46,231,46,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,232,35,232,45,dl mov dl,[GUIWincol] ; SPCs Border DrawGUIWinBox 19,75,54,231,54,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,74,55,74,65,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,75,66,231,66,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,232,55,232,65,dl mov dl,[GUIWincol] ; BS-X Border DrawGUIWinBox 19,8,94,106,94,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,7,95,74,105,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,8,106,106,106,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,107,95,107,105,dl mov dl,[GUIWincol] ; SAME GAME Border DrawGUIWinBox 19,8,119,106,119,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,7,120,7,130,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,8,131,106,131,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,107,120,107,130,dl mov dl,[GUIWincol] ; FEOEZ Border DrawGUIWinBox 19,8,154,106,154,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,7,155,7,165,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,8,166,106,166,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,107,155,107,165,dl mov dl,[GUIWincol] ; MDH Border DrawGUIWinBox 19,8,179,106,179,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,7,180,7,190,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,8,191,106,191,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,107,180,107,190,dl mov dl,[GUIWincol] ; Sufami Turbo Border DrawGUIWinBox 19,135,94,235,94,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,134,95,134,105,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,135,106,235,106,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,236,95,236,105,dl mov dl,[GUIWincol] ; SD GUNDAM Border DrawGUIWinBox 19,135,119,235,119,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,134,120,134,130,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,135,131,235,131,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,236,120,236,130,dl mov dl,[GUIWincol] ; FEOEZ SJNS Border DrawGUIWinBox 19,135,154,235,154,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,134,155,134,165,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,135,166,235,166,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,236,155,236,165,dl mov dl,[GUIWincol] ; SPL4 Border DrawGUIWinBox 19,135,179,235,179,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 19,134,180,134,190,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 19,135,191,235,191,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 19,236,180,236,190,dl ; End draw borders ;Input boxes DrawGUIWinBox 19,75,15,231,25,167 DrawGUIWinBox 19,75,35,231,45,167 DrawGUIWinBox 19,75,55,231,65,167 DrawGUIWinBox 19,8,95,106,105,167 DrawGUIWinBox 19,8,120,106,130,167 DrawGUIWinBox 19,135,95,235,105,167 DrawGUIWinBox 19,135,120,235,130,167 DrawGUIWinBox 19,8,155,106,165,167 DrawGUIWinBox 19,8,180,106,190,167 DrawGUIWinBox 19,135,155,235,165,167 DrawGUIWinBox 19,135,180,235,190,167 GUIOuttextwin2d 19,77,19,SRAMDir,25 GUIOuttextwin2d 19,77,39,SnapPath,25 GUIOuttextwin2d 19,77,59,SPCPath,25 GUIOuttextwin2d 19,10,99,BSXPath,15 GUIOuttextwin2d 19,10,124,SGPath,15 GUIOuttextwin2d 19,137,99,STPath,15 GUIOuttextwin2d 19,137,124,GNextPath,15 GUIOuttextwin2d 19,10,159,FEOEZPath,15 GUIOuttextwin2d 19,10,184,MDHPath,15 GUIOuttextwin2d 19,137,159,SJNSPath,15 GUIOuttextwin2d 19,137,184,SPL4Path,15 ret SECTION .data GUIPathsText1 db 'SAVES:',0 GUIPathsText2 db 'SNAPSHOTS:',0 GUIPathsText3 db 'SPCS:',0 GUIPathsText4 db '--BIOS/BASE CARTS--',0 GUIPathsText5 db 'BS-X:',0 GUIPathsText6 db 'SUFAMI TURBO:',0 GUIPathsText7 db 'SD GUNDAM G-NEXT:',0 GUIPathsText8 db 'SAME GAME:',0 GUIPathsText9 db '--SPC7110 GRAPHIC PACKS--',0 GUIPathsTextA db 'FEOEZ:',0 GUIPathsTextB db 'FEOEZ - SJNS:',0 GUIPathsTextC db 'MDH:',0 GUIPathsTextD db 'SPL4:',0 NEWSYM GUIBlinkCursor, times 2 db 0 DisplayGUISave: ;Save & Rewind options/Hotkeys GUIDrawWindowBox 20,GUISaveDisp ;Text Display mov byte[GUItextcolor],217 ;Shadow cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2 20,8,19,GUISaveTextA1 GUIOuttextwin2 20,8,31,GUISaveTextA2 GUIOuttextwin2u 20,26,44,GUISaveTextB1,5 GUIOuttextwin2u 20,26,54,GUISaveTextB2,5 GUIOuttextwin2u 20,26,64,GUISaveTextB3,0 GUIOuttextwin2u 20,26,74,GUISaveTextB4,0 GUIOuttextwin2u 20,26,84,GUISaveTextB5,0 GUIOuttextwin2u 20,26,94,GUISaveTextB6,0 GUIOuttextwin2u 20,26,104,GUISaveTextB7,12 GUIOuttextwin2 20,9+45*3,141,GUISaveTextC4 GUIOuttextwin2 20,9,150,GUISaveTextC5 GUIOuttextwin2 20,9+57,150,GUISaveTextC6 GUIOuttextwin2 20,9+114,150,GUISaveTextC7 GUIOuttextwin2 20,9,159,GUISaveTextC8 mov byte[GUISaveTextC2+2],'0' ; ST# Shadow GUIOuttextwin2 20,9,123,GUISaveTextC2 mov byte[GUISaveTextC2+2],'1' GUIOuttextwin2 20,9+45,123,GUISaveTextC2 mov byte[GUISaveTextC2+2],'2' GUIOuttextwin2 20,9+45*2,123,GUISaveTextC2 mov byte[GUISaveTextC2+2],'3' GUIOuttextwin2 20,9+45*3,123,GUISaveTextC2 mov byte[GUISaveTextC2+2],'4' GUIOuttextwin2 20,9,132,GUISaveTextC2 mov byte[GUISaveTextC2+2],'5' GUIOuttextwin2 20,9+45,132,GUISaveTextC2 mov byte[GUISaveTextC2+2],'6' GUIOuttextwin2 20,9+45*2,132,GUISaveTextC2 mov byte[GUISaveTextC2+2],'7' GUIOuttextwin2 20,9+45*3,132,GUISaveTextC2 mov byte[GUISaveTextC2+2],'8' GUIOuttextwin2 20,9,141,GUISaveTextC2 mov byte[GUISaveTextC2+2],'9' GUIOuttextwin2 20,9+45,141,GUISaveTextC2 mov byte[GUISaveTextC2+2],'+' GUIOuttextwin2 20,9+45*2,141,GUISaveTextC2 mov byte[GUISaveTextC2+2],'-' GUIOuttextwin2 20,9+45*2,141,GUISaveTextC2 add byte[GUItextcolor],15 ;Text GUIOuttextwin2 20,7,18,GUISaveTextA1 GUIOuttextwin2 20,7,30,GUISaveTextA2 GUIOuttextwin2 20,25,43,GUISaveTextB1 GUIOuttextwin2 20,25,53,GUISaveTextB2 GUIOuttextwin2 20,25,63,GUISaveTextB3 GUIOuttextwin2 20,25,73,GUISaveTextB4 GUIOuttextwin2 20,25,83,GUISaveTextB5 GUIOuttextwin2 20,25,93,GUISaveTextB6 GUIOuttextwin2 20,25,103,GUISaveTextB7 GUIOuttextwin2 20,8+45*3,140,GUISaveTextC4 GUIOuttextwin2 20,8,149,GUISaveTextC5 GUIOuttextwin2 20,8+57,149,GUISaveTextC6 GUIOuttextwin2 20,8+114,149,GUISaveTextC7 GUIOuttextwin2 20,8,158,GUISaveTextC8 mov byte[GUISaveTextC2+2],'0' ; ST# Text GUIOuttextwin2 20,8,122,GUISaveTextC2 mov byte[GUISaveTextC2+2],'1' GUIOuttextwin2 20,8+45,122,GUISaveTextC2 mov byte[GUISaveTextC2+2],'2' GUIOuttextwin2 20,8+45*2,122,GUISaveTextC2 mov byte[GUISaveTextC2+2],'3' GUIOuttextwin2 20,8+45*3,122,GUISaveTextC2 mov byte[GUISaveTextC2+2],'4' GUIOuttextwin2 20,8,131,GUISaveTextC2 mov byte[GUISaveTextC2+2],'5' GUIOuttextwin2 20,8+45,131,GUISaveTextC2 mov byte[GUISaveTextC2+2],'6' GUIOuttextwin2 20,8+45*2,131,GUISaveTextC2 mov byte[GUISaveTextC2+2],'7' GUIOuttextwin2 20,8+45*3,131,GUISaveTextC2 mov byte[GUISaveTextC2+2],'8' GUIOuttextwin2 20,8,140,GUISaveTextC2 mov byte[GUISaveTextC2+2],'9' GUIOuttextwin2 20,8+45,140,GUISaveTextC2 mov byte[GUISaveTextC2+2],'+' GUIOuttextwin2 20,8+45*2,140,GUISaveTextC2 mov byte[GUISaveTextC2+2],'-' GUIOuttextwin2 20,8+45*2,140,GUISaveTextC2 mov al,[GUIWincol] ;State Selects (Yellow) Shadow mov [GUIGameOptnsColA],al mov byte[GUIGameOptnsColB],202 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUIGameOptnsColB],196 .zero3 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 20,6,112,GUISaveTextC1 mov byte[GUIGameOptnsColA],163 ;State Selects (Yellow) Text mov byte[GUIGameOptnsColB],217 cmp byte[GUIWincoladd],0 je .zero8 mov byte[GUIGameOptnsColA],164 mov byte[GUIGameOptnsColB],211 .zero8 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 20,5,111,GUISaveTextC1 ;Checkboxes mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[AutoIncSaveSlot],0 je .nocheckbox mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox GUIDisplayIconWin 20,11,40,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SRAMSave5Sec],0 je .nocheckbox1 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox1 GUIDisplayIconWin 20,11,50,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[LatestSave],0 je .nocheckbox2 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox2 GUIDisplayIconWin 20,11,60,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[AutoState],0 je .nocheckbox3 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox3 GUIDisplayIconWin 20,11,70,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[SRAMState],0 je .nocheckbox4 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox4 GUIDisplayIconWin 20,11,80,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[PauseLoad],0 je .nocheckbox5 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox5 GUIDisplayIconWin 20,11,90,[GUITemp] mov dword[GUITemp],GUIIconDataCheckBoxUC cmp byte[PauseRewind],0 je .nocheckbox6 mov dword[GUITemp],GUIIconDataCheckBoxC .nocheckbox6 GUIDisplayIconWin 20,11,100,[GUITemp] ; Draw borders mov dword[GUIWincol],148+10 ; Setup for borders cmp byte[cwindrawn],1 jne .noone3 mov dword[GUIWincol],148+5 .noone3 cmp byte[cwindrawn],0 jne .nozero3 mov dword[GUIWincol],148 .nozero3 mov dl,[GUIWincol] ; # of Rewind States (Border) DrawGUIWinBox 20,150,28,165,28,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 20,149,29,149,36,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 20,150,37,165,37,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 20,165,29,166,36,dl mov dl,[GUIWincol] ; Second/Rewind (Border) DrawGUIWinBox 20,150,16,165,16,dl mov dl,[GUIWincol] add dl,1 DrawGUIWinBox 20,149,17,149,24,dl mov dl,[GUIWincol] add dl,4 DrawGUIWinBox 20,150,25,165,25,dl mov dl,[GUIWincol] add dl,3 DrawGUIWinBox 20,165,17,166,24,dl DGOptnsBorderBox 20,26,120 ; ST0 DGOptnsBorderBox 20,71,120 ; ST1 DGOptnsBorderBox 20,116,120 ; ST2 DGOptnsBorderBox 20,161,120 ; ST3 DGOptnsBorderBox 20,26,129 ; ST4 DGOptnsBorderBox 20,71,129 ; ST5 DGOptnsBorderBox 20,116,129 ; ST6 DGOptnsBorderBox 20,161,129 ; ST7 DGOptnsBorderBox 20,26,138 ; ST8 DGOptnsBorderBox 20,71,138 ; ST9 DGOptnsBorderBox 20,116,138 ; ST+ DGOptnsBorderBox 20,161,138 ; ST- DGOptnsBorderBox 20,32,147 ; SAVE DGOptnsBorderBox 20,89,147 ; LOAD DGOptnsBorderBox 20,146,147 ; PICK DGOptnsBorderBox 20,45,156 ; REWIND ;Boxes DrawGUIWinBox 20,150,17,165,24,167 ; Rewind States Box xor ax,ax mov ah,[RewindStates] mov al,48 add ah,48 .asciiloop cmp ah,58 jb .hex2asciidone add al,1 sub ah,10 jmp .asciiloop .hex2asciidone mov [GUISaveTextZ3],ax mov byte[GUItextcolor],223 GUIOuttextwin2 20,154,19,GUISaveTextZ3 mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero4 mov byte[GUItextcolor],222 .zero4 GUIOuttextwin2 20,153,18,GUISaveTextZ3 mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero6 mov byte[GUItextcolor],211 .zero6 DrawGUIWinBox 20,150,29,165,36,167 ; Second/Rewind Box xor ax,ax mov ah,[RewindFrames] mov al,48 add ah,48 .asciiloop2 cmp ah,58 jb .hex2asciidone2 add al,1 sub ah,10 jmp .asciiloop2 .hex2asciidone2 mov [GUISaveTextZ3],ax mov byte[GUItextcolor],223 GUIOuttextwin2 20,154,31,GUISaveTextZ3 mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 GUIOuttextwin2 20,153,30,GUISaveTextZ3 mov byte[GUItextcolor],217 cmp byte[GUIWincoladd],0 je .zero7 mov byte[GUItextcolor],211 .zero7 DDrawBox 20,27,121,[KeyStateSlc0] ; Boxes for State section DDrawBox 20,27+45,121,[KeyStateSlc1] DDrawBox 20,27+45*2,121,[KeyStateSlc2] DDrawBox 20,27+45*3,121,[KeyStateSlc3] DDrawBox 20,27,130,[KeyStateSlc4] DDrawBox 20,27+45,130,[KeyStateSlc5] DDrawBox 20,27+45*2,130,[KeyStateSlc6] DDrawBox 20,27+45*3,130,[KeyStateSlc7] DDrawBox 20,27,139,[KeyStateSlc8] DDrawBox 20,27+45,139,[KeyStateSlc9] DDrawBox 20,27+45*2,139,[KeyIncStateSlot] DDrawBox 20,27+45*3,139,[KeyDecStateSlot] DDrawBox 20,8+25,148,[KeySaveState] DDrawBox 20,8+57+25,148,[KeyLoadState] DDrawBox 20,8+114+25,148,[KeyStateSelct] DDrawBox 20,8+38,157,[KeyRewind] ;Buttons mov byte[GUItextcolor],217 ;set color for buttons cmp byte[GUIWincoladd],0 je .zero88 mov byte[GUItextcolor],211 .zero88 sub byte[GUItextcolor],15 add byte[GUItextcolor],15 DrawGUIButton 20,173,17,181,25,GUISaveTextZ1,70,-2,-1 ; + Rewind States DrawGUIButton 20,184,17,192,25,GUISaveTextZ2,71,-2,-1 ; - Rewind States DrawGUIButton 20,173,29,181,37,GUISaveTextZ1,72,-2,-1 ; + Second/Rewind DrawGUIButton 20,184,29,192,37,GUISaveTextZ2,73,-2,-1 ; - Second/Rewind ret SECTION .data GUISaveTextA1 db '# OF REWIND STATES',0 GUISaveTextA2 db '1/5 SECONDS PER REWIND',0 GUISaveTextB1 db 'AUTO INCRMNT SAVE SLOT',0 GUISaveTextB2 db 'SRAM CHECK+SAVE',0 GUISaveTextB3 db 'START AT LATEST SAVE',0 GUISaveTextB4 db 'AUTO STATE SAVE/LOAD',0 GUISaveTextB5 db 'LOAD SAVESTATE W/SRAM',0 GUISaveTextB6 db 'PAUSE AFTER LOADING STATE',0 GUISaveTextB7 db 'PAUSE AFTER REWIND',0 GUISaveTextC1 db 'STATE SELECTS :',0 GUISaveTextC2 db 'ST#',0 ; Used for all numbers, 0-9 GUISaveTextC3 db 'ST+',0 GUISaveTextC4 db 'ST-',0 GUISaveTextC5 db 'SAVE',0 GUISaveTextC6 db 'LOAD',0 GUISaveTextC7 db 'PICK',0 GUISaveTextC8 db 'REWIND',0 GUISaveTextZ1 db '+',0 GUISaveTextZ2 db '-',0 GUISaveTextZ3 db ' ',0 DisplayGUISpeed: ;Speed Options GUIDrawWindowBox 21,GUISpeedDisp mov byte[GUItextcolor],217 ;Shadow cmp byte[GUIWincoladd],0 je .zero mov byte[GUItextcolor],211 .zero sub byte[GUItextcolor],15 GUIOuttextwin2 21,8,29,GUISpeedTextA1 GUIOuttextwin2 21,8,39,GUISpeedTextA2 GUIOuttextwin2 21,8,49,GUISpeedTextA3 add byte[GUItextcolor],15 ;Text GUIOuttextwin2 21,7,28,GUISpeedTextA1 GUIOuttextwin2 21,7,38,GUISpeedTextA2 GUIOuttextwin2 21,7,48,GUISpeedTextA3 mov al,[GUIWincol] ;Yellow Shadow mov [GUIGameOptnsColA],al mov byte[GUIGameOptnsColB],202 cmp byte[GUIWincoladd],0 je .zero3 mov byte[GUIGameOptnsColB],196 .zero3 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 21,8,19,GUISpeedTextA GUIOuttextwin2 21,21,79,GUISpeedTextB mov byte[GUIGameOptnsColA],163 ;Yellow Text mov byte[GUIGameOptnsColB],217 cmp byte[GUIWincoladd],0 je .zero8 mov byte[GUIGameOptnsColA],164 mov byte[GUIGameOptnsColB],211 .zero8 mov al,byte[GUIGameOptnsColA] mov byte[GUItextcolor],al GUIOuttextwin2 21,7,18,GUISpeedTextA GUIOuttextwin2 21,20,78,GUISpeedTextB DDrawBox 21,100,28,[KeyFastFrwrd] ;Shortcut Boxes DDrawBox 21,100,38,[KeySlowDown] DDrawBox 21,100,48,[KeyResetSpeed] DGOptnsBorderBox 21,99,27 ;Borders DGOptnsBorderBox 21,99,37 DGOptnsBorderBox 21,99,47 mov eax,dword[GUIwinposx+21*4] ; Slider mov ebx,dword[GUIwinposy+21*4] mov ecx,eax add eax,15 add ecx,15+60 add ebx,91 xor edx,edx mov dl,215 sub dl,[GUIWincoladd] DrawGUILine inc ecx inc eax sub dl,13 DrawGUILine xor eax,eax mov al,[EmuSpeed] mov dword[GUITemp],11 add [GUITemp],eax GUIDisplayIconWin 21,[GUITemp],87,GUIIconDataSlideBar mov dword[GUISpeedTextB1],' ' mov esi,GUISpeedTextB1+2 xor eax,eax mov al,[EmuSpeed] mov ebx,10 div bl add ah,48 mov [esi],ah cmp al,0 je .nomore dec esi xor ah,ah div bl add ah,48 mov [esi],ah cmp al,0 je .nomore dec esi xor ah,ah div bl add ah,48 mov [esi],ah .nomore mov [GUITemp],esi mov byte[GUItextcolor],223 GUIOuttextwin2 21,119,89,[GUITemp] mov byte[GUItextcolor],221 cmp byte[GUIWincoladd],0 je .zero5 mov byte[GUItextcolor],222 .zero5 GUIOuttextwin2 21,118,88,[GUITemp] ret SECTION .data GUISpeedTextA db 'SHORTCUTS : ',0 GUISpeedTextA1 db 'FAST FORWARD',0 GUISpeedTextA2 db 'SLOWDOWN',0 GUISpeedTextA3 db 'RESET SPEED',0 GUISpeedTextB db 'SPEED : ',0 GUISpeedTextB1 db '---',0 ;General data GUILoadDisp db 'LOAD GAME',0 GUIResetDisp db 'RESET GAME',0 GUIStateSelDisp db 'STATE SELECT',0 GUIInputDisp db 'INPUT DEVICE',0 GUIOptionDisp db 'OPTIONS',0 GUISoundDisp db 'SOUND CONFIG',0 GUIVideoDisp db 'VIDEO CONFIG',0 GUICheatDisp db 'CHEAT',0 GUISearchDisp db 'CHEAT SEARCH',0 GUINetDisp db 'REMOTE',0,0,0,0,0,0,0,0,0 GUIGameDisp db 'GAME KEYS',0 GUIGUIDisp db 'GUI OPTIONS',0 GUIAboutDisp db 'ABOUT',0 GUIMovieDisp db 'MOVIE OPTIONS',0 GUIStatesDisp db 'STATE CONFIRM',0 GUIComboDisp db 'KEY COMBINATION EDITOR',0 GUIAddOnsDisp db 'ADD-ON SELECTOR',0 GUIChipConfigDisp db 'CONFIGURE CHIPS',0 GUIPathsDisp db 'SETUP PATHS',0 GUISaveDisp db 'SAVE OPTIONS',0 GUISpeedDisp db 'SPEED OPTIONS',0 SECTION .bss GUIItemBoxColor resd 1 TextColorSp resd 1 SECTION .data NEWSYM GUIMenuItem, db 'GAME ',0 db 'CONFIG',0 db 'CHEAT ',0 db 'NETPLAY',0 db 'MISC ',0 db 25,0 SECTION .text