Найти тему
RahostStudio

Полный Kempston джойстик для Дельта-С

После удачного подключения джойстиков от «Сеги» к моему компьютеру Дельта-С-02 (52ИС), о чём я писал в этой статье, всплыла информация, что у Дельты не полная поддержка Кемпстона. Есть ещё 3 бита, которые заблокированы, но которые можно использовать! В этой статье расскажу и покажу, как я разблокировал и заставил работать джойстик Сеги на Дельте на все 8 бит.

Всё началось с того, что я начал писать программу на бейсике для теста Кемпстона (никогда в бейсике не работал, вообще кроме команды LOAD ничего не знаю) и поделился промежуточным результатом в Дельта-чате. Там мне и подсказали, что не плохо бы прикрутить поддержку всех битов. Что? Ещё что-то кроме 5-ти кнопок? Да! Стал изучать вопрос, и действительно, есть даже игры с поддержкой 8 бит Кемпстона, например Alien Neoplasma, там используются 8 кнопок джойстика.

Кстати, программку я писал изначально не на Дельте, а на Скорпионе, который понемногу собираю. Так вот, на Скорпионе, как и положено, порт 31 (порт Кемпстона) выдает число 0 при не нажатых клавишах, но, опробовав свою программу на Дельте, получил другой результат: вместо ноля порт выдаёт число 224! И по этой причине не удалось побегать в Неоплазме на Дельте (на Скорпе кемпстон работает, но не хватает этих самых 3-х битов). Ещё умные люди подсказали перевести это число, 224, в двоичный формат, и что я увидел? А вот что: 11100000. Это значит, что три старших бита где-то притянуты к лог. 1.

Изучая схему компьютера, нашел микросхемы, ответственные за обработку Кемпстона, это DD15 и DD16, мультиплексоры К1533КП11А, причем у микросхемы DD16 обнаружились 2 неиспользованных входа. Оно? Похоже на то. Но нужных битов должно быть три!

Часть схемы компьютера
Часть схемы компьютера

Здесь меня смутил сигнал на ноге 10, некий СОТ, с подтяжкой на +5 вольт. Поискав его на схеме и ничего не обнаружив, решил, так сказать, в натуре найти его на плате. И нашел! Этот контакт идёт на не распаянную гребёнку с левой стороны платы, как бы на вывод принтера, и после, уже на схеме, его нашел, он называется GOT (готовность). Вот ведь косячная схема немного. Что ж, попробовал посадить эти три входа на землю (предварительно отпаяв резистор R21), и после этого порт 31 стал мне показывать, как и полагается, 0.

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

Таблица
Таблица

Объясняю. За активацию доп. кнопок отвечает сигнал Select, в зависимости от состояния этой линии, доступны те или иные кнопки на контактах 6 и 9 джойстика. Для полного понятия, как всё это работает, была найдена такая схема:

Схема джойстика. У меня больше кнопок, но основной принцип работы такой же.
Схема джойстика. У меня больше кнопок, но основной принцип работы такой же.

Видно, что в джойстике установлен мультиплексор и нужен демультиплексор, чтобы появилась возможность задействовать все кнопки. Хотя на моём джойстике 12 кнопок, но интересуют именно 8 (крестовина, А, В, С, start).

Итак, я приступил к разработке схемы демультиплексора. Когда-то, очень давно, я изучал различные логические элементы (триггеры, счетчики и др.) по журналам «Моделист-конструктор» начала 90-х годов, но так как был юн, ничего не запомнил, да и практического материала не хватало. Но всё же методом научного тыка, на простейших элементах сделал схему этого демультиплексора! Мне понадобилось три микросхемы ЛИ1 (логика И) и две микросхемы ЛН1 (логика НЕ). Схема получилась следующая:

Моя схема демультиплексирования.
Моя схема демультиплексирования.

Небольшие пояснения по схеме. На выходных сигналах джойстика, как и в предыдущей статье, установлены инверторы. Задающий генератор выполнен на микросхеме ЛН1 и подаёт частоту около 50-ти герц на линию Select джойстика и схему. Далее уже на элементах И происходит разделение нужных сигналов. После можно видеть диодно-конденсаторно-резисторный фильтр. Это нужно для превращения меандра, от которого я не смог избавится, в логическую единицу. Конечные И-элементы нужны для более лучшего исправления лог. 1, так как после фильтра сигнал немного плавающий (но компьютер такой сигнал принимал нормально). В таком виде схема прекрасно работает, проверил всё в той же игре Alien Neoplasma.

Для сборки своей схемы использовал снова макетку 5х7 см:

Плата на макетке, соединения МГТФ.
Плата на макетке, соединения МГТФ.

Не нашёл другого места и способа установки, как посадить плату термоклеем на кнопку сброса. Гнездо для джойстика врезал в правую часть корпуса, выходные провода подпаивал прямо к ножкам микросхем DD15, DD16.

Набирая этот текст, подумал, что в текущем положении есть небольшой косяк. У меня остался подключенным штатный порт Кемпстона, и если джой подключить туда, то при нажатии кнопок +5 вольт пойдёт на выходы логических элементов ЛИ1, и это неправильно. Тут нужно либо ставить диоды, либо отключать штатный разъём физически. Кстати, ещё подумал, может, из штатного Кемпстона сделать ещё один Синклер, который №1? Думаю, это возможно, и у компьютера появится полный зоопарк поддерживаемых джойстиков.

Уже заканчивая собирать свою схему демультиплексирования, мне подкинули идею, что можно всё это безобразие сделать проще, на Ардуино. И так можно, что ли?! Оказывается, да. Схема подключения здесь проще, плата Ардуино нано меньше по размеру, и работает всё на отлично.

Схема подключения
Схема подключения

Ещё бонусом через Ардуино можно использовать кнопки X, Y, Z и Mode как дублирующие, если настроить это в коде.

Теперь программка для теста. Я уже сказал выше, что в бейсике полный ноль и прогу написал по-простому, на командах PRINT. Вообще просто для теста понадобится три строки:

  1. 10 PRINT IN 31
  2. 20 CLS
  3. 30 GO TO 10

Этого достаточно, чтобы посмотреть состояние порта 31 и считать нажатия кнопок. Но мне захотелось разных плюшек, поэтому в своём варианте я добавил условие для заблокированных 3-х старших битов с предупреждением, а также нарисовал что-то похожее на джойстик.

Программа на бейсике.
Программа на бейсике.

Немного топорно, но я не умею по-другому. Если кто-то захочет улучшить мой код, я буду только рад.

Ну а теперь настало время поиграть! Alien Neoplasma ждёт меня:

Играю ))
Играю ))

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

Что ж, на этом всё. Благодарю ребят из телеграм-группы, а особенно @Sonic и @SLFNT за помощь, консультации и придание верного направления движения.

Код для Ардуино: SegaController.zip
Бейсик программа:
kemp8bit.trd

Предыдущая статья по джойстикам:

Статья на моём сайте:

Полный Kempston джойстик для Дельта-С > Rahost Studio