Можно ли подключить денди к ноутбуку. Как подключить игровую приставку к компьютерному монитору

Можно ли подключить денди к ноутбуку. Как подключить игровую приставку к компьютерному монитору
Можно ли подключить денди к ноутбуку. Как подключить игровую приставку к компьютерному монитору

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

Немного из истории «Денди»: игра нашего детства

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

На самом деле «Денди» первая на отечественном рынке, но не первая в производстве. Компания Nintendo до этого успела выпустить десятки других версий консолей, но только «Денди» смогла покорить сердца отечественных геймеров. На то время в России было 4 дилера от компании «Степлер», которые осуществляли поставку. К сожалению, данная компания свернула свою деятельность уже к 94-му году.

Конечно, даже сейчас можно найти давно всеми забытый «Денди» на прилавках некоторых магазинов и на специализированных сайтах, но все они далеки от оригинала, и являются не чем иным, как подделкой из Китая.

Картриджи и самые популярные игры на «Денди»

Приставка и джойстики сами по себе не представляли интереса без специальных картриджей, именно они являлись носителями основной информации. На одном таком картридже могла быть как одна игра, так и 999! Но наиболее ценными считались те, в которых имелось от 3 до 10 различных игр. Молодежь постоянно менялись, покупали и продавали друг другу картриджи. Даже в наше время можно встретить людей, у которых остались целые коллекции оригинальных и редких игр.

Именно благодаря огромному ассортименту качественных и интересных игр, которые были выпущены для операционной системы Nes, данная консоль стала так востребована среди российских любителей игр. Такие бессмертные творения, как «Мортал Комбат», «Пакман», «Супер Марио», «Танки», «Остров приключений» и многие другие навсегда останутся в памяти людей, переживших культ девяностых.

Как подключить «Денди» к телевизору?

Именно таким вопросом задавались многие счастливые покупатели приставки того времени. На самом деле ничего сложного в этом не было, достаточно было подсоединить a/v штекеры приставки и телевизора, а затем начать поиск канала — все просто!

Но дело в том, что в те времена и телевизоры были простыми, то есть имели соответствующие разъемы, но как подключить «Денди» к телевизору современной модели, которая поддерживает HDMI?

Если вы не нашли на своем телевизоре аудио/видео выход, возможно, найдете выход SCART, по сути, это то же самое, что и A/V. В данном случае вам придется купить переходник или непосредственно сам кабель SCART, он представляет из себя широкий разъем с одной стороны, и «тюльпанчики» — с другой. Благодаря такому кабелю можно решить вопрос, как подключить «Денди» к телевизору.

Как подключить приставку «Денди» к телевизору новейшего поколения?

К сожалению, в последнее время производители все чаще стали выпускать телевизоры, не имеющие разъемов для компонентных подключений, ввиду того что современные приемники имеют интерфейс высокого разрешения.

Допустим, вы решили окунуться в прошлое и поиграть в ретро-игры. Для этой цели была куплена приставка, но позже выяснилось, что на вашем телевизоре нет A/V и SCART-выходов. Что делать? Как подключить «Денди» к телевизору Samsung, на котором не оказалось необходимых разъемов (впрочем, это касается любой марки).

Выйти из такой ситуации непросто, но возможно. Придется приобрести специальное устройство — конвертер A/V в HDMI. Такие конвертеры продаются в интернет-магазинах и на популярных китайских площадках.

Итак, перед тем как подключить «Денди» к телевизору LG, убедитесь, что приставка выключена и отсоединена от питания. Далее, при помощи кабеля с «тюльпанчиками» подсоедините приставку к конвертеру. С другой стороны, конвертер подключается к телевизору при помощи HDMI-кабеля. Осталось только вставить в приставку картридж с любимой игрой, подключить к сети и включить игру. Возможно, понадобится поиск каналов, чтобы выйти на необходимую волну.

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

Поностальгировав всласть, я решил, что очень хочу поиграть в Dendy и поиграть хочу на ноутбуке, но не на клавиатуре, а на старом добром джойстике.

Ниже я опишу, с какими проблемами я столкнулся и как их решил.

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

