Как переделать джойстик от денди

Обновлено: 16.05.2024

В статье я не только подскажу как подключить джойстик от денди к компьютеру, но и предложу Вам скачать игры для приставок Dendy, Nintendo, Sega. Так что если Вы и не собираетесь подключать джойстик, Вы можете просто скачать игры и играть на обычной клавиатуре.

Конструкция очень простая. Но, прежде чем проверять сделанный вами интерфейс, убедитесь, что все провода припаяны правильно, и, что никакие оголенные провода не касаются чего-нибудь. Я очень рекомендую использовать корпус для этих интерфейсов, чтобы уменьшить риск короткого замыкания.

Начнем с джойстика для Dendy (NES). Если у вас есть gamepad, и у него есть кнопки A, B, Turbo A, Турбо B, Select и Begin (последних двух может и не быть, настоятельно рекомендую такие не брать) и связывается через 5 проводов, тогда это или NES или аналог NES и будет работать, если Вы все сделаете правильно.

Однако пора приступать к делу. Все, что вам понадобится - это разъем LPT порта (он же параллельный, он же от принтера), паяльник, пять абсолютно любых диодов, ну и, собственно, сам джойстик. Приступим.



Спаивается все по схеме, если хотите подключить два джойстика, то все провода припаиваются также кроме 8 и 7 контакты на NES, их надо припаять к 11 и 12 контакту на LPT.


А если у Вас джойстик с другим разъемом, то смотрите ниже:

Чтобы припаять провода по схеме, надо вскрывать разъем, я же предлагаю сделать все гораздо проще. Можно просто сделать своеобразный удлинитель переходник. Помимо LPT нам понадобится еще и СОМ разъем (папа)


Еще очень важная деталь. На диодах есть маркировка, их следует припаивать полосочкой вверх. Просто припаиваете проводки по схеме к LPT и все.


Получается очень даже. Но дизайн не так важен как работа !



2) Запустить эмулятор приставки и через него открыть игру которая Вас интересует.

Если верить мануалу, то подходит для ОС: Win9x/Me/NT/XP/2k. Разархивируем в любое удобное место и запускаем Setup.exe. На экране появляется такое окошко по которому надо кликнуть:


Процесс установки заключается в нажатии кнопки "Next" и вызвать затруднений не должен, поэтому рассматривать его подробно не вижу смысла.

После установки в меню "Пуск" появится папка "Parallel Port Joystick", а в ней несколько ярлыков. Нас интересует "Configure Joysticks" - его и запускаем. На экране появляется окно утилиты конфигурирования джойстиков. В нем нажимаем кнопку "Add".

Видим окно конфигурирования нового джойстика. В нем выставляем значения, как приведено на рисунке. Не смущайтесь в выборе типа интерфейса, с ОС Линукс в нашем случае это не связано.

Выставив правильно все значения, жмем на кнопку "Add". Попадаем в предыдущее окно. Если у нас джойстик один, можно смело жать кнопку "Done". Если же нам нужно настроить и второй джойстик, то заново жмем "Add", появляется уже знакомый диалог, правда выбор наш уже несколько ограничен, но значения нужно будет выставить так же как и на картинке выше. Исключение лишь в предпоследней строке, т.е. номер контроллера теперь указываем не 1, а 2 или более в зависимости от того какой джойстик по счету мы подключаем.

Что ж, пол дела сделано, осталось проверить работоспособность джойстика.

Заходим в "Панель управления" и запускаем ярлык "Игровые устройства". Выбираем интересующий нас джойстик и жмем по кнопке "Свойства". Появляется окно свойств. Во вкладке "Проверка" мы можем проверить работает ли наш джойстик. В момент, когда джойстик никто не трогает и ни одна из его кнопок не зажата крестик осей будет по центру белой области, а изображения кнопок будут все одинаково темно-красными.


Если мы правильно подключили джойстик и будем нажимать кнопки, то реакция крестика и изображения кнопок будут соответственные. В моем случае я нажал одновременно кнопку-крестик вниз и вправо, а так же кнопку "Start" и кнопку "B". Кстати, при этом еще и на клавиатуре пришлось нажать "Alt"+"Print Screen" для создания скрина экрана. а учитывая позднее время и помочь было попросить некого.


Если у Вас тест проверки пройден с положительным результатом, то поздравляю Вас. Вы смогли сами своими руками подключить и настроить джойстик от приставки "Денди" к компьютеру через LPT порт.

3) Более 1000 игр для этих приставок - наслаждайтесь!

Похожие мастер-классы

Джойстик для компьютера из клавиатуры

Развивающие игры и занятия с ребенком 2-3 лет

SMS-контроллер на базе SIM800L

Про хранение проводов для компьютера

Календарь на 2011 год

Как подключить к пускателю кнопки управления

Особо интересное

Как смазать закрытый подшипник без разборки

3 способа сварки тонкого металла без прожога

Как сделать простой и эффективный глушитель для любого транспортного средства

Как сделать простой и эффективный глушитель для любого

Как сделать простую вентиляцию с рекуперацией в доме или гараже для снижение расходов на отопление

Как сделать простую вентиляцию с рекуперацией в доме или гараже

Простое никелирование деталей в домашних условиях своими руками

Простое никелирование деталей в домашних условиях своими руками

Как переделать асинхронный электродвигатель в мощный электрогенератор

Как переделать асинхронный электродвигатель в мощный

«Сделай сам – своими руками» - сайт интересных самоделок, сделанных из подручных материалов и предметов в домашних условиях. Пошаговые мастер-классы с фото и описанием, технологии, лайфхаки - все, что нужно для рукоделия настоящему мастеру или просто умельцу. Поделки любой сложности, большой выбор направлений и идей для творчества.

Пульт от «Dendy» в любительских конструкциях

image

Часто радиолюбители сталкиваются с проблемой оформления выносного пульта управления устройством. Если число кнопок на нем велико, то для сокращения числа проводов в соединительном кабеле пульт оснащают шифратором команд нажатых кнопок, а устройство дешифратором. В этой ситуации может выручить старый джойстик, от некогда популярных игровых приставок «Dendy». Задача радиолюбителя сильно упрощается, так как джойстик имеет неплохой дизайн и оснащен готовым шифратором команд нажатия кнопок.

Что внутри джойстика?

Примерная схема шифратора, применяемого в джойстиках «Dendy» приведена на рис. 6, в конце статьи. Сведения об интерфейсе между джойстиком и игровой приставкой, вариант схемы джойстика, а также варианты схем дешифраторов можно найти на страницах журнала «Радио». [л] Информация о нажатых кнопках джойстика передается в последовательном формате с использованием тактирующего сигнала «Clock» от управляемого устройства. Для синхронизации с ним джойстик имеет вход «Latch», на который подается короткий импульс с высоким логическим уровнем в начале каждого цикла получения данных от джойстика.

Устройство дешифратора и его работа

image

image

На микросхеме DD2 собран формирователь синхроимпульса «Latch», необходимый для фиксирования состояния кнопок на джойстике и вывода старшего бита данных из джойстика на выход «Data». Происходит это, по положительному фронту импульса. По отрицательному фронту этого импульса, начинается цикл считывания байта данных. Этот момент обозначен как «цикл опроса джойстика» (смотрим рис. 2). Следующие по порядку биты, будут выдаваться на выход «Data» с появлением положительного фронта тактового импульса, на входе «Clock» джойстика. Также, синхроимпульс «Latch» подается на вход RSK регистра сдвига, это необходимо для «защелкивания» принятого байта в выходном регистре и выводе его на выходы Q0 — Q7 в параллельном виде. «Защелкивание» принятого байта происходит по положительному фронту импульса. Этот момент времени обозначен как «цикл обновления информации на выходе регистра 74НС595» (смотрим рис. 2). С приходом каждого синхроимпульса, информация на выходе регистра будет обновлена.

