EN
shiru8bit
shiru8bit
61 subscribers
goals
22 of 32 paid subscribers
По достижению 32 платных подписок любого уровня сделаю небольшую демку для 32-битной 3DO, перечисляющую имена героев!
3 of 4

Arduino вместо джойстика Сеги: ковыряния #1

Взялся за вторую половину (из трёх-четырёх) задачи с подключением джойстиков. Теперь мне нужно имитировать с помощью Ардуины обычный Сеговский джойстик, в трёхкнопочном и шестикнопочном режимах.
В качестве исходного джойстика у меня тоже Сеговский, и мне нужно, чтобы он работал как при прямом подключении, но только через трансляцию интерфейсов на Ардуине.
Для начала соорудил стенд: тот же маленький телевизор, стародельная Сега Pro 16, Flash-картридж с парой тестовых программ, показывающих состояние джойстиков.
Изначально я делал разъём-переходник DB9 для подключения приставки к Ардуине макетными проводами, но это оказалось неудобно: проводки слишком короткие.
Был найден другой выход: у меня есть два рабочих новодельных джойстика. Отрезал от одного провод и припаял его конец к фрагменту цанговой панельки, а её через макетные провода соединяю с Ардуиной. Таким образом удалось расположиться более удобно. Джойстик я потом починю обратно, когда закончу.
Далее началась сложная часть, программная. Попытка реализовать задуманное через digitalRead и digitalWrite провалилась. Дело в том, что на Сеге используется мультиплексирование управляющих линий, их состояние зависит от сигнала выборки. Нужно выставлять состояние всех шести линий сразу же по изменению этого сигнала. Переделал на прямую работу с портами, скорости хватило, эмуляция трёхкнопочного режима заработала стабильно.
С шестикнопочным режимом всё значительно сложнее. В железе он реализуется просто, а вот в программной имитации совсем нет. Режим реализован так: если код дёрнет линию выборки несколько раз за короткое время, в очередной раз джойстик выдаёт коды дополнительных кнопок вместо обычных. Если же код делает это редко или медленно, джойстик работает как трёхкнопочный.
До кучи есть ещё режим аппаратной совместимости с трёхкнопочным джойстиком внутри шестикнопочного: при включении питания нужно удерживать загадочную кнопку MODE, и тогда он будет работать как обычный с тремя кнопками. Это нужно для совместимости с некоторыми играми.
Изрядно повозившись, я смог заставить работать свой имитатор джойстика и в шестикнопочном режиме тоже. Но есть проблемы, причин которых я пока не понимаю. Первая: Ардуина часто перезагружается, питание от консоли не помогает. Возможно дело в прямой работе с портами. Вторая: в MK3 джойстик работает в меню, но не на экране выбора персонажа. Вероятно там какие-то другие тайминги.
Начало положено, но путь к полному решению пока непонятен. Разбираюсь дальше.
avatar
По итогу удалось решить проблему с перезагрузкой Ардуинки? Или ответ будет в следующем выпуске? На счет шестикнопочного режима - может на экране выбора персонажей он какой то другой паттерн опроса?
avatar
Санёк Сушка | Саня, Тащи!, удалось понять причину перезагрузок, но полностью победить пока нет. Решение понятно. А вот с опросом пока медленно зверею. Да, там другой паттерн опроса, и он в разных играх разный, в том и дело.

Subscription levels

Микро 16

$ 0,2 per month
Просто потому что нельзя 8. Даже самая малая поддержка важна. Спасибо!

База 128

$ 1,6 per month
Для тех, кто просто хочет поддержать. Спасибо!

Супер 256

$ 3,2 per month
Для тех, кто хочет поддержать. Спасибо!

Кило 320

$ 4 per month
Для тех, кто сильно хочет поддержать. Спасибо!

Мега 640

$ 8 per month
Для тех, кто очень хочет поддержать. Спасибо!

Гига 1024

$ 12,8 per month
Для тех, кто крайне хочет поддержать. Спасибо!
Go up