Скан-коды

При нажатии любой клавиши контроллер клавиатуры (специализированный микропроцессор) вырабатывает два скан-кода, соответствующих позиции этой клавиши, которые передаются в компьютер. Первый скан-код вырабатывается, когда нажимается клавиша, а второй — при ее отпускании. Чтобы отличить второй скан-код, он предваряется посылкой байта со значением F0h.

 

При получении байта от клавиатуры чипсет системной платы формирует сигнал аппаратного прерывания IRQ1. Появление такого прерывания однозначно требует от процессора начать выполнение подпрограммы BIOS, отвечающей за обработку сигналов клавиатуры. Если полученный байт является скан-кодом нажатой или отпущенной клавиши, то его значение будет записано в буфер клавиатуры, который занимает 32 байта и имеет начальный адрес 0040:001А. Служебные коды, которые может вырабатывать контроллер клавиатуры, передаются для обработки другим подпрограммам BIOS.

В буфере клавиатуры для кода клавиши отводится по 2 байта, т. е. он рассчитан на 16 символов. Чтобы можно было вводить неограниченное количество символов, буфер клавиатуры работает по принципу FIFO ("первым вошел -- первым ушел").

После того как скан-код клавиши помещен в буфер клавиатуры, его может прочитать любая программа однозадачной операционной системы, например MS-DOS. В многозадачной операционной системе Windows служебные подпрограммы отлеживают, чтобы символы от клавиатуры получала активная в момент ввода символа программа.