На микросхеме DD1 собран генератор тактовых импульсов. Частота которого равна 100 килогерц. Тактовые импульсы подаются на вход «Clock» джойстика и на вход SCK приемного регистра 74НС595. Данные о состоянии кнопок джойстика выдаются на выход «Data» по порядку, начиная со старшего бита — D7, D6… D0. Происходит это по положительному фронту тактового импульса на входе «Clock» джойстика. Считываемые с выхода «Data» биты, подаются на вход SER регистр 74НС595. Запись принятого бита в регистр происходит также по положительному фронту импульсов этого генератора.

— чувак! У тебя момент обновления бита информации на выходе «Data» совмещен с моментом чтения установленного бита на выходе «Data»!
— да… это точно. Но джойстик довольно «тормозной», и обновление бита, после прихода положительного фронта тактового импульса, происходит спустя 120 nC. Пока джойстик раздумывает, шустрый 74НС595 успевает записать предыдущее значение c выхода «Data», за 20 nC.
— эээ, «Кулибин»! За время действия импульса «Latch» у тебя в выходной регистр 74НС595 пишется мусор — подряд два бита D7!
— да, признаюсь — халтура. Но после окончания цикла записи всего байта, лишние биты «вывалятся» из регистра в никуда, и никак не повлияют на точность принятой информации.
Интерфейс SPI

И еще один момент… Многие, посмотрев на картинку (Рис. 2) увидели схожесть с таймингом коммуникационного интерфейса SPI. Да да да… за некоторыми отличиями, это он и есть! Надо подменить названия сигналов: «Latch» на CS или SS, сигнал «Clock» на CSLK или CLK, сигнал «Data» на MISO, SDO или SO (кому как больше нравится). Джойстик можно опрашивать встроенным в МК периферийным модулем SPI. Для этого надо отсылать на устройство байт, неважно какой, например FF.

Правда если кому-то этот байт может пригодиться, его можно загружать нужной информацией. Например, для регистра со светодиодами. Или же не загружать, а пересылать принятую информацию от джойстика еще кому-то. То есть, пин MOSI можно использовать.

image

Принятый байт будет содержать информацию о нажатых кнопках. Нажатой кнопке будет соответствовать бит равный нулю, а не нажатой единице. Если на джойстике не нажата ни одна кнопка, то будет принят байт FF, если умудрится зажать все кнопки сразу, то принятый байт будет содержать 00. SPI интерфейс необходимо настроить для работы в режиме ведущего (Master), ну это-то и так понятно… а режим синхронизации настроить CPOL=1, CPHA=0 (Mode 2). При таком раскладе, данные с выхода «Data» (MISO для МК) будут считываться микроконтроллером по отрицательному перепаду тактового сигнала CSLK, поданного на вход «Clock» джойстика. А обновление бита информации на выходе «Data» джойстика и на входе MISO микроконтроллера, будет происходить по положительному фронту тактового импульса. Таким же способом джойстик можно подключить к плате «Arduino».

«Turbo A» и «Turbo B»

Ранние модели джойстиков содержали 8 кнопок, более поздние десять. Добавилось две кнопки «Turbo A» и «Turbo B». Но на протоколе обмена данными, это никак не отразилось — он остался прежним. Добавленные турбо кнопки эквивалентны кнопкам «А» и «В» с той лишь разницей, что при нажатии на кнопку «Turbo A» будет нажиматься кнопка «А», только со скоростью 12 с половиной раз в секунду. Это справедливо и для кнопок «Turbo B» и «В». Генератор турбо нажатий добавили в сам джойстик (см. рис.6, выделен красным). При нажатии на турбо кнопки на выходах Q6 и Q7 регистра DD3 будут присутствовать импульсы с периодом 80 мС и скважностью равной двум.

image

Встречаются джойстики с еще большим количеством кнопок, а также и с меньшим. Нажатие дополнительных кнопок на таких джойстиках эквивалентно нажатию сразу двух кнопок на старых моделях. При подключении к дешифратору контрольных светодиодов, разобраться с работой кнопок «супер джойстиков» будет не сложно. (По-моему это были джойстики от «Sega Mega Drive»)

UPD: По поводу SNES.

В комментариях к статье было справедливо замечено:

В тексте речь идёт про генератор турбо нажатий, а к нему идёт картинка с джойстиками, где такого генератора нет. Ниже написано «Нажатие дополнительных кнопок на таких джойстиках эквивалентно нажатию сразу двух кнопок на старых моделях», но это тоже несправедливо по отношению к SNES.

image


Генератора турбо нажатий в джойстиках SNES нет. То есть, никаких импульсов на выходе дешифратора, при подключении такого джойстика вы не увидите. Мало того, протокол SNES не радикально, но отличается от протокола NES. Отличие состоит в том, что он 16-и битный. Информативные биты только – D15 – D4, биты D3 – D0 всегда равны единице. При подключении такого джойстика к предложенному дешифратору вы получите информацию о кнопках: «B», «Y», «Select», «Start», «Up», «Down», «Left» и «Right». Информация о кнопках: «A», «X», «L» и «R», будет утеряна. Разъем SNES показан на рис. 3 крайний справа.

UPD: Благо, которое дарит нам «Turbo»

Наверно кто-то, прочитав про импульсы на выходе дешифратора при нажатии кнопок «Turbo A» и «Turbo B» расстроился:

– Эээ… так кнопки «Turbo» использовать нельзя, как обидно, две кнопки потеряны.
– Нет! Совсем они и не потеряны.

Давайте представим что вам, при управлении каким-либо устройством, необходимо осуществлять приращение какого-либо параметра в сторону увеличения или уменьшения оного. Если при этом требуется высокая дискретность установки величины, то можно устать тискать кнопки «плюс» и «минус», пусть это будут кнопки «А» и «В». Тут-то как раз и пригодятся турбо кнопки. При использовании джойстика совместно с микроконтроллером вы будете избавлены от написания лишнего куска программного кода, потому как вам уже не надо будет втискивать расширенный интерфейсный функционал в две кнопки. Он уже расширен до четырех, и снабжен логикой работы.

Интерфейс SNES, NES

image


Совместно с предлагаемым дешифратором можно применить любой джойстик, который обладает интерфейсом SNES, NES или «Virtual Boy». А также их многочисленными клонами — «Dendy», «Sega» и прочие. Отличия состоят в дизайне и в разъеме подключения джойстика к игровой приставке. Назначение контактов известных мне разъемов показано на рис. 3.

Подключение приборов к дешифратору

Сигналы на выходе дешифратора соответствуют уровням TTL. Нажатой на пульте кнопке соответствует — высокий уровень, низкий — не нажатой. Если подключаемое к дешифратору устройство согласуется по уровням TTL, то дополнительных мер по согласованию не требуется.

image

Если на выходе дешифратора необходимы инверсные состояния сигналов (кнопка нажата — ноль, кнопка не нажата — единица) то, элемент DD1.4 (Рис. 1) необходимо исключить из схемы.
В тех случаях, когда приборами, подключенными к дешифратору, нельзя управлять логическими уровнями или требуется гальваническая развязка по питанию, следует применить реле или оптопару рис. 4 а, б.

Если для управления, чем-либо требуются сигналы управления статического типа (кнопку нажал, чета там включились, нажал еще раз, выключилось), устройство необходимо дополнить триггером. Применив одну микросхему К155ТМ2 (смотрим рис. 4 в), кнопки «Start» и «Select» можно превратить в переключатели. Возможно, тут проявится эффект дребезга контактов (если подавление не реализовано в самом джойстике). В этом случае необходимо уменьшить частоту тактового генератора, например до 100 герц. При этом джойстик будет опрашиваться 10 раз в секунду, и проблема дребезга будет решена.

