ZX Element
#01
17 ноября 1997 |
|
Программистам - правильный опрос Kempston Joystik'a.
ОПРОС KEMPSTON'A B ПРОГРАММАХ _______________________________ (C) 1997 Deton при поддержке Flyer'а ---------------------- ZX-LEGION Ketpston включен - хорошо, а не включен - плохо! Маяковский B. + Deton Друзья!!! Сразу предупредаю нервных ко- деров, владельцев белых коней и т.п. бра- тию: тию: ЧИТАТЬ НЕ РЕКОМЕНДУЕТСЯ! Хочу поведать вам об одном печальном факте: у меня нет ketpston-joystic'а :( . "Ну и что? A у меня нет ЗОЛОТОЙ ПОДУ- ШEЧКИ!" - заметишь Ты, достопочтимый чита- тель. Это, конечно, так, но как бы Вам понравилось например такое: ZX-FORMAT 7. VGA version only. Так ведут себя и некоторые программеры, которые просто уверены, что у меня ДОЛЖЕН БЫТЬ вышеупомянутый джойстик. Я как-то давно разбирался с подобным прогом, заме- няя при помощи непревзойденной STS'ки все найденые команды типа "IN A,(#1F)" на "XOR A:NOP". Итак, однажды, сев почитать Минскую Итак, однажды, сев почитать Минскую прессу, наткнулся на "MASK #00". Велико же было мое удивление, когда предо мной заме- лькал текст. Хорошо, что он остановился на последней страничке и я смог узнать имя автора сего издевательства. На экране то- лько не хватало надписи: WELCOME TO THE HELL, dear user without ketpston Чтож, Space5, рановато ты стал изгoтав- ливать "шедевры". Взял бы пример с того же LPRINT'а. Все как у людей: есть джойстик - ткни в кнопку, а нету - без проблем, могу и так работать. Ладно, статья писалась не для того, чтобы наехать на Space5. Немало людей, которые пишут программу под опреде- ленный круг пользователей, а зря! Не всег- да есть время исправлять эту ошибку... Вот я и решил представить на суд читателей программку, которую можно использования в программку, которую можно использования в данном случае. Она позволяет опрашивать одновременно и кемпстон, и клавиатуру: =========={ прог ьу Deton (c) }=========== IN A,(#1F) ;Прог должен начи- AND %11111 ;наться с этого кус- JR Z,$+7 ;ка. LD A,#AF ;Можно оформить и LD (OPROS),A ;как подпрограмму. START .......... ;Здесь начинается ;ваша программа. CALL OPROS ;Вызов процедуры оп- ;роса клавиатуры и ;джойстика. LD A,C ;Анализ нажатия кла- LD A,C ;Анализ нажатия кла- ;виш. .......... ;Продолжается ваша ;программа. OPROS IN A,(#1F) ;Процедура опроса LD C,A ;клавы и джойстика. LD HL,KEYS KBDJ1 LD A,(HL) ;На выходе: C=число AND A ;(см. ниже). RET Z INC HL IN A,(#FE) CPL AND (HL) INC HL JP Z,KBDJ2 LD A,(HL) OR C LD C,A KBDJ2 INC HL KBDJ2 INC HL JP KBDJ1 KEYS DEFB #FB,%11111,%01000 ;Таблица. DEFB #EF,%01000,%00001 DEFB #FD,%11111,%00100 ;Формат DEFB #EF,%10000,%00010 ;см. ниже DEFB #DF,%00010,%00010 DEFB #EF,%00010,%01000 DEFB #DF,%00001,%00001 DEFB #EF,%00100,%00100 DEFB #7F,%11111,%10000 DEFB #FE,%11111,%10000 DEFB #BF,%00001,%10000 DEFB #EF,%00001,%10000 DEFB 0 ========================================== Сначала объясню формат таблицы KEYS. Сначала объясню формат таблицы KEYS. ------------------------------------------ Номер байта| Значение -----------+------------------------------ 1 | Младший байт порта клавиату- |ры (полуряда). -----------+------------------------------ 2 | Маска (анализируемая клавиша |маскируется 1). -----------+------------------------------ 3 | Код направления (аналогично |кодам джойстика). ------------------------------------------ Таблица должна заканчиваться кодом "0"! Для незнающих значение битов джойстика: ------------------------------------------ 7 6 5 | 4 | 3 | 2 | 1 | 0 | | | | | | | | | | НЕ ИСП. |ОГОНЬ|ВВЕРХ|ВНИЗ |ВЛЕВО|ВПРАВО ------------------------------------------ Теперь o процедуре опроса. Она считыва- ет состояние джойстика (если тот есть, иначе аккумулятор обнуляется), затем по таблице сканируется таблица, фиксируется нажатие заданных клавиш и в регистре C выставляются биты, соответствующие битам джойстика. После возврата из процедуры ре- зультат хранится в reg C. Ну вот, вроде бы, и все. Юзайте наздo- pobbe. Warning!!! Attention!!! Увага!!! Внимание Использование без указания первoистoч- ника преследуется по закону! :) ------------------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября