Virtual Worlds
#01
31 декабря 1999 |
|
Железо - Глюки клавиатуры: почему в играх для двух игроков, при игре вдвоем, компьютер не слушается вашего управления и информация о том, как этого избежать.
┌────────────────────────────┐ │ ░▒▓ Ошибки клавиатуры. ▓▒░ │ └────────────────────────────┘ (C) Time Keeper/MHCG Здравствуйте, уважаемые поль- зователи величайшего компьютера всех времен и народов - SINCLAIR ZX SPECTRUM'а. ( я думаю, что не очень громко сказал )... Сегодняшний наш с вами разго- вор мы начнем с одного из самых важных устройств, входящих в лю- бой компьютер любой марки. Мы поговорим о клавиатуре... Ведь ни на одном компьютере нельзя работать без клавиатуры т. к. клавиатура является основ- ным устройством передачи данных от пользователя к компьютеру. Оказывается, в Спектруме не все так идеально, как может пока- заться на первый взгляд... У клавиатуры Спектрума есть один очень серьезный недостаток. Я называю его "перекрыванием клавиатуры". Наверное многие из вас начина- ли свой творческий путь на Спектруме с того, что по полдня, а то и весь день, с утра и до позднего вечера играли в игруш- ки. Уже тогда существовало много занимательных игр, рассчитанных на двух игроков. Мне всегда нра- вилось посидеть часок другой вместе с другом за компьютером и поиграть в Double Dragon, Golden Axe и др. Но у всех подобных игр есть один большой недостаток: вы, наверное, замечали, что иногда при игре вдвоем, ваш игрок сов- сем вас не слушался. Например вы нажимали влево, а он ни с того, ни с сего вдруг начинал прыгать. Причем подобные казусы случались чаще всего когда в игру играли двое игроков. Это и есть "перек- рывание клавиатуры". Раньше, как и любой другой неопытный user, я думал, что этот трабл возникает в результа- те того, что програмисты непра- вильно опрашивают клавиатуру, но как я был разочарован, когда научившись программировать на ассемблере и написав свою первую несложную программу, я обнаружил в ней все тот же проклятый глюк... В то время я уже довольно неп- лохо разбирался в схемотехнике Спектрума, и, найдя у друга схе- му Зоновского "Ленинграда-1", я начал упорно искать причину это- го странного явления. Оказалось, что все очень просто. Клайв Синклер при разработке схемы де- лал основную ставку на дешевизну будущего компьютера и старался делать ее как можно более прос- той и недорогостоящей. Именно из-за этого мы сейчас и страдаем и это касается не только кла- виатуры, но и многого другого: неточная дешифрация внутренних портов, из-за чего сейчас возни- кает немало проблем с подключе- нием дополнительной периферии, невозможность загрузки собствен- ной операционной системы, невозможность прямого программи- рованния портов контроллера НГМД, закрытая архитектура... Но это темы отдельных разговоров и об этом мы еще поднимем вопрос на страницах нашего журнала. Чтобы понять истоки такого странного поведения клавиатуры, нужно повнимательнее присмот- реться к схеме компьютера. Как известно, клавиатура Спектрума представляет собой прямоугольную матрицу размером 5*8, т. е. на нее идут пять проводов данных и восемь проводов адресов: │ │ │ │ │ │ Q┌/ ─┤ W┌/ ─┤ │ │ │ │ A10 <──┴───────┴─────────- - - - (к) │ │ A┌/ ─┤ S┌/ ─┤ │ │ │ │ A9 <──┴───────┴─────────- - - - (к) │ │ Z┌/ ─┤ X┌/ ─┤ │ │ │ │ A8 <──┴───────┴─────────- - - - (к) │ │ │ │ V V D0(к) D1(к) На рисунке изображена только часть схемы клавиатуры. Осталь- ные кнопки сделаны аналогично. Предположим, что пользователь нажал одновременно клавиши "Q", "W" и "A". Посмотрим, что же произошло на самом деле: Как видно из схемы клавиатуры, при нажатии клавиши "Q", замкнутся провода A10(к) и D0(к), при на- жатии клавиши "W", замкнутся A10(к) и D1(к), и, наконец, при нажатии клавиши "A", замкнутся A9(к) и D0(к)... Ну что, уже до- гадались? При нажатии вышепере- численных клавишь соединились: A10(к) с D0(к), A9(к) с D0(к), но это означает, что фактически соединились A10(к) и A9(к), но A10(к) соединен в свою очередь с D1(к), значит соединились прово- да D1(к) и A9(к), откуда можно сделать вывод, что автоматически вместе с "Q","W" и "A", нажалась еще и клавиша "S"!!! Вот так-то вот! И незачем было все валить на программистов и думать что они неправильно опрашивают кла- виатуру. Насколько я знаю схемы наших отечественных компьютеров, все они имеют подобный дефект. Исключение, наверное, составляют компьютеры оснащенные IBM- клавиатурой, но я не могу точно за это поручиться т. к. у меня не было шанса это проверить. Конечно, этот дефект не столь опасен при эксплуатации систем- ных программ и при игре в оди- ночку, но все же неприятно. Пу- тей для решения этой проблемы существует несколько, но мы рас- смотрим лишь один из них: На мой взгляд, проще всего ус- тановить буферные элементы на каждую клавишу ( по крайней мере я не нашел более разумного реше- ния ). Можно например установить пять регистров К555ИР23/К555АП5 на шину адреса клавиатуры или на шину данных. Или, что мне кажет- ся более предпочтительным, - приобрести контроллер IBM- клавиатуры. Технику подключения и схему я приводить не буду, т.к. это зависит от конкретного примера, а рассмотреть все при- меры, я думаю, вряд-ли удастся т. к. их очень много. Себе я не стал устанавливать буферные эле- менты на каждую клавишу, я всего лишь поставил два буфера на пор- ты Синклер-джойстиков т. к. сам я играю очень мало, а младшие братья предпочитают в основном джойстик...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября