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

📄 keyboard.inc

📁 TestOS - 带简单GUI的DOS扩展OS// 源代码// ASM// 英文
💻 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 + -