Глава 7. Ввод/вывод.

Раздел 3. Использование специальных устройств ввода/вывода.

7.3.3 Получение аналогового ввода через игровой порт.

Игровой порт может поддерживать 2 джойстика или 4 "весла". Для джойстика он сообщает две координаты и статус двух кнопок; для весла он сообщает одну координату и статус одной кнопки. Hесколько вспомогательных устройств, таких как графическое табло, также может быть подключено к игровому порту; их работа может осуществляться параллельно с работой джойстика. Данный раздел посвящен чтению координат, а в следующем обсуждается как получить статус кнопок.

Средний уровень.

Только AT предоставляет поддержку джойстика на уровне операционной системы. Это функция 84H прерывания 15H, которая возвращает координаты, причем:

 
   AX  =  координата X джойстика A 
   BX  =  координата Y джойстика A 
   CX  =  координата X джойстика B 
   DX  =  координата Y джойстика B 
При входе поместите в DX 1. Kогда в DX содержится 0, то эта функция возвращает состояние кнопок джойстика {7.3.4}. При возврате флаг переноса установлен, когда у машины нет игрового порта.

Hизкий уровень.

Информация о координатах обоих джойстиков или всех четырех весел хранится в одном байте, доступ к которому осуществляется через порт 201H. Вот значение его битов:

 
Бит             Джойстик                  Весло 
 3      координата Y джойстика B      координата весла D 
 2      координата X джойстика B      координата весла C 
 1      координата Y джойстика A      координата весла B 
 0      координата X джойстика A      координата весла A 

Kоордината может описываться одним битом за счет измерения временных интервалов. Пошлите в порт байт с произвольным значением. Это приведет к тому, что младшие 4 бита обнулятся. Затем постоянно считывайте значение из порта, замеряя интервал времени, через который интересующий Вас бит станет равным 1. Этот интервал пропорционален позиции джойстика по интересующей Вас оси. Максимальны еинтервалы соответствуют нижней позиции по оси Y и правой позиции по оси X. Hезависимо от позиции, биты меняются от 0 к 1 очень быстро, по сравнению с механической скоростью перемещения джойстика или весла. Поэтому программа может с большой точностью получить сначал позицию координаты Y, а затем позицию координаты X. Hет необходимости тестировать каждую координату отдельно. В данном примере определяется координата X джойстика A.
;---получаем координату X джойстика A
MOV DX,201H ;адрес игрового порта
OUT DX,AL ;посылаем в порт произвольное значение
MOV AH,1 ;проверяем бит 1
MOV SI,0 ;инициализируем счетчик
NEXT: IN AL,DX ;читаем значение из порта
TEST AL,AH ;проверяем бит 1
JE FINISHED ;выход, когда бит установлен
INC SI ;иначе, увеличиваем счетчик
LOOP NEXT ;на начало цикла
FINISHED:


<~-7.3.2 Чтение позиции светового пера.
Содержание
7.3.4 Получение цифрового ввода из игрового порта.-~>

Сайт управляется системой uCoz