Интерфейс игровых устройств — Game-порт

Игровые устройства — джойстик, руль и педали автомобиля или иные — вырабатывают некоторые аналоговые и дискретные сигналы, которые можно ввести в компьютер. С самых первых моделей IBM PC был введен и фактически стандартизован интерфейс игрового адаптера — Game port , к которому можно подключить до двух джойстиков или иных устройств. Суммарно на порте доступно 4 координатных датчика (X1, X2, Y1 и Y2), изменяющих сопротивление, и 4 дискретных входа для кнопок управления. Назначение координатных датчиков зависит от игры и конструкции манипулятора. Для авиасимуляторов X1 может соответствовать перемещению рукоятки вверх-вниз, Y1 — влево-вправо, X2 — нажатие левой и правой педалей, Y2 — рукоятка сектора газа. Для автомобильных рулей X1 — руль, Y1 — газ, X2 — тормоз (газ и тормоз могут быть совмещены в координате Y1). Кроме игровых целей порт может применяться и для подключения «серьезных» датчиков.

Современные игровые устройства имеют свой интеллект (микроконтроллер) и подключаются к компьютеру цифровым интерфейсом — по шине USB или через СОМ-порт. Их функциональные возможности богаче, они позволяют устанавливать и двустороннюю связь с игроком (вводить механические воздействия).

Адаптер Game-порта имеет в пространстве ввода-вывода один регистр с адресом 201h, биты которого при чтении отображают состояние кнопок и компараторов аналоговых сигналов. Ввод дискретных сигналов от кнопок пояснений не требует. Упрощенная схема одного канала аналогового ввода приведена на рис. 8.19. В начале преобразования конденсатор разряжается через ключ, после чего начинается его заряд, скорость которого определяется величиной сопротивления датчика (чем больше сопротивление, тем медленнее заряд). Напряжение на конденсаторе контролируется компаратором, который срабатывает по достижении определенного уровня. Выходы компараторов всех четырех каналов преобразования, как и дискретные входы, собираются в регистр (см. ниже), который может быть программно считан. Преобразование выполняется чисто программно и начинается по выводу любого байта в регистр адаптера (201h), при этом биты 0–3 устанавливаются в единицу. Далее программа циклически выполняет чтение регистра адаптера и измеряет время до возврата в нулевое состояние бит 0–3, соответствующих четырем аналоговым каналам. Если аналоговый вход закорочен на шину GND или цепь измеряемого сопротивления разорвана, соответствующий бит не обнулится. Поэтому в программе преобразования должен быть предусмотрен тайм-аут. Для измеряемых сопротивлений в диапазоне 0-100 кОм время определяется по формуле

T(мкс)=24,2+11×R(кОм).

Точность и линейность преобразования невысока, преобразование выполняется не быстро (до 1,12 мс) и сильно загружает процессор. Однако в отличие от «настоящих» аналого-цифровых преобразователей, этот достается даром — игровой адаптер входит в состав практически всех комбинированных плат последовательных и параллельных портов и звуковых карт.

Рис. 8.19. Канал аналогового ввода

Порт имеет разъем-розетку DB-15S . Назначение выводов и соответствие сигналов битам регистра приведено в табл. 8.20. Резисторы подключаются к шине питания +5 В, кнопки — к шине GND (рис. 8.20). Замыканию кнопок соответствуют нули в битах 5–7. Аналоговые каналы можно использовать для дискретного ввода, если их входы подключить к кнопкам, замыкающим их на шину GND, и к резисторам, «подтягивающим» их к уровню + 5 В. Два джойстика (А и В) подключаются через Y-образный переходник-разветвитель. На звуковых картах через разъем «Game» вместе с джойстиками могут подключаться и внешние MIDI-устройства, используя специальный кабель-адаптер, обеспечивающий гальваническую развязку входного сигнала и ограничение выходного тока (см. рис. 8.18). Для интерфейса MIDI используются контакты 12 и 15, ранее предназначавшиеся для шин GND и +5V. Такое назначение делает безопасным подключение адаптера MIDI к «чистому» игровому порту и обычного джойстика к игровому порту с сигналами MIDI.

Таблица 8.20 . Интерфейс игрового адаптера и MIDI

Бит Назначение Контакт
Джойстик В кнопка #2
Джойстик В кнопка #1
Джойстик А кнопка #2
Джойстик А кнопка #1
Джойстик В Y-координата (Y2)
Джойстик В X-координата (X2)
Джойстик А Y-координата (Y1)
Джойстик А X-координата (X1)
- GND 4, 5, (12)
- +5 В 1, 8, 9, (15)
- MIDI In (Rx) — вход (на звуковой карте)
- MIDI Out (Tx) — выход (на звуковой карте)


Рис. 8.20 . Подключение датчиков к игровому адаптеру

Системную поддержку джойстика обеспечивает сервис BIOS Int 15h при AH=84h. При вызове в DX задается код подфункции:

♦ DX=0 — опрос кнопок, возвращает в AL[7:4] состояние кнопок (соответствует битам порта 201h);

♦ DX=1 — чтение координат X, Y джойстика А (в регистры АХ, BX) и В (в СХ, DX).

При ошибочном задании кода в DX устанавливается CF=1. Стандартный джойстик поддерживается и ОС Windows.

Глава 9

Наши рекомендации