forked from KolibriOS/kolibrios
d47a233b2a
1) total optimization of code 2) different events for Up and Down of key Num 5 3) advansed acceleration mode git-svn-id: svn://kolibrios.org@1601 a494cfbc-eb01-0410-851d-a64ba20cac60
274 lines
5.4 KiB
NASM
274 lines
5.4 KiB
NASM
; <--- description --->
|
|
; compiler: FASM 1.67.23
|
|
; name: Mouse Emulation For KolibriOS
|
|
;-----------------------------------------------------------------------------
|
|
; version: 1.0
|
|
; last update: 04/09/2010
|
|
; written by: Marat Zakiyanov aka Mario79, aka Mario
|
|
; changes: total optimization of code,
|
|
; different events for Up and Down of key Num 5
|
|
; advansed acceleration mode
|
|
;-----------------------------------------------------------------------------
|
|
; version: 0.8
|
|
; last update: 03/10/2007
|
|
; written by: Zlobny_Gluk
|
|
; e-mail: umbrosia@land.ru
|
|
;-----------------------------------------------------------------------------
|
|
; <--- include all KolibriOS stuff --->
|
|
;include "lang.inc"
|
|
include '../../../macros.inc'
|
|
|
|
; <--- start of KolibriOS application --->
|
|
MEOS_APP_START
|
|
|
|
; <--- start of code --->
|
|
CODE
|
|
;-----------------------------------------------------------------------------
|
|
start:
|
|
xor ebx,ebx
|
|
mcall 40
|
|
@@:
|
|
mcall 23,10
|
|
|
|
mcall 66,3
|
|
test eax,0x80
|
|
jz @r
|
|
|
|
mov ebx,4
|
|
call hotkeys_common
|
|
|
|
mcall 40,10b
|
|
still:
|
|
mcall 10
|
|
|
|
cmp eax,2 ; if event == 2
|
|
jne still
|
|
;-----------------------------------------------------------------------------
|
|
key: ; key event handler
|
|
call mouse_acceleration
|
|
|
|
mcall 2 ; get key code
|
|
|
|
push eax
|
|
mcall 66,3
|
|
test eax,0x80
|
|
pop eax
|
|
jnz @f
|
|
mov ebx,5
|
|
call hotkeys_common
|
|
jmp start
|
|
@@:
|
|
cmp al,2
|
|
jne still
|
|
|
|
xor edx,edx
|
|
|
|
cmp ah,80 ; Down Num 2
|
|
je keytwo
|
|
cmp ah,81 ; Down Num 3
|
|
je keythree
|
|
cmp ah,75 ; Down Num 4
|
|
je keyfour
|
|
cmp ah,77 ; Down Num 6
|
|
je keysix
|
|
cmp ah,71 ; Down Num 7
|
|
je keyseven
|
|
cmp ah,72 ; Down Num 8
|
|
je keyeight
|
|
cmp ah,73 ; Down Num 9
|
|
je keynine
|
|
cmp ah,76 ; Down Num 5
|
|
je keyfive
|
|
cmp ah,204 ; Up Num 5
|
|
je keyfive_1
|
|
cmp ah,79 ; Down Num 1
|
|
jne still
|
|
;-----------------------------------------------------------------------------
|
|
keyone:
|
|
call down
|
|
keyfour:
|
|
call left
|
|
jmp mouseread
|
|
;-----------------------------------------------------------------------------
|
|
keythree:
|
|
call right
|
|
keytwo:
|
|
call down
|
|
jmp mouseread
|
|
;-----------------------------------------------------------------------------
|
|
keyseven:
|
|
call left
|
|
keyeight:
|
|
call up
|
|
jmp mouseread
|
|
;-----------------------------------------------------------------------------
|
|
keynine:
|
|
call up
|
|
keysix:
|
|
call right
|
|
jmp mouseread
|
|
;-----------------------------------------------------------------------------
|
|
keyfive:
|
|
inc edx
|
|
keyfive_1:
|
|
mcall 18,19,5
|
|
jmp still
|
|
;-----------------------------------------------------------------------------
|
|
left:
|
|
mov eax,esi
|
|
shl eax,16
|
|
sub edx,eax
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
right:
|
|
mov eax,esi
|
|
shl eax,16
|
|
add edx,eax
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
down:
|
|
add edx,esi
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
up:
|
|
sub edx,esi
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
mouseread:
|
|
xor ebx,ebx
|
|
mcall 37
|
|
add edx,eax
|
|
|
|
sravn:
|
|
xor ebx,ebx
|
|
xor edi,edi
|
|
|
|
real:
|
|
mov ebx,edx
|
|
mov edi,ebx
|
|
shr ebx,16 ; get x1
|
|
; shl edi,16 ; get y1
|
|
; shr edi,16
|
|
and edi,0xffff
|
|
|
|
nullli:
|
|
add ebx,16
|
|
cmp ebx,65535
|
|
jg xmin
|
|
sub ebx,15
|
|
|
|
add edi,16
|
|
cmp edi,65535
|
|
jg ymin
|
|
sub edi,15
|
|
|
|
razr:
|
|
mcall 14
|
|
|
|
mov ecx,eax
|
|
shr eax,16 ; get x2
|
|
; shl ecx,16 ; get y2
|
|
; shr ecx,16
|
|
and ecx,0xffff
|
|
|
|
rightdownli:
|
|
cmp eax,ebx
|
|
jl xmax
|
|
cmp ecx,edi
|
|
jl ymax
|
|
|
|
mousewrite:
|
|
mcall 18,19,4
|
|
mcall 26,9
|
|
mov [mouse_timer_ticks],eax
|
|
jmp still
|
|
;-----------------------------------------------------------------------------
|
|
mouse_acceleration:
|
|
xor esi,esi
|
|
inc esi
|
|
mcall 18,19,2
|
|
mov ecx,eax
|
|
mcall 26,9
|
|
sub eax,[mouse_timer_ticks]
|
|
cmp eax,ecx ; mouse_delay
|
|
ja @f
|
|
xor ecx,ecx
|
|
mcall 18,19 ; checkspeed
|
|
mov esi,eax
|
|
shl esi,2
|
|
@@:
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
xmax:
|
|
dec eax
|
|
dec ebx
|
|
dec edi
|
|
shl eax,16
|
|
add edi,eax
|
|
mov edx,edi
|
|
jmp sravn
|
|
;-----------------------------------------------------------------------------
|
|
xmin:
|
|
mov edx,edi
|
|
jmp sravn
|
|
;-----------------------------------------------------------------------------
|
|
ymax:
|
|
dec ecx
|
|
dec ebx
|
|
|
|
shl ebx,16
|
|
mov edi,ebx
|
|
add edi,ecx
|
|
mov edx,edi
|
|
jmp sravn
|
|
;-----------------------------------------------------------------------------
|
|
ymin:
|
|
shl ebx,16
|
|
mov edx,ebx
|
|
shr ebx,16
|
|
jmp sravn
|
|
;-----------------------------------------------------------------------------
|
|
hotkeys_common:
|
|
xor ecx,ecx
|
|
xor edx,edx
|
|
mov cl,79 ; Down Num 1
|
|
mcall 66
|
|
|
|
mov cl,80 ; Down Num 2
|
|
mcall 66
|
|
|
|
mov cl,81 ; Down Num 3
|
|
mcall 66
|
|
|
|
mov cl,75 ; Down Num 4
|
|
mcall 66
|
|
|
|
mov cl,76 ; Down Num 5
|
|
mcall 66
|
|
|
|
mov cl,204 ; Up Num 5
|
|
mcall 66
|
|
|
|
mov cl,77 ; Down Num 6
|
|
mcall 66
|
|
|
|
mov cl,71 ; Down Num 7
|
|
mcall 66
|
|
|
|
mov cl,72 ; Down Num 8
|
|
mcall 66
|
|
|
|
mov cl,73 ; Down Num 9
|
|
mcall 66
|
|
ret
|
|
;-----------------------------------------------------------------------------
|
|
; <--- initialised data --->
|
|
DATA
|
|
;-----------------------------------------------------------------------------
|
|
; <--- uninitialised data --->
|
|
UDATA
|
|
mouse_timer_ticks dd 0
|
|
;-----------------------------------------------------------------------------
|
|
MEOS_APP_END
|
|
; <--- end of KolibriOS application --->
|
|
; ZG |