слеживаются нажатия таких комбинаций клавиш, как Ctrl-Alt-Del, обрабатываются специальные клавиши PrtSc и SysReq. При вычислении кода ASCII нажатой клавиши учитывается состояние клавиш Shift и CapsLock.
Буфер клавиатуры имеет длину 32 байта и расположен по адресу 0000h:041Eh для машин IBM PC/XT.
В IBM AT и PS/2 расположение клавиатурного буфера задается содержимым двух слов памяти с адресами 0000h:0482h (компонента смещения адреса начала буфера). Обычно в IBM AT эти ячейки содержат значения соответственно 001Eh и 003Eh. Так как смещения заданы относительно сигментного адреса 0040h, то видно, что обычное расположение клавиатурного буфера в IBM AT и PS/2 соответствует его расположению в IBM PC/XT.
Клавиатурный буфер организован циклически. Это означает, что при его переполнении самые старые значения будут потеряны. Две ячейки памяти, находящиеся в области данных BIOS с с адресами 0000h:041Ah и 0000h:041Ch, содержат соответственно указатели на начало и конец буфера. Если значения этих указателей равны друг другу, буфер пуст (можно удалить все символы из буфера клавиатуры, установив оба указателя на начал буфера. Однако есть более предпочтительный способ с использованием прерывания BIOS INT 16h).
Указателями на начало и конец клавиатурного буфера обычно управляют обработчики прерываний INT 09h и INT 16h.
Программа извлекает из буфера коды нажатых клавиш, используя различные функции прерывания INT 16h.
Помимо управления содержимым буфера клавиатуры, обработчик прерывания INT 09h отслеживает нажатия на так называемые переключающие клавиши - NumLock, ScrollLock, CapsLock, Ins. Состояние этих клавиш записывается в область данных BIOS в два байта с адресами 0000h:0417h и 0000h:0418h.
Формат байта 0000h:0417h:
Биты
| Значение
|
| Нажата правая клавиша Shift
|
| Нажата левая клавиша Shift
|
| Нажата комбинация клавиш Ctrl-Shift с любой стороны
| | |