Четверг, 24.08.2017, 00:19
Главная | Каталог игр | Эмулятор Sega | Статьи | Форум | Гостевая
 
Здравствуй, Гость
Sega Games - Лучшие игры для Sega MegaDrive (Genesis)




Главная » Статьи » Технические
 Принципы работы джойстика Sega MegaDrive

…Началось все с того, что я очень захотел подключить полюбившийся с детства сеговский джойстик к компьютеру. Перекопав весь интернет, я обнаружил множество схем переходников для подключения сеговского джойстика к параллельному порту компьютера, но ни одного описания принципов работы этих переходников. Вся информация в статьях по подключению сеговского джойстика к компьютеру сводилась, в основном, к обучению считать ножки у разъемов, определять полярность диодов и, в самой популярной статье, - пить пиво. Я бы с этим смирился, если хотя бы одна из предложенных схем нормально работала. Но у всех схем был один и тот же недостаток, – так называемые «произвольные нажатия» кнопок Икс, Игрек, Зет и Мод. Тогда я был уверен, что это проблема схемы переходника. В журнале Радио (2003г.№12) С.Рюмиком была предложена новая схема на двух транзисторах, восьми диодах и трех резисторах. Однако на практике я не заметил ни одного преимущества этой схемы перед схемой «linux» из пакета PPJoy, которая не содержала каких-либо радиодеталей вообще, ну, разве что, разъемы, чтобы наспех всунутые в порт и джойстик провода не выскакивали во время игры.

В сети ходили слухи, что под 98-й виндой, джойстик работает нормально, однако, даже если это было правдой, – мне не хотелось возвращаться с XP на 98-ю ради нормальной работы сеговского джойстика. Я почти разуверился найти способ заставить сеговский джой не выдавать ложных нажатий злосчастных кнопок, опросил всех, кого только можно, - у всех такая же проблема: джойстик «нормально» работает, только время от времени, при удержании стрелок направления, срабатывают кнопки X,Y,Z или Mode. Собравшись было прекратить поиск, я случайно натолкнулся на датированную сентябрем 1996 года статью Чарльза Розенберга (Charles Rosenberg, http://www.cs.cmu.edu/~chuck/infopg/segasix.txt), в которой очень подробно описывались принципы работы сеговских джойстиков - Мегадрайв с тремя кнопками, и Мегадрайв-2 - с шестью. Прочитав данную статью я догадался в чем может крыться суть проблемы «произвольных нажатий», написал свой драйвер XYZModeB, работающий с джойстиком через переходник по схеме сега-линукс и устраняющий «произвольные нажатия». Однако статья эта написана по-английски, поэтому я решил изложить ее смысл по-русски для тех, кто возможно хотел бы узнать о принципе работы сеговского джойстика, но не знает английский настолько хорошо, чтобы понять оригинал статьи. Так же мною добавлены рисунки и схемы для наглядности (в оригинале все было только в текстовом виде). И еще: простите меня за возможные недочеты, так как по образованию я не являюсь ни радиотехником, ни переводчиком. Хотя я очень надеюсь, что все ошибки замечу сам.

Итак, ближе к делу! Начнем с описания принципа работы оригинального 3-х кнопочного джойстика Сега Мегадрайв (4стрелки+3кнопки+Старт=8сигналов). Микросхема 74HC157 на плате джойстика - это КМОП мультиплексор (смеситель) двух линий в одну, далее – просто чип. Чип нужен для передачи состояния сразу двух кнопок по одному проводу с целью уменьшения количества проводов. Принцип его работы такой: имеются по паре входов (A и B) на каждый выход (Y). Сигнал select управляет микросхемой. Когда на select подается сигнал низкого уровня (логический 0), то на выходе Y - то же, что и на входе A. Когда же на select попадает сигнал высокого уровня (логический 1) - на выходе Y то же, что на входе B.

Таким образом, теоретически чип позволяет посылать 8 сигналов по 4 линиям. Однако в 3-х кнопочном сеговском джойстике использовалось 6 линий для передачи 8 сигналов. Это не было особо экономичным решением, зато обеспечивало обратную совместимость с джойстиками Atari 2600. Сигналы нажатий стрелок Вверх(Up) и Вниз(Down) подаются напрямую вне зависимости от состояния управляющей линии select. Другие же сигналы подаются на выходы в зависимости от состояния линии select:

Уточню, что Select=0 следует понимать как низкий уровень сигнала на линии select, а Select=1 – как высокий уровень сигнала. Сигналом низкого уровня или логическим нолем принято считать напряжение в ноль вольт или близкое к нему, а высоким или логической единицей – в данном интерфейсе – напряжение близкое к пяти вольтам. Во время игры на приставке процессор изменяет уровень сигнала на линии select в зависимости от того, состояние каких кнопок необходимо получить. Если кнопка нажата, - она замыкает сигнал соответствующей линии на землю(GND) и сигнал на выходе будет низкого уровня (0), если кнопку отпустить – на соответствующем выходе получим высокий уровень сигнала (1). Не перепутайте, когда будете писать собственный драйвер ;) .