Встала проблема, как подключить джойстик от Денди к ноутбуку.

Немного погуглив, я понял, что в основном это решается подключением через LPT порт и использованием готовых драйверов, но у меня ноутбук, и мне это не подходит. Тут я вспомнил, что у меня есть плата Arduino Uno и я решил, что пойду своим путем и буду использовать именно ее.

0. Определение распиновки на джойстике

Первая проблема оказалась в том, что коннекторы у джойстиков внутренние, а все описания распиновок найденные в интернете, были для внешних коннекторов.

Найти спецификацию на мою noname денди мне не удалось, поэтому я стал рассматривать внутреннюю плату, чтобы найти там питание и землю, и понять какие из пяти контактов на джойстике с ними соединяются. С этим я справился быстро. Оказалось это два крайних контакта.

К Ардуино, я подсоединил все напрямую, питание - питание 5В, земля - земля, остальные три контакта подсоединил к 2, 3 и 4 цифровому пину.

1. Описание протокола работы джойстика

Оказалось не так-то просто найти эту информацию. Лишь несколько сообщений на паре форумов. Лично мне помогла эта запись: code.google.com/p/avrtoys/wiki/joystick , а именно этот код: avrtoys.googlecode.com/svn/trunk/joystick/main.c . А вот ссылка на упомянутую в этой записи заметку в журнале Радио: ftp.radio.ru/pub/arhiv/1996/06-96/46-6-1996.gif . Из всего этого я сделал вывод, что нужно подать сигнал на Latch, а потом 8 раз подавать сигнал на Clock и каждый раз считывать значение с Data, в котором после каждого Clock-а будет содержаться информация о следующей кнопке джойстика.

2. Настройка среды

Если у вас уже все настроено или вас устраивает Arduino IDE, можете перейти к 3 пункту.
Не знаю, как вас, но лично меня официальная Arduino IDE ужасно угнетает, поэтому коротко расскажу, как использовать свою любимую IDE.
Первым делом я скачал исходники Arduino IDE и нашел там код отвечающий за компиляцию и аплоад прошивки. Потратив немного времени я выделил все команды, которые там используются:
#!/bin/bash avr-gcc -c -g -Os -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000UL -I /usr/share/arduino/hardware/arduino/cores/arduino -I /usr/share/arduino/hardware/arduino/variants/standard $filename.cpp -o $filename.o avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p -o $filename.elf $filename.o libArduino.a -lm avr-objcopy -O ihex -R .eeprom $filename.elf $filename.elf.hex avrdude -V -p m328p -b 115200 -c arduino -P /dev/ttyACM0 -U flash:w:$filename.elf.hex
В приведенной выше команде, при линковке, используется библиотека libArduino.a, ее можно получить скомпилировав все *.c и *.cpp файлы из папки с хэдэрами и собрав все объектники в один архив. А можно просто запустить Arduino IDE, скомпилировать любой проект и скопировать файл /tmp/build*.tmp/core.a. Это будет абсолютно эквивалентно.
Все эти команды актуальны для Arduino Uno, для других ардуин следует изменить некоторые параметры.

Теперь используя эти команды можно легко настроить свою IDE, на автоматическую компиляцию и загрузку прошивки.

3. Написание кода прошивки

Здесь нужно было лишь определить какие из 2, 3 и 4 пина отвечают за Latch, Clock и Data. Это я решил методом проб и ошибок. Предполагаем, что 4 это Data, и делаем Serial.println(digitalRead(4)), если при нажатии кнопок есть какая-то реакция, значит это оно. Остальные 2 контакта определились, когда уже была написана прошивка, если все работает значит угадали, нет - меняем местами.

Код, повторюсь, писался на основе avrtoys.googlecode.com/svn/trunk/joystick/main.c :

Код прошивки

