o cleanup
This commit is contained in:
3768
tools/zsnes/src/gui/gui.asm
Normal file
3768
tools/zsnes/src/gui/gui.asm
Normal file
File diff suppressed because it is too large
Load Diff
1165
tools/zsnes/src/gui/guicheat.inc
Normal file
1165
tools/zsnes/src/gui/guicheat.inc
Normal file
File diff suppressed because it is too large
Load Diff
193
tools/zsnes/src/gui/guicombo.inc
Normal file
193
tools/zsnes/src/gui/guicombo.inc
Normal file
@@ -0,0 +1,193 @@
|
||||
;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.
|
||||
|
||||
|
||||
|
||||
SECTION .text
|
||||
|
||||
ComboClip:
|
||||
movzx eax,byte[GUINumCombo]
|
||||
.next
|
||||
cmp al,42
|
||||
jae .excess
|
||||
mov byte[GUIComboData+eax],0
|
||||
inc eax
|
||||
jmp .next
|
||||
.excess
|
||||
ret
|
||||
|
||||
ComboAdder:
|
||||
cmp byte[romloadskip],0
|
||||
je .romloaded
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
jne near .skipall
|
||||
.romloaded
|
||||
pushad
|
||||
call ComboClip
|
||||
mov eax,[NumCombo]
|
||||
shl eax,6
|
||||
add eax,[NumCombo]
|
||||
add eax,[NumCombo]
|
||||
add eax,CombinDataGlob
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
je .nogamespec
|
||||
sub eax,CombinDataGlob
|
||||
add eax,CombinDataLocl
|
||||
.nogamespec
|
||||
; copy data to eax
|
||||
mov ecx,20 ; copy name
|
||||
mov ebx,GUIComboTextH
|
||||
.loop
|
||||
mov dl,[ebx]
|
||||
mov [eax],dl
|
||||
inc ebx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loop
|
||||
mov ecx,42 ; copy combination code
|
||||
mov ebx,GUIComboData
|
||||
.loop2
|
||||
mov dl,[ebx]
|
||||
mov [eax],dl
|
||||
inc ebx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loop2
|
||||
mov dx,[GUIComboKey]
|
||||
mov [eax],dx
|
||||
mov dl,[GUIComboPNum]
|
||||
mov [eax+2],dl
|
||||
mov dl,[GUIComboLHorz]
|
||||
mov [eax+3],dl
|
||||
mov eax,[NumCombo]
|
||||
mov [GUIccombcursloc],eax
|
||||
sub eax,7
|
||||
cmp [GUIccombviewloc],eax
|
||||
jge .rangeokay
|
||||
mov [GUIccombviewloc],eax
|
||||
.rangeokay
|
||||
inc dword[NumCombo]
|
||||
mov eax,[NumCombo]
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
jne .local
|
||||
mov [NumComboGlob],eax
|
||||
jmp .global
|
||||
.local
|
||||
mov [NumComboLocl],eax
|
||||
.global
|
||||
popad
|
||||
mov byte[GUIComboTextH],0
|
||||
mov byte[GUINumCombo],0
|
||||
mov dword[GUIComboKey],0
|
||||
.skipall
|
||||
ret
|
||||
|
||||
ComboReplace:
|
||||
pushad
|
||||
call ComboClip
|
||||
mov eax,[GUIccombcursloc]
|
||||
shl eax,6
|
||||
add eax,[GUIccombcursloc]
|
||||
add eax,[GUIccombcursloc]
|
||||
add eax,CombinDataGlob
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
je .nogamespec
|
||||
sub eax,CombinDataGlob
|
||||
add eax,CombinDataLocl
|
||||
.nogamespec
|
||||
; copy data to eax
|
||||
mov ecx,20 ; copy name
|
||||
mov ebx,GUIComboTextH
|
||||
.loop
|
||||
mov dl,[ebx]
|
||||
mov [eax],dl
|
||||
inc ebx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loop
|
||||
mov ecx,42 ; copy combination code
|
||||
mov ebx,GUIComboData
|
||||
.loop2
|
||||
mov dl,[ebx]
|
||||
mov [eax],dl
|
||||
inc ebx
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .loop2
|
||||
mov dx,[GUIComboKey]
|
||||
mov [eax],dx
|
||||
mov dl,[GUIComboPNum]
|
||||
mov [eax+2],dl
|
||||
mov dl,[GUIComboLHorz]
|
||||
mov [eax+3],dl
|
||||
popad
|
||||
ret
|
||||
|
||||
ComboRemoval:
|
||||
pushad
|
||||
mov eax,[GUIccombcursloc]
|
||||
shl eax,6
|
||||
add eax,[GUIccombcursloc]
|
||||
add eax,[GUIccombcursloc]
|
||||
add eax,CombinDataGlob
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
je .nogamespec
|
||||
sub eax,CombinDataGlob
|
||||
add eax,CombinDataLocl
|
||||
.nogamespec
|
||||
mov ecx,[NumCombo]
|
||||
sub ecx,[GUIccombcursloc]
|
||||
dec ecx
|
||||
cmp ecx,0
|
||||
jle .nomove
|
||||
.loop2
|
||||
mov ebx,66
|
||||
.loop
|
||||
mov dl,[eax+66]
|
||||
mov [eax],dl
|
||||
inc eax
|
||||
dec ebx
|
||||
jnz .loop
|
||||
dec ecx
|
||||
jnz .loop2
|
||||
.nomove
|
||||
dec dword[NumCombo]
|
||||
mov eax,[NumCombo]
|
||||
or eax,eax
|
||||
jz .yeszero
|
||||
dec eax
|
||||
.yeszero
|
||||
cmp [GUIccombviewloc],eax
|
||||
jbe .notequal
|
||||
mov [GUIccombviewloc],eax
|
||||
.notequal
|
||||
cmp [GUIccombcursloc],eax
|
||||
jbe .notequal2
|
||||
mov [GUIccombcursloc],eax
|
||||
.notequal2
|
||||
mov eax,[NumCombo]
|
||||
cmp byte[GUIComboGameSpec],0
|
||||
jne .local
|
||||
mov [NumComboGlob],eax
|
||||
jmp .global
|
||||
.local
|
||||
mov [NumComboLocl],eax
|
||||
.global
|
||||
popad
|
||||
ret
|
||||
1850
tools/zsnes/src/gui/guifuncs.c
Normal file
1850
tools/zsnes/src/gui/guifuncs.c
Normal file
File diff suppressed because it is too large
Load Diff
2959
tools/zsnes/src/gui/guikeys.inc
Normal file
2959
tools/zsnes/src/gui/guikeys.inc
Normal file
File diff suppressed because it is too large
Load Diff
620
tools/zsnes/src/gui/guimisc.inc
Normal file
620
tools/zsnes/src/gui/guimisc.inc
Normal file
@@ -0,0 +1,620 @@
|
||||
;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.
|
||||
|
||||
|
||||
|
||||
; Movie, Joystick setting (display) routines, SNES Reset Function
|
||||
|
||||
SECTION .bss
|
||||
NEWSYM MovieRecordWinVal, resb 1
|
||||
NEWSYM MovieProcessing, resb 1
|
||||
NEWSYM MovieFileHand, resw 1
|
||||
NEWSYM RecData, resb 16
|
||||
NEWSYM NoPictureSave, resb 1
|
||||
|
||||
SECTION .text
|
||||
|
||||
CalibrateDispA:
|
||||
xor ebx,ebx
|
||||
mov ecx,256
|
||||
.a
|
||||
mov byte[pressed+ebx],0
|
||||
inc ebx
|
||||
dec ecx
|
||||
jnz .a
|
||||
call GUIUnBuffer
|
||||
call DisplayBoxes
|
||||
call DisplayMenu
|
||||
GUIBox 75,103,192,135,160
|
||||
GUIBox 75,103,192,103,162
|
||||
GUIBox 75,103,75,135,161
|
||||
GUIBox 192,103,192,135,159
|
||||
GUIBox 75,135,192,135,158
|
||||
GUIOuttext 81,109,guicalberror1,220-15
|
||||
GUIOuttext 80,108,guicalberror1,220
|
||||
GUIOuttext 81,117,guicalberror2,220-15
|
||||
GUIOuttext 80,116,guicalberror2,220
|
||||
GUIOuttext 81,125,guicalberror3,220-15
|
||||
GUIOuttext 80,124,guicalberror3,220
|
||||
call vidpastecopyscr
|
||||
call WaitForKey
|
||||
ret
|
||||
|
||||
CalibrateDispB:
|
||||
xor ebx,ebx
|
||||
mov ecx,256
|
||||
.a
|
||||
mov byte[pressed+ebx],0
|
||||
inc ebx
|
||||
dec ecx
|
||||
jnz .a
|
||||
call GUIUnBuffer
|
||||
call DisplayBoxes
|
||||
call DisplayMenu
|
||||
GUIBox 75,103,192,143,160
|
||||
GUIBox 75,103,192,103,162
|
||||
GUIBox 75,103,75,143,161
|
||||
GUIBox 192,103,192,143,159
|
||||
GUIBox 75,143,192,143,158
|
||||
GUIOuttext 81,109,guicalberror4,220-15
|
||||
GUIOuttext 80,108,guicalberror4,220
|
||||
GUIOuttext 81,117,guicalberror5,220-15
|
||||
GUIOuttext 80,116,guicalberror5,220
|
||||
GUIOuttext 81,125,guicalberror6,220-15
|
||||
GUIOuttext 80,124,guicalberror6,220
|
||||
GUIOuttext 81,133,guicalberror7,220-15
|
||||
GUIOuttext 80,132,guicalberror7,220
|
||||
call vidpastecopyscr
|
||||
call WaitForKey
|
||||
ret
|
||||
|
||||
SECTION .data
|
||||
guicalberror1 db 'PRESS THE TOP LEFT',0
|
||||
guicalberror2 db 'CORNER AND PRESS A',0
|
||||
guicalberror3 db 'BUTTON OR KEY',0
|
||||
guicalberror4 db 'PRESS THE BOTTOM',0
|
||||
guicalberror5 db 'RIGHT CORNER AND',0
|
||||
guicalberror6 db 'PRESS A BUTTON OR',0
|
||||
guicalberror7 db 'KEY',0
|
||||
SECTION .text
|
||||
|
||||
%macro ConfigureKey2 2
|
||||
cmp ebx,0
|
||||
jne near %%no0
|
||||
mov dword[%2],%1upk ; Up
|
||||
%%no0
|
||||
cmp ebx,1
|
||||
jne near %%no1
|
||||
mov dword[%2],%1downk ; Down
|
||||
%%no1
|
||||
cmp ebx,2
|
||||
jne near %%no2
|
||||
mov dword[%2],%1leftk ; Left
|
||||
%%no2
|
||||
cmp ebx,3
|
||||
jne near %%no3
|
||||
mov dword[%2],%1rightk ; Right
|
||||
%%no3
|
||||
cmp ebx,4
|
||||
jne near %%no4
|
||||
mov dword[%2],%1startk ; Start
|
||||
%%no4
|
||||
cmp ebx,5
|
||||
jne near %%no5
|
||||
mov dword[%2],%1selk ; Select
|
||||
%%no5
|
||||
cmp ebx,6
|
||||
jne near %%no6
|
||||
mov dword[%2],%1Ak ; A
|
||||
%%no6
|
||||
cmp ebx,7
|
||||
jne near %%no7
|
||||
mov dword[%2],%1Bk ; B
|
||||
%%no7
|
||||
cmp ebx,8
|
||||
jne near %%no8
|
||||
mov dword[%2],%1Xk ; X
|
||||
%%no8
|
||||
cmp ebx,9
|
||||
jne near %%no9
|
||||
mov dword[%2],%1Yk ; Y
|
||||
%%no9
|
||||
cmp ebx,10
|
||||
jne near %%no10
|
||||
mov dword[%2],%1Lk ; L
|
||||
%%no10
|
||||
cmp ebx,11
|
||||
jne near %%no11
|
||||
mov dword[%2],%1Rk ; R
|
||||
%%no11
|
||||
%endmacro
|
||||
|
||||
%macro ConfigureKey 2
|
||||
cmp byte[%2],0
|
||||
jne near %%nopl1
|
||||
ConfigureKey2 pl1,%1
|
||||
%%nopl1
|
||||
cmp byte[%2],1
|
||||
jne near %%nopl2
|
||||
ConfigureKey2 pl2,%1
|
||||
%%nopl2
|
||||
cmp byte[%2],2
|
||||
jne near %%nopl3
|
||||
ConfigureKey2 pl3,%1
|
||||
%%nopl3
|
||||
cmp byte[%2],3
|
||||
jne near %%nopl4
|
||||
ConfigureKey2 pl4,%1
|
||||
%%nopl4
|
||||
cmp byte[%2],4
|
||||
jne near %%nopl5
|
||||
ConfigureKey2 pl5,%1
|
||||
%%nopl5
|
||||
%endmacro
|
||||
|
||||
SetAllKeys:
|
||||
xor ebx,ebx
|
||||
mov ecx,256+128+64
|
||||
.a
|
||||
mov byte[pressed+ebx],0
|
||||
inc ebx
|
||||
dec ecx
|
||||
jnz .a
|
||||
|
||||
mov byte[GUICBHold],0
|
||||
mov dword[keycontrolval],pl1contrl
|
||||
cmp byte[cplayernum],1
|
||||
jne .nopl2
|
||||
mov dword[keycontrolval],pl2contrl
|
||||
.nopl2
|
||||
cmp byte[cplayernum],2
|
||||
jne .nopl3
|
||||
mov dword[keycontrolval],pl3contrl
|
||||
.nopl3
|
||||
cmp byte[cplayernum],3
|
||||
jne .nopl4
|
||||
mov dword[keycontrolval],pl4contrl
|
||||
.nopl4
|
||||
cmp byte[cplayernum],4
|
||||
jne .nopl5
|
||||
mov dword[keycontrolval],pl5contrl
|
||||
.nopl5
|
||||
|
||||
;Check if controller is set
|
||||
push eax
|
||||
mov eax,[keycontrolval]
|
||||
cmp dword[eax],0
|
||||
pop eax
|
||||
jne .noLockInputChange
|
||||
ret
|
||||
.noLockInputChange
|
||||
xor ebx,ebx
|
||||
mov ecx,12
|
||||
mov dword[guipressptr],guipresstext4b
|
||||
.loop
|
||||
ConfigureKey guicpressptr,cplayernum
|
||||
push ebx
|
||||
push ecx
|
||||
call guipresstestb
|
||||
pop ecx
|
||||
pop ebx
|
||||
add dword[guipressptr],21
|
||||
inc ebx
|
||||
dec ecx
|
||||
jnz .loop
|
||||
ret
|
||||
SECTION .data
|
||||
SECTION .text
|
||||
|
||||
CalibrateDev1:
|
||||
movzx eax,byte[cplayernum]
|
||||
mov ebx,[GUIInputRefP+eax*4]
|
||||
mov bl,[ebx]
|
||||
mov byte[GUICBHold],0
|
||||
%ifdef __MSDOS__
|
||||
cmp al,0
|
||||
jne .notpl1
|
||||
cmp byte[pl1p209],0
|
||||
jne near .port209
|
||||
.notpl1
|
||||
cmp al,1
|
||||
jne .notpl2
|
||||
cmp byte[pl2p209],0
|
||||
jne near .port209
|
||||
.notpl2
|
||||
cmp al,2
|
||||
jne .notpl3
|
||||
cmp byte[pl3p209],0
|
||||
jne near .port209
|
||||
.notpl3
|
||||
cmp al,3
|
||||
jne .notpl4
|
||||
cmp byte[pl4p209],0
|
||||
jne near .port209
|
||||
.notpl4
|
||||
cmp al,4
|
||||
jne .notpl5
|
||||
cmp byte[pl5p209],0
|
||||
jne near .port209
|
||||
.notpl5
|
||||
%endif
|
||||
cmp bl,1
|
||||
jbe .nojoy
|
||||
cmp bl,18
|
||||
je near .6button
|
||||
cmp bl,5
|
||||
je near .6button
|
||||
cmp bl,6
|
||||
jae .nojoy
|
||||
mov dx,201h
|
||||
call GetCoords
|
||||
mov eax,[JoyX]
|
||||
mov [.joybcx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybcy],eax
|
||||
call CalibrateDispA
|
||||
mov dx,201h
|
||||
call GetCoords
|
||||
mov eax,[JoyX]
|
||||
mov [.joyblx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybly],eax
|
||||
call CalibrateDispB
|
||||
mov dx,201h
|
||||
call GetCoords
|
||||
jmp .procdir
|
||||
.nojoy
|
||||
ret
|
||||
.6button
|
||||
mov dx,201h
|
||||
call GetCoords3
|
||||
mov eax,[JoyX]
|
||||
mov [.joybcx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybcy],eax
|
||||
call CalibrateDispA
|
||||
mov dx,201h
|
||||
call GetCoords3
|
||||
mov eax,[JoyX]
|
||||
mov [.joyblx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybly],eax
|
||||
call CalibrateDispB
|
||||
mov dx,201h
|
||||
call GetCoords3
|
||||
.procdir
|
||||
mov eax,[.joybcx]
|
||||
add eax,[.joyblx]
|
||||
shr eax,1
|
||||
mov [JoyMinX],eax
|
||||
mov [CalibXmin],eax
|
||||
mov eax,[.joybcy]
|
||||
add eax,[.joybly]
|
||||
shr eax,1
|
||||
mov [JoyMinY],eax
|
||||
mov [CalibYmin],eax
|
||||
mov eax,[.joybcx]
|
||||
add eax,[JoyX]
|
||||
shr eax,1
|
||||
mov [JoyMaxX],eax
|
||||
mov [CalibXmax],eax
|
||||
mov eax,[.joybcy]
|
||||
add eax,[JoyY]
|
||||
shr eax,1
|
||||
mov [JoyMaxY],eax
|
||||
mov [CalibYmax],eax
|
||||
ret
|
||||
%ifdef __MSDOS__
|
||||
.port209
|
||||
cmp bl,1
|
||||
jbe .nojoy209
|
||||
cmp bl,18
|
||||
je near .6button209
|
||||
cmp bl,5
|
||||
je near .6button209
|
||||
cmp bl,6
|
||||
jae .nojoy209
|
||||
mov dx,209h
|
||||
call GetCoords
|
||||
mov eax,[JoyX]
|
||||
mov [.joybcx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybcy],eax
|
||||
call CalibrateDispA
|
||||
mov dx,209h
|
||||
call GetCoords
|
||||
mov eax,[JoyX]
|
||||
mov [.joyblx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybly],eax
|
||||
call CalibrateDispB
|
||||
mov dx,209h
|
||||
call GetCoords
|
||||
jmp .procdir209
|
||||
.nojoy209
|
||||
ret
|
||||
.6button209
|
||||
mov dx,209h
|
||||
call GetCoords3
|
||||
mov eax,[JoyX]
|
||||
mov [.joybcx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybcy],eax
|
||||
call CalibrateDispA
|
||||
mov dx,209h
|
||||
call GetCoords3
|
||||
mov eax,[JoyX]
|
||||
mov [.joyblx],eax
|
||||
mov eax,[JoyY]
|
||||
mov [.joybly],eax
|
||||
call CalibrateDispB
|
||||
mov dx,209h
|
||||
call GetCoords3
|
||||
.procdir209
|
||||
mov eax,[.joybcx]
|
||||
add eax,[.joyblx]
|
||||
shr eax,1
|
||||
mov [JoyMinX209],eax
|
||||
mov [CalibXmin209],eax
|
||||
mov eax,[.joybcy]
|
||||
add eax,[.joybly]
|
||||
shr eax,1
|
||||
mov [JoyMinY209],eax
|
||||
mov [CalibYmin209],eax
|
||||
mov eax,[.joybcx]
|
||||
add eax,[JoyX]
|
||||
shr eax,1
|
||||
mov [JoyMaxX209],eax
|
||||
mov [CalibXmax209],eax
|
||||
mov eax,[.joybcy]
|
||||
add eax,[JoyY]
|
||||
shr eax,1
|
||||
mov [JoyMaxY209],eax
|
||||
mov [CalibYmax209],eax
|
||||
ret
|
||||
%endif
|
||||
SECTION .bss
|
||||
.joyblx resd 1
|
||||
.joybly resd 1
|
||||
.joybcx resd 1
|
||||
.joybcy resd 1
|
||||
SECTION .text
|
||||
|
||||
|
||||
SetDevice:
|
||||
mov byte[GUICBHold],0
|
||||
movzx eax,byte[cplayernum]
|
||||
%ifdef __MSDOS__
|
||||
cmp al,0
|
||||
jne .notpl1
|
||||
cmp byte[pl1p209],0
|
||||
jne .port209
|
||||
.notpl1
|
||||
cmp al,1
|
||||
jne .notpl2
|
||||
cmp byte[pl2p209],0
|
||||
jne .port209
|
||||
.notpl2
|
||||
cmp al,2
|
||||
jne .notpl3
|
||||
cmp byte[pl3p209],0
|
||||
jne .port209
|
||||
.notpl3
|
||||
cmp al,3
|
||||
jne .notpl4
|
||||
cmp byte[pl4p209],0
|
||||
jne .port209
|
||||
.notpl4
|
||||
cmp al,4
|
||||
jne .notpl5
|
||||
cmp byte[pl5p209],0
|
||||
jne .port209
|
||||
.notpl5
|
||||
%endif
|
||||
;.notdos
|
||||
mov dword[CalibXmin],0
|
||||
mov eax,[GUIInputRefP+eax*4]
|
||||
mov bl,[GUIcurrentinputcursloc]
|
||||
mov [eax],bl
|
||||
mov bh,[cplayernum]
|
||||
call SetInputDevice
|
||||
call UpdateDevices
|
||||
jmp .procmtap
|
||||
%ifdef __MSDOS__
|
||||
.port209
|
||||
mov dword[CalibXmin209],0
|
||||
mov eax,[GUIInputRefP+eax*4]
|
||||
mov bl,[GUIcurrentinputcursloc]
|
||||
mov [eax],bl
|
||||
mov bh,[cplayernum]
|
||||
call SetInputDevice209
|
||||
call UpdateDevices
|
||||
%endif
|
||||
.procmtap
|
||||
mov byte[MultiTap],1
|
||||
cmp byte[SFXEnable],1
|
||||
je .dismtap
|
||||
cmp byte[pl3contrl],0
|
||||
jne .mtap
|
||||
cmp byte[pl4contrl],0
|
||||
jne .mtap
|
||||
cmp byte[pl5contrl],0
|
||||
jne .mtap
|
||||
.dismtap
|
||||
mov byte[MultiTap],0
|
||||
.mtap
|
||||
ret
|
||||
|
||||
NEWSYM GUIDoReset
|
||||
%ifdef __MSDOS__
|
||||
call DOSClearScreen
|
||||
%endif
|
||||
pushad
|
||||
call Clear2xSaIBuffer
|
||||
popad
|
||||
; mov byte[NetPlayNoMore],1
|
||||
mov byte[RestoreValues],0
|
||||
|
||||
pushad
|
||||
call MovieStop
|
||||
call RestoreSystemVars
|
||||
popad
|
||||
|
||||
; reset the snes
|
||||
call init65816
|
||||
pushad
|
||||
call procexecloop
|
||||
popad
|
||||
|
||||
xor eax,eax
|
||||
mov edx,SPCRAM
|
||||
mov ax,0FFC9h
|
||||
add edx,eax
|
||||
mov [spcPCRam],edx
|
||||
mov dword[spcS],1EFh
|
||||
mov dword[spcRamDP],SPCRAM
|
||||
mov byte[spcA],0
|
||||
mov byte[spcX],0
|
||||
mov byte[spcY],0
|
||||
mov byte[spcP],0
|
||||
mov byte[spcNZ],0
|
||||
mov byte[Voice0Status],0
|
||||
mov byte[Voice1Status],0
|
||||
mov byte[Voice2Status],0
|
||||
mov byte[Voice3Status],0
|
||||
mov byte[Voice4Status],0
|
||||
mov byte[Voice5Status],0
|
||||
mov byte[Voice6Status],0
|
||||
mov byte[Voice7Status],0
|
||||
mov byte[GUIQuit],2
|
||||
ret
|
||||
|
||||
SECTION .bss
|
||||
NEWSYM JoyX, resd 1
|
||||
NEWSYM JoyY, resd 1
|
||||
NEWSYM JoyX2, resd 1
|
||||
NEWSYM JoyY2, resd 1
|
||||
NEWSYM JoyMaxX, resd 1
|
||||
NEWSYM JoyMaxY, resd 1
|
||||
NEWSYM JoyMinX, resd 1
|
||||
NEWSYM JoyMinY, resd 1
|
||||
NEWSYM JoyExists, resb 1
|
||||
NEWSYM JoyExists2, resb 1
|
||||
|
||||
SECTION .text
|
||||
NEWSYM GetCoords
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
cli
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov ecx,00FFFFh
|
||||
.loopa
|
||||
in al,dx
|
||||
test al,01h
|
||||
jz .YAxis
|
||||
test al,02h
|
||||
jz .XAxis
|
||||
inc dword[JoyX]
|
||||
inc dword[JoyY]
|
||||
dec ecx
|
||||
jnz .loopa
|
||||
mov byte[JoyExists], 0
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
jmp .End
|
||||
.YAxis
|
||||
in al,dx
|
||||
test al,02h
|
||||
jz .YAxisOk
|
||||
nop
|
||||
nop
|
||||
inc dword[JoyY]
|
||||
nop
|
||||
dec ecx
|
||||
jnz .YAxis
|
||||
mov byte[JoyExists], 0
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
.YAxisOk
|
||||
jmp .End
|
||||
.XAxis
|
||||
in al,dx
|
||||
test al,01h
|
||||
jz .XAxisOk
|
||||
nop
|
||||
nop
|
||||
inc dword[JoyX]
|
||||
nop
|
||||
dec ecx
|
||||
jnz .XAxis
|
||||
mov byte[JoyExists], 0
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
.XAxisOk
|
||||
.End
|
||||
sti
|
||||
ret
|
||||
|
||||
; Dual Joysticks
|
||||
|
||||
NEWSYM GetCoords3
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
mov dword[JoyX2],0
|
||||
mov dword[JoyY2],0
|
||||
cli
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov ecx,01FFFFh
|
||||
.loopa
|
||||
in al,dx
|
||||
test al,01h
|
||||
jz .YAxis
|
||||
inc dword[JoyX]
|
||||
nop
|
||||
.YAxis
|
||||
test al,02h
|
||||
jz .XAxis
|
||||
inc dword[JoyY]
|
||||
nop
|
||||
.XAxis
|
||||
test al,04h
|
||||
jz .YAxis2
|
||||
inc dword[JoyX2]
|
||||
nop
|
||||
.YAxis2
|
||||
test al,08h
|
||||
jz .XAxis2
|
||||
inc dword[JoyY2]
|
||||
nop
|
||||
.XAxis2
|
||||
test al,0Fh
|
||||
jz .nomore
|
||||
dec ecx
|
||||
jnz .loopa
|
||||
mov byte[JoyExists], 0
|
||||
mov dword[JoyX],0
|
||||
mov dword[JoyY],0
|
||||
mov byte[JoyExists2], 0
|
||||
mov dword[JoyX2],0
|
||||
mov dword[JoyY2],0
|
||||
.nomore
|
||||
sti
|
||||
ret
|
||||
3593
tools/zsnes/src/gui/guimouse.inc
Normal file
3593
tools/zsnes/src/gui/guimouse.inc
Normal file
File diff suppressed because it is too large
Load Diff
846
tools/zsnes/src/gui/guitools.inc
Normal file
846
tools/zsnes/src/gui/guitools.inc
Normal file
@@ -0,0 +1,846 @@
|
||||
;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.
|
||||
|
||||
; Tools for the GUI (string functions are also used elsewhere)
|
||||
|
||||
SECTION .text
|
||||
|
||||
NEWSYM CopyString
|
||||
push eax
|
||||
.again
|
||||
mov dl,[eax]
|
||||
mov [ebx],dl
|
||||
inc eax
|
||||
inc ebx
|
||||
or dl,dl
|
||||
jnz .again
|
||||
pop eax
|
||||
ret
|
||||
|
||||
NEWSYM StringLength
|
||||
xor ecx,ecx
|
||||
push eax
|
||||
.loop
|
||||
cmp byte[eax],0
|
||||
je .done
|
||||
inc eax
|
||||
inc ecx
|
||||
jmp .loop
|
||||
.done
|
||||
pop eax
|
||||
ret
|
||||
|
||||
NEWSYM ClipString
|
||||
; clip string eax by bl characters
|
||||
.next
|
||||
push eax
|
||||
.again
|
||||
mov dl,[eax+1]
|
||||
mov [eax],dl
|
||||
inc eax
|
||||
or dl,dl
|
||||
jnz .again
|
||||
pop eax
|
||||
dec bl
|
||||
jnz .next
|
||||
ret
|
||||
|
||||
NEWSYM ConcatString
|
||||
; concat eax in front of ebx, store in ebx
|
||||
; move string forward by length of eax
|
||||
pushad
|
||||
mov esi,eax
|
||||
cmp byte[esi],0
|
||||
je near .nomore3
|
||||
.next
|
||||
inc esi
|
||||
cmp byte[esi],0
|
||||
jne .next
|
||||
dec esi
|
||||
.again
|
||||
mov dl,[esi]
|
||||
push ebx
|
||||
xor ecx,ecx
|
||||
.loop
|
||||
cmp byte[ebx],0
|
||||
je .nomore
|
||||
inc ebx
|
||||
inc ecx
|
||||
jmp .loop
|
||||
.nomore
|
||||
inc ebx
|
||||
inc ecx
|
||||
.loop2
|
||||
or ecx,ecx
|
||||
jz .nomore2
|
||||
mov dh,[ebx-1]
|
||||
mov [ebx],dh
|
||||
dec ebx
|
||||
dec ecx
|
||||
jmp .loop2
|
||||
.nomore2
|
||||
pop ebx
|
||||
mov [ebx],dl
|
||||
cmp eax,esi
|
||||
je .nomore3
|
||||
dec esi
|
||||
jmp .again
|
||||
.nomore3
|
||||
popad
|
||||
ret
|
||||
|
||||
GUIoutputchar:
|
||||
push edi
|
||||
push esi
|
||||
push eax
|
||||
xor ebx,ebx
|
||||
mov bl,al
|
||||
|
||||
|
||||
cmp byte[newfont],0 ; Font Setup (Menus)
|
||||
jne .nozero
|
||||
mov edi,GUIFontData
|
||||
jmp .endfont
|
||||
.nozero
|
||||
mov edi,GUIFontData1
|
||||
.endfont
|
||||
|
||||
; mov edi,GUIFontData
|
||||
lea ebx,[ebx*5]
|
||||
add edi,ebx
|
||||
mov cl,5
|
||||
.loopa
|
||||
mov ah,[edi]
|
||||
mov ch,6
|
||||
.loopb
|
||||
test ah,80h
|
||||
jz .nowrite
|
||||
mov al,[GUItextcolor]
|
||||
sub al,cl
|
||||
sub al,ch
|
||||
inc al
|
||||
mov [esi],al
|
||||
.nowrite
|
||||
shl ah,1
|
||||
inc esi
|
||||
dec ch
|
||||
jnz .loopb
|
||||
add esi,282
|
||||
inc edi
|
||||
dec cl
|
||||
jnz .loopa
|
||||
pop eax
|
||||
pop esi
|
||||
pop edi
|
||||
ret
|
||||
|
||||
GUIOutputString:
|
||||
xor eax,eax
|
||||
.more
|
||||
mov al,[edi]
|
||||
or al,al
|
||||
jz .nomore
|
||||
mov al,[ASCII2Font+eax]
|
||||
call GUIoutputchar
|
||||
add esi,6
|
||||
inc edi
|
||||
jmp .more
|
||||
.nomore
|
||||
ret
|
||||
|
||||
%macro GUIOuttext 4
|
||||
mov edi,%2
|
||||
mov esi,edi
|
||||
shl esi,8
|
||||
shl edi,5
|
||||
add esi,edi
|
||||
add esi,[vidbuffer]
|
||||
add esi,%1
|
||||
add esi,16
|
||||
mov edi,%3
|
||||
mov byte[GUItextcolor],%4
|
||||
call GUIOutputString
|
||||
%endmacro
|
||||
|
||||
GUIDrawBox:
|
||||
.loop
|
||||
push edi
|
||||
push ecx
|
||||
rep stosb
|
||||
pop ecx
|
||||
pop edi
|
||||
add edi,288
|
||||
dec edx
|
||||
jnz .loop
|
||||
ret
|
||||
|
||||
%macro GUIBox 5
|
||||
mov edi,[vidbuffer]
|
||||
add edi,%1
|
||||
mov edx,%2
|
||||
mov ecx,edx
|
||||
shl edx,8
|
||||
shl ecx,5
|
||||
add edx,ecx
|
||||
add edi,edx
|
||||
add edi,16
|
||||
mov ecx,%3
|
||||
sub ecx,%1
|
||||
inc ecx
|
||||
mov edx,%4
|
||||
sub edx,%2
|
||||
inc edx
|
||||
mov al,%5
|
||||
call GUIDrawBox
|
||||
%endmacro
|
||||
|
||||
GUIHLines:
|
||||
cmp ecx,0
|
||||
jl near .nodraw
|
||||
cmp eax,255
|
||||
jg near .nodraw
|
||||
cmp eax,0
|
||||
jnl .noofx
|
||||
mov eax,0
|
||||
.noofx
|
||||
cmp ecx,255
|
||||
jng .noofx2
|
||||
mov ecx,255
|
||||
.noofx2
|
||||
cmp ebx,0
|
||||
jl .nodraw
|
||||
cmp ebx,223
|
||||
jg .nodraw
|
||||
sub ecx,eax
|
||||
inc ecx
|
||||
mov edi,[vidbuffer]
|
||||
add edi,eax
|
||||
add edi,16
|
||||
mov eax,ebx
|
||||
shl eax,8
|
||||
add edi,eax
|
||||
mov eax,ebx
|
||||
shl eax,5
|
||||
add edi,eax
|
||||
mov eax,edx
|
||||
.loop
|
||||
mov [edi],ah
|
||||
add eax,[GUIcolscaleval]
|
||||
inc edi
|
||||
dec ecx
|
||||
jnz .loop
|
||||
.nodraw
|
||||
ret
|
||||
|
||||
GUIHLine:
|
||||
cmp ecx,0
|
||||
jl near .nodraw
|
||||
cmp eax,255
|
||||
jg near .nodraw
|
||||
cmp eax,0
|
||||
jnl .noofx
|
||||
mov eax,0
|
||||
.noofx
|
||||
cmp ecx,255
|
||||
jng .noofx2
|
||||
mov ecx,255
|
||||
.noofx2
|
||||
cmp ebx,0
|
||||
jl .nodraw
|
||||
cmp ebx,223
|
||||
jg .nodraw
|
||||
sub ecx,eax
|
||||
inc ecx
|
||||
mov edi,[vidbuffer]
|
||||
add edi,eax
|
||||
add edi,16
|
||||
mov eax,ebx
|
||||
shl eax,8
|
||||
add edi,eax
|
||||
mov eax,ebx
|
||||
shl eax,5
|
||||
add edi,eax
|
||||
mov eax,edx
|
||||
rep stosb
|
||||
.nodraw
|
||||
ret
|
||||
|
||||
%macro GUIPal 4
|
||||
mov dx,03C8h
|
||||
mov al,%1
|
||||
out dx,al
|
||||
inc dx
|
||||
mov al,%2
|
||||
out dx,al
|
||||
mov al,%3
|
||||
out dx,al
|
||||
mov al,%4
|
||||
out dx,al
|
||||
%endmacro
|
||||
|
||||
GUIDrawShadow:
|
||||
.loop
|
||||
push edi
|
||||
push ecx
|
||||
.loop2
|
||||
mov al,[edi-3*288-3]
|
||||
cmp al,148
|
||||
jb .nomidshad
|
||||
cmp al,167
|
||||
ja .mid2
|
||||
add byte[edi-3*288-3],20
|
||||
jmp .noshadow
|
||||
.mid2
|
||||
cmp al,189
|
||||
jb .nomidshad
|
||||
cmp al,220
|
||||
ja .nomidshad
|
||||
sub al,189
|
||||
shr al,1
|
||||
add al,189
|
||||
mov [edi-288*3-3],al
|
||||
jmp .noshadow
|
||||
.nomidshad
|
||||
mov al,[edi]
|
||||
cmp al,32
|
||||
jae .noshadow
|
||||
add al,96
|
||||
mov [edi],al
|
||||
.noshadow
|
||||
inc edi
|
||||
dec ecx
|
||||
jnz .loop2
|
||||
pop ecx
|
||||
pop edi
|
||||
add edi,288
|
||||
dec edx
|
||||
jnz near .loop
|
||||
ret
|
||||
|
||||
%macro GUIShadow 4
|
||||
mov edi,[vidbuffer]
|
||||
add edi,%1+%2*288+16
|
||||
mov ecx,%3-%1+1
|
||||
mov edx,%4-%2+1
|
||||
call GUIDrawShadow
|
||||
%endmacro
|
||||
|
||||
GUIDrawShadow2:
|
||||
.loop
|
||||
push edi
|
||||
push ecx
|
||||
.loop2
|
||||
mov al,[edi]
|
||||
cmp al,32
|
||||
jae .noshadow
|
||||
add al,96
|
||||
mov [edi],al
|
||||
.noshadow
|
||||
inc edi
|
||||
dec ecx
|
||||
jnz .loop2
|
||||
pop ecx
|
||||
pop edi
|
||||
add edi,288
|
||||
dec ebx
|
||||
jnz .loop
|
||||
ret
|
||||
|
||||
GUIoutputcharwin:
|
||||
push edi
|
||||
push esi
|
||||
push eax
|
||||
xor ebx,ebx
|
||||
mov bl,al
|
||||
|
||||
cmp byte[newfont],0 ; Font Setup (Windows)
|
||||
jne .nozero
|
||||
mov edi,GUIFontData
|
||||
jmp .endfont
|
||||
.nozero
|
||||
mov edi,GUIFontData1
|
||||
.endfont
|
||||
|
||||
; mov edi,GUIFontData
|
||||
lea ebx,[ebx*5]
|
||||
add edi,ebx
|
||||
mov cl,5
|
||||
.loopa
|
||||
mov ah,[edi]
|
||||
mov ch,5
|
||||
cmp esi,[vidbuffer]
|
||||
jb .below
|
||||
mov edx,[vidbuffer]
|
||||
add edx,224*288
|
||||
cmp esi,edx
|
||||
jb .loopb
|
||||
.below
|
||||
add esi,5
|
||||
jmp .nowrite2
|
||||
.loopb
|
||||
test ah,80h
|
||||
jz .nowrite
|
||||
mov al,[GUItextcolor]
|
||||
mov [esi],al
|
||||
.nowrite
|
||||
shl ah,1
|
||||
inc esi
|
||||
dec ch
|
||||
jnz .loopb
|
||||
.nowrite2
|
||||
add esi,283
|
||||
inc edi
|
||||
dec cl
|
||||
jnz .loopa
|
||||
pop eax
|
||||
pop esi
|
||||
pop edi
|
||||
ret
|
||||
|
||||
GUIOutputStringwin:
|
||||
xor eax,eax
|
||||
.more
|
||||
mov al,[edi]
|
||||
or al,al
|
||||
jz .nomore
|
||||
mov al,[ASCII2Font+eax]
|
||||
cmp edx,-8
|
||||
jl .nodraw
|
||||
cmp edx,255
|
||||
jg .nodraw
|
||||
push esi
|
||||
push edx
|
||||
add esi,edx
|
||||
call GUIoutputcharwin
|
||||
pop edx
|
||||
pop esi
|
||||
.nodraw
|
||||
add edx,6
|
||||
inc edi
|
||||
jmp .more
|
||||
.nomore
|
||||
ret
|
||||
|
||||
GUIOutputStringwinl:
|
||||
xor eax,eax
|
||||
mov ecx,[cloadmaxlen]
|
||||
.more
|
||||
mov al,[edi]
|
||||
%ifndef __MSDOS__
|
||||
cmp al,'%'
|
||||
jne .noperc
|
||||
call ConvertPercValue
|
||||
.noperc
|
||||
%endif
|
||||
or al,al
|
||||
jz .nomore
|
||||
mov al,[ASCII2Font+eax]
|
||||
cmp edx,-8
|
||||
jl .nodraw
|
||||
cmp edx,255
|
||||
jg .nodraw
|
||||
push esi
|
||||
push edx
|
||||
push ecx
|
||||
add esi,edx
|
||||
call GUIoutputcharwin
|
||||
pop ecx
|
||||
pop edx
|
||||
pop esi
|
||||
.nodraw
|
||||
add edx,6
|
||||
inc edi
|
||||
dec ecx
|
||||
jz .nomore
|
||||
jmp .more
|
||||
.nomore
|
||||
ret
|
||||
|
||||
%ifndef __MSDOS__
|
||||
ConvertPercValue:
|
||||
mov al,[edi+2]
|
||||
cmp al,'a'
|
||||
jb .notlower
|
||||
cmp al,'z'
|
||||
ja .notlower
|
||||
sub al,'a'-'A'
|
||||
.notlower
|
||||
mov ah,[edi+1]
|
||||
cmp ah,'a'
|
||||
jb .notlowerb
|
||||
cmp ah,'z'
|
||||
ja .notlowerb
|
||||
sub ah,'a'-'A'
|
||||
.notlowerb
|
||||
cmp al,'0'
|
||||
jb .noperc
|
||||
cmp al,'9'
|
||||
jbe .yesperc
|
||||
cmp al,'F'
|
||||
ja .noperc
|
||||
cmp al,'A'
|
||||
jb .noperc
|
||||
.yesperc
|
||||
cmp ah,'0'
|
||||
jb .noperc
|
||||
cmp ah,'9'
|
||||
jbe .yesperc2
|
||||
cmp ah,'F'
|
||||
ja .noperc
|
||||
cmp ah,'A'
|
||||
jb .noperc
|
||||
.yesperc2
|
||||
sub al,'0'
|
||||
cmp al,9
|
||||
jbe .nodec
|
||||
sub al,'A'-'0'-10
|
||||
.nodec
|
||||
sub ah,'0'
|
||||
cmp ah,9
|
||||
jbe .nodecb
|
||||
sub ah,'A'-'0'-10
|
||||
.nodecb
|
||||
shl ah,4
|
||||
or al,ah
|
||||
add edi,2
|
||||
and eax,0FFh
|
||||
ret
|
||||
.noperc
|
||||
movzx eax,byte[edi]
|
||||
ret
|
||||
%endif
|
||||
|
||||
OutputUnder:
|
||||
cmp edx,-8
|
||||
jl .nodraw
|
||||
cmp edx,255
|
||||
jg .nodraw
|
||||
mov dword[esi+edx+5*288-1],0E8E8E8E8h
|
||||
mov byte[esi+edx+5*288+3],0E8h
|
||||
.nodraw
|
||||
ret
|
||||
|
||||
%macro GUIOuttextwin 1
|
||||
mov esi,ebx
|
||||
mov eax,ebx
|
||||
shl esi,8
|
||||
shl eax,5
|
||||
add esi,eax
|
||||
add esi,16
|
||||
add esi,[vidbuffer]
|
||||
mov edi,%1
|
||||
call GUIOutputStringwin
|
||||
%endmacro
|
||||
|
||||
%macro GUIOuttextwin2 4
|
||||
mov edx,[GUIwinposx+%1*4]
|
||||
mov ebx,[GUIwinposy+%1*4]
|
||||
add edx,%2
|
||||
add ebx,%3
|
||||
mov esi,ebx
|
||||
mov eax,ebx
|
||||
shl esi,8
|
||||
shl eax,5
|
||||
add esi,eax
|
||||
add esi,16
|
||||
add esi,[vidbuffer]
|
||||
mov edi,%4
|
||||
call GUIOutputStringwin
|
||||
%endmacro
|
||||
|
||||
%macro GUIOuttextwin2l 4
|
||||
mov edx,[GUIwinposx+%1*4]
|
||||
mov ebx,[GUIwinposy+%1*4]
|
||||
add edx,%2
|
||||
add ebx,%3
|
||||
mov esi,ebx
|
||||
mov eax,ebx
|
||||
shl esi,8
|
||||
shl eax,5
|
||||
add esi,eax
|
||||
add esi,16
|
||||
add esi,[vidbuffer]
|
||||
mov edi,%4
|
||||
call GUIOutputStringwinl
|
||||
%endmacro
|
||||
|
||||
%macro GUIOuttextwin2u 5
|
||||
mov edx,[GUIwinposx+%1*4]
|
||||
mov ebx,[GUIwinposy+%1*4]
|
||||
add edx,%2
|
||||
add ebx,%3
|
||||
mov esi,ebx
|
||||
mov eax,ebx
|
||||
shl esi,8
|
||||
shl eax,5
|
||||
add esi,eax
|
||||
add esi,16
|
||||
add esi,[vidbuffer]
|
||||
mov edi,%4
|
||||
add edx,%5*6
|
||||
call OutputUnder
|
||||
sub edx,%5*6
|
||||
call GUIOutputStringwin
|
||||
%endmacro
|
||||
|
||||
GUIoutputiconwin:
|
||||
cmp eax,-9
|
||||
jl .nodraw
|
||||
cmp eax,256
|
||||
jl .draw
|
||||
.nodraw
|
||||
ret
|
||||
.draw
|
||||
mov esi,ebx
|
||||
mov ecx,ebx
|
||||
shl esi,8
|
||||
shl ecx,5
|
||||
add esi,ecx
|
||||
add esi,16
|
||||
add esi,[vidbuffer]
|
||||
add esi,eax
|
||||
mov cl,10
|
||||
.loopa
|
||||
mov ch,10
|
||||
cmp esi,[vidbuffer]
|
||||
jb .below
|
||||
mov edx,[vidbuffer]
|
||||
add edx,224*288
|
||||
cmp esi,edx
|
||||
jb .loopb
|
||||
.below
|
||||
add esi,10
|
||||
jmp .nowrite2
|
||||
.loopb
|
||||
mov al,[edi]
|
||||
or al,al
|
||||
jz .transp
|
||||
cmp al,189
|
||||
ja .col2
|
||||
cmp byte[GUIWincoladd],0
|
||||
je .col3
|
||||
inc al
|
||||
jmp .col3
|
||||
.col2
|
||||
sub al,[GUIWincoladd]
|
||||
dec al
|
||||
.col3
|
||||
mov [esi],al
|
||||
.transp
|
||||
inc edi
|
||||
inc esi
|
||||
dec ch
|
||||
jnz .loopb
|
||||
.nowrite2
|
||||
add esi,278
|
||||
dec cl
|
||||
jnz .loopa
|
||||
ret
|
||||
|
||||
%macro GUIDisplayIcon 1
|
||||
mov edi,%1
|
||||
call GUIoutputiconwin
|
||||
%endmacro
|
||||
|
||||
%macro GUIDisplayIconWin 4
|
||||
mov eax,[GUIwinposx+%1*4]
|
||||
mov ebx,[GUIwinposy+%1*4]
|
||||
add eax,%2
|
||||
add ebx,%3
|
||||
mov edi,%4
|
||||
call GUIoutputiconwin
|
||||
%endmacro
|
||||
|
||||
GUIDrawSlideBar:
|
||||
cmp eax,-10
|
||||
jl .ret
|
||||
cmp eax,256
|
||||
jg .ret
|
||||
jmp .noret
|
||||
.ret
|
||||
ret
|
||||
.noret
|
||||
mov edi,[vidbuffer]
|
||||
mov [vbuflimtop],edi
|
||||
mov edi,[vidbuffer]
|
||||
add edi,288*224
|
||||
sub edi,16
|
||||
mov [vbuflimbot],edi
|
||||
mov edi,eax
|
||||
mov eax,ebx
|
||||
shl ebx,8
|
||||
shl eax,5
|
||||
add edi,ebx
|
||||
add edi,eax
|
||||
add edi,[vidbuffer]
|
||||
add edi,16
|
||||
xor eax,eax
|
||||
dec ecx
|
||||
.loop
|
||||
cmp edx,0
|
||||
je near .toparea
|
||||
cmp ecx,0
|
||||
je near .bottomarea
|
||||
cmp ah,1
|
||||
je .filleddisp
|
||||
cmp edi,[vbuflimtop]
|
||||
jb near .nodraw
|
||||
cmp edi,[vbuflimbot]
|
||||
ja near .nodraw
|
||||
mov al,197
|
||||
sub al,byte[GUIWincoladd]
|
||||
mov [edi],al
|
||||
sub al,2
|
||||
mov [edi+1],al
|
||||
dec al
|
||||
mov [edi+2],al
|
||||
dec al
|
||||
mov [edi+3],al
|
||||
mov [edi+4],al
|
||||
inc al
|
||||
mov [edi+5],al
|
||||
inc al
|
||||
mov [edi+6],al
|
||||
add al,2
|
||||
mov [edi+7],al
|
||||
jmp .fin
|
||||
.filleddisp
|
||||
cmp edi,[vbuflimtop]
|
||||
jb near .nodraw
|
||||
cmp edi,[vbuflimbot]
|
||||
ja near .nodraw
|
||||
mov al,202
|
||||
sub al,byte[GUIWincoladd]
|
||||
mov [edi],al
|
||||
sub al,2
|
||||
mov [edi+1],al
|
||||
mov [edi+2],al
|
||||
mov [edi+3],al
|
||||
mov [edi+4],al
|
||||
mov [edi+5],al
|
||||
mov [edi+6],al
|
||||
sub al,2
|
||||
mov [edi+7],al
|
||||
jmp .fin
|
||||
.toparea
|
||||
cmp edi,[vbuflimtop]
|
||||
jb near .nodraw
|
||||
cmp edi,[vbuflimbot]
|
||||
ja near .nodraw
|
||||
mov al,202
|
||||
sub al,byte[GUIWincoladd]
|
||||
mov [edi],al
|
||||
add al,2
|
||||
mov [edi+1],al
|
||||
mov [edi+2],al
|
||||
mov [edi+3],al
|
||||
mov [edi+4],al
|
||||
mov [edi+5],al
|
||||
mov [edi+6],al
|
||||
mov [edi+7],al
|
||||
mov ah,1
|
||||
jmp .fin
|
||||
.bottomarea
|
||||
cmp edi,[vbuflimtop]
|
||||
jb near .nodraw
|
||||
cmp edi,[vbuflimbot]
|
||||
ja near .nodraw
|
||||
mov al,6
|
||||
mov al,196
|
||||
sub al,byte[GUIWincoladd]
|
||||
mov [edi],al
|
||||
mov [edi+1],al
|
||||
mov [edi+2],al
|
||||
mov [edi+3],al
|
||||
mov [edi+4],al
|
||||
mov [edi+5],al
|
||||
mov [edi+6],al
|
||||
add al,2
|
||||
mov [edi+7],al
|
||||
mov ah,0
|
||||
.fin
|
||||
.nodraw
|
||||
add edi,288
|
||||
dec ecx
|
||||
dec edx
|
||||
dec esi
|
||||
jnz near .loop
|
||||
ret
|
||||
|
||||
%macro DrawSlideBarWin 8
|
||||
; win#,X,Y start, %4-List Loc, %5-List size, %6-Screen size, %7-Bar Size
|
||||
mov ebx,%5
|
||||
mov ecx,%4
|
||||
; if (Screen Size > List Size) List Size = Screen Size
|
||||
cmp ebx,%6
|
||||
jae %%noscrbig
|
||||
mov ebx,%6
|
||||
%%noscrbig
|
||||
; If (ListLoc + ScreenSize > ListSize) ListLoc = ListSize - ScreenSize
|
||||
mov eax,ecx
|
||||
add eax,%6
|
||||
cmp eax,ebx
|
||||
jbe %%nosetlloc
|
||||
mov ecx,ebx
|
||||
sub ecx,%6
|
||||
%%nosetlloc
|
||||
; Scrollbarsize = (Screen Size/List size)*Bar Size
|
||||
push ebx
|
||||
mov eax,%6
|
||||
mov ebx,%7
|
||||
mul ebx
|
||||
pop ebx
|
||||
div ebx
|
||||
; If (Scrollbarsize < 5) Scrollbarsize = 5
|
||||
cmp eax,5
|
||||
jae %%validscroll
|
||||
mov eax,5
|
||||
%%validscroll
|
||||
; StartY = (Bar Size-Scrollbarsize)*(List Loc/(List size-ScreenSize))
|
||||
push eax
|
||||
sub eax,%7
|
||||
neg eax
|
||||
mul ecx
|
||||
sub ebx,%6
|
||||
cmp ebx,0
|
||||
je %%zero
|
||||
div ebx
|
||||
jmp %%notzero
|
||||
%%zero
|
||||
xor eax,eax
|
||||
%%notzero
|
||||
mov edx,eax
|
||||
pop eax
|
||||
mov ecx,eax
|
||||
add ecx,edx
|
||||
; ecx = endy, edx = starty
|
||||
mov esi,%7
|
||||
sub esi,ecx
|
||||
add esi,edx
|
||||
dec esi
|
||||
mov [%8],esi
|
||||
mov [%8+4],edx
|
||||
mov [%8+8],ecx
|
||||
mov eax,[GUIwinposx+%1*4]
|
||||
mov ebx,[GUIwinposy+%1*4]
|
||||
add eax,%2
|
||||
add ebx,%3
|
||||
mov esi,%7
|
||||
call GUIDrawSlideBar
|
||||
%endmacro
|
||||
5243
tools/zsnes/src/gui/guiwindp.inc
Normal file
5243
tools/zsnes/src/gui/guiwindp.inc
Normal file
File diff suppressed because it is too large
Load Diff
909
tools/zsnes/src/gui/menu.asm
Normal file
909
tools/zsnes/src/gui/menu.asm
Normal file
@@ -0,0 +1,909 @@
|
||||
;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.
|
||||
|
||||
|
||||
|
||||
%include "macros.mac"
|
||||
|
||||
EXTSYM FPSOn,MessageOn,cbitmode,copyvid
|
||||
EXTSYM MsgCount,Msgptr,OutputGraphicString,OutputGraphicString16b,vidbuffer
|
||||
EXTSYM curblank,drawhline,drawhline16b,drawvline,drawvline16b,frameskip
|
||||
EXTSYM pressed,dumpsound,Grab_BMP_Data,Grab_BMP_Data_8
|
||||
EXTSYM spcon,vesa2_bpos,vesa2_clbit,vesa2_gpos,vesa2_rpos,
|
||||
EXTSYM spritetablea,sprlefttot,newengen,Get_Key,continueprognokeys
|
||||
EXTSYM ForceNonTransp,GUIOn,Check_Key,JoyRead,GetScreen,SSKeyPressed
|
||||
EXTSYM SPCKeyPressed,StopSound,StartSound,ExecExitOkay,t1cc,Clear2xSaIBuffer
|
||||
EXTSYM ScreenShotFormat,spcsaved,savespcdata
|
||||
EXTSYM exiter,xpb,xpc,snesmmap,memtabler8,snesmap2,regaccessbankr8,dmadata,initaddrl
|
||||
EXTSYM spcPCRam,xp,curcyc,Curtableaddr,UpdateDPage,splitflags,execsingle,joinflags
|
||||
EXTSYM pdh,SPCRAM,cvidmode
|
||||
|
||||
%ifdef __MSDOS__
|
||||
EXTSYM GUI16VID
|
||||
%endif
|
||||
|
||||
%ifndef NO_DEBUGGER
|
||||
EXTSYM numinst,debuggeron
|
||||
%endif
|
||||
|
||||
%ifndef NO_PNG
|
||||
EXTSYM Grab_PNG_Data
|
||||
%endif
|
||||
|
||||
SECTION .text
|
||||
|
||||
GUIBufferData:
|
||||
mov ecx,16000
|
||||
cmp byte[cbitmode],1
|
||||
jne near .16b
|
||||
add ecx,16384
|
||||
.16b
|
||||
; copy to spritetable
|
||||
mov esi,[vidbuffer]
|
||||
mov edi,[spritetablea]
|
||||
add esi,4*384
|
||||
add edi,4*384
|
||||
.loop
|
||||
mov eax,[esi]
|
||||
mov [edi],eax
|
||||
add esi,4
|
||||
add edi,4
|
||||
dec ecx
|
||||
jnz .loop
|
||||
mov edi,sprlefttot
|
||||
mov ecx,64*5
|
||||
.a
|
||||
mov dword[edi],0
|
||||
add edi,4
|
||||
dec ecx
|
||||
jnz .a
|
||||
ret
|
||||
|
||||
GUIUnBuffer:
|
||||
mov ecx,16000
|
||||
cmp byte[cbitmode],1
|
||||
jne near .16b
|
||||
add ecx,16384
|
||||
.16b
|
||||
; copy from spritetable
|
||||
mov esi,[vidbuffer]
|
||||
mov edi,[spritetablea]
|
||||
add esi,4*384
|
||||
add edi,4*384
|
||||
.loop
|
||||
mov eax,[edi]
|
||||
mov [esi],eax
|
||||
add esi,4
|
||||
add edi,4
|
||||
dec ecx
|
||||
jnz .loop
|
||||
ret
|
||||
|
||||
SECTION .bss
|
||||
NEWSYM nextmenupopup, resb 1
|
||||
NEWSYM NoInputRead, resb 1
|
||||
NEWSYM PrevMenuPos, resb 1
|
||||
NEWSYM MenuDisplace, resd 1
|
||||
NEWSYM MenuDisplace16, resd 1
|
||||
NEWSYM MenuNoExit, resb 1
|
||||
NEWSYM SPCSave, resb 1
|
||||
|
||||
SECTION .text
|
||||
|
||||
NEWSYM showmenu
|
||||
mov byte[ForceNonTransp],1
|
||||
cmp byte[cbitmode],1
|
||||
je near .nopalread
|
||||
mov edi,[vidbuffer]
|
||||
add edi,100000
|
||||
mov dx,03C7h
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov dx,03C9h
|
||||
mov ecx,768
|
||||
mov byte[edi],12
|
||||
inc edi
|
||||
.b
|
||||
in al,dx
|
||||
shl al,2
|
||||
mov [edi],al
|
||||
inc edi
|
||||
dec ecx
|
||||
jnz .b
|
||||
.nopalread
|
||||
|
||||
cmp byte[cbitmode],1
|
||||
je near .nopal16b
|
||||
; set palette of colors 128,144, and 160 to white, blue, and red
|
||||
mov al,128
|
||||
mov dx,03C8h
|
||||
out dx,al
|
||||
inc dx
|
||||
mov al,63
|
||||
out dx,al
|
||||
out dx,al
|
||||
out dx,al
|
||||
mov al,144
|
||||
mov dx,03C8h
|
||||
out dx,al
|
||||
inc dx
|
||||
xor al,al
|
||||
out dx,al
|
||||
out dx,al
|
||||
mov al,50
|
||||
out dx,al
|
||||
mov al,160
|
||||
mov dx,03C8h
|
||||
out dx,al
|
||||
inc dx
|
||||
mov al,45
|
||||
out dx,al
|
||||
xor al,al
|
||||
out dx,al
|
||||
out dx,al
|
||||
.nopal16b
|
||||
|
||||
mov byte[NoInputRead],0
|
||||
cmp byte[newengen],0
|
||||
je .nong16b
|
||||
cmp byte[cbitmode],0
|
||||
je .nong16b
|
||||
call GetScreen
|
||||
.nong16b
|
||||
cmp byte[SSKeyPressed],1
|
||||
jne .nosskey
|
||||
mov byte[SSKeyPressed],0
|
||||
call saveimage
|
||||
jmp .nopalwrite
|
||||
.nosskey
|
||||
cmp byte[SPCKeyPressed],1
|
||||
je near .savespckey
|
||||
test byte[pressed+14],1
|
||||
jz .nof12
|
||||
call saveimage
|
||||
jmp .nopalwrite
|
||||
.nof12
|
||||
mov dword[menucloc],0
|
||||
cmp byte[nextmenupopup],0
|
||||
je .nomenuinc2
|
||||
mov byte[pressed+1Ch],0
|
||||
mov dword[menucloc],40*288
|
||||
cmp byte[PrevMenuPos],1
|
||||
jne .nomenuinc
|
||||
mov dword[menucloc],50*288
|
||||
.nomenuinc
|
||||
cmp byte[PrevMenuPos],2
|
||||
jne .nomenuinc2
|
||||
mov dword[menucloc],60*288
|
||||
.nomenuinc2
|
||||
cmp byte[PrevMenuPos],3
|
||||
jne .nomenuinc3
|
||||
mov dword[menucloc],70*288
|
||||
.nomenuinc3
|
||||
|
||||
mov dword[menudrawbox8b.stringi+13],' BMP'
|
||||
%ifndef NO_PNG
|
||||
cmp byte[ScreenShotFormat],0
|
||||
je .normalscrn
|
||||
%ifdef __MSDOS__
|
||||
movzx eax,byte[cvidmode]
|
||||
cmp byte[GUI16VID+eax],1
|
||||
je .pngok
|
||||
mov byte[ScreenShotFormat],0
|
||||
jmp .normalscrn
|
||||
%endif
|
||||
.pngok
|
||||
mov dword[menudrawbox8b.stringi+13],' PNG'
|
||||
%endif
|
||||
.normalscrn
|
||||
mov byte[nextmenupopup],0
|
||||
mov byte[menu16btrans],0
|
||||
mov byte[pressed+1],0
|
||||
mov byte[pressed+59],0
|
||||
mov byte[curblank],00h
|
||||
call GUIBufferData
|
||||
; Draw box
|
||||
call menudrawbox8b
|
||||
call menudrawbox8b
|
||||
cmp byte[newengen],0
|
||||
je .notng
|
||||
mov byte[GUIOn],1
|
||||
.notng
|
||||
pushad
|
||||
call copyvid
|
||||
popad
|
||||
call StopSound
|
||||
.nextkey
|
||||
;call GUIUnBuffer
|
||||
call menudrawbox8b
|
||||
push eax
|
||||
call copyvid
|
||||
pop eax
|
||||
|
||||
call JoyRead
|
||||
call Check_Key
|
||||
or al,al
|
||||
jz .nextkey
|
||||
call Get_Key
|
||||
cmp al,0
|
||||
jne near .processextend
|
||||
|
||||
call Get_Key
|
||||
cmp al,72
|
||||
jne .noup
|
||||
cmp dword[menucloc],0
|
||||
jne .nogoup
|
||||
add dword[menucloc],80*288
|
||||
.nogoup
|
||||
sub dword[menucloc],10*288
|
||||
call menudrawbox8b
|
||||
; mov al,[newengen] ; WTF?
|
||||
; mov byte[newengen],0
|
||||
|
||||
; mov [newengen],al
|
||||
jmp .nextkey
|
||||
.noup
|
||||
cmp al,80
|
||||
jne .nodown
|
||||
cmp dword[menucloc],70*288
|
||||
jne .nogodown
|
||||
sub dword[menucloc],80*288
|
||||
.nogodown
|
||||
add dword[menucloc],10*288
|
||||
call menudrawbox8b
|
||||
; mov al,[newengen]
|
||||
; mov byte[newengen],0
|
||||
; push eax
|
||||
call copyvid
|
||||
; pop eax
|
||||
; mov [newengen],al
|
||||
jmp .nextkey
|
||||
.nodown
|
||||
jmp .nextkey
|
||||
.processextend
|
||||
cmp al,27
|
||||
je near .exitloop
|
||||
cmp al,13
|
||||
je .done
|
||||
jmp .nextkey
|
||||
.done
|
||||
call GUIUnBuffer
|
||||
; mov al,[newengen]
|
||||
; mov byte[newengen],0
|
||||
; push eax
|
||||
call copyvid
|
||||
; pop eax
|
||||
; mov [newengen],al
|
||||
cmp dword[menucloc],0
|
||||
jne .nosaveimg
|
||||
call saveimage
|
||||
.nosaveimg
|
||||
cmp dword[menucloc],40*288
|
||||
jne .nosaveimg2
|
||||
call saveimage
|
||||
mov byte[ExecExitOkay],0
|
||||
mov byte[nextmenupopup],3
|
||||
mov byte[NoInputRead],1
|
||||
mov byte[t1cc],0
|
||||
mov byte[PrevMenuPos],0
|
||||
.nosaveimg2
|
||||
cmp dword[menucloc],50*288
|
||||
jne .noskipframe
|
||||
mov byte[ExecExitOkay],0
|
||||
mov byte[nextmenupopup],3
|
||||
mov byte[NoInputRead],1
|
||||
mov byte[t1cc],0
|
||||
mov byte[PrevMenuPos],1
|
||||
.noskipframe
|
||||
cmp dword[menucloc],70*288
|
||||
jne .noimagechange
|
||||
cmp byte[cbitmode],0
|
||||
je .noimagechange
|
||||
xor byte[ScreenShotFormat],1
|
||||
mov byte[MenuNoExit],1
|
||||
mov byte[ExecExitOkay],0
|
||||
mov byte[nextmenupopup],1
|
||||
mov byte[NoInputRead],1
|
||||
mov byte[t1cc],0
|
||||
mov byte[PrevMenuPos],3
|
||||
.noimagechange
|
||||
cmp dword[menucloc],60*288
|
||||
jne .nomovewin
|
||||
mov byte[MenuNoExit],1
|
||||
mov byte[ExecExitOkay],0
|
||||
mov byte[nextmenupopup],1
|
||||
mov byte[NoInputRead],1
|
||||
mov byte[t1cc],0
|
||||
mov byte[PrevMenuPos],2
|
||||
cmp dword[MenuDisplace],0
|
||||
je .movewin
|
||||
mov dword[MenuDisplace],0
|
||||
mov dword[MenuDisplace16],0
|
||||
jmp .nomovewin
|
||||
.movewin
|
||||
mov dword[MenuDisplace],90*288
|
||||
mov dword[MenuDisplace16],90*288*2
|
||||
.nomovewin
|
||||
cmp dword[menucloc],10*288
|
||||
jne .nofps
|
||||
cmp byte[frameskip],0
|
||||
je .yesfs
|
||||
mov dword[Msgptr],.unablefps
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
jmp .nofps
|
||||
.yesfs
|
||||
xor byte[FPSOn],1
|
||||
.nofps
|
||||
cmp dword[menucloc],20*288
|
||||
jne near .nospcsave
|
||||
.savespckey
|
||||
cmp byte[spcon],0
|
||||
je .nospc
|
||||
|
||||
mov dword[Msgptr],.search
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
call copyvid
|
||||
mov byte[SPCSave],1
|
||||
call breakatsignb
|
||||
mov byte[SPCSave],0
|
||||
pushad
|
||||
call savespcdata
|
||||
popad
|
||||
|
||||
mov byte[curblank],40h
|
||||
mov dword[Msgptr],spcsaved
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
jmp .nospcsave
|
||||
.nospc
|
||||
mov dword[Msgptr],.nosound
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
jmp .nospcsave
|
||||
.unablespc
|
||||
mov dword[Msgptr],.unable
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
jmp .nospcsave
|
||||
.yesesc
|
||||
mov dword[Msgptr],.escpress
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
.nospcsave
|
||||
cmp dword[menucloc],30*288
|
||||
jne .nosnddmp
|
||||
pushad
|
||||
call dumpsound
|
||||
popad
|
||||
mov dword[Msgptr],.sndbufsav
|
||||
mov eax,[MsgCount]
|
||||
mov [MessageOn],eax
|
||||
.nosnddmp
|
||||
cmp byte[SPCKeyPressed],1
|
||||
jne .exitloop
|
||||
mov byte[SPCKeyPressed],0
|
||||
jmp .nopalwrite
|
||||
.exitloop
|
||||
call GUIUnBuffer
|
||||
; mov al,[newengen]
|
||||
; mov byte[newengen],0
|
||||
; push eax
|
||||
call copyvid
|
||||
; pop eax
|
||||
; mov [newengen],al
|
||||
cmp byte[cbitmode],1
|
||||
je near .nopalwrite
|
||||
mov edi,[vidbuffer]
|
||||
add edi,100000
|
||||
mov dx,03C8h
|
||||
mov al,0
|
||||
out dx,al
|
||||
mov dx,03C9h
|
||||
mov ecx,768
|
||||
inc edi
|
||||
.c
|
||||
mov al,[edi]
|
||||
shr al,2
|
||||
out dx,al
|
||||
inc edi
|
||||
dec ecx
|
||||
jnz .c
|
||||
.nopalwrite
|
||||
mov eax,pressed
|
||||
mov ecx,256
|
||||
.looppr
|
||||
cmp byte[eax],1
|
||||
jne .notpr
|
||||
mov byte[eax],2
|
||||
.notpr
|
||||
inc eax
|
||||
dec ecx
|
||||
jnz .looppr
|
||||
; mov byte[pressed+1],2
|
||||
; cmp byte[pressed+59],1
|
||||
; jne .not59
|
||||
; mov byte[pressed+59],2
|
||||
;.not59
|
||||
; cmp byte[pressed+28],1
|
||||
; jne .not28
|
||||
; mov byte[pressed+28],2
|
||||
;.not28
|
||||
call StartSound
|
||||
mov byte[ForceNonTransp],0
|
||||
mov byte[GUIOn],0
|
||||
pushad
|
||||
call Clear2xSaIBuffer
|
||||
popad
|
||||
cmp byte[MenuNoExit],1
|
||||
je .noexitmenu
|
||||
jmp continueprognokeys
|
||||
.noexitmenu
|
||||
mov byte[MenuNoExit],0
|
||||
jmp showmenu
|
||||
|
||||
SECTION .data
|
||||
.unablefps db 'NEED AUTO FRAMERATE ON',0
|
||||
.sndbufsav db 'BUFFER SAVED AS SOUNDDMP.RAW',0
|
||||
.search db 'SEARCHING FOR SONG START.',0
|
||||
.nosound db 'SOUND MUST BE ENABLED.',0
|
||||
.unable db 'CANNOT USE IN NEW GFX ENGINE.',0
|
||||
.escpress db 'ESC TERMINATED SEARCH.',0
|
||||
SECTION .text
|
||||
|
||||
NEWSYM menudrawbox8b
|
||||
cmp byte[cbitmode],1
|
||||
je near menudrawbox16b
|
||||
; draw a small blue box with a white border
|
||||
mov esi,40+20*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,150
|
||||
mov al,95
|
||||
.loop
|
||||
mov byte[esi],144
|
||||
inc esi
|
||||
dec ecx
|
||||
jnz .loop
|
||||
add esi,288-150
|
||||
dec al
|
||||
mov ecx,150
|
||||
jnz .loop
|
||||
mov al,128
|
||||
; Draw lines
|
||||
mov esi,40+20*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,150
|
||||
call drawhline
|
||||
mov esi,40+20*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,95
|
||||
call drawvline
|
||||
mov esi,40+114*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,150
|
||||
call drawhline
|
||||
mov esi,40+32*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,150
|
||||
call drawhline
|
||||
mov esi,189+20*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,95
|
||||
call drawvline
|
||||
call menudrawcursor8b
|
||||
|
||||
mov esi,45+23*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.string
|
||||
call OutputGraphicString
|
||||
mov esi,45+35*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringa
|
||||
call OutputGraphicString
|
||||
mov esi,45+45*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringb
|
||||
test byte[FPSOn],1
|
||||
jz .nofps
|
||||
mov edi,.stringc
|
||||
.nofps
|
||||
call OutputGraphicString
|
||||
mov esi,45+55*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringd
|
||||
call OutputGraphicString
|
||||
mov esi,45+65*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringe
|
||||
call OutputGraphicString
|
||||
mov esi,45+75*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringf
|
||||
call OutputGraphicString
|
||||
mov esi,45+85*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringg
|
||||
call OutputGraphicString
|
||||
mov esi,45+95*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringh
|
||||
call OutputGraphicString
|
||||
mov esi,45+105*288
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov edi,.stringi
|
||||
call OutputGraphicString
|
||||
; mov al,[newengen]
|
||||
; mov byte[newengen],0
|
||||
; push eax
|
||||
call copyvid
|
||||
; pop eax
|
||||
; mov [newengen],al
|
||||
ret
|
||||
|
||||
SECTION .data
|
||||
.string db 'MISC OPTIONS',0
|
||||
.stringa db 'SAVE SNAPSHOT',0
|
||||
.stringb db 'SHOW FPS',0
|
||||
.stringc db 'HIDE FPS',0
|
||||
.stringd db 'SAVE SPC DATA',0
|
||||
.stringe db 'SOUND BUFFER DUMP',0
|
||||
.stringf db 'SNAPSHOT/INCR FRM',0
|
||||
.stringg db 'INCR FRAME ONLY',0
|
||||
.stringh db 'MOVE THIS WINDOW',0
|
||||
.stringi db 'IMAGE FORMAT: ---',0
|
||||
SECTION .text
|
||||
|
||||
NEWSYM menudrawcursor8b
|
||||
cmp byte[cbitmode],1
|
||||
je near menudrawcursor16b
|
||||
; draw a small red box
|
||||
mov esi,41+34*288
|
||||
add esi,[menucloc]
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace]
|
||||
mov ecx,148
|
||||
mov al,9
|
||||
.loop
|
||||
mov byte[esi],160
|
||||
inc esi
|
||||
dec ecx
|
||||
jnz .loop
|
||||
add esi,288-148
|
||||
dec al
|
||||
mov ecx,148
|
||||
jnz .loop
|
||||
|
||||
mov al,128
|
||||
ret
|
||||
|
||||
SECTION .bss
|
||||
NEWSYM menucloc, resd 1
|
||||
SECTION .text
|
||||
|
||||
NEWSYM menudrawbox16b
|
||||
; draw shadow behind box
|
||||
cmp byte[menu16btrans],0
|
||||
jne .noshadow
|
||||
mov byte[menu16btrans],1
|
||||
mov esi,50*2+30*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,150
|
||||
mov al,95
|
||||
mov ah,5
|
||||
.loop16b2
|
||||
mov dx,[esi]
|
||||
and dx,[vesa2_clbit]
|
||||
shr dx,1
|
||||
mov [esi],dx
|
||||
add esi,2
|
||||
dec ecx
|
||||
jnz .loop16b2
|
||||
add esi,288*2-150*2
|
||||
dec al
|
||||
mov ecx,150
|
||||
jnz .loop16b2
|
||||
.noshadow
|
||||
|
||||
mov ax,01Fh
|
||||
mov cl,[vesa2_rpos]
|
||||
shl ax,cl
|
||||
mov [.allred],ax
|
||||
mov ax,012h
|
||||
mov cl,[vesa2_bpos]
|
||||
shl ax,cl
|
||||
mov dx,ax
|
||||
mov ax,01h
|
||||
mov cl,[vesa2_gpos]
|
||||
shl ax,cl
|
||||
mov bx,ax
|
||||
mov ax,01h
|
||||
mov cl,[vesa2_rpos]
|
||||
shl ax,cl
|
||||
or bx,ax
|
||||
|
||||
; draw a small blue box with a white border
|
||||
mov esi,40*2+20*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,150
|
||||
mov al,95
|
||||
mov ah,5
|
||||
.loop16b
|
||||
mov [esi],dx
|
||||
add esi,2
|
||||
dec ecx
|
||||
jnz .loop16b
|
||||
add esi,288*2-150*2
|
||||
dec ah
|
||||
jnz .nocolinc16b
|
||||
add dx,bx
|
||||
mov ah,5
|
||||
.nocolinc16b
|
||||
dec al
|
||||
mov ecx,150
|
||||
jnz .loop16b
|
||||
|
||||
; Draw lines
|
||||
mov ax,0FFFFh
|
||||
mov esi,40*2+20*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,150
|
||||
call drawhline16b
|
||||
mov esi,40*2+20*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,95
|
||||
call drawvline16b
|
||||
mov esi,40*2+114*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,150
|
||||
call drawhline16b
|
||||
mov esi,40*2+32*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,150
|
||||
call drawhline16b
|
||||
mov esi,189*2+20*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,95
|
||||
call drawvline16b
|
||||
call menudrawcursor16b
|
||||
|
||||
mov esi,45*2+23*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.string
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+35*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringa
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+45*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringb
|
||||
test byte[FPSOn],1
|
||||
jz .nofps
|
||||
mov edi,menudrawbox8b.stringc
|
||||
.nofps
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+55*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringd
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+65*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringe
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+75*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringf
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+85*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringg
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+95*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringh
|
||||
call OutputGraphicString16b
|
||||
mov esi,45*2+105*288*2
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov edi,menudrawbox8b.stringi
|
||||
call OutputGraphicString16b
|
||||
; mov al,[newengen]
|
||||
; mov byte[newengen],0
|
||||
; push eax
|
||||
call copyvid
|
||||
; pop eax
|
||||
; mov [newengen],al
|
||||
ret
|
||||
|
||||
SECTION .bss
|
||||
.allred resw 1
|
||||
.blue resw 1
|
||||
.stepb resw 1
|
||||
|
||||
NEWSYM menu16btrans, resb 1
|
||||
|
||||
SECTION .text
|
||||
|
||||
NEWSYM menudrawcursor16b
|
||||
; draw a small red box
|
||||
mov esi,41*2+34*288*2
|
||||
add esi,[menucloc]
|
||||
add esi,[menucloc]
|
||||
add esi,[vidbuffer]
|
||||
add esi,[MenuDisplace16]
|
||||
mov ecx,148
|
||||
mov al,9
|
||||
mov bx,[menudrawbox16b.allred]
|
||||
.loop
|
||||
mov [esi],bx
|
||||
add esi,2
|
||||
dec ecx
|
||||
jnz .loop
|
||||
add esi,288*2-148*2
|
||||
dec al
|
||||
mov ecx,148
|
||||
jnz .loop
|
||||
mov al,128
|
||||
ret
|
||||
|
||||
saveimage:
|
||||
mov byte[pressed+1],0
|
||||
mov byte[pressed+59],0
|
||||
|
||||
%ifndef NO_PNG
|
||||
cmp byte[ScreenShotFormat],1
|
||||
jne .notpng
|
||||
pushad
|
||||
call Grab_PNG_Data
|
||||
popad
|
||||
ret
|
||||
.notpng
|
||||
%endif
|
||||
|
||||
cmp byte[cbitmode],1
|
||||
je near .save16b
|
||||
pushad
|
||||
call Grab_BMP_Data_8
|
||||
popad
|
||||
ret
|
||||
|
||||
.save16b
|
||||
pushad
|
||||
call Grab_BMP_Data
|
||||
popad
|
||||
ret
|
||||
|
||||
SECTION .data
|
||||
NEWSYM keyonsn, db 0
|
||||
NEWSYM prbreak, db 0
|
||||
SECTION .text
|
||||
|
||||
breakatsignb:
|
||||
mov byte[keyonsn],0
|
||||
mov byte[prbreak],0
|
||||
%ifndef NO_DEBUGGER
|
||||
cmp byte[SPCSave],1
|
||||
jne .nospcsave
|
||||
mov byte[debuggeron],1
|
||||
.nospcsave
|
||||
%endif
|
||||
|
||||
mov byte[exiter],01h
|
||||
xor eax,eax
|
||||
xor ebx,ebx
|
||||
xor ecx,ecx
|
||||
xor edx,edx
|
||||
mov bl,[xpb]
|
||||
mov ax,[xpc]
|
||||
test ax,8000h
|
||||
jz .loweraddr
|
||||
mov esi,[snesmmap+ebx*4]
|
||||
jmp .skiplower
|
||||
.loweraddr
|
||||
cmp ax,4300h
|
||||
jb .lower
|
||||
cmp dword[memtabler8+ebx*4],regaccessbankr8
|
||||
je .dma
|
||||
.lower
|
||||
mov esi,[snesmap2+ebx*4]
|
||||
jmp .skiplower
|
||||
.dma
|
||||
mov esi,dmadata-4300h
|
||||
.skiplower
|
||||
mov [initaddrl],esi
|
||||
add esi,eax ; add program counter to address
|
||||
mov ebp,[spcPCRam]
|
||||
mov dl,[xp] ; set flags
|
||||
mov dh,[curcyc] ; set cycles
|
||||
mov edi,[Curtableaddr]
|
||||
call UpdateDPage
|
||||
; execute
|
||||
.loopa
|
||||
call splitflags
|
||||
call execsingle
|
||||
call joinflags
|
||||
mov dh,[pdh]
|
||||
%ifndef NO_DEBUGGER
|
||||
inc dword[numinst]
|
||||
cmp byte[numinst],0
|
||||
jne .skipa
|
||||
call Check_Key
|
||||
test al,0FFh
|
||||
jz .skipa
|
||||
call Get_Key
|
||||
cmp al,27
|
||||
je .skipc
|
||||
.skipa
|
||||
%endif
|
||||
cmp byte[SPCRAM+6],40h
|
||||
je .skipc
|
||||
cmp byte[keyonsn],1
|
||||
jne .loopa
|
||||
jmp .noesc
|
||||
.skipc
|
||||
mov byte[prbreak],1
|
||||
.noesc
|
||||
; copy back data
|
||||
mov [spcPCRam],ebp
|
||||
mov [Curtableaddr],edi
|
||||
mov [xp],dl
|
||||
mov [curcyc],dh
|
||||
|
||||
mov eax,[initaddrl]
|
||||
sub esi,eax ; subtract program counter by address
|
||||
mov [xpc],si
|
||||
mov byte[exiter],0
|
||||
%ifndef NO_DEBUGGER
|
||||
cmp byte[SPCSave],1
|
||||
jne .nospcsave2
|
||||
mov byte[debuggeron],0
|
||||
.nospcsave2
|
||||
%endif
|
||||
ret
|
||||
Reference in New Issue
Block a user