PDA

Просмотр полной версии : Геймпад для Специалиста



CityAceE
28.11.2025, 12:56
В то время, как Лик был моим единственным компьютером, среди прочего, конечно же хотелось и поиграть на нём. А как играть на такой клавиатуре? И даже несмотря на то, что играть на "нарисованной" клавиатуре Лика было практически нереально, я всё же ухитрялся это делать. Никаких других интерфейсов типа выхода под джойстик, у Лика не было. Поэтому я приколхозил джойстик самостоятельно, выведя разъём параллельно кнопкам курсора и пробела. По удачному стечению обстоятельств эти кнопки висят на одной линии, так что подключение не составило никакого труда. Многие игры как раз использовали для управления именно курсорные клавиши и пробел. Многие, но не все. Была пачка неплохих игр, у которых было нестандартное управление I, T, X, B, @. На фоне отсутствия интересных игр, DUNGEON из того пакета была вполне себе! В то время я не имел ни малейшего представления как можно переделывать управление. И вот ради DUNGEON и ещё нескольких игр от тех же авторов, я вывел ещё один разъём - ITXB@. Благо что и эти кнопки были на одной линии, так что проблем с подключением тоже не возникло. Вот так мой Лик и обзавёлся двумя портами джойстиков.

Так было в 91-м году, когда всякие разные джойстики можно было приобрести в магазинах. Позже народ начал покупать геймпады от Денжи/Сеги, срезать микросхему и напаивать провода минуя её. У меня и у самого до сих пор лежит такой (переделанный из дохлого!) манипулятор для Спектрума. Только вот жил в проводе не хватает, и провод нужно целиком менять на подходящий. А ведь было бы неплохо иметь возможность подключать стандартный геймпад от ретро-консолей без всяких переделок, да ещё и получить больше, чем одну кнопку.

И вот при подключении мыши к Специалисту через ДОПОЛНИТЕЛЬНЫЙ (!!!) порт К580ВВ55А, который автор Специалиста отвёл под программатор, у меня появилась идея помимо мыши подключить ещё и геймпад от Dendy.

Идея оказалась вполне рабочей! Помимо самого геймпада и разъёма для него понадобится только компактная и недорогая (~150 руб.) плата Arduino Nano. Прошиваем Arduino, соединяем всё проводами и готово!



ВВ55 Arduino Nano
PA0 D4
PA1 D5
PA2 D6
PA3 D7
PA4 D8
PA5 D9
PA6 D10
PA7 D11
+5V VIN
GND GND

Геймпад Arduino Nano
DATA A0
LATCH A1
CLOCK A2
+5V 5V
GND GND


https://pic.maxiol.com/thumbs2/1764324399.780858384.58055.gif (https://pic.maxiol.com/?v=1764324399.780858384.58055.gif&dp=2) https://pic.maxiol.com/thumbs2/1764324268.780858384.arduinonanopinout76.png (https://pic.maxiol.com/?v=1764324268.780858384.arduinonanopinout76.png&dp=2) https://pic.maxiol.com/thumbs2/1764324138.780858384.ufopinout.jpg (https://pic.maxiol.com/?v=1764324138.780858384.ufopinout.jpg&dp=2)


После этого по адресу 0xF000 будет читаться состояние геймпада:

Бит 0: Кнопка A
Бит 1: Кнопка B
Бит 2: Кнопка SELECT
Бит 3: Кнопка START
Бит 4: Кнопка UP
Бит 5: Кнопка DOWN
Бит 6: Кнопка LEFT
Бит 7: Кнопка RIGHT

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

Прежде всего, это визитная карточка Специалиста - игра ЗОО.

Управление от геймпада добавлено не вместо, а в дополнение к управлению клавиатурой.

Основной экран:
SELECT - вызов экрана помощи
START - запуск игры

Экран помощи:
Любая кнопка - выход

Игра:
Крестовина - направления
A - выстрел влево
B - выстрел вправо
SELECT - выход


Ну и, конечно, игра DUNGEON. Куда ж без неё!

Крестовина - направления движения
А, B - огонь
SELECT - приостановить
START - продолжить

Стоит сделать оговорку, что если поставить игру на паузу с помощью SELECT, то продолжить можно только кнопкой START. Аналогично и с клавиатурой, S - пауза, Q - продолжение. То есть поставить на паузу с помощью геймпада, а продолжить с помощью кнопки на клавиатуре не получится. Дело в том, что пауза ставится прямо в цикле опроса конкретного управления. Я не стал заморачиваться. Тем более, что там есть ещё одно место, где без клавиатуры не обойтись - перед каждым запуском новой игры вас просят ввести с клавиатуры ваше имя. Если ничего не вводить, а просто нажать Ввод, то в таблице рекордов будет красоваться имя "ОСЕЛ".

Ну и уж коли вспомнил тут про DUNGEON, то расскажу ещё про неё. Я-то себе накачал игр для Специалиста с Интернета. И у меня есть аж две версии. В обеих управление не такое, каким я его помню, то есть переделанное. И, судя по всему, переделанное разными людьми.

https://pic.maxiol.com/images2/1764323905.780858384.1.png https://pic.maxiol.com/images2/1764323954.780858384.2.png

Но я-то достоверно помню, что управление было ITXB@! Что ж нашёл свою кассету с этой игрой и оцифровал её. И конечно же управление там именно такое, каким я его запомнил.

https://pic.maxiol.com/images2/1764324032.780858384.3.png

Ещё из нюансов. Моя версия не запускалась с адреса загрузки, а с ней шёл адрес запуска G5720. У меня так на кассете записано было, так я всегда и запускал эту игру, даже не задумываясь почему так. Сейчас я посмотрел, что же там в начале, а вначале оказались три подряд команды JP (HL). И не похоже, что это кто-то случайно затёр. Возможно, это сами авторы так сделали, создав эдакую защиту от копирования. Если ты просто так тупо скопируешь, то запустить игру не сможешь, не зная адреса запуска. О том, что моя версия игры более чистая говорит и тот факт, что в Интернетовских версиях в том месте, где располагается таблица рекордов уже забито имя, состоящее из четырёх пробелов. В моей версии там нули. В игре очень много текста. Так вот когда я стал побайтово сравнивать свою версию, то увидел, что в интернетовских версиях некоторые буквы в тексте испорчены. Такое ощущение, что кто-то запустил игру, поиграл в неё и в таком виде сохранил на кассету. Так что за основу я взял именно ту версию, которую оцифровал со своей кассеты. И конечно же, помимо того, что я добавил туда управление от геймпада, я сделал и запуск с нулевого адреса.

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

P.S. Также прилагаю простую программу для тестирования подключения на Специалисте - она просто выводит на экран состояние порта, если были какие-то нажатия.

CityAceE
15.12.2025, 20:16
Всё тестировал на единственном имеющемся у меня геймпаде. Он выполнен в виде геймпада от SEGA. Там кнопка A слева, а B справа. Я так для собственного удобства и адаптировал игры. А попутно заказал в Китае геймпад, похожий на NES'овский. И там кнопки A справа, а B слева. Соответственно, пострадал геймплей ЗОО. В принципе, я был к этому готов, и поэтому сделал своп кнопок A и B по нажатию на SELECT+START. Настройка запоминается и после выключения компьютера.

Пока не выкладываю, так как я изменил подключение самого Arduino. Возможно, схема будет ещё меняться. Потом выложу всё скопом.