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

📄 guimisc.inc

📁 linux下的任天堂模拟器代码。供大家参考。
💻 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 + -