Найти тему
Дюк Юсупов

Переделываем сеговский геймпад для ZX Spectrum и добавляем поддержку всех кнопок

В детстве, как я уже ранее упоминал, у меня был ZX Spectrum и был к нему такой джойстик:

  Кнопка на самом деле была только одна: две верхние задублированы, а нижние - обманки
Кнопка на самом деле была только одна: две верхние задублированы, а нижние - обманки

И такой был даже не один (все одной модели, другие у нас в городе не продавалсь), но они ломались так быстро, что я (для экономии бюджета для покупки игр) просто пересел на клавиатуру, на которой до сих пор и играю даже на ПК (ну разве что мышь добавилась). Тогда я даже не догадывался, что практически любой геймпад от Денди или от Сеги можно было переделать для Спектрума. Разъемы-то разные и кнопок больше - явно не пойдёт, думал в то время я. Даже при их разборке была видна разница - в джойстике для Спектрума были просто провода, а в геймпадах какая-то плата и даже с микросхемой. Это однозначно убеждало меня в то время, что нельзя просто так взять - и сделать геймпад для ZX Spectrum. Наверное, они где-то были, но в том практическом информационном вакууме (в который иногда прорывались электронные журналы Спектрофон и ZX Format) мне было ничего достоверно не известно. Я знал, что есть разные типы джойстиков, точнее их интерфейсов (об этом можно было понять из выбора управления в играх), но что это такое и имеет ли оно отношение к форме самих джойстиков, количеству кнопок и т.п. я просто не знал.

Это сейчас у нас в каждом мобильном есть интернет, есть та же Википедия (доверяй, но проверяй!), есть поисковики и прочие достижения технического прогресса, поэтому мы знаем, что было несколько интерфейсов, из которых остались в употреблении только два: Sinclair-джойстик и Kempston-джойстик. Всякие Fuller, Protek и AGF не пережили столкновения с конкуренцией в виде вышеуказанных стандартов и почили в бозе. Зато эти оба-два успешно дожили не только до 90-х, но даже до сегодняшних дней - их можно встретить даже в современных клонах Спектрума. Отличаются они, кстати, принципиально: Кемпстон функционирует через порт #1F и из-за этого возникают проблемы в тех Спектрумах, в которых их создатели не предусмотрели полную дешифрацию портов. Ох, как же я с этим намучался с Дельта-С 02! А вот Синклер-джойстик был, по сути, просто внешним выводом клавиатуры (пересечение двух адресных линий и линий данных D0-D4 дает нужную клавишу): в нём просто дублировался верхний ряд клавиатуры (на самом деле это тоже порт, но с адресом #FE), т.е. одна адресная линия (A11) уходила на Sinclair-джойстик 1 (клавиши 1, 2, 3, 4, 5), а другая (A12) на Sinclair-джойстик 2 (клавиши 6, 7, 8, 9, 0):

-2

Внешне сами джойстики, которые к этим интерфейсам подключались, были весьма похожи и понятно почему - тяжкое наследие Atari 😉 Даже интерфейс Kempston появился как ответ на запрос к подключению к Спектруму тех самых джойстиков:

-3

На мой взгляд, кстати, весьма неудобных - нет кнопки на ручке, т.е. надо держать двумя руками, короткий стик, платформа, которая наклоняется вместе с ручкой... такое себе в общем-то. Но сам Клайв Синклер, который тогда ещё совсем не был сэром, вообще не воспринимал своё детище как игровое устройство, поэтому согласился на добавление туда разъемов джойстиков только потому, что иначе упали бы продажи - а на тот момент продавать компьютеры, уступающие своим конкурентам сразу по многим показателям (кроме цены) становилось смерти подобным - несть числа таким конторам и маркам, которые в 80-е просто перестали сущестовать. А по поводу цены: так это дело такое - ведь торговые войны никто не отменял. Но Синклер добавил интерфейс для подключения джойстиков не просто так - походу предполагалось ещё и заработать на самих джойстиках, потому как они были несовместимы по сигналам с джойстиками Atari (ну явно неспроста!), да и потребоваться их могло целых две штуки, потому что в ZX Interface 2, а потом и в ZX Spectrum 128 были добавлены сразу два порта, а не один!

