Виберіть свою мову

Багато комп'ютерні ігри вимагають управління не тільки джойстиком, але і введенням команд з клавіатури. Однак тримати при собі під час гри обидва ці пристрої дуже незручно. Застосувавши програмовану логічну матрицю (ПЛМ) 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.
  • Автор: Ст. Солонін, р. Конотоп, Україна