装配中的键处理程序

时间:2018-02-11 18:26:28

标签: assembly keyboard dos bios tasm

我正在研究一个项目,该程序必须在特定键关闭(按下)时执行几行代码我尝试使用Ah 1 int 21和AH 1 int 16并使用{{1直接连接到键盘但所有这些似乎都有一个大问题。如果用户一次按下多个键,则程序无法检测到该键。我真正需要的是在循环中读取输入缓冲区并执行特定键的代码。

此代码示例在每个帧的主循环中运行:

in al , 60h

这段代码一次只能输入一个键... Witch不是我想要的

这里有一些关于最佳解决方案外观的蓝图:

;in al,60h  
;mov cl,al  
;in al,61h 
;mov ah,al   #Tried this didn't work...
;or al,80h 
;out 61h,al 
;mov al,ah   
;out 61h,al 
;mov al,cl 


 xor bx, bx

_poll_key:



 mov ah, 01h
 int 16h
jz _poll_key


 xor ah, ah
 int 16h

 mov bl, al
 call dispatch_key
jmp _poll_key

dispatch_key: 
mov al , ah
;________________________________________

        cmp al , 11h ; W HexScanCode
        jne NotW
        sub rbx , 160
        mov ah , red 
        mov bx , rbx
        mov es:[bx] , ah

        NotW:
        cmp al , 1Fh; S HexScanCode
        jne NotS
        add rbx , 160
        mov ah , red 
        mov bx , rbx
        mov es:[bx] , ah

        NotS :
        cmp al , 20h; D HexScanCode
        jne NotD
        add rbx , 2
        mov ah , red 
        mov bx , rbx 
        mov es:[bx] , ah
        NotD:
        cmp al , 1Eh ; A HexScanCode
        jne NotA
        sub rbx , 2
        mov ah , red 
        mov bx , rbx
        mov es:[bx] , ah

        NotA:
        ;Second Player___________________________________________________________________

        cmp al , 17h ; I HexScanCode 
        jne NotI
        sub bbx , 160
        mov ah , blue 
        mov bx , bbx 
        mov es:[bx] , ah

        NotI:
        cmp al , 25h ; K HexScanCode
        jne NotK
        add bbx , 160
        mov ah , blue 
        mov bx , bbx
        mov es:[bx] , ah

        NotK:
        cmp al , 26h ; L HexScanCode  
        jne Notl
        add bbx , 2
        mov ah , blue
        mov bx , bbx
        mov es:[bx] , ah
        Notl:
        cmp al , 24h; J HexScanCode
        jne Notj
        sub bbx , 2
        mov ah , blue
        mov bx , bbx
        mov es:[bx] , ah

        Notj:
        cmp al , 10h ; Q HexScanCode
        je finish

        ;;;;;;;;;;;;;;;;;;;
        ;First Player 
        mov ah , blue
        mov bx , bbx
        ;UP
        sub bx , 160
        mov es:[bx] , ah
        add bx , 160
        ;Down
        add bx , 160
        mov es:[bx] , ah 
        sub bx , 160
        ;Right
        add bx , 2 
        mov es:[bx] , ah
        sub bx , 2
       ;Left
        sub bx , 2 
        mov es:[bx] , ah
        add bx , 2
        ;Second Player
        mov ah , red
        mov bx , rbx
        ;Up
        sub bx , 160
        mov es:[bx] , ah
        add bx , 160
        ;Down
        add bx , 160
        mov es:[bx] , ah
        sub bx , 160
        ;Right
        add bx , 2 
        mov es:[bx] , ah
        sub bx , 2
        ;Left

        sub bx , 2 
        mov es:[bx] , ah
        add bx , 2

        ;

SHORT: Handeling同时按下了几把钥匙

任何人都知道如何实现这一目标吗?

-Thanks Ahead

0 个答案:

没有答案