Геймпад денди распиновка

Геймпад денди распиновка

Архитектура Денди не изобилует большим (а может и достаточным) количеством портов ввода/вывода. Программно под порты внешней периферии выделены две ячейки из адресного пространства CPU (на аппаратном уровне архитектуры). Это регистры с адресами $4016 и $4017. Аппаратных же линий и того меньше – а именно: 3 линии (бита) на выход и 5 + 2 линии на вход. Опрос линий чисто программный.

Вывод – 3 бита “OUT” (непосредственно с процессора), адресуются путем записи значения в регистр $4016, младшие биты. Бит 0 используется в качестве стробирующего сигнала-защелки состояния джойстиков, обоих сразу (см. ниже).

Ввод – порт $4016 “J1” (чтение), аппаратно присутствуют только два младших бита. Бит D0 выведен на «Порт A» и используется для чтения последовательного кода состояния джойстика 1. Бит D1 выведен на «Порт B».

Ввод – порт $4017 “J2” (чтение), аппаратно присутствуют 5 младших бит (два старших бита используются pAPU – см. ниже).

Наиболее распространены (в России) модели приставок Денди с двумя «разъёмами для джойстиков» (так их называют в быту) по 15 контактов каждый. Встречаются варианты и с двумя 9-ти контактными разъемами, или шнуры джойстиков могут быть «вделаны» в приставку (как у оригинального Famicom) — в этих случаях есть еще один 15-ти штырьковый разъём («порт расширений»). Условимся называть разъём для подключения первого джойстика «Порт A», второго «Порт B» (каждый по 15 или 9 штырьков). Если оба порта имеют по 9 штырьков (или джойстики неразъемные), то есть третий (или первый) «Порт C » – 15-ти штырьковый, который дублирует «Порт B» и содержит дополнительные сигналы. Если, как в большинстве случаев для Денди, оба разъема имеют 15 контактов, то к «Порту A» подключено не более шести, а ко второму – все 15 (в том числе и сигналы с «Порта A», правда, на другие контакты), т.е. получается что разъем «второго» джойстика — «Порт В», какбы объединен с портом расширений — «Порт С».

В общем случае «Порт A» предназначен для подключения «первого» джойстика (аппаратно возможно и подключение светового пистолета — «Zapper»). К «Порту B & C » (порту расширений) подключаются все другие периферийные устройства («второй» джойстик, световой пистолет, разветвитель на 4 джойстика и многое другое), фактически на него выведены все линии портов ввода/вывода Денди (за исключением одного из «Порта A»). Теперь подробнее об аппаратной реализации и программной модели.

Распиновка портов (по разъему совместимых с DB-15) приведена на рисунке.

«Порт A» ( 15 контактов )

« Порт B & C» (15 контактов )

Представленный «ассортимент» и распиновка портов типичны как для Dendy Junior, Dendy Classic .

При каждом чтении из $4016 или $4017 процессор выдает сигналы (#OE), разрешающие чтение из буферов портов (для каждого порта свой сигнал – процессором предусмотрено аппаратно, см. Приложение 5). Соответственно считываются значения входных линий. Кстати опять, ничто не мешало разработчикам NES (Денди) сделать на каждом порту по 8 линий на вход.

О других сигналах в портах ввода/вывода:

SND IN – аналоговый выход с pAPU (см. ниже) – например, в световой пистолет-пулемет («фирменный» от Стиплера) встроен динамик, из которого раздается звук стрельбы (этакий «фидбэк»), также на рукоятке данного пистолета-пулемета, помимо переключателя одиночной и автоматической стрельбы, была продублирована кнопка «B» (в некоторых играх, как то «Operation Wolf», таким пистолетом-пулеметом можно было не только постреливать вражье очередями, но и метать в них гранаты);

#IRQ – линия запроса пользовательского прерывания CPU (которая выведена и сюда и на разъем картриджа). Периферийное устройство может быть как источником прерывания, так и его обработчиком (для собственных нужд), если источником является, например, электроника на картридже (маппер);

CLK1/CLK2 – синхроимпульс опорной (тактовой) частоты процессора (1.79МГц для PAL) – аналогично сигналу #M2 в разъеме картриджа;

Некоторые (как правило, «не Денди») приставки имеют девяти контактные разъемы (совместимые с DB-9) для джойстиков, распиновка которых может быть такой:

«Порт A» (9 контактов)

«Порт B» (9 контактов)

А вместе с этим и 15-ти контактный порт расширений, для подключения другой периферии помимо джойстиков (или второго джойстика в 15-ти контактном «исполнении»):

«Порт C » (15 контактов)

«Стандартные» джойстики.

Оригинальные джойстики NES ( Famicom ) имеют по 8 клавиш. Джойстик, предназначенный для использования в качестве «второго» в оригинальном варианте ( Famicom ) не имеет кнопок Select и Start, но зато имеет микрофон с регулятором громкости для него (усиленный сигнал с которого подается в приставку). Джойстики китайских клонов, а также российского клона консоли — Денди — имеют, как правило, кнопки Select и Start на обоих джойстиках, так как допускают их подключение к любому из портов (для одинокого геймера второй джойстик был запасным). Помимо этого мы привыкли и воспринимаем как должное наличие турбо-вариантов кнопок A и В. Вещь, несомненно, удобная в ряде игр – но рассматривать их стоит как «чит» — т.к. в оригинальных версиях консоли их нет. Разумеется, что турбо-кнопки не генерирует каких-либо состояний в системе отличных от тех, что определяет факт нажатия обычных кнопок A и B – просто используя турбо-кнопки нет необходимости «долбить» по клавишам. Да и не любой геймер сможет так быстро, равномерно и беспристрастно «долбить» как встроенный триггер ;-)

