Главная » Ассемблер, Железо » Таинственная мышь PS/2

0

Мышь PS/2 — это, пожалуй, самое глубоко законспирированное периферийное устройство персонального компьютера. Протокол передачи данных этой мыши был опубликован в документации к старым моделям IBM PS/2, а вся остальная информация длительное время была недоступной. Интерес к манипуляторам с интерфейсом PS/2 возник по причине повсеместного распространения стандарта АТХ, вытеснившего стандарт AT. Материнская плата формата АТХ снабжена двумя разъемами PS/2-типа, один из которых предназначен для подключения клавиатуры, а второй — для координатного устройства (можно присоединять мышь, джойстик, трекбол и т. д.).

Функции BIOS для работы с мышью PS/2-типа

Для обслуживания мыши PS/2 имеется специальная функция C2h прерывания BIOS Int 15h — интерфейс координатного устройства

[3, 10, 85]. К сожалению, данный интерфейс носит вспомогательный характер — он служит только для управления параметрами мыши, а драйвер в его состав не входит.

После выполнения любой функции данной группы в случае успешного ее завершения флаг CF будет сброшен, в случае ошибки — установлен. Кроме того, в любом случае в регистр АН будет помещена дополнительная информация о результате операции:

•     OOh — успешное завершение;

•     Olh — недопустимый номер функции;

•     02h — недопустимое значение параметра;

•      03h — ошибка интерфейса;

•     04h — необходимо выполнить повторную передачу информации;

•     05h — драйвер устройства не установлен.

Рассмотрим набор подфункций интерфейса координатного устройства более подробно.

Прерывание Int 15h, функция C2h, подфункция OOh: разрешить или запретить работу мыши PS/2

Подфункция позволяет разрешить или запретить работу мыши или другого координатного устройства, использующего интерфейс PS/2.

Перед вызовом прерывания Int 15h необходимо занести в регистры следующие значения:

•     в АХ — значение C200h;

•    в ВН — код команды (0 — запретить работу, 1 — разрешить работу).

Прерывание Int 15h, функция C2h, подфункция 01 h: произвести сброс устройства

С помощью этой подфункции осуществляется перевод мыши или другого координатного устройства в исходное состояние. Перед вызовом прерывания необходимо занести в регистр АХ значение C201h.

После сброса параметры устройства будет находиться в следующем состоянии:

•     частота передачи данных: 100 пакетов в секунду;

•     разрешение: 4 отсчета на миллиметр;

•     масштабирование 1:1;

•     работа устройства запрещена.

Прерывание Int 15h, функция C2h, подфункция 02h: установить частоту дискретизации

Подфункция позволяет изменить частоту дискретизации (частоту передачи пакетов данных от устройства к компьютеру). Перед вызовом прерывания необходимо занести в регистры следующие значения:,

•     в АХ — значение C202h;

•    в ВН — код частоты дискретизации (0—10 посылок/с, 1 — 20 посылок/с, 2—40 посылок/с, 3 — 60 посылок/с, 4 — 80 посылок/с, 5—100 посылок/с, 6 — 200 посылок/с).

Прерывание Int 15h, функция C2h, подфункция 03h: установить разрешение

Подфункция позволяет регулировать чувствительность мыши к перемещению.

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

•     в АХ — значение C203h;

•    в ВН — код устанавливаемого разрешения (0—1 отсчет на мм, 1 — 2 отсчета на мм, 2 — 4 отсчета на мм, 3 — 8 отсчетов на мм).

Прерывание Int 15h, функция C2h, подфункция 04h: получить идентификатор устройства

Подфункция предназначена для определения типа подключенного к компьютеру координатного устройства.

Перед вызовом прерывания необходимо занести в регистр АХ значение C204h.

В случае успешного выполнения функции в регистре ВН будет возвращен идентификационный код устройства.

Прерывание Int 15h, функция C2h, подфункция 05h: инициализировать интерфейс координатного устройства

Подфункция инициализирует интерфейс координатного устройства.

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

•     в АХ — значение С205И;

•     в ВН — размер пакета данных в байтах (от 1 до 8).

Прерывание Int 15h, функция C2h, подфункция 06h: получить состояние или установить масштаб

Подфункция позволяет определить состояние устройства или установить режим масштабирования.

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

•    в АХ — значение C206h;

•    в ВН — код выполняемой операции (0 — определить состояние устройства, 1 — установить масштаб 1:1, 2 — установить масштаб 2:1).

После завершения выполнения операций с кодами 1 или 2 функция возвращает только общий код состояния координатного устройства в регистре АН. В случае успешного завершения операции с кодом О в регистрах будут размещены следующие значения:

•    в АН — общий код состояния;

•    в BL — байт состояния устройства;

•    в CL — код текущего разрешения устройства (0—1 отсчет на мм, 1 — 2 отсчета на мм, 2 — 4 отсчета на мм, 3 — 8 отсчетов на мм);

