⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guimouse.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 INC
📖 第 1 页 / 共 5 页
字号:
;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.%ifdef __WIN32__EXTSYM MinimizeWindow%endifSECTION .bsslastmouseholded resb 1mousebuttonstat resw 1MouseMoveOkay   resb 1LastHoldEnable  resb 1SECTION .textProcessMouse:  ; Process holds  mov al,[GUIHold]  cmp al,[LastHoldEnable]  je near .noholdnecessary  cmp byte[GUIHold],0  jne .noholda  cmp byte[LastHoldEnable],7 ; ntsc sliders  jne .norelease1  xor edx,edx  mov dl,[ntscWhVar]  mov cl,[ntscCurVar]  cmp cl,[ntscLastVar+edx]  je .norelease1%ifndef __MSDOS__  pushad  call NTSCFilterInit  popad%endif  mov [ntscLastVar+edx],cl.norelease1  mov ecx,0  mov edx,255  call Set_MouseXMax  mov ecx,0  mov edx,223  call Set_MouseYMax.noholda  cmp byte[GUIHold],1 ; GUI Windows  jne .nohold1  mov ecx,0  mov edx,255  call Set_MouseXMax  mov ecx,16  mov edx,223  call Set_MouseYMax.nohold1  cmp byte[GUIHold],5 ; Sound Slider  je .holdslider  cmp byte[GUIHold],6 ; Speed Slider  je .holdslider  cmp byte[GUIHold],2 ; Colour Slider  je .holdslider  cmp byte[GUIHold],7 ; Video Slider  jne .nohold2m.holdslider  mov ecx,[GUIHoldXlimL] ; Sets min/max move range for mouse  mov edx,[GUIHoldXlimR] ; once holding slider  call Set_MouseXMax  mov ecx,[GUIHoldYlim]  ; Locks pointer on slider  mov edx,[GUIHoldYlim]  call Set_MouseYMax.nohold2m  cmp byte[GUIHold],3    ; Scrollbars  jne .nohold3m  mov ecx,[GUIHoldXlimL]  mov edx,[GUIHoldXlimR]  call Set_MouseXMax  mov ecx,[GUIHoldYlim]  mov edx,[GUIHoldYlimR]  call Set_MouseYMax.nohold3m  mov al,[GUIHold]  mov [LastHoldEnable],al.noholdnecessary  mov byte[MouseMoveOkay],0  call Get_MouseData  cmp byte[lhguimouse],1  jne .notlefthanded  call SwapMouseButtons.notlefthanded  mov [mousebuttonstat],bx  cmp byte[lastmouseholded],0  je .noprevhold  test bx,01h  jnz .noprevhold  mov byte[lastmouseholded],0  mov cx,[GUImouseposx]  mov dx,[GUImouseposy]  call Set_MousePosition.noprevhold  cmp byte[mousewrap],1  je near ProcessMouseWrap  call Get_MouseData  cmp byte[lhguimouse],1  jne .notlefthanded2  call SwapMouseButtons.notlefthanded2  cmp word[GUImouseposx],cx  je .zero2  mov byte[MouseMoveOkay],1.zero2  cmp word[GUImouseposy],dx  je .zero3  mov byte[MouseMoveOkay],1.zero3  mov [GUImouseposx],cx  test word[GUImouseposx],8000h  jz .nowrapleft  mov word[GUImouseposx],0.nowrapleft  cmp word[GUImouseposx],255  jbe .nowrapright  mov word[GUImouseposx],255.nowrapright  mov [GUImouseposy],dx  test word[GUImouseposy],8000h  jz .nowrapup  mov word[GUImouseposy],0.nowrapup  cmp word[GUImouseposy],223  jbe .nowrapdown  mov word[GUImouseposy],100.nowrapdown  jmp ProcessMouseButtonsProcessMouseWrap:  call Get_MousePositionDisplacement  add word[GUImouseposx],cx.again  test word[GUImouseposx],8000h  jz .nowrapleft  add word[GUImouseposx],256  jmp .again.nowrapleft  cmp word[GUImouseposx],255  jbe .nowrapright  sub word[GUImouseposx],256  jmp .again.nowrapright  add word[GUImouseposy],dx.again2  test word[GUImouseposy],8000h  jz .nowrapup  add word[GUImouseposy],224  jmp .again2.nowrapup  cmp word[GUImouseposy],223  jbe .nowrapdown  cmp byte[GUIHold],1  jne .nohold  sub word[GUImouseposy],224-16  jmp .again2.nohold  sub word[GUImouseposy],224  jmp .again2.nowrapdown  cmp dx,0  jne .nozero  cmp cx,0  je .zero.nozero  mov byte[MouseMoveOkay],1.zeroProcessMouseButtons:  cmp byte[MouseMoveOkay],1  jne .zero  mov byte[GUIOnMenuItm],0  mov ax,[GUImouseposx]  cmp ax,[GUIMenuL]  jbe .zero  cmp ax,[GUIMenuR]  jae .zero  mov ax,[GUImouseposy]  cmp ax,18  jbe .zero  cmp ax,[GUIMenuD]  jae .zero  ; Mouse Menu  xor dx,dx  sub ax,18  mov bx,10  div bx  and eax,0FFh  mov ebx,[GUICYLocPtr]  mov byte[GUIOnMenuItm],2  cmp byte[eax+ebx+1],0  je .zero  mov [GUIcrowpos],al  mov byte[GUIOnMenuItm],1.zero  ; Check if mouse is clicked on menu  mov bx,[mousebuttonstat]  cmp byte[GUIRClick],1  jne .norclick2  test bx,02h  jz .norclick  cmp byte[romloadskip],0  jne .norclick2  cmp byte[MousePRClick],0  jne .norclick2  mov byte[GUIQuit],2.norclick  mov byte[MousePRClick],0.norclick2  test bx,01h  jz near .notclicked  cmp byte[GUIpclicked],1  je near .noclick  cmp byte[GUIOnMenuItm],2  je near .noclick  cmp byte[GUIOnMenuItm],1  jne .nomenuitem  call GUITryMenuItem  jmp .noclick.nomenuitem  cmp word[GUImouseposy],3  jb near .noclickedw  cmp word[GUImouseposy],14  ja near .noclickedw  cmp word[GUImouseposx],230  jb near .noclickedw  cmp word[GUImouseposx],233  jb near .noclickedw  cmp word[GUImouseposx],242  ja .notfound7%ifdef __UNIXSDL__  jmp .clickawn%endif  cmp word[GUImouseposy],8  jb .clickawn  cmp word[GUImouseposy],8  ja .clickawn2.clickawn  mov byte[GUIcwinpress],1  jmp .noclick.clickawn2  mov byte[GUIcwinpress],3  jmp .noclick.notfound7  cmp word[GUImouseposx],244  jb near .noclickedw  cmp word[GUImouseposx],253  ja .notfound8  mov byte[GUIcwinpress],2  jmp .noclick.notfound8.noclickedw  cmp word[GUImouseposy],15  ja near .nomenu  cmp word[GUImouseposy],3  jb near .noclicked  cmp word[GUImouseposy],13  ja near .noclicked;    GUIDMHelp 4,12,GUIMenuItem+6,1  cmp word[GUImouseposx],4  jb near .noclicked  cmp word[GUImouseposx],12  ja .notfound  mov byte[GUIcmenupos],1  mov byte[GUIcrowpos],0  jmp .noclick.notfound;    GUIDMHelp 17,47,GUIMenuItem,2  cmp word[GUImouseposx],17  jb near .noclicked  cmp word[GUImouseposx],47  ja .notfound2  mov byte[GUIcmenupos],2  mov byte[GUIcrowpos],0  jmp .noclick.notfound2;    GUIDMHelp 52,94,GUIMenuItem+7,3  cmp word[GUImouseposx],52  jb near .noclicked  cmp word[GUImouseposx],94  ja .notfound3  mov byte[GUIcmenupos],3  mov byte[GUIcrowpos],0  jmp .noclick.notfound3;    GUIDMHelp 99,135,GUIMenuItem+14,4  cmp word[GUImouseposx],99  jb near .noclicked  cmp word[GUImouseposx],135  ja .notfound4  mov byte[GUIcmenupos],4  mov byte[GUIcrowpos],0  jmp .noclick.notfound4;    GUIDMHelp 140,188,GUIMenuItem+21,5  cmp word[GUImouseposx],140  jb near .noclicked  cmp word[GUImouseposx],188  ja .notfound5  mov byte[GUIcmenupos],5  mov byte[GUIcrowpos],0  jmp .noclick.notfound5;    GUIDMHelp 193,223,GUIMenuItem+29,6  cmp word[GUImouseposx],193  jb near .noclicked  cmp word[GUImouseposx],223  ja .notfound6  mov byte[GUIcmenupos],6  mov byte[GUIcrowpos],0  jmp .noclick.notfound6  jmp .noclick.noclicked%ifdef __MSDOS__  jmp .noclick%else  mov byte[GUIpclicked],1  mov byte[GUIHold],255  mov eax,[GUImouseposy]  mov [GUIHoldYlim],eax  mov eax,[GUImouseposx]  mov [GUIHoldXlimL],eax  call MouseWindow  jmp .noclick%endif.nomenu  cmp byte[GUIcmenupos],0  je near .checkmenuboxclick  mov al,[GUIcmenupos]  mov [GUIpmenupos],al  mov byte[GUIcmenupos],0.noclick  mov byte[GUIpclicked],1  xor eax,eax  mov al,[GUIwinptr]  dec eax  xor ebx,ebx  mov bl,[GUIwinorder+eax]  cmp byte[GUIHold],2  je near .hold2  cmp byte[GUIHold],3  je near .hold3  cmp byte[GUIHold],4  je near .hold4  cmp byte[GUIHold],5  je near .hold5  cmp byte[GUIHold],6  je near .hold6  cmp byte[GUIHold],7  je near .hold7  cmp byte[GUIHold],1  je near .hold  cmp byte[GUIHold],255  je .holded  mov byte[GUICHold],0  ret.holded  mov eax,[GUIHoldYlim]  mov [GUImouseposy],eax  mov eax,[GUIHoldXlimL]  mov [GUImouseposx],eax  mov cx,[GUIHoldXlimL]  mov dx,[GUIHoldYlim]  call Set_MousePosition  ret.hold2  ; Colour Slide Bar Hold  mov eax,[GUIHoldYlim]  mov [GUImouseposy],eax  mov ebx,[GUImouseposx]  mov eax,[GUIHoldXlimL]  cmp ebx,eax  jnl .noless2  mov [GUImouseposx],eax.noless2  mov eax,[GUIHoldXlimR]  cmp ebx,eax  jng .nogreat2  mov [GUImouseposx],eax.nogreat2  mov byte[lastmouseholded],1  jmp DisplayGUIOptnsClick.hold3  ; Box Hold  mov ebx,[GUIHoldYlim]  cmp ebx,[GUImouseposy]  jl .boxhold1  mov [GUImouseposy],ebx.boxhold1  mov ebx,[GUIHoldXlimL]  cmp ebx,[GUImouseposx]  jl .boxhold2  mov [GUImouseposx],ebx.boxhold2  mov ebx,[GUIHoldYlimR]  cmp ebx,[GUImouseposy]  jg .boxhold3  mov [GUImouseposy],ebx.boxhold3  mov ebx,[GUIHoldXlimR]  cmp ebx,[GUImouseposx]  jg .boxhold4  mov [GUImouseposx],ebx.boxhold4  mov byte[lastmouseholded],1  jmp GUIWindowMove.hold4  mov eax,[GUImouseposx]  sub eax,[GUIwinposx+ebx*4]  mov edx,[GUImouseposy]  sub edx,[GUIwinposy+ebx*4]  cmp eax,[GUIHoldXlimL]  jl near .nobhold4  cmp edx,[GUIHoldYlim]  jl near .nobhold4  cmp eax,[GUIHoldXlimR]  jg near .nobhold4  cmp edx,[GUIHoldYlimR]  jg near .nobhold4  mov al,[GUICBHold2]  mov [GUICBHold],al  ret.nobhold4  mov byte[GUICBHold],0  ret.hold5  ; Sound Slide Bar Hold  mov eax,[GUIHoldYlim]  mov [GUImouseposy],eax  mov ebx,[GUImouseposx]  mov eax,[GUIHoldXlimL]  cmp ebx,eax  jnl .noless5  mov [GUImouseposx],eax.noless5  mov eax,[GUIHoldXlimR]  cmp ebx,eax  jng .nogreat5  mov [GUImouseposx],eax.nogreat5  mov byte[lastmouseholded],1  jmp DisplayGUISoundClick.hold6  ; Speed Slide Bar Hold  mov eax,[GUIHoldYlim]  mov [GUImouseposy],eax  mov ebx,[GUImouseposx]  mov eax,[GUIHoldXlimL]  cmp ebx,eax  jnl .noless6  mov [GUImouseposx],eax.noless6  mov eax,[GUIHoldXlimR]  cmp ebx,eax  jng .nogreat6  mov [GUImouseposx],eax.nogreat6  mov byte[lastmouseholded],1  jmp DisplayGUISpeedClick.hold7  ; Video Slide Bar Hold  mov eax,[GUIHoldYlim]  mov [GUImouseposy],eax  mov ebx,[GUImouseposx]  mov eax,[GUIHoldXlimL]  cmp ebx,eax  jnl .noless7  mov [GUImouseposx],eax.noless7  mov eax,[GUIHoldXlimR]  cmp ebx,eax  jng .nogreat7  mov [GUImouseposx],eax.nogreat7  mov byte[lastmouseholded],1  jmp DisplayGUIVideoClick.hold  cmp word[GUImouseposy],16  jge .noover  test byte[mousewrap],1  jz .nomwrap  add word[GUImouseposy],224-16  jmp .hold.nomwrap  mov word[GUImouseposy],16.noover  mov cx,[GUImouseposy]  sub cx,[GUIHoldy]  add cx,[GUIHoldym]  movsx ecx,cx  xor eax,eax  mov al,[GUIwinptr]  dec eax  xor ebx,ebx  mov bl,[GUIwinorder+eax]  mov [GUIwinposy+ebx*4],ecx  mov cx,[GUImouseposx]  sub cx,[GUIHoldx]  add cx,[GUIHoldxm]  movsx ecx,cx  mov [GUIwinposx+ebx*4],ecx  ret.notclicked  mov byte[GUICHold],0  mov byte[GUIpclicked],0  mov byte[GUIHold],0%ifdef __UNIXSDL__  cmp byte[GUIcwinpress],1  jne .notwinpressa  mov byte[GUIcwinpress],0  cmp word[GUImouseposy],3  jb .notwinpressa  cmp word[GUImouseposy],13  ja .notwinpressa  cmp word[GUImouseposx],233  jb .notwinpressa  cmp word[GUImouseposx],242  ja .notwinpressa  call SwitchFullScreen  ret%endif%ifdef __WIN32__  cmp byte[GUIcwinpress],1  jne .notwinpressa  mov byte[GUIcwinpress],0  cmp word[GUImouseposy],3  jb .notwinpressa  cmp word[GUImouseposy],7  ja .notwinpressa  cmp word[GUImouseposx],233  jb .notwinpressa  cmp word[GUImouseposx],242  ja .notwinpressa  call SwitchFullScreen  ret%endif.notwinpressa%ifndef __MSDOS__  cmp byte[GUIcwinpress],2  jne .notwinpressb  mov byte[GUIcwinpress],0  cmp word[GUImouseposy],3  jb .notwinpressb  cmp word[GUImouseposy],13  ja .notwinpressb  cmp word[GUImouseposx],244  jb .notwinpressb  cmp word[GUImouseposx],253  ja .notwinpressb  mov byte[GUIQuit],1  ret.notwinpressb  cmp byte[GUIcwinpress],3  jne .notwinpressc  mov byte[GUIcwinpress],0  cmp word[GUImouseposy],9  jb .notwinpressc  cmp word[GUImouseposy],13  ja .notwinpressc  cmp word[GUImouseposx],233  jb .notwinpressc  cmp word[GUImouseposx],242  ja .notwinpressc%endif%ifdef __WIN32__  pushad  call MinimizeWindow  popad%endif%ifndef __MSDOS__  ret%endif.notwinpressc  ; ButtonProcess  cmp byte[GUICBHold],1  je near GUILoadData  cmp byte[GUICBHold],2  je near GUIProcReset

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -