|
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- клавиатуры. Технику подключения и схему я приводить не буду, т.к. это зависит от конкретного примера, а рассмотреть все при- меры, я думаю, вряд-ли удастся т. к. их очень много. Себе я не стал устанавливать буферные эле- менты на каждую клавишу, я всего лишь поставил два буфера на пор- ты Синклер-джойстиков т. к. сам я играю очень мало, а младшие братья предпочитают в основном джойстик...
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3