Topic JOYST from HARDW FAQ base


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


SU.HARDW.OTHER (2:5020/299) ———————————————————————————————— SU.HARDW.OTHER From : Gleb Gadiacki 2:5012/1.125 Tue 03 Dec 96 01:26 Subj : Джойстик ———————————————————————————————————————————————————————————————————————————————— Здравствуй Slava! GG>> Какого ? а контактах или на резисторах (у которого чем сильнее ручку GG>> жмешь, тем быстрее герой бегает) SS> Хотелось бы и того и дpугого ! Кидаю очень хорошую статью по SUBJ. ---------------------------------------------------------------- JoyStick IBM PC --------------- Во 2 номере "Компьютер" за 1990 год я прочитал статью "Палка, приносящая радость" Анджея Поплавского о JoyStickе. Автор в статье только упомянул о возможности использования его на IBM PC, и подробно описал подключение его к 8-разрядным домашним компьютерам. Это и натолкнуло меня на мысль попробовать здесь свои силы. JoyStick привлек меня тем, что, во-первых, он очень прост и понятен в обращении (особенно для новичков в компьютерном деле: куда надо, туда и гни "палку"), во-вторых, это новое устройство, не требующее доработки машины и не мешающееся уже имеющемуся. Принцип указания направления наталкивает на мысль о разделении функций с традиционной "МЫШЬЮ" ("МЫШЬ" - указывает и выбирает, JoyStick - направляет и перемещает). Первое, с чем я столкнулся - это скудность и размазанность информации о GAME-адаптере и о JoyStick-ах. Поэтому, в этой статье я попытался собрать всю имеющуюся у мня информацию воедино для получения полной картины дел в этой области. Где это было возможно, я постарался указать точные источники информации. В электронном справочнике "Драйвер Help фирмы Flambeaux Software Версия 1.2" я почерпнул описание портов JoyStick. Описание это было достаточно туманно и не демонстрировало простоты в общении с данным устройством. ——————————————————————————————————————————————————————————————————————————— Port 201H is designated as the Game Adapter Port or Joystick Port. It is not supported by the юPC/XTю ROM-BIOS, but the ЭATЮ BIOS service INT 15H SubFn 84H provides an easy-to-use interface for the adapter. It is an analog-to-digital converter which can be used by scientific measuring tools and other devices which present an analog (resistive) input to the interface. It accepts up to four digital inputs (on/off data such as the press of a button) and up to four resistive inputs (such as an X-ordinate of a Joystick or a temperature value from an electronic thermometer). The value obtained by an IN from 201H is as diagrammed: Ц—7В—6В—5В—4Т—3В—2В—1В—0· єB2іB1іA2іA1єByіBxіAyіAxє У——Б——Б——Б——Р——Б——Б——Б——Ѕ ИННННЛННННј ИНННННННННКН> Coordinates (resistive, time-dependent inputs) ИНННННННННННННННННН> Buttons/Triggers (digital inputs) You can read the buttons (digital inputs) with: mov dx,201H out dx,al ;initiate transaction; AL=anything in al,dx ;read bits 4-7 for buttons: 0=pressed, 1=open The joysticks, paddles, measuring devices (resistive inputs) are read by tracking the time that an X or Y bit stays high (1) after an OUT 201,xxx. To read an individual resistive input (eg, joystick A, X ordinate): mov dx,201H out dx,al ;initiate transaction AL=anything mov cx,-1 ;set resistance counter for first loop gain: in al,dx ;read the settings inc cx ;bump counter test al,1 ;has X-ordinate for joystick A gone low? jnz again ;loop until it does (when bit=0, we're done) The delay value accumulated in CX will indicate the X-ordinate position of joystick A. The resulting value is CPU-dependent. To ensure accuracy, it would be better to use a hardware timer, rather than a loop counter. ——————————————————————————————————————————————————————————————————————————— Далее, в интерфейсе AT INT 15 нашлась функция обслуживания JoyStick, которая была достаточна ясна и удобна. ЯЯЯ ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ 84H Обеспечение джойстика. Вход: DX = код подфункции: DX = 0: читать текущие переключатели Возврат: AL = значения переключателей (биты 7-4) DX = 1: читать входы X,Y джойстика Возврат: AX = джойстик 'A', значение X (горизонталь) AX = джойстик 'A', значение Y (вертикаль) AX = джойстик 'B', значение X (горизонталь) AX = джойстик 'B', значение Y (вертикаль) ЯЯЯ ЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ Обладая такой информацией я понял, что с JoyStick будет достаточно просто программировать и удобно использовать. Осталось за малым; купить JoyStick и подключить к машине. Здесь я встал перед удивительным фактом, что JoyStick-ов в магазинах хватает, и что цены на них достаточно приемлимые, но спрос совсем невелик. Хотя и информации практически небыло, но здравый смысл (как, впрочем, и различия в разъемах) подсказывали, что эти JoyStick-и вероятно просто так подключаться к IBM PC не захотят. ачались поиски дополнительной информации о физическом принципе и строении JoyStick-ов и GAME-адаптера. Эту информацию я наконец нашел в технической доккументации по IBM XT. ИГРОВОЙ АДАПТЕР Игровой адаптер допускает подключение к системе до 4-х ручек управления или 2-х JOY STICKов. Эта карта устанавливается в одну из панелей расшире- ния системной платы или платы расширения. Интерфейсный кабель игрового адаптера присоединяется в задней части адаптера. Кроме того, обеспечивается 4 входа для подключения переключателей. Положение ручки или джойстика определяется изменением величины сопротивления, передающегося на адаптер. Адаптер вместе с системным программным обеспечением преобразует имеющуюся величину сопротивления в относительное положение ручки или джойстика. При получении выходного сигнала, начинают работать 4-е временные схемы. Положение сопротивлений может быть определено путем измерения величины тайм-аута схемы (которая является функцией сопротивления). Этот адаптер может быть использован как схема ввода/вывода общего назначения с четырьмя аналоговыми(резистивными) входами и четырьмя цифровыми входными сигналами. БЛОК СХЕМА ИГРОВОГО АДАПТЕРА Ъ———————ї Ъ——————————ї A9-A0 і і—————————————————>і і ННН10ННН>і і іПреобразо-і AEN іДекодері і ватели і ————————>і команді ісопротив- і Резистивные входы IOW і і іления в і<НННН4НННН ————————>і і іцифровой і IOR і і ЙННННННННіимпульс і ————————>і і———ї є і і А———————Щ і є А——————————Щ і є Ъ———————ї і є і Буфер і<——Щ є Типовая частота - 833 Гц D7-D0 і шины і є <ННННННННі данныхі є і і<НННН4НННј і і Цифровые входы і і<НННН4НННННННННННННННННННННННННННННННННН А———————Щ ФУКЦИОАЛЬОЕ ОПИСАИЕ Декодер адреса Выбор игрового адаптера генерируется 2-мя 74LS138, как декодерами адреса. Для генерации выбора должен быть установлен 16-й адрес 201 и AEN должен быть не активный. Выбор позволяет записать для пуска одновибраторов или прочитать для получения значений выходов одновибраторов и выходов триггерных кнопок. Буферный усилитель шины данных Шина данных буферизуется буфером-усилителем 74LS244. При вводе из 16-го адреса 201, игровой адаптер будет управлять шиной данных; в любое другое время буфер остается в 3-ем состоянии. Триггерные кнопки Входы тригерных кнопок читаются командой IN по 16-му адресу 201. а каждом джойстике или ручке имеется триггерная кнопка. Эти значения присутствуют на шине данных в разрядах с 7 по 4. В отпущенном состоянии кнопки читаются как 1. Если кнопка нажата, то это воспринимается как 0. Програмное обеспечение должно учитывать,что в кнопках отсутствует аппаратное устранение дребезга. Положения джойстика Положение джойстика указывается потенциометром по каждой координате. Каждый потенциометр изменяется в пределах от 0 до 100 кОм, что изменяет постоянные времени каждого из 4-х одновибраторов. При установке различных величин этих постоянных времени будет меняться длительность выходного импульса каждого одновибратора. Все 4-е одновибратора запускаются одновременно командой OUT по 16-му адресу 201. После импульса запуска выходы всех одновибраторов устанавливаются в 1 и остаются в этом состоянии разное время, в зависимости от того, в какое положение установлен каждый потенциометр. Эти 4-е выхода одновибраторов читаются командой IN из 16-го адреса 201 и присутствуют в разрядах с 3 по 0 на шине данных. Описание канала ввода/вывода А9-А0 Линии адреса 9-0;используются для адресации игрового адаптера D7-D0 Линии данных 7-0;образуют шину данных IOR,IOW чтение ввода/вывода и запись ввода/вывода;используются при чтении и записи в адаптер по командам IN,OUT. AEN если этот сигнал в активном состоянии ,то адаптер и драйверы шины данных должны быть не активными. +5vdc питание игрового адаптера GND общий вывод ОПИСАИЕ ИТЕРФЕЙСА Игровой адаптер имеет 8 входных линий, 4-е из которых являются цифровыми входами, а 4-е входами сопротивления. Эти входы могут быть прочитанны командой IN по адресу 201. Каждый иэ 4-х цифровых входов имеет резистор на +5В величиной 1кОм. Если на эти входы ничего не подается, то на них присутствует 1. Для того чтобы прочитать 0, эти входы должны быть зашунтированны на общий вывод. Четыре входа подключаются через переменые резисторы на +5 В и будут преобразованы в длительность пропорционально величине резисров, в соответствии со следующим соотношением: Т=24.2 мкСек + 0.011(R) мкСек Пользователь должен сначала начать диалог, выдавая команду OUT по адресу 201. Команда IN по адресу 201 позволяет проследить, что выходы одновибраторов перешли в состояние 1 и остаются в этом состоянии в течении времени, соответствующего величине сопротивлений. азначение всех 4-х битов (0-3) одинаково, они всегда одновременно переходят в 1 и сбрасываются независимо друг от друга, в соответствии с величиной сопротивления на входе. Ъ—————В——————В——————В——————В——————В——————В——————В—————ї іБит7 і Бит6 і Бит5 і Бит4 і Бит3 і Бит2 і Бит1 і Бит0і Г—————Б——————Б——————Б——————Е——————Б——————Б——————Б—————ґ і цифровые входы і резисторные входы і Типовым входным устройством для игрового адаптера являются joy stick либо игровые ручки. JOI STICKов обычно 2-а, каждый из них может иметь одну либо 2-е кнопки и два переменных резистора величиной от 0 до 100 кОм. Одно переменное сопротивление будет указывать координату X, а другое координату Y. Они должны присоединяться для получения следующих данных: Ъ———————В——————В———————В———————В————————В———————В———————В———————ї і Бит 7 і Бит 6і Бит 5і Бит 4і Бит 3 і Бит 2 і Бит 1 і Бит 0 і і В-#2 і В-#1 і А-#2 і А-#1 і B-Y і B-X і A-Y і A-X і ікнопка ікнопкаі кнопкаі кнопкаі координікоординікоординікоордині А———————Б——————Б———————Б———————Б————————Б———————Б———————Б———————Щ Игровые ручки бывают в наборе из 2-х (A, B) или 4-х (A, B, C, D) ручек. Каждая из них имеет одну кнопку и одно переменное сопротивление величиной 100 кОм. Они должны присоединяться для получения следующих вводимых данных: Ъ———————В——————В———————В———————В————————В———————В———————В———————ї і Бит 7 і Бит 6і Бит 5і Бит 4і Бит 3 і Бит 2 і Бит 1 і Бит 0 і і D і C і B і A і D і C і B і A і ікнопка ікнопкаі кнопкаі кнопкаі координікоординікоординікоордині А———————Б——————Б———————Б———————Б————————Б———————Б———————Б———————Щ Для присоединения игровых контролеров смотрите схему JOI STICKа. ПРИМЕЧАИЕ: потенциометры для осей X и Y изменяют сопротивление в диапозоне от 0 до 100 кОм. Кнопки нормально разомкнуты, а замыкаются при нажатии. РАСПРЕДЕЛЕИЕ КОТАКТОВ РАЗЪЕМА Ъ—————————————————————————————ї і номера і сигнал і і контактов і і і—————————————Е———————————————і і 1 і +5В і і 2 і кнопка 4 і і 3 і положение 0 і і 4 і общий і і 5 і общий і і 6 і положение 1 і і 7 і кнопка 5 і і 8 і +5В і і 9 і +5В і і 10 і кнопка 6 і і 11 і положение 2 і і 12 і общий і і 13 і положение 3 і і 14 і кнопка 7 і і 15 і +5В і А—————————————————————————————Щ Таким образом я понял, что требуемый мне JoyStick должен быть на резистивной основе, а не на замыкании, как в предлагаемых магазинами. После того, как я почерпнул точную схему разводки GAME-адаптера из "Baby AT I/O CARD GW211 User's manual" (эта карта стояла у меня в машине), я решил все-таки рискнуть и переделать стандартный (магазинный) JoyStick для использования в IBM PC. JoyStick 2 JoyStick 1 Ъ — — — — — — — — — —ї — ї Ъ — — — — — — — — — ї / і +5V і Ъ—В———————————ї і / і Ъ————————————В—ї і і і і / і і X \ і і і \ X і+5V / 1 ш— ———Щ Ъ———————> / і і і / <———————ї А————і—ш 9 2 ш—і—————————ї \ і і і \ Ъ————————— —ш 10 3 ш— ——————Щ З SW1 і і і і і SW4 ¶ А——————і—ш 11 4 ш—і—————————Щ і і і Г————————— —ш 12 5 ш— —————————ї і і \ SW3 ¶ Ъ——————і—ш 13 6 ш—і——————ї З SW2 і і / Y А————————— —ш 14 7 ш— —————————Щ Y \ і \ <—————————Щ і ш 15 8 ш і А—————————> / і і і \ і \ і \ і А — — — — — — — — — Щ \ А — — — — — — — — — —Щ — — Щ 15 Pin Male "D" connector Первое, что необходимо было сделать, это резистивность координат в интервале от 0 до 100 КОм. Так как JoyStick я собирался использовать для указания направлений, то решил обойтись дискретной резистивностью с тремя порогами: 0, 50 и 100, где 0 - соответствует максимальной координате, 50 - среднему положению, а 100 - минимальному. Ъ———————————ї 0 іЫ Ы Ыі 8 - направлений, Y і \ / і --- определяемых 50 і іЫ <-Ы-> Ыі дискретным С і / \ і JoyStick-ом 100 іЫ Ы Ыі А———————————Щ X -> 0 50 100 В тот же день мною был куплен игровой манипулятор "Джойстик" производственного предприятия "Альфа" г. Ростов-на-Дону. В нем, при вскрытии, оказалась классическая схема с замыканием по координатам. Ъ————————————ш X1 Ъ—————————/ ——————ш Y1 і і Г—/ —Щ —Е— Ъ/ ——ш X2 і і А——————В——/ ——————ш Y2 Г—————Б————ш Общий А——/ ——————ш Выстрел После установки четырех по 100 КОм резисторов и превращения двух замыкающих контактов на координатах в размыкающие получилась следующая схема: Ъ—<100 КОм>————————————————————В————ї Г—<100 КОм>—————ї і і і Ъ———————В————————————ї і і і А—————————/ ———Щ і і Г—<100 КОм>——Щ і і і Г—<100 КОм>———————/ —Щ —Е— Ъ/ ——Б———ш X і і і і Ъ——/ ————————Б—ш Y і і і А——————————————————————Б—————Б————————ш +5V Ъ——————————————ш Общий Г——/ ——————————ш Левая кнопка А——/ ——————————ш Правая кнопка Здесь необходимо отметить, что кнопки замыкаются на сигнальную землю, а координаты - на +5 вольт (в исходной схеме они шли в одну точку). Игнорирование этого момента приводит к замыканию (у меня это проявлялось остановкой винчестера при нажатии на любую кнопку JoyStick-а). Второе, что необходимо было решить, это разводка JoyStick-а. Так как, собственный шнур JoyStick-а был короткий, но достаточно качественный и содержал необходимые 6 проводов, то его разумно было оставить, а соединение произвести в два этапа: 2a Ъ—————————ї 1 Ъ—ї <-------< JoyStick 1 і IBM PC і <=========>і і 2b А—————————Щ А—Щ <-------< JoyStick 2 Game port Кабель от JoyStick-а остается со своим разъемом, а кабель от машины оканчивается двумя гнездами, что позволяет, во-первых, подключать сразу два JoyStick-а, а во-вторых, свободно их переключать. Тестировать JoyStick оказалось очень удобно программой CheckыIt. ЙН CheckыIt 3.0 ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» є Ъ——————————————————————————————————————————————————————————————————————ї є є і SysInfo _Tests_ Benchmarks Tools Setup Exit і є є А————————————————Ъ—————————————————ї———————————————————————————————————Щ є є і Test Everything і є є і Memory і є є і Hard Disk і є є і Floppy Disk і є є і System Board і є є і Real-Time Clock і є є і Serial Ports і є є і Parallel Ports і є є і Printers і є є і Video Ъ——————————ї є є і_Input Devices_і Keyboard і є є і Select Batch..і Mouse і є є А———————————————і_Joystick_і є є А——————————Щ є є є є —————————————————————————————————————————————————————————————————————————— є є Tests up to two joysticks connected to the game port. є є є є —————————————————————————————————————————————————————————————————————————— є є Use Arrows to Point ю Return to Select ю F1 - Help ю ESC - Cancel є ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј ЙН Joystick Test НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН» є є є ЙН Joystick #1 ННННННННННННННННННН» ЙН Joystick #2 ННННННННННННННННННН» є є є X Y є є X Y є є є є Min Value 9 9 є є Min Value є є є є Cur Value 657 666 є є Cur Value *NO JOYSTICK* є є є є Max Value 1319 1319 є є Max Value є є є є є є є є є є Ъ—ї є є Ъ—ї є є є є іЫі є є і і є є є є А—Щ є є А—Щ є є є є Center є є Center є є є є є є є є є є SWITCH A SWITCH B є є SWITCH C SWITCH D є є є є Released Released є є Released Released є є є є є є є є є ИНННННННННННННННННННННННННННННННННј ИНННННННННННННННННННННННННННННННННј є є є є —————————————————————————————————————————————————————————————————————————— є є At the end of the test, each joystick cursor should be in the center box. є є є є —————————————————————————————————————————————————————————————————————————— є є Press each joystick switch and move each joystick as far as it will go to є є the top, bottom, left, and right. Press any key to end the test. є ИННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННј При входе в этот тест CheckыIt сбрасывает Game-адаптер, поэтому первые движения курсора JoyStick-а будут случайными и неуправляемыми, но через пару секунд все должно придти в норму. И вот, наконец мой JoyStick был собран. Первое впечатление от использования JoyStick-а я получил запустив игрушку "PRINCE OF PERSIA" в режиме управления JoyStick-ом (Ctrl+J). Мне очень понравилось. аступил момент организации взаимодействия с моим новым устройством из программ. Функции получения информации о состоянии клавиш и координатах JoyStick-ов были описаны и тривиальны, но они работали только в том случае, если подключен хотя бы один JoyStick и, вообще, имеется Game-адаптер. В результате я написал следующую процедуру проверки наличия Game-адаптера и подключенных JoyStick-ов: . . . ; --- Инициализация JoiStick --- ; --- Тестируем GAME адаптер mov dx,201h ; Game port out dx,al ; Сбросили данные в Game mov bx,3 ; 3 Глобальных цикла mov cx,-1 ask_joistick: in al,dx ; Читаем данные Game mov bx,bx loop ask_joistick cmp al,0fch ; Проверка установленных данных jz Yes_Game mov cx,-1 dec bx jnz ask_Joistick jmp ет_Game ; По всей видимости Game Adapter отсутствует ; --- Читаем клавиши JoiStik-ов Yes_Game: mov ah,84h ! mov dx,0 ! int 15h ; Запрос состояния клавиш JoyStick-ов test al,0f0h ! jz ет_Game ; еправдоподобное состояние ; означает отсутствие Game-адаптера ; --- Читаем координаты JoiStik mov ah,84h ! mov dx,1 ! int 15h cmp ax,40h ! jb ет_Joi1 ! cmp ax,70h ! ja ет_Joi1 cmp bx,40h ! jb ет_Joi1 ! cmp bx,70h ! ja ет_Joi1 or @Joi1,84h ; JoyStick 1 - активен ! mov @Joi1_time,10 ет_Joi1: cmp cx,40h ! jb ет_Joi2 ! cmp cx,70h ! ja ет_Joi2 cmp dx,40h ! jb ет_Joi2 ! cmp dx,70h ! ja ет_Joi2 or @Joi2,84h ; JoyStick 2 - активен ! mov @Joi2_time,10 ет_Joi2: ет_Game: ; --- Конец инициализации --- . . . Получилась следующая карта координат JoyStick-а. (X,Y) (88,9) Ъ———————————ї (9,9)іЫ Ы Ыі(175,9) і \ / і (9,88)іЫ (88,88) Ыі(175,88) і / \ і (9,175)іЫ Ы Ыі(175,175) А———————————Щ (88,175) Таким образом, я получил новое устройство взаимодействия с программами и их новое качество. адеюсь, что мой опыт пригодится кому-нибудь и устранит одно из "белых пятен" в организации IBM PC и внесет некоторое оживление в будущее пользовательских интерфейсов. Желаю успехов ! 30.10.92 Донченко Валерий. (C) DVA-System, 1992 ---------------------------------------------------------------- Bye, Gleb. --- GoldEd2.42.G0214+ * Origin: -= Goh =- (2:5012/1.125)

Return to the main HARDW FAQ page