С момента нажатия клавиши на клавиатуре до отображения прикладной программой символа на экране совершается целая последовательность событий. Эта статья начинается с обзора прерываний, обслуживающих события, связанные с клавиатурой. Затем рассматриваются программные и аппаратные средства, относящиеся к клавиатуре и ее прерываниям;непонятная техническая терминология попутно поясняется. Далее предлагаются примеры программ, демонстрирующих внутреннюю работу клавиатуры. И, наконец, представлены некоторые утилиты, улучшающие функциональные возможности клавиатуры. Статья перепечатывается из журнала Microsoft System Journal, v.5, No.l, 1990 с любезного разрешения фирмы Microsoft.
При работе с любой программой стоит вам только нажать на клавишу, как на экране мгновенно появляется символ. Это позволяет предположить, что между монитором и клавиатурой существует непосредственная связь. В действительности в процесс, сопровождающий нажатие на клавишу, включены мириады составных частей.
Первым шагом на пути, к пониманию работы клавиатуры становится знакомство с системой обслуживания прерываний ПК. Под прерыванием понимается временное прекращение центральным процессорным устройством (CPU — ЦПУ) текущей работы для выполнения некоторых посторонних действий, по завершении которых процессор возвращается в прежнее состояние и продолжает прерванную работу. Каждое прерывание имеет свой номер, по которому ЦПУ находит подпрограмму для его обработки. Семейство процессоров 80х86 обеспечивает работу с двумя типами прерываний — программными и аппаратными. Аппаратное прерывание возникает тогда, когда какое-либо устройство нуждается в экстренном обслуживании и, как правило, такое прерывание — большая неожиданность для ЦПУ.
В отличие от аппаратных, программные прерывания инициируются изнутри основной программы при помощи специальных команд процессора. Программное прерывание можно представить так, как будто программа прерывает сама себя для выполнения подпрограммы, не являющейся частью ее кода. Обращение к программному прерыванию похоже на вызов функции, за тем исключением, что нет необходимости написания самой функции. К одной из основных задач операционной системы (DOS или OS/2) относится обеспечение пользователя набором стандартных подпрограмм обработки прерываний с тем, чтобы отпала необходимость многократного переписывания наиболее общих (и, надо отметить, наиболее неприятных) наборов команд для всех выполняемых прикладных программ.
При нажатии на клавишу электронные схемы клавиатуры генерируют аппаратное прерывание, информирующее ЦПУ о том, что произошло событие, которое необходимо немедленно обработать. Экстренность обработки обусловлена тем, что клавиатура способна запоминать только до 4 нажатий. Если эти нажатия не будут переданы процессору, то они потеряются. Для предотвращения этого ЦПУ запоминает текущее состояние задачи (например, пересчет электронной таблицы) и выполняет специальную программу обработки сигналов клавиатуры. Эта программа называется INT 09H или "обработчик аппаратного прерывания от клавиатуры". Так как обработка данных с клавиатуры относится к наиболее важным функциям системы, программа обработки INT 09H встроена в ПЗУ и является частью BIOS.
Основная функция программы BIOS INT 09H — получение информации о нажатии на клавишу через порт ввода/вывода А микросхемы 8255-А, обработка этой информации и сохранение ее в буфере клавиатуры. Буфер клавиатуры — это небольшой участок памяти в зарезервированной области ОЗУ, называемой областью данных BIOS. Единственная информация, которую программа обслуживания прерываний получает от клавиатуры — это число, называемое скан-кодом и представляющее собой физический номер нажатой или отпущенной клавиши. Большинство прикладных программ ожидают поступления от клавиатуры кода символа (ASCII-кода), поэтому каждое нажатие на клавишу приходится специальным образом обрабатывать. Например, при нажатии на клавишу "А" клавиатурой посылается число (скан-код) 1ЕН. Программа INT 09H определяет по таблице, что это клавиша А. Попутно INT 09H проверяет состояние несимвольных клавиш, таких как CapsLock и левый или правый Shift с тем, чтобы определить, прописная это буква или строчная. Затем скан-код и его ASCII-интерпретация запоминаются в буфере клавиатуры и программа INT 09H завершается. ЦПУ — или, вернее, счетчик команд — возвращается на то самое место, в котором его работа была прервана. При этом система восстанавливается таким образом, что прерванная программа и "не подозревает", что была на некоторое время "заморожена".
Если работа INT 09H происходит "совершенно незаметно", то как же осуществляется передача прикладной программе информации о введенных символах? Для этого в операционной системе имеется несколько подпрограмм, объединенных под эгидой обработчика программного прерывания INT 16H.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.