ZX Element #01
17 ноября 1997

       ОПРОС 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:


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
Amiga UMA - Pros and cons of Unified Memory Architecture.
Advertising - rekalama and announcements of carpets and more.

В этот день...   21 November