Системное программное обеспечение персональных ЭВМ

Коды ASCII и работа BIOS


7.2. Коды ASCII и работа BIOS

Обработчиком прерывания 9 в BIOS скан-коды превращаются в коды ASCII. Имеется два типа ASCII-кодов: однобайтные и расширенные. Однобайтные коды - коды алфавитно-цифровых символов, символов псевдографики, некоторых управляющих символов (последние по-разному интерпретируются разными периферийными устройствами). Расширенные ASCII-коды - двухбайтные, первый байт всегда 0, второй содержит код. Такие коды связаны с клавишами, которые не имеют литерного отображения: клавиши функциональной клавиатуры, управления курсором и т.п. Обработчик прерывания 9 BIOS вырабатывает требуемые ASCII-коды и записывает в буфер клавиатуры. Далее программа, выполняющая ввод, обращается к BIOS или к DOS, и средства системы выбирают символы из буфера и передают программе.

Буфер клавиатуры находится в области данных BIOS. Этот буфер занимает память с адресами от 0040:001 по 0040:003C. Буфер организован как циклическая очередь, то есть при за- полнении указанной области памяти запись продолжается с ее начала. Два слова в области данных BIOS содержат адреса (смещения относительно начала области данных BIOS) начала и конца ("головы" и "хвоста") очереди. Адреса этих слов - 0040:001A и 0040:001C соответственно. Каждый код представлен в буфере BIOS двумя байтами. Для расширенных кодов ACSII первый байт содержит 0, а второй байт - ASCII-код. Для одно- байтных кодов первый байт содержит ASCII-код, а второй байт - скан-код клавиши, породившей этот ASCII-код. В буфере клавиатуры BIOS размещаются 15 слов, содержащих коды введенных клавиш, 16-е слово зарезервировано для размещения в нем признака конца 0x0D1C. Добавление нового кода в буфер состоит в записи кода по адресу "хвоста" и модификации указателя "хвоста". Удаление - в выборке кода по адресу "головы" и модификации указателя "головы" (модификация указателей должна учитывать циклическую природу очереди). Для очистка буфера достаточно приравнять указатель "хвоста" указателю "головы".

Программа примера 7.3 иллюстрирует работу буфера клавиатуры. При всяком изменении указателей очереди на экране отображается содержимое буфера и положение указателей в нем. Перехват прерывания 9 производится для распознавания управляющих клавиш программы. Клавиша "r" устанавливает признак чтения, по которому из очереди выбирается один код. Клавиша Esc устанавливает признак завершения программы.



Содержание раздела