ОПРОС 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ч-
ника преследуется по закону! :)
------------------------------------------
Other articles: