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

📄 joy.asm

📁 linux下的任天堂模拟器代码。供大家参考。
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;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 pl1contrl,pl2contrl,pl3contrl,pl4contrl,pl5contrlEXTSYM pressed,CalibXmin,CalibYmin,CalibXmax,CalibYmaxEXTSYM CalibXmin209,CalibYmin209,CalibXmax209,CalibYmax209EXTSYM read_gpp,_readSideWinder,_SW1,_SW2,_SW3,_SW4,_SWCountEXTSYM pl1p209,pl2p209,pl3p209,pl4p209,pl5p209,WhichSW,delayEXTSYM pl1upk,pl1downk,pl1leftk,pl1rightk,pl1startk,pl1selkEXTSYM pl1Ak,pl1Bk,pl1Xk,pl1Yk,pl1Lk,pl1RkEXTSYM pl2upk,pl2downk,pl2leftk,pl2rightk,pl2startk,pl2selkEXTSYM pl2Ak,pl2Bk,pl2Xk,pl2Yk,pl2Lk,pl2RkEXTSYM pl3upk,pl3downk,pl3leftk,pl3rightk,pl3startk,pl3selkEXTSYM pl3Ak,pl3Bk,pl3Xk,pl3Yk,pl3Lk,pl3RkEXTSYM pl4upk,pl4downk,pl4leftk,pl4rightk,pl4startk,pl4selkEXTSYM pl4Ak,pl4Bk,pl4Xk,pl4Yk,pl4Lk,pl4RkEXTSYM pl5upk,pl5downk,pl5leftk,pl5rightk,pl5startk,pl5selkEXTSYM pl5Ak,pl5Bk,pl5Xk,pl5Yk,pl5Lk,pl5RkEXTSYM JoyX,JoyY,JoyX2,JoyY2,JoyMaxX,JoyMaxY,JoyMinX,JoyMinYEXTSYM JoyExists,JoyExists2,GetCoords,GetCoords3SECTION .dataNEWSYM JoyAltrn2,  db 2SECTION .bssNEWSYM joy4218, resb 1NEWSYM joy4219, resb 1NEWSYM joy4218j, resb 1NEWSYM joy4219j, resb 1NEWSYM joy421A, resb 1NEWSYM joy421B, resb 1NEWSYM joy421Aj, resb 1NEWSYM joy421Bj, resb 1NEWSYM JoyCenterX, resd 1NEWSYM JoyCenterY, resd 1NEWSYM JoyCenterX2, resd 1NEWSYM JoyCenterY2, resd 1NEWSYM JoyMaxX2,    resd 1NEWSYM JoyMaxY2,    resd 1NEWSYM JoyMinX2,    resd 1NEWSYM JoyMinY2,    resd 1NEWSYM JoyAltrn,   resb 1NEWSYM JoyCenterX209, resd 1NEWSYM JoyCenterY209, resd 1NEWSYM JoyMaxX209,    resd 1NEWSYM JoyMaxY209,    resd 1NEWSYM JoyMinX209,    resd 1NEWSYM JoyMinY209,    resd 1NEWSYM JoyCenterX2209, resd 1NEWSYM JoyCenterY2209, resd 1NEWSYM JoyMaxX2209,    resd 1NEWSYM JoyMaxY2209,    resd 1NEWSYM JoyMinX2209,    resd 1NEWSYM JoyMinY2209,    resd 1JoyQuant    resb 1JoyBQuant   resb 1NumSWs      resb 1NumGRiPs    resb 1PPad        resb 1        ; b0 = pp0, b1 = pp1JoyQuant209    resb 1JoyBQuant209   resb 1NumSWs209      resb 1NumGRiPs209    resb 1Buttons6       resb 1Buttons6209    resb 1SECTION .textNEWSYM DosUpdateDevices    mov byte[PPad],0    mov byte[JoyQuant],0    mov byte[JoyBQuant],0    mov byte[NumSWs],0    mov byte[NumGRiPs],0    mov byte[JoyQuant209],0    mov byte[JoyBQuant209],0    mov byte[NumSWs209],0    mov byte[NumGRiPs209],0    mov byte[Buttons6],0    mov byte[Buttons6209],0    ; Check for button #'s, joystick types, etc.    mov al,[pl1contrl]    mov ah,[pl1p209]    call .checkdevice    mov al,[pl2contrl]    mov ah,[pl2p209]    call .checkdevice    mov al,[pl3contrl]    mov ah,[pl3p209]    call .checkdevice    mov al,[pl4contrl]    mov ah,[pl4p209]    call .checkdevice    mov al,[pl5contrl]    mov ah,[pl5p209]    call .checkdevice    ; Auto-Calibrate the joysticks    cmp byte[JoyQuant],2    jne .no2joyst    mov dx,201h    mov byte[JoyExists2],1    call GetCoords3    mov ecx,1000    call delay    cmp byte[JoyExists2],0    jne .no2joyst    mov byte[JoyQuant],1.no2joyst    cmp byte[JoyQuant],1    jne .no1joyst    mov dx,201h    mov byte[JoyExists],1    call GetCoords    mov ecx,1000    call delay    cmp byte[JoyExists],0    jne .no1joyst    mov byte[JoyQuant],0.no1joyst    ; set max & mins    mov ecx,[JoyX2]    mov [JoyCenterX2], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinX2],eax    add eax,ecx    add eax,ecx    mov [JoyMaxX2],eax    mov ecx,[JoyY2]    mov [JoyCenterY2], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinY2],eax    add eax,ecx    add eax,ecx    mov [JoyMaxY2],eax    mov ecx,[JoyX]    mov [JoyCenterX], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinX],eax    add eax,ecx    add eax,ecx    mov [JoyMaxX],eax    mov ecx,[JoyY]    mov [JoyCenterY], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinY],eax    add eax,ecx    add eax,ecx    mov [JoyMaxY],eax    ; Port 209    ; Auto-Calibrate the joysticks    cmp byte[JoyQuant209],2    jne .no2joyst2    mov dx,209h    mov byte[JoyExists2],1    call GetCoords3    mov ecx,1000    call delay    cmp byte[JoyExists2],0    jne .no2joyst2    mov byte[JoyQuant209],1.no2joyst2    cmp byte[JoyQuant209],1    jne .no1joyst2    mov dx,209h    mov byte[JoyExists],1    call GetCoords    mov ecx,1000    call delay    cmp byte[JoyExists],0    jne .no1joyst2    mov byte[JoyQuant209],0.no1joyst2    ; set max & mins    mov ecx,[JoyX2]    mov [JoyCenterX2209], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinX2209],eax    add eax,ecx    add eax,ecx    mov [JoyMaxX2209],eax    mov ecx,[JoyY2]    mov [JoyCenterY2209], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinY2209],eax    add eax,ecx    add eax,ecx    mov [JoyMaxY2209],eax    mov ecx,[JoyX]    mov [JoyCenterX209], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinX209],eax    add eax,ecx    add eax,ecx    mov [JoyMaxX209],eax    mov ecx,[JoyY]    mov [JoyCenterY209], ecx    mov eax,ecx    shr ecx,1    sub eax,ecx    mov [JoyMinY209],eax    add eax,ecx    add eax,ecx    mov [JoyMaxY209],eax    cmp dword[CalibXmin],0    je .nocalib    mov eax,[CalibXmin]    mov [JoyMinX],eax    mov eax,[CalibYmin]    mov [JoyMinY],eax    mov eax,[CalibXmax]    mov [JoyMaxX],eax    mov eax,[CalibYmax]    mov [JoyMaxY],eax.nocalib    cmp dword[CalibXmin209],0    je .nocalib209    mov eax,[CalibXmin209]    mov [JoyMinX209],eax    mov eax,[CalibYmin209]    mov [JoyMinY209],eax    mov eax,[CalibXmax209]    mov [JoyMaxX209],eax    mov eax,[CalibYmax209]    mov [JoyMaxY209],eax.nocalib209    ret.checkdevice    ; 1 = keyboard, 2 = 2b joystick, 3 = 4b joystick, 4 = 6b joystick, 5 = 8b joystick    ; 6 = Sidewinder1, 7 = Sidewinder2, 8 = Sidewinder3, 9 = Sidewinder4    ; 10 = Grip0, 11 = Grip1, N/A = Grip2, N/A = Grip3, 12 = Parallel pad0    ; 13 = Parallel pad1, 14 = Parallel pad2, 15 = Parallel pad3, 16 = Parallel pad4    cmp al,1    ja .joyokay    ret.joyokay    cmp al,12    jne .nopp0    or byte[PPad],1    ret.nopp0    cmp al,13    jne .nopp1    or byte[PPad],2    ret.nopp1    cmp al,14    jne .nopp2    or byte[PPad],4    ret.nopp2    cmp al,15    jne .nopp3    or byte[PPad],8    ret.nopp3    cmp al,16    jne .nopp4    or byte[PPad],16    ret.nopp4    cmp ah,0    jne near .port209    cmp al,2    jne .nojoy2b    inc byte[JoyQuant]    add byte[JoyBQuant],2    ret.nojoy2b    cmp al,3    jne .nojoy4b    mov byte[JoyQuant],1    mov byte[JoyBQuant],4    ret.nojoy4b    cmp al,4    jne .nojoy6b    mov byte[JoyQuant],2    mov byte[JoyBQuant],6    mov byte[Buttons6],1    ret.nojoy6b    cmp al,5    jne .nojoy8b    mov byte[JoyQuant],2    mov byte[JoyBQuant],8    mov byte[Buttons6],2    ret.nojoy8b    cmp al,9    ja .grip    sub al,5    cmp byte[NumSWs],al    ja .skipswc    mov [NumSWs],al.skipswc    ret.grip    cmp al,11    ja .none    sub al,9    cmp byte[NumGRiPs],al    ja .skipgripc    mov [NumGRiPs],al.skipgripc.none    ret.port209    cmp al,2    jne .nojoy2b2    inc byte[JoyQuant209]    add byte[JoyBQuant209],2    ret.nojoy2b2    cmp al,3    jne .nojoy4b2.joy4b2    mov byte[JoyQuant209],1    mov byte[JoyBQuant209],4    ret.nojoy4b2    cmp al,4    jne .nojoy6b2    mov byte[JoyQuant209],2    mov byte[JoyBQuant209],6    mov byte[Buttons6209],1    ret.nojoy6b2    cmp al,5    jne .nojoy8b2    mov byte[JoyQuant209],2    mov byte[JoyBQuant209],8    mov byte[Buttons6209],2    ret.nojoy8b2    cmp al,9    ja .grip2    sub al,5    cmp byte[NumSWs209],al    ja .skipswc2    mov [NumSWs209],al.skipswc2    ret.grip2    cmp al,11    ja .none2    sub al,9    cmp byte[NumGRiPs209],al    ja .skipgripc2    mov [NumGRiPs209],al.skipgripc2.none2    retJoyRead209:   cmp byte[JoyAltrn],1   jne near .noanalog   ; Clear Joystick buttons and movements   mov word[pressed+100h],0      ; B7-8   mov word[pressed+106h],0      ; B5-6   mov dword[pressed+14Ch],0    ; Up,Down,Left,Right, pl1   mov dword[pressed+168h],0    ; Up,Down,Left,Right, pl2   ; Process Joystick(s)   cmp byte[JoyQuant209],2   jne near .no2joyst   mov dx,209h   call GetCoords3   ; Set button 5-6 + 2player Control   cmp byte[Buttons6209],0   jne near .6button   mov eax,[JoyX2]   cmp eax,[JoyMinX2209]   jae .noleft2   mov byte[pressed+16Ah],1.noleft2   mov eax,[JoyX2]   cmp eax,[JoyMaxX2209]   jbe .noright2   mov byte[pressed+16Bh],1.noright2   mov eax,[JoyY2]   cmp eax,[JoyMinY2209]   jae .noup2   mov byte[pressed+168h],1.noup2   mov eax,[JoyY2]   cmp eax,[JoyMaxY2209]   jbe .nodown2   mov byte[pressed+169h],1.nodown2   jmp .1pcoord.6button   mov eax,[JoyY2]   cmp eax,[JoyMinY2209]   jae .nob5   mov byte[pressed+106h],1.nob5   mov eax,[JoyX2]   cmp eax,[JoyMinX2209]   jae .nob6   mov byte[pressed+107h],1.nob6   cmp byte[Buttons6209],2   jne .no8b   mov eax,[JoyY2]   cmp eax,[JoyMaxY2209]   jbe .nob7   mov byte[pressed+100h],1.nob7   mov eax,[JoyX2]   cmp eax,[JoyMaxX2209]   jbe .nob8   mov byte[pressed+101h],1.nob8.no8b   jmp .1pcoord.no2joyst   ; Set 1 player control   cmp byte[JoyQuant209],1   jne near .no1joyst   mov dx,209h   call GetCoords.1pcoord   mov eax,[JoyX]   cmp eax,[JoyMinX209]   jae .noleft   mov byte[pressed+14Eh],1.noleft   mov eax,[JoyX]   cmp eax,[JoyMaxX209]   jbe .noright   mov byte[pressed+14Fh],1

⌨️ 快捷键说明

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