Да запросто - читай прямо из буфера клавиатуры, используя функции BIOS.
Теоретическая основаКлавиатура подключена к линии запроса IRQ 1 (уровень приоритета) которая составляет прерывание INT 9h обслуживаемое модулями BIOS. Драйверы клавиатуры могут организовывать дополнительную обработку этого прерывания.
Буфер клавиатуры.Область памяти размером 32 байта в области данных BIOS, начальный адрес который 40:1eh предназначенная для использования обработчиками 9h и 16h прерывание, а так же прикладными программами, как буфер для хранения кодов нажатых клавиш. Расчитан на 15 нажатых клавиш, генерирующих 2-х байтовые коды + 2 байта для клавиш Enter.
Буфер организуется как кольцевая очередь, доступ к которой осущ-ся с помощью указателя “головы” (head pointer) и указателя “хвоста”(tail pointer)
Указатель “хвоста” задает смещение до слова, где будет записан обработчиком прерывании 9 код буферизированный (запоминаемой клавиши).
Указатель “головы” задает смещение слова, кот. будет возвращено по запросу, сделанного ф-ми BIOS или ОС (чтение буфера).
Буфер клавиатуры – классический пример использования кольцевого буфера для организации асинхронного взаимодействия двух программ «производитель - потребитель». Асинхронность взаимодействия означает, что запись в буфер и чтение из него происходит в случайные не связанные между собой моменты времени.
Основные ф-ции обработчика INT 9h.- Чтение из порта 60h “скэн”- кода нажатой клавиши.
- Определение по прочитанному “скэн”- коду ASCII коду нажатой клавишей и запись его в буфер клавиатуры в области данных BIOS.
- Установка в “1” 7-го разряда корта 61h для разрешения дальнейшей работы клавиатуры.
Как это работаетПри вычислении ASCII кода нажатой клавишей программой опред-ся состояние специальных и переключающих клавиш и записывается в область данных BIOS в ячейки 0417h, 0418h.
Интерфейс программ с клавиатурой обеспечивается функцией BIOS, обрабатывающей прерывание INT 16h.
Основные ф-ции обработчика INT 16h- ALL = 00h - нулевая ф-я. Чтение кода символа из буфера клавиатуры (с ожиданием)
- ALL = 01h - первая ф-я. Чтение кода символа из буфера клавиатуры (без ожидания)
- ALL = 02h - определения состояния shift и триггерных клавиш по байту 0417h.
- ALL = 05h - запись в буфер клавиатуры двухбайтового кода клавиш.
- С 10h – по 12 дублирование 00 и 02 для другой клавиатуры.
В общем вот, сааму теорию я рассказал - по крайней мере как нам её преподавали в университете и надеюсь что серьёзных ошибок не сделал...
Да не сделал, не сделал - проверил. Нуа собственно как с прерыванями работать в книжках по программированию написано - ничего особо сложного там нет. Если не разберёшься - пиши.