На данной схеме вы можете видеть как изменяется уровень сигнала на линии select в процессе опроса джойстика. Схема не совсем правильно отражает соотношение времени высокого и низкого уровня сигнала select, поэтому я подписал примерное время для частоты опросов равной 60 герц. В принципе Частота сигнала может быть и больше и меньше, а сигнал сам по себе может быть асинхронным, в разумных пределах. Предельные значения зависят от чипа конкретного джойстика и могут быть определены опытным путем.

Теперь, я попрошу вас перевести дыхание, подытожив прочитанное, так как все вышеизложенное было лишь преамбулой к 6-ти кнопочному джойстику. Если вы чего-либо недопоняли из предыдущего описания, то перечитайте его еще раз, иначе вы рискуете не понять продолжение темы.

Итак, приступим к рассмотрению принципа работы 6-ти кнопочного джойстика Сега Мегадрайв (4стрелки+6кнопок+Старт+Мод=12). В этом джойстике на плате вместо серийной микросхемы мы видим специальный чип. Что он из себя представляет по сути, - мы можем только догадываться. Поэтому единственный вариант – используя осциллограф, посмотреть, что будет происходить с сигналами во время игры, использующей три новых кнопки. MK3 как раз подойдет :)!

Все же не совсем понятно, зачем изготовители решили заменить старый добрый мультиплексор на чип изготовленный по спецзаказу. Неужели у них были излишки времени и денег? Что же, и это – вполне возможно, однако причина видимо кроется в другом. Причина – все та же обратная совместимость, только на этот раз – с играми, использующими лишь три кнопки. Вот как изменяется select на 6-ти кнопочнике:

Частота примерно та же, но если на 3-х кнопочнике 60 раз в секунду select изменялся в ноль и обратно один лишь раз, то здесь, мы 60 раз в секунду видим по 4 пульса в ноль и обратно на высокий уровень.

Не стану описывать, каким образом автор оригинальной статьи на английском выяснял назначение каждого из четырех импульсов, скажу лишь о практической реакции джойстика на эти импульсы: на первые два из них 6-ти кнопочный джойстик реагирует также как и в 3-х кнопочном варианте. Однако сразу же после третьего перехода с ноля на высокий уровень, чип выдает данные о состоянии новых кнопок X,Y,Z,Mode на те же линии по которым передаются данные о состоянии стрелок джойстика при Select=1. Мы можем представить себе это как третье состояние линии select и назвать его Pulse-3. Четвертый импульс - просто возвращает джойстик в режим совместимости со старым интерфейсом. Теперь таблица реакции на нажатия кнопок будет выглядеть следующим образом:

Теперь все становится на свои места. Теперь, я надеюсь, вам стало ясно, что из-за малейшего промедления операционной системой подачи третьего импульса Pulse-3, драйвер, не имея возможности проверить сколько времени прошло между посылкой сигнала и реальным получением его портом, считает, что принимает данные о состоянии кнопок X,Y,Z,Mode, когда джойстик, просто не надеясь уже дождаться завершения цикла из 4-х импульсов, вернулся в режим совместимости и подсовывает ничего не подозревающему драйверу данные о состоянии стрелок.

© 2007 barmentalisk

Источник: http://www.bit16.ru/
Категория: Технические | Добавил: nicon (15.02.2009)
Просмотров: 11600 | Комментарии: 3 | Рейтинг: 4.5/2 |

Всего комментариев: 3
1 кт315ж   (08.01.2010 15:28)
Спасибо за статью !!Всегда интересно узнать как и что работает.
Проблему правда я не решил.Джойстик работает только на половину,а иногда в настройках показывает,что нажата кнопка крестовины.
Может Вы что нибудь посоветуете,а то джойстиком от DENDY не очень то поиграешь в SEGA игрушки.
Драйвер PPJoy
Система XP

2 ewgeniy1985   (22.02.2012 15:43)
доброго времени. спасибо за статью. не могу разобраться - подключил 2 джойстика к одному порту по схеме (ссылка ниже), в игровых устройствах оба джойстика работают корректно, но стоит только зайти в эмуляторе в мк3 - у первого перестают функционировать zyz, на втором все нормально. в battletoads dd тоже ведет себя странно - left не работает - но срабатывает когда нажимаешь x.
есть соображения, как это вылечить?
ссылка:
http://www.tipon.ru/index.php/computers-a-electronics/modding/800-kak-podkluchit-djoistik-ot-sega-k-komputeru-i-ego-modding

3 Саня   (08.05.2014 21:08)
Приветствую! Может,вопрос дикий,но все же. Нужно из этого девайса,сделать блютуз=) ну ,вы поняли,чтоб к планщету на андроид влез. Как?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]











Друзья сайта

Статистика

Rambler's Top100
Яндекс цитирования

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Все игры, находящиеся на данном сайте защищены законом об авторских правах и предназначены для предварительного ознакомления. После просмотра игры с компьютера должны быть удалены.  
© 2008 - 2017 Кирилл n.i.c.o.n Наговицын Сайт создан в системе uCoz