o add avrusb
o add zsnes
This commit is contained in:
620
zsnes/src/gui/guimisc.inc
Normal file
620
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
|
||||
Reference in New Issue
Block a user