Files
quickdev16/tools/zsnes/src/gui/guiwindp.inc
2009-04-22 20:04:28 +02:00

5244 lines
132 KiB
PHP

;Copyright (C) 1997-2007 ZSNES Team ( zsKnight, _Demo_, pagefault, Nach )
;
;http://www.zsnes.com
;http://sourceforge.net/projects/zsnes
;https://zsnes.bountysource.com
;
;This program is free software; you can redistribute it and/or
;modify it under the terms of the GNU General Public License
;version 2 as published by the Free Software Foundation.
;
;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.
EXTSYM VERSION_STR,placedate
SECTION .data
NEWSYM mencoderExists, db 0
NEWSYM lameExists, db 0
SECTION .text
%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,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
mov ecx,eax
add ecx,dword[GUIwinsizex+%1*4]
DrawTitleBar
mov esi,[GUIwinsizey+%1*4]
dec esi
mov edx,[GUIWincol]
add edx,2
.loop
DrawGUILine
dec esi
jnz .loop
mov edx,[GUIWincol]
DrawGUILine
mov eax,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add ebx,10
mov ecx,eax
mov esi,[GUIwinsizey+%1*4]
mov edx,[GUIWincol]
add edx,3
dec esi
.loop2
DrawGUILine
dec esi
jnz .loop2
mov eax,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add ebx,10
add eax,dword[GUIwinsizex+%1*4]
mov ecx,eax
mov esi,[GUIwinsizey+%1*4]
mov dl,[GUIWincol]
inc dl
.loop3
DrawGUILine
dec esi
jnz .loop3
mov ebx,[GUIwinposy+%1*4]
add ebx,3
mov edx,[GUIwinposx+%1*4]
add edx,3
mov byte[GUItextcolor],184
GUIOuttextwin %2
mov ebx,[GUIwinposy+%1*4]
add ebx,2
mov edx,[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,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add eax,dword[GUIwinsizex+%1*4]
sub eax,10
GUIDisplayIcon GUIIconDataClose
%endmacro
%macro DrawGUIWinBox 6
mov eax,[GUIwinposx+%1*4]
mov ebx,[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,[GUIwinposx+%1*4]
mov ecx,eax
add eax,%2
add ecx,%3+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,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add ecx,eax
add eax,%2
add ebx,%3
inc ecx
mov dl,%6
mov esi,%5-%3+1
%%loop
DrawGUILine
dec esi
jnz %%loop
%endmacro
%macro DrawGUIButton 9
mov dl,[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
mov eax,[eax]
mov [cloadnpos],eax
inc dword[cloadnposb]
mov byte[GUItextcolor],223
GUIOuttextwin2l %1,%2,%3,[cloadnpos]
mov byte[GUItextcolor],221
cmp byte[GUIWincoladd],0
je %%zero
mov byte[GUItextcolor],222
%%zero
GUIOuttextwin2l %1,%2-1,%3-1,[cloadnpos]
add dword[cloadnpos],32
dec dword[cloadnleft]
%endmacro
%macro GUIOuttextwinloadfile 3
test dword[cloadnleft],80000000h
jnz near %%skip
mov eax,[cloadnposb]
cmp eax,[GUIfileentries]
jae near %%skip
mov eax,[cloadnposb]
shl eax,2
add eax,[selected_names]
GUIOuttextwin2load %1,%2,%3
%%skip
%endmacro
%macro GUIOuttextwinloaddir 3
test dword[cloadnleft],80000000h
jnz near %%skip
mov eax,[cloadnposb]
cmp eax,[GUIdirentries]
jae near %%skip
mov eax,[cloadnposb]
shl eax,2
add eax,[d_names]
add eax,8
GUIOuttextwin2load %1,%2,%3
%%skip
%endmacro
%macro GUIDisplayButtonHoleTu 7
mov dword[GUITemp],GUIIconDataButtonHole
cmp %4,%5
jne %%nofill
mov dword[GUITemp],GUIIconDataButtonFill
%%nofill
GUIDisplayIconWin %1,%2,%3,[GUITemp]
GUIDisplayTextu %1,%2+15,%3+3,%6,%7
%endmacro
%macro GUIDisplayButtonHole 5
mov dword[GUITemp],GUIIconDataButtonHole
cmp %4,%5
jne %%nofill
mov dword[GUITemp],GUIIconDataButtonFill
%%nofill
GUIDisplayIconWin %1,%2,%3,[GUITemp]
%endmacro
%macro GUIDisplayText 4 ; Text&Shadow
mov byte[GUItextcolor],202
cmp byte[GUIWincoladd],0
je %%text
mov byte[GUItextcolor],196
%%text
GUIOuttextwin2 %1,%2,%3,%4
add byte[GUItextcolor],15
GUIOuttextwin2 %1,%2-1,%3-1,%4
%endmacro
%macro GUIDisplayTextY 4 ; Yellow Text&Shadow
mov al,[GUIWincol]
mov [GUItextcolor],al
GUIOuttextwin2 %1,%2,%3,%4
mov byte[GUItextcolor],163
cmp byte[GUIWincoladd],0
je %%texty
mov byte[GUItextcolor],164
%%texty
GUIOuttextwin2 %1,%2-1,%3-1,%4
%endmacro
%macro GUIDisplayTextu 5 ; Text&Shadow With Underline
mov byte[GUItextcolor],202
cmp byte[GUIWincoladd],0
je %%textu
mov byte[GUItextcolor],196
%%textu
GUIOuttextwin2u %1,%2,%3,%4,%5
add byte[GUItextcolor],15
GUIOuttextwin2 %1,%2-1,%3-1,%4
%endmacro
%macro GUIDisplayTextG 4 ; Green Text&Shadow
mov byte[GUItextcolor],223
GUIOuttextwin2 %1,%2,%3,%4
mov byte[GUItextcolor],221
cmp byte[GUIWincoladd],0
je %%zero
mov byte[GUItextcolor],222
%%zero
GUIOuttextwin2 %1,%2-1,%3-1,%4
%endmacro
%macro GUIDisplayCheckboxP 4 ; Toggled Checkbox (Plain, no text)
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],0
je %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
%endmacro
%macro GUIDisplayCheckbox 5 ; Toggled Checkbox (Text)
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],0
je %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
GUIDisplayText %1,%2+15,%3+5,%5
%endmacro
%macro GUIDisplayCheckboxTn 6 ; Variable Checkbox (Text)
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],%5
jne %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
GUIDisplayText %1,%2+15,%3+5,%6
%endmacro
%macro GUIDisplayCheckboxu 6 ; Toggled Checkbox (Text Underline)
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],0
je %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
GUIDisplayTextu %1,%2+15,%3+5,%5,%6
%endmacro
%macro GUIDisplayCheckboxun 7 ; Set Var. Checkbox (Text Underline)
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],%5
jne %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
GUIDisplayTextu %1,%2+15,%3+5,%6,%7
%endmacro
%macro GUIDisplayCheckboxPn 5 ; Set Var. Checkbox
mov dword[GUITemp],GUIIconDataCheckBoxUC
cmp byte[%4],%5
jne %%nocheckbox
mov dword[GUITemp],GUIIconDataCheckBoxC
%%nocheckbox
GUIDisplayIconWin %1,%2,%3,[GUITemp]
%endmacro
%macro GUIDisplayBBoxS 6 ; Black Box W/Border
mov dword[GUIWincol],148+10 ; Minus right side
cmp byte[cwindrawn],1
jne %%noone
mov dword[GUIWincol],148+5
%%noone
cmp byte[cwindrawn],0
jne %%nozero
mov dword[GUIWincol],148
%%nozero
DrawGUIWinBox %1,%2,%3,%4,%5,%6
mov dl,[GUIWincol]
DrawGUIWinBox %1,%2,%3-3+2,%4,%3+1,dl
mov dl,[GUIWincol]
inc dl
DrawGUIWinBox %1,%2-1,%3,%2,%5,dl
mov dl,[GUIWincol]
add dl,4
DrawGUIWinBox %1,%2,%5+1,%4,%5-1,dl
%endmacro
%macro GUIDisplayBBox 6 ; Black Box W/Border
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
DrawGUIWinBox %1,%2,%3,%4,%5,%6
mov dl,[GUIWincol]
DrawGUIWinBox %1,%2,%3-3+2,%4,%3+1,dl
mov dl,[GUIWincol]
inc dl
DrawGUIWinBox %1,%2-1,%3,%2,%5,dl
mov dl,[GUIWincol]
add dl,4
DrawGUIWinBox %1,%2,%5+1,%4,%5-1,dl
mov dl,[GUIWincol]
add dl,3
DrawGUIWinBox %1,%4+2,%3,%4-3,%5,dl
%endmacro
%macro SetVidbufLoc 0
mov esi,ebx
mov eax,ebx
shl esi,8
shl eax,5
add esi,eax
add esi,16
add esi,[vidbuffer]
%endmacro
%macro GUIDrawTArea 1 ; win #id
mov dl,[GUIWincol]
inc dl
mov eax,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add ebx,10
mov ecx,eax
add ecx,[GUIwinsizex+%1*4]
mov esi,12
%%loop1
DrawGUILine
dec esi
jnz %%loop1
add dl,3
inc eax
DrawGUILine
sub ebx,13 ; set ebx to minY
dec eax ; set eax to minX
%endmacro
%macro DrawTabOn 1 ; %1 = array, ebp = offset, eax = minX, ebx = minY
push edi
mov esi,%1
mov ecx,8
add ecx,eax
%%skip
cmp byte[esi+ebp],0
jne %%read1
inc ebp
jmp %%skip
%%read1
cmp byte[esi+ebp],0
je %%ok1
inc esi
add ecx,6
jmp %%read1
%%ok1
mov dl,[GUIWincol]
add dl,4
inc eax
DrawGUILine
sub dl,2
mov esi,12
%%draw1
DrawGUILine
dec esi
jnz %%draw1
sub ebx,12
push ecx ; save X offset for next drawing step
dec eax
mov ecx,eax
mov esi,11
inc dl
%%draw2
DrawGUILine
dec esi
jnz %%draw2
sub ebx,11
push ebx ; save Y offset for next drawing step
mov cl,[GUIWincol]
mov [GUItextcolor],cl
add ebx,4
push ebx ; save label Yoff
mov edx,eax
add edx,6
push edx ; save label Xoff
SetVidbufLoc
mov edi,%1
add edi,ebp
call GUIOutputStringwin
pop edx
pop ebx
mov byte[GUItextcolor],163
cmp byte[GUIWincoladd],0
je %%nochange
mov byte[GUItextcolor],164
%%nochange
dec edx
dec ebx
SetVidbufLoc
mov edi,%1
add edi,ebp
call GUIOutputStringwin
mov byte[GUItextcolor],217 ; restore normal colour
pop ebx ; restore Yoff for drawing step
pop eax
inc eax ; restore and set Xoff for drawing step
mov ecx,eax
mov dl,[GUIWincol]
add dl,3
mov esi,12
%%draw3
DrawGUILine
dec esi
jnz %%draw3
sub ebx,13
inc eax
%%read2
mov esi,%1
cmp byte[esi+ebp],0
je %%ok2
inc ebp
jmp %%read2
%%ok2
pop edi
%endmacro
%macro DrawTabOff 1 ; %1 = array, ebp = offset, eax = minX, ebx = minY
push edi
mov esi,%1
mov ecx,8
add ecx,eax
%%skip
cmp byte[esi+ebp],0
jne %%read1
inc ebp
jmp %%skip
%%read1
cmp byte[esi+ebp],0
je %%ok1
inc esi
add ecx,6
jmp %%read1
%%ok1
mov dl,[GUIWincol]
add dl,3
inc eax
inc ebx
DrawGUILine
dec dl
push ecx ; save Xoff for next drawing step
dec eax
mov ecx,eax
mov esi,10
%%draw1
DrawGUILine
dec esi
jnz %%draw1
sub ebx,10
push ebx ; save Yoff for next drawing step
mov byte[GUItextcolor],202
cmp byte[GUIWincoladd],0
je %%nochange
mov byte[GUItextcolor],196
%%nochange
add ebx,4
push ebx ; save label Yoff
mov edx,eax
add edx,6
push edx ; save label Xoff
SetVidbufLoc
mov edi,%1
add edi,ebp
call GUIOutputStringwin
pop edx
pop ebx
add byte[GUItextcolor],15
dec edx
dec ebx
SetVidbufLoc
mov edi,%1
add edi,ebp
call GUIOutputStringwin
pop ebx ; restore Yoff for drawing step
pop eax
inc eax ; restore and set Xoff for drawing step
mov ecx,eax
mov dl,[GUIWincol]
mov esi,10
%%draw2
DrawGUILine
dec esi
jnz %%draw2
sub ebx,12
inc eax
%%read2
mov esi,%1
cmp byte[esi+ebp],0
je %%ok2
inc ebp
jmp %%read2
%%ok2
pop edi
%endmacro
%macro GUIDrawTabs 1 ; tabs/label array
mov ecx,[%1+4] ; total #
cmp ecx,0
je near %%nodraw
mov esi,[%1] ; active tab
mov ebp,8 ; set array offset at top of labels
%%loop2
dec esi ; check if tab is the current one
push ecx
push esi
jnz near %%disabled
DrawTabOn %1 ; draws tab, updates eax, ebx & ebp for next tab...
jmp near %%done
%%disabled
DrawTabOff %1 ; ... and autosizes the tab for its label
%%done
pop esi
pop ecx
dec ecx
jnz %%loop2
%%nodraw
%endmacro
%macro GUIDrawSlider 8 ; win #id, minX, width, Ypos, var, text, proc1, proc2
mov eax,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add eax,%2
add ebx,%4
mov ecx,eax
add ecx,%3
xor edx,edx
mov dl,215
sub dl,[GUIWincoladd]
DrawGUILine
inc ecx
inc eax
sub dl,13
DrawGUILine
xor eax,eax
%7 %5 ; proc1 == alters var correctly and puts result in al
mov dword[GUITemp],%2-4
add [GUITemp],eax
GUIDisplayIconWin %1,[GUITemp],%4-4,GUIIconDataSlideBar
%8 %5,%6 ; proc2 == alters text correctly and puts pointer in esi
mov [GUITemp],esi ; Display Value (Green)
GUIDisplayTextG %1,%2+%3+6,%4-1,[GUITemp]
%endmacro
%macro DrawBorderedBox 6;
; draw borders
mov dl,[GUIWincol]
DrawGUIWinBox %1,%2,%6,%4,%3,dl ; freezes if you replace %6 with %3-1
mov dl,[GUIWincol]
inc dl
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]
inc dl
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]
inc dl
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 [TextColorSp+2],al
mov al,[GUIWincol]
mov [TextColorSp],al
mov al,163
cmp byte[GUIWincoladd],0
je .zero
mov al,164
mov byte[GUItextcolor],164
.zero
mov [TextColorSp+1],al
%endmacro
%macro GUIOuttextwin2b 4 ; Special, yellow text
mov al,[TextColorSp]
mov [GUItextcolor],al
GUIOuttextwin2 %1,%2,%3,%4
mov al,[TextColorSp+1]
mov [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 pointer from \0 pointer gives us string length
push eax
GUIOuttextwin2c %1,%2,%3,ecx
pop eax
push ebx
pop ecx
call BlinkCursorCheck
cmp ebx,%4
pop ebx
jne near %%fixreg
inc byte[GUIBlinkCursorLoop]
cmp byte[GUIBlinkCursorLoop],30
jne %%four
mov byte[GUIBlinkCursorLoop],0
cmp byte[GUIBlinkCursor],' '
je %%three
mov byte[GUIBlinkCursor],' '
jmp %%four
%%three
mov byte[GUIBlinkCursor],'_'
%%four
imul eax,6 ; 6 pixels
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 [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 [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 DetermineChar 2
cmp al,%1
jne %%control
mov al,%2
%%control
%endmacro
; DGUIDisplay
DisplayGUILoad:
GUIDrawWindowBox 1,GUILoadDisp
GUIDisplayText 1,21,166,GUILoadText3
%ifdef __MSDOS__
GUIDisplayTextY 1,6,157,GUILoadText2
GUIDisplayText 1,21,182,GUILoadText4
%endif
GUIDisplayText 1,21,174,GUILoadText5
GUIDisplayText 1,6,16,GUILoadText7
GUIDisplayText 1,161,16,GUILoadText8
GUIDisplayText 1,146,172,GUILoadTextB
push ecx
push esi
xor ecx,ecx
mov esi,[ZRomPath]
.strlenloop
cmp byte[esi+ecx],0
je .foundend
inc ecx
jmp .strlenloop
.foundend
cmp ecx,39
jb .notoverflow
add esi,ecx
sub esi,39
.notoverflow
mov [GUITemp],esi
pop esi
pop ecx
GUIDisplayText 1,6,138,[GUITemp]
mov byte[GUItextcolor],202
cmp byte[GUIWincoladd],0
je .text
mov byte[GUItextcolor],196
.text
mov dword[cloadmaxlen],39
%ifndef __MSDOS__
cmp dword[GUIcurrentfilewin],0
je near .nodir
mov eax,[GUIcurrentdircursloc]
add eax,2
shl eax,2
add eax,[d_names]
mov eax,[eax]
mov [GUITemp],eax
GUIOuttextwin2l 1,6,158,[GUITemp]
add byte[GUItextcolor],15
GUIOuttextwin2l 1,5,157,[GUITemp]
jmp .nofiles
.nodir
cmp dword[GUIfileentries],0
je near .nofiles
mov eax,[GUIcurrentcursloc]
cmp eax,[GUIfileentries]
jae near .nofiles
shl eax,2
add eax,[selected_names]
mov eax,[eax]
mov [cloadnpos],eax
GUIOuttextwin2l 1,6,158,[cloadnpos]
add byte[GUItextcolor],15
GUIOuttextwin2l 1,5,157,[cloadnpos]
.nofiles ; Button
%endif
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .text2
mov byte[GUItextcolor],111
.text2
DrawGUIButton 1,186,165,228,176,GUILoadText9,1,0,0
; The Three Boxes
GUIDisplayBBoxS 1,5,25,144,134,167 ; 126 = 6 * 21, 112 = 7 * 16
GUIDisplayBBoxS 1,160,25,228,134,167 ; 78 = 6 * 13
GUIDisplayBBox 1,5,145,228,152,167 ; 126 = 6 * 21, 112 = 7 * 16
xor ebx,ebx ; Flash Code?
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] ; check if its in the Files box?
sub ebx,[GUIcurrentviewloc]
cmp dword[GUIcurrentfilewin],0
je .files
mov ebx,[GUIcurrentdircursloc]
sub ebx,[GUIcurrentdirviewloc]
.files
mov eax,ebx ; Draw 2 more boxes?
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 ; Green Shadow
GUIOuttextwin2 1,8,148, GUILoadTextA
cmp dword[GUIfileentries],0
jne .yesfiles
mov dword[GUIcurrentfilewin],1
.yesfiles
mov eax,[GUIfileentries]
sub eax,[GUIcurrentviewloc]
mov [cloadnleft],eax
mov eax,[GUIcurrentviewloc]
mov [cloadnposb],eax
mov dword[cloadmaxlen],23
GUIOuttextwinloadfile 1,8,29 ; Text/Shadow for Filename Box
GUIOuttextwinloadfile 1,8,29+7
GUIOuttextwinloadfile 1,8,29+7*2
GUIOuttextwinloadfile 1,8,29+7*3
GUIOuttextwinloadfile 1,8,29+7*4
GUIOuttextwinloadfile 1,8,29+7*5
GUIOuttextwinloadfile 1,8,29+7*6
GUIOuttextwinloadfile 1,8,29+7*7
GUIOuttextwinloadfile 1,8,29+7*8
GUIOuttextwinloadfile 1,8,29+7*9
GUIOuttextwinloadfile 1,8,29+7*10
GUIOuttextwinloadfile 1,8,29+7*11
GUIOuttextwinloadfile 1,8,29+7*12
GUIOuttextwinloadfile 1,8,29+7*13
GUIOuttextwinloadfile 1,8,29+7*14
mov eax,[GUIdirentries]
sub eax,[GUIcurrentdirviewloc]
mov [cloadnleft],eax
mov eax,[GUIcurrentdirviewloc]
mov [cloadnposb],eax
mov dword[cloadmaxlen],11
GUIOuttextwinloaddir 1,164,29 ; Text/Shadow for DIR Box
GUIOuttextwinloaddir 1,164,29+7
GUIOuttextwinloaddir 1,164,29+7*2
GUIOuttextwinloaddir 1,164,29+7*3
GUIOuttextwinloaddir 1,164,29+7*4
GUIOuttextwinloaddir 1,164,29+7*5
GUIOuttextwinloaddir 1,164,29+7*6
GUIOuttextwinloaddir 1,164,29+7*7
GUIOuttextwinloaddir 1,164,29+7*8
GUIOuttextwinloaddir 1,164,29+7*9
GUIOuttextwinloaddir 1,164,29+7*10
GUIOuttextwinloaddir 1,164,29+7*11
GUIOuttextwinloaddir 1,164,29+7*12
GUIOuttextwinloaddir 1,164,29+7*13
GUIOuttextwinloaddir 1,164,29+7*14
mov byte[GUItextcolor],221 ; Green Text
cmp byte[GUIWincoladd],0
je .zero4
mov byte[GUItextcolor],222
.zero4
GUIOuttextwin2 1,7,147, GUILoadTextA
xor ebx,ebx
mov bl,[GUILoadPos]
mov byte[GUILoadTextA+ebx],0
GUIDisplayButtonHole 1,9,163,byte[GUIloadfntype],0 ; Radio Buttons
GUIDisplayButtonHole 1,9,171,byte[GUIloadfntype],1
%ifdef __MSDOS__
GUIDisplayButtonHole 1,9,179,byte[GUIloadfntype],2
%endif
GUIDisplayCheckboxTn 1,10,187,showallext,1,GUILoadText6 ; Checkboxes
GUIDisplayCheckboxTn 1,144,177,ForceROMTiming,1,GUILoadTextC
GUIDisplayCheckboxTn 1,144,187,ForceROMTiming,2,GUILoadTextD
GUIDisplayCheckboxTn 1,184,177,ForceHiLoROM,1,GUILoadTextE
GUIDisplayCheckboxTn 1,184,187,ForceHiLoROM,2,GUILoadTextF
; Slidebar for Files
; 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
; Slidebar for DIR
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
ret
SECTION .data
GUILoadText1 db 'SELECT FILE TO LOAD:',0
%ifndef __MSDOS__
GUILoadText3 db 'LONG FILENAME',0
%else
GUILoadText2 db 'DISPLAY TYPE:',0
GUILoadText3 db 'WIN9X LONG FILENAME',0
GUILoadText4 db 'DOS 8.3 FORMAT',0
%endif
GUILoadText5 db 'SNES HEADER NAME',0
GUILoadText6 db 'SHOW ALL EXTENSIONS',0
GUILoadText7 db 'FILENAME',0
GUILoadText8 db 'DIRECTORY',0
GUILoadText9 db 'LOAD',0
NEWSYM GUILoadTextA, times 38 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
NEWSYM GUILoadPos, resb 1
SECTION .text
DisplayGUIReset: ; Reset Confirmation
GUIDrawWindowBox 12,GUIResetDisp
cmp byte[GUIWincoladd],0 ;Red Box around buttons
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 ; Buttons
DrawGUIButton 12,80,30,116,41,GUIResetText3,3,0,0
GUIDisplayTextY 12,6,16,GUIResetText1
ret
SECTION .data
GUIResetText1 db 'RESET: ARE YOU SURE ?',0
GUIResetText2 db 'YES',0
GUIResetText3 db 'NO',0
SECTION .text
DisplayGUIStates: ; Save/Load State Confirmation
GUIDrawWindowBox 14,GUIStatesDisp
cmp byte[GUIWincoladd],0 ; Red Box around buttons
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 ; Buttons
DrawGUIButton 14,80,30,116,41,GUIStatesText4,11,0,0
cmp byte[GUIStatesText5],1 ; Determines Load or Save box
je near .load
GUIDisplayTextY 14,6,16,GUIStatesText1
jmp .save
.load
GUIDisplayTextY 14,6,16,GUIStatesText2
.save
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: ; Pick Save State
GUIDrawWindowBox 2,GUIStateSelDisp
GUIDisplayTextY 2,6,16,GUIChoseSaveText1
mov byte[GUIChoseSaveText2],'0'
GUIDisplayText 2,21,31,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'1'
GUIDisplayText 2,41,31,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'2'
GUIDisplayText 2,61,31,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'3'
GUIDisplayText 2,81,31,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'4'
GUIDisplayText 2,101,31,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'5'
GUIDisplayText 2,21,46,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'6'
GUIDisplayText 2,41,46,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'7'
GUIDisplayText 2,61,46,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'8'
GUIDisplayText 2,81,46,GUIChoseSaveText2
mov byte[GUIChoseSaveText2],'9'
GUIDisplayText 2,101,46,GUIChoseSaveText2
GUIDisplayTextY 2,6,61,GUIChoseSlotText1
mov eax,[current_zst]
mov dl,10
div dl
add al,'0'
mov [GUIChoseSaveText2],ah
mov [GUIChoseSlotTextX],al
mov dword[GUITemp],GUIIconDataButtonHole ; Radio Buttons
GUIDisplayButtonHole 2,10,28,byte[GUIChoseSaveText2],0
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
GUIDisplayBBox 2,72,59,90,66,167 ; Save Slot Frameskip +/- Box
GUIDisplayTextG 2,83,61,GUIChoseSlotTextX
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .slotzero5
mov byte[GUItextcolor],211
.slotzero5
DrawGUIButton 2,94,59,102,67,GUIChoseSlotTextY,80,-2,-1
DrawGUIButton 2,105,59,113,67,GUIChoseSlotTextZ,81,-2,-1
ret
SECTION .data
GUIChoseSaveText1 db 'SELECT SAVE SLOT:',0
GUIChoseSaveText2 db '-',0
GUIChoseSlotText1 db 'SLOT LEVEL:',0
GUIChoseSlotTextX db '-',0
GUIChoseSlotTextY db '+',0
GUIChoseSlotTextZ 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]
inc dl
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,[GUIwinposx+9*4]
mov ebx,[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,[GUIwinposx+%1*4]
mov ebx,[GUIwinposy+%1*4]
add eax,%2+1
add ebx,%3+1
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+4,%3+3,GUIGameDisplayKy
mov byte[GUItextcolor],221
cmp byte[GUIWincoladd],0
je %%zero
mov byte[GUItextcolor],222
%%zero
GUIOuttextwin2 %1,%2+3,%3+2,GUIGameDisplayKy
DGOptnsBorderBox %1,%2,%3
%endmacro
%macro DGOptnsDrawBox2 3
mov eax,[GUIwinposx+3*4]
mov ebx,[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 GUIInputDispAll 1
GUIInputDispKey 45,102,%1upk ; Up
GUIInputDispKey 45,112,%1downk ; Down
GUIInputDispKey 45,122,%1leftk ; Left
GUIInputDispKey 45,132,%1rightk ; Right
GUIInputDispKey 45,142,%1startk ; Start
GUIInputDispKey 45,152,%1selk ; Select
GUIInputDispKey 85,102,%1Ak ; A
GUIInputDispKey 85,112,%1Bk ; B
GUIInputDispKey 85,122,%1Xk ; X
GUIInputDispKey 85,132,%1Yk ; Y
GUIInputDispKey 85,142,%1Lk ; L
GUIInputDispKey 85,152,%1Rk ; R
GUIInputDispKey 125,102,%1Xtk ; X Turbo
GUIInputDispKey 125,112,%1Ytk ; Y Turbo
GUIInputDispKey 125,122,%1Ltk ; L Turbo
GUIInputDispKey 165,102,%1Atk ; A Turbo
GUIInputDispKey 165,112,%1Btk ; B Turbo
GUIInputDispKey 165,122,%1Rtk ; R Turbo
GUIInputDispKey 125,142,%1DLk ; Down-Left
GUIInputDispKey 125,152,%1DRk ; Down-Right
GUIInputDispKey 165,142,%1ULk ; Up-Left
GUIInputDispKey 165,152,%1URk ; Up-Right
%endmacro
%macro GUIInputDispKey 3
mov eax,[%3]
mov [GUIInputTextE],eax
DGOptnsDrawBox2 %1,%2,[GUIInputTextE]
%endmacro
DisplayGUIInput: ; Player Select, Joystick/keyboard Type List, Button Assignments
GUIDrawWindowBox 3,GUIInputDisp
mov eax,[GUIInputTabs]
dec al
mov [cplayernum],al
GUIDrawTArea 3
GUIDrawTabs GUIInputTabs
GUIDisplayTextY 3,6,26,GUIInputTextA
movzx eax,byte[cplayernum]
mov ebx,[GUIInputRefP+eax*4]
movzx ebx,byte[ebx]
cmp byte[GUIFreshInputSelect],0
je .notfreshinput
pushad
mov byte[GUIFreshInputSelect],0
mov dword[GUIJT_viewable],5
mov eax,[NumInputDevices]
mov [GUIJT_entries],eax
mov [GUIJT_offset],ebx
mov eax,GUIcurrentinputviewloc
mov [GUIJT_currentviewloc],eax
mov eax,GUIcurrentinputcursloc
mov [GUIJT_currentcursloc],eax
call GUIGenericJumpTo
popad
.notfreshinput
mov al,bl
mov ebx,eax
shl eax,4
add eax,ebx
add eax,GUIInputNames
mov [GUITemp],eax
GUIDisplayTextY 3,6+54,83,[GUITemp] ; CDV
GUIDisplayTextY 3,6,83,GUIInputTextA1
GUIDisplayTextY 3,6,94,GUIInputTextB
GUIDisplayText 3,6,104,GUIInputTextB1
GUIDisplayText 3,6,114,GUIInputTextB2
GUIDisplayText 3,6,124,GUIInputTextB3
GUIDisplayText 3,6,134,GUIInputTextB4
GUIDisplayText 3,6,144,GUIInputTextB5
GUIDisplayText 3,6,154,GUIInputTextB6
GUIDisplayText 3,76,104,GUIInputTextC1
GUIDisplayText 3,76,114,GUIInputTextC2
GUIDisplayText 3,76,124,GUIInputTextC3
GUIDisplayText 3,76,134,GUIInputTextC4
GUIDisplayText 3,76,144,GUIInputTextC5
GUIDisplayText 3,76,154,GUIInputTextC6
GUIDisplayTextY 3,116,94,GUIInputTextC
GUIDisplayText 3,156,104,GUIInputTextC1
GUIDisplayText 3,156,114,GUIInputTextC2
GUIDisplayText 3,156,124,GUIInputTextC6
GUIDisplayText 3,116,104,GUIInputTextC3
GUIDisplayText 3,116,114,GUIInputTextC4
GUIDisplayText 3,116,124,GUIInputTextC5
GUIDisplayTextY 3,113,134,GUIInputTextD
GUIDisplayText 3,153,144,GUIInputTextD1
GUIDisplayText 3,153,154,GUIInputTextD2
GUIDisplayText 3,113,144,GUIInputTextD3
GUIDisplayText 3,113,154,GUIInputTextD4
%ifdef __MSDOS__
GUIDisplayCheckboxu 3,105,160,SidewinderFix,GUIInputTextE4,0
cmp byte[cplayernum],0
jne .notp1
GUIDisplayCheckboxu 3,5,190,pl1p209,GUIInputTextE5,4
.notp1
cmp byte[cplayernum],1
jne .notp2
GUIDisplayCheckboxu 3,5,190,pl2p209,GUIInputTextE5,4
.notp2
cmp byte[cplayernum],2
jne .notp3
GUIDisplayCheckboxu 3,5,190,pl3p209,GUIInputTextE5,4
.notp3
cmp byte[cplayernum],3
jne .notp4
GUIDisplayCheckboxu 3,5,190,pl4p209,GUIInputTextE5,4
.notp4
cmp byte[cplayernum],4
jne .notp5
GUIDisplayCheckboxu 3,5,190,pl5p209,GUIInputTextE5,4
.notp5
%endif
GUIDisplayCheckboxu 3,5,160,GameSpecificInput,GUIInputTextE6,0
GUIDisplayCheckboxu 3,5,170,AllowUDLR,GUIInputTextE7,0
GUIDisplayCheckboxu 3,105,170,Turbo30hz,GUIInputTextE8,0
GUIDisplayCheckboxu 3,5,180,pl12s34,GUIInputTextE9,0
DrawGUIButton 3,123,34,153,45,GUIInputTextE1,14,0,0 ; Buttons
DrawGUIButton 3,123,50,177,61,GUIInputTextE2,40,0,0
%ifdef __MSDOS__
DrawGUIButton 3,123,66,183,77,GUIInputTextE3,15,0,0
%endif
GUIDisplayBBoxS 3,5,34,107,77,167 ; Main Box
mov ebx,[GUIcurrentinputcursloc]
sub ebx,[GUIcurrentinputviewloc]
mov eax,ebx
lea ebx,[ebx*8]
add ebx,36
DrawGUIWinBox2 3,5,107,7,224
mov eax,[GUIcurrentinputviewloc] ; Text&Shadow inside Main Box
shl eax,4
add eax,[GUIcurrentinputviewloc]
add eax,GUIInputNames
mov [GUITemp],eax
GUIDisplayTextG 3,11,38,[GUITemp]
add dword[GUITemp],17
GUIDisplayTextG 3,11,38+8,[GUITemp]
add dword[GUITemp],17
GUIDisplayTextG 3,11,38+8*2,[GUITemp]
add dword[GUITemp],17
GUIDisplayTextG 3,11,38+8*3,[GUITemp]
add dword[GUITemp],17
GUIDisplayTextG 3,11,38+8*4,[GUITemp]
; Sidebar
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
; Hotkey Boxes
cmp byte[cplayernum],0
jne near .notpl1
GUIInputDispAll pl1
.notpl1
cmp byte[cplayernum],1
jne near .notpl2
GUIInputDispAll pl2
.notpl2
cmp byte[cplayernum],2
jne near .notpl3
GUIInputDispAll pl3
.notpl3
cmp byte[cplayernum],3
jne near .notpl4
GUIInputDispAll pl4
.notpl4
cmp byte[cplayernum],4
jne near .notpl5
GUIInputDispAll pl5
.notpl5
DGOptnsBorderBox 3,44,101 ; Box borders, keep them at bottom
DGOptnsBorderBox 3,44,111
DGOptnsBorderBox 3,44,121
DGOptnsBorderBox 3,44,131
DGOptnsBorderBox 3,44,141
DGOptnsBorderBox 3,44,151
DGOptnsBorderBox 3,84,101
DGOptnsBorderBox 3,84,111
DGOptnsBorderBox 3,84,121
DGOptnsBorderBox 3,84,131
DGOptnsBorderBox 3,84,141
DGOptnsBorderBox 3,84,151
DGOptnsBorderBox 3,124,101
DGOptnsBorderBox 3,124,111
DGOptnsBorderBox 3,124,121
DGOptnsBorderBox 3,124,141
DGOptnsBorderBox 3,124,151
DGOptnsBorderBox 3,164,101
DGOptnsBorderBox 3,164,111
DGOptnsBorderBox 3,164,121
DGOptnsBorderBox 3,164,141
DGOptnsBorderBox 3,164,151
ret
SECTION .data
GUIInputTabs dd 1,5
db '#1',0
db '#2',0
db '#3',0
db '#4',0
db '#5',0
GUIInputRefP dd pl1contrl,pl2contrl,pl3contrl,pl4contrl,pl5contrl
GUIInputTextA db 'DEVICE:',0
GUIInputTextA1 db 'CURRENT:',0
GUIInputTextB db 'KEYS:',0
GUIInputTextB1 db ' UP',0
GUIInputTextB2 db ' DOWN',0
GUIInputTextB3 db ' LEFT',0
GUIInputTextB4 db ' RIGHT',0
GUIInputTextB5 db ' START',0
GUIInputTextB6 db 'SELECT',0
GUIInputTextC db 'TURBO:',0
GUIInputTextC1 db 'A',0
GUIInputTextC2 db 'B',0
GUIInputTextC3 db 'X',0
GUIInputTextC4 db 'Y',0
GUIInputTextC5 db 'L',0
GUIInputTextC6 db 'R',0
GUIInputTextD db 'DIAGONALS:',0
GUIInputTextD1 db 'UL',0
GUIInputTextD2 db 'UR',0
GUIInputTextD3 db 'DL',0
GUIInputTextD4 db 'DR',0
GUIInputTextE dd 0
GUIInputTextE1 db 'SET',0
GUIInputTextE2 db 'SET KEYS',0
%ifdef __MSDOS__
GUIInputTextE3 db 'CALIBRATE',0
GUIInputTextE4 db 'SIDEWINDER FIX',0
GUIInputTextE5 db 'USE JOYSTICK PORT 209H',0
%endif
GUIInputTextE6 db 'GAME SPECIFIC',0
GUIInputTextE7 db 'ALLOW U+D/L+R',0
GUIInputTextE8 db 'TURBO AT 30HZ',0
GUIInputTextE9 db 'USE PL3/4 AS PL1/2',0
GUIFreshInputSelect db 1
SECTION .bss
GUIIStA resd 3
GUIcurrentinputviewloc resd 1
GUIcurrentinputcursloc resd 1
SECTION .text
DisplayGUIOption: ; Emu Options
GUIDrawWindowBox 4,GUIOptionDisp
%ifndef __WIN32__
cmp byte[ShowMMXSupport],1
jne near .nommx
%endif
GUIDisplayTextY 4,11,13,GUIOptionTextA
cmp byte[ShowMMXSupport],1
jne near .nommx
GUIDisplayCheckboxu 4,11,18,MMXSupport,GUIOptionTextA1,7
.nommx
%ifdef __WIN32__
GUIDisplayCheckboxu 4,11,28,PauseFocusChange,GUIOptionTextA2,13
GUIDisplayCheckboxu 4,11,38,HighPriority,GUIOptionTextA3,16
GUIDisplayCheckboxu 4,11,48,DisableScreenSaver,GUIOptionTextA4,0
%endif
GUIDisplayTextY 4,11,63,GUIOptionTextB
GUIDisplayCheckboxu 4,11,68,newengen,GUIOptionTextB1,4
cmp byte[newengen],0
jne near .newengen
GUIDisplayCheckboxu 4,11,78,bgfixer,GUIOptionTextB2,4
.newengen
GUIDisplayTextY 4,140,63,GUIOptionTextF
GUIDisplayButtonHoleTu 4,143,70,byte[ScreenShotFormat],0,GUIOptionTextF1,2
%ifndef NO_PNG
GUIDisplayButtonHoleTu 4,143,80,byte[ScreenShotFormat],1,GUIOptionTextF2,2
%endif
GUIDisplayTextY 4,11,93,GUIOptionTextC
GUIDisplayCheckboxu 4,11,98,AutoPatch,GUIOptionTextC1,7
GUIDisplayCheckboxu 4,11,108,DisplayInfo,GUIOptionTextC2,3
GUIDisplayCheckboxu 4,11,118,RomInfo,GUIOptionTextC3,4
GUIDisplayTextY 4,11,133,GUIOptionTextD
GUIDisplayCheckboxu 4,11,138,FPSAtStart,GUIOptionTextD1,5
GUIDisplayCheckboxu 4,11,148,TimerEnable,GUIOptionTextD2,5
cmp byte[TimerEnable],1
jne near .noclock
GUIDisplayCheckboxu 4,89,148,TwelveHourClock,GUIOptionTextD3,0
GUIDisplayCheckboxu 4,11,158,ClockBox,GUIOptionTextD4,13
.noclock
GUIDisplayTextY 4,11,173,GUIOptionTextE
GUIDisplayCheckboxu 4,11,178,SmallMsgText,GUIOptionTextE1,4
GUIDisplayCheckboxu 4,11,188,GUIEnableTransp,GUIOptionTextE2,4
ret
SECTION .data
GUIOptionTextA db 'SYSTEM:',0
GUIOptionTextA1 db 'ENABLE MMX SUPPORT',0
%ifdef __WIN32__
GUIOptionTextA2 db 'PAUSE EMU IN BACKGROUND',0
GUIOptionTextA3 db 'INCREASE EMU PRIORITY',0
GUIOptionTextA4 db 'DISABLE POWER MANAGEMENT',0
%endif
NEWSYM ShowMMXSupport, db 2
GUIOptionTextB db 'GFX ENGINES:',0
GUIOptionTextB1 db 'USE NEW GFX ENG',0
GUIOptionTextB2 db 'USE ALT OLD GFX ENG',0
GUIOptionTextC db 'ROM:',0
GUIOptionTextC1 db 'ENABLE IPS AUTO-PATCHING',0
GUIOptionTextC2 db 'SHOW ROM INFO ON LOAD',0
GUIOptionTextC3 db 'LOG ROM INFO',0
GUIOptionTextD db 'OVERLAYS:',0
GUIOptionTextD1 db 'SHOW FPS CNTR ON EMU LOAD',0
GUIOptionTextD2 db 'SHOW CLOCK',0
GUIOptionTextD3 db '12 HOUR MODE',0
GUIOptionTextD4 db 'SHOW CLOCK BOX',0
GUIOptionTextE db 'MESSAGES:',0
GUIOptionTextE1 db 'USE SMALL MESSAGE TEXT',0
GUIOptionTextE2 db 'USE TRANSPARENT TEXT',0
GUIOptionTextF db 'SSHOTS:',0
GUIOptionTextF1 db 'BMP',0
%ifndef NO_PNG
GUIOptionTextF2 db 'PNG',0
%endif
SECTION .text
%macro NTSCslidSet 1 ; slider variable
mov al,[%1]
add al,100
%endmacro
%macro NTSCslidText 2 ; slider var, text
mov dword[%2],' '
mov esi,%2+3
mov al,[%1]
mov bl,10
test al,128
jz %%asciilp
xor al,255
inc al
%%asciilp ; turns decimal into ascii
xor ah,ah
div bl
add ah,48
mov [esi],ah
dec esi
cmp al,0
jne %%asciilp
test byte[%1],128
jz %%pos
mov byte[esi],'-'
%%pos
mov esi,%2
%endmacro
DisplayGUIVideo:
cmp byte[TripBufAvail],0 ; Check features
jne .notexttb
%ifdef __MSDOS__
mov byte[Triplebufen],0
%endif
.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 .no2xsaien
%ifdef __MSDOS__
mov byte[Triplebufen],0
%endif
mov byte[hqFilter],0
mov byte[scanlines],0
mov byte[antienab],0
.no2xsaien
cmp byte[hqFilter],0
je .nohqen
mov byte[En2xSaI],0
mov byte[scanlines],0
mov byte[antienab],0
.nohqen
GUIDrawWindowBox 5,GUIVideoDisp
xor eax,eax
mov al,[cvidmode]
cmp byte[GUINTVID+eax],0
jne .ntsc
mov byte[NTSCFilter],0
mov dword[GUIVntscTab],0
cmp byte[GUIVideoTabs],0
jne .ntsc
mov byte[GUIVideoTabs],1
.ntsc
GUIDrawTArea 5
GUIDrawTabs GUIVideoTabs
cmp byte[NTSCFilter],0
je near .nontsc
GUIDrawTabs GUIVntscTab
.nontsc
cmp dword[GUIVideoTabs],1 ; Video Modes List/Options Tab
jne near .notmodestab
DrawGUIButton 5,128,30,164,41,GUIVideoTextA4,4,0,0 ; Mode Set Button
%ifndef __MSDOS__ ; Legend
GUIDisplayTextY 5,130,50,GUIVideoTextA1
GUIDisplayText 5,130,58,GUIVideoTextA1a
GUIDisplayText 5,130,66,GUIVideoTextA1b
GUIDisplayText 5,130,74,GUIVideoTextA1c
GUIDisplayText 5,130,82,GUIVideoTextA1d
GUIDisplayText 5,130,90,GUIVideoTextA1e
%ifdef __OPENGL__
GUIDisplayText 5,130,98,GUIVideoTextA1f
%endif
DrawGUIButton 5,180,115,216,126,GUIVideoTextA4,12,0,0 ; Custom Set Button
GUIDisplayText 5,130,120,GUIVideoTextA2
GUIDisplayText 5,180,135,GUIVideoTextA2a
GUIDisplayBBox 5,130,130,170,140,167
GUIDisplayBBox 5,191,130,231,140,167
pushad
call GetCustomXY
popad
GUIOuttextwin2d 5,138,133,GUICustomX,4
GUIOuttextwin2d 5,199,133,GUICustomY,4
%endif
GUIDisplayBBoxS 5,5,26,115,189,167 ; Video Modes Box
DrawSlideBarWin 5,117,34,[GUIcurrentvideoviewloc],[NumVideoModes],20,148,GUIVStA
cmp byte[GUICHold],5 ; Scrollbar
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,182,GUIIconDataDownArrow
cmp byte[GUICHold],6
jne .noholdd
sub byte[GUIWincoladd],3
.noholdd
mov ebx,[GUIcurrentvideocursloc] ; Box
sub ebx,[GUIcurrentvideoviewloc]
lea ebx,[ebx*8]
add ebx,28
DrawGUIWinBox2 5,5,115,7,224
mov byte[GUItextcolor],223 ; Text in Box
mov eax,[GUIcurrentvideoviewloc]
mov ebx,eax
shl eax,4
add eax,ebx
add eax,ebx
add eax,GUIVideoModeNames
mov [GUITemp],eax
GUIDisplayTextG 5,11,30,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*2,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*3,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*4,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*5,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*6,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*7,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*8,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*9,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*10,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*11,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*12,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*13,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*14,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*15,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*16,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*17,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*18,[GUITemp]
add dword[GUITemp],18
GUIDisplayTextG 5,11,30+8*19,[GUITemp]
xor eax,eax ; Mode Value
mov al,[cvidmode]
mov ebx,eax
shl eax,4
add eax,ebx
add eax,ebx
add eax,GUIVideoModeNames
mov [GUITemp],eax
GUIDisplayTextY 5,7,194,GUIVideoTextA3
GUIDisplayTextY 5,91,194,[GUITemp] ; (5,61,194)
.notmodestab
; Filters tab
cmp dword[GUIVideoTabs],2
jne near .notfilterstab
; Video Filters
%ifdef __MSDOS__
cmp byte[smallscreenon],1
je .nocheckboxw
cmp byte[ScreenScale],1
je .notexthq4xa
%endif
xor eax,eax ; Interpolations
mov al,[cvidmode]
%ifdef __WIN32__
cmp byte[GUIDSIZE+eax],0
%else
cmp byte[GUII2VID+eax],0
%endif
je near .notext3
GUIDisplayTextY 5,13,30,GUIVideoTextB1
GUIDisplayCheckboxu 5,18,35,antienab,GUIVideoTextB1a,0
.notext3
%ifdef __MSDOS__ ; Eagle Filter
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIEAVID+eax],0
je near .notext4
GUIDisplayTextY 5,13,30,GUIVideoTextB1
GUIDisplayCheckboxu 5,18,35,antienab,GUIVideoTextB1b,9
.notext4
%endif
%ifdef __OPENGL__
xor eax,eax ; Bilinear
mov al,[cvidmode]
cmp byte[GUIBIFIL+eax],0
je near .nocheckboxe
GUIDisplayTextY 5,13,30,GUIVideoTextB1
GUIDisplayCheckboxu 5,18,35,BilinearFilter,GUIVideoTextB1c,1
.nocheckboxe
%endif
xor eax,eax ; NTSC filter
mov al,[cvidmode]
cmp byte[GUINTVID+eax],0
je near .nocheckboxbf
GUIDisplayCheckboxu 5,128,35,NTSCFilter,GUIVideoTextB1d,0
.nocheckboxbf
cmp byte[MMXSupport],0
je near .nocheckboxx
xor eax,eax ; Kreed 2x filters
mov al,[cvidmode]
%ifdef __MSDOS__
cmp byte[GUI2xVID+eax],0
%else
cmp byte[GUIDSIZE+eax],0
%endif
je near .nocheckboxx
GUIDisplayCheckboxun 5,18,45,En2xSaI,1,GUIVideoTextB1e,2 ;2x
GUIDisplayCheckboxun 5,128,45,En2xSaI,2,GUIVideoTextB1f,6 ;Seagle
GUIDisplayCheckboxun 5,18,55,En2xSaI,3,GUIVideoTextB1g,2 ;S2x
.nocheckboxx
cmp byte[MMXSupport],0
je near .notexthq4xa
xor eax,eax ; Hq*x
mov al,[cvidmode]
cmp byte[GUIHQ2X+eax],0
je near .notexthq2xa
%ifdef __MSDOS__
GUIDisplayCheckboxu 5,128,55,hqFilter,GUIVideoTextB1h,1
%else
GUIDisplayCheckboxu 5,128,55,hqFilter,GUIVideoTextB1i,1
cmp byte[hqFilter],0
je near .notexthq4xa
GUIDisplayButtonHoleTu 5,128,68,byte[hqFilterlevel],2,GUIVideoTextB1j,1
jmp .notexthq2xa
%endif
jmp .notexthq4xa
.notexthq2xa
%ifndef __MSDOS__
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ3X+eax],0
je near .notexthq3xa
GUIDisplayButtonHoleTu 5,158,68,byte[hqFilterlevel],3,GUIVideoTextB1k,0
.notexthq3xa
xor eax,eax
mov al,[cvidmode]
cmp byte[GUIHQ4X+eax],0
je near .notexthq4xa
GUIDisplayButtonHoleTu 5,188,68,byte[hqFilterlevel],4,GUIVideoTextB1l,0
%endif
.notexthq4xa
xor eax,eax ; Scanlines
mov al,[cvidmode]
%ifdef __MSDOS__
cmp byte[GUISLVID+eax],0
%else
cmp byte[GUIDSIZE+eax],0
%endif
je near .nocheckboxb
GUIDisplayTextY 5,13,80,GUIVideoTextB2 ; Scanlines text
GUIDisplayButtonHoleTu 5,18,87,byte[scanlines],0,GUIVideoTextB2a,1 ; None
GUIDisplayButtonHoleTu 5,168,87,byte[scanlines],1,GUIVideoTextB2d,0 ; Full
.nocheckboxb
%ifdef __MSDOS__
cmp byte[ScreenScale],1
je .nocheckboxw
%endif
xor eax,eax
mov al,[cvidmode]
%ifdef __MSDOS__
cmp byte[GUIHSVID+eax],0
%else
cmp byte[GUIDSIZE+eax],0
%endif
je near .nocheckboxw
GUIDisplayButtonHoleTu 5,68,87,byte[scanlines],2,GUIVideoTextB2b,0 ; 25%
GUIDisplayButtonHoleTu 5,118,87,byte[scanlines],3,GUIVideoTextB2c,0 ; 50%
.nocheckboxw
GUIDisplayTextY 5,13,110,GUIVideoTextB3 ; Misc Filters
GUIDisplayCheckboxu 5,18,115,GrayscaleMode,GUIVideoTextB3a,0 ; Grayscale
xor eax,eax ; Hires Mode7
mov al,[cvidmode]
cmp byte[GUIM7VID+eax],0
je near .nocheckboxm72
cmp byte[newengen],0
je near .nocheckboxm72
GUIDisplayCheckboxu 5,128,115,Mode7HiRes16b,GUIVideoTextB3b,0
.nocheckboxm72
; Monitor Refresh
%ifndef __UNIXSDL__ ; VSync
GUIDisplayTextY 5,13,140,GUIVideoTextB4
GUIDisplayCheckboxu 5,18,145,vsyncon,GUIVideoTextB4a,0
%endif
%ifdef __WIN32__
xor eax,eax ; Triple Buffering
mov al,[cvidmode]
cmp byte[GUIWFVID+eax],0
je near .nocheckboxslw2
GUIDisplayCheckboxu 5,128,145,TripleBufferWin,GUIVideoTextB4b,0
.nocheckboxslw2
%endif
%ifdef __MSDOS__
xor eax,eax
mov al,[cvidmode]
cmp byte[GUITBVID+eax],0
je near .nocheckboxtbb
cmp byte[TripBufAvail],0
je near .nocheckboxtbb
GUIDisplayCheckboxu 5,128,145,Triplebufen,GUIVideoTextB4b,0
.nocheckboxtbb
%endif
%ifndef __MSDOS__
xor eax,eax ; Keep 4:3 Ratio
mov al,[cvidmode]
cmp byte[GUIKEEP43+eax],0
je near .nocheckboxk43
pushad
call Keep43Check
popad
cmp byte[ShowKeep43],0
je near .nocheckboxk43
GUIDisplayTextY 5,13,170,GUIVideoTextB5
GUIDisplayCheckboxu 5,18,175,Keep4_3Ratio,GUIVideoTextB5a,8
.nocheckboxk43
%endif
%ifdef __MSDOS__
xor eax,eax ; Small Screen
mov al,[cvidmode]
cmp byte[GUISSVID+eax],0
je near .nocheckbox3b
GUIDisplayTextY 5,13,170,GUIVideoTextB5
GUIDisplayCheckboxu 5,18,175,smallscreenon,GUIVideoTextB5b,1
.nocheckbox3b
xor eax,eax ; Full/Widescreen
mov al,[cvidmode]
cmp byte[GUIFSVID+eax],0
je near .notext5
cmp byte[GUIWSVID+eax],0
jne near .notext4a
GUIDisplayTextY 5,13,170,GUIVideoTextB5
GUIDisplayCheckboxu 5,128,175,ScreenScale,GUIVideoTextB5c,6
jmp .notext5
.notext4a
GUIDisplayTextY 5,13,170,GUIVideoTextB5
GUIDisplayCheckboxu 5,128,175,ScreenScale,GUIVideoTextB5d,6
.notext5
%endif
.notfilterstab
cmp dword[GUIVntscTab],1 ; NTSC Tab
jne near .notntsctab
GUIDisplayCheckboxu 5,5,25,NTSCBlend,GUIVideoTextC1a,0
GUIDisplayCheckboxu 5,135,25,NTSCRef,GUIVideoTextC1b,0
DrawGUIButton 5,8,166,67,177,GUIVideoTextC3a,81,0,0
DrawGUIButton 5,72,166,119,177,GUIVideoTextC3b,82,0,0
DrawGUIButton 5,124,166,147,177,GUIVideoTextC3c,83,0,0
DrawGUIButton 5,152,166,217,177,GUIVideoTextC3d,84,0,0
DrawGUIButton 5,102,186,137,197,GUIVideoTextCD1,37,0,0
DrawGUIButton 5,148,186,207,197,GUIVideoTextCD2,39,0,0
GUIDisplayTextY 5,7,46,GUIVideoTextC2a
GUIDisplayTextY 5,7,66,GUIVideoTextC2b
GUIDisplayTextY 5,7,86,GUIVideoTextC2c
GUIDisplayTextY 5,7,106,GUIVideoTextC2d
GUIDisplayTextY 5,7,126,GUIVideoTextC2e
GUIDisplayTextY 5,7,156,GUIVideoTextC3
GUIDrawSlider 5,8,200,56,NTSCHue,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,76,NTSCSat,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,96,NTSCCont,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,116,NTSCBright,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,136,NTSCSharp,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
.notntsctab
cmp dword[GUIVntscTab],2 ; Advanced NTSC Options Tab
jne near .notadvntsctab
DrawGUIButton 5,102,186,137,197,GUIVideoTextCD1,38,0,0
DrawGUIButton 5,148,186,207,197,GUIVideoTextCD2,39,0,0
GUIDisplayTextY 5,7,36,GUIVideoTextD1a
GUIDisplayTextY 5,7,56,GUIVideoTextD1b
GUIDisplayTextY 5,7,76,GUIVideoTextD1c
GUIDisplayTextY 5,7,96,GUIVideoTextD1d
GUIDisplayTextY 5,7,116,GUIVideoTextD1e
GUIDisplayTextY 5,7,136,GUIVideoTextD1f
GUIDrawSlider 5,8,200,46,NTSCGamma,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,66,NTSCRes,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,86,NTSCArt,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,106,NTSCFringe,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,126,NTSCBleed,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
GUIDrawSlider 5,8,200,146,NTSCWarp,GUIVideoTextCD3,NTSCslidSet,NTSCslidText
.notadvntsctab
ret
SECTION .data
GUIVideoTabs dd 1,2
db 'MODES',0
db 'FILTERS',0
GUIVntscTab dd 0,2
db 'NTSC',0
db 'ADV NTSC',0
%ifndef __MSDOS__ ; Modes Tab
GUIVideoTextA1 db 'LEGEND:',0
GUIVideoTextA1a db 'D = ALLOW FILTERS',0
GUIVideoTextA1b db 'S = STRETCH',0
GUIVideoTextA1c db 'R = KEEP 8:7 RATIO',0
GUIVideoTextA1d db 'W = WINDOWED',0
GUIVideoTextA1e db 'F = FULLSCREEN',0
%ifdef __OPENGL__
GUIVideoTextA1f db 'O = USES OPENGL',0
%endif
GUIVideoTextA2 db 'CUSTOM:',0
GUIVideoTextA2a db 'X',0
%endif
GUIVideoTextA3 db 'CURRENT:',0
GUIVideoTextA4 db 'SET',0 ; set button
GUIVideoTextB1 db 'VIDEO FILTERS:',0 ; Filters.Exclusive
GUIVideoTextB1a db 'INTERPOLATION',0 ; -y
%ifdef __MSDOS__
GUIVideoTextB1b db 'EAGLE ENGINE',0 ; same loc at interpolation -y
%endif
%ifdef __OPENGL__
GUIVideoTextB1c db 'BILINEAR FILTER',0
%endif
GUIVideoTextB1d db 'NTSC FILTER',0
GUIVideoTextB1e db '2XSAI ENGINE',0
GUIVideoTextB1f db 'SUPER EAGLE',0
GUIVideoTextB1g db 'SUPER 2XSAI',0
%ifdef __MSDOS__
GUIVideoTextB1h db 'HQ2X',0
%else
GUIVideoTextB1i db 'HQ FILTER',0
GUIVideoTextB1j db '2X',0
GUIVideoTextB1k db '3X',0
GUIVideoTextB1l db '4X',0
%endif
GUIVideoTextB2 db 'SCANLINES:',0 ; Filters.Scanlines
GUIVideoTextB2a db 'NONE',0
GUIVideoTextB2b db '25%',0
GUIVideoTextB2c db '50%',0
GUIVideoTextB2d db 'FULL',0
GUIVideoTextB3 db 'MISC FILTERS:',0 ; Filters.Other
GUIVideoTextB3a db 'GRAYSCALE MODE',0 ; -v8
GUIVideoTextB3b db 'HI-RES MODE 7',0 ;
%ifndef __UNIXSDL__
GUIVideoTextB4 db 'MONITOR SYNC:',0 ; Video.Sync
GUIVideoTextB4a db 'VSYNC',0 ; -w
GUIVideoTextB4b db 'TRIPLE BUFFERING',0 ; -3
%endif
GUIVideoTextB5 db 'DISPLAY OPTIONS:',0 ; Video.Display
%ifndef __MSDOS__
GUIVideoTextB5a db 'USE 4:3 RATIO',0
NEWSYM ShowKeep43, db 0
%else
GUIVideoTextB5b db 'SMALL SCREEN',0 ; -c
GUIVideoTextB5c db 'FULL SCREEN',0 ; -cc
GUIVideoTextB5d db 'WIDE SCREEN',0 ; -cc
%endif
GUIVideoTextC1a db 'BLEND FRAMES',0 ; NTSC Tab
GUIVideoTextC1b db 'REFRESH',0
GUIVideoTextC2a db 'HUE:',0
GUIVideoTextC2b db 'SATURATION:',0
GUIVideoTextC2c db 'CONTRAST:',0
GUIVideoTextC2d db 'BRIGHTNESS:',0
GUIVideoTextC2e db 'SHARPNESS:',0
GUIVideoTextC3 db 'PRESETS:',0 ; NTSC Presets
GUIVideoTextC3a db 'COMPOSITE',0
GUIVideoTextC3b db 'S-VIDEO',0
GUIVideoTextC3c db 'RGB',0
GUIVideoTextC3d db 'MONOCHROME',0
GUIVideoTextD1a db 'GAMMA:',0 ; NTSC Adv Tab
GUIVideoTextD1b db 'RESOLUTION:',0
GUIVideoTextD1c db 'ARTIFACTS:',0
GUIVideoTextD1d db 'FRINGING:',0
GUIVideoTextD1e db 'BLEED:',0
GUIVideoTextD1f db 'HUE WARPING:',0
GUIVideoTextCD1 db 'RESET',0 ; NTSC buttons + counter
GUIVideoTextCD2 db 'RESET ALL',0
GUIVideoTextCD3 db '----%',0
SECTION .bss
GUIVStA resd 3
GUIcurrentvideoviewloc resd 1
GUIcurrentvideocursloc resd 1
SECTION .text
%macro VolslidSet 1 ; slider variable
mov al,[%1]
%endmacro
%macro VolslidText 2 ; slider var, text
mov word[%2],' '
mov esi,%2+3
mov al,[%1]
mov bl,10
%%asciilp ; turns decimal into ascii
dec esi
xor ah,ah
div bl
add ah,48
mov [esi],ah
cmp al,0
jne %%asciilp
mov esi,%2
%endmacro
DisplayGUISound: ; Sound Related Options
GUIDrawWindowBox 6,GUISoundDisp
GUIDisplayTextY 6,6,16,GUISoundTextA
GUIDisplayCheckboxu 6,11,21,SPCDisable,GUISoundTextA1,0
cmp byte[SPCDisable],0
jne near .nosound
GUIDisplayCheckboxu 6,11,31,soundon,GUISoundTextA2,0
cmp byte[soundon],1
jne near .nosound
GUIDisplayCheckboxu 6,11,41,StereoSound,GUISoundTextA3,7
cmp byte[StereoSound],1
jne near .nostereo
GUIDisplayCheckboxu 6,11,51,RevStereo,GUISoundTextA4,2
GUIDisplayCheckboxu 6,11,61,Surround,GUISoundTextA5,2
.nostereo
%ifdef __MSDOS__
GUIDisplayCheckboxu 6,11,71,Force8b,GUISoundTextA6,0
%endif
%ifdef __WIN32__
GUIDisplayCheckboxu 6,11,71,PrimaryBuffer,GUISoundTextA7,4
%endif
.nosound
GUIDisplayTextY 6,6,152,GUISoundTextD
GUIDisplayButtonHoleTu 6,11,157,byte[SoundInterpType],0,GUISoundTextF,0
GUIDisplayButtonHoleTu 6,11,167,byte[SoundInterpType],1,GUISoundTextD1,0
GUIDisplayButtonHoleTu 6,11,177,byte[SoundInterpType],2,GUISoundTextD2,0
cmp byte[MMXSupport],0
je near .no8ptinterp
GUIDisplayButtonHoleTu 6,11,187,byte[SoundInterpType],3,GUISoundTextD3,0
.no8ptinterp
GUIDisplayTextY 6,106,152,GUISoundTextE
GUIDisplayButtonHoleTu 6,111,157,byte[LowPassFilterType],0,GUISoundTextF,1
GUIDisplayButtonHoleTu 6,111,167,byte[LowPassFilterType],1,GUISoundTextE1,1
GUIDisplayButtonHoleTu 6,111,177,byte[LowPassFilterType],2,GUISoundTextE2,1
cmp byte[MMXSupport],0
je near .nohiqualityfilter
GUIDisplayButtonHoleTu 6,111,187,byte[LowPassFilterType],3,GUISoundTextE3,0
.nohiqualityfilter
%ifdef __MSDOS__
cmp byte[SoundQuality],2
jbe .okay
cmp byte[SoundQuality],4
je .okay
cmp byte[StereoSound],1
jne .okay
cmp byte[SBHDMA],0
jne .okay
cmp byte[vibracard], 1
je .okay
GUIDisplayBBox 6,15,101,69,109,167
GUIDisplayTextG 6,23,104,GUISoundTextB0
jmp .nosrate
.okay
%endif
GUIDisplayTextY 6,6,93,GUISoundTextB
GUIDisplayBBox 6,15,101,69,109,167 ;Sampling Rate Box
mov eax,[SoundQuality]
lea eax,[eax*8+GUISoundTextB1]
mov [GUITemp],eax
GUIDisplayTextG 6,23,104,[GUITemp]
.nosrate
GUIDisplayTextY 6,6,116,GUISoundTextC
GUIDrawSlider 6,15,100,131,MusicRelVol,GUISoundTextC1,VolslidSet,VolslidText
ret
SECTION .data
GUISoundTextA db 'SOUND SWITCHES:',0
GUISoundTextA1 db 'DISABLE SPC EMULATION',0
GUISoundTextA2 db 'ENABLE SOUND',0
GUISoundTextA3 db 'ENABLE STEREO SOUND',0
GUISoundTextA4 db 'REVERSE STEREO CHANNELS',0
GUISoundTextA5 db 'SIMULATE SURROUND SOUND',0
GUISoundTextA6 db 'FORCE 8-BIT OUTPUT',0 ; DOS Only
GUISoundTextA7 db 'USE PRIMARY BUFFER',0 ; Win Only
GUISoundTextB db 'SAMPLING RATE:',0
GUISoundTextB0 db 'N/A',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
GUISoundTextD db 'INTERPOLATION:',0
GUISoundTextD1 db 'GAUSSIAN',0
GUISoundTextD2 db 'CUBIC SPLINE',0
GUISoundTextD3 db '8-POINT',0
GUISoundTextE db 'LOWPASS:',0
GUISoundTextE1 db 'SIMPLE',0
GUISoundTextE2 db 'DYNAMIC',0
GUISoundTextE3 db 'HI QUALITY',0
GUISoundTextF db 'NONE',0
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 near %%skip
call DisplayGUICheatConv
mov byte[GUItextcolor],223
GUIOuttextwin2 7,%1,%2,GUICheatTextZ3
mov byte[GUItextcolor],221 ;Text
cmp byte[GUIWincoladd],0
je %%zero
mov byte[GUItextcolor],222
%%zero
GUIOuttextwin2 7,%1-1,%2-1,GUICheatTextZ3
add dword[ccheatnpos],28
dec dword[ccheatnleft]
%%skip
%endmacro
DisplayGUICheat: ; Add/Browse Cheats menu
GUIDrawWindowBox 7,GUICheatDisp
GUIDisplayText 7,6,13,GUICheatTextA
GUIDisplayText 7,6,132,GUICheatTextC1
GUIDisplayText 7,6,143,GUICheatTextC2
GUIDisplayText 7,11,154,GUICheatTextD1
GUIDisplayText 7,11,164,GUICheatTextD2
GUIDisplayText 7,11,172,GUICheatTextD3
GUIDisplayText 7,11,180,GUICheatTextD4
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .zero
mov byte[GUItextcolor],211
.zero
DrawGUIButton 7,5,113,47,124,GUICheatTextB1,5,0,0 ; Draw Buttons
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
GUIDisplayBBoxS 7,5,20,229,108,167 ; Draw Cheat Box
cmp dword[GUIcurrentcheatwin],0 ; Red Highlight for Cheats box
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
mov dword[ccheatnpos],cheatdata ; Green Text
mov eax,[NumCheats]
sub eax,[GUIcurrentcheatviewloc]
dec eax
mov [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
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
;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
mov ebx,[GUIcurrentcheatcursloc] ; Draw input boxes
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
GUIDisplayBBox 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
GUIDisplayBBox 7,82,140,196,147,dl
GUIDisplayTextG 7,84,132,GUICheatTextZ1 ;Green Text&Shadow
GUIDisplayTextG 7,84,143,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
GUIDisplayCheckbox 7,11,186,AutoLoadCht,GUICheatTextE1 ; Checkbox
cmp dword[GUIcurrentcheatwin],0 ; Draw underline only if you
jne near .noshortcut ; don't have an input box selected
GUIDisplayCheckboxu 7,11,186,AutoLoadCht,GUICheatTextE1,0
.noshortcut
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 characters
GUICheatTextZ2 db '_',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 18 characters
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
NEWSYM GUIcurrentcheatcursloc, resd 1
GUIcurrentcheatwin resd 1
ccheatnpos resd 1
ccheatnleft resd 1
SECTION .text
DrawWindowSearch:
GUIDrawWindowBox 13,GUISearchDisp
ret
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:
cmp byte[CheatWinMode],1 ; Determine which CS window we're on
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
GUIDisplayTextY 13,6,16,GUICSrcTextA1
; Radio Buttons
GUIDisplayButtonHoleTu 13,11,28,byte[CheatSrcByteSize],0,GUICSrcTextA1a,0
GUIDisplayButtonHoleTu 13,11,38,byte[CheatSrcByteSize],1,GUICSrcTextA1b,0
GUIDisplayButtonHoleTu 13,11,48,byte[CheatSrcByteSize],2,GUICSrcTextA1c,0
GUIDisplayButtonHoleTu 13,11,58,byte[CheatSrcByteSize],3,GUICSrcTextA1d,0
GUIDisplayButtonHoleTu 13,11,73,byte[CheatSrcByteBase],0,GUICSrcTextA1e,0
GUIDisplayButtonHoleTu 13,11,83,byte[CheatSrcByteBase],1,GUICSrcTextA1f,0
GUIDisplayTextY 13,6,101,GUICSrcTextA2
GUIDisplayButtonHoleTu 13,11,113,byte[CheatSrcSearchType],0,GUICSrcTextA2a,0
GUIDisplayButtonHoleTu 13,11,123,byte[CheatSrcSearchType],1,GUICSrcTextA2b,0
mov byte[GUItextcolor],217 ; Button
cmp byte[GUIWincoladd],0
je .zero2
mov byte[GUItextcolor],211
.zero2
DrawGUIButton 13,95,140,140,152,GUICSrcTextA3,50,0,1
ret
Incheatmode: ; Return and Re-search Window
mov dword[GUIwinsizex+13*4],180
mov dword[GUIwinsizey+13*4],150
call DrawWindowSearch
mov byte[GUItextcolor],217 ; Text And Shadow
cmp byte[GUIWincoladd],0
je .zero2
mov byte[GUItextcolor],211
.zero2
cmp byte[CheatSearchStatus],1
jne near CheatSearching
GUIDisplayText 13,5,20,GUICSrcTextC1
GUIDisplayText 13,5,30,GUICSrcTextC2
GUIDisplayText 13,5,40,GUICSrcTextC3
GUIDisplayText 13,5,50,GUICSrcTextC4
jmp DisplayChtSrcRes.nosearch
CheatSearching: ; Exact Value Search
cmp byte[CheatSrcSearchType],1
je near CheatSearchingComp
GUIDisplayText 13,5,20,GUICSrcTextB1
GUIDisplayText 13,5,65,GUICSrcTextG1a
GUIDisplayBBox 13,10,40,80,47,167 ; Input Box
test byte[GUICCFlash],8 ; Flash Cursor Code?
jnz .nound
mov esi,CSInputDisplay
call CSRemoveFlash
.nound
mov byte[GUItextcolor],223 ; Green Shadow
cmp byte[CSOverValue],1
jne .notdark
mov byte[GUItextcolor],202 ; Alt Color
.notdark
GUIOuttextwin2 13,13,42,CSInputDisplay
mov byte[GUItextcolor],221 ; Green Text
cmp byte[GUIWincoladd],0
je .zero4
mov byte[GUItextcolor],222
.zero4
cmp byte[CSOverValue],1
jne .notdark2
mov byte[GUItextcolor],207 ; Alt Color
.notdark2
GUIOuttextwin2 13,12,41,CSInputDisplay
mov esi,CSInputDisplay ; More flash?
call CSAddFlash
xor eax,eax ; Find Max Size
mov al,[CheatSrcByteSize]
mov eax,[SrcMask+eax*4]
mov esi,GUICSrcTextG1
cmp byte[CheatSrcByteBase],1
je .hex
call convertnum
jmp .dec
.hex
xor ecx,ecx
mov cl,[CheatSrcByteSize]
inc ecx
call converthex
.dec
GUIDisplayText 13,71,65,GUICSrcTextG1 ; Max Size Text
jmp DisplayChtSrcRes
CheatSearchingComp: ; Comparative search
GUIDisplayTextY 13,6,16,GUICSrcTextD
GUIDisplayButtonHoleTu 13,11,33,byte[CheatCompareValue],0,GUICSrcTextD1,0
GUIDisplayButtonHoleTu 13,11,43,byte[CheatCompareValue],1,GUICSrcTextD2,1
GUIDisplayButtonHoleTu 13,11,53,byte[CheatCompareValue],2,GUICSrcTextD3,2
GUIDisplayButtonHoleTu 13,11,63,byte[CheatCompareValue],3,GUICSrcTextD4,5
jmp DisplayChtSrcRes
FindChtSrcRes: ; Calculate search results
inc edi
mov eax,[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: ; Buttons (Restart/View/Search)
DrawGUIButton 13,120,140,170,152,GUICSrcTextG2a,53,0,1
.nosearch
DrawGUIButton 13,10,140,60,152,GUICSrcTextG2b,51,0,1
DrawGUIButton 13,70,140,110,152,GUICSrcTextG2c,52,0,1
xor edi,edi ; Call and display # of results
call FindChtSrcRes
mov esi,GUICSrcTextG1
call convertnum
GUIDisplayText 13,12,125,GUICSrcTextG1b
GUIDisplayText 13,97,125,GUICSrcTextG1
mov dword[GUIcurrentchtsrcviewloc],0
mov dword[GUIcurrentchtsrccursloc],0
ret
Cheatmodeview: ; View ResultsWindow
mov byte[GUICSrcTextE+12],32
cmp byte[CheatSrcByteSize],3
jne .yesprev
cmp byte[CheatSrcByteBase],0
jne .yesprev
mov byte[GUICSrcTextE+12],0
.yesprev
mov dword[GUIwinsizex+13*4],185
mov dword[GUIwinsizey+13*4],150
call DrawWindowSearch
GUIDisplayText 13,10,12,GUICSrcTextE ; Text
GUIDisplayBBoxS 13,5,20,171,108,167 ; Box
mov edi,[GUIcurrentchtsrcviewloc]
call FindChtSrcRes
mov [NumCheatSrc],eax
mov [ccheatnpos],esi
mov byte[GUItextcolor],223 ; Display Window Contents
mov eax,[NumCheatSrc]
sub eax,[GUIcurrentchtsrcviewloc]
cmp eax,12
jbe .notof
mov eax,12
.notof
mov [ccheatnleft],eax
mov [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,GUICSrcTextG1
mov ecx,3
mov eax,[CSCurEntry]
add eax,7E0000h
call converthex
GUIOuttextwin2 13,[CheatSearchXPos],[CheatSearchYPos],GUICSrcTextG1
mov esi,GUICSrcTextG1
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],GUICSrcTextG1
add dword[CheatSearchXPos],60
cmp byte[GUICSrcTextE+12],0
je near .noprevious
mov esi,GUICSrcTextG1
mov ebx,[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],GUICSrcTextG1
.noprevious
sub dword[CheatSearchXPos],102
add dword[CheatSearchYPos],7
.nextentry ; Search for next entry
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,[ccheatnleftb]
mov [ccheatnleft],eax
inc byte[CheatLooped]
cmp byte[CheatLooped],2
jne near .nextdisplay
.noentry
; Slidebar
; 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,GUICSrcTextG2d,54,0,1
DrawGUIButton 13,140,140,180,152,GUICSrcTextG2e,55,0,1
ret
Cheatmodeadd: ; Add Window
mov dword[GUIwinsizex+13*4],170
mov dword[GUIwinsizey+13*4],165
call DrawWindowSearch
GUIDisplayText 13,5,20,GUICSrcTextF1 ; Text
GUIDisplayText 13,5,45,GUICSrcTextF2
GUIDisplayText 13,5,70,GUICSrcTextF3
GUIDisplayCheckbox 13,8,139,CheatUpperByteOnly,GUICSrcTextF4 ; Checkbox
GUIDisplayBBox 13,10,30,80,37,167 ; Boxes
GUIDisplayBBox 13,10,55,126,62,167
GUIDisplayBBox 13,10,80,80,120,167
DrawGUIButton 13,60,155,120,167,GUICSrcTextG2d,56,0,1 ; Buttons
DrawGUIButton 13,130,155,160,167,GUICSrcTextG2e,57,0,1
GUIDisplayText 13,5,130,GUICSrcTextG1a ; Max Value Text
xor eax,eax
mov al,[CheatSrcByteSize]
mov eax,[SrcMask+eax*4]
mov esi,GUICSrcTextG1
cmp byte[CheatSrcByteBase],1
je .hex
call convertnum
jmp .dec
.hex
xor ecx,ecx
mov cl,[CheatSrcByteSize]
inc ecx
call converthex
.dec
GUIDisplayText 13,71,130,GUICSrcTextG1
cmp byte[CurCStextpos],0 ; Cheat Input
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 ; Cheat Desc. Input
jne .noundb
test byte[GUICCFlash],8
jnz .noundb
mov esi,CSDescDisplay
call CSAddFlash
.noundb
GUIDisplayTextG 13,13,57,CSDescDisplay
mov esi,CSDescDisplay
call CSRemoveFlash
cmp byte[CSOverValue],1
je near .nodisplay
cmp byte[CSInputDisplay],'_'
je near .nodisplay
mov dword[CheatSearchYPos],83 ; PAR Code?
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 ; Max Value Display?
push ecx
mov esi,GUICSrcTextG1
mov ecx,3
mov eax,[curaddrvalcs]
add eax,7E0000h
call converthex
mov esi,GUICSrcTextG1+6
mov ecx,1
mov al,[curvaluecs]
call converthex
shr dword[curvaluecs],8
mov byte[GUItextcolor],223
inc dword[CheatSearchYPos]
GUIOuttextwin2 13,13,[CheatSearchYPos],GUICSrcTextG1
dec dword[CheatSearchYPos]
mov byte[GUItextcolor],221
cmp byte[GUIWincoladd],0
je .zero4c
mov byte[GUItextcolor],222
.zero4c
GUIOuttextwin2 13,12,[CheatSearchYPos],GUICSrcTextG1
add dword[CheatSearchYPos],10
inc dword[curaddrvalcs]
pop ecx
dec ecx
jnz near .cspardisploop
.nodisplay
ret
SECTION .bss
NEWSYM CheatWinMode, resb 1
NEWSYM 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
; A = Opening Screen
; B = Exact Value Search
; C = Comparison Search Message
; D = Comparison Search Method
; E = View Results
; F = Add Cheat
; G = General Use
GUICSrcTextA1 db 'SELECT SIZE AND FORMAT:',0
GUICSrcTextA1a db '1 BYTE [0..255]',0
GUICSrcTextA1b db '2 BYTES [0..65535]',0
GUICSrcTextA1c db '3 BYTES [0..16777215]',0
GUICSrcTextA1d db '4 BYTES [0..4294967295]',0
GUICSrcTextA1e db 'DEC (BASE 10)',0
GUICSrcTextA1f db 'HEX (BASE 16)',0
GUICSrcTextA2 db 'SELECT SEARCH TYPE:',0
GUICSrcTextA2a db 'EXACT VALUE SEARCH',0
GUICSrcTextA2b db 'COMPARATIVE SEARCH',0
GUICSrcTextA3 db 'START',0 ; Button
GUICSrcTextB1 db 'ENTER VALUE:',0 ; Make Yellow
GUICSrcTextC1 db 'NOW RETURN TO YOUR GAME',0
GUICSrcTextC2 db 'AND COME BACK WHEN ',0
GUICSrcTextC3 db 'THE NEXT SEARCH',0
GUICSrcTextC4 db 'SHOULD BE PROCESSED',0
GUICSrcTextD db 'SELECT COMPARISON:',0
GUICSrcTextD1 db 'NEW VALUE IS > OLD VALUE',0
GUICSrcTextD2 db 'NEW VALUE IS < OLD VALUE',0
GUICSrcTextD3 db 'NEW VALUE IS = OLD VALUE',0
GUICSrcTextD4 db 'NEW VALUE IS != OLD VALUE',0
GUICSrcTextE db 'ADDR VALUE PVALUE',0
GUICSrcTextF1 db 'ENTER NEW VALUE:',0
GUICSrcTextF2 db 'ENTER CHEAT DESCRIPTION:',0
GUICSrcTextF3 db 'PAR CODE EQUIVALENT:',0
GUICSrcTextF4 db 'USE ONLY UPPER BYTE',0
GUICSrcTextG1 db ' ',0 ; All variables
GUICSrcTextG1a db 'MAX VALUE:',0
GUICSrcTextG1b db '# OF RESULTS:',0
GUICSrcTextG2a db 'SEARCH',0 ; Buttons
GUICSrcTextG2b db 'RESTART',0
GUICSrcTextG2c db 'VIEW',0
GUICSrcTextG2d db 'RETURN',0
GUICSrcTextG2e db 'ADD',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: ; Misc Key Window
GUIDrawWindowBox 9,GUIGameDisp
GUIDisplayTextY 9,6,16,GUIGameOptnsTextA
mov byte[GUIGameOptnsTextA1+2],'1'
GUIDisplayText 9,9,25,GUIGameOptnsTextA1
mov byte[GUIGameOptnsTextA1+2],'2'
GUIDisplayText 9,9+45,25,GUIGameOptnsTextA1
mov byte[GUIGameOptnsTextA1+2],'3'
GUIDisplayText 9,9+90,25,GUIGameOptnsTextA1
mov byte[GUIGameOptnsTextA1+2],'4'
GUIDisplayText 9,9+135,25,GUIGameOptnsTextA1
GUIDisplayText 9,9+180,25,GUIGameOptnsTextA2
GUIDisplayTextY 9,6,34,GUIGameOptnsTextB
mov byte[GUIGameOptnsTextB1+2],'1'
GUIDisplayText 9,9,43,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'2'
GUIDisplayText 9,9+45,43,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'3'
GUIDisplayText 9,9+45*2,43,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'4'
GUIDisplayText 9,9+45*3,43,GUIGameOptnsTextB1
GUIDisplayText 9,9+45*4,43,GUIGameOptnsTextB2
mov byte[GUIGameOptnsTextB1+2],'5'
GUIDisplayText 9,9,52,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'6'
GUIDisplayText 9,9+45,52,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'7'
GUIDisplayText 9,9+45*2,52,GUIGameOptnsTextB1
mov byte[GUIGameOptnsTextB1+2],'8'
GUIDisplayText 9,9+45*3,52,GUIGameOptnsTextB1
GUIDisplayText 9,9+45*4,52,GUIGameOptnsTextB3
GUIDisplayTextY 9,6,61,GUIGameOptnsTextC
GUIDisplayText 9,9,72,GUIGameOptnsTextC1
GUIDisplayText 9,9+52,72,GUIGameOptnsTextC2
GUIDisplayText 9,9+109,72,GUIGameOptnsTextC3
GUIDisplayText 9,9+160,72,GUIGameOptnsTextC4
GUIDisplayText 9,9,82,GUIGameOptnsTextC5
GUIDisplayText 9,9+52,82,GUIGameOptnsTextC6
GUIDisplayText 9,137,82,GUIGameOptnsTextC7
GUIDisplayTextY 9,6,93,GUIGameOptnsTextD1
GUIDisplayText 9,9,102,GUIGameOptnsTextD1a
GUIDisplayText 9,9,112,GUIGameOptnsTextD1b
GUIDisplayText 9,9,122,GUIGameOptnsTextD1c
%ifndef __MSDOS__
GUIDisplayText 9,9,132,GUIGameOptnsTextD1d
%endif
GUIDisplayTextY 9,119,93,GUIGameOptnsTextD2
GUIDisplayText 9,122,102,GUIGameOptnsTextD2a
GUIDisplayText 9,122,112,GUIGameOptnsTextD2b
GUIDisplayText 9,122,122,GUIGameOptnsTextD2c
GUIDisplayText 9,122,132,GUIGameOptnsTextD2d
GUIDisplayText 9,122,142,GUIGameOptnsTextD2e
; Draw black boxes
DDrawBox 9,26,22,[KeyBGDisble0]
DDrawBox 9,71,22,[KeyBGDisble1]
DDrawBox 9,116,22,[KeyBGDisble2]
DDrawBox 9,161,22,[KeyBGDisble3]
DDrawBox 9,206,22,[KeySprDisble]
DDrawBox 9,26,40,[KeyDisableSC0]
DDrawBox 9,71,40,[KeyDisableSC1]
DDrawBox 9,116,40,[KeyDisableSC2]
DDrawBox 9,161,40,[KeyDisableSC3]
DDrawBox 9,213,40,[KeyVolUp]
DDrawBox 9,26,49,[KeyDisableSC4]
DDrawBox 9,71,49,[KeyDisableSC5]
DDrawBox 9,116,49,[KeyDisableSC6]
DDrawBox 9,161,49,[KeyDisableSC7]
DDrawBox 9,213,49,[KeyVolDown]
DDrawBox 9,32,69,[KeyQuickLoad]
DDrawBox 9,90,69,[KeyQuickRst]
DDrawBox 9,141,69,[KeyQuickExit]
DDrawBox 9,199,69,[KeyQuickClock]
DDrawBox 9,32,79,[KeyQuickChat]
DDrawBox 9,109,79,[KeyQuickSnapShot]
DDrawBox 9,185,79,[KeyQuickSaveSPC]
DDrawBox 9,77,99,[KeyUsePlayer1234]
DDrawBox 9,77,109,[KeyResetAll]
DDrawBox 9,77,119,[KeyDisplayFPS]
%ifndef __MSDOS__
DDrawBox 9,77,129,[KeyDisplayBatt]
%endif
DDrawBox 9,190,99,[KeyNewGfxSwt]
DDrawBox 9,190,109,[KeyWinDisble]
DDrawBox 9,190,119,[KeyOffsetMSw]
DDrawBox 9,190,129,[KeyIncreaseGamma]
DDrawBox 9,190,139,[KeyDecreaseGamma]
ret
SECTION .bss
GUIGameOptnsColA resb 1
GUIGameOptnsColB resb 1
GUIGameDisplayKy resd 1
SECTION .data
GUIGameOptnsTextA db 'BG DISABLES:',0
GUIGameOptnsTextA1 db 'BG#',0
GUIGameOptnsTextA2 db 'OBJ',0
GUIGameOptnsTextB db 'SOUND KEYS:',0
GUIGameOptnsTextB1 db 'CH#',0
GUIGameOptnsTextB2 db '+VOL',0
GUIGameOptnsTextB3 db '-VOL',0
GUIGameOptnsTextC db 'QUICK KEYS:',0
GUIGameOptnsTextC1 db 'LOAD',0
GUIGameOptnsTextC2 db 'RESET',0
GUIGameOptnsTextC3 db 'EXIT',0
GUIGameOptnsTextC4 db 'CLOCK',0
GUIGameOptnsTextC5 db 'CHAT',0
GUIGameOptnsTextC6 db 'SNAPSHOT',0
GUIGameOptnsTextC7 db 'SAVE SPC',0
GUIGameOptnsTextD1 db 'MISC TOGGLES:',0
GUIGameOptnsTextD1a db 'USE PL12/34',0
GUIGameOptnsTextD1b db 'PANIC KEY',0
GUIGameOptnsTextD1c db 'DISPLAY FPS',0
GUIGameOptnsTextD1d db 'BATT POWER',0
GUIGameOptnsTextD2 db 'GFX TOGGLES:',0
GUIGameOptnsTextD2a db 'NEW GFX ENG',0
GUIGameOptnsTextD2b db 'BG WINDOW',0
GUIGameOptnsTextD2c db 'OFFSET MODE',0
GUIGameOptnsTextD2d db '+ GAMMA',0
GUIGameOptnsTextD2e db '- GAMMA',0
SECTION .text
%macro GUICslidSet 1 ; slider var
mov al,[%1]
shl eax,2
add eax,2
%endmacro
%macro GUICslidText 2 ; slider var, text
mov byte[%2],' '
mov esi,%2+2
mov al,[%1]
mov bl,10
%%asciilp ; turns decimal into ascii
dec esi
xor ah,ah
div bl
add ah,48
mov [esi],ah
cmp al,0
jne %%asciilp
mov esi,%2
%endmacro
DisplayGUIOptns: ; GUI Options
%ifdef __WIN32__ ; If Windows, extend window down
mov dword[GUIwinsizey+10*4],192
%endif
GUIDrawWindowBox 10,GUIGUIDisp
; Setup Colors
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
GUIDrawSlider 10,25,127,124,TRVal2,GUIGUIOptnsTextD2,GUICslidSet,GUICslidText
GUIDrawSlider 10,25,127,136,TGVal2,GUIGUIOptnsTextD2,GUICslidSet,GUICslidText
GUIDrawSlider 10,25,127,148,TBVal2,GUIGUIOptnsTextD2,GUICslidSet,GUICslidText
GUIDisplayTextY 10,6,16,GUIGUIOptnsTextA
;Checkboxes
GUIDisplayCheckboxu 10,12,23,GUIRClick,GUIGUIOptnsTextA1a,1
GUIDisplayCheckboxu 10,12,33,lhguimouse,GUIGUIOptnsTextA1b,6
GUIDisplayCheckboxu 10,12,43,mouseshad,GUIGUIOptnsTextA1c,0
GUIDisplayCheckboxu 10,12,53,mousewrap,GUIGUIOptnsTextA1d,0
%ifdef __WIN32__
GUIDisplayCheckboxu 10,12,63,TrapMouseCursor,GUIGUIOptnsTextA1e,3
GUIDisplayCheckboxu 10,12,73,MouseWheel,GUIGUIOptnsTextA1f,1
%endif
GUIDisplayCheckboxu 10,129,23,esctomenu,GUIGUIOptnsTextA2a,7
GUIDisplayCheckboxu 10,129,33,JoyPad1Move,GUIGUIOptnsTextA2b,6
GUIDisplayCheckboxu 10,129,43,FilteredGUI,GUIGUIOptnsTextA2c,0
GUIDisplayCheckboxu 10,129,53,newfont,GUIGUIOptnsTextA2d,12
GUIDisplayCheckboxu 10,129,63,savewinpos,GUIGUIOptnsTextA2e,9
GUIDisplayTextY 10,6,91,GUIGUIOptnsTextE
GUIDisplayButtonHoleTu 10,72,88,byte[GUIEffect],0,GUIGUIOptnsTextE1,3
GUIDisplayButtonHoleTu 10,122,88,byte[GUIEffect],1,GUIGUIOptnsTextE2,1
GUIDisplayButtonHoleTu 10,182,88,byte[GUIEffect],4,GUIGUIOptnsTextE5,2
GUIDisplayButtonHoleTu 10,72,98,byte[GUIEffect],5,GUIGUIOptnsTextE6,3
GUIDisplayButtonHoleTu 10,122,98,byte[GUIEffect],2,GUIGUIOptnsTextE3,6
GUIDisplayButtonHoleTu 10,182,98,byte[GUIEffect],3,GUIGUIOptnsTextE4,6
GUIDisplayTextY 10,6,111,GUIGUIOptnsTextB
GUIDisplayText 10,60,111,GUIGUIOptnsTextB1
GUIDisplayText 10,100,111,GUIGUIOptnsTextB2
GUIDisplayText 10,145,111,GUIGUIOptnsTextB3
%ifdef __WIN32__
GUIDisplayTextY 10,6,161,GUIGUIOptnsTextC
GUIDisplayCheckboxu 10,12,168,AlwaysOnTop,GUIGUIOptnsTextC1,14
GUIDisplayCheckboxu 10,12,178,SaveMainWindowPos,GUIGUIOptnsTextC2,2
GUIDisplayCheckboxu 10,12,188,AllowMultipleInst,GUIGUIOptnsTextC3,1
%endif
mov byte[GUIGUIOptnsTextD1],'R'
GUIDisplayText 10,16,123,GUIGUIOptnsTextD1
mov byte[GUIGUIOptnsTextD1],'G'
GUIDisplayText 10,16,135,GUIGUIOptnsTextD1
mov byte[GUIGUIOptnsTextD1],'B'
GUIDisplayText 10,16,147,GUIGUIOptnsTextD1
; Radio Buttons
GUIDisplayButtonHole 10,48,108,byte[CurPalSelect],0
GUIDisplayButtonHole 10,88,108,byte[CurPalSelect],1
GUIDisplayButtonHole 10,133,108,byte[CurPalSelect],2
ret
SECTION .data
GUIGUIOptnsTextA db 'GUI SWITCHES:',0
GUIGUIOptnsTextA1a db 'RCLICK OPENS GUI',0
GUIGUIOptnsTextA1b db 'SWAP L/R MBUTTONS',0
GUIGUIOptnsTextA1c db 'SHOW MOUSE SHADOW',0
GUIGUIOptnsTextA1d db 'MICE WRAP GUI WIN',0
%ifdef __WIN32__
GUIGUIOptnsTextA1e db 'TRAP MOUSE CURSOR',0
GUIGUIOptnsTextA1f db 'WHEEL MICE SCROLL',0
%endif
GUIGUIOptnsTextA2a db 'ESC TO GAME MENU',0
GUIGUIOptnsTextA2b db 'CTRL GUI W/GPAD1',0
GUIGUIOptnsTextA2c db 'FILTERED GUI',0
GUIGUIOptnsTextA2d db 'USE CUSTOM FONT',0
GUIGUIOptnsTextA2e db 'SAVE GUI WIN POS',0
GUIGUIOptnsTextB db 'COLOR:',0
GUIGUIOptnsTextB1 db 'BACK',0
GUIGUIOptnsTextB2 db 'TITLE',0
GUIGUIOptnsTextB3 db 'WIN',0
%ifdef __WIN32__
GUIGUIOptnsTextC db 'MAIN WINDOW OPTIONS:',0
GUIGUIOptnsTextC1 db 'EMU ALWAYS ON TOP',0
GUIGUIOptnsTextC2 db 'SAVE MAIN WINDOW POSITION',0
GUIGUIOptnsTextC3 db 'ALLOW MULTIPLE INSTANCES OF EMU',0
%endif
GUIGUIOptnsTextD1 db '@',0
GUIGUIOptnsTextD2 db ' ',0
GUIGUIOptnsTextE db 'BG EFFECTS:',0
GUIGUIOptnsTextE1 db 'NONE',0
GUIGUIOptnsTextE2 db 'SNOW',0
GUIGUIOptnsTextE3 db 'WATER A',0
GUIGUIOptnsTextE4 db 'WATER B',0
GUIGUIOptnsTextE5 db 'BURNING',0
GUIGUIOptnsTextE6 db 'SMOKE',0
SECTION .text
DisplayGUIAbout: ; Displays the About Box
;This will attach compile date onto the end of GUIGUIAboutText1
pushad
mov eax,GUIGUIAboutTextA1
mov [VERSION_STR],eax
call placedate
popad
GUIDrawWindowBox 11,GUIAboutDisp
cmp byte[EEgg],1
je near .eegg
GUIDisplayText 11,6,16,GUIGUIAboutTextA1 ; Text
GUIDisplayText 11,6,26,GUIGUIAboutTextA2
GUIDisplayTextY 11,6,36,GUIGUIAboutTextB
GUIDisplayText 11,6,46,GUIGUIAboutTextB1
GUIDisplayText 11,6,56,GUIGUIAboutTextB2
GUIDisplayTextY 11,6,66,GUIGUIAboutTextC
GUIDisplayText 11,6,76,GUIGUIAboutTextC1
GUIDisplayText 11,6,86,GUIGUIAboutTextC2
GUIDisplayText 11,6,96,GUIGUIAboutTextC3
GUIDisplayText 11,6,106,GUIGUIAboutTextC4
GUIDisplayText 11,6,116,GUIGUIAboutTextC5
GUIDisplayText 11,6,131,GUIGUIAboutTextD1
GUIDisplayText 11,6,141,GUIGUIAboutTextD2
GUIDisplayText 11,6,151,GUIGUIAboutTextD3
GUIDisplayText 11,6,161,GUIGUIAboutTextD4
GUIDisplayText 11,6,171,GUIGUIAboutTextD5
GUIDisplayText 11,6,181,GUIGUIAboutTextD6
GUIDisplayText 11,6,191,GUIGUIAboutTextD7
mov byte[GUItextcolor],217 ; Buttons
cmp byte[GUIWincoladd],0
je .zero3
mov byte[GUItextcolor],211
.zero3
DrawGUIButton 11,90,22,175,32,GUIGUIAboutTextE1,65,0,0
DrawGUIButton 11,90,33,175,43,GUIGUIAboutTextE2,66,0,0
ret
.eegg ;Playground
GUIDisplayText 11,42,36,GUIGUIAboutTextF
GUIDisplayText 11,30,96,GUIGUIAboutTextFa
GUIDisplayText 11,39,106,GUIGUIAboutTextFb
ret
SECTION .data
GUIGUIAboutTextA1 db 'ZSNES V',ZVERSION,' ',0 ;Need room for date
%ifdef __MSDOS__
GUIGUIAboutTextA2 db 'DOS VERSION',0
%elifdef __WIN32__
GUIGUIAboutTextA2 db 'WIN VERSION',0
%elifdef __UNIXSDL__
GUIGUIAboutTextA2 db 'SDL VERSION',0
%endif
GUIGUIAboutTextB db 'CODED BY: ',0
GUIGUIAboutTextB1 db ' ZSKNIGHT _DEMO_',0
GUIGUIAboutTextB2 db ' PAGEFAULT NACH',0
GUIGUIAboutTextC db 'ASSISTANT CODERS:',0
GUIGUIAboutTextC1 db ' PHAROS STATMAT',0
GUIGUIAboutTextC2 db ' TEUF HPSOLO',0
GUIGUIAboutTextC3 db ' THEODDONE33 SILOH',0
GUIGUIAboutTextC4 db ' IPHER GRINVADER',0
GUIGUIAboutTextC5 db ' JONAS QUINN DEATHLIKE',0
GUIGUIAboutTextD1 db 'ZSNES comes with ABSOLUTELY',0
GUIGUIAboutTextD2 db 'NO WARRANTY. This is free',0
GUIGUIAboutTextD3 db 'software, and you are welcome',0
GUIGUIAboutTextD4 db 'to redistribute it under',0
GUIGUIAboutTextD5 db 'certain conditions; please',0
GUIGUIAboutTextD6 db 'read ',39,'LICENSE.TXT',39,0
GUIGUIAboutTextD7 db 'thoroughly before doing so.',0
GUIGUIAboutTextE1 db 'WWW.ZSNES.COM',0
GUIGUIAboutTextE2 db 'DOCUMENTATION',0
GUIGUIAboutTextF db 'HIDDEN MESSAGE!',0
GUIGUIAboutTextFa db 'PRESS ',39,'E',39,' TO RETURN ',0
GUIGUIAboutTextFb db 'TO THE ABOUT BOX',0
SECTION .text
DisplayGUIMovies: ; Movie Record/Playback options
GUIDrawWindowBox 15,GUIMovieDisp ; Display Window
GUIDrawTArea 15
cmp byte[MovieProcessing],4
je near .cannotzmv
cmp byte[MovieProcessing],5
je near .cannotzmv
cmp byte[MovieProcessing],6
je near .cannotzmv
GUIDrawTabs GUIMovieTabs
.cannotzmv
cmp byte[MovieProcessing],1
je near .cannotdump
cmp byte[MovieProcessing],2
je near .cannotdump
cmp byte[MovieProcessing],3
je near .cannotdump
GUIDrawTabs GUIDumpingTab
.cannotdump
cmp byte[RawDumpInProgress],0
je .notdumping
mov dword[GUIMovieTabs],0
mov dword[GUIDumpingTab],1
.notdumping
cmp byte[MovieRecordWinVal],0
je near .displayboxa
GUIDisplayText 15,9,26,GUIMovieTextX1 ; Overwrite Message Box
GUIDisplayText 15,9,36,GUIMovieTextX2
GUIDisplayText 15,9,51,GUIMovieTextX3
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .zero4
mov byte[GUItextcolor],211
.zero4
DrawGUIButton 15,17,65,59,76,GUIMovieTextX4,19,0,0 ; Yes/No Buttons
DrawGUIButton 15,70,65,112,76,GUIMovieTextX5,20,0,0
ret
.displayboxa ; Main Window
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .zero
mov byte[GUItextcolor],211
.zero
GUIDisplayTextY 15,8,31,GUIMovieTextA ; Slot text
mov byte[GUIMovieTextA1],'0'
GUIDisplayText 15,20,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'1'
GUIDisplayText 15,40,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'2'
GUIDisplayText 15,60,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'3'
GUIDisplayText 15,80,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'4'
GUIDisplayText 15,100,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'5'
GUIDisplayText 15,120,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'6'
GUIDisplayText 15,140,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'7'
GUIDisplayText 15,160,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'8'
GUIDisplayText 15,180,42,GUIMovieTextA1
mov byte[GUIMovieTextA1],'9'
GUIDisplayText 15,200,42,GUIMovieTextA1
; Display Radio buttons
GUIDisplayButtonHole 15,8,39,byte[CMovieExt],'v'
GUIDisplayButtonHole 15,28,39,byte[CMovieExt],'1'
GUIDisplayButtonHole 15,48,39,byte[CMovieExt],'2'
GUIDisplayButtonHole 15,68,39,byte[CMovieExt],'3'
GUIDisplayButtonHole 15,88,39,byte[CMovieExt],'4'
GUIDisplayButtonHole 15,108,39,byte[CMovieExt],'5'
GUIDisplayButtonHole 15,128,39,byte[CMovieExt],'6'
GUIDisplayButtonHole 15,148,39,byte[CMovieExt],'7'
GUIDisplayButtonHole 15,168,39,byte[CMovieExt],'8'
GUIDisplayButtonHole 15,188,39,byte[CMovieExt],'9'
mov dword[GUIMovieTextZ+8],'INAC' ; Determine and Display Status
mov dword[GUIMovieTextZ+12],'TIVE'
mov dword[GUIMovieTextZ+16],' '
mov dword[GUIMovieTextZ+20],' '
cmp byte[MovieProcessing],1
jne .noplay
mov dword[GUIMovieTextZ+8],'PLAY'
mov dword[GUIMovieTextZ+12],'ING '
mov dword[GUIMovieTextZ+16],' '
mov dword[GUIMovieTextZ+20],' '
.noplay
cmp byte[MovieProcessing],2
jne .norec
mov dword[GUIMovieTextZ+8],'RECO'
mov dword[GUIMovieTextZ+12],'RDIN'
mov dword[GUIMovieTextZ+16],'G '
mov dword[GUIMovieTextZ+20],' '
.norec
cmp byte[MovieProcessing],3
jne .nooldplay
mov dword[GUIMovieTextZ+8],'OLD '
mov dword[GUIMovieTextZ+12],'PLAY'
mov dword[GUIMovieTextZ+16],'ING '
mov dword[GUIMovieTextZ+20],' '
.nooldplay
cmp byte[MovieProcessing],4
jne .noendingdump
mov dword[GUIMovieTextZ+8],'DUMP'
mov dword[GUIMovieTextZ+12],'ING '
mov dword[GUIMovieTextZ+16],'ENDI'
mov dword[GUIMovieTextZ+20],'NG '
.noendingdump
cmp byte[MovieProcessing],5
jne .nodump
mov dword[GUIMovieTextZ+8],'DUMP'
mov dword[GUIMovieTextZ+12],'ING '
mov dword[GUIMovieTextZ+16],' '
mov dword[GUIMovieTextZ+20],' '
.nodump
cmp byte[MovieProcessing],6
jne .noolddump
mov dword[GUIMovieTextZ+8],'DUMP'
mov dword[GUIMovieTextZ+12],'ING '
mov dword[GUIMovieTextZ+16],'OLD '
mov dword[GUIMovieTextZ+20],' '
.noolddump
GUIDisplayTextY 15,6,192,GUIMovieTextZ
cmp dword[GUIMovieTabs],1
jne near .notcontrols
GUIDisplayTextY 15,8,56,GUIMovieTextB ; "Start From" Section
GUIDisplayTextY 15,8,100,GUIMovieTextD ; Chapters
GUIDisplayButtonHoleTu 15,8,64,byte[MovieStartMethod],0,GUIMovieTextB1,0
GUIDisplayButtonHoleTu 15,43,64,byte[MovieStartMethod],1,GUIMovieTextB2,0
GUIDisplayButtonHoleTu 15,89,64,byte[MovieStartMethod],2,GUIMovieTextB3,0
GUIDisplayButtonHoleTu 15,135,64,byte[MovieStartMethod],3,GUIMovieTextB4,6
DrawGUIButton 15,7,80,49,91,GUIMovieTextC1,16,0,0 ; Draw Buttons
DrawGUIButton 15,55,80,97,91,GUIMovieTextC2,17,0,0
DrawGUIButton 15,103,80,145,91,GUIMovieTextC3,18,0,0
DrawGUIButton 15,151,80,193,91,GUIMovieTextC4,32,0,0
DrawGUIButton 15,7,108,50,119,GUIMovieTextD1,29,0,0
DrawGUIButton 15,85,108,138,119,GUIMovieTextD2,30,0,0
DrawGUIButton 15,173,108,203,119,GUIMovieTextD3,31,0,0
DDrawBox 15,57,109,[KeyInsrtChap] ; Chapter Keyboard Shortcut Boxes
DDrawBox 15,145,109,[KeyPrevChap]
DDrawBox 15,210,109,[KeyNextChap]
GUIDisplayTextY 15,8,125,GUIMovieTextE ; Movie State Load
GUIDisplayButtonHoleTu 15,8,133,byte[MZTForceRTR],0,GUIMovieTextE1,14
GUIDisplayButtonHoleTu 15,8,143,byte[MZTForceRTR],1,GUIMovieTextE2,12
GUIDisplayButtonHoleTu 15,8,153,byte[MZTForceRTR],2,GUIMovieTextE3,14
DDrawBox 15,134,123,[KeyRTRCycle] ; MZT Load Shortcut Box
GUIDisplayCheckboxu 15,8,163,MovieDisplayFrame,GUIMovieTextE9,0 ; Checkbox
.notcontrols
cmp dword[GUIDumpingTab],1
jne near .nodumping
GUIDisplayTextY 15,8,56,GUIMovieTextF ; Video Section
GUIDisplayButtonHoleTu 15,8,64,byte[MovieVideoMode],0,GUIMovieTextF1,1
GUIDisplayButtonHoleTu 15,8,74,byte[MovieVideoMode],1,GUIMovieTextF2,2
GUIDisplayButtonHoleTu 15,8,84,byte[MovieVideoMode],2,GUIMovieTextF3,0
GUIDisplayButtonHoleTu 15,8,94,byte[MovieVideoMode],3,GUIMovieTextF4,9
GUIDisplayButtonHoleTu 15,8,104,byte[MovieVideoMode],4,GUIMovieTextF5,0
GUIDisplayButtonHoleTu 15,8,114,byte[MovieVideoMode],5,GUIMovieTextF6,0
GUIDisplayTextY 15,129,56,GUIMovieTextG ; Audio Section
GUIDisplayTextY 15,162,171,GUIMovieTextI
cmp byte[MovieVideoMode],5
je near .custom
GUIDisplayCheckboxu 15,130,62,MovieAudio,GUIMovieTextG1,5
cmp byte[MovieAudio],1
jne near .nomux
.custom
GUIDisplayCheckboxu 15,130,72,MovieAudioCompress,GUIMovieTextG2,2
cmp byte[MovieVideoMode],2
jl near .nomux
cmp byte[MovieVideoMode],5
je near .nomux
GUIDisplayCheckboxu 15,130,82,MovieVideoAudio,GUIMovieTextG3,11
.nomux
DrawGUIButton 15,165,178,200,189,GUIMovieTextI1,34,0,0
DrawGUIButton 15,206,178,235,189,GUIMovieTextI2,35,0,0
GUIDisplayTextY 15,8,127,GUIMovieTextH ; Video Section
GUIDisplayButtonHoleTu 15,8,135,byte[MovieForcedLengthEnabled],0,GUIMovieTextH1,0
GUIDisplayButtonHoleTu 15,8,145,byte[MovieForcedLengthEnabled],1,GUIMovieTextH2,11
GUIDisplayButtonHoleTu 15,8,155,byte[MovieForcedLengthEnabled],2,GUIMovieTextH3,0
GUIDisplayBBox 15,136,144,205,154,167
pushad
call GetMovieForcedLength
popad
GUIOuttextwin2d 15,139,148,GUIMovieForcedText,10
.nodumping
ret
SECTION .data
GUIMovieTabs dd 1,1
db 'CONTROLS',0
GUIDumpingTab dd 0,1
db 'DUMPING',0
GUIMovieTextA db 'SELECT MOVIE:',0
GUIMovieTextA1 db ' ',0
GUIMovieTextB db 'RECORD FROM:',0
GUIMovieTextB1 db 'NOW',0
GUIMovieTextB2 db 'POWER',0
GUIMovieTextB3 db 'RESET',0
GUIMovieTextB4 db 'POWER+SRAM CLEAR',0
GUIMovieTextC1 db 'PLAY',0
GUIMovieTextC2 db 'RECORD',0
GUIMovieTextC3 db 'STOP',0
GUIMovieTextC4 db 'APPEND',0
GUIMovieTextD db 'CHAPTERS:',0
GUIMovieTextD1 db 'INSERT',0
GUIMovieTextD2 db 'PREVIOUS',0
GUIMovieTextD3 db 'NEXT',0
GUIMovieTextE db 'ON MOVIE STATE LOAD:',0
GUIMovieTextE1 db 'DO NOT SWITCH MODES',0
GUIMovieTextE2 db 'SWITCH TO RECORD',0
GUIMovieTextE3 db 'SWITCH TO PLAYBACK',0
GUIMovieTextE9 db 'DISPLAY FRAME COUNTER',0
GUIMovieTextF db 'VIDEO OPTIONS:',0
GUIMovieTextF1 db 'NO VIDEO DUMP',0
GUIMovieTextF2 db 'RAW VIDEO',0
GUIMovieTextF3 db 'FFV1',0
GUIMovieTextF4 db 'X264 LOSSLESS',0
GUIMovieTextF5 db 'XVID LOSSLESS',0
GUIMovieTextF6 db 'CUSTOM',0
GUIMovieTextG db 'AUDIO OPTIONS:',0
GUIMovieTextG1 db 'DUMP AUDIO',0
GUIMovieTextG2 db 'COMPRESS AUDIO',0
GUIMovieTextG3 db 'MERGE WITH VIDEO',0
GUIMovieTextH db 'DUMPING LENGTH:',0
GUIMovieTextH1 db 'ZMV LENGTH',0
GUIMovieTextH2 db 'DUMP # OF FRAMES',0
GUIMovieTextH3 db 'UNTIL STOP',0
GUIMovieTextI db 'DUMPING:',0
GUIMovieTextI1 db 'START',0
GUIMovieTextI2 db 'STOP',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
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
GUIDisplayText 16,10,13,GUIComboText1 ; Text
GUIDisplayText 16,138,13,GUIComboText2
GUIDisplayText 16,38,84,GUIComboTextE
GUIDisplayText 16,10,84,GUIComboTextF
GUIDisplayText 16,10,103,GUIComboText4
GUIDisplayText 16,10,152,GUIComboText5
GUIDisplayText 16,10,162,GUIComboText6
GUIDisplayText 16,10,172,GUIComboText7
GUIDisplayText 16,10,182,GUIComboText8
GUIDisplayText 16,114,182,GUIComboText9
GUIDisplayText 16,204,182,GUIComboTextG
GUIDisplayText 16,145,85,GUIComboTextI
DrawGUIButton 16,202,20,246,31,GUIComboTextA,60,-1,0 ; Buttons
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
; Radio 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
; Checkboxes
GUIDisplayCheckbox 16,163,88,GUIComboLHorz,GUIComboTextJ
GUIDisplayCheckbox 16,163,96,GUIComboGameSpec,GUIComboTextK
; 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
NEWSYM 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
call EEMode
cmp eax,0
je near .noEE ;You know it!
push eax
push ebx
push ecx
mov eax,GUIAddOnEETopBar
mov ebx,GUIAddOnsDisp
.loopA
mov cl,[eax]
mov [ebx],cl
inc eax
inc ebx
cmp cl,0
jne .loopA
pop ecx
pop ebx
pop eax
GUIDisplayText 17,20,15,GUIAddOnText1Alt
GUIDisplayText 17,112,15,GUIAddOnText2Alt
GUIDisplayButtonHoleTu 17,9,23,byte[device1],0,GUIAddOnText3Alt,0
GUIDisplayButtonHoleTu 17,9,33,byte[device1],1,GUIAddOnText4Alt,0
GUIDisplayButtonHoleTu 17,100,23,byte[device2],0,GUIAddOnText3Alt,1
GUIDisplayButtonHoleTu 17,100,33,byte[device2],1,GUIAddOnText4Alt,1
GUIDisplayButtonHoleTu 17,100,43,byte[device2],2,GUIAddOnText5Alt,0
GUIDisplayButtonHoleTu 17,100,53,byte[device2],3,GUIAddOnText6Alt,0
GUIDisplayButtonHoleTu 17,100,63,byte[device2],4,GUIAddOnText7Alt,0
GUIDisplayText 17,12,78,GUIAddOnText8Alt
GUIDisplayText 17,103,78,GUIAddOnText9Alt
GUIDisplayCheckboxu 17,9,83,mouse1lh,GUIAddOnTextDAlt,0
GUIDisplayCheckboxu 17,100,83,mouse2lh,GUIAddOnTextDAlt,1
GUIDisplayTextY 17,12,100,GUIAddOnTextAAlt
GUIDisplayText 17,12,110,GUIAddOnTextBAlt
GUIDisplayText 17,103,110,GUIAddOnTextCAlt
jmp .endEE
.noEE ;Regular
push eax
push ebx
push ecx
mov eax,GUIAddOnsDispEE
mov ebx,GUIAddOnsDisp
.loopB
mov cl,[eax]
mov [ebx],cl
inc eax
inc ebx
cmp cl,0
jne .loopB
pop ecx
pop ebx
pop eax
GUIDisplayTextY 17,20,15,GUIAddOnText1
GUIDisplayTextY 17,112,15,GUIAddOnText2
GUIDisplayButtonHoleTu 17,9,23,byte[device1],0,GUIAddOnText3,0
GUIDisplayButtonHoleTu 17,9,33,byte[device1],1,GUIAddOnText4,0
GUIDisplayButtonHoleTu 17,100,23,byte[device2],0,GUIAddOnText3,1
GUIDisplayButtonHoleTu 17,100,33,byte[device2],1,GUIAddOnText4,1
GUIDisplayButtonHoleTu 17,100,43,byte[device2],2,GUIAddOnText5,0
GUIDisplayButtonHoleTu 17,100,53,byte[device2],3,GUIAddOnText6,0
GUIDisplayButtonHoleTu 17,100,63,byte[device2],4,GUIAddOnText7,0
GUIDisplayText 17,12,78,GUIAddOnText8
GUIDisplayText 17,103,78,GUIAddOnText9
GUIDisplayCheckboxu 17,9,83,mouse1lh,GUIAddOnTextD,0
GUIDisplayCheckboxu 17,100,83,mouse2lh,GUIAddOnTextD,1
GUIDisplayTextY 17,12,100,GUIAddOnTextA
GUIDisplayText 17,12,110,GUIAddOnTextB
GUIDisplayText 17,103,110,GUIAddOnTextC
.endEE
DDrawBox 17,73,75,[KeyExtraEnab1]
DDrawBox 17,164,75,[KeyExtraEnab2]
DDrawBox 17,73,107,[SSAutoFire]
DDrawBox 17,164,107,[SSPause]
ret
SECTION .data
GUIAddOnText1 db 'PORT 1:',0
GUIAddOnText2 db 'PORT 2:',0
GUIAddOnText3 db 'GAMEPAD',0
GUIAddOnText4 db 'MOUSE',0
GUIAddOnText5 db 'SUPER SCOPE',0
GUIAddOnText6 db '1 JUSTIFIER',0
GUIAddOnText7 db '2 JUSTIFIERS',0
GUIAddOnText8 db 'CYCLE P1:',0
GUIAddOnText9 db 'CYCLE P2:',0
GUIAddOnTextA db 'SUPER SCOPE KEYS:',0
GUIAddOnTextB db 'AUTO-FIRE',0
GUIAddOnTextC db 'SS PAUSE',0
GUIAddOnTextD db 'LEFT HANDED',0
;EE
GUIAddOnText1Alt db 83,76,79,84,32,49,58,0
GUIAddOnText2Alt db 83,76,79,84,32,50,58,0
GUIAddOnText3Alt db 79,70,70,0
GUIAddOnText4Alt db 87,72,73,84,69,32,66,82,69,65,68,0
GUIAddOnText5Alt db 82,89,69,32,66,82,69,65,68,0
GUIAddOnText6Alt db 87,72,69,65,84,32,66,82,69,65,68,0
GUIAddOnText7Alt db 69,78,71,76,73,83,72,32,77,85,70,70,73,78,0
GUIAddOnText8Alt db 80,79,80,32,84,65,82,84,0
GUIAddOnText9Alt db 87,65,70,70,76,69,0
GUIAddOnTextAAlt db 67,79,70,70,69,69,63,0
GUIAddOnTextBAlt db 67,82,69,65,77,0
GUIAddOnTextCAlt db 83,85,71,65,82,0
GUIAddOnTextDAlt db 81,85,73,67,75,32,84,79,65,83,84,0
GUIAddOnEETopBar db 84,79,65,83,84,69,82,32,79,80,84,73,79,78,83,0
SECTION .text
DisplayGUIChipConfig:
GUIDrawWindowBox 18,GUIChipConfigDisp
call EEMode ; You know it!
cmp eax,0
je near .noEE
GUIDisplayText 18,10,38,GUIChipText1Alt
GUIDisplayCheckbox 18,9,43,nssdip1,GUIChipText2Alt
GUIDisplayCheckbox 18,59,43,nssdip2,GUIChipText3Alt
GUIDisplayCheckbox 18,109,43,nssdip3,GUIChipText4Alt
GUIDisplayCheckbox 18,9,53,nssdip4,GUIChipText5Alt
GUIDisplayCheckbox 18,59,53,nssdip5,GUIChipText6Alt
GUIDisplayCheckbox 18,109,53,nssdip6,GUIChipText7Alt
jmp .endEE
.noEE ; Regular Shadow
GUIDisplayTextY 18,10,38,GUIChipTextA
GUIDisplayCheckboxu 18,9,43,nssdip1,GUIChipTextA1,4 ;Checkboxes
GUIDisplayCheckboxu 18,59,43,nssdip2,GUIChipTextA2,4
GUIDisplayCheckboxu 18,109,43,nssdip3,GUIChipTextA3,4
GUIDisplayCheckboxu 18,9,53,nssdip4,GUIChipTextA4,4
GUIDisplayCheckboxu 18,59,53,nssdip5,GUIChipTextA5,4
GUIDisplayCheckboxu 18,109,53,nssdip6,GUIChipTextA6,4
.endEE
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,SRAMPath
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
%ifndef __MSDOS__
cmp dword[GUIInputBox],12
jne .notBox12
mov ebx,GUICustomX
ret
.notBox12
cmp dword[GUIInputBox],13
jne .notBox13
mov ebx,GUICustomY
.notBox13
%endif
cmp dword[GUIInputBox],14
jne .notBox14
mov ebx,GUIMovieForcedText
.notBox14
ret
DisplayGUIPaths:
GUIDrawWindowBox 19,GUIPathsDisp
GUIDisplayText 19,8,18,GUIPathsText1 ; Text
GUIDisplayText 19,8,38,GUIPathsText2
GUIDisplayText 19,8,58,GUIPathsText3
GUIDisplayText 19,60,78,GUIPathsText4
GUIDisplayText 19,8,88,GUIPathsText5
GUIDisplayText 19,135,88,GUIPathsText6
GUIDisplayText 19,8,113,GUIPathsText8
GUIDisplayText 19,135,113,GUIPathsText7
GUIDisplayText 19,45,138,GUIPathsText9
GUIDisplayText 19,8,148,GUIPathsTextA
GUIDisplayText 19,135,148,GUIPathsTextB
GUIDisplayText 19,8,173,GUIPathsTextC
GUIDisplayText 19,135,173,GUIPathsTextD
GUIDisplayBBox 19,75,15,231,25,167 ;Input boxes
GUIDisplayBBox 19,75,35,231,45,167
GUIDisplayBBox 19,75,55,231,65,167
GUIDisplayBBox 19,8,95,106,105,167
GUIDisplayBBox 19,8,120,106,130,167
GUIDisplayBBox 19,135,95,235,105,167
GUIDisplayBBox 19,135,120,235,130,167
GUIDisplayBBox 19,8,155,106,165,167
GUIDisplayBBox 19,8,180,106,190,167
GUIDisplayBBox 19,135,155,235,165,167
GUIDisplayBBox 19,135,180,235,190,167
GUIOuttextwin2d 19,77,19,SRAMPath,25 ; Green Text
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
GUIBlinkCursor db 0,0
GUIBlinkCursorLoop db 0
SECTION .text
DisplayGUISave: ;Save & Rewind options/Hotkeys
GUIDrawWindowBox 20,GUISaveDisp
GUIDisplayText 20,8,19,GUISaveTextA1 ; Text
GUIDisplayText 20,8,31,GUISaveTextA2
GUIDisplayText 20,9,159,GUISaveTextC2
GUIDisplayText 20,9+57,159,GUISaveTextC3
GUIDisplayText 20,9+114,159,GUISaveTextC4
GUIDisplayText 20,9,168,GUISaveTextC5
GUIDisplayTextY 20,6,123,GUISaveTextC
mov byte[GUISaveTextC1+2],'0'
GUIDisplayText 20,9,132,GUISaveTextC1
mov byte[GUISaveTextC1+2],'1'
GUIDisplayText 20,9+45,132,GUISaveTextC1
mov byte[GUISaveTextC1+2],'2'
GUIDisplayText 20,9+45*2,132,GUISaveTextC1
mov byte[GUISaveTextC1+2],'3'
GUIDisplayText 20,9+45*3,132,GUISaveTextC1
mov byte[GUISaveTextC1+2],'4'
GUIDisplayText 20,9,141,GUISaveTextC1
mov byte[GUISaveTextC1+2],'5'
GUIDisplayText 20,9+45,141,GUISaveTextC1
mov byte[GUISaveTextC1+2],'6'
GUIDisplayText 20,9+45*2,141,GUISaveTextC1
mov byte[GUISaveTextC1+2],'7'
GUIDisplayText 20,9+45*3,141,GUISaveTextC1
mov byte[GUISaveTextC1+2],'8'
GUIDisplayText 20,9,150,GUISaveTextC1
mov byte[GUISaveTextC1+2],'9'
GUIDisplayText 20,9+45,150,GUISaveTextC1
mov byte[GUISaveTextC1+2],'+'
GUIDisplayText 20,9+45*2,150,GUISaveTextC1
mov byte[GUISaveTextC1+2],'-'
GUIDisplayText 20,9+45*3,150,GUISaveTextC1
GUIDisplayCheckboxu 20,11,38,nosaveSRAM,GUISaveTextB1,0
cmp byte[nosaveSRAM],0
jne near .nosavesram
GUIDisplayCheckboxu 20,11,48,SRAMSave5Sec,GUISaveTextB2,5 ;Checkboxes
.nosavesram
GUIDisplayCheckboxu 20,11,58,SRAMState,GUISaveTextB3,0
GUIDisplayCheckboxu 20,11,68,LatestSave,GUISaveTextB4,0
GUIDisplayCheckboxu 20,11,78,AutoIncSaveSlot,GUISaveTextB5,5
GUIDisplayCheckboxu 20,11,88,AutoState,GUISaveTextB6,0
GUIDisplayCheckboxu 20,11,98,PauseLoad,GUISaveTextB7,0
GUIDisplayCheckboxu 20,11,108,PauseRewind,GUISaveTextB8,12
GUIDisplayBBox 20,150,17,165,24,167 ; Rewind States Box
mov ah,[RewindStates]
mov al,48
add ah,48
.asciiloop
cmp ah,58
jb .hex2asciidone
inc al
sub ah,10
jmp .asciiloop
.hex2asciidone
mov [GUISaveTextZ3],ax
GUIDisplayTextG 20,154,19,GUISaveTextZ3
GUIDisplayBBox 20,150,29,165,36,167 ; Second/Rewind Box
mov ah,[RewindFrames]
mov al,48
add ah,48
.asciiloop2
cmp ah,58
jb .hex2asciidone2
inc al
sub ah,10
jmp .asciiloop2
.hex2asciidone2
mov [GUISaveTextZ3],ax
GUIDisplayTextG 20,154,31,GUISaveTextZ3
DDrawBox 20,26,129,[KeyStateSlc0] ; Boxes for State section
DDrawBox 20,71,129,[KeyStateSlc1]
DDrawBox 20,116,129,[KeyStateSlc2]
DDrawBox 20,161,129,[KeyStateSlc3]
DDrawBox 20,26,138,[KeyStateSlc4]
DDrawBox 20,71,138,[KeyStateSlc5]
DDrawBox 20,116,138,[KeyStateSlc6]
DDrawBox 20,161,138,[KeyStateSlc7]
DDrawBox 20,26,147,[KeyStateSlc8]
DDrawBox 20,71,147,[KeyStateSlc9]
DDrawBox 20,116,147,[KeyIncStateSlot]
DDrawBox 20,161,147,[KeyDecStateSlot]
DDrawBox 20,32,156,[KeySaveState]
DDrawBox 20,89,156,[KeyLoadState]
DDrawBox 20,146,156,[KeyStateSelct]
DDrawBox 20,45,165,[KeyRewind]
mov byte[GUItextcolor],217 ;Buttons
cmp byte[GUIWincoladd],0
je .zero
mov byte[GUItextcolor],211
.zero
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 'DO NOT SAVE SRAM',0
GUISaveTextB2 db 'SRAM CHECK+SAVE',0
GUISaveTextB3 db 'LOAD SAVESTATE W/SRAM',0
GUISaveTextB4 db 'START AT LATEST SAVE',0
GUISaveTextB5 db 'AUTO INCREMENT SAVE SLOT',0
GUISaveTextB6 db 'AUTO STATE SAVE/LOAD',0
GUISaveTextB7 db 'PAUSE AFTER LOADING STATE',0
GUISaveTextB8 db 'PAUSE AFTER REWIND',0
GUISaveTextC db 'STATE SHORTCUTS:',0
GUISaveTextC1 db 'ST#',0 ; Used for numbers 0-9 and +/-
GUISaveTextC2 db 'SAVE',0
GUISaveTextC3 db 'LOAD',0
GUISaveTextC4 db 'PICK',0
GUISaveTextC5 db 'REWIND',0
GUISaveTextZ1 db '+',0
GUISaveTextZ2 db '-',0
GUISaveTextZ3 db ' ',0
SECTION .text
%macro SpdslidSet 1 ; slider var
mov al,[%1]
shl eax,1
%endmacro
%macro SpdslidText 2 ; slider var, text
mov dword[%2],0
mov esi,%2+2
mov al,[%1] ; currently emuspeed ranges from 0 to 58
mov bl,10
cmp al,29 ; this will turn it into '/30' to '30x'
jb %%slowmo
mov byte[esi],'x' ; adds 'x' after the ff value
sub al,28
jmp %%asciilp
%%slowmo
inc esi
mov byte[%2],1 ; slomo indicator
mov al,30
sub al,[%1]
%%asciilp ; turns decimal into ascii
dec esi
xor ah,ah
div bl
add ah,48
mov [esi],ah
cmp al,0
jne %%asciilp
cmp byte[%2],1
jne %%done
dec esi
mov byte[esi],'/' ; adds '/' before the slomo value
%%done
%endmacro
DisplayGUISpeed: ;Speed Options
GUIDrawWindowBox 21,GUISpeedDisp
cmp byte[frameskip],0
jne near .noautoshad
GUIDisplayText 21,6,15,GUISpeedTextA1
GUIDisplayText 21,40,79,GUISpeedTextB3
GUIDisplayText 21,40,99,GUISpeedTextB5
GUIDisplayTextY 21,8,164,GUISpeedTextD
jmp near .endautoshad
.noautoshad
GUIDisplayText 21,6,15,GUISpeedTextA1b
GUIDisplayText 21,40,79,GUISpeedTextB3b
GUIDisplayText 21,40,99,GUISpeedTextB5b
.endautoshad
GUIDisplayText 21,6,26,GUISpeedTextA2
GUIDisplayText 21,6,37,GUISpeedTextA3
GUIDisplayTextY 21,8,49,GUISpeedTextB
GUIDisplayText 21,40,59,GUISpeedTextB1
GUIDisplayText 21,40,69,GUISpeedTextB2
GUIDisplayText 21,40,89,GUISpeedTextB4
GUIDisplayText 21,40,109,GUISpeedTextB6
GUIDisplayText 21,40,119,GUISpeedTextB7
cmp byte[frameskip],0 ; Shortcut Boxes
jne near .frate
DDrawBox 21,10,76,[KeyEmuSpeedUp]
DDrawBox 21,10,96,[KeyEmuSpeedDown]
jmp near .endsc
.frate
DDrawBox 21,10,76,[KeyFRateUp]
DDrawBox 21,10,96,[KeyFRateDown]
.endsc
DDrawBox 21,10,56,[KeyFastFrwrd]
DDrawBox 21,10,66,[KeySlowDown]
DDrawBox 21,10,86,[KeyResetSpeed]
DDrawBox 21,10,106,[EMUPauseKey]
DDrawBox 21,10,116,[INCRFrameKey]
GUIDisplayCheckboxu 21,11,135,FastFwdToggle,GUISpeedTextC1,0
GUIDisplayCheckboxun 21,11,145,frameskip,0,GUISpeedTextC2,0
GUIDisplayBBox 21,96,24,114,31,167 ; FF Ratio Box
mov ah,[FFRatio]
add ah,2
mov al,48
add ah,48
.asciiloop
cmp ah,58
jb .hex2asciidone
inc al
sub ah,10
jmp .asciiloop
.hex2asciidone
cmp al,48
jne .yestens
mov al,32
.yestens
mov [GUISpeedTextZ3],ax
GUIDisplayTextG 21,101,26,GUISpeedTextZ3
GUIDisplayBBox 21,96,35,114,42,167 ; SD Ratio Box
mov ah,[SDRatio]
add ah,2
mov al,48
add ah,48
.asciiloop2
cmp ah,58
jb .hex2asciidone2
inc al
sub ah,10
jmp .asciiloop2
.hex2asciidone2
cmp al,48
jne .yestens2
mov al,32
.yestens2
mov [GUISpeedTextZ3],ax
GUIDisplayTextG 21,101,37,GUISpeedTextZ3
mov byte[GUItextcolor],217 ;Buttons
cmp byte[GUIWincoladd],0
je .zero88
mov byte[GUItextcolor],211
.zero88
DrawGUIButton 21,118,24,126,32,GUISaveTextZ1,74,-2,-1 ; + Rewind States
DrawGUIButton 21,129,24,137,32,GUISaveTextZ2,75,-2,-1 ; - Rewind States
DrawGUIButton 21,118,35,126,43,GUISaveTextZ1,76,-2,-1 ; + Second/Rewind
DrawGUIButton 21,129,35,137,43,GUISaveTextZ2,77,-2,-1 ; - Second/Rewind
cmp byte[frameskip],0
jne near .noslider
GUIDrawSlider 21,7,116,175,EmuSpeed,GUISpeedTextD1,SpdslidSet,SpdslidText
.noslider
cmp byte[frameskip],0 ; Determine if AutoFR is enabled
je near .auto
GUIDisplayBBox 21,96,13,114,20,167 ; Non AFR FrameRate +/- Box
mov al,[frameskip]
add al,47
mov [GUISpeedTextX],al
GUIDisplayTextG 21,107,15,GUISpeedTextX
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .zero6
mov byte[GUItextcolor],211
.zero6
DrawGUIButton 21,118,13,126,21,GUISpeedTextY,78,-2,-1
DrawGUIButton 21,129,13,137,21,GUISpeedTextZ,79,-2,-1
jmp .ratioborders
.auto ; AFR Max Frameskip +/- Box
GUIDisplayBBox 21,96,13,114,20,167
mov al,[maxskip]
add al,48
mov [GUISpeedTextX],al
GUIDisplayTextG 21,107,15,GUISpeedTextX
mov byte[GUItextcolor],217
cmp byte[GUIWincoladd],0
je .zero5
mov byte[GUItextcolor],211
.zero5
DrawGUIButton 21,118,13,126,21,GUISpeedTextY,78,-2,-1
DrawGUIButton 21,129,13,137,21,GUISpeedTextZ,79,-2,-1
.ratioborders
ret
SECTION .data
GUISpeedTextA1 db 'MAX FRAME SKIP',0
GUISpeedTextA1b db 'FRAME RATE',0
GUISpeedTextA2 db 'FASTFWD RATIO x',0
GUISpeedTextA3 db 'SLOWDWN RATIO /',0
GUISpeedTextB db 'SHORTCUTS:',0
GUISpeedTextB1 db 'FAST FORWARD',0
GUISpeedTextB2 db 'SLOW DOWN',0
GUISpeedTextB3 db '+ EMU SPEED',0
GUISpeedTextB3b db '+ FRAME RATE',0
GUISpeedTextB4 db 'RESET SPEED',0
GUISpeedTextB5 db '- EMU SPEED',0
GUISpeedTextB5b db '- FRAME RATE',0
GUISpeedTextB6 db 'PAUSE GAME',0
GUISpeedTextB7 db 'INCR FRAME',0
GUISpeedTextC1 db 'TOGGLED FFWD/SLWDWN',0
GUISpeedTextC2 db 'AUTO FRAME RATE',0
GUISpeedTextD db 'EMU SPEED:',0
GUISpeedTextD1 db '---',0
GUISpeedTextZ3 db '--',0
GUISpeedTextX db '-',0
GUISpeedTextY db '+',0
GUISpeedTextZ 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 'MISC 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 'DEVICES SELECTOR',0
GUIAddOnsDispEE db 'DEVICES 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