На самом деле будущий сэр Клайв неплохо так "угадал с заменой": на реализацию джойстиков не требовалось практически ничего, и я даже не знаю зачем была использована проприетарная микросхема AMSTRAD 40057, ведь для вывода наружу двух адресных линий и пяти линий данных вполне было бы достаточно диодов. Преимуществами же было - наличие сразу двух джойстиков (чего у Кемпстона не было), возможность играть с клавиатуры при отсутствии самих джойстиков, да и просто возможное переназначение клавиш, что опять же для Кемпстона было невозможным. Поэтому я просто не понимаю - почему всё-таки выжил этот самый Kempston... Наверное, обычные пользователи просто не понимали, как подключить джойстики от Atari к ZX Spectrum 🧐 без Kempston-интерфейса... Или уже было продано достаточное количество перифирии, чтобы издатели игр требовали поддержку и этого интерфейса тоже.

Возвращаясь же к настоящему - меня в своё время терзал вопрос: где взять нормальный джойстик или геймпад для ZX Spectrum (когда у меня только появился ZXDOS+)? Тогда я остановился на M30 2.4g от фирмы 8BitDo - на ZXDOS+ это оказался самый удобный геймпад, да ещё и беспроводной. Однако, когда я начал покупать разные оригинальные и не очень Спектрумы, оказалось, что не во всех из них он стабильно работает: где-то он просто не виделся, а в ZX Spectrum +2 он просто сжёг часть микросхемы. Полноценно он заработал только в ZX Evolution, где я его и оставил. Остальные джойстики, которые я до этого рассматривал, не шли ни в какое сравнение с ним, но я не сдавался!

Я перебрал несколько вариантов, но с точки зрения качества (и не высокой цены) выбрал для себя пару проводных геймпадов от конторы Retro Genesis:

По той цене, по которой их сбывает иногда Мегамаркет - это просто топчик. Первый вариант - вообще щупается как оригинал, хорошо ложится в руку и прям очень приятно на нём играть. У него низкие кнопочки, которые не дребезжат, и крестовина удобно сидит под пальцем и легко управляется. Единственный косяк - в крестовине внутри пустое отверстие (зачем?) и у меня в одном из геймпадов во время отчаянных заруб в MFF эта самая крестовина просто отвалилась. Решение правда простое как топор - просто ввинчиваем до самого основания туда шуруп или болтик - и всё, можно снова играть. Рекомендую сразу так и сделать, не дожидаясь поломок, и эта деталь прослужит дольше контактных площадок.

Вариант второй - специфический. Он действительно для файтингов и игр жанра beat 'em up, но размер у него для очень большой руки. Может подразумевалось, что играть можно будет положив эту штуку на стол, но нет, крестовина явно под большой палец и нет противоскользящих наклеек. Мне не зашло. А левый - отличный по использованию с любыми играми, но для Спектрума не подходит - в играх будет дёрганье в разные стороны. Насколько я понимаю, более-менее работают геймпады от Sega Mega Drive 2, но это не тот случай.

-5

Пришлось вскрывать и препарировать пациента.

Ну и проделывать все те манипуляции, которые нужны чтобы любой геймпад переделать для ZX Spectrum: то бишь, лишение мозгов! Да, отрезаем микросхему-каплю от всех дорожек на плате. Отрезать только +5В не достаточно, остальные сигналы умеют гадить в микросхему при подведённой земле. А землю отрезать сложнее чем остальные сигналы. И потом навесными проводками подключаем 5 сигналов (вверх-вниз-влево-вправо-огонь) к нужным контактам на платке.

Для этих геймпадов следующая расцветка проводов:

  1. красный (вверх)
  2. белый (вниз)
  3. коричневый (влево)
  4. желтый (вправо)
  5. синий (+5)
  6. черный (огонь B / A)
  7. серый (SELECT)
  8. фиолетовый (земля)
  9. зеленый (огонь С / START)
-7

Но меня всегда интересовал момент - а почему всего одна клавиша для огня в джойстиках Спектрума? Ведь во многих играх при назначении клавиш клавиатуры предлагалось больше клавиш! А если выбирался джойстик, то нужно было задать эти клавиши на клавишах. При активной игре это реально напрягало. Хотелось чтобы эти клавиши можно было бы назначить на кнопки джойстика. Тем более что у того же Денди, как говорится, из коробки на джойстике были 4 кнопки, а у Сеги-то вообще могло быть шесть! Да, Спектрум это не игровая приставка, но чувствовалась явная ущербность при выборе джойстика в игре...

На самом деле, конечно же, попытки сделать джойстик с несколькими кнопками предпринимались. Один из вариантов - расширение Kempston-интерфейса: на трёх свободных битах порта #1F. Тут в чём проблема? Требуются доработки прошивок разных современных клонов для поддержки этого расширения (я видел для ZXDOS+ и TS-Config) и, самое главное, нужна поддержка играми. Рассчитывать на то, что все игры, где используется больше чем 5 клавиш управления, как-то будут задействованы - не приходится. Узкий стандарт - мало игр, такова селя ви.

