|
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:
В этот день... 15 November