keyboard.inc
来自「TestOS - 带简单GUI的DOS扩展OS// 源代码// ASM// 英文」· INC 代码 · 共 46 行
INC
46 行
key_board:
; Push registers
pushad
cli
cld
xor eax,eax
in AL,60h
cmp [game_write],0
jne write_text
mov BX,AX
and BX,007Fh ; switch high bit of BX to zero
and AL,80h ; check high bit of port value
jz Press
Release: ; high bit = 1: "release" code
mov [KeyDown+bx],00h ; write 00 to "down" array element
jmp Done
Press: ; high bit = 0: "press" code
mov [KeyDown+bx],01h ; write 01 to "down" array element
jmp Done
write_text:
cmp al,128 ; if below 128, then there is a key
jae nokey
mov edi,eax
mov al,[edi+normal_keymap]
next3:
mov [keybuffer],al
jmp nokey
Done:
in AL,61h ; read port 61h, system ctrl port
mov AH,AL ; save value to AH
or AL,80h ; set top bit to "1" - reset kbd
out 61h,AL ; write out value to port
xchg AH,AL ; put original value back into AL
out 61h,AL ; rewrite original value in AL
nokey:
mov AL,20h ; generate End of Interrupt
out 20h,AL
sti
popad
ret
;game_write db 0
;keybuffer db 0
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?