•    в DL — код частоты дискретизации (0 — 10 посылок/с, 1—20 посылок/с, 2—40 посылок/с, 3 — 60 посылок/с, 4—80 посылок/с, 5 — 100 посылок/с, 6 — 200 посылок/с).

При этом разряды байта состояния устройства, возвращаемого в BL, имеют следующее значение:

•    бит 0 — состояние правой кнопки (0 — отпущена, 1 — нажата);

•    бит 1 — состояние средней кнопки (0 — отпущена, 1 — нажата);

•    бит 2 — состояние левой кнопки (0 — отпущена, 1 — нажата);

•    бит 3 — зарезервирован (всегда 0);

•    бит 4 — масштабирование (0 — режим 1:1, 1 — режим 2:1);

•    бит 5 — передача данных от устройства к компьютеру (0 — запрещена, 1 — разрешена);

•    бит 6 — режим (0 — потоковый, 1 — дистанционного управления);

•    бит 7 — зарезервирован (всегда 0).

Прерывание Int 15h, функция C2h, подфункция 07h: установить адрес обработчика прерываний

Функция позволяет программисту установить свою собственную процедуру обработки прерываний от координатного устройства.

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

•    в АХ — значение C207h;

•    в ES: BX — сегментный адрес и смещение пользовательского обработчика прерываний от координатного устройства.

К сожалению, обработчик прерываний не входит в данный набор функций, и писать его должен сам программист — по правилам, которые мы рассмотрим далее.

Группа форматов PS/2 Mouse

Информация о работе мыши PS/2 появилась в Интернете сравнительно недавно [56, 59, 60]. Стандартный формат передачи данных для мыши PS/2-типа, разработанный фирмой IBM, показан в табл. 5.6.

Обозначения в таблице расшифровываются следующим образом:

•    Х0-Х7 — перемещение по оси X;

•    Y0-Y7 — перемещение по оси Y;

•    XV — признак возникновения переполнения по X (1 — переполнение);

•    YV — признак возникновения переполнения по Y (1 — переполнение);

•    XS — знак перемещения по X;

•    YS — знак перемещения по Y;

•    М — состояние средней кнопки (0 — отпущена, 1 — нажата);

•    R — состояние правой кнопки (0 — отпущена, 1 — нажата);

•    L — состояние левой кнопки (0 — отпущена, 1 — нажата).

Особенность данного формата заключается в том, что координаты X и Y являются двоичными 9-разрядными числами (старший разряд — знаковый). Ось Y мыши в данном формате направлена вверх, то есть противоположно оси Y дисплея. Преимуществом формата PS2 является простота, а недостатком — отсутствие самосинхронизации

(первый байт кода не обладает отличительными признаками, позволяющими обнаружить сбой в порядке принимаемых данных, поэтому контроль приходится осуществлять другими способами).

Таблица 5.6. Стандартный формат PS/2 Mouse

Номер байта

 

 

 

Номер бита

 

 

 

в посылке

 

 

 

 

 

 

 

 

 

7

6

5

4

3

2

1

0

1

YV

XV

YS

XS

1

М’

R

L

2

Х7

X6

X5

Х4

ХЗ

Х2

Х1

ХО

3

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

1 У стандартных двухкнопочных манипуляторов этот бит всегда равен нулю.

В течение длительного времени область применения устройств PS/2- типа была ограниченной, однако с внедрением стандарта АТХ началось их интенсивное распространение и развитие. В частности, появились новые, четырехбайтные протоколы передачи данных для трехкоординатных устройств, показанные в табл. 5.7 и 5.8. При включении питания такие устройства начинают работать в стандартном режиме PS/2 со стандартным трехбайтным протоколом, а переключение в режим 3D с четырехбайтным протоколом происходит по специальной команде от драйвера мыши.

Формат 3D PS/2 Mouse предусматривает передачу координаты Z в четвертом байте пакета — в виде восьмиразрядного двоичного числа (старший разряд числа содержит знак). Формат пятикнопочной мыши Wheel Mouse отличается от предыдущего тем, что для передачи перемещения по Z применяются только четыре разряда, а еще два кодируют состояние специальных кнопок В4 и В5.

Таблица 5.7. Формат 3D PS/2 Mouse

Номер байта в посылке

 

 

 

Номер бита

 

 

 

 

7

6

5

4

3

2

1

0

1

0

0

YS

XS

1

М

R

L

2

Х7

Х6

Х5

Х4

ХЗ

Х2

Х1

ХО

3

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

4

Z7

Z6

Z5

Z4

Z3

Z2

Z1

Z0

Таблица 5.8. Формат данных 5-кнопочной мыши Wheel Mouse

Номер байта в посылке

 

 

 

Номер бита

 

 

 

 

7

6

5

4

3

2

1

0

1

0

0

YS

XS

1

М

R

L

2

Х7

Х6

Х5

Х4

хз

Х2

Х1

ХО

3

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

4

0

0

В5

В4

Z3

Z2

Z1

Z0

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии