Выберите язык

Многие компьютерные игры требуют управления не только джойстиком, но и введением команд с клавиатуры. Однако держать при себе во время игры оба эти устройства очень неудобно. Применив программируемую логическую матрицу (ПЛМ) 556РТ1, автор решил проблему, заменив "клавиатурные" команды комбинациями нажатий кнопок джойстика.

Игровые программы для компьютера ZX-Spectrum построены, как правило, таким образом, что после запуска они не входят автоматически в режим управления джойстиком; для этого приходится нажать несколько клавиш. Необходимость воспользоваться клавиатурой иногда возникает и в процессе игры. Например, чтобы начать новый сеанс, заменить игру, нужно нажать кнопку начальной установки. А это значит, что игрок не может с джойстиком в руках надолго отойти от компьютера, сесть в кресло или лечь на диван. Ради того, чтобы нажать одну-две клавиши, нужно довольно часто подходить к компьютеру.

Некоторые игры вообще не рассчитаны на управление только джойстиком. Приходится интенсивно использовать клавиатуру, которая от этого быстро выходит из строя. К тому же клавиши, управляющие направлением движения фигур и стрельбой, бывают выбраны неудачно (например, расположены на клавиатуре в ряд), что зачастую влияет на результат. Было бы заманчиво, не меняя программ, передать джойстику управление и такими играми.

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

В промышленной аппаратуре широко применяются пока мало известные радиолюбителям микросхемы ПЛМ специально предназначенные для реализации сложной комбинационной логики. Одна из них - 556РТ1 - может одновременно вычислять 8 логических функций от 16 входных переменных, причем последние могут входить в логические выражения в 48-ми различных комбинациях. По своему устройству она подобна ППЗУ той же серии 556. Чтобы реализовать нужные функции, с помощью программатора пережигают плавкие перемычки на кристалле микросхемы. Методику программирования, функциональные схемы программаторов и принципиальные схемы их блоков можно найти в [1-8].

Схема доработки компьютера ZX-Spectrum показана на рисунке.

Как расширить возможности джойстика

Джойстик (через инверторы микросхемы DD3) и клавиатура остаются подключенными к компьютеру обычным образом и продолжают выполнять свои функции. Контакты кнопок джойстика SB 1-SB5 дополнительно соединяют с входами А1-А5. а линии А8-А15 шины адреса процессора - с входами А7-А14 ПЛМ 556РТ1 (002). Вход А6 оставлен свободным. Выходы микросхемы 0D2 (с открытым коллектором) подключают к порту клавиатуры (KL0-KL4) параллельно последней и к линии начальной установки.

Нужно учитывать, что во многих вариантах компьютера ZX-Spectrum шина адреса процессора перегружена. Поэтому соединять с ней клавиатуру и дополнительную нагрузку (входы ПЛМ) рекомендуется через шинный формирователь КР580ВА86 (DD1). Иногда он уже имеется в компьютере, например, если к нему подключен дисковод.

Такой буфер повысит надежность работы клавиатуры. Дело в том, что для уменьшения нагрузки на шину адреса разработчики компьютера соединили входы порта клавиатуры с источником питания через резисторы большого номинала (15 кОм). В результате, после отпускания клавиши, паразитные емкости перезаряжаются слишком медленно, что приводит к ложным считываниям состояния клавиатуры. В некоторых играх этот дефект проявляется в виде хаотического перемещения курсора по экрану и самопроизвольного переключения режимов. После установки шинного формирователя и уменьшения номиналов нагрузочных резисторов до 1 кОм подобные явления устраняются полностью.

Когда выключатель SA1 разомкнут, выходы ПЛМ находятся в высокоимпедансном состоянии, и она не влияет на работу компьютера. Замкнув SA1, комбинациями нажатых кнопок джойстика можно дублировать действия некоторых клавиш. Это происходит за счет того, что "зашитая" в ПЛМ логическая функция повторяет на соответствующем входе порта клавиатуры состояние одного из разрядов адреса, имитируя таким образом соединение этих цепей контактами нажатой клавиши.

Программа прошивки ПЛМ приведена в табл. 1.

Как расширить возможности джойстика

Из 48-ми имеющихся в матрице элементов 16И использовано 30. Пример подготовки кодов программирования элемента, имитирующего нажатие клавиши "С", приведен в табл. 2.

Как расширить возможности джойстика

Требуется подать сигнал с линии А8 шины данных (вход А14 ПЛМ) на линию KL3 порта клавиатуры (выход В4 ПЛМ), если кнопки "Направо". "Налево" и "Стрельба" нажаты вместе.

В иезапрограммированной ПЛМ каждый из входов А1-А16 соединен с соответствующим входом элемента 16И через две плавкие перемычки, причем в цепи одной из них имеется инвертор. Если пережечь "инверсную" перемычку, аргумент поступит на вход элемента И непосредственно, а если "прямую" - проинвертироеанным. Пережигание обеих перемычек вообще исключает данный аргумент из реализуемой функции. В двоичных разрядах кодов программирования удаляемые перемычки обозначают логическими 1.

В нашем случае нажатым кнопкам джойстика соответствуют логические 0 на соединенных с ними входах ПЛМ. Для реализации функции И их необходимо проинвертировать. удалив "прямые" перемычки. А в разрядах, связанных с кнопками, в данной комбинации не нажатыми, удаляют "инверсные". Далее задают используемую линию шины адреса. Так как активный логический уровень на ней низкий, в соответствующем разряде кода также удаляют "прямую" перемычку, оставив "инверсную". Остается отключить неиспользуемые входы, удалив обе перемычки в их разрядах.

Матрица ИЛИ состоит из восьми (по одному на каждый выход) элементов 48ИЛИ, входы которых через перемычки соединены с выходами матрицы И. Таким образом, на выходе каждого из элементов 16И имеется восемь перемычек, пережигая которые его отключают от соответствующего элемента 48ИЛИ, а значит, и от выхода ПЛМ. Выходу В1 соответствует младший, а В8 - старший разряд кода программирования. Чтобы оставить нужное нам соединение с выходом В4, зададим код 0F7H. Если при программировании была допущена ошибка или возникла необходимость заменить одну функцию другой, пережигают все перемычки (код 0FFH). полностью отключая ненужный элемент И от выходов. Вместо него программируют один из оставшихся неиспользованными. Пока такие элементы есть, операцию можно повторять неоднократно, совершенствуя и дополняя алгоритм работы джойстика.

Обратите внимание, что кнопка "Налево" имитирует нажатие клавиши "5", независимо от состояния кнопки "Вверх". Аналогично кнопка "Вверх" имитирует нажатие клавиши "7", независимо от состояния кнопки "Налево". Поэтому одновременное нажатие этих кнопок для компьютера эквивалентно такому же нажатию упомянутых клавиш. Это относится и к кнопкам "Вниз" и "Направо", имитирующим клавиши "6" и "8". Для комбинации клавиш "О" и "5" потребовалось по два элемента И и ИЛИ. Это необходимо, чтобы в цепь KL0 не попал сигнал А11, а в цепь KL4 - сигнал А12.

Нетрудно заметить, что когда заданные клавиши нажаты, незаданные свободны, а на выбранной линии шины адреса логический 0. на выходе ПЛМ вместо требующегося логического 0 появится 1. Однако предусмотрена возможность проинвертировать выходные сигналы, прожигая перемычки матрицы НЕ. В нашем случае это необходимо сделать, удалив их все.

Аналогичным образом можно запрограммировать ПЛМ для работы с джойстиком, имеющим нормально замкнутые контакты. При необходимости с ее помощью можно подключить к компьютеру клавиатуру, внутренние соединения между клавишами которой не соответствуют "стандарту" ZX-Spectrum (например, клавиатуру "Электроника МС 7007").

Пользуясь расширенными возможностями джойстика, следует иметь в виду, что иногда вместе с нужной клавишей он имитирует нажатие нескольких других. Это происходит из-за того, что нажать все нужные кнопки одновременно невозможно и все промежуточные состояния, кратковременно возникающие в процессе набора комбинации, могут быть восприняты как нажатия соответствующих клавиш. К счастью, многие игровые программы не реагируют на это. Если же ввести требующийся символ никак не удается, попробуйте нажать кнопки в нужном сочетании при разомкнутом выключателе SA1. Затем, удерживая их, замкните выключатель.

Литература

  • Щелкунов Н. Н Дианов А. П. Процедуры программирования логических матриц. - Микропроцессорные средства и системы, 1986. № 2. с. 71 - 76.
  • Дианов А. П., Щелкунов Н. Н. Технические средства программирования логических схем. - Микропроцессорные средства и системы. 1986. № 2, с. 77 - 80.
  • Лукьянов Д. А. Схемотехника универсальных программаторов ПЗУ. -Микропроцессорные средства и системы. 1985. № З.с. 84 - 88.
  • Солонин В. Ю. Самоконтроль универсальных программаторов. - Микропроцессорные средства и системы. 1990, № 1. c. 51, 52.
  • Солонин В. Ю. Устройство для контроля оперативной памяти. Описание изобретения к авторскому свидетельству № 1292040.- Бюллетень "Открытия, изобретения...". 1987. № 7.
  • Солонин В. Ю. Программатор. Описание изобретения к авторскому свидетельству № 1372356. - Бюллетень "Открытия, изобретения,1988, № 5.
  • Солонин В. Ю. Программатор. Описание изобретения к авторскому свидетельству № 1654869. - Бюллетень "Открытия, изобретения, ...", 1991, № 21.
  • Солонин В. Ю., Бурьян С. В. Формирователь временных диаграмм. Описание изобретения к авторскому свидетельству № 1817133. - Бюллетень "Открытия, изобретения...",1993, № 19.
  • Автор: В.Солонин, г.Конотоп, Украина