📄 guimisc.inc
字号:
;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 FunctionSECTION .bssNEWSYM MovieRecordWinVal, resb 1NEWSYM MovieProcessing, resb 1NEWSYM MovieFileHand, resw 1NEWSYM RecData, resb 16NEWSYM NoPictureSave, resb 1SECTION .textCalibrateDispA: 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 retCalibrateDispB: 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 retSECTION .dataguicalberror1 db 'PRESS THE TOP LEFT',0guicalberror2 db 'CORNER AND PRESS A',0guicalberror3 db 'BUTTON OR KEY',0guicalberror4 db 'PRESS THE BOTTOM',0guicalberror5 db 'RIGHT CORNER AND',0guicalberror6 db 'PRESS A BUTTON OR',0guicalberror7 db 'KEY',0SECTION .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%endmacroSetAllKeys: 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 retSECTION .dataSECTION .textCalibrateDev1: 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%endifSECTION .bss.joyblx resd 1.joybly resd 1.joybcx resd 1.joybcy resd 1SECTION .textSetDevice: 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 retNEWSYM 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 retSECTION .bssNEWSYM JoyX, resd 1NEWSYM JoyY, resd 1NEWSYM JoyX2, resd 1NEWSYM JoyY2, resd 1NEWSYM JoyMaxX, resd 1NEWSYM JoyMaxY, resd 1NEWSYM JoyMinX, resd 1NEWSYM JoyMinY, resd 1NEWSYM JoyExists, resb 1NEWSYM JoyExists2, resb 1SECTION .textNEWSYM 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 JoysticksNEWSYM 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -