sdlintrf.asm

来自「linux下的任天堂模拟器代码。供大家参考。」· 汇编 代码 · 共 807 行 · 第 1/2 页

ASM
807
字号
;   As an example, to access Player 1 L button press data, it is;     done like : pressed[pl1Lk];   The 3 character key description of that array entry is accessed by the;     GUI through ScanCodeListing[pl1Lk*3]; Note: When storing the input device configuration of a dynamic input;   device system (ie. Win9x) rather than a static system (ie. Dos), it;   is best to store in the name of the device and relative button;   assignments in the configuration file, then convert it to ZSNES';   numerical corresponding key format after reading from it. And then;   convert it back when writing to it back.NEWSYM UpdateDevices                    ; One-time input device init        retNEWSYM JoyRead        pushad        call UpdateVFrame        popad        retSECTION .data; Total Number of Input DevicesNEWSYM NumInputDevices, dd 2; Input Device NamesNEWSYM GUIInputNamesdb 'NONE            ',0db 'KEYBOARD/GAMEPAD',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0db '                ',0; GUI Description codes for each corresponding key pressed valueNEWSYM ScanCodeListing        db '---','ESC',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 '  ; 00h        db ' 7 ',' 8 ',' 9 ',' 0 ',' - ',' = ','BKS','TAB'        db ' Q ',' W ',' E ',' R ',' T ',' Y ',' U ',' I '  ; 10h        db ' O ',' P ',' [ ',' ] ','RET','LCT',' A ',' S '        db ' D ',' F ',' G ',' H ',' J ',' K ',' L ',' : '  ; 20h        db ' " ',' ~ ','LSH',' \ ',' Z ',' X ',' C ',' V '        db ' B ',' N ',' M ',' , ',' . ',' / ','RSH',' * '  ; 30h        db 'LAL','SPC','CAP','F1 ','F2 ','F3 ','F4 ','F5 '        db 'F6 ','F7 ','F8 ','F9 ','F10','NUM','SCR','KP7'  ; 40h        db 'KP8','KP9','KP-','KP4','KP5','KP6','KP+','KP1'        db 'KP2','KP3','KP0','KP.','   ','   ','OEM','F11'  ; 50h        db 'F12','HOM','UP ','PGU','LFT','5DH','RGT','END'        db 'DWN','PGD','INS','DEL','64H','65H','66H','67H'  ; 60h        db '68H','69H','6AH','6BH','6CH','6DH','6EH','6FH'        db '70H','71H','72H','73H','74H','75H','76H','77H'  ; 70h        db '78H','79H','7AH','7BH','7CH','7DH','7EH','7FH'        ; Keyboard continued (Direct Input)        db '80H','81H','82H','83H','84H','85H','86H','87H'  ; 80h        db '88H','89H','8AH','8BH','8CH','8DH','8EH','8FH'        db '90H','91H','92H','93H','94H','95H','96H','97H'  ; 90h        db '98H','99H','9AH','9BH','9CH','9DH','9EH','9FH'        db 'A0H','A1H','A2H','A3H','A4H','A5H','A6H','A7H'  ; A0h        db 'A8H','A9H','AAH','ABH','ACH','ADH','AEH','AFH'        db 'B0H','B1H','B2H','B3H','B4H','B5H','B6H','B7H'  ; B0h        db 'B8H','B9H','BAH','BBH','BCH','BDH','BEH','BFH'        db 'C0H','C1H','C2H','C3H','C4H','C5H','C6H','C7H'  ; C0h        db 'C8H','C9H','CAH','CBH','CCH','CDH','CEH','CFH'        db 'D0H','D1H','D2H','D3H','D4H','D5H','D6H','D7H'  ; D0h        db 'D8H','D9H','DAH','DBH','DCH','DDH','DEH','DFH'        db 'E0H','E1H','E2H','E3H','E4H','E5H','E6H','E7H'  ; E0h        db 'E8H','E9H','EAH','EBH','ECH','EDH','EEH','EFH'        db 'F0H','F1H','F2H','F3H','F4H','F5H','F6H','F7H'  ; F0h        db 'F8H','F9H','FAH','FBH','FCH','FDH','FEH','FFH'        ; Joystick Stuff        db 'J00','J01','J02','J03','J04','J05','J06','J07'  ; 100h        db 'J08','J09','J0A','J0B','J0C','J0D','J0E','J0F'        db 'J10','J11','J12','J13','J14','J15','J16','J17'  ; 110h        db 'J18','J19','J1A','J1B','J1C','J1D','J1E','J1F'        db 'J20','J21','J22','J23','J24','J25','J26','J27'  ; 120h        db 'J28','J29','J2A','J2B','J2C','J2D','J2E','J2F'        db 'J30','J31','J32','J33','J34','J35','J36','J37'  ; 130h        db 'J38','J39','J3A','J3B','J3C','J3D','J3E','J3F'        db 'J40','J41','J42','J43','J44','J45','J46','J47'  ; 140h        db 'J48','J49','J4A','J4B','J4C','J4D','J4E','J4F'        db 'J50','J51','J52','J53','J54','J55','J56','J57'  ; 150h        db 'J58','J59','J5A','J5B','J5C','J5D','J5E','J5F'        db 'J60','J61','J62','J63','J64','J65','J66','J67'  ; 160h        db 'J68','J69','J6A','J6B','J6C','J6D','J6E','J6F'        db 'J70','J71','J72','J73','J74','J75','J76','J77'  ; 170h        db 'J78','J79','J7A','J7B','J7C','J7D','J7E','J7F'%ifdef __UNIXSDL__        ; Extra Joystick Stuff        db 'J80','J81','J82','J83','J84','J85','J86','J87'  ; 180h        db 'J88','J89','J8A','J8B','J8C','J8D','J8E','J8F'        db 'J90','J91','J92','J93','J94','J95','J96','J97'  ; 190h        db 'J98','J99','J9A','J9B','J9C','J9D','J9E','J9F'        db 'JA0','JA1','JA2','JA3','JA4','JA5','JA6','JA7'  ; 2A0h        db 'JA8','JA9','JAA','JAB','JAC','JAD','JAE','JAF'        db 'JB0','JB1','JB2','JB3','JB4','JB5','JB6','JB7'  ; 2B0h        db 'JB8','JB9','JBA','JBB','JBC','JBD','JBE','JBF'%else        ; Extra Stuff (180h) (Parallel Port)        db 'PPB','PPY','PSL','PST','PUP','PDN','PLT','PRT'  ; 180h        db 'PPA','PPX','PPL','PPR','   ','   ','   ','   '        db 'P2B','P2Y','P2S','P2T','P2U','P2D','P2L','P2R'  ; 190h        db 'P2A','P2X','P2L','P2R','   ','   ','   ','   '        db 'PPB','PPY','PSL','PST','PUP','PDN','PLT','PRT'  ; 2A0h        db 'PPA','PPX','PPL','PPR','   ','   ','   ','   '        db 'P2B','P2Y','P2S','P2T','P2U','P2D','P2L','P2R'  ; 2B0h        db 'P2A','P2X','P2L','P2R','   ','   ','   ','   '%endifSECTION .text; ****************************; Mouse Stuff; ****************************NEWSYM Init_Mouse    ; return non-zero if successful    mov eax,01h    retSECTION .dataNEWSYM WMouseX, dd 0NEWSYM WMouseY, dd 0NEWSYM WMouseMoveX, dd 0NEWSYM WMouseMoveY, dd 0NEWSYM WMouseButton, dd 0SECTION .textNEWSYM Get_MouseData         ; Returns both pressed and coordinates    ; bx : bit 0 = left button, bit 1 = right button    ; cx = Mouse X Position, dx = Mouse Y Position    pushad    call GetMouseX    mov [WMouseX],eax    call GetMouseY    mov [WMouseY],eax    call GetMouseButton    mov [WMouseButton],eax    popad    mov cx,[WMouseX]    mov dx,[WMouseY]    mov bx,[WMouseButton]    retNEWSYM Set_MouseXMax    retNEWSYM Set_MouseYMax    retNEWSYM Set_MousePosition    retNEWSYM Get_MousePositionDisplacement    ; returns x,y displacement in pixel in cx,dx    pushad    call GetMouseMoveX    mov [WMouseMoveX],eax    call GetMouseMoveY    mov [WMouseMoveY],eax    popad    mov cx,[WMouseMoveX]    mov dx,[WMouseMoveY]    retNEWSYM MouseWindow    pushad    or byte[MouseButton],2    mov byte[T36HZEnabled],1    call GetMouseButton    and byte[MouseButton],0FDh    popad    retNEWSYM GUIInit    pushad    call Start36HZ    popad    retNEWSYM GUIDeInit    pushad    call Stop36HZ    popad    ret; ****************************; Sound Stuff; ****************************NEWSYM StopSound    call Start36HZ    call JoyRead    retNEWSYM StartSound    call Start60HZ    call JoyRead    retNEWSYM delay   retNEWSYM Check60hz    ; Call the timer update function here    pushad    call CheckTimers    call sem_sleep    popad    retSECTION .dataBitPosR db 11BitPosG db 5BitPosB db 0BitSizeR db 5BitSizeG db 6BitSizeB db 5SECTION .textInitializeGfxStuff:        ; Process Red Stuff        mov al,[BitPosR]        mov cl,al        mov bx,1        shl bx,cl        cmp byte[BitSizeR],6        jne .no6bit        mov [vesa2_usbit],bx        inc al.no6bit        or [vesa2_clbit],bx        mov [vesa2_rpos],al        dec al        mov cl,al        mov bx,001Fh        cmp cl,0FFh        je .shrr        shl bx,cl        jmp .shlr.shrr        shr bx,1.shlr        mov [vesa2_rfull],bx        add al,5        mov bx,1        mov cl,al        shl bx,cl        mov [vesa2_rtrcl],bx        xor bx,0FFFFh        mov [vesa2_rtrcla],bx        ; Process Green Stuff        mov al,[BitPosG]        mov cl,al        mov bx,1        shl bx,cl        cmp byte[BitSizeG],6        jne .no6bitb        mov [vesa2_usbit],bx        inc al.no6bitb        or [vesa2_clbit],bx        mov [vesa2_gpos],al        dec al        mov cl,al        mov bx,001Fh        cmp cl,0FFh        je .shrg        shl bx,cl        jmp .shlg.shrg        shr bx,1.shlg        mov [vesa2_gfull],bx        add al,5        mov bx,1        mov cl,al        shl bx,cl        mov [vesa2_gtrcl],bx        xor bx,0FFFFh        mov [vesa2_gtrcla],bx        ; Process Blue Stuff        mov al,[BitPosB]        mov cl,al        mov bx,1        shl bx,cl        cmp byte[BitSizeB],6        jne .no6bitc        mov [vesa2_usbit],bx        inc al.no6bitc        or [vesa2_clbit],bx        mov [vesa2_bpos],al        dec al        mov cl,al        mov bx,001Fh        cmp cl,0FFh        je .shrb        shl bx,cl        jmp .shlb.shrb        shr bx,1.shlb        mov [vesa2_bfull],bx        add al,5        mov bx,1        mov cl,al        shl bx,cl        mov [vesa2_btrcl],bx        xor bx,0FFFFh        mov [vesa2_btrcla],bx        xor word[vesa2_clbit],0FFFFh        call genfulladdtab        cmp byte[converta],1         je .red10         mov eax,565         jmp .red11.red10         mov eax,555.red11         push eax         call Init_2xSaIMMXW         pop eax        ret%macro SetDefaultKey2 13  mov dword[%1upk],%4    ; Up  mov dword[%1downk],%5  ; Down  mov dword[%1leftk],%6  ; Left  mov dword[%1rightk],%7 ; Right  mov dword[%1startk],%3 ; Start  mov dword[%1selk],%2   ; Select  mov dword[%1Ak],%9     ; A  mov dword[%1Bk],%12    ; B  mov dword[%1Xk],%8     ; X  mov dword[%1Yk],%11    ; Y  mov dword[%1Lk],%10    ; L  mov dword[%1Rk],%13    ; R%endmacro%macro SetDefaultKey 12  cmp bh,0  jne %%nopl1  SetDefaultKey2 pl1,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12%%nopl1  cmp bh,1  jne %%nopl2  SetDefaultKey2 pl2,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12%%nopl2  cmp bh,2  jne %%nopl3  SetDefaultKey2 pl3,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12%%nopl3  cmp bh,3  jne %%nopl4  SetDefaultKey2 pl4,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12%%nopl4  cmp bh,4  jne %%nopl5  SetDefaultKey2 pl5,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10,%11,%12%%nopl5%endmacroNEWSYM SetInputDevice    ; bl = device #, bh = player # (0-4)    ; Sets keys according to input device selected    cmp bl,0    jne near .nozero    SetDefaultKey 0,0,0,0,0,0,0,0,0,0,0,0    ret.nozero    cmp bh,1    je near .input2%ifdef __UNIXSDL__    SetDefaultKey 54,28,90,96,92,94,31,45,32,30,44,46%else    SetDefaultKey 54,28,200,208,203,205,31,45,32,30,44,46%endif    ret.input2%ifdef __UNIXSDL__    SetDefaultKey 56,29,36,50,49,51,98,89,91,99,95,97%else    SetDefaultKey 56,29,36,50,49,51,210,199,201,211,207,209%endif    ret

⌨️ 快捷键说明

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