Модуль для работы с клавиатурой (c) Viktor Ostashev
{ Модуль для работы с клавиатурой (c) Viktor Ostashev 04.02.96 15:32 } unit l_kbd; interface function scan : byte; { Возвращает scan-код нажатой клавиши, ожидает нажатия } function bioskey : word; inline($B4/$10/$CD/$16); { Читает нажатие через int 16h, hi - scan, lo - ascii } function keystatus : word; inline($B4/$12/$CD/$16); { Читает расширенный статус клавиатуры } function kbhit : word; inline($B4/$11/$CD/$16/$75/$02/$31/$C0); { Проверяет наличие символа в буфере без ожидания, возвращает расширенный код, не очищая буфер } procedure chartobuf(symb : word); inline($59/$B4/$05/$CD/$16); { Возвращает символ в буфер клавиатуры } procedure clearkbd; { Очистка буфера клавиатуры } procedure togglekbd;inline($E4/$21/$34/$02/$E6/$21); { Включает/выключает клавиатуру через запрет IRQ1 } implementation function scan; assembler; asm @1: in al,60h and al,al jns @1 @2: in al,60h and al,al js @2 xor ah,ah push ax mov ah,11h int 16h jz @3 mov ah,10h int 16h @3: pop ax end; procedure clearkbd; assembler; asm mov ax,seg0040 push ds mov ds,ax mov ax,ds:[001Ah] mov ds:[001Ch],ax pop ds end; end.