forked from KolibriOS/kolibrios
d8ec74dbec
git-svn-id: svn://kolibrios.org@687 a494cfbc-eb01-0410-851d-a64ba20cac60
513 lines
5.8 KiB
NASM
513 lines
5.8 KiB
NASM
; <--- description --->
|
|
; compiler: FASM 1.67.23
|
|
; name: Mouse Emulation For KolibriOS
|
|
; 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:
|
|
|
|
;set an waiting mask
|
|
mcall 40,10b
|
|
|
|
|
|
wait_event_one:
|
|
|
|
call checkspeed
|
|
|
|
|
|
mov eax,66
|
|
mov ebx,3
|
|
int 0x40
|
|
test eax,0x80
|
|
jnz wait_event_two
|
|
|
|
cmp ebp,1
|
|
je unset_hotkeys
|
|
|
|
|
|
mov eax,5
|
|
mov ebx,10
|
|
int 0x40
|
|
|
|
jmp wait_event_one
|
|
|
|
|
|
wait_event_two:
|
|
cmp ebp,0
|
|
je set_hotkeys
|
|
mov ebp,1
|
|
mov eax,10
|
|
int 0x40
|
|
|
|
cmp eax, 2 ; if event == 2
|
|
jmp key ; jump to key handler
|
|
|
|
jmp wait_event_one ; else return to the start of main cycle
|
|
|
|
|
|
|
|
key: ; key event handler
|
|
mov eax, 2 ; get key code
|
|
int 0x40
|
|
cmp al,2
|
|
je mousewriteli
|
|
jmp wait_event_one
|
|
|
|
|
|
|
|
set_hotkeys:
|
|
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,79d
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,80
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,81
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,75
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,76
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,77
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,71
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,72
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,4
|
|
mov cl,73
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
|
|
mov ebp,1
|
|
|
|
jmp wait_event_two
|
|
|
|
|
|
unset_hotkeys:
|
|
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,79
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,80
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,81
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,75
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,76
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,77
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,71
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,72
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
mov eax,66
|
|
mov ebx,5
|
|
mov cl,73
|
|
mov edx,0
|
|
int 0x40
|
|
|
|
|
|
xor ebp,ebp
|
|
|
|
jmp wait_event_one
|
|
|
|
checkspeed:
|
|
mov eax,18
|
|
mov ebx,19
|
|
xor ecx,ecx
|
|
int 0x40
|
|
mov esi,eax
|
|
ret
|
|
|
|
|
|
mouseread:
|
|
|
|
;numchecking
|
|
mov eax,66
|
|
mov ebx,3
|
|
int 0x40
|
|
test eax,0x80
|
|
jz wait_event_one
|
|
|
|
;mousereading
|
|
mov eax,37
|
|
mov ebx,0
|
|
int 0x40
|
|
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
|
|
|
|
nullli:
|
|
add ebx,16
|
|
cmp ebx,65535
|
|
jg xmin
|
|
sub ebx,15
|
|
|
|
add edi,16
|
|
cmp edi,65535
|
|
jg ymin
|
|
sub edi,15
|
|
|
|
razr:
|
|
mov eax,14
|
|
int 0x40
|
|
|
|
|
|
mov ecx,eax
|
|
shr eax,16 ; get x2
|
|
shl ecx,16 ; get y2
|
|
shr ecx,16
|
|
|
|
rightdownli:
|
|
cmp eax,ebx
|
|
jl xmax
|
|
cmp ecx,edi
|
|
jl ymax
|
|
|
|
|
|
mousewrite:
|
|
mov eax,18
|
|
mov ebx,19
|
|
mov ecx,4
|
|
int 0x40
|
|
jmp wait_event_one
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mousewriteli:
|
|
cmp ah,79
|
|
je keyone
|
|
cmp ah,80
|
|
je keytwo
|
|
cmp ah,81
|
|
je keythree
|
|
cmp ah,75
|
|
je keyfour
|
|
cmp ah,77
|
|
je keysix
|
|
cmp ah,71
|
|
je keyseven
|
|
cmp ah,72
|
|
je keyeight
|
|
cmp ah,73
|
|
je keynine
|
|
cmp ah,76
|
|
je keyfive
|
|
|
|
jmp wait_event_one
|
|
|
|
|
|
;how_much_time:
|
|
;mov eax,26
|
|
;mov ebx,9
|
|
;int 0x40
|
|
;push eax
|
|
;ret
|
|
|
|
|
|
;oldkeyvsyakoe!
|
|
;incesi:
|
|
;inc esi
|
|
;ret
|
|
|
|
;nullesi:
|
|
;xor esi, esi
|
|
;ret
|
|
|
|
|
|
;oldkey:
|
|
;cmp ah, bh
|
|
;je incesi
|
|
;cmp ah, bh
|
|
;jne nullesi
|
|
;ret
|
|
|
|
|
|
keyone:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call left
|
|
call down
|
|
xor ah,ah
|
|
mov bh,79
|
|
jmp mouseread
|
|
|
|
keytwo:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call down
|
|
call down
|
|
xor ah,ah
|
|
mov bh,80
|
|
jmp mouseread
|
|
|
|
keythree:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call right
|
|
call down
|
|
xor ah,ah
|
|
mov bh,81
|
|
jmp mouseread
|
|
|
|
keyfour:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call left
|
|
call left
|
|
xor ah,ah
|
|
mov bh,75
|
|
jmp mouseread
|
|
|
|
keysix:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call right
|
|
call right
|
|
xor ah,ah
|
|
mov bh,77
|
|
jmp mouseread
|
|
|
|
keyseven:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call left
|
|
call up
|
|
xor ah,ah
|
|
mov bh,71
|
|
jmp mouseread
|
|
|
|
keyeight:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call up
|
|
call up
|
|
xor ah,ah
|
|
mov bh,72
|
|
jmp mouseread
|
|
|
|
keynine:
|
|
|
|
;call oldkey
|
|
xor edx,edx
|
|
call right
|
|
call up
|
|
xor ah,ah
|
|
mov bh,73
|
|
jmp mouseread
|
|
|
|
keyfive:
|
|
|
|
mcall 18, 19, 5, 1
|
|
mov eax,5
|
|
mov ebx,1
|
|
int 0x40
|
|
mcall 18, 19, 5, 0
|
|
jmp wait_event_one
|
|
|
|
|
|
|
|
|
|
left:
|
|
mov eax,esi
|
|
|
|
leftstart:
|
|
dec eax
|
|
sub edx,65536
|
|
cmp eax,0
|
|
ja leftstart
|
|
ret
|
|
|
|
|
|
right:
|
|
mov eax,esi
|
|
|
|
rightstart:
|
|
dec eax
|
|
add edx,65536
|
|
cmp eax,0
|
|
ja rightstart
|
|
ret
|
|
|
|
|
|
down:
|
|
mov eax,esi
|
|
|
|
downstart:
|
|
dec eax
|
|
add edx,1
|
|
cmp eax,0
|
|
ja downstart
|
|
ret
|
|
|
|
|
|
up:
|
|
mov eax,esi
|
|
|
|
upstart:
|
|
dec eax
|
|
sub edx,1
|
|
cmp eax,0
|
|
ja upstart
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; <--- initialised data --->
|
|
DATA
|
|
|
|
|
|
; <--- uninitialised data --->
|
|
UDATA
|
|
|
|
|
|
MEOS_APP_END
|
|
; <--- end of KolibriOS application --->
|
|
; ZG |