Конструкция устройства

Большинство деталей монтируются на печатной плате из одностороннего фольгированного стеклотекстолита толщиной 1…1,5 мм, чертеж печатной платы приведен на рис. 5. Светодиоды можно устанавливать только на этапе настройки, для наглядности.

В устройстве применены резистор С2-23, МЛТ, пленочный конденсатор C4 – К10-17, керамический конденсатор C3 – КМ-6, оксидные конденсаторы С1, С2 – К50-35 или импортные аналоги перечисленных типов деталей. Разъем XR1 позаимствован в неисправном DVD плеере. При отсутствии оригинального разъема, устройство необходимо оснастить любым другим, подходящим по конструкции и габаритным размерам. Питают устройство от источника питания 12 В и током 50 мА.
UPD: Если вдруг кому пригодится, то по «натовской» классификации: DD2 – SN7493, DD1 – SN7400, это будет 155 серия. Или SN74LSxx это будет 555 серия, а вообще ставьте все что найдете, главное чтобы были цифры 93, 00 и 74.

Литература:

Ремонт джойстика «Денди»
С. Голубев г. Омск
Журнал «Радио» №6 1996 г.

PS.
Если кому понадобится — вот плата. (в картинке спрятан архив)

image

Для любителей кино, у меня нашелся какой-то видео отчет — мол, схема на мази…

Создание самодельных аксессуаров для Dendy

Сначала я и не думал писать статью на эту тему, но похоже, что это уже часть целого цикла статей на Денди-тематику. И да, на этот раз речь в первую очередь именно про отечественную Денди, а не про оригинальные консоли — Famicom или NES. Просто я делал устройство в подарок одному человеку, который снимает очень интересные видеоролики про Денди, и ориентировался на совместимость именно с этим клоном.

Дело в том, что и для Famicom, и для NES выходили самые разные аксессуары: 3D очки, клавиатуры, роботы, считыватели штрих-кодов, всякие игровые контроллеры и очень многое другое. До нас же дошёл только световой пистолет. Передо мной стояла задача собрать устройство, которое совмещало бы в себе разветвитель на четыре игрока (да, были такие игры) и Arkanoid-контроллер.



Порты ввода-вывода

Прежде всего стоит рассказать, как же работают с джойстиками игровыми контроллерами Famicom, NES и Dendy, и чем же они отличаются в этом плане.

С точки зрения игр порты ввода-вывода представляют из себя два регистра с адресами $4016 и $4017, которые ассоциированы соответственно с двумя портами, куда всё и подключается. Но на стандартных контроллерах для чтения данных используется только один провод — D0, данные с которого соответственно доступны через младший (нулевой) бит в каждом из регистров: $4016.0 и $4017.0. Аналогично используется один провод на запись, его обычно называют STROBE (или LATCH), который сбрасывает счётчик внутри геймпада, и который доступен через запись в $4016.0 (да, для обоих контроллеров он общий).

Проще говоря, чтобы получить состояние кнопок на первом контроллере надо сначала записать 1 в $4016.0, сразу же записать туда же 0, сбросив таким образом счётчик, а потом прочитать $4016 и $4017 восемь раз (для каждой из кнопок), получая данные о кнопках из младшего бита. Но для чего же остальные биты в этих регистрах, куда идут эти линии? Рассмотрим порт контроллера у NES:


Да, на него на самом деле идут D3 и D4! Именно они и доступны через $4016.3, $4016.4 у первого порта и $4017.3, $4017.4 у второго, и именно они используются для нестандартных контроллеров.

Что же касается его японского собрата — Famicom, там нет этих портов, да и сами игровые контроллеры не отсоединяются от консоли, но у него есть порт расширения, который представляет из себя разъём DB-15.


