kolibrios-gitea/programs/system/mousemul/trunk/mousEmul.ASM

513 lines
5.8 KiB
NASM
Raw Normal View History

; <--- 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