АППАРАТНОЕ ПРЕРЫВАНИЕ КЛАВИАТУРЫ
Принцип действия клавиатуры IBM PC
Клавиатура IBM PC работает следующим образом: всякий раз, когда Вы нажимаете или отпускаете клавишу, встроенное в клавиатуру устройство запоминает в своей встроенной памяти один байт. Этот байт содержит код нажатия или отпускания (соответственно 1 и 0) в седьмом бите и идентификатор клавиши, или scan-код, в остальных битах. Всего возможно 83 scan-кода, по одному для каждой клавиши клавиатуры. После того как встроенное в клавиатуру устройство запомнило какие-либо данные в своей памяти, оно посылает системе BIOS IBM PC прерывание типа 9, сообщающее, что у него есть данные для передачи.
Память клавиатуры способна хранить до 20 байтов, или до 10 операций нажатия и отпускания (т.е. ударов по клавишам). Это позволяет Вам набирать текст даже в то время, когда микропроцессор ЭВМ занят, например выдает содержимое экрана на принтер.
Если прерывания разрешены, то процедура обработки прерывания типа 9 KB_INT входящая в состав системы BIOS, считает байты из памяти клавиатуры и преобразует их в коды символов. Частью процесса преобразования является проверка того, не было ли некоторых нажатий без последующего отпускания; это позволяет формировать коды символов, отражающие удерживание в нажатом состоянии регистровых клавиш Shift, Ctrl или Alt во время нажатия на другую клавишу. По завершении работы процедура обработки прерывания типа 9 запоминает scan-код и код символа в буфере клавиатуры, находящимся в памяти ЭВМ.
Этот буфер рассчитан на сохранение результатов 15 ударов по клавишам; при таком размере буфера скорость работы программного обеспечения позволяет успевать за самыми быстрыми машинистками. Но если Вам вдруг удастся нажать на клавишу в то время, когда буфер полон, то система BIOS проигнорирует эту клавишу и выдаст звуковой сигнал.
Расширенная система ASCII
Ранее уже упоминалось, что клавиатура IBM PC имеет так много клавиш и настолько отличается от стандартной клавиатуры ЭВМ, что для представления генерируемых ею кодов символов не хватает стандартного набора из 128 ASCII-кодов. Всего в IBM PC предусмотрено 256 кодов, называемых фирмой IBM расширенной системой ASCII.
Расширенные коды
Когда Вы запрашиваете чтение символа с клавиатуры, система BIOS возвращает ASCII-код этого символа и его scan-код в регистрах AL и AH соответственно. Другие (“не ASCII”) клавиши возвращают 0 и в регистре AL и расширенный код в регистре AH. Обратите внимание на то, что расширенные коды в интервале 3-53 соответствуют scan-кодам.
Специальные комбинации клавиш
Следующие комбинации клавиш вызывают специальные действия:
Alt-Ctrl-Del вызывает рестарт или “перевызов” ОС ЭВМ.
Ctrl-Break инициирует прерывание типа 1B (клавиша прерывания). Эта комбинация клавиш возвращает 0 в регистрах AL и AH.
Ctrl-NumLock заставляет ЭВМ ждать, пока Вы не нажмете какую либо клавишу, отличную от клавиши NumLock. Это даст Вам возможность приостановить операцию (например, распечатку программы), а за тем возобновить ее исполнение.
Shift-PrtSc инициирует прерывание типа 5 (печать содержимого экрана).
Процедура BIOS, обслуживающая клавиатуру воспринимает клавиши Ctrl, Shift, NumLock, ScrollLockиIns как управляющие.
Программа обработки прерывания типа 16 (обмен данными с клавиатурой) возвращает байт состояния регистровых клавиш, который сообщает о том, какие из этих клавиш были нажаты.
АППАРАТНОЕ ПРЕРЫВАНИЕ КЛАВИАТУРЫ
Клавиатура подключена к линии прерывания IRQ1. Этой линии соответствует прерывание INT 09h. Клавиатурное прерывание обслуживается модулями BIOS. Драйверы клавиатуры и резидентные программы могут организовывать дополнительную работу прерывания INT 09h. Для этого может быть использована цепочка обработчиков прерывания. В первой книге первого тома мы приводили примеры расширения обработчиков прерывания INT 09h.
Как работает стандартный обработчик клавиатурного прерывания, входящий в состав BIOS?
Этот обработчик выполняет следующие действия:
– читает из порта 60h скан-код нажатой клавиши;
– записывает вычисленное по скан-коду значение ASCII-кода нажатой клавиши в специальный буфер клавиатуры, расположенный в области данных BIOS;
– устанавливает в 1 бит 7 порта 61h, разрешая дальнейшую работу клавиатуры;
– возвращает этот бит в исходное состояние;
– записывает в порт 20h значение 20h для правильного завершения обработки аппаратного прерывания.
Обработчик прерывания INT 09h не просто записывает значение ASCII-кода в буфер клавиатуры. Дополнительно отслеживаются нажатия таких комбинаций клавиш, как Ctrl-Alt-Del, обрабатываются специальные клавиши PrtSc и SysReq. При вычислении кода ASCII нажатой клавиши учитывается состояние клавиш Shift и CapsLock.
Буфер клавиатуры имеет длину 32 байта и расположен по адресу 0000h:041Eh для машин IBM PC/XT.
В IBM AT и PS/2 расположение клавиатурного буфера задается содержимым двух слов памяти с адресами 0000h:0482h (компонента смещения адреса начала буфера). Обычно в IBM AT эти ячейки содержат значения соответственно 001Eh и 003Eh. Так как смещения заданы относительно сигментного адреса 0040h, то видно, что обычное расположение клавиатурного буфера в IBM AT и PS/2 соответствует его расположению в IBM PC/XT.
Клавиатурный буфер организован циклически. Это означает, что при его переполнении самые старые значения будут потеряны. Две ячейки памяти, находящиеся в области данных BIOS с с адресами 0000h:041Ah и 0000h:041Ch, содержат соответственно указатели на начало и конец буфера. Если значения этих указателей равны друг другу, буфер пуст (можно удалить все символы из буфера клавиатуры, установив оба указателя на начал буфера. Однако есть более предпочтительный способ с использованием прерывания BIOS INT 16h).
Указателями на начало и конец клавиатурного буфера обычно управляют обработчики прерываний INT 09h и INT 16h.
Программа извлекает из буфера коды нажатых клавиш, используя различные функции прерывания INT 16h.
Помимо управления содержимым буфера клавиатуры, обработчик прерывания INT 09h отслеживает нажатия на так называемые переключающие клавиши - NumLock, ScrollLock, CapsLock, Ins. Состояние этих клавиш записывается в область данных BIOS в два байта с адресами 0000h:0417h и 0000h:0418h.
Формат байта 0000h:0417h:
Биты
| Значение
|
| Нажата правая клавиша Shift
|
| Нажата левая клавиша Shift
|
| Нажата комбинация клавиш Ctrl-Shift с любой стороны
|
| Нажата комбинация клавиш Alt-Shift с любой стороны
|
| Состояние клавиши ScrollLock
|
| Состояние клавиши NumLock
|
| Состояние клавиши CapsLock
|
| Состояние клавиши Insert
| Формат байта 0000h:0418h:
Биты
| Значение
|
| Нажата левая клавиша Shift вместе с клавишей Ctrl
|
| Нажата левая клавиша Shift вместе с клавишей Alt
|
| Нажата клавиша SysReq
|
| Состояние клавиши Pause
|
| Нажата клавиша ScrollLock
|
| Нажата клавиша NumLock
|
| Нажата клавиша CapsLock
|
| Нажата клавиша Insert
| Если вы меняете состояние светодиодов на панели клавиатуры, не забывайте устанавливать соответствующие биты в байтах состояния клавиатуры.
Программой обработки прерывания INT 09h отслеживаются некоторые комбинации клавиш. В таблице приведены эти комбинации и действия, выполняемые обработчиком прерывания при их обнаружении:
Комбинации клавиш
| Выполняемые действия
| Ctrl-Alt-Del
| Сброс и перезагрузка системы
| Ctrl-NumLock, Pause
| Перевод машины в состояние ожидания до нажатия любой клавиши
| Shift-PrtSc
| Распечатка на принтере содержимого видеопамяти
| Ctrl-Break
| Выполнение прерывания INT 1Bh, завершающего работу программы
|
Многие типы клавиатур имеют отдельную альтернативную цифровую панель, напоминающую клавиатуру калькулятора. Если одновременно с нажатием на клавишу Alt набрать число на этой панели (не большее чем 255 и не равное 0), то это число будет помещено в буфер клавиатуры, как будто бы оно было введено нажатием на одну клавишу. Это число будет также записано в слове по адресу 0000h:0419h в области данных BIOS.
При переполнении внутреннего буфера клавиатуры или буфера, расположенного в области данных BIOS программа-обработчик прерывания INT 09h генерирует звуковой сигнал.
При составлении программ для MS-DOS у Вас едва ли появится необходимость непосредственного манипулирования содержимым буфера клавиатуры – Вы можете использовать прерывание BIOS INT 16h для выполнения практически всех клавиатурных операций.
В следующем разделе мы займемся непосредственно изучением средств работы с клавиатурой, предоставляемых в распоряжение прерыванием BIOS INT 16h.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|