📄 keyboard.inc
字号:
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -