Unsteady News #08
07 июля 1997

╔═════╦════════════════════════════════════════════════════════╗
║  4  ║                 Kempstone Mouse                        ║
╚═════╩════════════════════════════════════════════════════════╝
(c) CODEMAN.

 В  данной  статье  я  попытаюсь  разьяснить как программировать
                        Kempstone Mouse.

                      Для начала о портах:

#FADF-отображает состояние кнопок мыши. Роль играют только млад-
шие  три бита. Если бит сброшен-кнопка нажата. Если бит установ-
                     лен-кнопка не нажата.

                           Например:
LD BC,#FADF
IN A,(C)
RRA
JP NC,BUTTON1;переход если нажата первая кнопка.
RRA
JP NC,BUTTON2;переход если нажата вторая кнопка.
...

 #FBDF-перемещение по X-координате.
 #FFDF-перемещение по Y-координате.
:
При движении мышки вправо или вверх числа в соответствующих пор-
тах  увеличиваются  циклически,  т.е.  дойдя до 255 становится 0
т.д.  Аналогично  если  вы двигаете мышку влево или вниз, только
числа уменьшаются. Чем быстрее вы двините мышку тем больше изме-
нится число в порте. Понятней будет если вы разберетесь в следу-
щей проге.

KEY_SCAN
         LD BC,#FBDF; читаем порт
         IN A,(C)   ;
MK3      CP 00      ; сравниваем с предыдущим значением
         JR Z,MK    ; обходим вызов если числа равны
         CALL KOORX ; вызываем если не равны
MK
         LD BC,#FFDF; читаем порт
         IN A,(C)   ;
MK4      CP 00      ; сравниваем
         JR Z,MK2   ; обходим вызов
         CALL KOORY ;
MK2
         ...        ; дальнейшая прога

KOORX
         JP M,METKA  ; переходим если число уменьшилось
         PUSH AF     ; сохраняем число
         LD A,(MK3+1); берем старое значение
         LD B,A      ; заносим в B
         POP AF      ; восстанавливаем
         LD (MK3+1),A; заносим на место старого новое
         SUB B       ; отнимаем
         ADD A,A     ; складываем чтоб мыша двигалась быстрее
         LD (STEP),A ; заносим в ячейку изменение
         CALL RIGHT  ; вызываем прогу для вычисления новых коор.
         RET         ; возврат
METKA
         PUSH AF     ; все тоже самое
         LD A,(MK3+1);
         LD B,A      ;
         POP AF      ;
         LD (MK3+1),A;
         CALL CHANGE ; вызываем обмен
         SUB B       ;
         ADD A,A     ;
         LD (STEP),A ;
         CALL LEFT   ;
         RET         ;
CHANGE
         LD D,A      ;
         LD A,B      ;
         LD B,D      ;
         RET         ;
KOORY
         JP M,METKA2 ;
         PUSH AF     ; тоже только для Y координат
         LD A,(MK4+1);
         LD B,A      ;
         POP AF      ;
         LD (MK4+1),A;
         SUB B       ;
         ADD A,A     ;
         LD (STEP),A ;
         CALL UP     ;
         RET         ;
METKA2
         PUSH AF     ;
         LD A,(MK4+1);
         LD B,A      ;
         POP AF      ;
         LD (MK4+1),A;
         CALL BOL    ;
         SUB B       ;
         ADD A,A     ;
         LD (STEP),A ;
         CALL DOWN   ;
         RET         ;

STEP     DB #00      ; шаг стрелки

                    Теперь общие пояснения:

Разница  между старым и новым значением и есть шаг и с ним можно
делать  все  что  хотите, я умножаю его на два (ADD A,A) чтоб за
один шаг стрелка сдвигалась на два пиксела. Как понятно отнимать
надо  меньшее  из большего и при движении мышки вправо или вверх
так и происходит старое значение всегда меньше нового.А вот ког-
да  мышу  двигали  в  обратном направлении то старое число будет
больше  нового  и  поэтому мы вызываем прогу CHANGE.Вычислив шаг
вызывается подпрограмма для вычисления новых координат стрелки.

        Надеюсь данная статья хоть немного поможет вам.

 ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄



Other articles:


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

Similar articles:
System - Overview of system programming: ZX-IBM Editor v1.5M, PPF v1.05, Multistudio v2.0p, Mods Player v2.0, Bitmap Viewer v2.0, Corrector v2.0, Storm v1.1, 866 v1.2, HRUM v3.5, TDU v1.0, HRUST v1.0, RLE-Compressor v1.21, Overlays Consul Commander.

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