Другой из вариантов - задействовать расширение Sinclair-джойстика: например - механически программируемый джойстик. Есть даже практическая реализация этой схемы: ZX-PAD, в котором предлагалось задействовать все кнопки геймпада для Sony Playstation. Идея неплохая, но у меня-то интересует геймпад для Sega Mega Drive! Но этим путём я всё-таки решил пойти, творчески его переработав: вывести на порт Синклер-джойстика дополнительную адресную линию и таким образом получить 5 дополнительных действий, которые можно вывести на кнопки сеговского геймпада B, C, X, Y, Z, если изначальный огонь оставить на A (потому на этом геймпаде проще землю отрезать от основного полигона). Вот так это выглядит на самом геймпаде:

На фото кнопки A - 0 или 5 (в зависимости от порта Синклер-джойстика), B - H, C - J, X - ENTER, Y - K, Z - L (если адресная линия A14) или B - B, C - N, X - SPACE, Y - M, Z - Symbol Shift (если адресная линия A15)
На фото кнопки A - 0 или 5 (в зависимости от порта Синклер-джойстика), B - H, C - J, X - ENTER, Y - K, Z - L (если адресная линия A14) или B - B, C - N, X - SPACE, Y - M, Z - Symbol Shift (если адресная линия A15)

В правой части отрезаем землю, которая нам пригодится для дополнительной адресной линии (её выводим на 7 контакт штекера DB-9, т.е. на серый провод). Дополнительные проводки к кнопкам B, C, X, Y, Z подпаиваем к тем же проводкам, что шли на крестовину и кнопку A. В качестве проводков лучше использовать тонкие одножильные, которые могут удерживать форму, потому что в противном случае замучаетесь укладывать и фиксировать. Теоретически, у нас есть ещё одна свободная линия (9-й контакт, зеленый провод) и можно подвесить ещё пару оставшихся клавиш (START и MODE) на эту линию. Почему бы и нет?

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

Новодельная плата Дельта-С 02 на 52 микросхемах
Новодельная плата Дельта-С 02 на 52 микросхемах

Если вход типа DB-9, то на его 7 контакт нужно вывести одну из адресных линий клавиатуры - тут уж на ваш вкус. A11 и A12 уже задействованы, поэтому выбирать можно из 6 оставшихся, вопрос только в удобстве. Я вот, например, выбрал A15 для задействования пробела, однако вариант с Enter мне тоже кажется неплохим. И если рассчитывать на то, что играть будем против противника на клавиатуре (QAOPM/Sp), то, действительно, A8 (V, C, X, Z, CS) или A14 (H, J, K, L, ENTER) выглядит более интересно. И для этого достаточно всего лишь один провод от коннектора клавиатуры внутри Спектрума кинуть на разъем Синклер-джойстика. А если у вас отечественный клон ZX Spectrum и используются разъёмы типа СГ-7 (я всё время удивлялся - зачем его использовать, если используются всего 6 проводков, а в разъеме СГ-5 есть пять контактов + ещё корпус, но вот тут это пригодилось), то можно этот проводок припаять к 7 входу этого разъёма:

Разъем СГ-7 (распиновка для Дельта-С, но, возможно, она стандартная для всех отечественных клонов):

  1. Опрос
  2. Влево
  3. Вправо
  4. Вниз
  5. Вверх
  6. Огонь
  7. пусто

Ну а если надо задействовать ещё две дополнительные кнопки: у нас же ещё в этом разъеме есть ещё и корпус для вывода через него ещё одной адресной линии! Надо только ещё переходник (если он есть) с СШ-7 на DB-9 тоже доработать в этом направлении.

После этого в любой игре, которая позволяет выбрать клавиши для управления, можно задать свои кнопки с джойстика. Данная доработка просто ничего не стоит, и по сложности - элементарная (что геймпада, что самого компьютера), а работает практически во всех играх без их допиливаний. Отличный результат! Назову новый вид джойстика - Yusupov-joystick 😎 и пусть использует вышеописанную доработку любой, кому это потребуется, и да прибудет с ним Сила Спектрумизма!

P.S. Если вы поставите лайк или оставите дельное замечаний или вопрос в комментариях, то этим поспособствуете распространению данного материала. Если что-то не понравилось, то тоже пишите, буду мотать на ус, если критика будет конструктивной. Не приветствуется только хамство и "душные" вопросы в стиле "а зачем тебе это?" Уж если автор что-то делает и пишет об этом, значит это ему доставляет удовольствие и он хочет поделиться им с другими :)