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:

push    ax
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
pop     ax
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.

- -

INT 09H: Keyboard Interrupt