В примере наиболее распространенного варианта консоли: с двумя разъемами под джойстики по 15 ног в каждом (см. рисунок выше) — «стандартные» джойстики используют контакты: 1, 8, 9, 12 и 15.

Нажатие на клавиши джойстиков не вызывает в приставке никаких событий. Опрос джойстиков чисто программный, его частота должна выбираться программистом, исходя из необходимой точности и скорости реакции пользователя на события системы. Естественно, что очень частый опрос может замедлить работу системы, да и не стоит забывать, что джойстик это механическое устройство, а пользователь не может работать со скоростью ЭВМ (пусть даже такой как NES).

И так – как было сказано выше, для опроса состояния джойстиков используются два порта из адресного пространства CPU — $4016 и $4017. Алгоритм следующий: сначала необходимо «зафиксировать» состояние кнопок в сдвиговом регистре джойстиков (обоих сразу, если оба подключены). Для этого формируется строб, «защелкивающий» этот регистр – т.е. по адресу $4016 младший бит сначала устанавливается в единицу, а затем в ноль (строб). Далее можно прочесть состояние кнопок джойстика на момент «защелкивания». Информация считывается в последовательном коде (из сдвигового регистра джойстика). Младший бит порта $4016 – первый джойстик (Порт A), порта $4017 – второй джойстик (Порт B). Информация считывается в следующей последовательности:

Источник

Джойстик для игровой приставки Dendy (15 контактов) с Алиэкспресс

Цена: $5.85

Здравствуйте, друзья! Как Вы уже знаете, я недавно впал в ностальгию по Святым 90м, купив новодельную Dendy. Спустя некоторое время я решил всё-таки докупить к ней второй джойстик — мало ли, может с кем-то в паре играть буду, ну или, в крайнем случае, будет просто запасной джойстик. Короче, железяка за 4 сотни один фиг не пропадёт.

Я не просто так сделал акцент на том, что данный джойстик является 15-пиновым, поскольку есть еще аналогичные джойстики с 9-пиновыми коннекторами. Спойлер — на самом деле там пинов меньше.

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

Конкретно этот джойстик я выбрал по достаточно мелочной, но с точки зрения геймплея важной причине.
Думаю, мало кто будет спорить, что данный джойстик удобнее/привычнее всего держать вот так:

Так вот, причина выбора заключается в том, что это единственный джойстик (из тех, которые мне попадались) на 15 пинов, у которого провод выходит со стороны консоли, а не слева. Думаю, каждый из Вас согласится, что выходящий слева провод будет достаточно сильно мешать клацать по крестовине. В большинстве случаев мне попадалались либо 15-пиновые джойстики, но с боковым выводом, либо с прямым, но не 15-пиновые.

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

Однако, я в момент покупки как-то сначала не обратил внимания на одну важную вещь — расположение кнопок А и В. Сравните их расположение на этих джоях:

Как видите, у Сеговского сначала идёт А, потом В, а у второго — наоборот. Т.е. тут получается, что после привыкания к одному, переходить на другой будет несколько проблематично, т.к. придется постоянно путать «прыжок» и «атаку». Ровно то же самое и с турбо-кнопками.

Ну и на последок, одна фишка, которая меня несколько посмешила — гарантийная пломба.

Не, ну серьезно — гарантийная пломба на джойстике, заказанном с Алика — это вот прям… ну вы поняли :)

И что, думаете меня это остановит? Да нифига! Вскрываем!

С тыльной стороны платы ничего интересного — термо-сопли и 1 резистор (зачем — без понятия).

А вот с фронтальной стороны… тоже особо ничего интересного, однако, количество подпаянных проводов тут всего 5.

«При таком раскладе я крайне не уверен, что 9 и 15 пиновые джойстики технически чем-то отличаются друг от друга (кроме разъёмов).» — стоило мне это написать, как меня тут же фонтан ударил в голову полезть в Яндекс, чтобы изучить схему распиновок на разъёме. И вот что я нашел — 2 варианта распиновки на Dendy + распиновка на оригинальную Nintendo NES, т.е. я оказался прав:

При таком раскладе (если дома есть паяльник) можно брать вообще любой подобный джойстик и в случае чего переделать его под тот или иной разъём.

Итак, какие же выводы я для себя сделал:

1) Джойстик однозначно не будет лишним;
2) Сеговский джой, конечно удобнее (за счёт формы и за счет наклона кнопок A и B), но второй всё-таки ближе к оригиналу, поэтому буду использовать именно его в качестве основного, хоть и придется привыкнуть к тому, что А и В теперь на других местах;
3) Если нет возможности купить 15-пиновый джой — можно взять 9-пиновый и перепаять кабель от уже имеющегося.

Мудрость: Ни один закон никогда не заменит здравый смысл.

Анонс: Друзья, я обзавёлся вот таким картриджем на 400 игр. Долго ждать обзора не придётся.

Источник

Создание самодельных аксессуаров для 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?


(скриншот с сайта wiki.nesdev.com)

Да, на него идут ещё $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 макроячеек.

Если уж на то пошло, я решил совсем не мелочиться и поставить в устройство ещё и какой-то экран, на котором показывались бы текущий режим и меню с настройками, к тому же у меня давно валялся без дела один знакосинтезирующий «16×2» дисплей. Вот для работы с ним уже нужен микроконтроллер, и я выбрал 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 Ом в разрыв всех линий данных. Увы, пришлось травить новую плату (не фотографировал), но зато после этого сразу же всё заработало.

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

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

Многие наверное захотят увидеть видео, но на данный момент подарок уже в руках нашей почты, а я снял только небольшую видеоинструкцию для конечного пользователя. Посмотреть её можно тут: www.youtube.com/watch?v=39beci7nE8w

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

Источник

Adblock
detector