;--- BEGIN ---------------------------------------------------; ;--- CONSTANTS -----------------------------------------------; ;--- DATA ----------------------------------------------------; SEGMENT .data ;--- BSS -----------------------------------------------------; SEGMENT .bss keyhit: RESW 1 ; BIOS code for last key hit shiftflags: RESW 1 ; shift flags for last key hit ;--- CODE ----------------------------------------------------; SEGMENT .text ;;--------------------------------------------; ;; Wait for a key to be pressed, and return ;; its scancode. Scancode is also displayed ;; on status bar, if visible. The scancode ;; and shift flags are also available in variables. ;; cx: * -> scancode of pressed key ;; ax: * -> GARBAGE GetKey: mov ah, 12h int 16h ; get key shift states mov [shiftflags], ax ;mov cx, ax ;call StatusWord ; Notes: AL bit 3 set only for left Alt key on many machines. ; AH bits 7 through 4 always clear on a Compaq SLT/286. ; INT 16/AH=09h should be used to determine whether this function ; is supported. ; Bitfields for _al_ ;Bit(s) Description (Table 00587) ;7 Insert active ;6 CapsLock active ;5 NumLock active ;4 ScrollLock active ;3 Alt key pressed (either Alt on 101/102-key keyboards) ;2 Ctrl key pressed (either Ctrl on 101/102-key keyboards) ;1 left shift key pressed ;0 right shift key pressed ;Bitfields for _ah_ ;Bit(s) Description (Table 00588) ;7 SysReq key pressed (SysReq is often labeled SysRq) ;6 CapsLock pressed ;5 NumLock pressed ;4 ScrollLock pressed ;3 right Alt key pressed ;2 right Ctrl key pressed ;1 left Alt key pressed ;0 left Ctrl key pressed xor ah, ah ; get a key int 16h mov [keyhit], ax call ShowKeyStroke mov cx, [keyhit] ret ;;--------------------------------------------; ;; Check if a key was pressed; return its ;; scancode if it was, or 0 if no key was pressed. ;; cx: * -> scancode of pressed key or 0 ;; ax: * -> GARBAGE ReadKey: xor ah, ah ; check for outstanding key inc ah int 16h jz .NoKey jmp GetKey .NoKey: xor cx, cx ret ;--- END -----------------------------------------------------;