#include const int data = 2; const int latch = 3; const int clock = 4; const int TICK = 2; void init_joystick(int data, int latch, int clock) { pinMode(data, INPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); digitalWrite(clock, HIGH); } int get_keys_state_joystick(int data, int latch, int clock) { digitalWrite(latch, HIGH); delayMicroseconds(TICK); digitalWrite(latch, LOW); int keys_state = 0; for (int i = 0; i < 8; ++i) { delayMicroseconds(TICK); digitalWrite(clock, LOW); keys_state <<= 1; keys_state += digitalRead(data); delayMicroseconds(TICK); digitalWrite(clock, HIGH); } return keys_state; } void setup() { init_joystick(data, latch, clock); Serial.begin(57600); } void loop() { Serial.write(get_keys_state_joystick(data, latch, clock)); }


В результате я получил 1 байт содержащий в себе информацию о всех 8-ми кнопках джойстика, о каждой в соответствующем бите. У меня получилось следующее расположение: A, B, Select, Start, Up, Down, Left, Right. После этот байт отправляется на компьютер, где принимается и обрабатывается моим «драйвером».
Несложно заметить, что можно легко подключить второй джойстик.

4. Написание «драйвера»

Здесь нужно было принять этот самый байт от Arduino и эмулировать нажатия кнопок клавиатуры. Да-да, нажатия на джойстике будут обрабатываться, как нажатия на клавиатуре, хорошо это или плохо.
В качестве языка программирования я выбрал Python. Простой и эффективный, полагаю, он отлично подошел для этой задачи.

Единственная проблема, которая здесь возникла это дребезг контактов джойстика. Я ее решил путем введения временного интервала, наступающего после смены состояния кнопки, в течение которого состояния не изменяется. Хватило 0.05 с.

Для эмуляции нажатия кнопок клавиатуры я использовал утилиту xte, идущую в комплекте Xautomation. Она очень проста в использовании, вот пример: xte "keydown Left" . За дополнительной инфорацией смотрите man xte.

Для выхода из драйвера я использовал состояние, когда нажата вся крестовина целиком. Этому состоянию соответствует число 0xf0.

Код драйвера

#!/usr/bin/python import serial import os import time def bool_to_updown(val): if val: return "up" else: return "down" exit_keys = 0xf0 delta_time = 0.05 keys = [["Right", False, 0.0], ["Left", False, 0.0], ["Down", False, 0.0], ["Up", False, 0.0], ["s", False, 0.0], # START ["a", False, 0.0], # SELECT ["x", False, 0.0], # B ["z", False, 0.0]] # A ser = serial.Serial("/dev/ttyACM0", 57600) keys_state = 0 while keys_state != exit_keys: keys_state = ord(ser.read()) for i in range(8): if not bool(keys_state & (1 << i)) != keys[i] and time.time() - keys[i] > delta_time: os.system("xte "key{0} {1}"".format(bool_to_updown(keys[i]), keys[i])) keys[i] = not keys[i] keys[i] = time.time() for i in range(8): os.system("xte "keyup {0}"".format(keys[i])) ser.close() print("Goodbye!")

5. Ура! Играем!

Все! Осталось лишь настроить эмулятор денди, я выбрал FCEUX.
Указываем в настройках те клавиши, которые указаны в драйвере ииии вспоминаем детство!

Заключение

На самом деле есть и другие, возможно, более эффективные способы использования Ардуино в данной ситуации. Например, если у вас Arduino Leonardo, то можно использовать объект Keyboard для прямой посылки команд клавиатуры на компьютер. Так же можно, как я понял, перепрошить Ардуино так, чтобы она отображалась, как джойстик/клавиатура/мышь и так же напрямую посылать команды. Вот туториал: http://mitchtech.net/arduino-usb-hid-keyboard/ . Впрочем, мой способ меня полностью устраивает и результатом я более чем доволен.

Как ни крути, но Ардуино это замечательная платформа для подобных экспериментов.
Теперь осталось только собрать все это в виде отдельного устройства.

Ну и видео напоследок:

В статье я не только подскажу как подключить джойстик от денди к компьютеру , но и предложу Вам скачать игры для приставок 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 и все.

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

А теперь дела программные.

Нам необходимо:

1) Установить драйвер и настроить его.

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

Начнем с установки и настройки драйвера.

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

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

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

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

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

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

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