Страница 15 из 26
3.2.4 Использование цифровой дополнительной клавиатуры и клавиш перемещения курсора. Для IBM PC и XT дополнительная цифровая клавиатура включает цифровые клавиши, клавиши <Ins> и <Del>, а также клавиши + и -. На AT добавляется клавиша "System Request" (Sys Rec), в то время как PCjr имеет только 4 клавиши перемещения курсора (остальные могут быть эмулированы специальными комбинациями с клавишами <Shift> и <Fn>, описанными в [3.2.2] и [3.2.5]). Клавиша <Num- Lock> переключает между цифрами и клавишами управления курсором. Клавиши <Ins> и <Del> работают только если режим <NumLock> вклю- чен, т.е. дополнительная клавиатура выдает цифры. Клавиши + и - выдают одни и те же коды независимо от установки режима <Num- Lock>. Цифровые клавиши дополнительной клавиатуры выдают в точности те же однобайтные коды, которые выдают цифровые клавиши верхнего ряда основной клавиатуры - т.е. коды ASCII от 48 до 57 для цифр от 0 до 9. Это верно и для клавиш + и -. Программисты на ассемб- лере могут определить какая из двух клавиш нажата по скан-коду клавиши, который находится в AH при возврате как из прерывания 16H, так и из процедур ввода одной клавиши прерывания 21H. Отме- тим, что любая из клавиш <Shift> переводит клавиши дополнительной клавиатуры в режим противоположный тому, который установлен кла- вишей <NumLock>. Установка клавиши <CapsLock> не имеет значения. Клавиша "5" в центре активна только как цифровая клавиша и в режиме перемещения курсора ввобще не выдает кода. Кроме четырех общепринятых стрелок клавиши управления курсором включают также <Home>, <End>, <PgUp> и <PgDn>, которые часто используются для перемещения курсора сразу на целую строку или страницу. Все они генерируют двухбайтные расширенные коды. Эти клавиши не обеспечивают прямого контроля над курсором. Они просто выдают коды, как и все другие клавиши, и это уже задача програм- миста преобразовать эти коды в перемещения курсора на экране. Допустимы некоторые комбинации клавиш дополнительной клавиату- ры с клавишей Ctrl. <NumLock> должен соответствовать режиму уп- равления курсором, чтобы эти комбинации работали. В [3.1.7] пока- зано как Ваша программа может автоматически устанавливать режим NumLock. Вот перечень кодов клавиш дополнительной клавиатуры:
Коды ASCII: 43 + 45 - 46 . 48-57 0-9 Расширенные коды:
72,75,77,80 CursorUp,Left,Right&Down 71,73,79,81 Home,PgUp,End,PgDn 82,83 Ins,Del 115,116 Ctlr-cursor left, -cursor right 117,118,119,132 Ctlr-end, -PgDn, -Home, -PgUp
AT имеет 84-ю клавишу, Sys Req, которая уникальна по своей функции. Клавиша предназначена для многопользовательских систем, как способ входа в главное меню системы. Когда клавиша нажимает- ся, в AX появляется код 8500H и выполняется прерывание 15H. При отпускании клавиши в AX появляется код 8501H, и опять же выпол- няется прерывание 15H. BIOS AT не обрабатывает функции 84H и 85H прерывания 15H, а просто делает возврат. Но можно программно заменить вектор прерывания для 15H, чтобы он указывал на процеду- ру обработки клавиши Sys Req. Такая процедура должна сначала прочитать AL, чтобы узнать была ли клавиша нажата (AL = 0) или отпущена (AL = 1). Заметим, что прерывание 15H предоставляет ряд процедур, некоторые из которых могут потребоваться программе обработки Sys Req. В этом случае процедура обработки Sys Req должна восстанавливать замененный ей вектор прерывания, и если в AH указаны функции отличные от 84H и 85H, то надо передать управ- ление оригинальному прерыванию 15H [1.2.4].
|