Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Получение состояния переключающих клавиш

Функция 02h возвращает в регистре AL состояние переключающих клавиш, таких как<Shift>,<Control>,<Alt>,<ScrollLock>,<NumLock>,<CapsLock>,<Insert>:

Регистры на входе:

AH = 02h

Регистры на выходе:

AL = Байт состояния переключающих клавиш

Формат байта состояния соответствует формату байта, находящегося в области данных BIOS по адресу 0000h:0417h:

Биты

Описание

0

Нажата правая клавиша <Shift>

1

Нажата левая клавиша <Shift>

2

Нажата комбинация клавиш <Control+Shift>с левой или правой стороны

3

Нажата комбинация клавиш <Alt+Shift>с левой или правой стороны

4

Состояние клавиши <ScrollLock>

5

Состояние клавиши <NumLock>

6

Состояние клавиши <CapsLock>

7

Состояние клавиши <Insert>

Функция 02h может быть использована для анализа текущего состояния переключающих клавиш.

Ниже показан фрагмент кода, в котором проверяется состояние клавиши <CapsLock>:

rg.h.ah = 2;

int86(0x16, &rg, &rg);

if((rg.h.al & 0x40) == 0)

{

// Клавиша<CapsLock> не нажата,

// соответствующий светодиод не горит

. . .

}

else

{

// Клавиша<CapsLock> нажата

. . .

}

Установка временных характеристик клавиатуры

Мы уже рассказывали о возможности изменения временных характеристик клавиатуры. Если BIOS, установленная в вашей машине, изготовлена после 15 декабря 1985 года, вы можете воспользоваться функцией 03h для ускорения (или замедления) работы клавиатуры:

Регистры на входе:

AH = 03h;

AL = 05h;

BL = Период автоповтора (количество повторов за одну секунду)

BH = Задержка включения режима автоповтора

Регистры на выходе:

Не используются

Период автоповтора задается следующим образом:

Содержимое регистра BL

Период автоповтора

0

30,0

1

26,7

2

24,0

4

20,0

8

15,0

0Ah

10,0

0Dh

9,2

10h

7,5

14h

5,0

1Fh

2,0

Для задержки включения режима автоповтора вы можете указывать следующие значения:

Содержимое регистра BH

Задержка включения режима автоповтора, mc

0

250

1

500

2

750

3

1000

В качестве примера приведем два фрагмента программы. Первый фрагмент увеличивает быстродействие клавиатуры до его верхнего предела, второй восстанавливает исходные значения временных характеристик.

union REGS rg;

. . .

rg.h.al = 5;

rg.h.ah = 3;

// Устанавливаем максимальное быстродействие клавиатуры

rg.h.bl = 0;

rg.h.bh = 0;

int86(0x16, &rg, &rg);

. . .

// Восстанавливаем исходное быстродействие клавиатуры

rg.h.bl = 0xa;

rg.h.bh = 1;

int86(0x16, &rg, &rg);

Запись символов в буфер клавиатуры

С помощью функции 05h можно вставить символы в буфер клавиатуры, как будто они были введены оператором.

Регистры на входе:

AH = 05h;

CL = код ASCII записываемого символа;

CH = скан-код записываемого символа, или 0

Регистры на выходе:

AL = 0 - запись выполнена успешно;

AL = 1 - буфер клавиатуры переполнен

Приведенная ниже фрагмент программы записывает в буфер клавиатуры пять символов '*'. Если запустить программу, соедржащую этот фрагмент кода, а затем посмотреть на системное приглашение, то вы увидите что-нибудь похожее на C:\>*****.

union REGS rg;

int i;

for(i=0; i<5; i++)

{

rg.h.ah = 5;

rg.h.cl = '*';

rg.h.ch = 9;

int86(0x16, &rg, &rg);

}

Соседние файлы в папке несколько программ