Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Полноценная приставка Sega Genesis (Sega Mega Drive 2) + джойстик в Ubuntu Linux  (Прочитано 36561 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн begemot

  • Автор темы
  • Активист
  • *
  • Сообщений: 385
  • Я отказался от наркотического яда - никотина!
    • Просмотр профиля
Здравствуйте, други!

Заранее прошу прощения у не сентиментальных читателей за столь продолжительное вступление. Надеюсь, вы поймёте правильно - слишком уж много воспоминаний связано у меня с этой темой. (:
Администраторы форума наконец- то внедрили крайне полезный BB-Code "Спойлер", теперь я могу "спрятать" вступление, дабы не обременять манипуляторы тех, кому это не нужно. (:


Если вы уже знакомы с принципами и технологией подключения джойстиков к компьютеру и вам нужно лишь узнать детали, специфичные для операционной системы GNU/Linux, можете сразу перейти к пункту II



(Нажмите, чтобы показать/скрыть)

ЗАДАЧА

Итак, наша задача: мы хотим играть в любимые с детства "Сеговские" игры в не менее любимой операционной системе Ubuntu GNU/Linux, причём, играть не просто так, а именно на джойстике! Конечно, джойстик ("по научному", геймпад/gamepad) можно приобрести в компьютерном магазине, однако цена и характеристики таких устройств зачастую не соответствуют предъявляемым нами требованиям. Например, я живу в глубинке и геймпадов ценой < 1000 рублей в магазинах нет, к тому же, все они с четырьмя кнопками, аля PlayStation, а шестикнопочных - нигде нет.
Поэтому, мы сделаем два полезных дела сразу: сэкономим деньги на приобретении дорогущего девайса и заодно "вдохнём" новую жизнь в пылящиеся джойстики, которые есть у многих из нас.
Поверьте, это только на первый взгляд кажется неоправданно сложной и затратной задачей, всё далеко не так трудно, как может показаться на первый взгляд. Давайте начнём с того, что для решения нашей объёмной задачи, разобьём её на более мелкие, легко обозримые подзадачи, чему, собственно, нас и учит наука.

Подзадачи:
I. Модернизировать джойстик для подключения к компьютеру.
II. Установить драйвер для того, чтобы операционная система "увидела" наш джойстик.
III. Настроить джойстик программно, для его полноценной работы в системе.
IV. Установить программу-эмулятор консоли Sega MD2 и наши любимые игры к ней.
V. ИГРАТЬ! (:


Вот теперь всё становится гораздо яснее и проще. Итак, приступим!


РЕШЕНИЕ

I. Модернизация джойстика.


!!!ВАЖНО!!!
Внимательно прочтите этот раздел, если вы впервые решаетесь на подобные действия!
Ни я и ни кто другой из упомянутых здесь авторов руководств НЕ НЕСУТ ответственности за ваши действия! За причинение вам материального и морального ущерба, за сломанные конечности, обожжённые руки и сгоревший компьютер виноваты будете вы сами! Вся ответственность полностью лежит только на вас и вам НЕОБХОДИМО это отчётливо осознавать. Если вы не уверены в своих силах и/или в достоверности этих инструкций, то вам лучше не пытаться осуществить данную модернизацию.


Теперь, когда с нами остались только те, кто чётко осознаёт свои силы и готов сделать нечто, о чём раньше мы могли только читать в таких замечательных журналах, как "Юных Техник", "Конструктор" и им подобных, позвольте ещё пару рекомендательных напутствий: вероятность того, что вы спалите свой LPT-порт или ещё что поважнее крайне мала, а полученное устройство можно будет подключать и отключать в любое время, а не только при выключенном компьютере. Главное - всё сделать правильно и обдуманно. Тем не менее, перед началом каких- либо действий, обязательно прочитайте ВСЁ руководство от начала до конца.

Пожалуй, неподготовленного человека именно этот, самый первый этап может отпугнуть и/или вызвать наибольшие трудности. Однако, для выполнения этой операции вам совершенно не обязательно быть матёрым электронщиком и владеть паяльником, словно джедай световым мечом. Главное здесь - иметь "прямые руки"! Если вы не будете волноваться, подойдёте к этому делу обстоятельно, всё подготовите заранее и как следует, то у вас несомненно всё получится.

Итак, мы будем модернизировать "Сеговский" джойстик для подключения к LPT-порту компьютера , для этого потребуется:

Ингредиенты:
1. Паяльник.
2. Припой и флюс. Чаще всего, в этом качестве применяется "связка" канифоль+олово.
3. Шнур для подключения принтера к LPT-порту (или ему подобный). Можно приобрести в компьютерном магазине, стоимость 50-70 рублей.
4. Собственно, джойстик для приставки Sega MD2. Думаю, у многих они ещё имеются, но если все разломались или их и вовсе не было, то смело идите в магазин, цена ~70 рублей.


Итак, в проводе для подключения принтера к LPT-порту нас интересует та сторона, на которой имеются "штырьки", коих 25 штук. Этот тип соединительного элемента, по понятным причинам, называется "папа". Давайте договоримся, что называть весь этот элемент мы будем "коннектор". Подключается коннектор к порту на материнской плате, тип разъёма которой, как вы уже догадались, называется "мама", на нашем с вами "слэнге" это будет просто "порт".
Разбираем коннектор и отпаиваем все провода, а также откусываем все дополнительные "железячки" (если таковые имеются), соединяющие несколько контактов. В результате получаем заготовку, к которой будем припаивать провода джойстика.

Пришло время узнать: к каким же именно контактам 25-ти контактного коннектора мы будем припаивать 9 проводов джойстика.

Здесь необходимо провести ещё одно "лирическое отступление" о том, как мы будем идентифицировать провода джойстика и контакты коннектора. Если вы ещё не заметили, обратите внимание - контакты коннектора пронумерованы (по крайне мере, это так в >90% случаев) и отсчёт штырьков ведётся в ДВА РЯДА, начиная от левого-верхнего (1) до правого-нижнего (25).

[Изображение удалено администратором]

То же самое касается и коннектора джойстика, с той только разницей, что тип соединения джойстика - "мама", поэтому для него отсчёт будем вести наоборот - в два ряда, от правого верхнего (1) до левого-нижнего (9). Сверять цвета проводков джойстика не буду, поскольку глубоко сомневаюсь, что китайские производители чётко соблюдают их порядок, это только собьёт вас с толку. Лучше ориентируйтесь по своей конкретной ситуации, тогда точно не ошибётесь.
Обрежьте провод джойстика за ~5 см до его коннектора, разберите коннектор джойстика и определите какого цвета провод подключен к 1-му контакту, какого цвета - ко второму и так далее до 9-го.

Теперь нам понадобится схема, согласно которой мы припаяем провода к коннектору. Таких схем существует большое количество, предназначены они для разных драйверов. Есть схемы для подключения 8-ми битных джойстиков, джойстиков Playstation и др.
Мы будем паять по схеме с ласковым название "Linux", ввиду её простоты и отличного взаимодействия с имеющимся драйвером для джойстиков Sega. Вот как она выглядит:

[Изображение удалено администратором]

Ещё раз заостряю ваше внимание на том, что тип коннектора джойстика - "мама", а принятый отсчёт контактов (от левого-верхнего до правого-нижнего) всегда ведётся согласно типу "папа", именно поэтому на схеме явно указано слово male.

Если всё сделаете верно, то получится, примерно, так:

[Изображение удалено администратором]

Собираем получившийся коннектор, теперь у вас на столе должно лежать что- то вроде этого:

[Изображение удалено администратором]

Поздравляю! Самый сложный этап позади! Я же говорил, что всё далеко не так сложно, как казалось. (:

I. Установка драйвера.

Для тех, кто хочет узнать все подробности и детали, относительно драйверов, входящих в ветку "Linux Joystick Driver", я направляю к документации ядра (где почитать об этом в Сети - смотрите раздел ССЫЛКИ в конце статьи ). Там же вы сможете узнать подробности о подключении других типов джойстиков (Dendy, Nintendo, Sony PS и т.д.) через всё тот же параллельный порт.

Для тех, кто готов мне довериться, объясню в "двух словах":
Первым делом. установите пакет joystick из репозиториев. Дальше, мы будем использовать драйвер db9 из упомянутого состава "Linux Joystick Driver". Компилировать ничего не надо, весь пакет поставляется с ядром, поэтому всё что нам нужно сделать это подгрузить модуль ядра с драйвером db9. Этот драйвер поддерживает различные виды джойстиков (ни много, ни мало 10 типов), к тому же, он может "слушать" любой из имеющихся в системе LPT-портов, поэтому подгружать его нужно не просто так, а с определёнными параметрами.
Всё же, для большинства из нас, эти параметры будут одинаковы, поскольку порт в компьютере, как правило, только один, а джойстик 8-ми кнопочный (6 кнопок + Mode + Start), что соответствует типу 6.

Однако, здесь есть один нюанс: по умолчанию, в ядро УЖЕ загружается модуль "занимающий" порт LPT. Этого "парня" зовут lp, он из CUPS, служит для поддержки печати. Если у вас нет принтера, то смело идите дальше, если же у вас есть принтер, который подключается именно по LPT, то вам придётся учитывать, что одновременно эти два модуля работать не могут, придётся отключать db9 на время печати, а lp - на время игры.

Итак, открываем файл, отвечающий за модули ядра:
sudo gedit /etc/modules
Комментируем строку с lp и добавляем db9 с параметрами. У меня это выглядит так:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fuse
#lp

db9 dev=0,6

Теперь нужно перезагрузить компьютер (или ввести волшебную команду, которую я не знаю. (: Может, гуру подскажут).
Настал момент истины! В директории /dev/input должен появиться файл нашего устройства "js0". js, понятно,  joystick, а 0 - порядковый номер такого устройства в системе. Если у вас уже есть другие джойстики, то цифра будет другой.
На "всякий пожарный" сделаем символическую ссылку:
sudo ln -s /dev/input/js0 /dev/js0
Так будет комфортнее программам настройки.
Проведём хитрый эксперимент - наберите команду
cat /dev/js0
и понажимайте на кнопки джойстика, если на экране появляются какие- то символы, то можете вздохнуть спокойно - самое сложное позади. (:

III. Программная настройка джойстика.
Итак, мы добились самого главного: система "узрела" наше невероятное устройство, а сам девайс успешно посылает сигналы по нажатию кнопок! Теперь мы заставим эти сигналы преобразовываться в нажатия клавиш клавиатуры, тогда, как вы уже догадались, мы легко сможем задействовать джойстик в совершенно любой сфере, даже никак не связанной с играми, однако эту тему я оставлю на усмотрение вашей собственной фантазии...
Существует несколько программных пакетов, позволяющих выполнить такую задачу. Лично я считаю, что оптимальным является Rejoystick. Его нет в официальных репозиториях, однако deb-пакет доступен на сайте проекта.
Данная утилита выгодно отличается от других уже тем, что это не портированная версия windows-программы (в отличии например от joy2key), а изначально предназначена для ОС GNU/Linux, к тому же, она обладает интуитивным графическим интерфейсом на библиотеке GTK. Чего, собственно, Ubuntu'вцу ещё нужно?! (:
Будем считать, что deb-пакет Rejoystick вы уже установили. Теперь пишем в консоли команду rejoystick, появится окно программы. Теперь понажимайте кнопки джойстика, убедитесь, что по нажатию каждой из них, "загорается" определённая кнопка в окне программы. Назначьте клавиши клавиатуры, которые будут срабатывать по нажатию соответствующих кнопок джойстика.
Конфигурация rejoystick создана и настроена должным образом, однако программа ещё не запущена. Для этого необходимо лишь выполнить команду
rejoystick -d
которая, как не сложно догадаться, запускает "демон" этой замечательной утилиты. Можно прописать её выполнения в "Система"-"Параметры"-"Сеансы", тогда вам не нужно будет каждый раз беспокоиться о её запуске.

IV. Устанавливаем эмулятор консоли Sega MD2 и игры к ней.
В настоящее время, в репозиториях Ubuntu доступен один эмулятор консоли Sega Genesis - это Dgen. Текущая версия выпущена ещё в 2001-м году, нет графического интерфейса и, вообще, сложновата она в освоении. Честно говоря, я её так и не осилил. (:
К счастью, "дружиться" с этой штукой совсем не обязательно, потому что активисты из ubuntuforums.org периодически СОБИРАЮТ deb-пакеты портированной версии эмулятора под названием Gens (изначально предназначенного для OC windows), благодаря тому, что исходный код этого проекта открыт.
Скачиваем нужный пакет (рекомендую использовать ветку stable, поскольку версия unstable, действительно, очень unstable!), устанавливаем и запускаем программу (после установки, ярлык появится в меню "Приложения"-"Игры"). Первым делом, разумеется, идём в настройки клавиш управления: "Options" - "Joypads", убеждаемся, что выставлен 6-кнопочный джойстик и назначаем клавиши. Разумеется, эти клавиши должны СОВПАДАТЬ с теми, что вы указали в программе rejoytick.

[Изображение удалено администратором]

V. ИГРАТЬ!

Ну, вот мы и подошли к апогею, друзья!
Теперь, с возвышенным чувством и осознанием проделанных трудов, можно переходить к самому главному, ради чего мы всё это и затеяли! (:
Нам понадобятся, так называемые, Rom-файлы - образы игр для нашего эмулятора Gens. Запускать их очень легко: "File"-"Open ROM". Адреса сайтов, где можно скачать ROM'ы смотрите в ССЫЛКАХ. Помяну о правовой стороне вопроса: использование эмулятора, скачивание ROM'ов и т.д. считается законным, если у вас самих есть приставка Sega MD2 и картриджи с такими играми. Но я вас ни сколько и ни в чём не сдерживаю, это просто к сведению. (:

ССЫЛКИ:

Rom-файлы игр, а также множество информации по консолям и эмуляторам на русском языке:
http://bit16.ru
http://emu-land.net

Документация о пакете "Linux Djoystick Driver":
http://www.mjmwired.net/kernel/Documentation/input/joystick-parport.txt

Темы на ubuntuforums по Sega Genesis, в которые полезно периодически заглядывать:
http://ubuntuforums.org/showthread.php?t=290008
http://ubuntuforums.org/showthread.php?t=61745

Драйверы для windows:
Общепризнанно лучшим драйвером для windows считается PPJoy
http://www.geocities.com/deonvdw/Docs/PPJoyMain.htm
Но лично мне очень даже понравился драйвер XYZModeB
http://bit16.info/showthread.php?t=964


ПРИМЕЧАНИЯ:

: Всё же, если вы сомневаетесь в своих силах, обратитесь к родителям, родственникам или просто хорошим знакомым. Наверняка, хоть кто- то из вашего окружения, если и не является паяльщиком со стажем, то уж точно обладает, так называемыми, "золотыми руками". Вспомните мудрую поговорку: "Одна голова хорошо, а две лучше".

*Б: Если ваша материнская плата не является стандартной и в ней отсутствует параллельный порт (это бывает на "супер-современных" платах или платах портативных, например, предназначенных для корпусов стандарта Slim-ATX) - не расстраивайтесь, при наличии должного желания, вам ничто не помешает приобрести к магазине PCI-карту с LPT-портом, цена ~300 рублей.

*В: Сегодня в магазинах повсеместно продаются специальные "пасты", содержащие в себе сразу и олово, и канифоль. Использование такой пасты сэкономит вам массу времени и нервов, особенно если в паянии вы новичок. Обычно это выглядит как гибкая тонкая "проволока" серебристо-желтоватого цвета, закрученная в "пружинку". Однако, будьте бдительны: гнусные торгаши и аморальные китайские производители так и норовят подсунуть "обманку", в которых из длинного размера "проволочки", канифоль содержится только в самом начале, а когда вы немного попаяете, то дальше идёт одно лишь олово!

Заключение

В заключении, хочу немного поговорить о грустном.
"Чего же тут грустить?", спросите вы, а грустно становится от того, что и на поприще эмуляторов игровых консолей, OC GNU/Linux, на сегодняшний день, находится в положени "догоняющего". Дело в том, что выбор как дрйверов и схем пайки, так и эмуляторов для ОС windows несравнимо больше и предоставляемые ими возможности гораздо шире. Так например, к великому сожалению, наш драйвер db9 поддерживает подключение лишь одного джойстика и не более. А в windows, "набив руку" в пайке и проявив смекалку, можно обнаружить, что коннекторы джойстиков для Sega "подходят" к разъёмам компьютерных COM-портов. Тогда, порывшись в старых системных блоках, вы с успехом сможете сделать нечто вот эдакое:

[Изображение удалено администратором]

С таким устройством можно будет играть вдвоём, даже не проводя "вандальных" операций с джойстиками.
А эмуляторы тамошние предоставляют такие умопомрачительные возможности, как запись и воспроизведение демок (!) любимых игр, а также, вдохните поглубже, игру по сети!!! Например, на форуме bit16 и поныне проводятся напряжённые соревнования по различным играм для Sega! (:

Однако, давайте надеяться только на лучшее, ведь, как мы уже отметили, играющих пользователей ОС GNU/Linux становится всё больше, а будет спрос - будет и предложение!



Данное руководство я позиционирую лишь как обобщение всей той информации, которая известна мне об эмуляции приставки Sega на платформе РС, особенно применительно к любимой операционной системе Ubuntu GNU/Linux.
Конструктивные предложения и пожелания по улучшению статьи, ровно как и благодарности - всячески приветствуются. (:

Спасибо всем, кто дочитал до конца.
Добра!
« Последнее редактирование: 03 Ноября 2008, 10:07:59 от begemot »

Оффлайн Homeboy

  • Новичок
  • *
  • Сообщений: 39
    • Просмотр профиля
надеюсь руки дойдут,попробую.
автор молодец )

Оффлайн wertwerter

  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Спасибо, обязательно попробую

Оффлайн Chirkoff

  • Любитель
  • *
  • Сообщений: 79
  • Крутится, вертится шар голубой...
    • Просмотр профиля
 А возможно это сделать для USB? А то на ноутбуке нет не LPT не COM.
« Последнее редактирование: 29 Мая 2008, 14:20:37 от Chirkoff »

Оффлайн brill

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Врят ли получиться под ЮСБ, вот если бы использовался КОМ порт то можно было бы использовать PL2303, а вот насчет LPT даже не в курсе...

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
не понимаю, какой смысл так извращаться с переделкой геймпада сегодня, когда есть очень похожие полноценные геймпады?

просто идёте в магазин, берёте любой понравившийся, втыкаете его в USB и настраиваете в эмуляторе кнопки.

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Не, под юсб никак. Нужен будет специальный микроконтролер.
Читал в linuxformat'e про такую штуку как arduino. Вот ее бы можно было бы заюзать для этих целей!

Ps: есть и USB-to-LPT

Оффлайн Chirkoff

  • Любитель
  • *
  • Сообщений: 79
  • Крутится, вертится шар голубой...
    • Просмотр профиля
не понимаю, какой смысл так извращаться с переделкой геймпада сегодня, когда есть очень похожие полноценные геймпады?

просто идёте в магазин, берёте любой понравившийся, втыкаете его в USB и настраиваете в эмуляторе кнопки.

Эх не понять вам всю глубину наших глубин  :) Когда сам сделал это ж намного приятней. И будет не "похожий" а сеговский  :D

Ps: есть и USB-to-LPT

А это разве поможет? Модуль то будет слушать LPT, а не USB. Обидно блин...

Оффлайн kastigar

  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
> А это разве поможет? Модуль то будет слушать LPT, а не USB. Обидно блин...
Блин, так в этом и заключается суть этого переходника (ну и драйвера конечно же) - предоставить виртуальный LPT!!!

Оффлайн B@CKS

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
У меня почемуто не хочет работать джойстик. Имееться джойстик от Dendy (он же NES насколько я понял)  с драйвером db9 работать не хочет. После команды cat /dev/js0 выводиться строчка из непонятных символов и все, на нажимание кнопок джойстика ни какой реакции. Перечитав документацию о настройке драйверов   http://www.mjmwired.net/kernel/Documentation/input/joystick-parport.txt  я решил попробовать использовать драйвер gamecon.c
вот что у меня в modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

fuse
#lp

gamecon.map=0,2

# Added for Nero Linux device access
sg

Джойстик всеравно не работает. Хотя я не совсем понял с каким именем в папке /dev/input должно появиться новое устройство при использовании gamecon.c.
Помогите пожалуйста :'( Што у меня не так? может я не правильно написал modules?

P.S. Как не странно но в мастдае этот джойстик работает отлично 

Оффлайн aliftin

  • Старожил
  • *
  • Сообщений: 1398
    • Просмотр профиля
Спасибо за фак. Джостик не делал, но узнал у существовании GENS под linux и теперь радуюсь. Еце раз спасибо.
Если мы не можем до чего то дотянуться, мы виним в этом не свой рост, не отсутствие табуретки, а свою цель.

Оффлайн tolstik

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
А в этой схеме нужно использовать диоды или нет, ибо много чего прочитанного на эту тему говорит о том что надо...без них работает?

Оффлайн Compinfer

  • Любитель
  • *
  • Сообщений: 67
    • Просмотр профиля
2B@CKS
вместо gamecon.map=0,2
нужно написать gamecon map=0,2
т.е точку заменить на пробел
После перезагрузки в /dev/input появится js0
У меня такой джойстик от денди работает и в GFCE Ultra NES Emilator, и в Extreme Tux Racer и в приставочных эмуляторах для Windows под Wine

« Последнее редактирование: 26 Июля 2008, 00:05:47 от Compinfer »

Оффлайн vitorg

  • Участник
  • *
  • Сообщений: 165
    • Просмотр профиля
Эмулятор классный, но у меня ноут без LPT-порта, а по сему даже нет шанса подключить SEGA-джойстик таким образом, а очень хочется. Если кто-нибудь придумает способ подключения по USB, отпишитесь плз.
Ноутбук Panasonic CF-Y7 + Ubuntu 9.04

Оффлайн Nekko

  • Активист
  • *
  • Сообщений: 273
    • Просмотр профиля

 

Страница сгенерирована за 0.086 секунд. Запросов: 25.