INT 09H: Keyboard Interrupt
This hardware-generated interrupt (IRQ 1) is executed upon each press and
release of a key. The ROM-BIOS code interprets the keystroke, storing
values into the keyboard buffer at 0040:001e. It also handles the special
cases of the PrtSc, SysReq, Ctrl+Alt+Del, Ctrl+NumLock (or Pause) keys,
and tracks the status of the shift and case-lock keys.
See: INT 16H ......... BIOS service to access keys stored in the buffer
and obtain status of the certain shift keys.
Scan Codes ....... a list of the values of each possible keystroke
as it is received by INT 09H.
Extended ASCII ... a summary of the values that BIOS stores into the
keyboard buffer after it translates a scan code.
Keyboard Flags ... a summary of how to obtain, test for, and modify
the bit-settings of shift and case-lock flags.
TSRs that have a hot-key to trigger a popup usually intercept INT 09H and
test for a certain key with a sequence such as this:
in al,60H ;read the key
cmp al,POP_KEY ;is this the hot key?
je do_pop ; yes, trigger the popup
; no, drop through to original driver
jmp cs:[int9_vect] ;just hop out to original int handler
do_pop: ;------ following housekeeping is needed to satisfy the hdwr int
in al,61H ;get value of keyboard control lines
mov ah,al ; save it
or al,80h ;set the "enable kbd" bit
out 61H,al ; and write it out the control port
xchg ah,al ;fetch the original control port value
out 61H,al ; and write it back
mov al,20H ;send End-Of-Interrupt signal
out 20H,al ; to the 8259 Interrupt Controller
;------ other code handles other tests and finally triggers popup
█▌CPU Exception Interrupt▐█
286+ computer execute INT 09H when the math coprocessor encounters an
Segment Overrun exception.
See Also: IRQs: Hardware Interrupts
BIOS Data Area
I/O Port Map