Знакомо выглядит, правда? Да, когда китайцы проектировали нашу Денди (я сомневаюсь, что её проектировали у нас), и им нужно было сделать отсоединяющиеся контроллеры, они решили взять за основу именно порт расширения, ведь в нём есть контакты для второго контроллера, и он на Famicom расположен чуть правее центра. Им тут даже распиновку менять не пришлось. Что же касается первого контроллера, они взяли тот же DB-15, расположили его слева и поменять распиновку так, чтобы можно было подключать первый контроллер. И только его.

Сравните сами передние порты у Famicom и у нашей Денди:


Вот такая вот странная история этих пятнадцатипиновых разъёмов у геймпадов, которые используются в нашей стране.

Но давайте посмотрим, что же выведено на этот порт расширения у Famicom?

Да, на него идут ещё $4016.1 (на ввод), $4017.0-4 (на ввод), $4017.0-2 (на вывод), внешнее прерывание и даже звук! Я был очень приятно удивлён, когда разобрал Денди и увидел, что всё это есть и там:


Правда, не во всех моделях, как выяснилось позже. Но если это есть, значит есть и полная совместимость с аксессуарами для Famicom, и их могут использовать соответствующие японские игры. Но напомню, что Денди — это очень странная смесь NES и Famicom, PAL и NTSC. Пираты выпускали для неё и японские, и американские игры, которые по сути на 100% совместимы, если не брать в рассчёт эти аксессуары и разный формат картриджей.

Итого: в некоторых Денди есть все те же выводы, что и на Фамикоме, которые при этом включают в себя часть выводов доступных на NES. Отсутствует доступ к $4016.3 и $4016.4, но они используются крайне редко. В виде таблички для наглядности:


Принцип работы аксессуаров

Американский разветвитель на четыре игрока для NES называется Four Score представляет из себя простой набор сдвиговых регистров. Т.е. первые восемь чтений из $4016.0 дают данные из первого контроллера, а вторые восемь — из третьего. Аналогично $4017.0 даёт данные о втором и четвёртом контроллерах. Помимо этого при продолжении чтения устройство выдаёт свою сигнатуру, с помощью которой игра определяет, что подключен именно Four Score, а не что-то ещё. Получается, что такое устройство можно собрать из шести сдвиговых регистров (4021 или 74165), и оно будет работать на любой Денди, ведь для него не требуются дополнительные линии данных. Само собой, только с американскими играми, которые выходили для NES.

Японский аналог для Famicom устроен гораздо проще. Третий и четвёртый контроллеры подключаются напрямую в порт расширения и доступны через $4016.1 и $4017.1. Соответственно для такого переходника нам уже нужен полноценный порт расширения у Денди, иначе поиграть вчетвером в японские игры не получится.

Arkanoid-контроллер, как ясно из названия, используется для игры Arkanoid и представляет из себя ручку-крутилку и одну кнопку. Внутри же это аналого-цифровой преобразователь и сдвиговый регистр, который так же последовательно выдаёт положение ручки. Разница между японской и американской версией только в способе подключения. Японская версия игры читает положение ручки и состояние кнопки из $4016.1 и $4017.1, а американская версия из $4016.3 и $4016.4 соответственно. Получается, что для японского Арканоида нужен полноценный порт расширения, а для американского подойдёт любая денди, где работает световой пистолет (он использует те же выводы).

Создание своего аксессуара

Хотя сами по себе вышеперечисленные устройства имеют простую схему и собираются из простейших логических компонентов, для сердца устройства типа «всё в одном» я решил использовать ПЛИС. Тем более мне было высказано пожелание сделать там ещё и простейший переключатель-свитч, а мне хотелось сделать возможность менять местами кнопки A и B. Сначала я выбрал Altera EPM3064ATC100, но вскоре выяснилось, что 64 макроячейки мне не хватит, и выбор пал на EPM3128ATC100, где уже 128 макроячеек.

