Subversion Repositories Kolibri OS

Rev

Rev 2687 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ; <--- description --->
  2. ; compiler:     FASM 1.67.23
  3. ; name:         Mouse Emulation For KolibriOS
  4. ;-----------------------------------------------------------------------------
  5. ; version:      1.0
  6. ; last update:  04/09/2010
  7. ; written by:   Marat Zakiyanov aka Mario79, aka Mario
  8. ; changes:      total optimization of code,
  9. ;               different events for Up and Down of key Num 5
  10. ;               advansed acceleration mode
  11. ;-----------------------------------------------------------------------------
  12. ; version:      0.8
  13. ; last update:  03/10/2007
  14. ; written by:   Zlobny_Gluk
  15. ; e-mail:       umbrosia@land.ru
  16. ;-----------------------------------------------------------------------------
  17. ; <--- include all KolibriOS stuff --->
  18. ;include "lang.inc"
  19. include '../../../macros.inc'
  20.  
  21. ; <--- start of KolibriOS application --->
  22. MEOS_APP_START
  23.  
  24. ; <--- start of code --->
  25. CODE
  26. ;-----------------------------------------------------------------------------
  27. start:
  28.         xor     ebx,ebx
  29.         mcall   40
  30. @@:
  31.         mcall   23,10  
  32.  
  33.         mcall   66,3
  34.         test    eax,0x80
  35.         jz      @r
  36.  
  37.         mov     ebx,4
  38.         call    hotkeys_common
  39.  
  40.         mcall   40,10b
  41. still:
  42.         mcall   10
  43.        
  44.         cmp     eax,2           ; if event == 2
  45.         jne     still
  46. ;-----------------------------------------------------------------------------
  47. key:                               ; key event handler
  48.         call    mouse_acceleration
  49.  
  50.         mcall   2                  ; get key code
  51.        
  52.         push    eax
  53.         mcall   66,3
  54.         test    eax,0x80
  55.         pop     eax
  56.         jnz     @f
  57.         mov     ebx,5
  58.         call    hotkeys_common 
  59.         jmp     start
  60. @@:
  61.         cmp     al,2
  62.         jne     still
  63.  
  64.         xor     edx,edx
  65.  
  66.         cmp     ah,80   ; Down Num 2
  67.         je      keytwo
  68.         cmp     ah,81   ; Down Num 3
  69.         je      keythree
  70.         cmp     ah,75   ; Down Num 4
  71.         je      keyfour
  72.         cmp     ah,77   ; Down Num 6
  73.         je      keysix
  74.         cmp     ah,71   ; Down Num 7
  75.         je      keyseven
  76.         cmp     ah,72   ; Down Num 8
  77.         je      keyeight
  78.         cmp     ah,73   ; Down Num 9
  79.         je      keynine
  80.         cmp     ah,76   ; Down Num 5
  81.         je      keyfive
  82.         cmp     ah,204  ; Up Num 5
  83.         je      keyfive_1
  84.         cmp     ah,79   ; Down Num 1
  85.         jne     still
  86. ;-----------------------------------------------------------------------------
  87. keyone:
  88.         call    down
  89. keyfour:
  90.         call    left
  91.         jmp     mouseread
  92. ;-----------------------------------------------------------------------------
  93. keythree:
  94.         call    right
  95. keytwo:
  96.         call    down
  97.         jmp     mouseread
  98. ;-----------------------------------------------------------------------------
  99. keyseven:
  100.         call    left
  101. keyeight:
  102.         call    up
  103.         jmp     mouseread
  104. ;-----------------------------------------------------------------------------
  105. keynine:
  106.         call    up
  107. keysix:
  108.         call    right
  109.         jmp     mouseread
  110. ;-----------------------------------------------------------------------------
  111. keyfive:
  112.         inc     edx
  113. keyfive_1:
  114.         mcall   18,19,5
  115.         jmp     still
  116. ;-----------------------------------------------------------------------------
  117. left:
  118.         mov     eax,esi
  119.         shl     eax,16
  120.         sub     edx,eax
  121.         ret
  122. ;-----------------------------------------------------------------------------
  123. right:
  124.         mov     eax,esi
  125.         shl     eax,16
  126.         add     edx,eax
  127.         ret
  128. ;-----------------------------------------------------------------------------
  129. down:
  130.         add     edx,esi
  131.         ret
  132. ;-----------------------------------------------------------------------------
  133. up:
  134.         sub     edx,esi
  135.         ret
  136. ;-----------------------------------------------------------------------------
  137. mouseread:
  138.         xor     ebx,ebx
  139.         mcall   37
  140.         add     edx,eax
  141.  
  142. sravn:
  143.         xor     ebx,ebx
  144.         xor     edi,edi
  145.  
  146. real:
  147.         mov     ebx,edx
  148.         mov     edi,ebx
  149.         shr     ebx,16 ; get x1
  150. ;       shl     edi,16 ; get y1
  151. ;       shr     edi,16
  152.         and     edi,0xffff
  153.  
  154. nullli:
  155.         add     ebx,16
  156.         cmp     ebx,65535
  157.         jg      xmin
  158.         sub     ebx,15
  159.  
  160.         add     edi,16
  161.         cmp     edi,65535
  162.         jg      ymin
  163.         sub     edi,15
  164.  
  165. razr:
  166.         mcall   14
  167.  
  168.         mov     ecx,eax
  169.         shr     eax,16 ; get x2
  170. ;       shl     ecx,16 ; get y2
  171. ;       shr     ecx,16
  172.         and     ecx,0xffff
  173.  
  174. rightdownli:
  175.         cmp     eax,ebx
  176.         jl      xmax
  177.         cmp     ecx,edi
  178.         jl      ymax
  179.  
  180. mousewrite:
  181.         mcall   18,19,4
  182.         mcall   26,9
  183.         mov     [mouse_timer_ticks],eax
  184.         jmp     still
  185. ;-----------------------------------------------------------------------------
  186. mouse_acceleration:
  187.         xor     esi,esi
  188.         inc     esi
  189.         mcall   18,19,2
  190.         mov     ecx,eax
  191.         mcall   26,9
  192.         sub     eax,[mouse_timer_ticks]
  193.         cmp     eax,ecx  ; mouse_delay
  194.         ja      @f
  195.         xor     ecx,ecx
  196.         mcall   18,19   ; checkspeed
  197.         mov     esi,eax
  198.         shl     esi,2
  199. @@:
  200.         ret
  201. ;-----------------------------------------------------------------------------
  202. xmax:
  203.         dec     eax
  204.         dec     ebx
  205.         dec     edi
  206.         shl     eax,16
  207.         add     edi,eax
  208.         mov     edx,edi
  209.         jmp     sravn
  210. ;-----------------------------------------------------------------------------
  211. xmin:
  212.         mov     edx,edi
  213.         jmp     sravn
  214. ;-----------------------------------------------------------------------------
  215. ymax:
  216.         dec     ecx
  217.         dec     ebx
  218.  
  219.         shl     ebx,16
  220.         mov     edi,ebx
  221.         add     edi,ecx
  222.         mov     edx,edi
  223.         jmp     sravn
  224. ;-----------------------------------------------------------------------------
  225. ymin:
  226.         shl     ebx,16
  227.         mov     edx,ebx
  228.         shr     ebx,16
  229.         jmp     sravn
  230. ;-----------------------------------------------------------------------------
  231. hotkeys_common:
  232.         xor     ecx,ecx
  233.         xor     edx,edx
  234.         mov     cl,79   ; Down Num 1
  235.         mcall   66
  236.  
  237.         mov     cl,80   ; Down Num 2
  238.         mcall   66
  239.  
  240.         mov     cl,81   ; Down Num 3
  241.         mcall   66
  242.  
  243.         mov     cl,75   ; Down Num 4
  244.         mcall   66
  245.  
  246.         mov     cl,76   ; Down Num 5
  247.         mcall   66
  248.  
  249.         mov     cl,204 ; Up Num 5
  250.         mcall   66
  251.  
  252.         mov     cl,77   ; Down Num 6
  253.         mcall   66
  254.  
  255.         mov     cl,71   ; Down Num 7
  256.         mcall   66
  257.  
  258.         mov     cl,72   ; Down Num 8
  259.         mcall   66
  260.  
  261.         mov     cl,73   ; Down Num 9
  262.         mcall   66
  263.         ret
  264. ;-----------------------------------------------------------------------------
  265. ; <--- initialised data --->
  266. DATA
  267. ;-----------------------------------------------------------------------------
  268. ; <--- uninitialised data --->
  269. UDATA
  270. mouse_timer_ticks       dd 0
  271. ;-----------------------------------------------------------------------------
  272. MEOS_APP_END
  273. ; <--- end of KolibriOS application --->
  274. ; ZG