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