ZXNet эхоконференция «code.zx»
тема: Прогрессивный драйвер кемпстон мауса.
от: Kirill Frolov
кому: All
дата: 16 Sep 1998
├┤i, All !
Маус типа кемпстон получает все большее распространение, а никакого
прогресса не наблюдается. В этом просто убедиться запустив первую
попавшуюся программу где есть стрелка и управляется он чем угодно, но
не маусом :-( . Hо это еще половина беды - чтобы двигать стрелку на
большие расстояния надо неплохо размахивать руками (Ц) Медноногов из
zx.spectrum. Hу чтобы руками не размахивать и стрелка не дергалась
при небольшом перемещении есть прогрессивный драйвер мауса в котором
величина смещения мауса умножается на скорость его перемещения. Т.е.
чем быстрее, тем дальше при перемещении на одно расстояние. В резуль-
тате не надо размахивать руками чтобы передвигат стрелку на большое
расстояние и не надо долго и мучительно пытаться передвинуть ее на
1 пиксель - при медленном перемещении все плавно.
Вот сам драйвер (ц) Медноногов.
OLDCO DEFW 0 ;
COORD DEFW 0 ;координаты (х-младший, y-старший)
CONTRB DEFB #FF ;три младших бита - кнопки
MOUSDRV LD BC,#FBDF
LD DE,(OLDCO)
LD HL,(COORD)
IN A,(C) ;вычисление X
LD (OLDCO),A
SUB E
JR Z,MSEx0
JP P,MSEx1
NEG
CALL MSElog
NEG
ADD A,L
JR C,MSExe
XOR A
JR MSExe
MSEx1 CALL MSElog
ADD A,L
JR C,MSEx11
CP 254 ;max X
JR C,MSExe
MSEx11 LD A,254 ;max X
MSExe LD L,A
MSEx0 LD B,#FF ;вычисление Y
IN A,(C)
LD (OLDCO+1),A
SUB D
JR Z,MSEy0
JP M,MSEy1
CALL MSElog
NEG
ADD A,H
JR C,MSEye
XOR A
JR MSEye
MSEy1 NEG
CALL MSElog
ADD A,H
JR C,MSEy11
CP 190 ;max Y
JR C,MSEye
MSEy11 LD A,190 ;max Y
MSEye LD H,A
MSEy0 LD (COORD),HL
LD B,#FA ;кнопки
IN A,(C)
LD (CONTRB),A
RET
;
MSElog CP 4 ;мышка с ускорением
RET C
ADD A,A
JR C,MSElgC
CP 8*2
RET C
ADD A,8
JR C,MSElgC
CP 120
RET C
MSElgC LD A,120
RET
Как оно работает - не вникал. Комментариев нет. Hо принцип ясен.
|