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

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

7.3.4 Получение цифрового ввода из игрового порта.

Игровой порт поддерживает два джойстика или четыре "весла", а также ряд графических устройств. При этом может определяться статус до четырех кнопок устройств. Проверка состояния кнопок может быть сложным делом, поскольку программа может не иметь возможности постоянно проверять их, а кнопка может быть нажата и отпущена, пока программа занята другими делами. Может быть создана специальная процедура для решения этой проблемы. Статус кнопок автоматически читается несколько раз в секунду, без специального запроса на это программы; когда оказывается, что кнопка нажата, то управдение передается процедуре, которая определяет какая кнопка нажата и предпринимает нужные действия.

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

Только AT предоставляет поддержку джойстика на уровне операционной системы. Функция 84H прерывания 15H возвращает установку кнопок в битах 4-7 регистра AL, как показано ниже. При входе DX должен содержать 0; когда DX содержит 1, то вместо этого возвращаются координаты джойстика {7.3.3}. При возврате регистр переноса устанавливается, когда машина не имеет игрового порта.
;---проверяем кнопку #2 джойстика B (бит 7)
MOV AH,84H ;номер функции
MOV DX,0 ;запрос состояния кнопок
INT 15H ;вызов функции
JC NO_JOYSTICK ;если нет джойстика, то на выход
TEST AL,10000000B ;проверяем бит 7
JNZ BUTTON_DOWN ;переход если кнопка нажата

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

Биты 7-4 порта с адресом 201H содержат статус кнопок, связанных с игровым портом. Значение битов меняется в зависимости от того, присоединены ли джойстики или весла:

 
Бит          Джойстик                Весло 
 7    Kнопка #2 джойстика B     Kнопка весла D 
 6    Kнопка #1 джойстика B     Kнопка весла C 
 5    Kнопка #2 джойстика A     Kнопка весла B 
 4    Kнопка #1 джойстика A     Kнопка весла A 
Программе нужно просто прочитать значение из порта и проверить установку соответствующих битов:
 
   MOV  DX,201H         ;адрес порта игрового адаптера 
   IN   AL,DX           ;получаем значение из него 
   TEST AL,0010B        ;проверяем бит 1 (кнопка A2 нажата?) 
   JNZ  BUTTON_A2       ;если да, то на процедуру обработки 
Программа имеет обычно более важные дела, чем постоянно проверять игровой порт, однако настолько же быссмысленно время от времени проверять порт, рассовывая процедуру по разным частям программы. Чтобы получить эффект отлова нажатия кнопок, аналогичный описанному в Бейсике, Вам придется создать дополнение к прерыванию времени суток, как описано в {2.1.7}. Прерывание обычно выполняется 18.2 раза в секунду и каждый раз Вы можете проверять игровой порт и предпринимать нужные действия при необходимости.

<~-7.3.3 Получение аналогового ввода через игровой порт.
Содержание
Приложения.-~>

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