Если уж на то пошло, я решил совсем не мелочиться и поставить в устройство ещё и какой-то экран, на котором показывались бы текущий режим и меню с настройками, к тому же у меня давно валялся без дела один знакосинтезирующий «16x2» дисплей. Вот для работы с ним уже нужен микроконтроллер, и я выбрал ATMEGA16.

Мне всегда было сложнее всего придать устройству приятный внешний вид. Всё-таки я программист, а не дизайнер, но именно при изготовлении устройства в подарок хотелось сделать его максимально красивым и удобным. Тем более это чуть ли не единственный способ как-то показать другим своё произведение искусства: фотографии и видео — это не то, по готовым схемам и 3D моделькам такие вещи воссоздают единицы, серийное производство наладить тяжело, а вот подарок — самое то.

Итак, требования к внешнему виду были такие: четыре порта для стандартных DB-15 контроллеров от Денди, четыре кнопки для их выбора и настройки, кнопка «режим», кнопка «настройки», удобная ручка для Arkanoid и кнопка для него же, которые должны располагаться достаточно удобно и не мешаться. Помимо этого хотелось сделать, чтобы активные порты подсвечивались светодиодами и как-то интуитивно связывались с соответствующими кнопками, логичнее всего при этом расположить разъёмы в ряд, но эти дурацкие DB-15 слишком огромные для этого. Помимо всего устройство должно удобно лежать в руках, ведь оно само по себе игровой контроллер для Arkanoid. В итоге я пришёл примерно к такому виду:


Кнопки в ряд, порты друг над другом, ручка сбоку, кнопка для Arkanoid сзади слева.

Получается, что места внутри достаточно много. Поэтому ПЛИС с разъёмами под провода и гнёзда я решил вынести на одну плату, а микроконтроллер с экраном и кнопками — на другую. Соединяются они при этом простейшим последовательным интерфейсом.

Плата с ПЛИС (первая версия):



Код для ПЛИС я писал на Verilog. Для каждого режима он получается достаточно простым. В первую очередь для многих из них нам надо считать обращения к каждому из портов, т.е. импульсы на проводе clock:


(простите, хабр не умеет подсвечивать Verilog)

Где strobe_in — это strobe (один на оба порта), а clock1_in и clock2_in — это соответственно clock на каждом из портов. Внутри консоли стоит логика: clock = R/W nand (адрес == $4016/$4017), т.е. на clock логический ноль, когда консоль читает данные по соответствующему адресу.

Режим имитации американского разветвителя на четверых игроков выглядит так:


В режиме японского же разветвителя на четверых нужно просто соединить входы с выходами напрямую:


Самым сложным оказалось сделать возможность менять местами кнопки A и B, ведь считываются они последовательно, т.е. нужно заранее знать значение B, когда консоль запрашивает A, но оно выдаётся как раз только после A. Сначала я думал как-то ускоренно считывать данные с контроллера, используя какой-то внешний тактовый генератор, но в итоге решил просто брать значение от предыдущего считывания. Это даёт задержку, но она абсолютно незаметна. Тем более игры обычно читают состояние кнопок по несколько раз подряд.

Само собой, все эти режимы и настройки надо как-то задавать. Для этого я определил 12-битный регистр control, данные в который записываются через последовательное соединение, с дополнительным битом для проверки чётности:


Соответственно со стороны микроконтроллера код (весьма грязный) выглядит вот так:


В остальном в коде микроконтроллера нет ничего особенного: работа с дисплеем на контроллере HD44780, кнопки, светодиоды, простенькая менюшка и работа с аналого-цифровой преобразователем для определения угла поворота ручки.

Я всё отладил, убедился в работоспособности и уже начал упихивать компоненты в корпус…


Но перед закрытием крышки решил проверить на оригинальном Famicom, ведь с ним устройство тоже будет использоваться. Увы, режимы, где нужно было считать импульсы clock, работали неправильно. С помощью логического анализатора выяснилось, что с линии данных идут наводки на линию clock:


Это помеха длительностью всего в несколько десятков наносекунд всё портит. Я решил посмотреть своим простеньким осциллографом, что же происходит на линии clock у Денди:


А вот что там же у Фамикома:


Видно, что эта линия подтянута к VCC, при чём очень сильно у Денди и весьма слабо у оригинального Фамикома. Я начал экспериментировать с обвеской. Вскоре стало ясно, что на результат лучше смотреть не логическим анализатором, а самой консолью. Пришлось вспоминать ассемблер для 6502 процессора, писать простенькую программу для тестирования и записать её на картридж:


На ней сразу стало всё наглядно видно, а заодно можно было протестировать сразу все режимы, не меняя игры. ROM можно скачать тут.

В итоге проблема была решена подтяжкой линий clock к VCC через резистор в 1кОм, конденсатором между clock и землёй в 22нФ и резисторами на 200 Ом в разрыв всех линий данных. Увы, пришлось травить новую плату (не фотографировал), но зато после этого сразу же всё заработало.

Итоговый вид устройства:


Во времена СССР я мог бы быть хорошим промдизайнером.

И если вас заинтересовала тематика работы разных игровых контроллеров и создания самодельных, мы как раз на эту тему сняли вторую серию нашего шоу «Пока все играют», где многое очень просто и наглядно объясняется для тех, кто совсем не в теме:

Геймпад как для Dendy, только с USB


Давно хотел поиграть в старые игры на Dendy. Покупку консоли считаю нецелесообразной потому, что большую часть времени она будет просто простаивать. А вот геймпад для компьютера — другое дело! Стоит недорого и играть можно там, где есть ноутбук.
Если очень коротко, то всё работает, покупкой доволен. За подробностями под кат.

Начну с внешнего вида. На фронтальной стороне расположены 8 кнопок (4 стрелки, select, start, A, B).

Фронтальная сторона

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

Тыльная сторона

Кабель на ощупь самый обыкновенный, но не хлипкий. Достаточно длинный (140 см).

Длина кабеля

Перейдем к разбору устройства. Для этого понадобится небольшая крестовая отвертка.

Отвертка

Внутри всё до ужаса просто.

Кишки

Для того, что бы не выдернуть кабель, он проходит огибая два держателя(?). На первый взгляд ненадёжно, но на самом деле держится очень крепко.

Крепление кабеля

На микросхеме с одной стороны пара конденсаторов, а с другой контактные площадки для кнопок и единственный чип, который залит чем-то черным (видимо для секретности). Присутствует несмытый флюс.

Микросхема

Кнопки при нажатии замыкают соответствующие контактные площадки на плате, затем возвращаются на место благодаря пружинным свойствам резины.

Кнопки

Пластик глянцевый, не вонючий.

Пластик

За всё время эксплуатации недостатков не выявил. Только учтите, что на этом геймпаде на 2 кнопки меньше, чем обычно (для игор вроде не критично).

Оригинальный геймпад

Устройство определяется как HID, поэтому без проблем должно подключиться к любой ОС (тестировал только с Ubuntu и Windows). Можно без труда превратить телевизор с микрокомпьютером в телевизор с ретроконсолью.

Для игры потребуется эмулятор NES (NES пришел к нам под именем Dendy) и ROM какого-либо картриджа (ссылку не привожу, т.к. ROM'ы обычно нарушают авторские права).

В процессе игры

Оригинальные размеры сохранены, эргономика отсутствует, поэтому пальцы начнут болеть, прям как раньше!

Если у кого-то завалялись старые геймпады, то можете прицепить их к микроконтроллеру и играть на ПК.

GamePad — (дословно) игровая подушка,
JoyStick — (дословно) палочка наслаждения.

Читайте также: