Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Скан-коды
По скан-коду можно определить, только начатую клавишу, поэтому он является по-существу ее порядковым номером. Однако по скан-коду нельзя в общем случае однозначно определить какой символ вводится, так как, например, одной и той же клавише могут соответствовать 4 различных символа: - латинская прописная буква, - латинская строчная буква, - русская прописная буква, - русская строчная буква. Поэтому наряду со скан-кодом процессор должен анализировать следующие возможные ситуации: а) была ли еще одновременно нажата одна из клавиш Alt, Ctrl, Shift б) была ли нажата ранее одна из клавиш Caps Lock, Scroll Lock, Num Lock, Ins. Этот анализ осуществляет специальная процедура в составе BIOS для обработки прерывания от контроллера клавиатуры, которое вырабатывается при каждом нажатии или отпускании клавиши и имеет номер 9. По номеру прерывания процессор определяет адрес вектора (ячейки по адресам 24h и 2бh), в котором располагается адрес стандартной процедуры INT 09h обработки этого прерывания, и осуществляет переход на ее выполнение. Процедура INT 09h выполняет следующую последовательность действий. Сначала она считывает из порта контроллера клавиатуры скан-код и в зависимости от его значения осуществляет одну из трех операций. 1) Если скан-код соответствует нажатой управляющей клавише, то в слове состояния клавиатуры, находящемся в двух байтах по адресам 0:0417h и 0:0418h, устанавливается единица в соответствующих битах. Единицы в битах 4-7 байта слова состояния по адресу 0:0417h фиксируют активность режимов прокрутки, цифр, прописных букв и режима вставки, устанавливаемых нажатием клавиш Caps Lock, Scroll Lock, Num Lock, Ins соответственно. Повторное их нажатие инвертирует значение этих битов. Единицы в битах 4-7 байта слова состояния по адресу 0:0418h фиксируют нажатое состояние этих же клавиш. Единицы в битах 0-3 байта по адресу 0:0417h фиксируют нажатое состояние клавиш правый Shift, левый Shift, Ctrl и Alt соответственно. Для IBM РС/AT единицы в битах 0-2 байта по адресу 0:0418h фиксируют нажатое состояние клавиш левый Ctrl, левый Alt, SysReg соответственно. Наконец 1 в бите 3 байта по адресу 0:0418h фиксирует активность режима паузы, устанавливаемого нажатием Ctrl –Num Lock. Если получен скан-код отпускаемой управляющей клавиши, то соответствующе биты слова-состояния устанавливаются в 0. 2) Если скан-код соответствует любой другой клавише, кроме управляющих, с символом, который можно отобразить, на экране, то процедура INT 09h нормирует двухбайтовый код и заносит его в кольцевой буфер в памяти компьютера. Старший байт этого кода содержит скан-код, а младший - ASCII код. Таким образом, этот двухбайтовый код однозначно характеризует и вводимый символ и клавишу, с помощью которой он введен. ASCII код определяется процедурой INT 09h в зависимости от значения битов в слове состояния. Кольцевой буфер служит для синхронизации процесса ввода данных с клавиатуры с процессом приема этих данных программой, выполняемой компьютером. Его объем 15 слов, расположенных с адреса 0:041Ah. Дисциплина обслуживания кольцевого буфера очередь («первым пришел, первый ушел») с использованием двух указателей, расположенным по адресам 0:041Сh (хвостовой указатель) и 0:041Ah (головной указатель). В начале работы буфер пуст и оба указателя одинаковы и указывают на ячейку с адресом 0:041Еh. В дальнейшем в головном указателе хранится адрес двухбайтового кода клавиши, еще не востребованного программой, а в хвостовом указателе – адрес первой свободной ячейки буфера. Каждое нажатие на клавишу, которой соответствует видимый символ, добавляет в буфер ее двухбайтовый код и увеличивает значение хвостового указателя на 2. Когда это значение превысит границу буфера 0:043Сh, то указатель возвращается к началу буфера и процесс изменения хвостового указателя повторяется. Головной указатель используется и изменяется процедурой прерывания BIOS (INT 16h) или соответствующей функцией DOS (INT 21h), с помощью которых выполняемая программа получает из буфера очередной двухбайтовый код, а значение головного указателя увеличивается на 2. Когда это значение превысит границу 0:043Сh, то головной указатель также возвращается к началу буфера. Равенство обоих указателей означает, что буфер пуст. В этом случае процедура ввода будет ожидать поступления кода в буфер. Возможна ситуация, когда хвостовой указатель будет иметь значение меньше, чем головной. Это происходит, когда оператор нажимает на клавиши, а программа не требует ввода данных с клавиатуры. В этом случае прием кодов в буфер блокируется и генерируется звуковой сигнал при каждом нажатии. 3) Для скан-кодов, которым не соответствуют какие-либо отображаемые на экране символы (например, скан-коды функциональных клавиш, комбинаций клавиш Ctrl, Shift, Alt и функциональных клавиш для управления перемещением курсора, вспомогательных клавиш), процедура INT 09h помещает в кольцевой буфер двухбайтовый код, в котором в байте для кода ASCII записывается 00h. Такие коды называются расширенными кодами ASCII. Значение 0 на месте ASCII кода в двухбайтовом коде служит признаком того, что нажата клавиша или комбинация клавиш не имеющая отображаемого на экране символа. Такая комбинация может быть использована как условие дня управления работой программы путем интерпретации второго байта этого кода – скан-кода клавиши. С целью расширения возможностей управления работой программ в интерактивном режиме для всех алфавитно-цифровых клавиш (а в IBM РС/AT и для большинства знаковых клавиш), нажимаемых вместе с клавишей Alt, зарезервированы расширенные ASCII коды. Date: 2015-09-18; view: 381; Нарушение авторских прав |