5244 lines
132 KiB
PHP
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
|