Процедура BIOS клавиатуры изнутри - часть 2
0018 74 EE JZ ADD_ONE ; Переход, если нет символа в буфере ввода
001A B4 00 MOV AH, 0
001C CD 16 INT 16H ; Чтение символа
001E 3C 20 CMP AL, ' ' ; Сравнение с пробелом
0020 75 E6 JNZ ADD_ONE ; Переход, если не пробел
0022 CB RET ; Возврат в ДОС
0023 COUNT ENDP
0023 CODE ENDS
END COUNT
Фиг. 9.3 Состояние клавиатуры
Команда REPNE SCASB, используемая после метки K16, позволяет BIOS
просмотреть таблицу в поисках соответствия с одной из регистровых
клавиш. Когда BIOS находит соответствие в таблице кодов
сканирования, она использует смещение в таблице для получения
значения маски, используемого вместе с переменной KB_FLAG. Так как
все регистровые клавиши представлены битами в переменных флагов,
единая программа, пользуясь этими таблицами, может управлять
регистровыми клавишами.
BIOS использует также другие таблицы для перекодировки кодов
сканирования в коды ASCII. Определив текущее состояние регистров,
BIOS загружает в регистр BX указатель на нужную таблицу кодов
ASCII. Затем программа преобразует код сканирования в правильное
начальное значение выбранной таблицы (вычитая начальный адрес
таблицы). Команда XLAT переводит код сканирования в правильный код
ASCII. Этот прием используется там, где BIOS порождает коды
псевдосканирования цифровой клавиатуры в режиме использования
регистра клавиатуры CONTROL (метка K63).
Подпрограмма ERROR_BEEP - пример управления динамиком, которое
мы разбирали в предыдущей главе; она порождает сигнал, который BIOS
посылает всегда, когда оператор вводит символ, а буфер полон. Так
как этот сигнал может возникнуть всякий раз, когда система
обслуживает прерывание от клавиатуры, было бы неразумно менять
значение счетчика в канале таймера, управляя динамиком. Для этой
цели BIOS использует непосредственное управление динамиком. Если
уже генерируется какой-либо звук, он обрывается и появляется сигнал
о переполнении клавиатуры. Если вы внимательно послушаете сигнал
переполнения, то заметите, что он слегка дрожит. Возникающее 18 раз
в секунду прерывание таймера меняет тон, прерывая цикл прямого
управления динамиком. Как было предложено в предыдущей главе, вы
можете исследовать последствия использования различных временных
циклов таймера на выходную тональность динамика.
Содержание Назад